From 704d14c6ba0711bff358319a153f8c605310db0b Mon Sep 17 00:00:00 2001 From: rotiV3 Date: Tue, 30 Jan 2024 20:19:04 +0000 Subject: [PATCH] 0.0.0.1.1 - Added lockpick main window --- .../Renderers/WPF/WpfInteractionManager.cs | 7 +- DamnOverSharp/Renderers/WPF/WpfRenderer.cs | 7 +- .../WPF.UiLibrary/VirtualButton.xaml.cs | 2 +- .../VirtualMouseCaptureArea.xaml | 2 +- ...p_2obhwbcj_wpftmp.csproj.nuget.dgspec.json | 162 + ...Sharp_2obhwbcj_wpftmp.csproj.nuget.g.props | 21 + ...arp_2obhwbcj_wpftmp.csproj.nuget.g.targets | 6 + ...p_arnpkq5p_wpftmp.csproj.nuget.dgspec.json | 162 + ...Sharp_arnpkq5p_wpftmp.csproj.nuget.g.props | 21 + ...arp_arnpkq5p_wpftmp.csproj.nuget.g.targets | 6 + .../obj/Debug/DamnOverSharp.1.0.1.nuspec | 2 +- .../Debug/net48/DamnOverSharp.AssemblyInfo.cs | 2 +- .../DamnOverSharp.AssemblyInfoInputs.cache | 2 +- ...mnOverSharp.csproj.AssemblyReference.cache | Bin 15222 -> 17792 bytes .../DamnOverSharp.csproj.FileListAbsolute.txt | 1 - .../obj/Debug/net48/DamnOverSharp.dll | Bin 33792 -> 34816 bytes .../obj/Debug/net48/DamnOverSharp.g.resources | Bin 4840 -> 4824 bytes .../obj/Debug/net48/DamnOverSharp.pdb | Bin 13636 -> 13664 bytes .../Debug/net48/DamnOverSharp.sourcelink.json | 1 - ...nOverSharp_2obhwbcj_wpftmp.AssemblyInfo.cs | 25 + ...p_2obhwbcj_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_2obhwbcj_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...nOverSharp_3pbnv5xp_wpftmp.AssemblyInfo.cs | 25 + ...p_3pbnv5xp_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_3pbnv5xp_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...nv5xp_wpftmp.csproj.BuildWithSkipAnalyzers | 0 .../net48/DamnOverSharp_MarkupCompile.i.cache | 2 +- .../net48/DamnOverSharp_MarkupCompile.lref | 2 +- ...nOverSharp_arnpkq5p_wpftmp.AssemblyInfo.cs | 25 + ...p_arnpkq5p_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_arnpkq5p_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...nOverSharp_ef5tj4se_wpftmp.AssemblyInfo.cs | 25 + ...p_ef5tj4se_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_ef5tj4se_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...tj4se_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_eny5xugz_wpftmp.AssemblyInfo.cs | 25 + ...p_eny5xugz_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_eny5xugz_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...5xugz_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_ezut4rhk_wpftmp.AssemblyInfo.cs | 25 + ...p_ezut4rhk_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_ezut4rhk_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...t4rhk_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_gvudj0if_wpftmp.AssemblyInfo.cs | 25 + ...p_gvudj0if_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_gvudj0if_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...dj0if_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_hebfdavf_wpftmp.AssemblyInfo.cs | 25 + ...p_hebfdavf_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_hebfdavf_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...fdavf_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_hv2duv2l_wpftmp.AssemblyInfo.cs | 25 + ...p_hv2duv2l_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_hv2duv2l_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...duv2l_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_lbrqivq2_wpftmp.AssemblyInfo.cs | 25 + ...p_lbrqivq2_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_lbrqivq2_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...qivq2_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_tp3k1m43_wpftmp.AssemblyInfo.cs | 25 + ...p_tp3k1m43_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_tp3k1m43_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...k1m43_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_u4ennasy_wpftmp.AssemblyInfo.cs | 25 + ...p_u4ennasy_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_u4ennasy_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...nnasy_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_vunuwlpe_wpftmp.AssemblyInfo.cs | 25 + ...p_vunuwlpe_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_vunuwlpe_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...uwlpe_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_z2udlavr_wpftmp.AssemblyInfo.cs | 25 + ...p_z2udlavr_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_z2udlavr_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...dlavr_wpftmp.csproj.BuildWithSkipAnalyzers | 0 ...nOverSharp_zt3oikxv_wpftmp.AssemblyInfo.cs | 25 + ...p_zt3oikxv_wpftmp.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 5 + ...DamnOverSharp_zt3oikxv_wpftmp.assets.cache | Bin 0 -> 1984 bytes ...oikxv_wpftmp.csproj.BuildWithSkipAnalyzers | 0 .../net48/GeneratedInternalTypeHelper.g.cs | 62 +- .../net48/WPF.UiLibrary/VirtualButton.g.i.cs | 2 +- .../VirtualMouseCaptureArea.baml | Bin 1178 -> 1162 bytes .../VirtualMouseCaptureArea.g.cs | 2 +- .../VirtualMouseCaptureArea.g.i.cs | 4 +- .../net48/WPF.UiLibrary/VirtualTextBox.g.i.cs | 2 +- Example/.vs/Example.csproj.dtbcache.json | 2 +- Example/Connectors/GetPlayerInfo.cs | 12 +- Example/Connectors/GetSquadPlayerMember.cs | 2 +- Example/Connectors/SendPackOrder.cs | 2 +- Example/Connectors/SendTaxi.cs | 2 +- Example/Example.csproj | 9 + Example/Img/BCU_green.png | Bin 0 -> 208586 bytes Example/Img/BCU_red.png | Bin 0 -> 211422 bytes Example/Img/Defuse.png | Bin 0 -> 47602 bytes Example/Img/advance.png | Bin 0 -> 20655 bytes Example/Img/diallock.png | Bin 0 -> 455585 bytes Example/Img/easy.png | Bin 0 -> 123986 bytes Example/Img/medium.png | Bin 0 -> 129758 bytes Example/Ingame/IngameControl.xaml | 61 +- Example/Ingame/IngameControl.xaml.cs | 33 +- Example/Ingame/overlay.xaml | 21 +- Example/Ingame/overlay.xaml.cs | 37 +- Example/MainWindow.xaml.cs | 9 +- Example/Models/PlayerInfoModule.cs | 24 +- ...gnTimeResolveAssemblyReferencesInput.cache | Bin 3452 -> 3420 bytes .../Example.csproj.AssemblyReference.cache | Bin 15495 -> 16989 bytes Example/obj/Debug/Example.exe | Bin 1208320 -> 2412544 bytes Example/obj/Debug/Example.g.resources | Bin 1141953 -> 2341247 bytes Example/obj/Debug/Example.pdb | Bin 273920 -> 288256 bytes Example/obj/Debug/Example_Content.g.i.cs | 85 +- Example/obj/Debug/Example_MarkupCompile.cache | 20 + .../obj/Debug/Example_MarkupCompile.i.cache | 20 + Example/obj/Debug/Example_MarkupCompile.lref | 8 + Example/obj/Debug/Ingame/IngameControl.g.cs | 190 + Example/obj/Debug/Ingame/IngameControl.g.i.cs | 94 +- Example/obj/Debug/Ingame/overlay.g.cs | 158 + Example/obj/Debug/Ingame/overlay.g.i.cs | 35 +- Example/obj/Debug/MainWindow.g.cs | 3 - Example/obj/Debug/MainWindow.g.i.cs | 3 - .../Debug/net462/Gma.System.MouseKeyHook.dll | Bin 61440 -> 61440 bytes .../Debug/net462/Gma.System.MouseKeyHook.pdb | Bin 235008 -> 235008 bytes .../Debug/net462/MouseKeyHook.AssemblyInfo.cs | 2 +- .../MouseKeyHook.AssemblyInfoInputs.cache | 2 +- .../MouseKeyHook.csproj.FileListAbsolute.txt | 1 - .../Debug/net462/MouseKeyHook.sourcelink.json | 1 - .../Debug/net472/Gma.System.MouseKeyHook.dll | Bin 61440 -> 61440 bytes .../Debug/net472/Gma.System.MouseKeyHook.pdb | Bin 235008 -> 235008 bytes .../Debug/net472/MouseKeyHook.AssemblyInfo.cs | 2 +- .../MouseKeyHook.AssemblyInfoInputs.cache | 2 +- .../MouseKeyHook.csproj.FileListAbsolute.txt | 1 - .../Debug/net472/MouseKeyHook.sourcelink.json | 1 - .../netcoreapp3.1/Gma.System.MouseKeyHook.dll | Bin 65536 -> 65536 bytes .../netcoreapp3.1/Gma.System.MouseKeyHook.pdb | Bin 235008 -> 235008 bytes .../MouseKeyHook.AssemblyInfo.cs | 2 +- .../MouseKeyHook.AssemblyInfoInputs.cache | 2 +- .../MouseKeyHook.csproj.FileListAbsolute.txt | 1 - .../MouseKeyHook.sourcelink.json | 1 - RenderHookAPI/CaptureProcess.cs | 4 +- RenderHookAPI/bin/Capture.dll | Bin 0 -> 115200 bytes RenderHookAPI/bin/Capture.pdb | Bin 0 -> 247296 bytes RenderHookAPI/bin/EasyHook.dll | Bin 0 -> 52224 bytes RenderHookAPI/bin/EasyHook.xml | 2146 + RenderHookAPI/bin/EasyHook32.dll | Bin 0 -> 268288 bytes RenderHookAPI/bin/EasyHook32Svc.exe | Bin 0 -> 8192 bytes RenderHookAPI/bin/EasyHook64.dll | Bin 0 -> 310272 bytes RenderHookAPI/bin/EasyHook64Svc.exe | Bin 0 -> 8192 bytes RenderHookAPI/bin/EasyLoad32.dll | Bin 0 -> 7680 bytes RenderHookAPI/bin/EasyLoad64.dll | Bin 0 -> 7680 bytes RenderHookAPI/bin/SharpDX.D3DCompiler.dll | Bin 0 -> 60416 bytes RenderHookAPI/bin/SharpDX.D3DCompiler.xml | 6852 ++ RenderHookAPI/bin/SharpDX.DXGI.dll | Bin 0 -> 139776 bytes RenderHookAPI/bin/SharpDX.DXGI.xml | 10094 +++ RenderHookAPI/bin/SharpDX.Desktop.dll | Bin 0 -> 46592 bytes RenderHookAPI/bin/SharpDX.Desktop.xml | 469 + RenderHookAPI/bin/SharpDX.Direct2D1.dll | Bin 0 -> 507904 bytes RenderHookAPI/bin/SharpDX.Direct2D1.xml | 56530 ++++++++++++++++ RenderHookAPI/bin/SharpDX.Direct3D10.dll | Bin 0 -> 177152 bytes RenderHookAPI/bin/SharpDX.Direct3D10.xml | 23553 +++++++ .../bin/SharpDX.Direct3D11.Effects.dll | Bin 0 -> 57856 bytes .../bin/SharpDX.Direct3D11.Effects.xml | 5240 ++ RenderHookAPI/bin/SharpDX.Direct3D11.dll | Bin 0 -> 285696 bytes RenderHookAPI/bin/SharpDX.Direct3D11.xml | 37730 +++++++++++ RenderHookAPI/bin/SharpDX.Direct3D9.dll | Bin 0 -> 347136 bytes RenderHookAPI/bin/SharpDX.Direct3D9.xml | 36489 ++++++++++ RenderHookAPI/bin/SharpDX.Mathematics.dll | Bin 0 -> 220672 bytes RenderHookAPI/bin/SharpDX.Mathematics.xml | 16396 +++++ RenderHookAPI/bin/SharpDX.dll | Bin 0 -> 278016 bytes RenderHookAPI/bin/SharpDX.xml | 38946 +++++++++++ .../bin/sharpdx_direct3d11_1_effects_x64.dll | Bin 0 -> 358912 bytes .../bin/sharpdx_direct3d11_1_effects_x86.dll | Bin 0 -> 298496 bytes RenderHookAPI/obj/Debug/Capture.dll | Bin 115200 -> 115200 bytes RenderHookAPI/obj/Debug/Capture.pdb | Bin 247296 -> 247296 bytes ...nderHookAPI.csproj.AssemblyReference.cache | Bin 15006 -> 15006 bytes ...nderHookAPI.csproj.CoreCompileInputs.cache | 2 +- .../RenderHookAPI.csproj.FileListAbsolute.txt | 39 + 190 files changed, 236085 insertions(+), 198 deletions(-) create mode 100644 DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.dgspec.json create mode 100644 DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.g.props create mode 100644 DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.g.targets create mode 100644 DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.dgspec.json create mode 100644 DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.g.props create mode 100644 DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.g.targets delete mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp.sourcelink.json create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.AssemblyInfo.cs create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.AssemblyInfoInputs.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.assets.cache create mode 100644 DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.csproj.BuildWithSkipAnalyzers create mode 100644 Example/Img/BCU_green.png create mode 100644 Example/Img/BCU_red.png create mode 100644 Example/Img/Defuse.png create mode 100644 Example/Img/advance.png create mode 100644 Example/Img/diallock.png create mode 100644 Example/Img/easy.png create mode 100644 Example/Img/medium.png create mode 100644 Example/obj/Debug/Example_MarkupCompile.cache create mode 100644 Example/obj/Debug/Example_MarkupCompile.i.cache create mode 100644 Example/obj/Debug/Example_MarkupCompile.lref create mode 100644 Example/obj/Debug/Ingame/IngameControl.g.cs create mode 100644 Example/obj/Debug/Ingame/overlay.g.cs delete mode 100644 MouseKeyHook/obj/Debug/net462/MouseKeyHook.sourcelink.json delete mode 100644 MouseKeyHook/obj/Debug/net472/MouseKeyHook.sourcelink.json delete mode 100644 MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.sourcelink.json create mode 100644 RenderHookAPI/bin/Capture.dll create mode 100644 RenderHookAPI/bin/Capture.pdb create mode 100644 RenderHookAPI/bin/EasyHook.dll create mode 100644 RenderHookAPI/bin/EasyHook.xml create mode 100644 RenderHookAPI/bin/EasyHook32.dll create mode 100644 RenderHookAPI/bin/EasyHook32Svc.exe create mode 100644 RenderHookAPI/bin/EasyHook64.dll create mode 100644 RenderHookAPI/bin/EasyHook64Svc.exe create mode 100644 RenderHookAPI/bin/EasyLoad32.dll create mode 100644 RenderHookAPI/bin/EasyLoad64.dll create mode 100644 RenderHookAPI/bin/SharpDX.D3DCompiler.dll create mode 100644 RenderHookAPI/bin/SharpDX.D3DCompiler.xml create mode 100644 RenderHookAPI/bin/SharpDX.DXGI.dll create mode 100644 RenderHookAPI/bin/SharpDX.DXGI.xml create mode 100644 RenderHookAPI/bin/SharpDX.Desktop.dll create mode 100644 RenderHookAPI/bin/SharpDX.Desktop.xml create mode 100644 RenderHookAPI/bin/SharpDX.Direct2D1.dll create mode 100644 RenderHookAPI/bin/SharpDX.Direct2D1.xml create mode 100644 RenderHookAPI/bin/SharpDX.Direct3D10.dll create mode 100644 RenderHookAPI/bin/SharpDX.Direct3D10.xml create mode 100644 RenderHookAPI/bin/SharpDX.Direct3D11.Effects.dll create mode 100644 RenderHookAPI/bin/SharpDX.Direct3D11.Effects.xml create mode 100644 RenderHookAPI/bin/SharpDX.Direct3D11.dll create mode 100644 RenderHookAPI/bin/SharpDX.Direct3D11.xml create mode 100644 RenderHookAPI/bin/SharpDX.Direct3D9.dll create mode 100644 RenderHookAPI/bin/SharpDX.Direct3D9.xml create mode 100644 RenderHookAPI/bin/SharpDX.Mathematics.dll create mode 100644 RenderHookAPI/bin/SharpDX.Mathematics.xml create mode 100644 RenderHookAPI/bin/SharpDX.dll create mode 100644 RenderHookAPI/bin/SharpDX.xml create mode 100644 RenderHookAPI/bin/sharpdx_direct3d11_1_effects_x64.dll create mode 100644 RenderHookAPI/bin/sharpdx_direct3d11_1_effects_x86.dll diff --git a/DamnOverSharp/Renderers/WPF/WpfInteractionManager.cs b/DamnOverSharp/Renderers/WPF/WpfInteractionManager.cs index 2beffa4..cd9c4f6 100644 --- a/DamnOverSharp/Renderers/WPF/WpfInteractionManager.cs +++ b/DamnOverSharp/Renderers/WPF/WpfInteractionManager.cs @@ -1,6 +1,7 @@ using DamnOverSharp.Helpers; using DamnOverSharp.WPF.UiLibrary; using Gma.System.MouseKeyHook; +using System; using System.Diagnostics; using System.Linq; using System.Windows; @@ -59,8 +60,10 @@ namespace DamnOverSharp.Renderers.WPF break; } - FocusedElement.OnVirtualKeyDown(e.KeyCode); + //FocusedElement.OnVirtualKeyDown(e.KeyCode); } + + } private void GlobalKeyUp(object sender, System.Windows.Forms.KeyEventArgs e) @@ -87,7 +90,7 @@ namespace DamnOverSharp.Renderers.WPF break; } - FocusedElement.OnVirtualKeyUp(e.KeyCode); + //FocusedElement.OnVirtualKeyUp(e.KeyCode); } } diff --git a/DamnOverSharp/Renderers/WPF/WpfRenderer.cs b/DamnOverSharp/Renderers/WPF/WpfRenderer.cs index e511393..6267f22 100644 --- a/DamnOverSharp/Renderers/WPF/WpfRenderer.cs +++ b/DamnOverSharp/Renderers/WPF/WpfRenderer.cs @@ -29,7 +29,7 @@ namespace DamnOverSharp.Renderers.WPF internal GraphicRenderer InternalBitmapRenderer; internal WpfInteractionManager InternalWpfInteractionManager; public Viewbox ViewBox; - internal Grid MainContentGrid; + public Grid MainContentGrid; public WpfRenderer(string processName, System.Windows.Size renderSize, System.Windows.Point renderPosition, double dpiX = 96, double dpiY = 96) { @@ -41,9 +41,10 @@ namespace DamnOverSharp.Renderers.WPF InternalBitmapRenderer = new GraphicRenderer(processName); InternalWpfInteractionManager = new WpfInteractionManager(this); - ViewBox = new Viewbox() { Width = RenderSize.Width, Height = RenderSize.Height, Stretch = Stretch.None }; + MainContentGrid = new Grid() { Width = RenderSize.Width, Height = RenderSize.Height, Name="MainGrid" }; + ViewBox = new Viewbox() { Width = RenderSize.Width, Height = RenderSize.Height }; - MainContentGrid = new Grid() { Width = RenderSize.Width, Height = RenderSize.Height }; + ViewBox.Child = MainContentGrid; } diff --git a/DamnOverSharp/WPF.UiLibrary/VirtualButton.xaml.cs b/DamnOverSharp/WPF.UiLibrary/VirtualButton.xaml.cs index b99312d..cd6e825 100644 --- a/DamnOverSharp/WPF.UiLibrary/VirtualButton.xaml.cs +++ b/DamnOverSharp/WPF.UiLibrary/VirtualButton.xaml.cs @@ -43,7 +43,7 @@ namespace DamnOverSharp.WPF.UiLibrary get => text.Text; set { - text.Text = value; + Text = value; UpdateVisual(); } } diff --git a/DamnOverSharp/WPF.UiLibrary/VirtualMouseCaptureArea.xaml b/DamnOverSharp/WPF.UiLibrary/VirtualMouseCaptureArea.xaml index 568ba3c..aa7e227 100644 --- a/DamnOverSharp/WPF.UiLibrary/VirtualMouseCaptureArea.xaml +++ b/DamnOverSharp/WPF.UiLibrary/VirtualMouseCaptureArea.xaml @@ -5,5 +5,5 @@ xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:DamnOverSharp.WPF.UiLibrary" mc:Ignorable="d"> - + diff --git a/DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.dgspec.json b/DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.dgspec.json new file mode 100644 index 0000000..602d552 --- /dev/null +++ b/DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.dgspec.json @@ -0,0 +1,162 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\DamnOverSharp.csproj": {} + }, + "projects": { + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\DamnOverSharp.csproj": { + "version": "1.0.1", + "restore": { + "projectUniqueName": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\DamnOverSharp.csproj", + "projectName": "DamnOverSharp", + "projectPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\DamnOverSharp.csproj", + "packagesPath": "C:\\Users\\vitor\\.nuget\\packages\\", + "outputPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\vitor\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net48" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net48": { + "targetAlias": "net48", + "projectReferences": { + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\MouseKeyHook.csproj": { + "projectPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\MouseKeyHook.csproj" + }, + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\RenderHookAPI\\RenderHookAPI.csproj": { + "projectPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\RenderHookAPI\\RenderHookAPI.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net48": { + "targetAlias": "net48", + "dependencies": { + "CefSharp.OffScreen": { + "target": "Package", + "version": "[115.3.130, )" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.101\\RuntimeIdentifierGraph.json" + } + } + }, + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\MouseKeyHook.csproj": { + "version": "5.6.1-alpha", + "restore": { + "projectUniqueName": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\MouseKeyHook.csproj", + "projectName": "MouseKeyHook", + "projectPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\MouseKeyHook.csproj", + "packagesPath": "C:\\Users\\vitor\\.nuget\\packages\\", + "outputPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\obj\\", + "projectStyle": "PackageReference", + "crossTargeting": true, + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\vitor\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net462", + "net472", + "netcoreapp3.1" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "netcoreapp3.1": { + "targetAlias": "netcoreapp3.1", + "projectReferences": {} + }, + "net462": { + "targetAlias": "net462", + "projectReferences": {} + }, + "net472": { + "targetAlias": "net472", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "netcoreapp3.1": { + "targetAlias": "netcoreapp3.1", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + }, + "Microsoft.WindowsDesktop.App.WindowsForms": { + "privateAssets": "none" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.101\\RuntimeIdentifierGraph.json" + }, + "net462": { + "targetAlias": "net462", + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.101\\RuntimeIdentifierGraph.json" + }, + "net472": { + "targetAlias": "net472", + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.101\\RuntimeIdentifierGraph.json" + } + } + }, + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\RenderHookAPI\\RenderHookAPI.csproj": { + "restore": { + "projectUniqueName": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\RenderHookAPI\\RenderHookAPI.csproj", + "projectName": "RenderHookAPI", + "projectPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\RenderHookAPI\\RenderHookAPI.csproj", + "frameworks": { + "net48": { + "projectReferences": {} + } + } + }, + "frameworks": { + "net48": {} + } + } + } +} \ No newline at end of file diff --git a/DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.g.props b/DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.g.props new file mode 100644 index 0000000..aeea149 --- /dev/null +++ b/DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.g.props @@ -0,0 +1,21 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\vitor\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 6.8.0 + + + + + + + + + + + \ No newline at end of file diff --git a/DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.g.targets b/DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.g.targets new file mode 100644 index 0000000..af22bc9 --- /dev/null +++ b/DamnOverSharp/obj/DamnOverSharp_2obhwbcj_wpftmp.csproj.nuget.g.targets @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.dgspec.json b/DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.dgspec.json new file mode 100644 index 0000000..602d552 --- /dev/null +++ b/DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.dgspec.json @@ -0,0 +1,162 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\DamnOverSharp.csproj": {} + }, + "projects": { + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\DamnOverSharp.csproj": { + "version": "1.0.1", + "restore": { + "projectUniqueName": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\DamnOverSharp.csproj", + "projectName": "DamnOverSharp", + "projectPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\DamnOverSharp.csproj", + "packagesPath": "C:\\Users\\vitor\\.nuget\\packages\\", + "outputPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\vitor\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net48" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net48": { + "targetAlias": "net48", + "projectReferences": { + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\MouseKeyHook.csproj": { + "projectPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\MouseKeyHook.csproj" + }, + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\RenderHookAPI\\RenderHookAPI.csproj": { + "projectPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\RenderHookAPI\\RenderHookAPI.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net48": { + "targetAlias": "net48", + "dependencies": { + "CefSharp.OffScreen": { + "target": "Package", + "version": "[115.3.130, )" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.101\\RuntimeIdentifierGraph.json" + } + } + }, + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\MouseKeyHook.csproj": { + "version": "5.6.1-alpha", + "restore": { + "projectUniqueName": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\MouseKeyHook.csproj", + "projectName": "MouseKeyHook", + "projectPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\MouseKeyHook.csproj", + "packagesPath": "C:\\Users\\vitor\\.nuget\\packages\\", + "outputPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\MouseKeyHook\\obj\\", + "projectStyle": "PackageReference", + "crossTargeting": true, + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\vitor\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net462", + "net472", + "netcoreapp3.1" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Program Files\\dotnet\\library-packs": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "netcoreapp3.1": { + "targetAlias": "netcoreapp3.1", + "projectReferences": {} + }, + "net462": { + "targetAlias": "net462", + "projectReferences": {} + }, + "net472": { + "targetAlias": "net472", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "netcoreapp3.1": { + "targetAlias": "netcoreapp3.1", + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + }, + "Microsoft.WindowsDesktop.App.WindowsForms": { + "privateAssets": "none" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.101\\RuntimeIdentifierGraph.json" + }, + "net462": { + "targetAlias": "net462", + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.101\\RuntimeIdentifierGraph.json" + }, + "net472": { + "targetAlias": "net472", + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.101\\RuntimeIdentifierGraph.json" + } + } + }, + "C:\\Users\\vitor\\source\\repos\\scumoverlay\\RenderHookAPI\\RenderHookAPI.csproj": { + "restore": { + "projectUniqueName": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\RenderHookAPI\\RenderHookAPI.csproj", + "projectName": "RenderHookAPI", + "projectPath": "C:\\Users\\vitor\\source\\repos\\scumoverlay\\RenderHookAPI\\RenderHookAPI.csproj", + "frameworks": { + "net48": { + "projectReferences": {} + } + } + }, + "frameworks": { + "net48": {} + } + } + } +} \ No newline at end of file diff --git a/DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.g.props b/DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.g.props new file mode 100644 index 0000000..aeea149 --- /dev/null +++ b/DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.g.props @@ -0,0 +1,21 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\vitor\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 6.8.0 + + + + + + + + + + + \ No newline at end of file diff --git a/DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.g.targets b/DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.g.targets new file mode 100644 index 0000000..af22bc9 --- /dev/null +++ b/DamnOverSharp/obj/DamnOverSharp_arnpkq5p_wpftmp.csproj.nuget.g.targets @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/DamnOverSharp/obj/Debug/DamnOverSharp.1.0.1.nuspec b/DamnOverSharp/obj/Debug/DamnOverSharp.1.0.1.nuspec index 06fb68a..c3d9581 100644 --- a/DamnOverSharp/obj/Debug/DamnOverSharp.1.0.1.nuspec +++ b/DamnOverSharp/obj/Debug/DamnOverSharp.1.0.1.nuspec @@ -7,7 +7,7 @@ https://github.com/Vadkarika2/DamnOverSharp An easy to use library for creating in-app overlays for different games and programs. overlay,directx,game,overlay,hook,graphics,wpf,.net,.net framework - + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp.AssemblyInfo.cs b/DamnOverSharp/obj/Debug/net48/DamnOverSharp.AssemblyInfo.cs index c1abc95..46fbc91 100644 --- a/DamnOverSharp/obj/Debug/net48/DamnOverSharp.AssemblyInfo.cs +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp.AssemblyInfo.cs @@ -16,7 +16,7 @@ using System.Reflection; [assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + "ams.")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] [assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] [assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp.AssemblyInfoInputs.cache index aa417ac..1b0a27d 100644 --- a/DamnOverSharp/obj/Debug/net48/DamnOverSharp.AssemblyInfoInputs.cache +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp.AssemblyInfoInputs.cache @@ -1 +1 @@ -73c58f5b455b48dc9d10f5b5616137e6a7b8300e74833ff8dbea06dc2d8ce6cf +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp.csproj.AssemblyReference.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp.csproj.AssemblyReference.cache index 99d720ef1b79c933362f405a652b62b71e57aa25..38338023903e66d52c1c9aea7664f088f34861df 100644 GIT binary patch delta 1293 zcmexX*3iw!!Nw@Xz`($mIPt7Ty>EVLajJJ}rAK~#c1%)cUW`j>QfYcjUTTSnxlxRJ zZlYdrWpPPrt{$>Ny_B3BMn<3+g1!dlrYqjzU}R(z$Dx*y6{wC4WFHX20Eo?44 z8*nmaPR?R9NJq9nALtT&uuJqIF44zfI>;pulNtSRDA7>}OD!tS%+Iqm)icvGoIKxD zg)6TVs14)>mdT1N9+TsZIYdRE{tVB|OUW-U)^p1*$}OHO$Z83ao&49zZSq+&-^uyr zssijljZ8rN9|#y37+rzEXdjfCmy%ip3Pi^MPjEOoCl-{H7Nx?2igoFS%d;Rs#SWDN z2O-EA43qUNWEp)y!61%e5;z>dsweL;(5`=6a{o+YCy)KyeXVRE{jVRr%TH0^KVokd z&pY$VWYu=Af7bE=%lH{B02V>idki;Et&lg-R zE0u~-J;KNVbSzU~;^v4~Qf7=^P=6po*ig?vZ}L1-RWSo2Q$sVuBx6&H)I`HXV>6H^ z83ka0EyNz2kyupV62Zsru;J)r4yza$L8vSA zTr!JNlS_9y&*RBLU8p^OAHNAbs1sPB@EN$n^=;O znwwaXnOuyjO%Izkewa3w)Z*-t`~p-hM7qxqRhI!ai_n73$OTQ4B{oe`aM!_t!cfmO zEe#m-Xnw;VBre7-&iT0onK`LNs4nG2v2-#cm+0hrb5Q|Mng!)m5CG=a_{oau!5gEc FtpSW!d{+Pf delta 16 XcmZqZX8cyh%El7I diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp.csproj.FileListAbsolute.txt b/DamnOverSharp/obj/Debug/net48/DamnOverSharp.csproj.FileListAbsolute.txt index 9bc0e5e..659efbc 100644 --- a/DamnOverSharp/obj/Debug/net48/DamnOverSharp.csproj.FileListAbsolute.txt +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp.csproj.FileListAbsolute.txt @@ -456,7 +456,6 @@ C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\obj\Debug\net48\DamnOverSh C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\obj\Debug\net48\DamnOverSharp.AssemblyInfoInputs.cache C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\obj\Debug\net48\DamnOverSharp.AssemblyInfo.cs C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\obj\Debug\net48\DamnOverSharp.csproj.CoreCompileInputs.cache -C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\obj\Debug\net48\DamnOverSharp.sourcelink.json C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\obj\Debug\net48\DamnOverSharp.csproj.CopyComplete C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\obj\Debug\net48\DamnOverSharp.dll C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\obj\Debug\net48\DamnOverSharp.pdb diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp.dll b/DamnOverSharp/obj/Debug/net48/DamnOverSharp.dll index f318eed9f7880d0276dbff2278af48e080558014..fd51af9d82af95751dbc57806e137306975442fd 100644 GIT binary patch literal 34816 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 Bm978) literal 33792 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 +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..3172596 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_2obhwbcj_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_2obhwbcj_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..49c3445fc61c5d8c3e0a2a9868ddad6f208c4dbc GIT binary patch literal 1984 zcmcIlPj3=I6i1~}>^}=iHE9$Nt%-+4XeFqp23kVYN`&?_nk>7sbmHvJW@om6#EU2I z-aPpYJb3WhlLr%H;=xbhXE5=-0-I^O77y@}A7tLV?ECk7^O{fUTl0xTqW0w--~Ro6 z?(44~pZ>hLWqtd8@9oFj_WFnR(W|5U=bv{kgV9hf!T(->3#xh43pz-2@QWN;1WFnKwV6~#ue^yDCsdU(s+KfPB5_fdiF8pHQH?cRJ$qG% zsE({n12C#90Bq|V0OxH1un1TJTm@ibZjT`ym?Y|8(+os6Fx~tP<5cF?N|j!vyjFTh zo-r#BQaCEV&tz!wd`pEk69i|B+GIDZQ`H;}D1HkQm||agE+5hDbYG@Ka2V>*Go=%J z^nxryz8OFka1C%BkONG10L}>lgNqAd1@u#FgcgzB2rLV}IB^l(0KG0Z;jpL^s9~R; zl&pTe51WArFCERoLeo?S4R1)lRagRr!4fD$6Es=^D{+^QL(CZ7i8GCc6rbAUuIbX$ zFq~{dHe8=Giz(i(QHOcdp4l +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..1f9008e --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_3pbnv5xp_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..b837273ecf8f1d05d6e5397cc99b6cf484ae67e5 GIT binary patch literal 1984 zcmcIl&2AD=6h@^2N?QxH)ucvTH0}nWmEhl^LLfw~q_iYW#>FsmhTe2$?qu$r29myj zx^w5khj8T!_yX>I3E#kT3QTU>vABSfe2{zY$(+CM+|z#3+{q>qi9e?wzZ_@tpI(2dVppd2IAS z=qA|W$OwGR7p)@nrgUl`KlOEomiVe zP*k@N)YjVwnzu#75@H!~2SJT_IE8d*l4zn$JK+7ma0?CQfGBL1tAlD~v;0hd$IO5W zZp%WKiO_Hg9T{4T>oj9v>APVQWP3cI^eswYj(r)p&V+6k`!Xkj<4{kYDV5-p7i0zV z%^~uLRm5Gy8e+Bsa77RlTwDQ%Xqhb5IjE$iZ>^Vpc$AM+lJnLmyH>=t<^6 orpEo@TW%UoQlf`k9fV|_A+boEut)w@E)^mhX)uws=x{E-zgu!42mk;8 literal 0 HcmV?d00001 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.csproj.BuildWithSkipAnalyzers b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_3pbnv5xp_wpftmp.csproj.BuildWithSkipAnalyzers new file mode 100644 index 0000000..e69de29 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_MarkupCompile.i.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_MarkupCompile.i.cache index dcbefe0..7726541 100644 --- a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_MarkupCompile.i.cache +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_MarkupCompile.i.cache @@ -13,7 +13,7 @@ TRACE;DEBUG;NETFRAMEWORK;NET48; 3-1675957322 78475070729 14144361996 -25-576013978 +26611570928 WPF.UiLibrary\VirtualButton.xaml;WPF.UiLibrary\VirtualMouseCaptureArea.xaml;WPF.UiLibrary\VirtualTextBox.xaml; True diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_MarkupCompile.lref b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_MarkupCompile.lref index 324e3c8..4284f46 100644 --- a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_MarkupCompile.lref +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_MarkupCompile.lref @@ -1,4 +1,4 @@ -C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\obj\Debug\net48\GeneratedInternalTypeHelper.g.cs + FC:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\WPF.UiLibrary\VirtualButton.xaml;; FC:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\WPF.UiLibrary\VirtualMouseCaptureArea.xaml;; diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.AssemblyInfo.cs b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.AssemblyInfo.cs new file mode 100644 index 0000000..46fbc91 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.AssemblyInfo.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..9c272bf --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_arnpkq5p_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_arnpkq5p_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..1374b1a63c0029c6490d09841c3efb21ce2b238e GIT binary patch literal 1984 zcmcIlPj3=I6i1~}v``D$KS>ku(0E&fR)Y3or70n5CDJxAnI4wiw{+s}&Sqz}mhWNW z!Ha$cuX;AAH@||7M{j-r-z%`0wpcvCOMZ}f^Rn;X@6BsIt8dIC5{bq4Z2j}Q*Wdp5 zCqF(_zW@GueEjz5(vyt!^W@`~55M;BUq_?9T*Lp}+GDmWA(ZTpD-klok2;`OU|Mg? z4oGH!BM;0lFf8GD!e^z@Lu1t_tv+BbZ!;g%TBXct;IvMSY9a)~c3t{1$rZ#^1f7$J zDMWLu9xri5neP9uGvPSW3IRrC_|kD&r*?XpDfFbLIgMwM2^Bc7+vJTzFYtH^`wu4* zEU4yDFK92(-Y;<|iZQu6xs z9&QFM{B%4EnWm`@8h)RC%eVxJy(LhLCupz)7KUA74nxN9-Z0a6Na?9fZkryY`r+go zvf%|Tx43ee{&ZKF%xSrk@@&=CcnSuG9}Oe literal 0 HcmV?d00001 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.AssemblyInfo.cs b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.AssemblyInfo.cs new file mode 100644 index 0000000..46fbc91 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.AssemblyInfo.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..6f9f86e --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_ef5tj4se_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ef5tj4se_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..98bd0e9f6384706fd9fb9d37efedb1aa2bf0d6fb GIT binary patch literal 1984 zcmcIl&2AD=6h@^|w50;tpQKSVY1|D$D?yEm22w(-l}Ou-*Tpb%25y|0JDGc@fk)89 zg)idPrO)6axH2(u;|u6H1tzyG78h`m4|2~vne+FZds;6VyGw~g;?1vI;q$uOcy2y; z&pxHEI3JF^Rt zS>VW?83u+WJWu$nRC;V|8>Q_>%;g>CgW9Q-Sq+@_sZmXYVA!rpUnaSNxQd{260v}2 z&D7&1&M4Ej|LaURj1i(FnPg4{4(twjBhd>y+rs|C$s7x+ zdDII!Omz559LgXijSy@umC>*4(8U>5wL+>Djgv%N(&b`Z+(lAT4L2`d6=SLsYtsmd z>IQ<^dJ{qOwv5OiRuH!k)R=oyNQWkg2HLbj(G5+nu*Y4Hg{^Y6U#)DFpRkwQ3WXGo zDjahenQo!2BAW|FGX^$0h#H_;qXDIFQ37-9OW$+HbUWXdIT0L(di+f31RuX3SK^xMQGP#i9SVmv|PC9pQ>5_6a^hW96##zRU^ZSuhMAT +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..38b6b15 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_eny5xugz_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_eny5xugz_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..8b06c62cfb70b13d556448feb5663b87046135fe GIT binary patch literal 1984 zcmcIl&2AD=6h@^2+ENR(^{0ursHQFkp-4~@lZIMC)JjU*)wmdD&cKZ`b0>4}H1Gtz zfhI1ybmdDJ6ZbxWJD<$f-?^vtstkm&*6!jh~-C z{(7|h;=}K+_D1j1OY_dR?%fB+KmL>+UPYskT*3c?`ZN7NKp^xZCV8N1Uf2bx`-b`6 z=z`Equtm=Ze9h#p%RRkRdZKM=rOn5>!#cVLvQjPUb+FqfMs*&5W;qUhndB1UGJ?)Y z#2lhERgV`qqfFoZuQP7j!VCZ=W%$;%+b4Evnkn?8rkTbw$&3o@TOIO7q850%h5d(< z85UIWs1|gX=VFWtFD)y>Tj4C zaKUX^IAkI;oI+cM7UMe27+Csl*Z|oY4Jdt!5}09M`mQsk+u6R%h~PNX<7Y}G`1l1` z!hCaxJYpGf6S0Dr?f_g61O*ot#474%*a#&ewGmVndU4_+x`ldGZsQ@V5~yjNos_(K zeTbWZaW50i!a~cCy{0#!-x@A~;&2HRqX`->fz`N6%pqnB@5h-&LrPC=a@TMnH3}!+ z6iwH6n8~Cw*an+ +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..ed9c016 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_ezut4rhk_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_ezut4rhk_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..1fdc3d2003eef709278e6a931e1643c17c9efc48 GIT binary patch literal 1984 zcmcIl&1(}u6pxykM%&aT+FB?W55?QYq&38^LrH0fA2pb?co@OW?%QPYP;FmCO9{aw2Z(ieZZG9$@NWA;`_WkGj>%GJ8 ztg`Q|L)ga~jVi6Dn|Ex5*ocUf}T-_8(3r zSWwNQUeI2myNyH^xHrB;mBsJA=`SevGraG}U zji9J5A*ijF5j1bJhzw#5aRot*xiNxtXp*R*O(PVY(Dd?~+y$9mDOC<9WEo&%{NtKbHQlFz-C)f4OF8)p!6+DV1j))@Z162PWEL&1jnHsJX1Qs2QSDx z=9@+25LXe`5DSR$4!{{fP;kS7SVa8<8=*y{H-gGSFV3)tuA^R;B|Kzw0@dx4lakY~ zcW^Us;iuzSm~EJ9x9<1pw~R}m&|3n9c!CB?U~$+b<}hRoZw@n!hm@Y$|`s9AW6aAA2E&AV8abr0qJ!qLAAO8q{7Ho r+=Fyg1l=dXGTo#?57`Zniu +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..2870aed --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_gvudj0if_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_gvudj0if_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..33cb09bab7cdda0a418ca3b306f1c09b6348524b GIT binary patch literal 1984 zcmcIlKX21e5D$=&2HKP+(1KKnFht!Pl9nidDpaLv6ai^O+D?zbvCrufwx8wqTqO$< zI}1`bU|?WpW#AjIz`%znpMZ_KCb8VsGz`f}zeMle$@lMf?^;jmn{$aoqOfuF>$v>; z<9qAfkJnHBy#0Li^TVh1o3G!#>@+vN_m5YvqR~*U;QwCj5!;jCOLoYW@R{ZYT~N%^ zjaPaXBs0L02fFWRhHxC=vQp`Rwx*TV?lYTrm_WP zKb%alpb?MJf({ZL{1S&UNJ-5HlS`%bD(iG{N>#0pY9Yc&A};B&p)Twqsi}r5=dX$( z)rqxf1VwcXL2bQ`pn01|WDpC88whI5-7%y?lSCbDTE6J|x|84LHpqOTTOL(CZ7i!%*}l%CpTQ+FUW z3@6u+4ac*&!IjS*fpkrH{b$0^?W95v*)5QYySl<6wSx}%TRc~Yxln_NEQN +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..ffe07d2 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_hebfdavf_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..cbb7ac66f99cf9545a3bb74bbc92753fa436ab7c GIT binary patch literal 1984 zcmcIlzi-n}5Dt)%2HKP+v;nCSVW_$}ByFPrQo$3CY|*nXDZbCv8Y z%=`%;F#rQI3o9G2!oR@C1OsHpJ{H;1;sqw zc&2wjG6O7msQaE~2*(jFE0s32b*;31huOTtTu>X8GOK~rIyR~aA2idp>B}S+5El`2 zP9kOy&53$E#~EdM@W0N4Wl6&a7?gAbzv7tO*LFOdsPgn zPOMEMD5@(6YU@=5&D%U8gIGXZLr`OGjUgSHB^hMX#ox%>cK^9ia)n2u-TE5F3 zal;owj0zzHHQOA-=YMj*q5GTkLY%~FH<5o4)y4niV}SE zf-GXbSws$T9kGO1Moe}9&Iy8oiwh!;`YARd5>d1fR2F)1;v%|%`l#H*Lnca~hIx8Y za?$HHZU!#gbT|w1OwA#$ t16Oee(lz1r9|}XalL|d#w?QiI>I#e03OeL(@k}A+LJcOe93D>O_ZK%`CZhlV literal 0 HcmV?d00001 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.csproj.BuildWithSkipAnalyzers b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hebfdavf_wpftmp.csproj.BuildWithSkipAnalyzers new file mode 100644 index 0000000..e69de29 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.AssemblyInfo.cs b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.AssemblyInfo.cs new file mode 100644 index 0000000..46fbc91 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.AssemblyInfo.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..36971f8 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_hv2duv2l_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_hv2duv2l_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..f2b15720f4e99e0cd677758ba76e24d379ecd74d GIT binary patch literal 1984 zcmcIlPj3=Y5JyX;XrThNwMi54(A3i+v=Y>4LLenXttc(0=V95Mg%@}CZT7uw;5&Hp zOL(g%KY|D2#ZTcU@SrDW3T(D577sAV5AxQO1#XQ}3ulGPQ z11#CseNQul;|P}(i;uKDt+@A)*}ThKQ2XT)tAW)%GpY$6G}E@}%Ouwj*AaA%BbE`Z zxq7_98D;wJf1L@-l7{agw-h3cSVP=KP-E`RARU^-8feq zB8ON<+(B$0<~sma1VO<~3t|)X3v5IrqG%(iEcD_`i|8)uqq2pEbd*3%^WvoBqSqbV z3|zR$a28T6UG +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..38a7e30 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_lbrqivq2_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_lbrqivq2_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..0b5017e84310e84d1f7da5999dee6acfc84cf5f4 GIT binary patch literal 1984 zcmcIly>HV{5D$=&2HKP+(1KK{VW`-gCM{8bsY=x-0!kqL7%+olpVOz>ewN>Jlt?V> zofr@U5-SU=%xvroOe{$J0qhLiHHr1wnuZ}c>6hr;JNdqT_pb4)$-fVtsfs>e|g!ta~X{WatZ%;tM~O?0fEpvO!7e2ys!;Y z_YL#VXoJvAu*HE9_?pRGmwS4#cvoA~ifgO7!&ejjB8V&2k+2GRXzR zMFgFbh$%#4tRByCMw!0&UuWF5g&6>h%J7M8H;?VqG*jqFO>-L0BoivIZ?(u9iCW5T_Wm3&4oFw9sE*t5hE|QvRxODca z5K*02n?_JnR}j?Js|cF6Swsdghq#8I#w?E@9hxL+XwwLIJ22e*7IQ%4S4x#`rMyzQ zr$1(9zy-HuevgUJaPmzVT8!&7V_@mqVGU$sFrf4;N??M0>AKF4Zm0V)A%f#j51%QO z;KLVW9`ns2a)|4Q8;AwOcn9E|ASk%FAQn+S!A2+%sg0nr(2Eln(M{B=atjX`l|Xgt z^rYm}>pk2IjC<*57G@iUJg9pE`YquSDD;;=A)27!5?GA8#2jMA@OGSOG^F&@Cbtb2 zQiE`Eby0VHhnY+|y-l#02iDY<;Ru+127)^su#!7L2uTX|!H8)zhZ` +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..a4ee607 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_tp3k1m43_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..4cbbec4314412d7ca5e4e8ca18f4c3d76a9cee7c GIT binary patch literal 1984 zcmcIlPj3=I6sML-(Lx2Z)uf4-*z~ptRDybHASFbtMB1LFhh=w`PTbugGqVkxJgA8t z`~(^k6TgF=y!Zi3`~dnH`~W7tS70-3*Wv+Q@`KEqmwo?!Z(i$RV{0iEi~UGFfBXCU zt1mw@2e0epkH22bee2JEc=ze$8}aAs``e#4E`rfW=HY*@cAxA?DkM2#iVI@+L6<7h zGp%Q4mr7z$M;@A@XIR|xxKE13yGGe4mhTXkb%;;ZW~D@G)M+0Z)wrOB?Yj77lsUi! z0G{K31wd=69?x-xnI8PFGwwLj5|mEL@QLHJkL~m{6W~cta}mxcGb(V;?w~gmy};8g z>_42$u%Mbpy`aNHhrh_7G*HqI)Mio{{mLd@oKRIOs9M%IiNr-+Hq?b(L^alM?d(+{ zq&l)T3Baf>0kEx?0XT0dKpLAuW};4swVXG$md z_yx&8zF9yHa20S3umYIw0Gty91{W2?D(Gj}2rVML5m**{aiSu+4tiZ~z#**@sA->` zl$?IO51WB;KN-$Ks%5Ifraz+J8Z3dra0wK`2^uef)u>CzAz}<~MVW>}icf8P$Mk4o z6i%)wn_kal7E|t^P95e`dtuvjC0%?-f$5sAh{(aRl9>8 vO^Co(%%jN~?+qSt%XH%kJY?%sD(0ICiqsA|=r41o5KEy35?KikC-VCXhKeM& literal 0 HcmV?d00001 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.csproj.BuildWithSkipAnalyzers b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_tp3k1m43_wpftmp.csproj.BuildWithSkipAnalyzers new file mode 100644 index 0000000..e69de29 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.AssemblyInfo.cs b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.AssemblyInfo.cs new file mode 100644 index 0000000..46fbc91 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.AssemblyInfo.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..547f94b --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_u4ennasy_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..8e5230e9d2eee09c1540c4118c341e7a18e1d24d GIT binary patch literal 1984 zcmcIlPj3=I6vs+Sv4vVt(4>iYXuK^#D?vRqG(}RaMB18|@v!W^r4x5|HaoLTNj&%g zO#A@e{0yGF_%YO@U%{kz-z%`0wpcvCOMZ}f^Rn;X@6BuPHn)}&iNv2&@$-`R^ZhUD zQ{~x@({I@?g^#Dd7k1~~WWIm>PVaZ`X}vRh zAejY@JTk+;u!QFcpH(W4j18l*@sPQ^%Y0CqwJK|X(>XJ0h!70hb?M6_*AR0EIwukH zi1t)HUg3-~efz)8gyTpn1elcJOULP)+39Jf(376#BA!WRRN%nwk~b2)z|$@4Kb*|4 zpqfX$po2sQzr>*|Qql;)=296awN1J>r>fUTwW4v7h)cR$tc$xyYO3Md<*RZ`bz*HA zK~dd6P+OM}G;bM17O{f3iJ->Zn?O1=Ni@->9g1FPdZiuif-J39>nHWvdi61T!L3k8 z;i%Ffmyzj~Ix4ccU^HW3v%RPZsy!S~`W7WH!@it&?uc#|`!XYf<4}*DDV^Y>7i1Ol z%^~uLTZr3;0%E!Ya77Rl+_)f$sGngYw21UZP+92385hwV)a!B=4_Tc+E&Jl639}0ZBre!{2~3;a0!$LOQ0N2&}a!1$6aC$W5)3QIMaAY>8VZbnI5Eu;pAJg zuD=ZX2ZHzNxTCov2IxRxcG|Io4nzh4^qTzrSiZA~yg4 literal 0 HcmV?d00001 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.csproj.BuildWithSkipAnalyzers b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_u4ennasy_wpftmp.csproj.BuildWithSkipAnalyzers new file mode 100644 index 0000000..e69de29 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.AssemblyInfo.cs b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.AssemblyInfo.cs new file mode 100644 index 0000000..46fbc91 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.AssemblyInfo.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..5e197d8 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_vunuwlpe_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_vunuwlpe_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..5bb73e1c1f72e0f30db9d15d8f97a4ba1014f0e1 GIT binary patch literal 1984 zcmcIlPj3=Y5J#m_w51lb#e_sWRO4k4iUc*9RGJcETZy!dhiBrlJ4;{O-M88Iw!+14 z;K_q`5Be=UnDpXz@b1BzCSIK>u-Ud)JisJB$eTCW`S+VQ&8PLXxmYar`_0!+U&^1~ ze|(&K^5@r&?DxaXceftB`ta?}VfO8dt)I6qqR~Ju;Qwyz0o#?}OLoAO@R{ZY9Z<~E zjn{eyBs0L0`?~LGhHxC=vSRU`wyG6Z?=qXWnG331DX|(@ts|qF@Ifuq_WP zKb%alpb?MJg7y>b{}P8%NJ-5HlS`#_D`mPkrm9v*wGiPX5tnr7P#1QQ)KtUV>8nCW zbz*H2K~Y^oP+Kn}Xx`=#DZ~Qe3W6GQV+`rgBvwb8rY}0a?&LSP4Klw{s&=cDmC}8- z#SLFbVX6Ecmw|5QTPiTQU^HW3vhAP_syP@?`W7WH#lCbMdq}sFeVG!$aj1vSRFvSu z7i1ChO(QahtB7leCB$S0;EW(BxKTkYqkf8wh(r`^1eJweoKX>FQ6H7-ct}MF)G$v@ zN+x=}hns;5HyO^td{bBZ4R=7l94>)Ee+d-A2^ube +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..c2d7ab4 --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_z2udlavr_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_z2udlavr_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..d70ad8964b6de0eea088b26be7b7b34fa1bbf67b GIT binary patch literal 1984 zcmcIl&2AD=6sAa}D5VyZYSKhp5O;&nO3^v0RFleu?VcmW^6 zjV2~Og$p;nfos>g>MM9ofyuNTiwii(2f62-%=!DyJ)M`W?Q9~E`0=6m=UuY=>(l3j z(~qa$li$AdTU%dW{LZ>R?X$ueJiduWW4VF<2hHc~K!PvX30J~rnj7>%F;6$%>wS>S z081Y0zNZ<&afHjN)u-BqR^52QY~EuosLgtfHNonh8#RRwnrYkgWs(I%5<%w_ViD1q zsmE)aQKm=#>r7adG<<+*8NRWs?zvqw%`|$7rn!V?k~tOFGkfHXBwFCv7WN-b=2*~( z$7n%EiH?4WLph|R=7Y(l(gyWSy11Zf)Je4x;Up24boo#hc9GOn!}Y6Im5}Ph+6;oC zx`m*&-bT>8EhBP>6~r9`HRjqqparTk9#HxgB{0Xn3>b8WXw;+Xm0%mI84KYl57K_%D(*n0 nDZJq;Vd!>Bp@;kqNX1=UVUfB)kNmA(DMU8ZU?Rova3R0HEU6 +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Gazdag Marcell")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyDescriptionAttribute("An easy to use library for creating in-app overlays for different games and progr" + + "ams.")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.1.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.1+b79ac874181d9d56e6669885181d3888c6561822")] +[assembly: System.Reflection.AssemblyProductAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyTitleAttribute("DamnOverSharp")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.1.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.AssemblyInfoInputs.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.AssemblyInfoInputs.cache new file mode 100644 index 0000000..1b0a27d --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +f6b227b21dde664c73d19a107f0f24fb14e67baa4f67d80426c21e0b5d68d0f3 diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.GeneratedMSBuildEditorConfig.editorconfig b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000..48511ea --- /dev/null +++ b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = DamnOverSharp_zt3oikxv_wpftmp +build_property.ProjectDir = C:\Users\vitor\source\repos\scumoverlay\DamnOverSharp\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.assets.cache b/DamnOverSharp/obj/Debug/net48/DamnOverSharp_zt3oikxv_wpftmp.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..d2102e8e2b6db8e68dbd026ad48b9b0100fe6d8b GIT binary patch literal 1984 zcmcIl&2G~`5KbW>4fKa5GzF;=L89X3khDaBo~l%hqC$yCTX9$<9DAHD*j~%Ku9COl zK{&yM6K5WQ3pd0A@BoOJCb71yX*eV!eTjB<z0r7#NoDJmIrS<%zLrR5l+omv@;DYO7Xd4RAVVMhy{yVY@DUnPd)e4MFELB7r6O~v_gPM8NPI!&Y7K_W)?l^Y0l%BWJU!J>@ImD(F;7?!v4d_3=67x z)C)RHbofggT0%-1A=q3hqhH&ii*u@aja17TCyBVE%g4I7i=?I+u3x??$5bcQ<`5Ls zO$4>|7J}w&5wV0=M%+eFWA0BN9h#(?XwwcwFEqW<9(O^OHmdc0y|z((%3g3Q6jC^< zbj)RBx}}baY%Unh7})F}YJzHy29&-<3CyrBea{`!?P6bML~tDH@iV0peEfo}V7_@o z0dWVhiYOwcI{;S%LBS;jv4;8?HbRR?Zv>TvUYw+e?xJ3odw5vV3DmMLPD(+)KE}DOgF92Lw*;e;=ZY{NS&xl{#Gs(Vj +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace XamlGeneratedNamespace { + + + /// + /// GeneratedInternalTypeHelper + /// + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.1.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)] + public sealed class GeneratedInternalTypeHelper : System.Windows.Markup.InternalTypeHelper { + + /// + /// CreateInstance + /// + protected override object CreateInstance(System.Type type, System.Globalization.CultureInfo culture) { + return System.Activator.CreateInstance(type, ((System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic) + | (System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.CreateInstance)), null, null, culture); + } + + /// + /// GetPropertyValue + /// + protected override object GetPropertyValue(System.Reflection.PropertyInfo propertyInfo, object target, System.Globalization.CultureInfo culture) { + return propertyInfo.GetValue(target, System.Reflection.BindingFlags.Default, null, null, culture); + } + + /// + /// SetPropertyValue + /// + protected override void SetPropertyValue(System.Reflection.PropertyInfo propertyInfo, object target, object value, System.Globalization.CultureInfo culture) { + propertyInfo.SetValue(target, value, System.Reflection.BindingFlags.Default, null, null, culture); + } + + /// + /// CreateDelegate + /// + protected override System.Delegate CreateDelegate(System.Type delegateType, object target, string handler) { + return ((System.Delegate)(target.GetType().InvokeMember("_CreateDelegate", (System.Reflection.BindingFlags.InvokeMethod + | (System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)), null, target, new object[] { + delegateType, + handler}, null))); + } + + /// + /// AddEventHandler + /// + protected override void AddEventHandler(System.Reflection.EventInfo eventInfo, object target, System.Delegate handler) { + eventInfo.AddEventHandler(target, handler); + } + } +} diff --git a/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualButton.g.i.cs b/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualButton.g.i.cs index deb52cd..17eb618 100644 --- a/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualButton.g.i.cs +++ b/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualButton.g.i.cs @@ -69,7 +69,7 @@ namespace DamnOverSharp.WPF.UiLibrary { return; } _contentLoaded = true; - System.Uri resourceLocater = new System.Uri("/DamnOverSharp;V1.0.1.0;component/wpf.uilibrary/virtualbutton.xaml", System.UriKind.Relative); + System.Uri resourceLocater = new System.Uri("/DamnOverSharp;component/wpf.uilibrary/virtualbutton.xaml", System.UriKind.Relative); #line 1 "..\..\..\..\WPF.UiLibrary\VirtualButton.xaml" System.Windows.Application.LoadComponent(this, resourceLocater); diff --git a/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualMouseCaptureArea.baml b/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualMouseCaptureArea.baml index fa60cf21475a3de5b71da8a4585ca4fa99d42476..536f058bc588d725ad5bd60fb6d824cd482fe143 100644 GIT binary patch delta 20 ZcmbQm*~Ph`j)jMX#gvnQfq@x_nE)*s0>A(O delta 36 pcmeC;oW;4Jjzxxz>(BoeOpFXm|Nmz(lVxCFU@_$clFUHN1OV4L2)qCQ diff --git a/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualMouseCaptureArea.g.cs b/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualMouseCaptureArea.g.cs index 0fabcb8..360dea6 100644 --- a/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualMouseCaptureArea.g.cs +++ b/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualMouseCaptureArea.g.cs @@ -1,4 +1,4 @@ -#pragma checksum "..\..\..\..\WPF.UiLibrary\VirtualMouseCaptureArea.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "A43032EF2F2FC3CECEBC7869D87A0F2A4F6ECF94" +#pragma checksum "..\..\..\..\WPF.UiLibrary\VirtualMouseCaptureArea.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "8BCD293D246569A9F98D224721AD40A910EB1F20" //------------------------------------------------------------------------------ // // This code was generated by a tool. diff --git a/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualMouseCaptureArea.g.i.cs b/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualMouseCaptureArea.g.i.cs index ecd34ad..360dea6 100644 --- a/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualMouseCaptureArea.g.i.cs +++ b/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualMouseCaptureArea.g.i.cs @@ -1,4 +1,4 @@ -#pragma checksum "..\..\..\..\WPF.UiLibrary\VirtualMouseCaptureArea.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "A43032EF2F2FC3CECEBC7869D87A0F2A4F6ECF94" +#pragma checksum "..\..\..\..\WPF.UiLibrary\VirtualMouseCaptureArea.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "8BCD293D246569A9F98D224721AD40A910EB1F20" //------------------------------------------------------------------------------ // // This code was generated by a tool. @@ -61,7 +61,7 @@ namespace DamnOverSharp.WPF.UiLibrary { return; } _contentLoaded = true; - System.Uri resourceLocater = new System.Uri("/DamnOverSharp;V1.0.1.0;component/wpf.uilibrary/virtualmousecapturearea.xaml", System.UriKind.Relative); + System.Uri resourceLocater = new System.Uri("/DamnOverSharp;component/wpf.uilibrary/virtualmousecapturearea.xaml", System.UriKind.Relative); #line 1 "..\..\..\..\WPF.UiLibrary\VirtualMouseCaptureArea.xaml" System.Windows.Application.LoadComponent(this, resourceLocater); diff --git a/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualTextBox.g.i.cs b/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualTextBox.g.i.cs index 55c151e..7718e73 100644 --- a/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualTextBox.g.i.cs +++ b/DamnOverSharp/obj/Debug/net48/WPF.UiLibrary/VirtualTextBox.g.i.cs @@ -93,7 +93,7 @@ namespace DamnOverSharp.WPF.UiLibrary { return; } _contentLoaded = true; - System.Uri resourceLocater = new System.Uri("/DamnOverSharp;V1.0.1.0;component/wpf.uilibrary/virtualtextbox.xaml", System.UriKind.Relative); + System.Uri resourceLocater = new System.Uri("/DamnOverSharp;component/wpf.uilibrary/virtualtextbox.xaml", System.UriKind.Relative); #line 1 "..\..\..\..\WPF.UiLibrary\VirtualTextBox.xaml" System.Windows.Application.LoadComponent(this, resourceLocater); diff --git a/Example/.vs/Example.csproj.dtbcache.json b/Example/.vs/Example.csproj.dtbcache.json index 96b3f08..5162476 100644 --- a/Example/.vs/Example.csproj.dtbcache.json +++ b/Example/.vs/Example.csproj.dtbcache.json @@ -1 +1 @@ -{"RootPath":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example","ProjectFileName":"Example.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"Connectors\\Apicall.cs"},{"SourceFile":"Connectors\\APIGetSquads.cs"},{"SourceFile":"Connectors\\CheckInfo.cs"},{"SourceFile":"Connectors\\GetLogedInServer.cs"},{"SourceFile":"Connectors\\GetPackData.cs"},{"SourceFile":"Connectors\\GetPlayerInfo.cs"},{"SourceFile":"Connectors\\GetSquadPlayerMember.cs"},{"SourceFile":"Connectors\\GetTaxis.cs"},{"SourceFile":"Connectors\\SendPackOrder.cs"},{"SourceFile":"Connectors\\SendTaxi.cs"},{"SourceFile":"Helpers\\CreateCategoryLists.cs"},{"SourceFile":"Helpers\\CreateSquad.cs"},{"SourceFile":"Helpers\\CreateTaxiList.cs"},{"SourceFile":"Helpers\\GetScreenSize.cs"},{"SourceFile":"Helpers\\GetVersion.cs"},{"SourceFile":"Models\\BattlemetricServerModule.cs"},{"SourceFile":"Models\\CurrentServerLoggedOn.cs"},{"SourceFile":"Models\\ItemModule.cs"},{"SourceFile":"Models\\PackOrderStatus.cs"},{"SourceFile":"Models\\PlayerInfoModule.cs"},{"SourceFile":"Models\\SendTaxiOrder.cs"},{"SourceFile":"Models\\ShopPackModule.cs"},{"SourceFile":"Models\\SquadsModel.cs"},{"SourceFile":"Models\\StaticData\\Form1Module.cs"},{"SourceFile":"Models\\StaticData\\UserPcSettings.cs"},{"SourceFile":"Models\\SteamLibrary.cs"},{"SourceFile":"Models\\TaxiDataModule.cs"},{"SourceFile":"ViewModels\\HomeViewModel.cs"},{"SourceFile":"ViewModels\\MainViewModel.cs"},{"SourceFile":"ViewModels\\ProfileViewModel.cs"},{"SourceFile":"ViewModels\\ViewModelBase.cs"},{"SourceFile":"ViewModels\\ViewModelCommand.cs"},{"SourceFile":"Views\\HomeView.xaml.cs"},{"SourceFile":"Views\\ProfileView.xaml.cs"},{"SourceFile":"App.xaml.cs"},{"SourceFile":"Ingame\\IngameControl.xaml.cs"},{"SourceFile":"MainWindow.xaml.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.8.AssemblyAttributes.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\Ingame\\IngameControl.g.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\MainWindow.g.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\Views\\HomeView.g.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\Views\\ProfileView.g.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\App.g.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\GeneratedInternalTypeHelper.g.cs"}],"References":[{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\bin\\Debug\\net48\\DamnOverSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\Material.Icons.2.1.0\\lib\\netstandard2.0\\Material.Icons.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\Material.Icons.WPF.2.1.0\\lib\\net461\\Material.Icons.WPF.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\MaterialDesignColors.2.1.4\\lib\\net462\\MaterialDesignColors.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\MaterialDesignThemes.4.9.0\\lib\\net462\\MaterialDesignThemes.Wpf.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\Microsoft.Xaml.Behaviors.Wpf.1.1.39\\lib\\net45\\Microsoft.Xaml.Behaviors.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\Newtonsoft.Json.13.0.3\\lib\\net45\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\PresentationCore.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\PresentationFramework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xaml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\WindowsBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\bin\\Debug\\Example.exe","OutputItemRelativePath":"Example.exe"},{"OutputItemFullPath":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\bin\\Debug\\Example.pdb","OutputItemRelativePath":"Example.pdb"}],"CopyToOutputEntries":[]} \ No newline at end of file +{"RootPath":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example","ProjectFileName":"Example.csproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"Connectors\\Apicall.cs"},{"SourceFile":"Connectors\\APIGetSquads.cs"},{"SourceFile":"Connectors\\CheckInfo.cs"},{"SourceFile":"Connectors\\GetLogedInServer.cs"},{"SourceFile":"Connectors\\GetPackData.cs"},{"SourceFile":"Connectors\\GetPlayerInfo.cs"},{"SourceFile":"Connectors\\GetSquadPlayerMember.cs"},{"SourceFile":"Connectors\\GetTaxis.cs"},{"SourceFile":"Connectors\\SendPackOrder.cs"},{"SourceFile":"Connectors\\SendTaxi.cs"},{"SourceFile":"Helpers\\CreateCategoryLists.cs"},{"SourceFile":"Helpers\\CreateSquad.cs"},{"SourceFile":"Helpers\\CreateTaxiList.cs"},{"SourceFile":"Helpers\\GetScreenSize.cs"},{"SourceFile":"Helpers\\GetVersion.cs"},{"SourceFile":"Ingame\\overlay.xaml.cs"},{"SourceFile":"Models\\BattlemetricServerModule.cs"},{"SourceFile":"Models\\CurrentServerLoggedOn.cs"},{"SourceFile":"Models\\ItemModule.cs"},{"SourceFile":"Models\\PackOrderStatus.cs"},{"SourceFile":"Models\\PlayerInfoModule.cs"},{"SourceFile":"Models\\SendTaxiOrder.cs"},{"SourceFile":"Models\\ShopPackModule.cs"},{"SourceFile":"Models\\SquadsModel.cs"},{"SourceFile":"Models\\StaticData\\Form1Module.cs"},{"SourceFile":"Models\\StaticData\\UserPcSettings.cs"},{"SourceFile":"Models\\SteamLibrary.cs"},{"SourceFile":"Models\\TaxiDataModule.cs"},{"SourceFile":"ViewModels\\HomeViewModel.cs"},{"SourceFile":"ViewModels\\MainViewModel.cs"},{"SourceFile":"ViewModels\\ProfileViewModel.cs"},{"SourceFile":"ViewModels\\ViewModelBase.cs"},{"SourceFile":"ViewModels\\ViewModelCommand.cs"},{"SourceFile":"Views\\HomeView.xaml.cs"},{"SourceFile":"Views\\ProfileView.xaml.cs"},{"SourceFile":"App.xaml.cs"},{"SourceFile":"Ingame\\IngameControl.xaml.cs"},{"SourceFile":"MainWindow.xaml.cs"},{"SourceFile":"Properties\\AssemblyInfo.cs"},{"SourceFile":"Properties\\Resources.Designer.cs"},{"SourceFile":"Properties\\Settings.Designer.cs"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.8.AssemblyAttributes.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\MainWindow.g.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\Views\\HomeView.g.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\Views\\ProfileView.g.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\App.g.cs"},{"SourceFile":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\obj\\Debug\\GeneratedInternalTypeHelper.g.cs"}],"References":[{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\DamnOverSharp\\bin\\Debug\\net48\\DamnOverSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":true,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\Material.Icons.2.1.0\\lib\\netstandard2.0\\Material.Icons.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\Material.Icons.WPF.2.1.0\\lib\\net461\\Material.Icons.WPF.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\MaterialDesignColors.2.1.4\\lib\\net462\\MaterialDesignColors.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\MaterialDesignThemes.4.9.0\\lib\\net462\\MaterialDesignThemes.Wpf.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\Microsoft.CSharp.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\Microsoft.Xaml.Behaviors.Wpf.1.1.39\\lib\\net45\\Microsoft.Xaml.Behaviors.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\mscorlib.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\packages\\Newtonsoft.Json.13.0.3\\lib\\net45\\Newtonsoft.Json.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\PresentationCore.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\PresentationFramework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Drawing.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Windows.Forms.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xaml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.8\\WindowsBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\bin\\Debug\\Example.exe","OutputItemRelativePath":"Example.exe"},{"OutputItemFullPath":"C:\\Users\\vitor\\source\\repos\\scumoverlay\\Example\\bin\\Debug\\Example.pdb","OutputItemRelativePath":"Example.pdb"}],"CopyToOutputEntries":[]} \ No newline at end of file diff --git a/Example/Connectors/GetPlayerInfo.cs b/Example/Connectors/GetPlayerInfo.cs index 859e0dc..013e488 100644 --- a/Example/Connectors/GetPlayerInfo.cs +++ b/Example/Connectors/GetPlayerInfo.cs @@ -13,7 +13,8 @@ namespace Example.Connectors public class GetPlayerInfo { public static PlayerInfoModule PlayerDetails = new PlayerInfoModule(); - + public static minigame PlayerminigameStats = new minigame(); + public static minigame PlayerminigameStatsRank = new minigame(); public static async Task LoadPlayerData(string player_id, string serverPort) { try @@ -35,9 +36,14 @@ namespace Example.Connectors if (response.IsSuccessStatusCode) { var json = response.Content.ReadAsStringAsync().Result; - Console.WriteLine(json); + PlayerDetails = JsonConvert.DeserializeObject(json); - return PlayerDetails; + if (PlayerDetails.minigameStatAllString != null) + { + PlayerminigameStats = JsonConvert.DeserializeObject(PlayerDetails.minigameStatAllString); + PlayerminigameStatsRank = JsonConvert.DeserializeObject(PlayerDetails.minigameStatRankString); + } + return PlayerDetails; ; } else { diff --git a/Example/Connectors/GetSquadPlayerMember.cs b/Example/Connectors/GetSquadPlayerMember.cs index ef78760..ab4a735 100644 --- a/Example/Connectors/GetSquadPlayerMember.cs +++ b/Example/Connectors/GetSquadPlayerMember.cs @@ -34,7 +34,7 @@ namespace Example.Connectors if (response.IsSuccessStatusCode) { var json = response.Content.ReadAsStringAsync().Result; - Console.WriteLine(json); + //Console.WriteLine(json); PlayerInfoModule SquadMemberDetails = JsonConvert.DeserializeObject(json); return SquadMemberDetails; } diff --git a/Example/Connectors/SendPackOrder.cs b/Example/Connectors/SendPackOrder.cs index 07f2382..81675f6 100644 --- a/Example/Connectors/SendPackOrder.cs +++ b/Example/Connectors/SendPackOrder.cs @@ -33,7 +33,7 @@ namespace Example.Connectors if (response.IsSuccessStatusCode) { var json = response.Content.ReadAsStringAsync().Result; - Console.WriteLine(json); + //Console.WriteLine(json); PackOrderStatus Infoserver = JsonConvert.DeserializeObject(json); return Infoserver; diff --git a/Example/Connectors/SendTaxi.cs b/Example/Connectors/SendTaxi.cs index 96dc284..4e73f66 100644 --- a/Example/Connectors/SendTaxi.cs +++ b/Example/Connectors/SendTaxi.cs @@ -32,7 +32,7 @@ namespace Example.Connectors if (response.IsSuccessStatusCode) { var json = response.Content.ReadAsStringAsync().Result; - Console.WriteLine(json); + //Console.WriteLine(json); PackOrderStatus Infoserver = JsonConvert.DeserializeObject(json); return Infoserver; diff --git a/Example/Example.csproj b/Example/Example.csproj index 40f250e..eacfaff 100644 --- a/Example/Example.csproj +++ b/Example/Example.csproj @@ -222,6 +222,15 @@ + + + + + + + + + diff --git a/Example/Img/BCU_green.png b/Example/Img/BCU_green.png new file mode 100644 index 0000000000000000000000000000000000000000..8556d60f7faed03accba79647dc4518363cdc89b GIT binary patch literal 208586 zcmbTdbyS?q(l{6r0tENq9yB-%HUq(J2<{%-9R?4=~B4oRr$LXGj-+e`qL(H$yY4 zk%)h!?$SE$>Q0vKUZ$=V&&180K3LGmJD6Hos9Bhrd%Fx+0G~a3A#S6g~f?jO3si1FXooOCq*fVkU%=>8>? zj*<$Eq?4-!jSvSnyBQZ34~>8jhb1pRpM|BF0M}a@9xfhUPHt{aE+KYq9$_wiVSZkk zfB(@T7`mEU3ad%U{F@!(2}Eb@?(Qti$?4_g#o@)v;pA$?$t@%##L30O$-~2rfM9p? zc62v|usgcZ|A&HTV{nhF}fJ#dL-=Gc-{{!vju4eIn!xoS8$+5g9oD%MW!PHxst&NMvy9Q-uQ2*dGladY!>IB@Xr0r+TmdAYbPECg9- zXqdHa9L=4)+*tmhrKBV*@95@k>S$&mF9o7QQ0K6*F&E~R=H?RM=M|9Pml5LTmX;Rh z;*yr(7UUHINbreE^6~x$SIWuE!@;(S6ohnFr0rs`v1)d{__gqS$~KB2F!gs#!6X3D>wA9qp zEFFTo?#DQh4*SDeLM1uE7M7Ru-*>UzHJ*$5Z@c-9J**6|e*C8Asf~P`KvlyEOFL3BFI1?+ zE5m=lL-Cvc0sjx){{~l)(EbPfKY0HO{Qtq`e}VsRHvdhk|FHQlQvDB`e=G4H@c&5l zA2$C#m5&rdIzBP?)rTA9LI}TF40w{cP^f=l(0EI{cb>0!(RI0FV`CHH>E*S%Z2Xii z`gmi8o+o$Z{ct&Zw0hZcIiv5?TVt#;`v&S_-d!d3cos)3eEPcMMmoCg5AUN`sHqg5 z@lMr&(uc?@0*eFX%|?M$zo~$W=54_*ZtK%9gF(1x1vFvo6V2vb#Fi8C%xBnIGXxtl zQZH35y9zOyzgs>3cm|by%4H$EF?=O?IZhP$WE}X4K=Lb1Yi16;SV{(I|GZVli8s}o zUxznNepll{1O-Ro6?jZcIsO?)i0|Cq^4DUI&vBLcF^g1~#}^jJvI4hBSyL2nykT+l zm%|yOK)plq>de_9)GAs-G^3Gpa82G)@`CZ5T7H7va{ixh!?X|yfNbHID=}9XrHuFX9%}!2WdpC7v z#P>#`-l{CLKMByT)q00Fu}7E`v&-8!^^v_@m9qyz?Ky7UCg|iekb|-eahdH^=PQKo zB0TP__65U0h(eP=til#P5$xqYPWb9Yc_2<4^|Q1mnAlT|Uoh??Y&J)1X!ZtYismL` z!n&0hIYCwnKh@92TG}*Tr=Ea2;v`vdYqc`y40Z-_je1S2RA?3#7Xz9-INytP9wirW zgyc;yKi+J_(Le05{B^iq^`o>GQHqL3O_p|@uBB?Gg6^M~JyVk&WZI~(!nZxW#qTl+fb4` z7@W0i7;hZ`pD_E1-1&0amVe*FcP*JsyR@mP33>WZmvHIY?V?*du+gAQ^T~~(_i51@ z*s5jz8koZ=7!HMk*VVc4KP@Gt_78a44{rI5UAv~-_~yiXL{UF!No06r#_W*56 z4txQ5Y)xvnphNd0bNC#dmp~b6Ivmz5xufw(`|ny8`4k6oQ82VigasVc%^u}#iC_Warer%1FR{J5-xKH?J@@Lj* z)~X?;!%)SQY>>ZuiE5QbrQsO+8OxYZyEb^eu^S3V(_h`VJp5r!{wW0B#t}#bt9!^0 z2o&w|=y-Za!4npQLSNqm$cmE)w;7$#t#+4m^4(Ka+u4KJ-vP98)>4FwuAZw3lxfm2eGFiZ(` z!AYAn0>?M@c`$D1GRM)$2|*&qS=FWw)s~yk`Mtrq_j|4^6niI3F|+fIz2;F_dk}?k z@SY&rCl22|5%6$${gKo|0FDuW9JyC}gXOqA}Y&;gj!2A8OD#ms$xlUz&7 zo%_i#<-*d^k4Niw>LdPJpl*I!+>#2=qg)meXL_0reoi~lW=0S@m-%IWm!O$tP<(; z8nKSt;OB9rHiLI50dlN2B6QQ&s?6jtAHAON>+f`lei5o;J20#?GyBD;w*6g`mO}-H{jJ@FklWASzN5` zXiz>hO0;VEG9<&j2*-H6d${n^<8HLf?{p>U`0AJm3Y8rKM^@--f#DJprU9+pA^qGRGW77$!A<{AoQhK`Zvg8j!S|4+1hbl#L39Fr&l4{K*W4Z)8W#P(Vub>I_jbc; zx@cVID!IJRYLz%KZY%z{Io_8}){;buD6_PF-*u>{q#CuhF2 zbm%8-PXVWiIrmcC!T;K3QeLX5I<=mKfp&2?;`%n8fMl3Y{()RNSf993V00f`3%CjF zoW=|F^4`A|c|8F0TM(JcQ)rS4{g9xrg`Vgeai7U~FF+M{eqVjK)0#q1jq}I4#*6AK zz-s&Tc0~$X@=1b4j)hOQ*}7+ECU(V!lwjZ2r!eui_%(FEZYpoW9KlvC>-^4_riMQj zOSv$kT2IgkDo2tsYbY?hFDsb8XW0;rz;-IQ_8twdZ*JC|=fVpe*xiLSO0=wbvd6EE zMUSW{#u0HkK0nh_nxQ8!dvgwux>HdBt2s~;XT_;!UnHyE!aWsU`b?S=;cu&7|Mn)w zaV2_n)2j4o;h)HHeGD6y7O4EWiGrG1A3Vuf1HGjVrV)hx-lvzPWWqZ-K7Lcaqj#wn zW8`;+@-X`Z?@-~$Da?7?c>2cKev?TBocnclVPckbb&WG0jKjbvnidOtFbYg-x=ikI z{qjLnpfpKwR$E)ki1lm9QJ&+hRbJ;MXya8LjcCLNdVk0HR*npi%jbCrFMsoIf}AqS zewdy~QZ&@;Lv`4!k%^OcGD|!7l?UVrWp#?NqhomG9tYAf6x{jk@bs1KG^=5oYiPUI z7HdqH+3n@s$pk8OfSja3`1`#+s~$&Ug-*Uxlwi|Em!;R=J|Dmzt?ntPPqDtmm;XY& zgdDZ?6#QA3E-|$VFsgI-mn}Gta`kH~xpF8dD9X9d%0g9jhT)>H%I-}P#_rDebNTG; z1&7;~jtBkbv%w*W+Kh~Yi@m}euHrzXiIg8=yAvjYNkOc{?+2-1&Ola}K+4dxZJ8Pi zYK)Ivu12wED#ZgArn$8|t?|1aa=3G3+PFVq>zOajdHgFf|HC5ZF>^EVO5A#+1S?6S z)KY>mSo8)}2(d3rlpM{Wz(3`rkShz^0=|Mx4VZ^sm!0ze_{Mp%m3r;KN~};@TPv|K z5ORebXWdh=Y-H@Sm7w=ADB;Z866Xx=+FH)rXc@s=??=4?|6O$iTf#PJa)3MN4h)&RwBQ?uPgkLt>zd)TX|T&% zlX)L)14>q>&Eb)noTu1f-@agktqjvc8Tk6gwB~EV%7Gs#d;o$d$YNEDgjK3|Qn}qS zl3BAp2^FMg{IFK~Mb`EhyG=Lm^e}G!tF07?Kd-af5YsSXRLm`VJOH2o3aG-jC%}>` zWk}Acn|~cgA?g&`VYFU%EFL*SYu9ymLrmcNiB+_{BL3P9lyVE+*JCJDDf+t|NS`j) zRm^uhURH1k)DBXWg{vJgqp$DrxpE!!S8?zEeiPSbK?qsCFU&w}3n28=-(v84^$P=x zGb|;3!&?0@+D;=Z zlpq6;XTci38P~O$XT-k{`(GpqtU@UDVEg%O{{*@@sHdZx#!YX*p1oA=xJslCCTiIkM^5Ij0Q zRL}&X9}pA2E@kvR#P(g|fdQj`u(QV!2vHKQ0cUe5Iy@IB8CTjNhx5Qod&j1F?q#yDBzVG?q3Y?Xp5BM=mtmc$?;u0U)wT+C+g-x5qB;YEbyk z>2!^$JX{>8dCkPsj>V{zWy=QAO;NQ~fD?lZrPD8CW$!E`dxphoi4ZOcqyA&9xDGAR ze}#u)^n>};clR*PKi7R0ao3LqCEj-478d1GHan>w%TNz8zFPUd0&X9>q#%xad%L@z z;U!P9NSGh9tar=tql#VtbQJhrpG=M(*B3Qlp}g4WT!{VL{!4P~=QxtS&msX? zw2XNTsss8dagiPi%-4+8?UnSDT&o$RJyc?4bHGlMl?eTda`-Qd^LgDjBCTd2D+ia& zrAT`pGjkFze#Lj7c5bAW;&5b?953`q?qEb%8UNJaf`myh9{GBmOdelhFP~h_3z~f2 zIq3fLt4)c?l52Rc*mZCAyXIInP%I2BFi@cpdlgDz9$OCxID)~PC(Sm${XIo%WqJMU zfK&6Scy{fn=Wzbmy#?y!=zlrwSTZ4~UpAfj-q(oP<&!5D&tkd>2hj7}!(M5AX{OasV zaU|*H5Uij8&LpYERoj6_ow4|9UbnTFpGN!lvUIGd(#?V#edfKf?6EhW#SXaxQ@qx6k|Vtk-p&&=i9fr`9s3y-Fx(T>z|f!$XpY#F*jKqK^&&iSG zeU6XM@O&@)ig`n=hx2 z6sj~_*1qF}6Oi!~cO_=Mhe}lPl4|ix?@EMy#WSm#y5es&?J?lx1SM(510w$*=B)KY zXBcE3>ncn!KXS9n5UTjn^6jgtlhXjNV?QMvs?w>CuSlfbCd>PfTN)dGL6dfe(}-;O z(lwg3zp+#_EP~cyf@;9<%OnNqS3_oV7-$r^@Clu;iYjirA)j}*?I~u#7IZQg(Wn$+ z$-0N?>V)BFNOv24I0+lV1dCOL_+j5ds6RYU(-*v^^I(efkpGZBwW`7L{$FaU`C&^~ zKH)n8C>$A0R>!d5iE9uZthhLUL2Yo*aP>QG;I=b>dw{U5R~{&`T52T%o5ZS-&m})! zKaF?cfy^C{A4tqFJCQF9?%2RKyY4|mrQSXhh~wBF1C-M{%~ zli7wj->TR-#%^y5yOy8f-X2SO#}ot+HfkzZr2PSyC{w5g;SmU{y-M1zRZPtp3(s~5 zIdBOe!IC}fHKXJbK5ZxL6M8>v6!;N~N+@!J`RKPKdKNQ=9z&G_vgP^(=wHdi`(E5C zR5H^KBm}-H71KVKdX&8eQxD5+OUIAx{3Nkb(^!+Gve5ALHnJ{&H%#|4C{aNvp)Qx! z3pBeoUNdGy6OutIRnyciezz!szfykgJEE1if3Np;Gyh>&3MK3dx$My5*#tM1kK~>| z&Rlo+E@szLe~n1CvV*ADc45P!L$e>8=VgDsGCi+r*pqSpYZh#R{mXE_>~@VE_1iR- zY(?hGQ~%Hi$blRUGB-KrhRU&se07&QTb1gvBYi9Oa{*e2;08-t@SlXl&(&B*`!pT^ ze2HO&*-wI@>&gu77s;%I%2}_o@!xj!o$B#^RvbwERQH`LvunfSut?`E_RMH0_F%7C z)Q#u`;|;bu)n01G8LB)Zobr|{>hW%{dg@tLB0JEj!h zK*uIe9~oOMnLADYphqJ?ZkWew80h~D^V|!1;VS2Iy_a$*<-3au;=<8}=U;>Dj1!%O z+rtX8>&rrIsBifkjDt4~{@k^HX_7eGp}B~%uVW)rUgiuvKz~I=aX9thdo5K@bORsB zIE&(JBcZ2$3%9K#SJ&ji@{v8nzHVvz*ycvsI(cxN-{6a8Az1rOR|do$Nd;Ak7%0)_ zqwi{JVl?!-(jCZJ-Qc%BIh5ONHz=MoXpzqHzACr#zzc}@z-x$g@HM~_ZMw&l?A7P3 zg-PXX^x=MC$kS1oLj*;pi0@awt2yp>D2N#N(@Bl$$8jNGz~)m803ZSg^&|Bjn?$bp z)O=x=C;*xJSk-PLl8-`2h3+#JUSz+6MRfe)F<`h4T*PkoPYA26HM&cn2CNIgK6y=b zGJ1tgu=q}t981|W+GM6g?hV1K zWf%V5a>#9bamIA&?r63Mr{4DU@sdRsdG0csDSk*^q|rIIZ=e3g00g*uU6L9Ruyg=` z=DDz8(u-usJKl_P+gL%Gzy&ib(tv0K5H0MJMlL7kTLmi05UTv2b~GD4Z8Az41@umi zY4rfO^p(L`K|@1BT2agIbUXRA#p4w!Y24VL*VJhRl|kRY zy=E7xhg+y}{}K%($Hc@!s7#OR<5;IBq1l=K&U>00zk zv@JgAx2e9Se_=<&}(R`VVX@Hc=$-yzXe0M$HaxxN)N=mhn{;)Qkx2y#8 zG*}%Q`qB8xcaO%6Gbfm%r1od$w|G-)(kL-kj2d5I52yaPmU@C}Q=TgduU)~b)K%g( z&yXqc^;X(iQ8~$@#HkhE5Z&51UnBI;bsQ!{X3hqsRd<7^TV0IF!Mx+)v>S3coHhs0 z+g!io>0Fd2*&-jYv?=FLx%OY3H&uoox7~d}W7zYqUO$~eMyntJt2U4CFZmy z`_WIDZUAY0#->=W=F6D_6kmbpJ39~B_@J})kUT;kKhlvbJzZ3l*){5SI!WAC? zx)3yJ0QdP@(p;-NX_k%Uq2-tdW9}swTX>dv=Mw#X-JPuStU# zt_8gW-vG0MVqFT1SDPd^26U4C{86PJYj3RvqlTki{ONqLf8|r#(4lNm+sdEeN@Zf@ zrK~sqtvBG|7KWeg)p28h((|nXs6eN?6EYTKeY4l<`BgGbZ3AUBeZ@VzfnpM+-a(h6 zVp>scpiy1(NF0z9x;hqCjaCJFqzAatMf>*F(VCTHBkF008ryxRj-Ej!Z)h4=plsD720m zd1lXsISAaU)V}fsg;o`Uf5H?oYGW!NW&o5F6rUTgXh}mh*|s7>_5=U`^Yn$7Q7oV1 zTh_YyBIYwIYQIx*0HbHITCqZi3D>T?AT^bLflmt2t@t((c{|k4vuGF|`h831s{p04 zLf+Zjny=F2L~(IE<`0uMt=K0ZpeCk(g(S0#%X%8Gm2>%f4)gsF1CFPLCar_eoorvn$NglsfV}zm=e!|MmF5Rcgn2rdTn(aV(-Lke3WwNAT!GDLV7>5{s-eLqBN2^Jdnu^J zX3;h!3*XXrvxkrgSvN6S!@g3WDpQ8KrA|4TdHP^e`Dp9?ZU!HsO?wGb4ou{AJ(N_4 z79NeLpdX|AwK|Z;0W-c|G3Uxg;Pr}2yWXR2P%8);93;QV-p^~3$@a9#!%`6)Xx z^r=qQ>Hc(~t|VFUb&iL4GnxkuqvbaI{2aed#O;fuS5IF3k21_IP8!#E4&VkC_M4F7 z>NA>^maXyaKE|V?6Zw8BBhdNUY32|Qnda@%CdIfm^mm;JnSv=L-y)LKhAH7U%`&x; zL9`h&M*oYRC;<@Gk1v$OK{iu0=8@#A$BM~xBV!G{yr@GG4TcLx6xuV-hx^)iawSXq zg1tX%cPc0#&B`vkqeIWOgSYP}6%w#%4oATaB-=Ml^(?H&Zob$fw>a#;y!UjweZ+Tn z_Yn2rz~{O8UuV8EXTSfmDvE|rv__-3nUg}C(xz7v5GH@A1oeE(*nw~g=#R*R58z1I z3CVx*yZR|o_R%e`VgQleIdem}$hU}PjJDRS3BXm3AZ&6T7g z5{()agSt9|Q7G~KYIiqP&r!Xcf7Wrx9RRsdC#|xzMXz3CC+%6Rm$rd2FT<`?(l848 z61{rIxqgUJ#YAyQ83>?Jj*&Lk*H{Q)|2%)*y%RFtIy8G$-_T&z-#!?hPBR{uga|aG zc5nR%mDzHmz&68F9$;$!3mdc{Iur2{sm> zh4pXRq`>P@!)A|z`pvqMOV-4~ocBU&SWS*hctL5SlR$oIzC9DKxZB|DixRU~pIn`U z%U|P=%Eymnm%`pcvzwQ%w~JS7$IaasKJlKeWNFxp%4_bJ|ME7!J#wL*B#&$N#*CDg z5ULnXsWJbI)$Y~J#i~Tlc*&LNlid+3*S6=uL^!rJU&&H~gsW9DZI0-uL01dhh!HqM z)H!XP5M=}?zE7z%b7Uc|Cs~@r$~_{10uY#eqmeZPx5^mVR@VADX5chdXX|z(#Mp+t zg%OHO#enkjRa2T4fL8Mrw?5y2*y|5wILja+q#<+DGs<$|dDoLXz=1O1<<;+v9#^=Lg8lR1vla)@@1JzJ>{5zF2X#eN=$d!j6uP zUKJm7fDy+Anv2plnOw-v0G7#wZx5!%1z#zTPpW2ZXf*=Lw2BRlb##gv(y<2Y@*XgF zdlF_xe@{wrf+$lZw7xn4UYhaXP_i4@i0f`|(f!7ze@3qycvX`#VU^?0xZ0rS*2+I` z-A_)c#f>kK;IRCGlid5nwoU>DJ1xlIsV7=-y6{Q__z;~czJ631mO2$}yl;l+u zEYaes2|PJQVqKXnUOh?}%l3|)MLt=s?Z;cVOx<;pAz!IdTBJ}4Jw57?9}vL{Mq7c% zY?I93%PEp$z8=H$7YOtnY=!b9-sureq`r=z;wKzdx*=3q!+_MxS60rc=j{GVb$3EI zGodnhynxlGy1{(cPc-LSQ7J&ij5?pPt2WQVwmEygHag!5N7fj7-SVxuTv|>>fXI%V zT^eMw{?#({Odd~{xLoG5A#1O+Wj*7{{n-Sb|IJ$XWS}V2Ja$zaC)9er-B0PTp)(u) zfO_x&EmK$bjmGST9omRoCpji&Wne0odh8ZOSra2Wd+GS?gNN|kswt;`_-JKAEYSPC zPoIB!G!qY+%*E!sdIx0hi`27mj5rms$YY*vDZ+iJ7c(-YOC%hz2}vVr#FlFIVC)L3 z$nx5ri)-?M`MJ16^PrrOH&N>mp`sUpR1AR2FCj`OiyWr`_OgwDt`nzr__kDdEn-PT zYyl5axsZj*MlL5=mqVUBWEhNcvo2#8DrQ}`Fq{lYbp`IcvTbv?=V zTT?5ZpmN*qDa|!r31!J+E*cXWOh}F-fb5TR67^!V`(6h`2faC6udU-xAn|Svh^4sO{^#!~U)k`KSH%T#?07()#{VVCCCT3g?h0vrn+2$V_Ov z%jVbwu~tdq=M`Mtn(rd~sRbzK(eV4z6@Q$cUNHA1&{sFgW9o6!Ht`|Fq3=4g zCm!=E?>aMOlNF?qt;-FXzGK5Vo#=Y$&HgRSI)=RWGprD1Vh7h2oojk|Otx;S*2M%Tzl+af5r<)fM*KGm>f~{KSoxK8W}T zxyIhyuU{Uj2H|Ky(V=zgx*lSzYk3-ETKlW>e}1KE)y`CLub=T2!K@H15uU2c*d98I z@0V)1QsBVsQ|=%*cW-=Dvem}^XRFZlYkGHUAR-CF@uS&}@ynMU8KYXgvIz)J#8_$h zf(uDS6_cN%jZ3c2_An_b+;X$Ta5kZc=lc+k6;Q#lW;CBkqzY^8O(Al6HS2ZsX8yak zeRaDl%cvJ?;nebV_xt;#MHAe))!`trG-C}M)9YfwBJqHF1C9tw-#XQlpRl!_Xkp?m z@LTj3j20^F3nQh!Kg!WH1>~lh;j=5^QE1^;uRY&*nf%b-u_IMIT_7GP*ZuhU+`d&q z!Q$0`2y>>Hve>hr#R4c5165&@2SFy6gTogl<+~GZJnRsv-U1zEbQ}Wp`LP_4!?~2S z;+^kY3p;nD=`=FyKZ5m9z$>5?Cqxqc=4NgX*-<5wb4;WA1iiO|_95L`ym(#SYe-&i z(sGrH23MV#a9nhSIYlAm_4aG++0oLi^pUW5xq=x+S_{Y}4dGD8G(Dr-ERU4cNaWgk z^rp?!q#GpWpNN9>WJl{=dF@XkbZ?)_aIqgLMn3X{ThBFu3(HJsWC+`7e_-e3tyrUp zQ{go8^t>cSX`LBhHkmw$L;*!(Y?i}b^1^_T60{DOF=u|-T9%t;*WM27dt%{*F=@MA z$14d3)u!|>tEUx0&;4ReKWukLJ*RMb1K?1hK*k^3B5TYBA0hkv42%^4CShwQ6rWfq3IqW7MN? z=EScLz=qVH<9;$ffus*aMuumjv8;47P#Fgv`(os)?d5y6_!kJx)=J}H3-96^$uuq{ zpEifOI*7h;T`PFUQTDu{+URI%765mH>C#E6I4(C!BcfFO2|Z(-W+~3r(@$uFe`+S2 znWfk@FIAbdIlAs?bV_R$52hy865tjx9wLF*oR1%0-TpB#o{2PNQ|x`iT3yAJ9UWqV zM1s@Qs+@NgUtiy_dC;Vl0VLd|q?+2+QjY#Y=etc(re{U}e4Wo9Kp18QAYT9IhhzHi zocz^c6YMV0oUZAyG}74iC0$LxSk2UJkh4rrtV4+NO%V?iO(4P-;Ah(l?Fvz`mf%dRJU2+>js7z5k!;QPzcl&~r^Y(OyVRL)O&91dAm2Era zytgaEwaepGpF=h`p$tA4JRAyNBlRRL)l2p{_^m%H9OOWlO{VHVXmW%V{h{3jisi;f>jZ&6Jdsa)PVUWIit0 zW8Im8wCQ2$5pRC)6YXEx)pmHjy9@W79Ev3t^eoF~rCb5_c*Mry6sZiVXNiS3aCBRF zHq7gwMMF<2p`6K=LIdL9m}xpBQT6F;6`I^@IpAe!`m?7*8{2#4?>2u<{R!v$ixbnL zuvOFAYwPAclXFaS#$LKYb@cBBli5ZG2Nk|-jjsmWIbbodCXENqh9g$be=I}6LI(Sx zba-?6D`Z4Dc)-fSyU9dk6mF1Psa2jdSiiHtsBs+6&RRGFj$j|^E@Xj$cP~uGGOe|i z9a$#~HF75qiFZWo<S(KdG|5`{8$EA`9u$L61o7?A&Tp-~{L9ihW6AOd$C z(kMeV+BQUq<}#qQJaeRyjMlr=8}Y9BgAAhIyYnQQ9w*jvN$^y>VO%_QsjuS#t(@Xs zEz3biIXP4sR+FhbNie4%gN|-=*?{lFJTX{((zpt$6vq^B*Gwk1_!r-6KjY?fl8EC0 z$(co0CHbr0ZVtD!I>nxJjNSp@@J~y8!J*sS}M`2H;|1{>&a9rU*0MW7C0BvbM@ zbr#vzwWWpmE(oxFcx7|?>fWGcInC>xM$sU#p6(n6_1n9Zoq5A-UIflHBRqCKAV2p?_S;)T-Ww#Hh2(eF*JZY?nr4JU+-a~g`W3HF+Ki{)j4GJ!?(T@UYs}OUeUX8vDmUL% zfDs|s65>Qn#Yv;2NMC>Zn&X$$q};hS8ML>yHmbej7eXIMr6CxIAlLPTQ4i#k!>4rN zi;^qeU+|mRseNn$C~ci~-JUKIm0zv%U;4z9i#sQtN7 zkNs6p=RufNB-t~_ur;rnlv&oWRDG?OfBYBzHwl|-ynC9sd>R|Lwqrkc1nL3ikl`hR z4EvB%xDM@I9{tsN%YA7&ouK;0`d>3gr1<#Uk(RZVB}vds2Q!uOeJ zJ&_yil9m=lUvss8LHM1ykAj3HY@_VgT?)Jgy`#(R8ZHF>lRG3t>zKEpNrbLufzqoU zUYd-)22;y_dtO|GEViYZ!?GDArlY49U}<6TM!Q679>as-2RoG&YbW}7lC76QgGS1- zk9CbjB1GWi0x&Z8ig|iV3sQJ@}8R#ZCS+gwdRz0;4CI7&iemmM`?nmlIfeW9C;w@a~Ri3VjzJZ)Cwr;2$KeA>4g z9_nOjV?0|`$(imy*Lcr#VxXAq5>D`N>Ok<*L&uXb59{U9ywz@uz{-!U42K<>R$O8Ym;_Ijo7+%GMojGA5Y8ta>zJ&)7e6p!Aw{DEgD z_gIGmMyAx7-WT5H9Mw*O-uT#Q(O7*3ON`;Fo`KHYsH6{HO1fTV8MjOREjCZl{Ftt> zbAP<|9#B`dDEIkguJ;Y!_xQA(_LMI>+5*gqiH*qcxj=^JP`V$%p;*(`#YVBkIKSSi zF*-62o3=L-&gUm@ljI?qae&bTg#AS4(#5H=42ZOKN*{Qiqk?q$OeHq>@$O7j+x2Qh zFL5-d?OhZM;{!?OvuAr5-vjj{mrcOt8>UJ}-v-jG%*;mIs+A0pLOxI^TUPG43K@OJ z;&CdJcG>zZ$$5S)y^+r(z0x}D=mQ%OxO7TG7{nhrvJfw|2&IDOr0Fotu@B8u3^vS5 zmALDgH*a95lgc@3tGWFFR}C|i;4J=#G>xg4LqQAE3XDwO7CDv`-gQhzaIoOcMKZoz z(NR$0w2H4x&O6O%)GC*(plhpz0-m9f*~}DQmz9P7Hd`;7DWN;W2h-D9ZPu-MTUDGo z`V%%2VSs-Koh^xje1QQ6jWnL*SiSSn8fmqIUv32 zY>oWSt*miRMi+xW4HM;BYyNDlV{H5=q!0Q<#Oi!zJ$?AW?x?mJ-vc056?&}hfhLcKQ&x>>V*B(!N6dlS(JSfC$qXNf)dJ#}B?Ss9se-pe!@ z1k~%5Y)Qq8SV*9EhkpjD2WRxw?-J?MM zbntErB4?D9khY_Kb%83A0kW7j*Sfbcwc}PKX2=M94A!?ZQx}{c_%Bv7WXZlH#h;Q=6PyZI9x95 zfQ*=((M(-K+u!@yMVX)l_u?^iu`=RIxo%FDJS> z`8O#ut^}pf3;=KK(=X>7AW#010NzsaW$9uAl2b*#es^8w1X^4+u8m{e_ z!9d%&gwPWYxX>}V(O1~VL-t`g)ZB2>-BaOiS$V`oGYPR!d%hnMXHs}RdbP>mbrNs; z`2PKU+d8c>BNHAmx8tSx55*eQ@7XdyKgl_=83M%A4Bc&%Me1@km+(A^vD~yH7iZE= z+wb=k)6&D1;OB$Y7w*cbhq7YDmPEr0-7;e{2%~!$YCe?{T(l_8J2LzY~k$Hsdm$*MYf|^p^ItN)XfOb^Bj0P)Pu2eI;{UChl zXJZNM{3ZSb`ngazWfOW*Gk79Cw5)VDdFH`AQXvTgy-gW%KBq=+$$5kqhnGY4U-|Qp z9w3?%5)jP^u4ZQR3v)}~l9Q7q+T%M~D;u3RmYUo~nzR;!P_tOlvluVJ(L}k+i##Ut zJiD&e%dFI=-xhSOy3zGSWPI>~Kbx-Qz+DmEzZH*i<~Ja$(t5C;@yJ?MUB6H=T> zpE9H`{j#e3)r^D;1-5vGYZTly5zpEQn>u@V% z`aaL8_s`h883q%`NN4E3_!JA|`0PRe%o6W7g^?}Zt-KMXqJ`|XnU%jyvOax*o_fI) z_xCQ#+#xwCVncUu+qM;mg^TG~sAZmR)uH`i;Tu|S-uumriJxz! zz{Q>|%zgRD7M7tIHg+neck4r(dsz*u1xIDhiKkx`jep)$yjdWgiB|DC>Sa1uve++9LjU^EGp`nB$<-}l8LnwVe?k;T4WdfFQR4-DEH;nm=aLRdPNAKl-3rg>f~-hWrpkN~prMlI%SK0Y!ME_^ksb~9>9 zO8tB_mnyw7zJqDoa-$MG8r3uN{J_OqEeY8`NaoLP77(3r20TMgjfP;tlKVUNv-O&b zbG8bV!l{B|7cYPYau4b{AaUGaAaDov5{@~2NFyK86zpCZ38`JrZsu7YmXA95QwBX# zQA2004W0uhyz-h8NIw6gHa0eJDHSjcs4h<+l7FCx#<0mUqkp#M?iWY)ycX zy(?Tulqq&mY%cM+Ffe#)>rFz%ve;Y-Gg5RcxDz`}_ONMNZ(gw3eIZ?=e#0%w(gS0r z8xN%leg15tVlVsh3X9~k?U^5C4Cq*n0C3vD=y&jxaE6( zz}~sV?On&6$lnU{%>|9bVU)9w#ExtpJ?&5^T>9tlpX>5@Vr@_(Am*pF;?}0kOYsn} z-f2Mb%wFulo2ff2dYbn4Cp*h+b$&WXPmQ;pA zY);CT&iSs==zI2dbWJx%-!VvnGkaavs1{fi3s7mhU_}wRn()JRB>o>GV zRv0vqtv0&k4Xm~gieA}e?|7vWQj(UWzeo0^V98_*4{4uAPrg*$fW$92iQaq^y*Waa z_&HnN_I|d)IK^3j@3(l!+-uE~hiqC0T<)KP2{@<&*lC2~>HXe$)s#frx{I&%PTp;E zq4ji!-Z{wHkci~^(JD86;@o%ceR#1aE-P*jA8Qn9)Vj0P^RennDeEfai0dtvOkLMz z3=rtLN8@gAau3H)o5nU{fbK}Rke{FUUo;L?rU*}`&ABM2K?BuB0wxt0;qDh*B7NT= zNq)*6ggV8aF@cu`WR9{y2HCUmSPo~C1NJzSIS;@(2c@&$1j40|&~r=umR$p^Tk1x%AU5e%bR(VpHvo4z$zl zfsYtd76_cT27iXiH^{#tCjnX5BLrUfTE{eV>-gBzw-xh-<_AyeGe?AbJ*+aOUzc2IGWitKhc}T=U3O2hA?gxaf zP$;1*6i*S_Ceag$lAto4a3wVd3%KT z`O3uR(@9E$zA55^6oBvh7L&8X#!>-<9)(ef*9}5<_~!!8y@(t;D&pa--?(uDH4@Ry zn>V!}PN9SjG@En!gcRRtWD=<-dEA8RjfU&_{$=0yUanW`bJa@45-%6UT4C~#c-imk znMfC+z=_%SAY0JdgYZL$bQF1M?z!>m16^;AM78|us@>a@{$Z< z0j*)Ysq~(+r<@>U9mJ+WJnLH*5;pV1WeALGL~yb(ru?-=hJWDVm3Vf#|CECXA1wzug4dgO~GDpk-YA4yRj(g4|nH#`rd zFsjv>7y(H#J(&-0yzO-I?1{*Xc|Q?@1mX9rKu-!49aO@*&SW~t@eP(EC&Ik+y)=i8 zs`oN->wHGcO`l>t{eEB6Q(8jvIMm-o;*S=|WrUt%5`lorov**958nR`d%8t>hP`u4RjV=a zK}ZE^Y!G-sOPZZV1R^G}oa?b?UXm8Hes92D_>j^Ga5BYgk`}~)lyNL_@uu25C)MRR z7YG@JX$XP45)Su81{QSzAnk*LL)vrq$etKUT7>>X2+?2?TFw*FB+HP#j9kUqpd`ol zg^6%zOMCF(fr#2b5iVFeO9j*fjK=Bs*jV!H2m58|Nv~F`)S7F_{PsBR%I6-|B6;&z zD&vh;o=&KX`DbRuvrxQ58l)oLOlAYOM-j+7D%*BcbKR)U=NhmvFi5Oqz^6hh+n9eA zF`gSA;ov|AGT|Ho_BV3gd|ZACLTKzYN=Q%VGv7a zuCv^1v~n1TVn~MQw0r)zoUZj4MYv224TOd8@~5ACBHsDR${G66tFKb0-4XE?pjF{1*IDnwbY#>x?RUvoGUN?juie7sX zMzS6eoZ)k#iXM%0RrI#!@>1oF)g!+=9P~v{MmEn##G0W@hDUB zdXswo1S8oKOHu@J;zX2S3R{JrTRnE-er(5GE3rW4$fb`VG=p$FZxg;YPO5~iP(sHq zr9$ytgwa4ZEo30UY!s>`ZC%Nd=X)#cp;z0jmIIm7tQam+WB+}6nKLq%zHcTcgrgta ze?T98@LSqHIG`(6zbA62sBTB@I}0D%o-JPM*I(bE+qZ5@aoYTR$IK14jc1zW@?m61 zpLm-0j$)&~4x(%{>Ig$iu04nhnak|+G%s$Y<6TAV&a!2Y3UcAdmE&IFY2%@Qa4UR1 zD;3Le9XovnYye?c412rfa#il-`0$AK_IG5iI%YkTDK}}F(M=`RopU0lsUyQdHt=;ZTjFhAFzkMM+=LKqMeQw zvoMSvl9ojwnQW;l9qz}KuzOy}6yE!=Ka_Px?8RfiiO`;H2BP4a$ZNwRMg=;q10u&X zHyIskLz8_-!_n9fFqG!(Q>|s0{4E<9IVNpLzao^5s&**I)#??Qqh2Z%D2Ump;Paq5 zA09b|#UNY{(P+8|U(cqbS*LrXzg;2j zbk+Omfg(poNA&gW+cGgtyksdv%fiU!1>P?5`WsC8TTF-`WE79VqZKLHw1?a}MXK4P zGBY41kvw_{!&nMM$&)8(v>G~TQ#M}Utw$hNOpU{IQA8?0tkp7=m|T4}U@S9JRg8oY zd+gobv5a^X-T3L$%wI<_9+_*RKo8f)Kp6<%Aa9S}c?^?5ioo}b1g!|%@Hx?fhsZ;j z4G7GA$2@hc!wkJKIdj?4D1xLR9`Vdi|NOFO3t9mA7$*oq3A;yejAFPFHa-Ww2BBjj zTLBgD**V~)>u-WW30FjjXAVto%WuSIDYK$kMq#8 zkT^br7Y?$4*LvsfT_LrFg+*#LTawpC{#*3Sc^`P#d+e=Z-vX0jXJJ7kR$*9Rp^*?L zndVuap}doB{OAbfcLVg#@!jk)HM#!su< z5vE5EIYRL;ID)h*AW2)>urAZPJ`qA+US1Y29mJ2eG~5fS@_omZ$N|oY@vf+D&*yWp zKMLyL$;(`KYxWRNp8GdPqo3mTlaaK@!Lyf+Gq@r&6A6jKJ1@kEykbM^n#Y8XhwAO_ z?yB~yLJ3`=crrZnEGJE83dO>6i;GKVnPiF>fP!3mmYdGJ;74=lkE)EFE{@B>@-P@s z0S>b6wA=LhYp>Dy3+GM9dm0GI!FYh63LA`6uLn}H1NQb0j}FBk0Qs-1uFzb2 zP6$7iYX4xC@0aUl|4T#sryjsbbOJR9(vF7~InP4>Ij_4Gp*Sw})Oq(}CI!pS8@cr| zUo)qqu6P>oJ9Fr;rWK0si}wYYk%DjquW&iFj%d!j%GnOJ-;g?DLhI>;|c zy>_(5A=KV#%~7klM~4T8Or$*tXNPPsV8hLtBEqak-53TU-8!D~xiiJN9MTseCyO?< z?aeKzx-S$;vPMKChNF>q=mWl25PFf<2=N}M$BomXJQUx_jU?7ga@I*(`5tW_pAotk zMmFEK4`TryIKt}Qh4ttf)cKDlerIO1k(;uhXZd-;l4B;n_jRa#q5Ht!$zx?t``sq)9D*fke z_ClY3@kMD_gW}q8_gDs@Ae@abI!F$r?Wa@H@ES&A$wOnni4^lif%K9?5f1rwRL{dG zDEkPn7o>;}YoCM@5pw}^XA-Bz!*|TU70cwRrBa-Y1~*rrX0s*J+|ZK_&mH7C9*!kV zfVML!Jd*-EOmlODlfG127vX6>o6F^1 zXwS{HJMFd&PZLDx(bGpkMsr7eX{Yc;!{Pc;SLfI+M_H zI=>uVIRtJnD;&fNZxyExOm2VXp@ylBe3a^tL-YlqcE; zT0^szH78Y)Gv`j^>ztpLus1whW7MQ0Ri~lMPnXfGj+xjtPG_@c^UU!)U}PZFj?g>i zrSD-*I!3JSL*xB`YK;apnhhap^tj)@e_xKnz7VHr@aGVviQ`GC0B4JgZPwEEjUq(L z)Dt*TwVx&0XQ>dI*PgR%tHkeDnb2!|PPD9HSc_wcOrAtCZ2sBX*REZ2cnyiRuqmEO zLdP$oLh;>1Lig_7k3pVH8hIw)=WN@$-kO_hEG{it=na?LbbK+b@q(y8fT)Of z5)|o$M(aFn>oWc6nBiU#DHPvDFu@C+2CYJ& zc%|8Bt#vw`JV?=Hf|^FtQ=U1cZB*Z`+5RY@g8| zYUsrGx;>eyhGP(}ZZ?}jU?5P@kdIC78)@axc4s0p2%Wp>-1AzkD&jE6apQ9lXG!O_ zJL$fOZHnSh5igl(2)mFO@Df7ml}S{p9-I*-;KD(kv51n^JBp{%Jd^#%cAzrhzxI}kacV)CHj2tNANnv90_}TJO3*cBX zzy-!f=2}N-bv%>0?OG6;Ns9bEG~MNEzLz?FM0}2rpA|IS5rU8N`Mk`AHPHd*-~3rC z6i*DHudhGQC#3i*hcy#|IgQD99Czjy=> zhugFM=#$A{k0L9kLowWa_Rf)y#sHI2wQA;=kA~uzg5VAhk7QpEJgT`-NY-w(q)-fn zY{S7wLhI=BPV4a{ynaHk#-S|ai{hcD#b8EC7GAt#pO7Ecje#s_$lXd?-o!hX;x_cC z$7~dosnKkSnq8L-4XDAzX{Gzgvw$&ROU;^i^DsErkjRSGGVdC#XfRN^-M%~z+%p7g zAYjw!w5iuSmcDt>qGw|P#uP&DTbrBG+J=64J2HiP7CmOdos;(ZOBy0=7mQDO+|slG zL}c>(3CP^#>p%h)4>aayf*g8}J^29}4le)fqBq`nBYNkZcVZY|kLzMkD4s|{*P=MZ zcNNHO%j7V}X|Q*Du~utz@`a)+VRC6BGn(S@>6zQ&4VrxI@0zRz?-&Gx(DA3AeJYZt z?e@I%TO%ZWAS!A*QUEt(A|Ehm4@UzTNjg72Ph}=^H?1T$mq})AYsjHbgRv;N!Go1i zsnBH48~t|EW{1$TQGZK9npL;Y2AX8Wa1v`z#aj@mh)j<;yz0664jr-g3_|bqV%Y~q zLKqmsLLvlKLRsP=nT={SB0bWI$KRvZer07s-Cm#9+^4<0U1?#<7jjJMHCkF)mV!W# z_u+dzD>UC)8d6?T3uU}eD)rb zIK)=sbPjp9-(@3WLUZj7Z*3-MR}2m#IOCY{r@Rh$>gZF4fdCb@9v=rXEV?DhV;7Ms zK)*S{;+9#%n7w@Tf(yaAHo3U1jI7cba>DIsPYX?sy;vxb#|A~0*LbkM$L~+%oN{em zSCKd7KS~@^A&=s_R8CzaW-~R_obOPzTBo%&PmCD!;UmrQ#TTE8;0^lYQ4DuKom&N>j%0L+ZYqfF=~C48yocSK0X38OG)hjs&x(BOcs!y(Zy-5dk4ep&n!aqv)ihfTs@7^|DjPgg_K2Yjhx19x7<=Nr?a_ET zPCfQOBwA4fSF6?}yp52%RK`n7S0b%z&|(JxdR~sVOo}#Dvds*Z#LP!`c^~Am*`Z|* zx-94RU5_SFC`xb$n>*<}%8YZ7b9LDuiD+z%c|A@#WQIvM0ii;Ht|US;Xwe%E2K2?} zpUM367oLA!G~RJPxR+R@WD_1$0w3sPfW@HRqfKU#?P)rP{OsWDStiYSG2JWn9F-nBn|g+{EvV9V7>)2XOemq5;+jlqGg53acm+M|1&mPTYeIS!>w+N>k4#=3>%y^9HX4xchL`Pm zKHqyVGk#1lnF;;lesOZNs?GO1bnpIs+T7Zt&5d=scIAp_yuZKLNhXqB_|z;6fBhIcK34B@AeG& zGkIpD4)2^wY2g{31CuO@@J!x0mXv~o`q@iHv0u0pNTJ;^uYHeS_YM!_e(_8(R7FP2 z4*F8t0OJEjP?rrc^s8I3X#osH9S;R`CnIEGxJ0oj7L>kqtcT2O`%sDoWh|}D&mqs> zRMKf{wz1VL)6@Bm56} z+VzbM+P6+35?Q$4sLr|ROmi!px)#sQpH<*H{6F-hHz|@ZK8%t5-97sJv(L%8Vo?qA z=6#n&qajUueR-Zazb^L#Prb|QuuOZQg#BG_V%D4jwE|XT!tb&s%lyoc%7BLtkDu2K zRX`tl?)-0|NGE;hD1^-6eclDzI5OfrY@;OM&wlo^I3X>HQ#=KPuAwN!Un?^5M)6gn zRhKaK(ZOL_@FrE*^ONcH0`qgjcA1(HqGnDS4TjWX;zVA!lurN31X@I96cyo_>?ozG zYpJJ>Yiwsy!TKM&!h*%HstX6f7No8>Wzl*XemU&?Y|eUi9V19%ndkcd zviF`{k{wr)pg$E_rOvD@g(`prK~N66$rc3qoSEsF{jl?4&wSe7+CzQN>}Ge9OA=a? zOszu4(|gU_{bf`E=mD48V4~=b6G#=}y_Z>GZuiFn+;H^v)N01E`b#?n#+!HH3YNB z@odQT9ifMA>|kxVy(Z6xkv9KwY|RlDw;Z6m<<^y0c*6%ctZ%Ln+-}``L2#w_%3yW% zrH!qP&f5B#hb-{K%z0-f@4Iq7D|MN?N?P+Z2$m+LjO>R1tx^9cl9Z(P5j#eTnkTbJ&&^)AcyxF$Az4x?=7ujBk+ zaueQvOmSRbX6E_(K@~-=Z%sBZHZ%suLL(kb0HAP?>)v~1L?cUnzfHNV$fvlSBQM>| zp|=%SdY*%&Pu#y8w;Z6m<<=EhTU*;cKoS|;7Z>M6uisNQc5k$zu<_bpW$@bW_1)E- z?VYIC?E*Z?c)B1H)*`Kl07H|QKtrXcmO?@Bc@Sy>dimbh zWaDs?pfi`B*%CNdXl!QP2g1tR%@)<`h(JZj9%Eq>0dxXX;2W1aW#+{_6MyP)9IV-D zGa40h?hxIfpO4K03}|4~GMg=UY}61i_S6TR*3W6?@GAE;r8g`T)o}w*vdoVSP_Nfl z{eGYQ{>-TFZ50INb8IGPK`X};l)B8$k~p568-tM7wNbCDjm-@e$g#pP4sLnS1)%i+ zg}=?72OwkY51SFRAtJKzhW+Z~X9$#gBjTqvF#QAouUfEeGgsx%H*2_4N%O zrS&9oiv8T#PznEqfuAS;dF z4c}kP^-OkV#9SQ9%5nP3YT<4ScWcLuo!6p{{W;ngUH4fr3fFbUSb7;`QG~i|; z=XvC&h3=UTdUhKdhA7g^8zpsYDge&iUXRrPINxE8yfm8_=CRLpM5|Y`%JyPugHW<6 zLB_1~W+OKiu>k7f#Za!>k^1d#f2&@8^;Ojcct?73qn|6MW}uX7(dl*7JWf;+r*e%- z9SbV}PE|X`?aDe|BP->)C9)aHyQ?@heMjR=B7hvfyl!59UfZmn!nF7@1 z*jwnO%jdH&ijsxA*c)%W8GkB)%>lYw4$$3l>&sghP4WaqXflJouEOkcc3ZIUyZu3L zYkh6i!~8SA6BeusjAIFS*K19VQH6%pYBAYmL0db^l*azlWAMnsM~~^-j`BD}a9c*T z4nW5ZKo`(I-P4w)0#0D)=u@M&4)C@8U+Zqi*wRcVvCSq^0$m&@JOGHx8p7`DvPr;3 z0W5rx1_ZeU$JKJ)5A44tfR2p>6W5mQY?p9}V{ZHy68u7rlQCnID*Rr*OW_?sIWIU4 zhD`{-8=Df^uv$S}VZvW@X@U3ma$UxU(GN!Tpr9X*H9PV2WGD z$DwKg(Hs2WF?W7`Hlz+B41HDr>^a!+Hvo1hj6FzenN~@-Cec6dNrEhZw+L^xlE&*zk8uz%exXeh0(j4MAjGmpDiUl?y=(Xc9w(@{$SC%^E z%+8~GRXC2%@2ByCz3!du9d2^Y-g$>XEXPNO0?OZ_D;-MgMWV>iRi^#(VMhy%15)Wq zW8~u*uY0esk*dm!?diuFzx<_|3X6W}-aYmDH(saf z8Gsm!8pl$~n?FnHi&!h~g`onxP)bLy+62Xr9do|j%PUY%ag+PNUKPD){JbNK6@U&= z7~M)s*uCnJH*6%7>4{sm?-{|Hr;&Sk>vIY3W)w_YvzMIh#_=@UEw#F)=k&q$aZK0- z;Fw@`166v4a(}KvTJVf;m!kmByq0}M^uFs+s9J-*n#VDL7M|^xbw4>erjI)+0a!^K zYayUKUs&^Wk3I^h7s$#;pBtEbp@n+I(x#=_(E0jr0qh*-QqW|FXY9vujCu5)-1iLX zcDYU%XB)`pCn&$m;{f=D05{4V`Llmt{CyeSfm?2UY_qghf7p7z!Y6i>= zL}^OOx_n*G=G5bCHk{O;0?$mmDw+b=gs=~f&4{Ne7K`WBVD5i9SH|-UF)uI8Xta&J zo)Bm>)#}PBOY0D)L9hnJIgSj+2qT_4t`+QQajjr#n+GP*O;M0nWvSpAQuVLJdOh^U z<@ugGeyra5r+-r4`S!Qy`wmd2<*V`2$N!?bYy?_uUMp`Fu=I}7za6(j&7>&xrh&8Q zD%TYnV+EU==>?PP4ky66{GGG~uwe;{aW>|pV@4f5@A47GGdS}2`1m;aboJ-6XZhW7 z>njQ92%d1ut*f|V!))cvHpiRy?c29|@|ORNdb55rjB0iK9B=+v^(J33SOh(1Fkpz_ zbRKuE8g;F(CP0}HE3m!kbf`Z5?;#eCT)D%HXHYhV4 ztqM@r*0plHp)xA{vQo1@gXr99bbMtp6wY8>nexi$-KRJOObdHm-W7wZ4{^}o?37aIq7$kTwwFIfIZ z6#^Rr^wRM;ZWWM&SY#$H7LIb6j+&)O9$!ya6Kuu8m<};kRleVljYSvkaq{z-{2ZXZ zYI4%y`8tHhd#BS0m&@)-ecE-;Ew{eXfR0>ax7@mlYh|!PrS~WIKOsZEdHv>Uz0r6{ zz|niG%%_1DZfzXxVmaKm`gTjutH&#TESXdW-}l^rCKfg} zb!LU5oSx{%urDr~k0@3-O68_!e|cPip5YI42_991BG;bq*c>1u9$m1n1!UW%eoX zmCpg{HF>_i0Qvy>H-NX?I`Vy}-Im03A+GZniPh1;q5A0k4_QXPbLXylNdO(7g6!|HFz-xLL;?Jnuy9YU3o}QF zoTF<3K$wx|IGk5nEgCBZ^Tmt|zcguL5XQ}BQ}&BjR#(;S+qc!a06Jn`p8XJFvAX~9 zCmdmezrKe4N+1ZUN(EX2I5*7VqfrjEJT^`kqnq)1C%m8(0CH1OECcycuuB1P zTtjXcU#poLn)ofl)-j(xlaGstvvN=O(%o|FxdC*9OSt9MRa}oBKlX&Z1-f6F1&wAS z>8Jg()bpm3@gyHlX2Lj|rZ3#oy>rY=XAAbpVXF!r%X0E~q2OeSdG4Cr51@}3>ieHO zPzQT^0#LrXapR`i+S<~kdL)Di08^}mK0W&5!n6ki-Tww)!j~Pa68-zE(Bov*BOM|$ z0B8^j1CBF-ELb;VMSFeq!tI-Cb3-$9j?YCQ!5b_Tn+vdJ0Jt?{K`g4zFc~clRNkd{ z%-Fr@emUmQkr<~`C6HqXjT}o|o@Yfi5oi}29UrqDVOtd(xkKxsEUV1{`}d(P^6PWV zc)Yg9Ui!M%jaq!KH&7c}+iEJ;18H)f2%z7*AuN6S8rgg~Geldilcx_%AE$A+!}rnN zfC3&jv>l*`_l!-hwSRpU%+1Y~N!UX-AU>1p1+$s1e8ealM%re=B+HrAfSi$ zbcn6U{sNt%7MQUll-g1HMtg~4)p8%qWe-O~*)%+&LL2IDgsW@_*c~6Akm;g#jvlyH zrzZql?USAoQ~CW&$AKn{NEI;7^z1ob-_vu|sfhrEn!Z*<%sk)RSQlXLYUR3sbLfRn z&8`D5Au3y48L&i;V}W?@@bG}qr3L%VdTGOzI@@CGXLL2kN1) z_2F>L5FEhKJusrd`QrXQ;lE($j@7N%>tw1E zB^2!Fmn#O^m329fj+se^=?odWd_)-@Bk7@Rl2XUg-Fhwo-BV88>DJX;^kFx1-ky#k zEzU143IVM0`tA*i#E>ig(Z?ULL<@j`;~GR)4FNbPu`u!mTUd-~JrJOI^k~kWEy7CR z*M4|-$nx)C&{u0Kt1L(Bval{KGYp1tpOHLIhaasNPxrTdZKRUv@w7~sF4;MH&ZSS0 z8$iD_Gv?S7FkMZKvDIvFqd-r2xj$Gu`u6A_hh|fv!%8xBCSdok|N5`$z4zXcb3WHT z@y7KIEE5|Pp1(YAU(N;Kit_}}lL31Ls{p7Dz@Pr$;DFV+EYX`13zBFP;MnVpdSwd> zmagq(eTojPAxmMD^@VIeYV!Kq+q-J-@niMiO*#Ju z4qY@p_r@05VC?J-MN26iC*PA1gyC#4z z6c9K&Jty#@{Jp)kQz^;y9J>xd0ei&_9_s+{_)(&M^PArY>wUt2mFqWd@-4c(W$1F4wp2rPOy2fRg808+r7qPq0-zc z;9+kn&xxKqjvtEjI8J5L@mSseS}0j*@XlU0Fak^&>xEZm2JS zJrx)`5jH-W&Sx1)=`5WO$7JXLJ1VAqZ9NLM3GiKASz#X<;09nBO~&f|cRx_?zWp{? z_RFulDvb7yTF8a~<6=dY*#j^EFA+f>iuxSmXlcw5x7;L=sinXd&qTB;_T6Ka^(pp( zmwBh9Zr-{n40)G;ZQb9j{b_De;;hR1^yEan|Ngt`*Z=k#GHUd(t-F~Omf6gBEL;P8 zjgJ6yR3z5d*45eFJL=_^UsgLiJB(?qVqMJ$*z)MsGQeSDGoR;F>0^`NnOSfM{W!nQ z2j%RobDlg-Si#ud-r>ds<@XOi`as>j^@4zU&9o-LL&f7M4K8A4g$F^-THylLCCFB+K0bHMhrk3=@(+diF6=$HnO ze?`DSrL(TYt2m@i7iF=oPp@RH4J|?FU%If?21spwEeGgsx%DSSbi)cu zGFT69(SqpN>FHUrwzg3W1}i?szfi6Py9R)HCO}2AF;yk3ZEkK5=m5~$J6mdPeNElC zah>_zcpU%`S+`-!SO8obXp&L*mTS>n5D)+pTBm9tq?pa9$_pB&)YT{q=&)ih7qRliXTtN#veU=z<5$T-xk0S9_F;UovVxUGc_;f+8(vaNB1fQ4M4_5 z1tWF<)<=&XsV9%0sN=(9w%ES??Qf}F0o{iWAF3014a@8~ZYSW5;{_vUwL@vqojqQg zDbKMpqGgfVaQ0x~BU59%sShB_-sx%X1~Y6(qU3#qd#rBS8AR!h3`0e!KF4KTv8f;-L;`T^#% z(-S{YHLtF6fGOB{p!?g(fIV6b&2F7qfzjlGngDDlpkTjs>n45g*MyPl4Tw)m-GhUD zbt=b&5kdUEJv+>ASov~9n%%f8oo6XGF!V%ju^gv;GxH5w$Nd53sbTT>+J`9ar$7B^ zir?+efBy5rfx27I4WKXg;M{WSDlP4-mSg^#k|<$o^5!e3UY6}N%^TC%%%4ui1WX9l z(ATy}URAuP=dlb8;T!-5c+n>W?Hd-v4V);3wGp1szj5iu!v-QnpO0T2Mc zdTmuTYfWw{FwS*&bg0MS1n5!v$F+e29&XkKR-3hG+u4(o6aL#?k@G}J8_Zkx*7w!B z@4Ta4eCZ{A9~A>s0#ISdb3HCcTUUC^YqoDgT&UEih!&%ER)wz}@?fk3_62)xOGJr)3*w$$V&ifb(0^sWE3YFJ%T=R7Ri7l;z{lW+Z z5LpS(C_XEy5ifej=T=y)`DtbFVufzTtOY29{ypqb0p>U+=8l`xHRm{ ze)#Z_>i6`VKUy5zaL6X*{{8!$t;aDkgZ&Sjxbdta(R>OpH^2@6kLBYGIqCBAncPyj z9$@puGtc45?ruFlfbKS{Ze7_`Dl_9PaFXX`WaU9&+pr z;E&_wMgStbvy|oPMWWN(LNa5m4Var;cx+toIX+^uLc3boz)VN-e8R}V;K9x@a);fV)Z;tYL0;Rj$rT}xJdWTYwWp}yB<JqK9mI%4w=uYG8W$^m$jh-27QPk=)Ew z189-phF(854%l3TNDwm~>rmSdR-r7f@p&)KE+~8hL&mZ8h2hsH3-$2v16sDCDnSt* zdd^EmFQ`)BJZ%4*MmHvj4nJp=flBs74Tl%(tD}66)Hh5C6pNgj6IMMl+a9059ngC>9*s8B*!L zv}6zpSgalMLOC36Y)Pj3=E(GhcnrPuv(;4^(7;C3g14etU5-a-pY+UXPd?+H4~25M z6_rI4-N6V4$bO~1O^>vJ=5td0nZNHo)KZgM05 zPy=*!X8|KApH>1JWTzBB+Iz|T4IJY~5Y0FEB|wQJkz zV%XG5Z~3oQ(;*^hqLt;G&t5LodNeoHR;Wgp2KEYI1(2iM&JsU>kiBUAc;C#Qa|RtF zUF>D+zB*p7zp^UN5wcAHP=sP0=Yfp@?w_L9ZPe&96SM;RR|w%yhQ|f~C3ibwXZ=*r zufDh#62wt<-`%}Vh7Mo%Imhp`n;Tw3pRXN@(`Gd6ECgD>=9^r3-Ges+;7W@UQ9Xcu z0D(8?mB07?`|86FKjJ;?u~{&GmWhASKM@1u!Dq~w7lxTDGqMIjoI`K7o^L?crb=$P zbrqK`X@CDO|H7Y4rlA1QOxW$Yu*G?|*DE0Cf#&3NT?mT)q#s zJj-ST9EjtfILC$n{rIzUk7;E9ygHQco=yb=Q!f01Au2ih?m2tjWRs;XKYN9qn=aFW zE^jFB1JHMNuBq+qExxukXer5ZfnmNWZNo0MOchx@)$ZdV``6uGhgF5+lVf!u-%I2* z>vbsdwH50O?rH#P!=^pmo=`V$-Xw@48kw2uOHON+&5z`|TnLDRRYNK_ zQ7`j6DD&)GK;>h>#Ba9hjcd(@9{-xhb6rjr(2WAkrqP$~b^8>L0VLs+WM=rqF z?|0RmJ9nsXZ?&4bWM60_7TUJTF~{kGv=*BNn5mu*&(+cK5vvHzt(NjbpN2R4M+a&; zpKw#b4TjQX|K+4K925HfV8nQS^r_LK2DsYNGPBD}JSsC2$c>skH=}C>s|Q8NU>0vFxy>!No-aUmq7b*PDxmA$HJYn} zYk?mp>DhQP{%A589q(*!=e=HEi?D{8HLFUPrOW5A6~#<=Q5-V_WN&Ye?09o?iwvG| zo&qvKv!Q~><4D#BfO>SyGWnV?%X(DjrXUuOh8n&Afcux=!XOxgxRl0WPQZ_)Yk9qm z&2^f%u;ebFNoHwW=E!0*h|XfdY{<<<&M_}+D)4wRUt#hvei@EO^pIz{p0Q;`C3wTK z3?0CY@jZMWng9SNO56Cpb$A0)O=w9wRmp6jYGFWeT#Y6&%JkZ`mpl6P7JPLNBqyuS zP-Re2^{oy_IvcW^XNbKlux`{Zar6k?q)FEx~hwPS)XjqUt|kU*x>y1p0jUqA};>J4Gh0Ktp%p(%^| z)doSC6g7O`GiBn;*W$2JXQ{GGKBw8sg5`5;8o-tzv;!q1J2mH2lzL=to-D|Uec6C; ztefh2X24fsGtG7j-J=gK+3GUrS!Xxfm$m^eSeE^kMxn3&&716Xd9A2kV=o=E;t;Co z%@LkAsn|3C-}fTTv}vA`Qj`Za?_FB#=w3U)R$IKz^M$$?4%Ku#Wkq4xqV|itFD(bh zVA)U^6U>quMSHqDUoQ8>7+VW@=%tQ@bLDln97A`@tv@wGFH2>DOMGF;!fBIuF&v#w zPEL;(gZ0&}fT2$_n8M7I=WsOBpn>`7w%;bu;E4_n52^fysY$2XQQcNsnJg3D1>q;1 zZeML*E7Sl0U(>VdWS|TT$yn~zrZ0LFEKA|Ru4l>Z4d9EOJ>2WCL8vzx6@#XrE-!hU zQ@FQHXY7-++%3-w*ScDx&gYp4IF}}*B&6aVajQ$9x5SJAp7eW{g+4Xh-yjOaro~ng zDA+S#$*gp|uCMdlaSfa87FGH5!7p?cdh8{tY3z3`OZTiOu+RWa)jl)@QE3>s&t5)M z``92{oSifH2EQM>Nm>T=XDwZq*Jlal%=exxuP^(!L-`H?Kuy_kHv2cFRJHwZ%dO`Q z(48pGtt$-a)f5JpalKXx%QE-pv-#PR$9u;?SnIB>uQkIk@(SZYZe7}hzL_#J9OT*p zs4JY`2H3&BydjJ;x^|5$8iq3&{m*mSzJgUlJcqeyAMVn65(FvkxIT=v~j zy|AJ^qjD!0E5EYEW$t^fM+0j$w5#jd2G`f%IbF=yLO^*REd^T18Z^BHUzFeX{XIi> z2vS1{N_RI10!ky@L-){~(jp&*%UB-B01Xu4|ut_FnI`lG{fW zm&_UcNav4X(4davY!IjZeM^AI%=0mSc{h~QrsaAWq4jap9bTeKhmfURUr>hfY!H%+ zfBh!zZOlfSw;KtoZ>eoGR!{;62=;^)Sh`t%$HCbJ!s8z5NmST`|g$D5MW#Bb296K zvv-2KTu~Oe=N%@1B`Ge?4ZZCEfSV$S>3UaScOi_L!Ob?xeA|L%QJsRPr zwQB)>2_&(YlQkWm#y|Y>>MqbLEwdi#-tJCoAE6 zJLnd9s=@?~wztzD;Qj&`k!i@Q$9Bp{uANqzWgertDOQON4 z=C0}(BBHTIy+ahR9n_x4M(oME$M%dN zg^`Nzba&_b)h8BSu@lVE?TszAF4OJD=3l?{pzJxYlhdUN=2lHj%~9>WW)2y4jNUX< zS&p9^JDEja;BKz}@>#xkgt~?0Qh7@w>n<9RE5rqC4OXpKmb4V)tL*q&S`xS8rm%J! zB7P@I&^c5~DOVpO1K4Fv$+Z6SCwkdO=$5wTntsPc5ZJ(U8TkR^qjtE412p)RQ&-?a#b32shekR8Ue+POSy>=vg&pcRMbsnP znwrmb^`&pLWt*YQMFBR-w^%t#Lo}j_hT;Zan~3S`D_Xzhf*d@q5H6sjpWsCphBCR; zKc3s>#ycnev^O+h^g3=dv~@mz=-!&EWW*d-%zM!XRtBJ$-xB{4sOYmN><(9DhR)ab za%uRaz*tC`m*|PkP)0My=?<=bmt*Mw1i)>4->`Ciq`C_CVQXe0sL;@eFED4!{5;Ym z8zh(hc2J+*>-o4WGLO$IylNqTw3n@n^q!z>q>ppj=13=5KIu0@fSOlU|DxY`^T@uj z4R-11M;5+}fvV}FLK^VAP|E%F%HhFm#nM%CY;S}y2T8O%Q7t+e%>mjZz1CnAg}L|R z9T^j4MZ3wN3Tz3V_t+yF&6ZsdC*1kbgb!v#%?~hEAsv45k!-e1Z2>w?+ClY+QwGe! zz7v!uZ>qr?=%HO$O*;{U6f*KXY}q>txY97W(mHZTEdD5ct`+dC)d|qR-_x{WDtBUA z7r+k`ezWVxB*7P9(@TN4HpQwwuHTb~$$e3v@KxJPf1BfHl)n%FFDG)9BV$Vw1rcMk zdu%@-%kr&Dkt5D6@no4PM3|@Zq&b@dd<9QDNfLpE!MT;K!|wbJE;r7X!*a6fqRL>C zasYgO!{qaBpvb|>&{ne$LHrT+Fw$5Z5D zhks_vAz>M!{!R;-^AX-%;af-fag>~>ykhcb8Du7U zxDZeu;o(9%0={ynC|J9LU*hfVW!MsmKZiHpih1ul#qC&5EgYF~##UXUK5J_KXkQ={ zJyriPF=p{rk~PrS_>&>a3K=oa)lf}|^wGh=qEM)DV}fCtJE7Z(qjLNyZTEY2(-}@0 z5%bsQl)p8G0XY!3TGZY=bl)hb>0|&VAL$VRi&Wu5|B<3(XZ<@CH$5;7KqvEOFEM6| zm)3FwK`!trIKfC8Ko*g zo^&tCD>clM(o9f2*51yALXZd(A>w>vg)qWA#CJ8YZHXof~@3{KvRo%t@p7%R) zzeTSJyjP}~esHZxq3R#rgpf$vR>=G)_Ys*b2O+RVu0FM9Q4#NIKS=L<=xk3#zC@PC z4f_1!U{b2md4e~G*7+?p4(9y3-AYy67y|6ZP`4sI)k9G41ZxU$GJYobu8}3ClZ$-r ziAz1T3P@V%g#Yk#oCGI5@~Rz#(z%uO!^^CyQ4br(9)C#_XV-pf0J-lW!ttpJL%(Yc zH#k$z<#cr*hz@=@GtOCXA)N8d%JmJ=jumL z-_}CW^(CdjSLyD}grjr&AK_S5ZIDG4*^q#q4HT{>AC$WiYsLhb*eNJvJPGb$P#=#<#Y){B*!|^#|4)!mAG`$Y~;X>vBE`sOw zgtweR-$vZi9U;lN3ceJQJJfd$Q+kXDUZn|H`g`WpO)-Y)RX^FsPges!u4S2sLLJ9dE4q2}*RfB0Iz@@~`+nL-1%0W# zNJn$sp^lJ*U^zaEXIeZAak~22$V?wq=p%UEj13Qp;s%PvJt{9G^)$mRF-CToeGV%E zSe8>N^`N{trn57w@Ykml>Q<=1A%E97_UlGpIABOU(1R(PXIqm%q8)G6hrwYP)*ET7 z2hwYBudATj2-$IrN>JTl%>nGnv%4d@FLI4>AA_^0NgTP?(-l%`-$Wz$E)=oJZSCzc zXU64?kDRqL*gM!kiaP^^fE4NY6qtF)Zh*0QfKVdLb2ADW?8K2-mlgkRYrn_4$=!XA zB3A!A_*s-!Cg#q!$58C+cJbS4CRd;aQjZ-x2b>V~@vUdQgMMK6FYP)Q0CE&vO{1U#g#Jrzy@w0rM< z6P`^V?Qwg>8lv45oSSeeioDjeFNnwV>dJQWN4xc7dA zztKl{Hga(^^{4#zE(ebOp|i20^-tYLX;v}NO6^z73q!4}f?F=zJPcLZ=Bi4Rsz!ea z>$Cw~g-ylMVg&WFsKXMOJk(71IxOq}wUV;2N#<6&+gkhEVO%2RR!->?MMneN$)fB` z;esiB<)eiN&%RGltpGvIsJRU%!L48DeM0t>RiTZ5d>eDMe~`FmDIQOE=Mm`NIb22L zcS;P^%i_$&6*>e*ruoDw$P>M`!rMK zui^WAXmne#L~Id>Y!%O>QexX>x7uXLNu?)lM#5s!i<>P?$v<{Ot9_aQ--cmrl(B z%FYS$-<0g-_H`M=e3Blcm|GuFxR!u6meJs6r5{oX_bMSBEv+;jxV0{t(Mj)%(QP$t zfkOqAw$r4h3+qNOSBam!$I`^#=3;OZ^codS0hfU<#Sn0YJzwgG*K|s)Okc*=Y)mZE z>f7!^o^>vmY-`86{v66#_0`EOxZ#}3qt|xYqjjn!&ZE(PqH`eA zC--lf5hqnGvb#UvP_qTl!D)3q`0v=Xxg!Ku!-_Tqo_Oy;3}&v6)^^$b&wp$RuiY!X z!=m6JaCcN=hvL?WR78j6r*EB`k<8fWwY4q1n28j;3g@YC`XjsJ3}S%`wOVTorO$@X z&vW5<>ZJg}$lHU4hVMQ*ghO(|GfUol2C0E>)Khyx1es&-5}BCPwnd_@|5{&^;CWod&Ws8`cddnE#kYD%*?e2y8`YNotqTb?MIMkMvr* z`g=}Lyd8IfLKVmYWlDS@UY<`xnXLQpE~A##7O$TaFPn5!D`_=1LOI9P6+Y-7mT1cV z2%p5xBt0+b^U>m~u%ty>(5=UlxZo%B>(wn>xx%L(6NOU)iwAPYgVz+XEVBsVT4cQ5 zEDCx)CHbx~f6IOt=iw;F6hCQZ2)@<>FIgWcg4e?mAypIE7wOPi~ie&I$OQ#@9fh#ESpn?Skcqki#4=7Ls7oSgg zY}r5r!%pChxd zNbs9(x`naO3RaE|9m1Z@hrhjdnl^coqJ1NnwMu;{qEdGDTMHZ}_Ppr?zah)*Jt4d) z!+SMcUK9FS0KhJqsGw+xcI#$Fqrn|5RK#JgyE^)1V4oB4<()-};Aof$T-zD_IEue7QkcDx9`_T+# z8-24-ODPP}@023VzQINumRnUn{@;x7H86%B^q*XJ^k$Mhwc;ySx2oeoch;s!#lHd_ zAk8p5n`iZ_e|Y%i<)wJa8h5b*l7MlRo1Mv7Cz1qXzOvG-v@A;JNu@?1-L5yc=cKX@0%@k*5)Xb^>tB;$nZ#iVOxdbkRC}`y4zi+Qr5fu|=v)PbJrebbDuQV6|Q! zC)%NCy3o0fmw!P5F~}7-P=YVZznxx+0;?3qC>jF?4+TIp!OjpNg|K<#cQIr4^Ua98ztdj({k>G@e z9#*HwC@yu;K;AAQUY*7Lhh&LOWkcsFR_N9Fl(qMGrs+(@h9IQ!Bzv{_DCvgCXlZ3{_GolD_ zchrx#89{?BlW+1FC`{jDQW-nR5!n!~Q@pQ5ckH<(ulc=~zt-ucW^Zp_0;z(+^xmG4 zUHOcec9BGzA^QE6>8lAeia&aO@@2q7nx5Exlv?b47+gnDNKr8KBFjKLc1|YkZhW?! zs7rq%mI+HxR>I)+Yx^A*ypeE4T`P3TUe&n}p|n$Mlvf0e>If4eH% z=cO6LnxmuT$v-)jh;;FjMT^`U{M_rhoDe>tiuoUW##A{zj$Pf5a^S$Ox7|Vovlddm zd}_ZM*^AgysgwYym4|6*ooh1c}-ecWir>}`2 z$OBEAGs07ew`HulaA4UR+xYwI-4UZKbK~>P!vv?MN-dDziHEkpzy26Wa?`Y&~NG=g|X~zDE)(P*plf9`TYqibQo=9{uAKyBXbj3pGj zXj!S!9n-#f;_BFfO6n4l3eB@3lrNB%kO=W0~|E8!Mu)p_N7*zP?vyxmtx z4v6}$R3HmpD!;op@7gA4RS5&CCn6jxWt?YO5c1wp@SMVN1}Jjq0d^J^80AkmLV&#{ z{+TvUAL!DjsOe{js(%P(p0UBk)x@eEuy!8_T>>I&4xL4mQ!614mjeob=1M8;$rNZg zHYE3QC0`~}BP5LT$KNo%$S{G{mE*V$S;A3dp7S0VlsSNI*v`v+U49+Pv9Dx zkeV7tdDaxTP#^VU(T>ad)O?uN_@@V)?LocZH2c279eLs%ZO5h5Aur9>BNq$t+NA}? zFnMcSFCxBj%@Xvog_Mqk2#R}NeU1+K!fm5&ZLA9!thd_UgkLHlXT-+ssrzbD5=3cW zqLAV3LC-J@$Ao6m_Ftg5jDPECznQY2=Cqu1s#Wso=&QYJmmN2doi>my-5Q~jfs=a+x zSXc=X9ytb>)B4NXHMV?L92kCEc!aa&KDMHyDCQkGG#p0XXB(KR#n&|9&{rXjDsk%v zBZSRrxp?t>e#c-eg6{C}ZgqQSYHPvFT_9bF{_>VQrpmfZffp}g(VsN>El!vDa~FVnO9FE5y=}xK+D}T^UY5SOn~K(H zEMpL|_pTeK&4eLupiwtRY`p-kwN2ws74#(qf;@&17N&Wx z#{LQUDXAtbiZ)8nw28xaa&8IHuypEAkT3CXFstRdz*TDO=C8U7HUk8I zr|z~+ql48FA+W?%gQ*k*6zkE(!sXLBZO-MkBn|fm*eoaIw{|A*%hM(lQ9bo`wbHa_ z59g}ly(o{4%j)V}rsVn7HO6ZXbNQ*&%>2egPn};fC19M_Q7CxM0II&_aufxSx zBeM?&t+DHI$YcGHzsyf$I!biGt5=G+3ALI9g9sYX&?24?pf>WL-U|G2i)LIScazwI zQ8%Q8VtcT6_BmRX7C4aL=UlD6Hec^u+DsV2nCaS>LQmNC5lxmuR^PT3?CzEEf$jra zu|#HLL#RcYhUbr(wvQlcEcQNgj50R!K#YDE@tzb<}lU$pr?4Oq(}0I@v&-d zpTJi&NVY}9^i^o?er>8mu1*_PK>K|>A=`KxfjqRsPEpLE$<}5PKHjwj9h{x1j299F zX=;~g*pU;JMc62!1qlgAzg4>#V{k=`Tk|aY{&`yD)PzQ zF-2|AA#0tqzJy9*XYmq&Y&9oO!i6k)ad}(fdrWM>@OSnyN**i=q0***us@U~++$AL z&88{SA(WOAoQ&GekX5*5tGrx4Hk#K^R_5PGeB&Z31SKgrHz_c)!0kRo&ygQ2Cbc6C zq2+cE<5MjmC{UaIN>DZmyB}8e|EkR|)U^Ci2Xr-)f_qnJIit@Xotz}e4#|dc^r{C6 zE7f7yz%59dC zL*)Xy9dSHiahw2Od2P{e2sHf0xfL?Y6qhB>p$%Z9pw-AIJI#{=3MSd&cPMs2K4^TZ$}Vf%rYRy7x|pOj z#s2Y_Z!`I(kb-oMFD7X?eg?ECQiy|?s*(&<{RS94aqk{;D_Kh(qQ?xWA7i93d)w1r zh%jlrNXrip*}ckT?LNQRxr`oXEgV8FBm+}ykL~{E5OqGpN={96Vg9MdvXg~49e&~I z%hr{(Ttm?G(hl@9b(w-=Tb;i!sjFKXOZ}hIjq)uqz;XgbNB3T&#nv4QB7f?R{`&F> zFRiT^;orcWe3o}jIpqxsBP%VKgEbmj8a{p_KGIf(P9OyiUWuYkAw}exQJ`NU-#uoq z;^xNYM?`O#AWUE0D;%Fvl?L}Ay19E7%5Ec-7uJOW9)8Z2tY>pX>5LWX3Ru1}&lLE8 zDAq9Iog2*%Oi5ZT#^_oT7LJp>j;|_|e-+6s%-A*I<1gA0rwOQ)39w@v3xqqjY8J^p zwXU30TZ)lmGa~iFY!5+;vkj9E2o<~htRnjH3aS#}g9uqwYgChcex{~UmDhC0A=iH( zB21#67>CqJILUtiWRA1guBQmNgK_Za;SZp(9g(ShSKX)4uBRW|aZZO&;z|Cd#%1^x zf%(tGTa7h%kZI}Eela{3$(e`D*p3lD5KjiCj2soaGyYr?IF{SK;eZL4J-CigrP^Yl zziS9}gVY52=`#-ZOcBJGpGx|DYTtf_#VeO!T*YS2&sAfm>T+l=+tMkK%~In`2ysR3 zASyn++AQz`;4KuHSp)Ea??dQ*4SVv|vB(V<^Pnk>YnM`@FO8qMdlQ3v4xEig9E zgn7CRLTg#PnxR-fO<#Nw%-hI4!kmR4U=Cf+?i#7uM2f9Dv)RZw{Lx=$;RExr2O2Uu zKr6?XZbza2SuoX|kB`spk|EO(U()TFVA_ClHn*4Q8fNf%lF0A)WG{nQ!#*Ki{Ii3y zietrwS|RHEvG@!C=1`+9q2@ap1}eleJi}jO#8_N{Vj^Ep+b@N$S07JH`nG6;Iy9W} z)s4ss1RiD-J=5}GC(I}*5+s8(t@!f`zj>nC$9K7dxIV`Ct>-v9OPP>y51f;rEzw{f zWfe)O%H@YZt==7qeuyb!Tlsad!~{(qy#bh{LuA+a^IiAu^Kn<-Xa=~uzYFwdQSdXc zhd2yh>m_dO9T$DtfNpF^?xk zR&u=|r;bdo3hWL(^rXrjoh>4|2YgPYcqDLsw z#Y?U;-PYrJvPlSxUYf9f*+sRaFY>T8o?cyDIPX3J)-pefQH)PQGnGS0G2?$vrEz@q zjd^pEPanH;69T}we)#+HO-Mw@L`XN0hA3<%U4TV7RV2)bw;FudFY^<3kFO}=xOE$6 zz=yS}%&;QA5s9#=kq;S580r1ZUwLIkOEtQNXq~UwC2_tYVuDGgB%~YqN*o=XKEay} zEp|$56VUxtlsSG8rKOSGnQLUnB}F^{#g5O@m?ml#@^70;J%}fHC4ZJj$oPa+v1Uw+ z7gnZW_`b`M@RE(KPdZsBo7~9-)!f6<4-uGFad(Vr;&p+8w?*s73`ld0Ck>Gv>d793mnl?75Cl3mZ`~m6(Nf*#uFD6 z*7AAuvEc$?B4(pEQyNa~O^V9sGmsgtg;Ibm!7)1k{mYkjJ1qB!4N3d2KR=sYd3ce_3Zrl}Q2F z5*~->WlR5BN#07d=?i+?M;DBCI1BZWI_cXD&V=1rX^Z%WA<-kYjF}^;hy**f zhpsPaa)So7hM5jvvLFyRVCs6bxfwJ^1c>1S0#=i@j^~mx^P5(1`j}8OWg8D{6I@P2 zO2>@PGQK}4gb$ecigf$(k=0GJffx*cKVkjNtHbAvi5CD@Uq4^puYWENM;a?!79TcTN=0uRVs<5zlb;o(w__3A>};-zjr4pj zh#_ec73}DfD<^*|*h6z)g#$aE{)UBicT{jpSh~yHt9<~kRe4W<{a+7<#F;u@i37eH zdS<<&kdAm`HyC=qtBN<~{I1;@>vCg2+Rw#>8&JHyKN$Z15Qh@P?!)Nz%KyJZi4O!T)zgUBVWJj z(!jTt2ssS5RU?BrYlmge!G05Y0nV=k*SN1|UB!`Ievf>i=4R*lm~^%0=*WK_FP=OM zeN`J;Dcq_(a&T^L(F?)PRQ^vj7|}~*3xCYqmr!_m3=E7&@#{T z;rPG#j>6jg+|rdNcQw=VwE1~;#3O)f|L+NoLI!A@80PLfQ9!*lwyA?SO!TBqZtFE5 zariiF<5J`hUNFRwCReD^^^6ApW$hlgz=fT=Hr-SX{QzF*ldSyZrjEp%wFO+%o){~d zX$mJOl7H_3vT{Pu^+_hF+9h5|>ox&|DTD2gt8E8JE?d$}63i_3cOj8(07{Y;KG(ll z2P{STJaB^rjvTz>#Rh}x=hN4M#nly!&?8!oEkkavO#y@IZ5@%&Z;WVFY0)qtCxt9i zb9+U5h+Ro|EM+mAw^Y5map-#ChrEBeV1Eh9H&&UYqRO(eV98-rPeN!_1TOn`6`^zh z-2edS*UBY0)7m`T>~@%R;NIHq?+vrHzi!7r z9=rsHBe|!n28M1v@-3sRhpO_ZtLK;*jS;CI8TDHpl#6H>W9Qr0M>cZUCu|9?|clz=e1|ZcQq2_wWAQdYN612Ebrna$Ml!g3}`*(6>A0!}49w9pL{qjXDH3bd~a z0x|z0Fz7|1h_K9zI<4Qw?<<(2my&uf<5YP#J4coVCjb5pL%le}@Lh;Nt})(1zY4jq zMXWZ}$1W#-ImYCU&GO6Q&LAjg*#W@8i%N|201JQbRBJyR3YyPn{s`2k?a%HnO#zQh zn7{@V%DLnvH{j1UX-zwHDSI^9Ys()cWS9cVTd8cMh}6&B?^7Fe=pc=YJXN{Zr8PPO zPTh@!;N7WJ9zw8?8tS90tJI1AD&=&=hdoxM#Axr=z$hv@<=<4 z^<)0fD5Ze!+z#it9DIY+{$*YKZO#nF(=QOZe(cJM!9>F8(NQhaSHe^w0imx{{#W?f zE;Mt_e3>pRRfe{XzBo|8M@l<$ctDC93HH;P<(MgA+F^F+|*^iU3)(903lp> zAPKAyCf#ZMxHq9!{Kqi3w zi|%+R{9mWNS$nWolbvZ>vL_WL5>pW?xACXtBLaul7m za7AE>dq*J|LP*N2WGZSa8-48Q0s^lME#`)K-vUwAoK6w1!QCb1Vl$Di5fi$o1 zRnKbMX=i$HsQ+R5nl8cYod?41D|dAKDNLu6F6RS@CN4+zid{p_=8dK%N^5d^qa;Cs z4|`X6=S_pp!QupO(lT(9a35Vex=79KT`@O<-%W)v=41292TT;|JYTU)r~p}*^F5p| zmNuFGha9O{1#Sl)?Fmy+W#c_{s}QRltMF$k7W0IsC?wwy0BsDiWK%&Pps!-AXH|LB z?aw?z?O+g4E|Bf=k2TTMznVg{6nr`*Z7nz0s2KFjYEo z%JlkmUs_|{01C=YbFlwh#OuK{BDEI^4Zj`vdW^?&DCl5umN#+0Wr6yrOcw4R@I0if z{$7FdBX6GiOcq_CDNe)$fI%&FB`UVUp9bs)^w?`rF^9$X>@2LBj>9?z#-j2-!B zr87*)^NJ}d<&k~U_gP0RMU)UXFrLKF5gMG>e#umlr<^k*WJ-d*_;v>p0eE>(TFvtI z#Mk1-gW2bBxeo+>55-cAwnP`t4$hWvy!dn48WOphY6q^8tSY6<5XP*?n! z(pMCEs$96WXd-s14BJs$Q1F!QSSXnp@rcfTj9V7{wFMb%NbS3P-rM_Ax63ta79K#4 z)~PCQ8hf*w^#6Npj{ePVe0}sv`VBtp#R;I6coC=H8eUVdoB}xyxz`!q8lU|;z7`Z; zB>;EPfn!Kdg*{GGA{rZOWPs#>&Xnxa_xH$(hPwztsyVQFDpBv=d&ro!X=gjptadFO zfr5*hySq}AM^IJZ(!##VfVINVY-X>&RB2$_4<$>ZDKy*y>nKIQiQpwRF`jy zVX9MG4xKH@O-c?GWsMG>Lo0hos+W1M4q|?r%SGrw0daHe*vePyzvH-%m00|tWriX2o3zkyDa(t+48i$ z1HY{7n>~ojF|mdnI)mi4~jrViu}GsfmDWqrE_)F{?fgih|pgYIm|~ zq{Vsjm|78S&tGq%dP*zgDZlY?$vuxDe6=Ru<8e&4kD=V^n@AwGT1zECfI&qFGmDdPsE+_Av%< z76}OGY-3K(X;F&6^n-}e)q3?n*JDtdT7}906ke6zFvQTkvQ)NQ5NSXmVSs?lFn&=q zSbJQcx5$saFMQb7{sUAa=-U^qRHK|UUmQ&AOiO%|FE8TX4_q!Y#nuA|HJNtGwYlZQ{Yq;V04*fqorL-N8h_G{sCD3+RKO-zH zFBUFfhS=j$E^D3oopmm1uc>>Sb{3y3cT{-yZgP&G;NFTFZ^!R{0@ZOQ)tAq+jx0wA zP~Z+_6l5t49@*Drut|ueD!UCQ-}&r^#)R-JE?}63kK*|MhBD@zV*)5($h2wizYnk5 z`?pw*9Q}z1j+lTi6lNs$m3s7bQoj1Aps!S8L~l+bf)Rna85&KXhIjl3hNP3TaFYtr zoz?Jh3`r|6yF7PBShagg;d4*mj#IUlgP(z0t8+!0==J7Gn~kkY{9Du~EF1TzV)TBs z;}cRf5Q}egoS?4*hJ%;!O>-Fdf#ucXQT;BqgVWB;wsv8WX#M4zozg?J%$AXP-+30f zsUk#bJD=GeJ^c@FL~Lvk=`HCG&h8{C?Cpwa#;qSQ zBv8OT*LL1q@Aj-bnm&&ceHRiHEgZ&R(KkMhboNu-#rg`Amkl80-bi{^r*e$iYv+eu zefG(6ScEzsxi}~_-$NP3mym;5;4(Ry=RAyr@GguZ$zFxZCpAIh=Vo^1ntDIk{c+ z6ix5(6d~(%&P?QG)ffMETT!eRB&dEUEIeoRtG1&!S@T>*gpZ4MR)-w*PMLs9ZPPrSC-)n!U%fLZ9qB8iqg(!*@*o+xnB2LFbDZTY{!*lh)=MYmRLqkcnJOr9^YwJHzq&89`_xo=NFjI&4|vpeD0HK=xi+2 zG*?6FdFQ>G@^PqLga>_I;iFD$G;(y{Hm%4}%{vn1p@ZQKVCDgs^~aDzPBTq4~>j#|WG>741kxv3vyY;V}j4y&-_*5Wb=_OP9a5Kss!!hsR zg5Zt+9L2;kzJbup@QI>fJ*LHDHy!djqEkaE3`A^-;@*h8N3S55@X{zN9&@3BKqO7D z%oh<1klf?YBMX7$V6BKQ21U<(?>2HVR=1*}O`he*ej`@)k_5R?@*@6DDL-n~{;AaZ zpl-*=`fBZahCUfU`a3(8;Ue6 zfc)?A`66CU^|X%KXU;T8M}3wVI_CdF~uK1DnD<}*@H|AL;5q~8VLhuy60M894$ zLX1x?yfc=knb8%h%BO0b0}!(q-+R4bdTXxfsE;dR1Ud9eIO=@2)j$g4c*8MXM#L`nq3j55)`@u&YNZlU%Pt5pz z>8gZ8O8BLUMZIEh3W}c{czp+_Cxfdhx>Ho+G*>yvAl`JS;Y;siMr;fiC0+K_?|pYn zGy#$$c-<4rXV;mFRZu+QK8Ii81EPsk#9?*I;=-z`>=G(QkKp{z@(PFIrKZ#3bI(66 z)_m!d{myXFUw_jaOG5Na61j(bj8ns3t8Ry!58+pAGE3WJ$<8sz^}tMs<;!5YLjs8d zH#qhnI(DsR?P+{X-Q}Q?=k$ManxOK>1%AaPf?LH?KCG*3X28{P)7pgX_2N zd4c9k2efZ{ucYVMqaa6^c$30H?um9}vlTy5qOwug##>8e-GZpS*T5&F-sjfo9Zuu~ zf7~(3bn>mjzhUyd=gDI1nY?Z$WzqXv#~yW$F|kni>zkLgQzQJHs_LGB5=7?gXsr+tPTv0)96=1YgqnVwt)j@c@^nGY33yyuyVy}| z`jGu<30!>D1Keu>qv^=kW|62T>AO5mZ4V|eJ!Y`4#ylEzE~FLcM~?b_OsDBnZ8{eic=y<+?oPK4jlwbD$AT||O z4Sc-W8wfX!wgb`XpgCGMlKHZ6XkA67et|@(OfJddg23G07NP*elu_eS!;zh`%C2L1 zQsskxw4p_wQE`(IkcZ{}uEeb7?(=Bc|xUa`hwm*C$vP z1A=MP#lvA0e^LB`$M(AbR)^+S*`$K1#fGt{8A?l}$|QH;vCY+Ck{v|bm64^`@e1!a ztPQ}HU{@f@+GUi&x7Z}v_)0Ca`#p|pYjO71$AHj(rIP#85{t)4PJ(JV{URbr_Gb@K z1$*WCm}9M=3J-ul;JqX#&Y>3fCR^g3j`WCpoB>l#tp_fVh}#nDO%}V{p%p>1#WL1< zboTtiGk!2e^@P(HiI%XK(BB3jZfb)AXz+Wh+S{Pir-6H(Zf{Oa?fY+9A>#G?cq+!n zAGwy*9cA(OCZjqE9|13jr7Uw*2Bw-uQ-Q$tQ1xKksD68hJ?B~XOI}qhRGJz^WeCQk zt@n_6&4I;VI8}lQ<6D{K6?pLRJ0Vy}Mhgh9%@7kO%txi#cbN*f3lI47S8Hhb;R4jU zoD|r(oV0ZMvxJ+LwYGLUo#0QjtmnkP$CWk@RIjuEt&gv-lj#q_)=4LgZ7YLdj!7&B zMepa%@=9zoX(|$2#OmHmJHrQW+Nm(Fk#H)%&u7&J@*i`h25Qf(n0%l&*SAnB5`<@0 zvm(!q1@UNUEwf&7O5M#&!x@kKa) zK`HHd#)&F|$GLBZ>yAEroi?#Gmie*v%~p%$bO7CuAK0gMX5(QR{MlYa0kD+7}JE^DB+va(7Bz2|ro z=c(0v21@Je8%B61&sg5a8sTAD0G&dEC~G(z`g%Us6sS>t@9U$d=jVUuKJG(^M%Q>KS$?bN(alJb2>TBDYG$uhT!(%_^ZFuQa$b2u|z zYQ%6K84TDa(C{eHioUsK@&Gvn&QQS|8Gce`_h>7`vB~~j%i%uze(j>nkDwt*8w^OA zjTZae$lNiWc4>2yI_P-4XaF`Iol&D6#6q+Ju%7I_!x|Rrf$ScW02tY`%{fK@VcU5* zs%J*>0Px7xL5$=6r3uyIP(c|euy1T`FiS`O9`DQ2INBJFsf3V&fEI{tUtCw<7_{4M zistI`-N|Iq)_uIGfk{WR_YJ)c{!U-_f$m>sma?$1e|ny6sLSbVbIthEC8#gAC7>_2 z<@P&nri7ewWC%Crx9+}OSAg5mo9=(q%=OO|l>aD>qh7Dqw^opmudb3ctr=ti=Jr^@ zc>m~t@~w;ci~zj8zAigEyA+h6GMa9FSyBeL-@A8@^W(`2SuhP)O09S!uUeLiiLn;J zhox{aHmk1ZNT8W5O6UDvkK z$Y2d=jbm%RaWHcoGrA^LHIJUK+>M~X0XRb3GhcCke4kSd?o@51QbCK6yPT0d0{K4H=}5}qsQYnn@yZt#dZG^Wb1kgPNNam_4&eYq_GeYq{S7q-f;ydsx5rBo@zNq+EyALfB?Y(;B+@O{n5 z|8o*Y-_eYDcRrhT^(Jg#KKYV9Koo0eHe9a-R;y#m!|h(1**3C9j60!h4xqVy z-D=bO8^>Uk8Kbd5w^-H&2v>98j1s_D_slUPQ&!wzW?d8sS@{5StO@K#Em91O>?;D0 z(a`j{0noOBH~<+8^gK_ENK7f%QrB!XwhfWZAz{vC5CGr=%f1%W*>}erIDYThPN@`U z)+LS&8PEh4PRWX2aGhYe3PR$F23Y8Sqil|KhGi_q{J?ULUSP~uWp}ION?g z9!h)|xkH9sZ#MZ^Ug>6sa|3V&AHg`WSqv69@}}=uRRypPLk;XA1$k6X97yTvIl*%k z)ZN)^zOJA3E#0RT-H%N@u3zZKKd?wUV6!9DKoZ2c4A&VzU4Pnl?%d(B{_0o1%9h{c z<@S{T^d+Nnx&3QyxV|tV^kT^!H+u!^0{{Njx4#v%8qHV2dHCNZ(fB_oFs#Q>=Dl8>E50^eDF}_nhgUeL7IxAkPc{1_nyk|bSTr= z#FW=du(9omt!}dN%I(WCgX1il17HDu?QVyk35GgY^c~I4A&8>6sIe1;*@ewH1b#E>WyoKJot>AC37`W(eWt7NLL1$SaT8d;cJ!10>N z0+i)_1_txl+|%c-gZ-{=-LC6_dcKBykmeORGg>z(Bx7@ZJ~DNd;#;kjt-nXcUM#cq z<+cR$<+cR$&&~A$IJ@1h-XMRJfA_op&d$^9u4Y*OHHyOjWigv=gp0XbST>DPAl-^N z^UD}rYIm3wZd@|`Rm?e$G%JTxXsdN@ZsH0Oxbfpge|mBvN5@BUc6vs=b&f)nU~U9p zj1+1m&uaS9P$P2{0PAGTqtxGQwHY8_R0{;OR_T{cU@FY!@<3^y~~G0WVJXE6xC`vD~3W;UNk3fPIs zcrDXYM}R0o2%vv(c*Gt*o^LgcWG|i*q8Eg%WYY5UvA5-+N$gvH%(+aIcJsU ztDft9KRO@%r}=bxc@c$f0p@X|DVMf3<=WM2EVpm4?7k(ds{`Jwk=3Eh3gA9GI+T;M z)3PM%&=3TD@~2PtWT+YXWHx5G8h}AIw&$9jt{5OUH+`ds<^iPivmt_l&)w7qGJZ18 zH6uhtAc1cBA~mJ@vaHQ78OGW?hd*846T>MtV2k-_fHr{8O%>pW4n=EVpud1(9*kqAre{6VAPLO$YE~VLew4`jD+3L* zPUQ6Xdi^oS#gnZ6b+5cK$wVRM`f1U<)Q8zRRe&)HYkpI3~Rx?r>+({+IKd&4mDxo)s& zO^}^0zq!lpD+TD)mu9&ww|^}lCjm?!tE;O;B?j{L+i%zPZ*S>M^Lz8j^u~NKuM11M zUCqe1+$19oQ=lpG(dCz*}gn_@@+gjFw$fIIs*`J4;Vlg z;}@ENTBSr?VX6+;&)hPB1V`i`K^sM!X{X*i*1$HPZODI?Of);5OlB;bgXxY|1KJtb zG>hdZ9*z%l;>LE>kOWC;%NG*iy)C23j%omc0F=m~f`=J=%*My4m?*$M+uPS5>(q?A z&7sdeA~yk}V|dStnRR_&y^0qqJZLkZ1+liaLAN*8-C!%`@e}YO&S<|1yIcfg$kHic zOCz4#sN_92!LjrjZ0Y&Dsz5%+_*!`%1i7MsNKIK$n&@Mpfy)xqm)lpUIy(iom2rDt%h>Ie2~w4f|-pz+x88r8%mzV2{2x zUI${?WZb)$6aZKwlXq=jQb|iuAmau{A9r1EWb-a{=WFC1)N27h7TLO6j>DY~hvWlP z>U02fhkE>`$00rP4dHESv=y>Pt#?%liB6#)LrY&QE7eQYQ|T2y~S zW`6UAysBXS(km~M5Qh;ox9p1}GY9bsnK}H-al;4U48REwb11?cDA-SD3-)Zwo#uFx z6F=R26)M4uhP^n6_DEn4|GSxhFb=(ygf|ZR-kp1W^H;i`8wgKcU8^eK2 z_jhwwM_3iC0k^w`PA~VmO==!1;jxs*D z2~Az6PPc8|*EZ#RGd5?AAIC+`TVa9^c%jo`RX?oNY|GVa*QML;P$OVZgE3TD&@)Fl z9jz3q@)5vIpa2Qksb=aFk%?md4$OO$`TK)DS?-&cw&dE#=n3HW6zNwng}!7V+{=X!1@Vm#IBCSf-s1iEfh{Sje571WobY|HJ-4e0&;%9jy3 z%65Qrp`ZOl&*4p@C`7)n%3wVom$Ckdr+h)iZ~DCK?|w!J>+5Q(c%d>@s)2pc`KU6V zFWU4*$S2ciMQ_Hhz4qFUKL7tzK>rU4@H_hcKKh}nni;=(`?kFOM}NdpDs;VZQwGSI zakQ~Ke*9P-K743wQ0FM8$C_DA$*g{&AdhnUbW(w*+25?nU;*p|wt^WsfE*be0tq}& zY6cKv{HoObX89ikxQt+4Xl80MX|T~fePn{3uwl4UyIeshP9uutfV4-8Rn2};o^~9o z%*K%eipjoF26u?W1o)yb*IHpcuWX>Ku8?HF+|i)H(cIWh=vZcK*R6}MOp)m|pJBw! z*XK2)?$p`IH#`AhZynjSs~^r8`!YDedrPY813OgB;PE$R>XEKTt^rPAGUwV1t%DYY zU68f+bp7aYURtdpzyZ+=@0&2Ajzpt4Q?l30dPSe#(dXcNSJx1N9%#0sYJrvt)bHTR zCQ>UW8H@xjbnW*+(kuB4Hy{yPgOqMlZr-?gVIgar;tK8ywdPSbpU=s>cjk^Um?_&A z8Zh`_9Ibn<_loXMSO#pz=%?$?j$WtmRgX$L*6P9Sw+YZJ4PKVpzZszK>|FU0f{3x1 ztOY&|EpSu){1?PnYo@#jvlMAvBxDyQbM*C`QbgmQ^94h-0;NBIIlu#R%ayd`*BQ`X z)aeGmI;8>0Kj-G9powh9)}Pr+FTE7#4foGAWBq^h#`>xPLk*w}(HN+M?OwSew_bWl zcCPFYaH|RlwAG=#{@}p_dH?u? zUQMvE`+XSbJ4$ssmnx$!wLKM(IO;Ud#-?< zWX8G_+U4l^qSR}c^ftL`=#w+BKtO66NmOXVo1%Cw&o48pye5TZd}R0H7W_859u&@s zs#-5qOiOjyg(ay1@hlHDm@u4yJVmxFB-I6eT{HMPfgj{I3&J+J#lLH~Ccfi~Q+TC& zT*19UrVLPzMjBXYzyyvw0DU^?a~2)zi3$g8T~Tt!H30&lDMpxaK9Kq_LRa@>b7O-F zasXYlPoT+;UOs{%X5j5Q-``l)rbZV)*9_MHNOsVd$GN_O>qO7frL8TF7lz@C*8yIK zpo8n8pN(Mf?EH*<^|aKOFIy6Jnr2N6EUz)#vMi3R=`}FdN23JxP@kXZ!>N?ya9+TC zUkcDHw=W%_gGBOW+bT_O%)5fo3LWPcfurilA{xh+w-T{G;EfW2wX4DCO_vV{#w)Ayx>pA-qy>Y*c z8z#!>>w0qsqkMgRO#(gNkO4KN`KnrCwAqoFgV7A_b7Z}^`42}!vfNSDhI$yT2Ldzu z+O||A^okMA@_MUHRW}f}FbnRQercJxne&g0*`k6uMzfH;qyL=}U}Blf$8vIdC}T*U zmLBTpAH&6rnr{}6HD%`Q1ZLJ9K>)I9ybpxk#M5lk)hyfBwbew@2`m#VSVd_|nln3h ze9dkfo_IBf&$GQk+(7^CRhshV80`XD^ZK4skz`azG|^ypk+4q=z-G%E0yds4DP9La z*MH!3n1BQ5=i+hZ9f6Bvto55QINKP(&>Ths76ja^7z|Bs8|w;7R8%N%9tXX?)b!kj z)O(M394XosQ03DgJMaTq-L^Yz-hXgjpFDXYqp=xtqj8LHS{m4JJs@BLkq*}b`u9=S7k>(3*&NW+$1Lg*9NW~%%?*>w$`Yzl7Q#KgB|Az8v;4KR_r1x+F`_M(Wq9h zLF+xz2SB_9wmYt5T>lz;77FAsELiaXs8@EZ)qRQ5v{3nTz5mZ`zvZ^verG`cZKSe) ztBu%cRekK=EO$TG1h+q<5B~Y**#E@e{^`#(?^$VhFSqCGf*TWVh$JT^$%Wk{z#Q4G z0m3f`ob*#)J@^34k*Ls08SLzDXrjo$m0VFPczSnf5z1EOk zx1q;iasFJxOlHZTzrZ-uDN2>M%#kcqARDJLK8|EQf<&q*-zf4 zW(J+kbbn|1->E(vkD0W@hImI3U1m~UWX-6ISoC5y?rUJLVV)%9eL>Bm&8Si`jq2yG_z^82(~E0-+%Bx&NYx8X$FqoH^$%`5D!gPy&S!B=)eZf zM3rgdeOMvTa|qpjXa!_>UOL2ORNjL|JS#Q|v>@Z*Z%rr^)*CW8AKCNytf|Ly4e=i^ z-nN}GhAnFPIUZ)!L8e1RsRH#c`kvrAgM%IoeU^Z}+?v#}R^lwcW9Zp#({IR1OF;sObA~=W zdfh33)k9TDN(<9epO9#lJ}acT)PbV(lrB~D8R!t zTwmwG)FsmEf2Pm30PGIO+aNVdD^{medn+w)lRRc7j`Icr8wh|iT_Xqp4OZ3&n2_Sd zTB5a(fDZwZAdFk|T!Fs;@t~FhC7$=uM<0Mxetjn08*$bz5wE-bg@_Iu0Fm)mmtmjQegd_hjN zDyta&gRt)jU>uD{*Y)3jrZ@WkO>g?U=$mhBY{>5JuIyaik+x=6$jp&_?>*f!0xo*f zZ|Th&W%S8t#1S-n4!{ECSqR2}c*dX)W#G8pr z*wNF^^k=N#ot!GDpDG9q^)rU4L^P{GAKkjh(m_azqST1^=pQ}DHv~5Y)G#zi|8B3T|tl1+_X57Js4pb*!L{@iuS}*4Nfq zt-<*L7*EC%=KHAB92^`HyiujOb@P^NZEw@q1qX*f6Jj)I-NC>I!5FP*3&YdF>rfF< z(1#4MrRTP`SXcuu@D~q^t?otV}%+xqzc%`)FWi-%R9nyTLSuW`^tj( z=g0Xf^|vTut5Kd$i)C{A&MS@iZ2H|iEB;h(gts&^ucKs%8#qi?Ann>{Hkp~xzgrOt z;7!X>S2Nhul=hL4f#rR`a2 z1EW|ZTIq9WCF+^y!MnU(56G+@Pew94JtbLd|8U=wl4lbN!+@aX&?H2Rl3QU+T}T{L zXf5iQ1U*;ko37N>J;e$ND_G6{fkkFoGKF4m zR&2+%?t5)En{U~UlUi0|p&&ld<8JEVw{<<{3hsqI$Hw)CO#Soo=~X3hS!!QyOF&<4 zUtzEpd2v4Q_U${KW|QBZ$BX}z#L4Rl<{bd}#`=a_QGmUo89MAv(U~)-V0Fu?-bK_73*t(Srwa2!R^?@1!JxiDOvinSx_xCmbhZ;tP_S zKJ2 z8v4KhYs&%V3OVZlK--<5_eP!XKYVg@LBomoMxR>Wv0 zEf%f@kR8``F1wC{h%M#qocgj;G(&?7JHTbsKZtFTM1Vy#CtjB*cN_G*z&k>CL~c*&F0S$ySFg zXvwOdE#|a7Jv|%BShH(mh+>3Zz=+2U8QC#pSOL;tt|L&mq5;D0)oTja9XfMOMq^e1 zFtUYKK%>^6a~f{&=)umzIhoe?KmAl5K6)ev`vr|T~@BNrMK1+zpEK<5J{u}KC>bT?T}?;*I1}f)PqL~IFk)EtdmYK^)SUO=)NDik;ul9-Gi=kV(FYplS4Z}7`s z{E|OY&cUag;_G4+5J!0_x$?sGCFrph4BucIfa-|a~>SddzWAOj{gReu}7VU3j;*Mi=B z9OJsvP%BN^X_oHjxjHQh=QJF`N>c67p0C( z_o!}O$-Z+-dYSL6nSX;#;y zq1hr$NJ8WCW%}wCJ-(s04zK{IAp?bM?5}_IzI^z}JvmVjLJPqVBa3oY+>DahZZ2*; zmtaNTr>~i2U!-=)mBG!rwAKUhTDG|DOggKH`0bg5ZX&U*fNo(%J=8~R3{=1-*Z-xt zWxyGI>B7vXBf~{c+$wWEe6n2@Kxjj18FoAM0gzdjs&Z}#92UmrER%s_&YV4P_UAF4 zW@~1hGA?m&>`9^7uO8n*KRL`5Fk@LLT+JuBM99(?4j*Y!>e!e1@gTV&$l(~Hf;r9$ z$&z|}eq8~(S!dSGazCmN=zSwV(qI7@cCA^{M_pf^NR&hj>d;bwNDs6DP(4AG-tYBg zb#-0d|M@SO?V}~*l<$eYdbitV)(=ez^xR?C0`3EJ_>F*2gX3{n(|Wy08D3w{edP|f zy>(glwPp>^&t)>78WTR#jPNw`UrVy|mSfv`fx2U~*>%k^r(P>3V)UQ9NYGEuzxTcG z*>sVs*G_2ui*C9TW|KJlj;9{K05!C;qZJn2>hVmA5hkH zYinCp*9Ov7V27(2G8ptCq0xSLbikW3SjaFFfos|kJ+}AhYmVpO?_j4h11iOB@>013 zW%ISQbp`XAB-{aTvcim3Q8f-Fb+Fh4BsgDu{WnIsPG%=^c7Ci`;3x9oy^rMJ@IdDA zg6|1q6hS54hIxvD9t2(bjx@IeY44&>t{L7Sm-@OT{cTrjJq1iJlFU_rYiR}>II_U} zIi}EcUr?$CXoDPPr^t>i3388RYbv+p21-2Jc&eAl_Gj7}cpxJ$#Pq;f?KdbSE`B0o z2HU+b&TE`eM|;9HbL2&o>ccU;@Z6N=9R+nO)W9fG;Ef#ud=%mw=v#%l_ld_@b?gur z`0z4E9~%{s%CH4JZ2_Iy zF`6OyOpgni?{2+bPk#L4A15H})mB&4B-P5~jv@Pb|Kd7KlkEKz;Uh(NG|au~+p0D?1)w56<5S7VMeB@0X*3s&~A zX65_)dkW(FvVU-(KyW0BBrK&_^``D6`g|kg0>5&vXG{BPAiY-`(z)tMtq%r!DsEE& zUw=k5-A5b!bp;lTt|@3|v|TUFR?y>zZ#vL5fsu-SHDmO}3s&xY%e{?k=4TKJB{T+GMS@&g(1M<1)vz@q3%Ph zYZe#G%B@nkCQmbo@`auU7@#B6j~#!>FB0OGIC8 zOF&<4U;6Exciypo@{_;GO=kX$AdZqh9#6*qZG1j@OToOSS&@yhDMrTbymp6k;H#@E zWMX5694c>*pFWnO{R4`$NI9|vQXFJ=F_(_4FDVI8Aig=4TLMJF>>Lbvlud8nzAd+I z-D3Y0+TeH?cQPXmgVHZ8J~bFX?|1*%Gx_kt5A??Wn9Oqrrfx3UC-AU$J)-$hg7UXkcg^*k$Wu|I3QpI_X6#cjs^lX zj@Q+By$sgZ*}~bqdQ~4+s62<)qOT9oU(Cg5|5L&?_w=#iSk^TSAjTRr0qr3hqp_KW zT(*^&+J$7OGQ9fAt1*akKmO~#&fk6SUArP6F1O{j1oY+hrQWL1oHt&7-HYSo4b7zg zuhD4yUXsSE%|^q4xA-ftLcMcGZd|(|D}xmU9V5+&()K6!K9P^_eJrQP#|D7(#s{Ua zCkp0=`}-ua0hpPY!T_W!wL_f^{d9~>ZEjqWmo#9&3^G{Om@SW!Qs3W}a<1HBMvu=1 zwB|6u0F>_6jVZjpC^x(-y5Tn3oTpEr1ELi2xrG;6I zI3O%~8XzrXdOnrOY{IGpfFC9FhSy}N9dCzoI~-;t)LE-*oEbOnZAO-r?0a3;#bPFB zXE}KVySqCSuEF(kHawH_(THdY>DPMT^0f%wuy2uGC#Pqp(mm_5f9{qRtq?AP%o z*J<$@okY~`-%y~BH6S@i4~)GnT@iX6Vap3Fyo1%Ld*Ro82i*PjH`lv-M+m^ik`s=d2eOUn{){O0(;9?N~GnTXg49LE4Gshe`>{UPb^#^kQ z-aQ4*BNDQZ2@=o&1e$PJP9e3fE32B3_iqH!yk<%Nnk$_x%~IPasmBzNq0K1g#LKyD zfE~-^7JXFcZk9PlfX0Sqy#7YP+=&#ttQ?rYk{P1B#mN zi=T1c+(H1*w8>z%6~r^mPV=c|*b6<5*fK=8?76;xkd$Y$B47&q!pezPcQjVf03|jv z_31)ivxpQR7sjp?Dt8X10}2WNfyv7!nAqm63dtr z0ht*l^P@+PIU)vA6~G|!sq^uOEM}D1A@2&%c3tCbUHOq$Mm)Fy!_?)@o!czugD?kq zSO7QrqMUJN;9>JU@O$*@_w_j+DF{4z_>i9gu=krj0|!`-;x#B#qkr!ATAIUtI#bGMRIoR&{iIE;l zVw~EHp}h56+aABt^9k_F3e3_+#y8&8XuzH;VCNb@BvRMUZa2`EFZ3p)k%61&^J9|Z zJk99s(l}=VA(|{JM-fxbntP3alL)vz%)EQX&qVM5z62%|Kz#h*gAaHv!Lxv13})p? zfYjgy^1svhf&rwlV)hiwH|XvMlNo?Mf+Vo+y`3FBpDw2?TCJw>u+LND2jRMUJII_U zidv5AZ8?s6T?3&M)J44>7y4ZogZ-}SlNNaq>-FZo`syp3Lj2%^UoG`tm)jE1|E;(D zf^<||WT#(O^{4NA=R0;)_U78?jr9jV{6Suh?)3Bye^&#aTYB?t)aX&&md*8b+1|WF zRW?}_&{WWERtB9iAbktO3Q7_+F(Vt zR|k5XNAk(uLz#T4&v~Yx3k!RNE4wJ=e8sFQO7FCQh0|f8AnqwhrjAS_d_Q6d^K*UK zoP@ccS?GDvo6p>q#T4v%4Kl(+<{DUplT3Jbh8i}tNdS@L3 zhCmiFXNf&2Cmf&v*Mp;*26lKoK>b{=Bm5g01aN6X+l5>UeGSy+4)ywLHd?YW=y7}! zl^p0DAeajv`RiCzyMwU{=IEhf2mS^}0|S>;3B4}uB#FC=aDI!XQGuo5nSHLo=Rm&) znx$I{+p!n=-%ee>2)^eRw{PEx*VjL*`M%ti+Y-=!&!y$cYLhB6A**Sgavoce|hJRPmvUKUvo4Jv5-8KX`Jx3U08fhSa8Ea&F zBmKOZ-k=A)6_Vg^Q+~RqnfZqwax@K@9PCq3b_JlHkB2foABoXQv#7Xc%=U5`jEAsA zoy?8Kyq|Ig++Nt|oN5M&d3FyftIYH$r>X$w=XGg1U8$uVnT>OqoJ4Z?G?bG^3mNY% zB%N!pI4fj+7RqA0p!=Dt;N7e>#J7A&VDAY+TFs|}T8`3sh|Jg(PXngFsGz&t{3*Dys8gS5xlB3Ke#<3cOLGK?dwhF`(y+MEp?Pny$-=CtY2yAhTsY z)@$b6lEqmr@#$Pr-RB~)71Uk*nQOLQlb~TV;^zv!*ymoSCmU<)QUh}x6$d>Kdx^4cx*>3S@?9ytNeSXdC z!KmNd*pwM;dglv%wm#RQgP#U{nz?%#bgntBv+x4%sh;E~q5?t` z%D?!D_k-!nM<0DCpMH9upJOCt1A_MX*(v*_5L$7;hC_q2WRyFAcz_zb!Xt})a){ET zv`5tp)m5-BQnKo6njyQn{!Oz`u*ByHpfHnhxRA5GQ1%~=8lgnvjPvig23ayuu$#4IzVFD#hZ=0@8l6AUwVO1+RMUM+jW&L%=Wdne zr_9wWFoK1uXjY!)Wb-?2ES7?@-ATo2>;8A3q?ha3==Y}QNZhq0uN8a^690^3KCe_$ zv*;lYoqTBNA~*tvVmuz{@i+upgwipF#_%@HRdU0EUj z0N-bqz5p4O=FD0qvU_!xdI+@Gg)Y9X6=aEXJ)Xn;LleBeSQ5s%yKeaEVtipXxOVKu_Oi>nbrkZ9c2wHUgYj#8GPFw1E zO->&T<>7-*$ZMd%DkXG{!3y>dWoEoDxeSg=;HJMkq-7m*ZqWO7LH-LgSX1DZzV2^d zZ@x`Em?lVkmVk~1$2n=+l**kS6cV25&3Rbr@P&pxI1e!S>2!OX zd3PueYqQES*Y6`H2v%1I^2VEQYLKYc&|m!(Nsk~_3fSy}zEnQ$iI{2zT;Nc-(d(7h z3$9H7H-Mzo)9YptlIRFaSd7(y&&X@Cv|>dM9~WejrnNLl)>GRZ>b0{did+HRiu4)- zQ4S7m#`{J$Sgn2$pnIi%z}Fe1D$$`D9S@tou_l#<1Olnb*81yiX}tvWe_@#!Zd_{` zwIdseADek)MDi&6(i}wcugO|aCB%rp#0hWeX_EEz=iNLjZuD2WHK?3D&M2e&dCIJPNCq;pWY}Qh3u}Byt&%Wa&O1{vtVL~hknF&6MlTipU=S8P z%e|-~pm&eT0M6UV@d?YY_wLgL0Zb)mbF3q-P zv7z2bhMKV^IbV;g8~t+4t*ATS%$ib+T?G@xkMm5XCxwijX@-6hORUF)vU)PfB$?)9 zk4s`?SRLA~DmcPir7-Gu;ez7q#xTV(lBG3`EU-`YrU4pMBZNJ31;AQ^>Syk{!>R}@ zLs7L5n$t8Gpdd)X95$*HaXcn5tX&4GolZ~o9zT`CX9t>*?y>aTtefkaY<Zm;l$*`;cu-*gSko%DtwB&n*IR#D@PM@wf_-Z(kj}a*=Yv$v zALKFt8y=Hx8N6sUlZO4Ru5LD6$aFkqr2ttOf`*lDS6mHTINz@Sqb@y2lDgmMd4KEM z-;&dlV+M%$p5ihB`1iXVaXfv`#Iy`D&A^e-<9T=;0!3VF&!;zx&VfAe&lJE9ZGEmKvl9i!^76~K=>L9xda9WscmswjP~-~Gs1{&^PuDikKx}OVvb|dpH0vA- zOu=c-pzxQId0to=+%yAe4IBk=y+(p5xdsJh`D+Hy;TVTZy{T)~T6M*3I4Ffs3Kz5X z=|r>VO!qOKN(a4a*JX7gF2!Li3JO`w)LlB`xf~}8HK-fuT6mi60-WD?;|*&6L+>4J zo%;Dudi^e|GN}d!o&r10JI+6@!_D!gUaK8eG{B+As5~fiYHPNda&l(e{ZQ?}XV7Z3 z$mnF378zXGx~}W3I+oMdfGE^+s8OJuSymodw#``q4FG3)R-N0oZ#%^csrZW)t6%2~ zy*l>l9#au-KcAsjJep;Oz6A7t`DSx+^@6Oyo^GD94+qi^zmx>@Dr&6EG0gw7{y%dX6^>t>*Uf^GlT|j2SO&Q~8$H!+B`e6Hl zMq;_iq%va%3gZvlaJjDf1;&lNtyyTlzrsukrPjmaLuPD!&Dd<$=NBC0#T5mfdZWg2 z{=u7`Wt9#*K(8X+fE?9qc4V!;L6x=nG-f5hqIQS^9-PX& zoT_Sh>I)R#hx>_~KaM0m(O_g2NHJBQpIBs*7h%e*o62Xjd(Amo7PzL5k8vyp84BzU zl+G;kJm2-owM#iZ1;UmQIx#L`YC(*Fc|gQf!Z>R^TCYh1cEQ;ar9azCK3MP%5|Ew1mxkhnA|CoInctLZxQJNt#yAzqpRl^DEGF}kDQ?6{JOas; z%RAKH#=1g#eSALVjCI;<5@Y~6UA-Y=3~j78a`aChJ$#_S!x7~_X*r5Aa*^{riswZX z1L8#$fQcD#nkcv(o#|)TlFU+OUFX+sN+41P&nIv8agSO!3GuGHn#$%C$CJ0wa%V&mFECst^hbG?jsI z4c0cI%xWZi=@VLw!a)pbc*xXICIbIMc_%&HHA}LxzQk+w> z=ob$~y2OS#jsC6fOLN2JHN%7q+U<`+na@TtTKMEoH0+x0XKX%O_bCYK(rUKZVsXnX z9@h?-`zLyw{q73q$zOl{HF7e3{{H(EF@k+7GV2!F6ZM8>=L=cPLQXb7cOESItEnMz zg7}7+egvloAWdS6TRrCG} zW$4c#YZ{L^*NRLNKmvKnin0AwNz}>nGs4@?K^aA=|D48=3Ofp;`ec|}3v#v%;s zxFMq73$YJ)k)z*@tQeqja&{~aA3vm62iC9}B?5SypATu(i4i43JhUnODkOrr%(|~$ zxh{9_zQvpCg9i^td;*XJxY_3gGqW~6v)e%lltj5_&z`cJ3dvE-5<>|L0wzYy%>Wc* z6_nhej)rnBGE)6Jda?%xhkDbVOHi*-52gSZFErB|=@%)i%X)WBR%@EoDkz*iJy0OB zW$_H+Es^93J`||YeM2h&KPyJKWf_s1LIZ^~N(kDi9)AwkQc%- zv6Orc0Et_+d@wWJEVa)OtbnW4QP2UXp;wL!oPsNw;ldOK{c*6u0iO3iz9)bCH-96a z-oJ00=K_el7`s-m&dEZD5Re7}u(pMYALh3vTHtP;IS5?VJ@wX$V$H> ziT;dh3(4v!fxK|dVIjU;^_phtb^V8L#PiSfpUKlqLfvPXTQbWuh|<6aYlId> zui2#+I>I3jEeWoNk-G|MaIn{aVeZUsS_B2jENg z`V!E8uYg`~{KaKIcXe%@AdajYrA*wMamRuviXqNuf;OLDxPg6TqEE{JdX`mUDJFf@ zth+!t+RSImnjY7iizvLFnG3pWqIV(Ollhvg!?V zK3m9~VlD;ywg7aLL(#`YFTK<0GH`0QyRw*1n0=#s3UXGhQ76#(dZR~w87yY>%Af7; z$)SQeWn=YykbW0MVyKI`skf6oE^;y6h8b>8|DD?wvt6_ZAVpd$KL^jrEPW46z=A~} z6Af&vlT3z3Q`x_-8RhXz;;{nJEH%F36l2NBq^E7G>y+wh1p$pDt0-c5A3Fw?dZGY{ z9xrb22rzJ*HbKVcs2-{h0Dv@%`Cc$G3D_5o$mYi9^m`pvGFr_JGwJ;acnTBqH_gnu z-M+LNEg7B;Nf`V@K^=Pf=%vGdJdRC!z)`S55QJ?GTU!P6p@J;-ajfq*2O*C3r@H{?c=uJ%7(I?lohFy4>aM%RI+>&-P`1 zZ;!zvdhNBqqk#=Fa0HJa5n?oMiffCaMTV4!bA%R1M}tLZ#IFuk`BeaKqLQdJo_K7L zxQ=CMq*S!^+JY{FZ|8Yi1IUr%XyjQGzW($J<92%iTonPVGL-q+6g_brl>DUXzpZkD z;Oj2nwFLBkqX_dkNL&A8$>^(CLc)!TNpfP`s_4_LVE0!)`Rg1v@VjrmRiDphx95xb zH}tWgUqY{|Kyqp85=-s4K>@5L)3IjD$IO_Kfdj1ZCB{t^<7&v9X~{{PD_O3VQ6tN8 zn}o2z>VWKcklRj9j>t^*0&^1wQ4C{8txk($M5vDJKYhZHrLh8gl7wWjJM70B$1yWQ zB;}k`)nG7>q9WcPv(7A9isvLo8tKp6GW~rzk)0jsYYr)9GdUZTvZO-IbBeK4J$f;p z?=o<(O}QVfnb=fqU{Hc!5b!X~jS3pd*T_cM_tm#)G@1&KYvd+ie@5w$RT8MA@z}}= z0LsK0Yn!sUxxs&f6qx0vKabHZ^v(Mka9J9>p!|-$Gxi(VdN?;Ocl^x4lCnp^>j9jJ zbM)oMMtXLUESL>DzDqzuKsz19k|{8Tm`Z4(_ukNi+ZVTA*Y(!5b7IMB#*?0L4aVId z%j!mw1TbL{Y3DV`VpsBo&0_*tj`#;(clgG0q|jmIAW36t;#a+G2<<@g9qWsr1N&9e zAO)f{FWtJS*Tgd!o(<`tj_Ckgukc`}Kn{+DyoGWt^;1EhLvTtWpaxNBu_3UU&qG53 zEDQ~{)cZx1$l}7nod%ZldEP9FyaR>&JSP(pgKvme985Q?uC5l`Z#w_^?EP2Z_H`(; zv+Wj!OnzRxSH1}7%Zz;q=)c#}dnIy^QKTZh`0xBe|GoI?UXX=RXyX_e(cNU3-+1jC zK^kW_qbUC7Y(Cr8jK;5PX1AiiyK{Mmv*9eK&*z!}DwrQ0G6QEzqLyp6c*;IHe9r+Q zm4HuG89;``3P__Z8<#doaKe}S=;V+$V+W!tO_+AnrO|4V$kb{#7U-NX%jr(4kfqp#+>8#j<(K znQuIbi_fsx6Xxfa_Mgl`va-})l)mLf6~LGb4J1MX4!)^Ylpq809OPXcebj0S0Ba@) z*o0oa>v5!Pb-c#&1F2h-&fyjo1RgW>daWr}cX#CFS6*htV>(^XnikcEMysK~Z{$xQ zJi}98wvliom_W$#?1DUq@6y-x zY%9nE-s)(j6bx{3J14IIlDcR``0!Tm+tS?D&((~7t|!fo9bH?!J^=DuOPdn{WWQ^0 zNV{89$n=_Us~PziEcA#00D$@R+jj^c@BjQ43}QgegneqK+o4!Z$eDAY>@V6Acwdy( zH}(2M@Gx8(l1l-N_sMvw*W5AJztXEPhU=WNur*Hybrx5cR}w`bAlL+rL4#IL*U-tc z#KQUh`@jGD{LlXE&uoA>zBko4)*td#eb*6eA^It_%vzAT7**1CY^oMW1zaKITo9>|iLsL0wM2$S94^Si((9 zdsB;LW`oKb2AISM_}`wHeD!cox= zBT}wS8&A8mHU+SvKP-`D`ssN!W@ypUG$qsB=6jRG#ukgoDr}aYEe3DE6jlkmmUNnJ znFJFu%@M?;umH7lqk9g}w%M`gapon_47gSrBKgJWNq z7C1XUW0u6RzBDyO3)@s0khvD}y!>f|RSKiK;FeVfWbm}H)l6A~4KHa)el9YK5}6)H z;;!oXykbf7vR)^tFHTPbxF*bHG%#{9GW$`w&%qtALj9WtFl(*^a}Aa-w?FkHox`C` zf9lE0EJHv==OhVH1)3{3&&Un%n}PAaAsIE}art_lwlvHB9=H&ClK=4^|549VNZ@X3 za0BUAtRY4zF?q44K_Q57Ai{O^@4jE-2qOYLT)(r~g2B(Ty?uQ=Gv5hTb`1~xhTDpD%UAUR++B3Z-0$su2bBHMFtJ9 zwJV!Y69nK!R0FHN*I_md5*1v#P(sYn&n|4X017drvOG^qgC7$dunoYACI(^|mbc0qtm9+r6mQeV`atsT6fH5uo z+0_7mqCk0GavUvbG@G)qxj~>t-~h%vDjg`HQyNwG1#I`Km2`0p=)M~@zBWh5Fbbc| zG-IBoGE)$*g}QHznk180vf)Bz!&K@ck(JOBT`_6E3f331=9p+NNT`rRGj&ff+3tAK zxa3GO(`vk4Pj+3HL=r$EH8=e#j<}rdRmfk_8^k|I=&IA)Ywo3FIYjA}sgejkI zQ)CDgquE@6Ib3l5Jcn2gWO1P?cy>l^L4)k}CeJhG@DbeE3#b_83{6AdQUvdZ*LzcXoE74?g%HM=*tP!LL)v z9l=&*vh?{j=5kvC`f~gKxut*&AW?AyPvrOby00ZkQMm`t;LJ&CL#z1hhjH z{)AIjLo@YoJ~e%Ml=kN{X5{3tL)1i{?(}RK+-%6^%U!7{Pz?8{vj4$IVu+~EFs_E1 zXi9x^mdY(tnXoT-5q3$UGv(&;|HO#bSuA;@Jd05(5d128QzkSS9Jg}F=lmN!FkQt+-yS=?b^BCJPC3K@BZ^qeB9>#h*wizo-O5!DKL;EWO z8m9n)EA=}BB^Wb<3@?CdrfY@gU)tD|70u*N*4O3q`+l*-5}2|I0{k*q3}`1 z@#36de>XPP<-BzBL!}5D4P@h4HAkX{#e)<=G@fX>P-@8BP zs$U7%6)A4HEdl*21&mcc{i|ZY@U3rs%YLyuhGY1DfA9mycFQ;3cq547=*oOH+g^l= zW~be;;F>mAU86!*SO1O7#vzD1>~l9YI|}240#d>r`0(tUge)_=52Y|O9!Gmh1&X%b zT#fZ*oh9KY4*7d1zk!(KX*Sx>%y4~Uz+eH!EKeRjlHZX=<_?0D0$42*yROHu zmP_wtPqyEv(+bt@IWmV`XW&RY)N=!%P+%{@g4*iF+$E=8Ix=80w{B?`S`gGIK!d(< zv=D#pvj>Y~Ow&H+oWabmX0$nOhCXiKF+^Y?9)dCo)~$A%u4*_glytYZE>poR3}a?{ z$P5Ro8!Y>R-5u8x_KKn14$&9!b2_{M)THchTMWViebh>Yy|k2Y%~|fpaiOJwd?V z4|T2dhTROng&0U{$CJo9m-KWZVKZUi7B_XzSS6V9a3 z?&@{f)PSw0f!i4*VewUhl)PT!bv%%uYEYJ-?5vNO1{X`O^yRh$^shoR$`PbW#;}x! z{W60&>``AVk6}~|YHi>7_P1>X@m&Rue-|d<7O(@rgt8>G#5K#YkPV{8Odeg9m5ye0 zmWz=QqSQH`%#3s{Sl+gj%4tG(D*zuxgSNM}2~cqVLKF|*b1;%=+Moc|?YE@2(xWg9 z^vU=3p2_fhs9EVkfm|>2hS3vu2O{0;zO=7dQd`&0)66c&Ls>-&ShMx%Grf7AD2SZe znhClJ>^6a25{k|$h#Q7F%Iw(ad7himL>y$Opq`}-2{c>V1i=jZczQ+=9aI$n{-|=G zJbhvKqc?Gs&NtUDF$e;w59)TEZlCU8$j-4A$gTk*kj4c$4gm#9%y>@_s>zTBz|bJb zdTwA-GVn}xZp?!$j#cUVp;~~lzvqbCHa%O6t6}u7+wICqAEQ}oE_)N|F5mv_D)o7dLl{_uS{9DgFo zP>(4vGxrR5DNLUc(5VopK|}7w5;R=tY}ctqH#&%A2<5jknkFq`Us zr}`cF4O`Xaw%nG0{v|9~`+B2jw2a>}`>VMry?$ByL>2L=GD$%B7}*MLdhmZvv-IsG zP2bflaAPoNSPi{_OIe~Gk0L4SERsLgCP ziNf#|uLbP+PR_@CKKk&qZAF&e2sr^KtE$CBHTSp8HpO8vZsMKP0lOEbDbL$YBYi^Ejrr>P`k1wPJzJ0z%Cg!hu= zZ5i?ztwG9c9yjy>Diteh>?;@LTFw`91_S^U_F!R(qJM`yCuXFPnYT2{L)qRbrEXDm zfJACumhLmt*k`%kL!TH#G#IAXX0Ko@!-@CQjMR~lj+Z!QDgond^sl!F>$E3De2J+8 zN|`FqLCVz^4GwGw)zr$PHRt5y#+iJ2{}cK6laJ-(=!8KGfDE6H%ouG3Tpv9Jzm?4m z`njK;oKa0Jj3Zf$HF!H!@Lt#Bnl!{uds5HpVrL7P#g@z+{hN(;LQ3+Y>DK5TU`9Q_ zh*~7IO-08WmR=LNOf-hKC7`$s?e@mIfrUJ6u{eUC3pa9$io zTe8`gfc_N&bl(VvT#SH4pSg&?Y|g9Im#i`>LHY47|MCZUZgkE&VHAHeilf_|cDsc# zJ8dLw<9-BE+WxbBX6x6lU6rlN+sxLP<-wntN@LOUpusjQ^0IVMim$K)Nx(;c6O3Z? zpbabBVp();eNBA5`R?yOGj^z&nS*^yeSMJI6d)k)(Y)fx<~KUBaZ_)|jk%0c=*Gw5 z)omK0K;fevDaf^Ivf`|ZGi%G)y@ecnd@AF3F7Y&fes-$(3oLn~3}(zh${RawQs|*0 zOGUe3qM0k_Yb_&Ag0}$>w@5a4A8*blT(xAz-n~n`90rw!|ve zs~jC;CY+eeyo`+i=nRyQlOq7q;0PsXnvpnWHonLVZrBVW%;$mpX2FLXHwoW0VkdN+ zYsiM~=Z>CB?DxHo@5%nbvywO$b6o(Wi%`K=1G;t#!Its&h6F7#Utj96j~!LtKN zYoP?&P3c>jDO-u0Wxk|gAt657Ntl^)`asONOk52l^?y#=mEH|s;#nrAzer^`g(tvM zX#_o4Z>_PigQdfDioh8Gp$8D=WI&=>e5BvSklX-VgP7lkk{p6h9Lsz*CBY41NH}L8 z%c0Lc8B9ok!!-_NzPxh&D~#Y$elf}?hUkcO%WYOE^m(4HO-t_qUHx}QA0vGl1ohkK zuj_>kk{rfJ@(SeMd+%NQhd=yLzPy7jw)M+K&QoMkdC}B1^kK1MTgmNx2C`g^6yx#1#6jatJkTM>F2zNq8a+rjMrEVJ* zHmb~+Wp3}dvbyWZ%9xmw7R}*H+s^^*JR(HNHU9MK8z%u zN7OpcL5R}(E)?X7Qt+LC?wDYvwB%ui2T-5ru~G%EJpTYil(R7f(C_x8JLr*dUaOTB zrMd8Zu;%E;V+I@`0}>ojswhXLpk9}mu`(LiaArBbkd<{f%kGkN#( zyYKNifFGPs7}enO^O76z{9IU^F)zy}6uDVhU6tFYp6GkwefAVgMY47S3sj zyT58!V9w|hm}>4wxY3ZBa>)!<1%yYTgs17p|9 zhB5{pAkeBAy4}vDeJPN5Qj_y1Q<>rXpB>3c|5R3+tCSgzp$8D9yv7i;xOgw9@38`u zlivVwBdpij+Nx}BULv3$A05k@2B%kccNt*8#Sg^9nBMWmXMnx}TzDfqLrj;VoXwX~ zLfA|;U@Q^>Lwb!ndaVZhmur|ead_0;kV~0g5O3i-hh=yZ-QB0z8H$z~6Qu^BZI?LC% zt3#3#89(~!{k1-&Pmu+kpO58K0Ua3^c?quZtwx0$M7YMfFM}&JX|L)p8zBix8MVGm zNff1B+t&=VtLLSFcDDj=Y)P}{O3-#FM=G{qsMAqIjKE7?7{M9zrrq+Ge8*$fK2jin zttrOrP_D&F!g>>iCs%ZxF7NCT*l|q&Sm-4WRk)zWb->!dNCn3{(bt2Ng)0I*^>bZI zs=h(rp2upNUbbW8WKmKFnAb~PaJmBmtTRLKf;23uMIM4J-Dg~Kyf!V7VWYTel8o24&X~u8s{#q_(xovX{_~GPKjPu*RG*)$A z)*)Pz$|Rh~+3;BAtCyu)Z;MlNB+3`%dCJVb!G_n9(!<^+F%YCSa2GCbZ_BSg{D74s z5COq(=WM@b{5b{tNXrs}u-AJ4Rn?VNy-O+}Cpq-G+{S zXWDx4Ep(0B`nm;x-Quiz;l20Xdr9SwzTB4E641ZgsX8+)*K#@c3-Fp%H*A25W6Ilk z@o)cq#y-$WG|B{Eo+!B7xpT);Q22%d$9ujXY_4yt+m|kF$qs~HZrvhCA^V0y6`0z% z5#ImwQ{Kn{LMWF5Ow3HS>2+4s3#$ws*xS@h7A6=ijzR^-+y%xfZdn3$jB@t*=v6o4H_i1r=nE0}NYHl#gpCGjH4tmb7F3KlkiEYSUIbpvT6fh1up zML z5AFJ@WbU~X3h0>z3VD&RCE|I;%%&&|{~*PfVat=omM4onO?CICa(uQgN2ePK=pAW$ zO*p-ffo~N4QWKzDRGf^3F9MW)Z$+-{UZao?#9@v!OW)f+;M$^Xg6k0HAf$TULYn$K zTmyVxIw~e?Q<(OKQT{XX&vs$MC)I&^WNvBD_@7`P|-!`@PI; z3?)($0g+-pAWv0SWo15>UtAM60!@C%0|?dRiUtDHx88aS<@hDreYq_G{ZAUt@t_y8 zaAvj;WHj=AlR*~Z*t@cpa%d!|B|w;l-JFf z`R?xRYUck)&Q4FQgc>Spg&E~U!>(r8y5P63)TFghl}a<0k*<+NtQlIxO3Z9^faM-& zW*#&o7{_vOFp$$b3dVOe8$KFnMsIrNC_N`Ab7zh{SyUzP_Z8j8W=+AU*&$FOZ~-|F zC0ty;jqNSDdi}cGy!jNfc+4n++=sxS1Q$Gy)rurlFhADwwaXv{KPv+sfO_JOy~xeb zMkuZmS+>pj@61O9Tm_WcheZe4YiU2c2pIy&OU4yU-u}p6UQcN`1 z(SYvY?6I_~9U0d)q#o6z9-E&z?=@B(B45Z3Jkcq(*KZ;#x96+6FDF5f zpA`k_KLtkEB4`5XX=~}Vq5JT`!TvH!Uv5i4|MN)Hy(kA~Sle7IPts!>)@St{%4NaXw4M26yP^BL$5Y<-_esraMISr9hoSU z+mNvUj8Jw3^BHoW)N2OV?eDXUOp_B2XwIw0nP7`Bv)kI*;VgFlyl)Ov=>KY#j7b5o z-@$r6*gIgrfDyP1#4MD?ql{xvHO2^9M*_vB67kFna^x{XuDdkq7PzHrNfH?w|vhJ&o zTdm);VSM-|hY|6!pmk6-G z`sFX>lTUBS{;>uwg=XY!J-@3Oa;<0(wW8;JEs*BrnD!=l6{0hG-aRWtX#+`97_-SKemv#XvKj?9KM zFRz1cVbz5Wq_~wlcLxgYVNnDDGIM>7{w&vjxm*JUjZSNciSGWnY|H-n643vGx14ja zMlQmljD=*X50Hxx?W2^61=q>H&qxPAwN|SJJpgARyDv2NWVfmWuK?js-K~`;cVS1sryp_}dw0z<&jxfM|vBAed!9 zIWEt8>_xJKt3O{^?Mk&#m7c!->EQ_($jJP1>U!&fA8Q7wnO*Z@MOLphrLkI(L^JmU z`rw+~#kEj!pwT@f4KM;rP~? zwk4{DUYRYIL4UyBImmwiUhMystJieFzs7Spp_?4~*~qA^I)DHURSa+daK6CihfOQa zCo^cC4{K47WC$O3-z%q-EyoFS=(}p3S7EOlULY8ihZj7u^-!W2_#>Og$X3h;GI$%m zDn~4wCyh-xDPU@R)J_OZ$DckUY?I_+4P@38^lo0eE+>aaGiLeC8#mO72FMufWEvRIlSj`T z#_e$LUcY`-?mxI8AAkIb^bvgOeT5T)&nITxVVgV9`?jz5JB|UQN6hNu`mA(U3EWf* z#H@N?U(u$@^I{$>MKo%GpiDcF=6tX+<&1g8GA9;2vZzz@i)Yz*VfK`N8=8dZs%A#*cE|T3trrVL zI55Nk=pZVA43>;js?A~X1z8M98c0;GsoD8vAZs_OvZa9DS<~|x!>`*w0iX_SVl4nX zw~>Anrd5fj9o@G`ioWjq@j%9h(3Ushlv+JxZw4okc_Of`)KzO?OhR+OcW@fH_mzJ1wZJZv_$17RK%>=`oSUF z0PJ&%Nx))X2)=MHD~zz^piEdX&HI>o_Z6CyAk($cxH+H${0d)=M;47LOHLoy23^}K zUfLDeIIiu)C3=1)^l!&V+pDj=N?{rN{g!6Dbq(Y|1jOGBZV%+6k3N#!$B$`W3VB}I z!@?pnvHKwhQL(77tx?o;UrzMC8t6UL4jIru5syN=5rka|df&1tk!oNA@A+fhZ& z>ZbQduAnYUP+x9KK>xGJ)N|iU_PtbH0L~Q5K*|A_p{!eyjkvf*g;d%it&5SYUad%H zBa*PC*<_S+Zn$J{(*!2d^EwF?FcfSj4T;jOR5E?9bRtpS(+iWZN{wt7nJqlm@jf7T zL2mVEd@RHINRPixpiRBKEcP8>_UsGK%GSmfnbrtmxR21HRe*uW3>4(<-@8X=IFcf< zPl16fM+3vam-Gw1hAs4-+n~pa-)99l7}<B|>3>LumhP)#l(vzw!F-dWCE z^gOsj_(m*%NW2X&u3f-Bx}ICKS9qPBjm;G>)|g19nJ?~Fl%LUC$7mvCYLTtuf%d`Y zckalq-+PawGX`M#e%)qAY8r&_HA8=mU;;DN;H9tk(dk5{r>R6O1TZn3>oRs}Odd9` zrWOp;^jI|L3R;=OZM&|Ord~@pzQve94>(?CTK3M)F#;tVV^GkNc5QWCLH#LmLC(+5 zII6~KiDvKs^e(dTQH@mzQ}>sd*b?psWb!*(J0x%-cz~K7I0eot_Z4~Od+WLGMo`lS zOYeF=A~R3)`*YZ<;-TLoQ_nRJ$_@?=_~8#q&d1lSSm8>N-@?CrFut@mT>|=Y`)5Bp zZbsrk{}~Ko0H-shkgxT_0~I!qys#K+HWr3qc4ageJ=H(&brjSb70onj!rboVor}`e zY!$>T{0s}&p=QsY-o7Od?mb}n7JXig0t`5u%mCe|PZYR@$pscgu;o$KO_GA^$4u!A z*_>ux2Zx6&-(#c*bHO0NnE;8tM<cji=h)4T@*^K0|YB^WPuCy4)ETnfS}4VQUKPN zYPzq-v!cO*;wY5sFtV0M86Vt74d7he3|?GI_o0*9*MYunt&mzHrglLNra9z<;bYEV z$$Qf~8($Oee1~9U=i-hATaT%12e$j#+LmnA8q{&0hEv{?mh8KkQ4Lx|VDh5^g(?#6 zPY^X(BJk(2B+7yDrtcN&z0k_?VpacsqQ6IdALKZw$qn_xmH_CX@vi3@FrHD#&sVy> zHbD0xPrQE?KDRg?%;k@~+T(It0{U|MCjh-%hyeu1-s^N$Y|F@`h%xHO(I5RI<=yInjny{1G?NXAU(}8&{;3cBD~kOEuq+(V!=3FOy`P zu(VDxTngLGSekW=RkdYprAuG;cWc48ZvW!HunL-?k|iTbys_GpWGa zy)rBJuTuiK0gTy}pbEr*EHLn=@XUgR=X9EyXS{e7w8&WSplyNuj^Hyy-=9W2750!% z&(7tek3N?770hwXKu)6qApO3bcSN&?Gto6Ere+zNx{-|aLPgc7v>Lkq`Y3R%VX}(r z4QXHOXRHTO)19bi?6pf%&qqsxuTDTubX1U1gd)Y1_fHskeXyLyAfMqEew*cV1prAbegFiVAI{L3%B%%By-L5wSAo^)5n;JMFeQ5|xK zPlBMX$6w2#@2(F$mym?5>-j@Do*M7^{S?_d{+`58DiX$Do3$z{RPYMG^@=Pw3H&`a zc4KNKEVm_~FSkFq9Aa#E7_uy+UxhI)qc*obJJZvRS-TsIgtre&nA-@yS;2B0L(ESbmQ7}xqjmYjXKU1 z(5bFguS=)h=2w6}0))qVyPQEU^m!)yqKk5zOIXM3c_i%%HEFEt{xl|1xT zvlY$g#(EwHx-j-*kx@fx($yrsDaqNHoE`S$^hoy=>To2V={i=iR>In9msNzr#u2@+ zsVNXwSy8||{^iS;sfdQ>Wb8fr*?H$U_Jp4K?!$*vwu4g|GhiyfnHUa9HSpo@W! zN#jbXMpjz4;wKo-^FlYy2T6q&K*5%Ikf&v;f8Da(;cd`uoD0M)yl#+le~LU9_t*ca7!HT) zgZ^}VG#WP2EDex>v8P=_X}Tsg{l2D|5MTnmN9bXrRRG7WL)~9wqA=*7DxQ=jT>}kd z9w>EUhJB0L>{S_^jYukr=r7)+H#qvwD1#mz9c$))z%eiQm={q_vQ!LJxXr4pT&_!V zL-(bX$+VJ6q6rS9U_rRT+;yDR6auRX9QvFw=A9!shuYcWk?h`mBxmr)9**=eAz*=> z&4qY4CXo#WChSiu@X?FC*`yXb=FFi2*KF08*;DzAfajQ*?>&Aj5ANNg&OKD**h*kF zEQU^nofiuFI$b$YCq6O&2jQz??@l0o;$o%CKpg&VmS3cp#<&H8%9paUO#5 zZxmT$4GN$!&)_37H?)=pZYx_Cr~)^tp2>N2A9t066U}xfL(ZSGr(f}3k)`8%80@t5 zoYf}MpN{3QzbC!)T(V$?(+GJI%{6D1k!hDkYN(SVOBU<^^vIbi~xJSl5b1iiSN{xR852gy}vaEpEM5NcSs;9NB`!?0@ zk2Iu1=3dqJsz6;%Ut?5${=fEoBF{_hiMe@_KaOSZd5h+&WIUQkyN!}*jjm%D z&+0449v`1^_8h+4(Drs3AwL1I``&7I z^a^=buSzTW>0}$H9#!?Mq1~ZQz?aJM|cM0Zj?V@cdKutXOdZM{-JTCQo2_v@o zTDvbzTZ;mJ?~0U0EoMXmkNC_od1v=Wp6M%ttvWZyZ#X z^Z{V#m9y0$#tJ9s=jJk3n)a|19ELM<7Jxd(4`Ju35BS+*4jmv@vg+g5l;{BH%|?yK zn36Rf%7zAYFTVb=>|DDb$JxGoeEe%U4fZ6-Ph_OWBH7RaTYLsWcK;=doK%{6KXr8< z>LWSr_oV1Md3f!vTwc2>ok~~gt&ry;_dVa7L5Q*Wa}5~4xQBWpf=6h(!=UBlSl@Hl z<26GS2EO#?XQwip40w)FrKpBxc#}E{3_zO9{WJrQ6DBW-jU9@eL#OZQCgB)85D4~T z0I#kYdMnTJmCR-5dQJ!WWB@q`bb;PCuGFsh&R>5g`1_yy{a0Ia_raZ8_2 zKjLT1ms{r}Y+r4ZY$hL2iPMxk2+`B4q7@r!hKdq+rvp)$D*Lry1q%Q=FaZ*<-Z7i} zK(qJEk3d=GX+7bxM_Z0&wc2L3g5UsUd622FDB^bwnu$~;RY2&S4>;mA=nYKhr2=sp zU3jXwf_PolpKi;>#g=AkQyE36OhW~9lx4HPw6}FFpXxdqD5!5XugIuX$ieyNa{sgY za&rGnCcT6}4N#28#usLRV0@P&WgvCYISjhyH8Wem10#k2T`1v&D011h=}oSm;#=lyGt!BCF&eNl7DGa)11U(Oub$Xy_--E$8htD9LBzyRLvKRmA{RX>tw zY=5x7F_nOGgUSW6b86I=E_;SnBoc0Jt`R_M)rM4R6=^kE4B%o{myPCSlGaZ2SY2|e zK}sOS%)Z2zfdT9l{b3U$Zn*AaIUk(Jqr-=CvUA2ULVz#(<%QYGW@#}Km`Uj^pOV;! zAZB%Cg+2nf7ZHe{8U%N|hF))QMo!WmxfSrF7vEyQSYs(q%yC0ZXs`lN({N#8=PQOn zW|$|MxgQ^&az>aL1pC{$L`_Z7Hv(yIX;#z?WgMq66a|*Rdx_>Y8YdIYRL2TraYHV& zZYsb|<=x(=a(88jZSU@pZcWl?yZG#33^rvgD2vP$@Hjp`lsgZ;kb_T- z#5F>xZ`UPicchxNWSrDAD2r(@lTP)Xiwnyp^_anYFDg@s)-<@gtk?02RF01J<-y^7 z4c@l(-mL5WlJI&KepD~;*02ec?{Winz4#DE!u<&GBIvh2+TCR-eq(LJMoINCh7LbQ z_i~$i$2qHMFtXBtd!CIlf+(6cGTwg_Kk}89@hDM1&!RAF>H~`Jv)(jR>%X|B`q+$V=q3kuNf&yttE?nW)bUWpNrg_udqm9 zA;pQHS6OC~b+e z`CV+OUyQKmZZ_BCLi3uO4$rs`m?I`wf!U37j1o0QoKU(h^7(%IaVMMu$lW5V1S`7H zFwJ@BuHx@-ZoqWDclWN``{F*cbO3L-KvMfBPdYNbthD2tm)kSy$mb*;a-aNsIt^mt zDrc@Mo{e0J!i+~_jut@^AWb@!kz#RHK!6Aicni2@0JX*JvIO(8s>1l8n3L%!AmlaX zsiUCJL+QEIjJ@W2#{M%UR}pY2xV61ZFy0>=0t7`65qkc)=UL*$h#=0>$=RuldIOpE z$BJ$m81~_hj>t`qF|A8B(ZB(KKJnvwtl~p3NP`)@7owFy+BYh4dYH?>$$>oFe<&|r zeoexPE_suHfsyc@)8iyl-<0uEe{PTk<2r3`ZOXyko;=>)lSdEkv&wK$uXVK(Q(Z32 zYzz%wk?q@vUnr4g&Vvuk9Y#SFpb?TRuEnvRMUNbb4ICn@>NQHf z``zzNe)OXs<+-mYe3cu55d?#fSjJ~_3FJ#aUv6J%#_r^6`HWdP@nV{!&*)FQ?k^Mw* zjm+?LZ=dDTv$GRAdW{A{zmPkQ)Wpp|8k><+H=Shli41jNp9B*H_1v$A=8l2Ix2k}5 zp|d8}n^&cl*L2@@Dd&m|li(#*HZ6JNWp-RTuJL?0nX$G(h{N19N~@_JH`ZWeyS@HE z9^8MR=ir`#f~k(pndWW*yNeltjdrLZ$a{skz=;R(!V}Rl-@0I?X7a17BE&WWU#nE< z;#R9S6toh$wPC!DI_(^Ba|~KW{h^#CXBv>iW(TTSK1qkVU+@(Gpg(D8>w_Y<7?=e! zk(<)&1V<9lhoDK~m!OxNTc4T)xjN)in|ja09C^b%bM3}8iqWJBqQCtu=F|_Rv(k~Z zjWyZa+?GL+$$8qBi3TNcMYG+ssQ_7*9RBbMg%S7>(0WIPj%odh0`-bW<3cRw-Ldrc z&SdZCu?&(i<#26m&lKLEm={z7tE>#?EiLrY@jQ$mB0C*_K9b|&MDM$Skq1TQ_eaTZ zaAv8BYly!^B?M}R2y}(xZRX6z5l0hNz&<#Z+4G_bRXAkjdQBT<`fI&&{domtcs;Mx ze!riZYTS?VuZHGs3kuE+RVuv-qLhKN4B8wh9&F%g9kFu1sH%r2Q-mcW?H_kmEjGPeNU0| z+2~i3A?&OiI_tSQGXt5AM)|@ZY*HJcG`3=?t_L!WH7i6Z-{oAu4S)lV)}a&)(7Vvu zmTt5r=Le7F{m*_Q$9pGMG{$IFI$PIfjO5JE5+nO!c3qew8NeK-EMRienJmgl4g~lk z(?sjwR0Em;8SO>{#Cv@C91~~h=2nnzU;&em@Wy{*AM`o{%sGz6er>`YE|>w;TFy2I zs}>5Jopy_TY1o1uw~krnhR6#_?YL){x$8MaC1iIuX9f@Of^(Wl^v(ro2;5?`$AO=X zcVXaJ_u}=^49KaTroX4?OlDTALskbSBsL=0Lp1}ovS`_CZEg_M;g*NW%kHB+j;|r8 z0GOaZJsE0{mrbc47bjKC&TD$Fpd?e#fKT5)P6+JK>Mtyh%aUibFEz zBaUQQHZ;qTTu!C1%37qE8N^32&Z8H$R$FfF31-NgE1J#)Nrj>{pMLs4e*Mmea`Nz0 zGN^xHsRSRa2y8jenIjWaN#Ke?FC7{Z93d6j?yUGJ1S_Xwe-WIV!lVW6Y2zsw;#Q#u zerM3cOwZYPo%@N2frx%0rIe;g3mLE6ikstq;u(*YrHDC`dzA z^{jU`Bce^cjVM*?@{r&Jz~^`#&U3{?OR6BJq0H^e{Vs?+NzyyK`L=MjRY-ch`26BJzbGgvml&yy8 z$~&0;6jmD{BVU8E9OsDV9%4noY`l)wuAD(hnVwt^wrrX%!3;cvJh?_2 zudobm(LETb4PBtHfP+B|ve8!%K*XA*wz4d5M?q9+fxW)DDOavsrSA3BYu99Tb%j|E zvPWcl$C{OL+-EeV9z4|4P(nx9(LmA+Mat0_YLY8pkp=A~B^_;Jb)juSBD6xG8T9LW z!=6l%F=vO7g=4XlNT1ozMH4Qx&4NNRIn7rLlpRafaNLX~85eTrXkQ*3i0poFCTI6G z13cG^YpCy+=mJkpn`WGWIo@T+iW8gDMrIm^6_z3E3O?|`2B4)=-H!;r3%G!z+z!{V z{`r6zK9t`UGO}5rsE@J=J z>+b70>=A4L;Eh_1??Zx`z820avV7>dV>TRBm3p(qoyb`k$Yt0YFv~=MhBgPP4d64B zYudowg^YIS58!-sDjlBho$U)6wB6>tJ=Xhf zqURdDe^h1a@x&?=nB&idQw;#^=BQ3U$8<)mYNKl$H^tsL14%Q8Ve>}8JC8Jwh&5aW z@f5S^=%ZIX)4dijn!>J{&5Zks)|66vV0M2NWe~AswJ!mExqYQuIbMV^=KA^?Rn&~6 z*88K#LVowV-wob*=N-IIRWsDCW{fLg6j!>fmb>T`(KgmM9EeWnMIsXe0q*|22lDxy zyDXpg2YrG$O3ot%nAEGD&BoWLS#EZz05dFa$mS*rAlU@^;JF?bMrNuq1V{i8LGHfx zj^(_6rrxtLyK_T$E`wN*UI`SmsbpGuD;O*ekFA$lLm;Q0U9Du83wOngO2=y{&^n9!Qs9t@d?2|+zyWJn1QV!kM4@AA0{elI z`%5pq%=_mzzxj>q?(Q)lK$#n2K+1^Wx<7d(m3F-$E6sJiAI5TYe!%uhwWjY~ z_4052+{TfUW<8Q>M>FmdFtpD#+wW5e4q5kfYJ|cF*H({z5?gjY)_V&tvZ7$V((TB_ z%NJ#JZB6#~9@FC<7PqVTyw$2Qt<}g}&!}UMHdxHezS^(w_xMb*T7~;Q%PoNOyb)Fc zAkdy=VCBVrXp!A16i^iO^=5#!yFd=MqSrA@vc&bydo$L;A05yaXDFB364001*SD4B zKaK@8nwl}!If8WW{ylm0@Zle!^k$#zG);kKFpb~{O|4pU02D07%sc{9&q5}8q*>_~ zckjvm{vN@j@RGGGvCkGYN04JrF(^pps)8(~uW9{d>)9nFQcZn}LHJzsEjd42WHv(O zr`p1rE~1)^)w`NOHZqc=QfFmJfHbSwutC*zGoJ=>dUqhF@1IM2+>t0zaFd#}8(q$I z>k_XEbWV~MGFk|j0Pt8+_a#^aF_5W6%cDxW(!f_JGTN#h>UkJ|xW~S!*_^srne@qW zDccd=Bn8zCyawb$sUMFjg$MjZGu+eD6KS>@vbnt_-~84$<&D?h^nsBOjFI;-(1X@F z?LG6w>&V_YvTZyErZ9KExXY2dYgezy+UgpEu;Zg6O75cEKiMABTn1(2V%{&YGIeBx z$bj?fR+^`Yho30G^AR*;aM#moZ10w(R(FrNHGj0k0BTY6m;y1<8W&(WXmS3<`QY3S5(jkz*K~Iaq6U`BP0zVX=!fg1}oHNO3vbndfL zLxyrHU0BvdCfCr62-2?B!;2&hQ_rY2q7oVL}-m9BOWsyQL?Zti+js=h6<>Py+uFtKsNlhafA^wUrI{Ik94t%AKJMJHF zCP3`ncffm$&la==e+4CkrY{Wp|6iou>gH^ zVQ>@`q3`vZ8=J7du3-*KFwT10VC;*VvA3p=vhtbm97-q`udlq(pNyJq$bZA#s&MQ zbQIH!vZeoF)C|Ye(=02W<}8V0j0wGA2+7a|4<+SH-;ZTw&CWH0gJwPYvB480sChRs z^iCh9E8vMysj0jHw2M5S>D)V32rP)$-o7B$u3w|T$;Y4Ek`F%kh}D?ecW%=}1pB_| zxK;u=9lHD|8m<){02=@}%Jm2cswf|)HoH#6II`+9&v7uoCh3o$7m{(v@A7J2102AT@mrCz%+_Kk3eEFZ!%sM4UEjmpRU-PjA6*r*)>w@l9u&ha!GYf#w- zJzUUn4$9g1oF`Y`Kj*zci&Ru=5H#rh*&m%-MMndSB1jl`f-8ZHI-Z&>DaY+(F1uUW z+0y@=PHH(TNw_8{CJTHiJ@uOVE?m^yF9`Z^RF$w9QU3t5_DP=b{KZkMaZwaeM5cf= zPGP2Zl*uXdXL(I;~1HP~>%7rexEq!zp&?}m0IFOf0);HcCKnN!_03Uu%jd1-r7B7GY z=EgB!&IOKguf=R>!D0$gmP$32WRlJZVkB2N%N|ey9ctEyGBzp!EMFtT!eWk+YYY;b zWn^T%`~EZ+WGwQjE}luux%2gSU0PdhX*`|EX*!Y7(HMxVS(nYg0~E1X1Astm0^s&F zbLMzhwW?XU$-GkXmdZGV2g(73bWTo==x>gnnMG(YD@>Hf?XTPn>1_-uF-EZs^UYc+ z40!bYKtO!^?YF63hOxkR{_!0W$WXQ}pNH}=z}rgnR&p;%Ul5PM_a`Uw$_=g^%E911 zQ2tec4wAmxJ3F$zwIwSGu8l^E87HnazQ(1&3nv*eFE$g+0twS6a5G6?>|34cbdA|Q zm7q^2Jw3-AeICv&6bDh}hDc5vR7@LyY=3LBFvu7vsES$6f|V}}{A|(#fh-jC_!aWC z_!sO2?DWJO~l8UQID{M=> z+LcjtB0V>ii3TU<$EPyVg&rAUK$DX?vpdVmQm<b^qTJY8G-_UDu5ra4`64zhNE#QL9mizR=l9u%(bgm z*~YQ?azEPTneKD@P?>oP;QB@661XSI{MbrBM=2lsDim5M0$*-NP>^DT4nYT%_5$u> ze_%n~#>Sd-SGsbh=lejf7e5B*p}UChNBdb{Z9*)h`(F)$qUIHmuy3?dRV=T2!d5YIQQ4O*PH948wu78Eo_?obO8+h`4!n zUgV{>xfsWQ#6i0*#wxEdtG;pL1||;V)mL9*rRCS}{z^Xi^pq_{TOGM{`4T}N zJ!qVBj4$GA;pfe9F94j&3?9H*mcIdcq1WsWN^=$%xhSYXRd3{<2V)Xiy?R3(Sy0Qf zUcFt@#om4SJ>D194palmtqe3M@2lr}|KLD&cXxRVmo8o5KI58H>lFqIWZoAoy?h#k z6k};tR>ai@GK_kX6n)d_M@6E5=eU7vmYALZGI_AiC*zSEA05bgZBx39)tSgo$phj1 zyasI~d`4!@gYU8bI6#~?C>4U}mZzEj+k#oURUa&D3j?zQw(-0U&)*mN+@q6Y^SAc_ zB7zl|4naU@G95wdPP1~2s)`UJYoRAt@Rlf;vAej{YGK{Z{$;C!W#)mm;4OogIjLot zr!N70x&6sz>HwL@Ma*z6UAjzAHSO*m7fw2({WBZ%qQCKtZ^X|%_dF(i+xlqeYlbc$ zqln{R7()XQ3mGH7LVvx;xS+uk8W{}$F7p|#^E1k2na?Cb8@`0yQ9#UO!0a|-j~Zoo zIGG`MfORSQ%UKB^Tz`zdo;t76MOjim5+{D%9VDeG&{mhNi4d^ilr|Y^7JJs?toX^H zmy!)E(3s}d&mIn)&&-{Hn}Rul50Z$)df$0AFWs`UX{}ZYzm#rOw!ib9wgq37*%h8} zRiyT{?8gGkw>0B^@x>SAyFd88y!P@d3>g0I@BU7H{F9%M(GGH0DKZ4o+8Q+3+ieC` zWnf1oyH;DSU%y5`FU>tr!2#!?>|wWhP#y3~HODecXd(IUWz(AJA@p`0x?;X=8m$wl_9O(j(C@8Pl2- zgtDL($noe*h8m0&4Fp&%z2~YjNlm>CGm1PTX-?}{j7g%YZsIXsoHocwo~y(b93nFY zHY58lg@ICPuA8bLwC=B6yC$FCxkIi2?&*H7&j49Ub-5`T-`UKU0AP*)3v=wJ8pQ1H z?Xe;Pksk`w(#=lvn3|lJm?R^YWobN3MwP-jukG&ObW;(desa_6fq*)E>7^IL4?g%X z`@_N9=KsmO*MEZW2;PlXj#_R@KwoZu4w*W>Vo?dNUgJm<2wNukIp9M4`{W!uoi@hR z)^(w3Y4#D98a!E!pkZ#~c8Z`h{Nq2IMSpaiutxSIjUq0R|Jk@rZ!~zy}QU zYFr_(m2$9FV6i|2(z1b*S(aZK2YvaTDtpublTvl91atr>Cj*X8O}7Awb-FJrD_y;h zR*13>_8!XF`Ke^RT!!gbc8?F_cz7hTI+0p75>Uom(~N%5yJpNtof&=K!jmbS{Tya2 za0sk7s@~(>5zKLYXvE{$?PWh4$K4Lv&|9F;4k`@z+(7gvDLE2k#as2Mtg?U)vc0`U z30_nk&QDLsKd4sCj@PVPp{*afdQGDgm%(q%yBQk44`ZTw?m183II96ibpmr#tJRY~ zG)phrAF;1C;QmOmOhlGau1i2)ZhtmgNvh)Fs|#})B^(jMB3^IS3AXAAA zxTy=(x&nAj7Z_I()x^Jk*<(Z|jWQ`nQ~>#1IC@RSGvN)ArM%^4?u`5e^(>Sp%h8|N z*pmyqtf*gPeT9J|T{PvkMLJXvZmra%yV{hnqFJ$|GY)V$9R`U{JPJJEO&pY&wb*+z5A^;RfsHJU27Lk&e5!+B&ibC^NF`A(v$@~Wan6Y; z#aZBkvUkk=zyb`dd>sGoqh0yokAEch?mr;lBAcgAyk>%BZ~FFUpRqiSW7^zAR(V}6 zUAm;-Z?Rp_A~V0q47nuA;d{`uP z=x!mPT%7M-%-k18=}OU@v44MK`cDb!s4lH*c6^`!{?V4W46ZFr~WxSL96 zn#oFgES2?u<7+e^L$H8g4w*Ub5oern>|a13qQYn5j#<3(WWXXcr@3;o$p9O*vwJC@ z8})d=FTA)8>qS}Vb#8O!9M|(46KhTQd2g>3&lb&SAoWqz={*xE$OkNcEDVFY-=!7& zFADBuCSMzSf+p1(m)jE1m)oCbrVhYGc@T>>$xD@(Ue93X{=QAK)TRQ{hW=eQ&9k^< z#$r)N4;EQCW`x5al6B2u;)>~*A08jsC{JQNdzM3sVm60Oa}yWLW~0l>U*JtEy!<-9 z3D_KW3<@x|lsj|O!gG*SH@kIdwBbFC>^zy3xHGZAu+oVgq9d`3$zG(9p|J9HIj<0uh`w;F zi=bTwmn92-#t7G+!{7$$gR7dAU%Y(T8}m4d=)idm+cDZBVB>>)*Qv6NG#O5$m?BA! z^gIR}9}LRzhO{6t(p2jlrD4a(M9zk1GMWygS!)?LEEnSi1TwoHoxceSZ;y&hy+Y~P zzz2f!J8Ln~&3%=EB1+8U$JEzPGGn;gdGdgsPUs#uO(yzwh0`D^^xdfP6=}+%_Z+C9 zsFYQ}bpMyG10|q`Gd@ZoOP`e`pf9)oU||3IRG}2`oG!j?U1${0^QKMsgj{UVhkmrT zC-)vaWXTcb$gQ1ivcSV;_>vP@6ZD_aKmdgaO$`NlWC zp?|w7j~+c@HRVjR_oJgj0@2;i@A^O^m77mLEvtG2WXTsbpN@M^cLZS|Bl^<4Wv!*7 z*gO-*qb&80y{>$jv2SSLvA(sb_fbnW_4{faeeo$1){Y+MRo&P9!+rgET{;`vvU+7h z2EmDp8~3CZA4-snq?i~dVayC#cLW@Wsb;1SDyo<&;c(EGz5QLe*u6qhTs5v)>!vV8 zKSzbRinUL2c%&P9e`8})wl&~*{CLmq>D&Z?SgR;A^O>D$dHdwE76c|V7+e&^EJ%b~ zUax;91I^N-I1Kc>M3rhx&32fxoE59Rvx>k3?^Tn6?#)ZrfMwKIZLA)QW3ufY|0^UXKq1S)9g zp=%&;RB%3gr=NDw_q%v_093V1aw%x2F6I8C z+vpg&`td}w=@d4p3hFfL38;%O==C*t8CuH*qD83%ok8J+Xb@zujg;{k2MX{;E^P6d zqIb?Y_aKlj3#_pkA;sJrZD9*zo7!*-&S}Wfb*CiGsgdtuiJ{|;A-h;#42*YOqr-|> zsxnIt|Fxg_MN;N+TLSuW`ws%Crwc8}N-RTztxTt`p=Lk_EY;drl1Y{Zo*7OOl?OzspXnlrzl9nbKrzpafxI~1 z%-!;{?)1z!}jWNm(T@rchp#J$k&KW$5|r`8La(l}0HGs$MRb*ZUVWV9Lru zu|Ry{=$`(2Fz&MyJ{XToYIdPFJ`auLOaGc7-$D>zc9r;hjH`i}eqnn@9z1-&5h;3f zd(eSY?xic2Wk-LH=SG!K)3^qi@sD>O$)R3@`}e-!>)|?WZftO_`uy}%KKbMm&Zwi` zk8(Q*e_NXAKlki&96LPPKO~^jhkiVflhb3C_tc?BF!^!?!Rjg|{5H6f=!0^etMuJ9qB@ix+hYZxqi zCOC7RWlscrrLF?G7k*5!)U}r~koD4rxqOLKUX&+oCP2WMbFrpUP!5dq<$@>s=|A|v z4}u^5@Q2HW_;OnU`Z7Z=$5@(Dsa0s5iA)r|V)T~Fa_9`W4Ck!p$})3ide@bRWn+x3_0D^Kfixs7{1_PJ z+JnHCZ)FaCrL{PKJkr+<3zps42lb0FmBYM;OX17)5NfH_tNO_J{wV3YIQ07((E`<# zGvS^L1&?`=it2PK=&(dz(Zyl%J63>yJi8ce08`$I48miHppKDAosfzSs^s6GvIN&0$j26{b5p`KIy_ZUugaGp!3|89QY z7BEsi7z8;Vd}Q7o5aWul2u774Gm}7@a44foXx>N00in=PIXWpuZiMpPa5R=)Z@_?n z3VOMj@)W-G6$J{&rFl?_3>oTPLr_%7?YW<*-b+i_|c))#eI1sO6~v3>M~Yqba?1K&F3HA6Vo`e2N1u>@;V=NZM>Xt3s>P zTFYjsalG|vO^?6EV}gYyfD|GuIFA^CE0ga zaj^GTGvoow?a6ea!56aFI+e&UHg$4*tbs&NLA^ylp|7}}ze>HL+4R*}n*!Ao%$3KQ zp{}m2%cYB#nB|}9-=iu56~R5t>UT7|hvQn8e(MG_C^bWJ_LWy(ksSqmR8`7~g$pB} zd8R&CDTA)Eyiv?t#l(~0%GvW$P-d=8pw}zOXibWJeZ2cvHrB0;gMC1df-$g~zQ&z9 zx8=t_`>A~R*}KwrkED93FWn%KU@i2t@f52Vs62rL88g5^;Foc{vJyLefIO%_ zO>$F(bLK2}d~_nm$49ib1;B$im$8Lof;dH%1$sY)MWACF)R`2G14nK!H8S@LVqxLQa_) z%Zfh8aNdQk1aurYX74w2zph@sEEg0&Ip>e;UjdzZ>Y?>v+2=k!qQDHEgV#YYb*kWx zS3>`NwbLc&Jh*>fCYl|tZ>-B}ue~8pKm82P|MB6W>^^$PYn`O2A3ZF+&2t_ffb5l* zUzXQieU)UuF)eWm20J*PW`+}fxj(VcT$qoxEsm?rX3;~dbTGh+EqllPc=_T58niUq zO?mP87o?$q=SwfWB+Xhw-u=zbL>?dAlXyLql~}LMnv*J8GI3zUyhN|J0(x?k z$>c}@{aCTDFD&Dy^^}2C7{uf#&~(Om*7|JUVpbe*jc`1TdR?}*Hs$h_%d9$}_n&5P z8;r^I2&oR|7?9zZ?0%2@^g|+thsWeX3`Y~o_-WFTQUMV`rxED#U{2;>oeDQS${3hW zkHmWm>V4_LAY3kD%WVnh%WV$m<%4BUUt)$2bz8IUXP$ZX#iQec|8m+pe|72mn6B_*p(->mC~l=8b50nmwiUbXYO8B-Y#ZfZVwwl z3KtmTMPZN9iq&}om%y{f(L2p#er!RRO@e@?8PgyeOFtj#Yd2^-l3lJyrKrh4wkQ35 zLIymuN9xPl!i;e)ism#Md;rw3h)>~ft;Yzh_4Tz>9%<%oVCeg)o*`C#UzXqJ!Ogtf zZq9QBjcOob^442#DUdxUpMLh4JbZ*6dScA|Qltg`;z=qG?>*p*Iz80kXs7$yYCx2y z#!*ECR{)>&wN(Y>*W|Ci`&}xZv9)sfiah(wGt3&H?;d*HdH_vsPA9Z!1(P0ftSF@C zXXnP;&I?aiwCfW3%JUPz{?E01ikXkD*Bo#xMWgUSlbME}e!xhZp6|<7u5cglcP9sj z(#Lq6?q^-`4m0OrPp?&^pconelTa~HV20<+2)@4sZE|DU-$oL}D9@+VcW0#`EaxQW zra@&T!ag6RCw)3o2Mp+{HYWi(FZs$$ABX52(bmm zo(P(L7jwN>&Z8{>eYySRfH*R_Ygew;b&+iAzdQK4v9aC;535mcv=tbFm6g>%v!xdm zIR0~`7GG|*nic3xf*=)hM6E4Xu3jeN7&e{&7mQ3{T#9BOzO1^qz_z5*j5^=c8oKkN?b)nOR_BYGGJ>DM35?y|LxRjL~GumktOVowjCL z?L>y>eKOWju>g>et*@CmROC(p9^S{hq5x;vxn}#*jK|Wb#OyJ{9gM+7UT{JGrzAB? zBaoOxLhR6Vb_`UZ(|@BC(p}$_6+Nf)O85PCf+vhtIvuGhXdj;*(}N!9fD9hzJ&9Aw zlOijh3{71R<@768ukkCgZm7cL)hd^m8b^&g(_#yTkVP*96XTs^?F~qctfsUx*?U7 z>P&~;S~V&9A2xfh=L5zu4|gBQ=bztU@QTR-YiSth$=EX zRB&(Bt2MX3e?YPv%ru<)as_r~i;4~X+uhyA z%<#d~2HV=Q6?0o-kFm@cq0d>$islQm;$DD@fNg|np8>iV^SE>_gC%Aqu1T|K$kbId z!y8LBPWe0daHDh&ffF1bdbeOd9iN;~x)bx+08qRp3~4Hrxtt1V_f#gc5`XSXupC$` zd$h~`adE91zWYk9l z0&%Uvuk*i2`8S_^c1!Nw`-0pMa7QRNi_G4O@*tzfzIx`r`%;!&IPbUn<*_r({PR+* zM;0nS%WVnh%k58KTU2$+bpf-FbGBf%RLruwa-;QSYX0Fn7q^4DrktHlyQvGyN|ER5 z`qVXj&DA&z*AzTg^>25gFy3tGimX{jeJ~s}^*Ie))Ek;**DKXZ#Rb+()cuH~AO^q6 zWz)<&#r4S`s9`~GqU`Lv?zNazB(f|#2VjWB(bTf?Co)sxhFKXJ{a6r;VD8dcStW7G z_Y%F~$)Z4uk?IO-iqBZ=*x5LUq!z@M)fax|9Q{=6Ltu1xU~cRsaO=|KY;ij6bDuH) zjt!YP2ye8s)O|!o2f-77VBy`?oL9HQ!tcCr2r@X#r?Xt`=eCQI7xug6l#BWJ7G4XP zbsC$|iKF-WK;Hl0w{m)RCRZ+BrlK3jVz3s?y^#ufx(&}h2Y_#I?Ce>&c4rZbUoGenVS5@WL?&x-hejvhns#X3TWw zW|F8WO;Cy%cj2GI756*-ZTG#Hp8M&E93C9V+1WYS^te_f$qqpcuGP`eG1>TQdcRDI zgygkuZA;c_8{#6kwvA_Ur;vMXG$s-!Co*t-5(r278m9=-9_)%@zig~-a$=+Wo6-um z+{3`nnuA|}>rz_3;ng7m% za$u*$c3BZ^{Zbce@Ll)v8}e;mVmz8{@5A#LT}mq4w+1jxM=o+ zaWJfsuf6taFrJLVIEo_$j5319hd!#+s`2XTnu2&|B~8+8MXIg>=t}51YQIY;axN9Ds^I9>&b7 zQeTE1_D6G{aLB5HyatAMlFqUu7uo_@SgOHCUdU`_c>*Ud1)RPvlFVE=?`2tS5LxyH zrAx*bfvLt}0ndC{KJz7Zf#-D!BaVPQW;`FiOUi17%l%BW0uV?@E`=Q$$!H_57?)|* zR;@+c_tUcz#!@KBw{JNa>B0q8 zJ769|(9?a#@d40pe|B5$KYP!_Vf?&3&N;GktobN+-@bjDWqjt3p&bwGJ#j8(V`g6G zeX)$bD4O&8AbqZ%GoMul(XUDm^6HEUkC8b8Nel7-f~U^L2yy<=xW_$G4LZ__SMA=) z$Gj(Cm5LF_kD1H?-NGX*fEP5@_49-=wVDRg4gL32 zA47c&fO?`oC%YY+X6N-c-gu*_@5kQ*H^%Z)@m#5CaT{x_#{{K z=Pl^0D-d*QwYokkD+>Az1wCC1TwMXFr3+9aO_JJlGOa35$C!3unKuqK!?sc(DgsSp zrp*Qc7YogJI403+2TEico5kVbp+kxB;P6l;{fX>8dMtPE-jlt(19|G^kn*j_rceq# z>Gd>=8L^xTViwBA1wh>kjm+kfb1d zNX~PDpslpgM6eQ2wQHv&`)L>)`cIV11gJT_?)mE1fRq)KR;DV9@Gn zov;1zM;~)PP{zJ>>r?shPrGt*ej+1&_r zxjfQyb)erL>SJG@a~}`=d>mpr;Jx?W%MqlcUXLH!qK5mozy0k1LHYmtxBnym?sxxF zaCmg&8ueN*olNqw61KUqRs7>W{$svqszdT=5Ik{w<*fd4TLSuDWM7;g5dCmH{nX8% z*Y7(8>Pm*J+qtSftE&r4QvpG<=UP`6zh`tYf4XUT4dnU)bz0w|M;zsA$Bezg z>?cI_$MSbDQ$~aCHoVLo-{cShj-FK3)U=M%D&khf)}3$0z-fOgXnJ z98KyUk7aPA3;Co;p$}$L2%J(YiDuq2JkO^xn4F7@_oY46{R%TbsyCJM-kC1e6Tfgp zHcFIPk01(RW>e(?3F*|PFU{BW{8gfwk>%nF&)W*YaZDT1+-sVbGuJdEBVZM#0ghBM z%VyGGlrA5KQl0pQJhjfcPHjaM*7EFZ$x;v;l~I z$OLhXp!jy@_8k(qFt!I^#Qq`sz5n38-1_vE?CWb|-?z3mGuHi zyZZIEetr0@Z+#1CzuxY-#_`Fi{(T>rK0a#toJ_A7svaGM#K{rlnvWuQ%$g)lReBYO~~&~>@2g;7}9+}x;c zY;1&@O`+}v2PBLSmz+%t7C^A4@G_Y_0JfVIy8zsv<$Jkl_&glbQ z>G*qq@C(mBD=)tAqHJ$()6oly6C_6ArUpefkmImOeWHv1>-X;|s6`}PVG*oSc*L=x z$`5;CV@aGF4?A6t*4qgtS*m|CDG2PS zq(|N`BPc8rwmvOJjBKPyb0ys`4RVU95%;JKkKiC>hK4_=FjEhy*PTof$zl`W;b@hf zPh@e-e7+=-Qhsmc+u{k^P<}tFR@!%!sNxmzP=7boF$&;76;8n$s%S!Cm;tXJh;Z1T zOotM>oeR?^KRrE`UVl?Mm>AG=30C^a@d*JEI{O$~yL9oQJp0VEsQ$>t<~j*xV5=iQ zd-vUUEp{-PG?w z@*X%Dfb%z*vUO8osXLrKxok(3S_S2FL*VDTX#fMpKP7>!f`Y&W?I8&LAdo4#c27YZ zh%&`!Z@7$s3yu{nh(^?uM|bz-e(%0ONA^L#z{**Rq?C*;<_1OLNp<+#v|26a)f&GSXF&-V0Z$9bNe>7SkGzY~4G z{2$+W=iGKy$T#@$kAKXRKH%rnt`+V*=re$g|F?hlKk~QVdOIk21h@$(z_bMQC7}N$ zY!@$H2oxwcG!cJR0q-e|;J54b2FPnwU6gj*soc~|d$Y*Xre;yiI(`{NH3j8ZKhQ3t zl3UGTVbDm~p$7*-k1ha?9@5Bedp#Sm!9tg%1oYBPtK0%_?`fHHIAiW&Va018Q@4?= zP&2X1^6D$EaV(80W8;Zt&;t_0Ha9n^;#KH+F;xHuf$8(RcS(}NhrFd#eQ7nb90)*r`$PUmry$05X$Sq5v~r~w=?6)Pg@ayzfV zPK9nin~t`;gV+ewvGtX}mdD&$k{ducTZm&Y*drV3iwVqCiSgo^9AV$EFr%Lhr8LL# zamxKL(VOTAN3oI&=t}ZjNtlvSu*GMdj2vtp-FnlS6@>=yrCcsDS^z?$-jqr=<^qaq zh7x%>s)yHtnj8p*os~1qCS%#%-ILGne9j;Z8tl(M_l&&q(#v{%FKLiwC1zBMPESu1 z%zq{S_y75S$*+I&J_7~({Nklc@?ZbUf78J3C0-|F#6||3m&wbrv@GbF=U>vlFO}fZ z%mPVpED&T+P)CeaPGJ`>RPMZL9KliCOq9o~37H%%82PdF{Sk=v&j-?OcBI~^lkE?H z8c$5Xg|(2#_z>6+*sZqe9jV5!+pXw*Qz1X3hiJlO>_akJ; z3%%_^e_mjW%?A>>{u}-FvEHXceVpje9_Ztd{_SC*psxFSsCzrqvp;?7tv62eJs#_Y z=^59B(PgIh`&9ou$+9ACcUsv${PZ7k%Gm0A{M`?Kn6sRZ3WF?3cS}J3O9Ar>JAs1o zOS(AzO|4e{f!_Q#E46AB0Nw1ib!`diaW!tDCq7N4QMFPH8}$Z0wC1UuPHjQ(K+*3F z$WYF5GX;M4_Q7g-O={XB%u!4jPWn7Tjp!$ZaA7JDZmFl$$D<-Yx zSkFa|rG47F`dM)(!j--Csjt?ou6E^>S6-EGe&ZW7dx5VxGGkb!g1!FUd%u>y{oDUf z-v8hOmgBLX7xX%Q^IPARYd3DNFI^SE}YCpG|S70`zzp__k`L9)u<}X25eWiD8CE8a`G5l&Oi{Kmr@sD zsQ2^U?qivZCRF^}+E_PT^}>X5W?-J?KF)I7Zv@l0=CxMCk7b6lwn^c~&&o>7Y@}4| zd?Cm{77iBw-oc(H#1%6uTeQJYkwIGntrfW8?Q7ti_)1VY4FT%=Vm1u&YT45+Kl}QC zXL>`Q+SSLpzV;>k+@Q@r$BZBj#%Je5TbzKwl=nAu2vW|8l3moS2kJJfW1JJ>yl)`jDU8IK`>ub%M8Fm z_Bm0>95D!LU~uPC{{b9_GE9dYgTlNsNj{n#+`N86-hAT?+E?N@_V)Ie@nKN{z;dzh zJ?XM63P5?R3(qE;xUOF1h}GuCrip;)Tdm$%BjBOrYNh^CbfYXg+CgwsPv4`~>FU0; znVndsWFvV6_1J~t9q8>bpvf&5z}f;Wb{nmm$#Iy{nTMA!)c4ZtJA^t|lo8Ac=$fHH z^$z4a$aN;^m<)Dgkx@PeChH~IHAX;1u^Bx#IB(t66;1pbd|%8?!>=2G51qAgGxp$U zlb3rHG09tVZp-|+vH&6spw2yepsiL*=p+N^I`fiof_c^ z`v*{hW&o=cKG*Gdm7+2-pZA}e$2s5DG4?pxG`L@;(`06u3h+gciB<=Qln6?uBnrY&4yEsq ztrMKLtR$66;CTcSKgMSQKlMtD+6eV}&6DWtT4g?at|SqGX#e1`-1_V@j*o5Yy$;7Z z>lb@jgUmk9g>Q{G1`bm>K04+&UC8P{h1bye7J-w}+SfP%C7=V4aV^k}Lhy|07EE#= z_=DFe72@z(V8i1xg!jg%A&!qCKR)Q8;7y)CA)i~8_nqe!ECN0LO!qs~N8J-{i_n`Y z6rcvOw_apH7!-Q%Cn&~gFw@s_be<&HSris0dLJL@^*ho`|8WquAH4nM8+Y|@d-l03 z61`^+fBy5IqrXq*x3VsCaCqQ0H#dtP{^&v!`~G-P{o zYxV5x?EAX#{BOFTysX(tC$3dpsEZeS+{HP|tey6Xf_lyChocZS;=F5`CPm2v7SFWR zpE)c-FSNLM;2H04Xdu5Syt(>|=97o_+cmYF&f*%eihpjs+qc81!V4 zrykIK-!$;-=VWX^1GY96_}mMgAVcF68yEOcGt)N9`~5+W874?jns-RrOC`|<6LY{L zb=!RA zxU3w`_dEfV?Lkn(C|MNud5$>Z<;8UJaz@z)9DxTw8`FwuON*B*9lNM3>MYwtRtJ#6 zbHTPRt1mq$!l8t%fKiFZMg(IS*!1Y3;P>IjpHLJA-zOl{DX853{1!*l9^Ai2vKGJ& zl>qQ2-qvg$tacm+40`~mIRCUB^?>!i%D{P&+ze#wn6W=NXUL|}`^PM{F!-rj|J%FO zp;~~kIgsvf4;Fb?ChLAGL}sjWfMns-+z=q7c}9}r)`cz3=QrCe1|J-gl+=$2nl?X< z2VUsSc0;aTyC&+BB~-us-D9^V&dd%9ex3 zEKsO|As_-2MbL=dlxAdRLh6~0nSahUM)M170M>nX&Ip0wxybIdeZUN6NUFpW&4`jspGO zXYPTu+RW?wEFVix?NY@jAO(vN1ppf0%}r6Z&)GuHCQ+D<^ckM%x;s>dzo*XpP(SCn zzV$Qxv>&|l&O5t$FA5;^eSXvJcC(9%i}c>zyDuI4ONajJ|MFm^5`CQi^VZw^++1iV z+hOiOJ2=ks-RD@uG*U~w-uh%b`IcsSe>xnE?rFBy#YZBC(~S|Z^r+4V*)FooG#N7^ zVTp9Y?+X+1kP=+OUNO+7UBJLV1f|t&O8ufPNuKbt{a55hVQ^3SYW&9Cc?z6V93mT8bL48SRW*Dtc*taq zPL3o{M;5|q>3vKFsf_i7ktFoelLEA@Hk)3g28@a@4hEk0Aki3LD3xSHGX^$;Thd z+35)db+FE!J%1*9`@2Tdi|T+n)s?k5SzPSN8?V19cVD~1a&$R+985XKBd>l_hf0t#G14 zUL2@E<3VS`Hg30Dscz29kh)dbymEz`?dHv! zTe`UacsL&YXLZ_dWLYv7YI=yiDvdbPYAZKqAXT}%Ag!fkFcTT}N663vmNml}+S1T^ zvHqP4Y{J3 zISedH{!~j-hhlu}YWQk3epX$-uTmnkW*p?0iw>+eiW%;{UJC$9$c~}Gop5g2Ku!QL z0kMrh1V#;|W)IXeArz-*rvF}beQK2XW0K1_=YU>hy~bX5qu$i>xRe}K31s3)VG5pV z-7DyWr)rG#B~aWNTbrN;icJ)>vxy`ctU$ZHHtOiPb)`MmlFQQ*r;G+eUWk_iWw|r5 z3@kxb<(SBZyiaM_56+w^L%9I3%<*SXz%lH~noT{y4JI^ZD7SX2BPB4PYwMEEUga z2*h{2AzSNf^4@Q~D_?l~ZMk{H|SJ%_xAMpT##!3biG&)*k_QB6~{p6+4+W( zk<{~w4AZ_k^<9}inwM&$Esd&Uu%iTQ%|`7apLM%ZH@WX4R)MfbEa1o)NCva>@D9+& zi3+w-GOmAu>ezpG+Ua;siJ{~%dZ%`P&kL;qywJ|^<@v(#+fSBW}S9BTw3Za zWO>@r_qVsUt~PW-uj_VsTO+@iQ3UEUP#JFC=GShE4;XG7E&GM>dBn ztie)rlfP#@YKJb5D^?DtQrJKy=q>i(IO=+&F`aqgRN1QfJxa}RKb#SY8r`u|OM^JvSg(6n7-%7O=z7XkChV7o>I|w;TjIK&W3xu5LDn?Syo>)rDZyWnBgk58$SH8B>KD1sBL*;4JvZFj zF+aBw7(*HE6P^*u|E3e(rUDr~h}_7XtubrEqcPH?zAa`i?&tn zDi**xpsHu(_P_$knUP8EmV5?XANc72nF<-n6tl<#z-cdpz7mL52-WaOnSp12-WDqDKs4UIt8 zf+$?lsI-mpuqPFP1DLq7IOLVtTO^@|Wd;PB<@t;pXlNr(bpI~k$Zakb9OFPu2lR9) zd&V8jFnekc(6a-WEpb$;sXH#Rd#FRb@y1*7?r*&#*KSF#jQ|JPs0L{` zXJmbydY8_%vQxD=W_@3!@c08O!LtPrm@##jeFqp1c>k(o9W%akbF4LW4*II~`OMMc z*;rqf^^FY%r=WF(({9!p41CZlKgAlKjIG3t(Zqfxmkv-?*LA$Hwjp19?_K$i-~5kq z{l*QduyGzc%UmDXNqbJG(n_%5&*MoPeSn)wM|HqRNm5Qpj3*YHge7n@paVr~=CXgz zb+fEl`kgzklIR5tc_7bu_~em1e)vH44>W5ZUg)DXKqDp#K=9jGj%DN3MY;Qhn{s7s zTWXcAM0r*Emx&8BJShz-K`EID_jaGNjYR?*y)Udnh*d&RrNX1fJw%4jU^@5Ac#$kF zE|HL@j`w8dq@!|b!E6XICl0w!RXQT#r5xQXGis30XaG4kKd*t=B7;NUnm~)p&#_}v z4#Bq{al6oaqgk`VHUy5GrcL~YujCk^A4&C>+ zfZ%>V|F+Zw^Hsm1E45pL;*ucCeBd-IVmXHg$H zauKv4p9447>7!;JDHpD{HSIwL4n?1r13|tw38iq3)S5h|Zau3j%ZuTn2oV=8( z7dlB3>*u#9AaX&+$&s@eyn>%nA_Z)5!N7vjq0M>;O0)Z)GJ~kFZ`@$k2&W$SaWFXE zfj-kcy{4l`=4voF`kFuoTZm*2QyYD&iH)D-P!@}0Ki+IXRN#@zIqw0T4nT?+4NP6u z6A6PeWR(!>K(K=IB3FPLw`0Z>8rQcsmdu><>D+dKmO~7~X#q&+nEDFWla2$>-P*aZ zt?ODalg=EUf2ZB0BUoHm5TAaHr~qa?cKllvV}N@9tGW)5d4m_=@aRyEPfu8?fAb4( z%D2Atdu00qI)5}t$c1i*_OKKgneD;;Ltnm|ktmwgGq{+8RirC6$_v zf(2xHzsLmWrcgj+1E&tW!``!J90>&$XTs8dR8F6SGm3BINC@3Hpad^u=($fIir|Gn zJxu}z%Ve`-aA9McYGyKfaI7}X)u5?DN5sJ>_FNwW8i1*9kNIOz+Sm?n}3D`#o0#BimWsq$SD1&Qs4}K zFr(vPrN^u^EM6$XvJGflTUkGJ*X;B7$xu31z_P)hzETfWwR*m~m?;%*%GIDxnt{d&10q3U-v5np+#=fABjjR@Q z+qG(oPQ5@`9=%`v2v&38C`UubnirHzcixHnku@;W#m*U`f-sBSh{CCe34VoZER30j zgI^!LRX7YhH#i;;rF1sujNz?jWH@+^DE6Ste5U6PAl6%NzauxU-{K56?msIG1bI!_ z?f&_j$~h`G!#2@lA=|}7!Vu+e=Va`jW*mg8)~nL(v~-=$5%moa7#s&lj=&?Y&$%cz zWOaR=Vms*h#|?G-s}<>8Z%BJZpY=jTite#Iy!d;0bnz1noSU*(+mv2wL*|<+`b=6@ zsxP?{gaF4#GRezq)dBxJio6=|{xa}K0I0S6JNF6zF;$l=NHnH(J+ab#|3X^Gkj_ZAmrS^s_K z*%Ljs_0?0?LWEuMRY4>vz?=wK4|B6W`OG+H;3i@+x6a%?<3>Z0kL_3%+@M)_Zz@`}#{w{mkSGU--hq?|=XMbn5TE`)*Bb zRs?kX*T4St@vKw#<8Lp)b1xnGFO{j!$QG7AD~VHP3>ggS;^qR7>ffx_8-J*o(HAvK zZ1yiTGpmeCL@qYtcw)UiQ>dy)6$?Lhjx2E0l8#`58LmSE2Qm#Na?duFXAU!!mjIr? zSxX~QahU)dO#iYR<>~2$M;R8RARv0#R40Bzzwc27G?Sg39ezFx0Cm1K7-%<|6!yS* zqz)W}c0?Md)HkoFVE`rU95u@gVT)cUxyz9Ws>1*t!A63HC8-7&!IH^{=UlH;`5rin z1jz3^qzalZ<8mym(`MNo#tg?|R_pk|^TPVTg`-6UAc+0T+*D@MzTSsDeeLQG)-;pv zRHd#CKOL)s9b0)mgHqYhuBkf6Nfiss!Qfo8Z8gAS2XrI&#o)>^?tD_Y;IyvV3#v1Wdusrv``@x`e3{f1Htqu$3f>J*o zZ-^a^0rwd92qdRad1c3$oJLluA&O`QEZDudLEB^%j=+IjOH~fyl*ivcnkyaC&-pF3B$*Q^y-0XClWyG3c2{G*3ToZiD#ebx*5tT**_ra#-#`*BT=a7T~x_?>s&+0no6 zXs~b^Rw@&e;nlGR`twBXN4~PMQoJn1zjWyT0*^ig@FcEuJS*AgS*3jD-l#X;R|oxn zEHAITzP@>-0btgE)Qkx;-Tvhz!79i^XcYYB#@H46;kL>1nF!f7a#FIxOh_J+8rOLl zWQ1j@6Q#Mx8Fpiov@$&DTs5j+T5eOUV(ZGL+`fHF*48&!%BxpVc5U%@4-OCH(Zh#S z@xnP0M3q^#j$UTygeCZy&cUGEooY4L@m41-@tUh7jCt*nif$Nr#D2T6 zeNArNxG9ZxgZCI2bl^+8ex}cGd;(to zNOm3{$g}pYJX(4x-FR7AvMg_1e^+j7z9Lt34gdC+e}~}58#ivyaUyd@`{`VrBEE;t ze63dDXYcRt5?_K~X=QnZ^uJ!bh2@AaDA^wfu0y*9AXB~er%#`f@onhkfoCdQd0v#j zHN$cQGo(G1T+GdPEf~^ufxzwQlc%g0fI9-1l?4r^0l<9t@N;?k_^Ae%XU6I$GvfxO z!3)ZsNH`-HG<~Ky0ib+KHpNPWzU%MQ@%X!3yYUO^Yr2O64RlCmqsOg6Elyu6dL6g) zciz>*oax`6>+}AB-lq>VVR;Dtc>!Nk6s7HUTjS|b0x}P^MX6@)91;HOzy9l&nfgnI z{?Dxv7ABSH<~vJ0avR3f46ED7((F}r=6}4hy87NN;6D)-@a3R)e*dz>D1$*;uz1Y91q4g$YUDRA29n!vY|TI(?Z5a`u$~FLP%ns z>T@_uWTb|AaFWUBJf%}_MwzsFfd)D?sbQ3=xHQ~(5jg&FLpc|YUDg}h!U*KeIbkmS zvM-1E0nzp~&C)w{bEp_W!~JVC+bknPcm_rt<#1Lb;?Vf>Jzb4o!8Dg~n+diki>a4q}mqd-omnRu0s<^24Vz|{WE1;u@?ZC~eF#v7%AB8^lGgRYjg}!3$KFD<2_#FXVj-Xg7_QZ6 zIc$V$k2o?J>p$y08V=;}_=rgTz5PA*x;et>g3#O%(clHZTvPWh0&-N%kol85Di!hK zN!_`wksIkVI#*|IqoqSuT-K4Tudi`$HFWJknibERZaXqpoU*iU4x1(Qz%eHlQ*1;@ zbQDaP>&kXnAk#KqI3=_4RMWGldKZ|(v4f#5)_YRZ_1V(jU&Jm|8**Lm)f#@Lb~o17 zXZo4o^r*qH>z@MIpE8brZhw<4LDE_OIJ2sWUcj`A5YUqsX>l_i)B=Lk$zY82x= z7y}_$1daHVeGR}cKeHQpmM6E#!~y9DzS2$ARHqCTv}H9kUCqwXbHu{8v9gqb3g&rP z`aHX&frrt=`_My0){Z&p3Bf-jb82~H>Sml_E;MsbxzQKYkpr>bB6FOlwH%iHLNH<7 zdG(IWb?2FNb=0w-tP5mpF{{{-&-CnOHYT!RU;uXap2O9UzWbk9=azw=Xf?hZ7C7e@Tg9)mGspGDP z4F)@xy-PX^1XhL`j$Z(q6(vQi_0&T*-^?kDnG(2n>a%5E!IQQ|y#*MH} zFcJkPRa0l$Y?(+2fL_(q(Ab_T7sfxr^UqA*+;fe4XFi*;&t~i7tq&;eK`wl(dw{7> zC5bDR9bzq3^mBnZnAglx|4A+f=j5LU7dx_0IC7M9(RN5Qs5>~`mmmD(LwWGzGl?}m z>(1%*tyHDfE<|^j4AP+tqoD?8kyP~ha(%YRg$810Rf$e(5}%>{VYrF@SkFrXgyltK zw>^DERX%Gt>vIPTMcXR3zOWJVK*dg-=tzSx1hQmv)4fx1ih@CEQw_i@kZ?-(E%@+1 z|NL_eo}cr$Xzy@J!Us!%{fXcPb_1I31gVa!x`&{za1$hc?IZZW_!^!EQ2N*>!_P-N z_l=EpO31b}m|oPZedp;8Sr;?c=9uDGJkVBL6)r8GDcg71ET6tiu?3|)H1ecUNXM(w zP1)(nQa|46sj#6M2Yz{|#_7M;BfZ!lCL#yr^-OKeBYh9#UE!?N6y-$1>wO&J{qMj3 zet2|r#F5{(-+nv%;DZlxA3(fB%fEE!KVK>=IP+#5Qq*Sxu+ep;RV-OE5AJHVIH^P=nsz z&*bsnA4#*_m%&+IhUXa5!i;(>=@1BBHS(I77u~v4^Mb zP#BvsTSRgbn_EUDrmvYMsC37@v3ecT?`BnobfUsJ;^pNPX0HIGv4R8OR~Szx76K2D z3d^i-mJKY9rsa6fHy|r?WG{sjWv>%!0~ueH#?@5DYK3$&#Lzem@K*dhWV@W02oOQqM7d zpiZWxL4>ZoglvQA*u$bA9@YBgrXo>nz?9Q|IuJ#ccVI3J9Lp|XPeTW_jU zou6Yi>_<-hoOcf#Rd*wN3trS>b;wS)dZsK?kt zc@Ru<`c={66)sCpphsf~RG;@2VANuUanZBmz5IIV(Eq`&#l?kdx}pClisIi}TL-C z*&2Vx7eGrexG1fSn89amyvvp9kjaoprXll-3)0c70etH)fQ2Jy0g@RN05}}>BLe`= znsmx_&evw_o8vQ*G%XEt>S#)h6aGaq3LkNM;NaMmb6f71*l73fKj1ubjXKxnuvwKr zNf*W~Hk7Ofb#a!wD4bS$K=BJ?H!y}{zRT$?%H`ehA*2V4%xF0@X*wW6@!3eFbP!IoU&FSFZPYY8HrGu;2<(_n8;Ye zQb!N~P};?XW_S?OSTf%8&>@#$2(c~zO0m_=_Cd5JwTqNU7LGhW1X#9s4Y zrcL8V<Ky&mV!UgyHsUAarob|z`sqe}CR1MaMKSx#@HGuJi zI=|FZ#!H9(oBxFc*IQidYIOWnUC{sgT(f!a>h{&v#@c!S$7S}@iuBx!c~O$VU=iEg zc1$A&;2b%jT{N4*k*g7p)%cUf)yGYVD;s}m%JW80j%&6hI6gwx54%97v1mGfF68dvsX9VI3< zFg6fA7v;pVg`nq!9^_~DKa6MJdiEn=!-hBJ+6i z=n0YfpaMlUL>9dX9QKGtr_sn9xT_}hR#hr}L(PY7G%y=z_NLkAB%Daip?qz#$3`#$ zT<#SR)_)1B)A!s? zvUH$<Lk)a}dPYtC`Fx&d6J3)j0H$hlG63Z`Ni-h65L6lgQ~1((y>#e5|D_Rl zQy1RXbdmh=!d&+Y8=ISRH*ekyI^9l@BojBIJz-Y+;v#|}NgT_PjTsRPmIp>($_z0p zOK#}7sf}kmK)O+NxD^MQGAh-KCDP2zW=Et*&Y5As;UF@F>KL*OWWO+^R?4^07i@Ht zyvZNVQK*Qm1(aEnk~T6dOSsr1W7p63NacDHnVvSQ7=S<@ zee{vdW*1iCV}_#V4+De#I-I*N zUn(|LK=F^5rP>PT%r(nM$0c%@v&-tNV8+fb&*b^;4oAOM*4FqwqWB#>CyY1{n7PJInG=ueMCZGUBqqXf_m7U{$=);h?D2hy=~U;`0nTMoS=4>85KE)0zgE*V69cB0 zIX;1qf;{RPBvVH|KGkbE(_kfUNvAO{twvk2QSQL3Iqx0E!gSxAoE%eV2!U$1+u?IQ z)4v1V4q#lTvn^<7z@OVW02F9atD?uPMj z+7HjB(P7wSdUp|I$zzI&CF*jJF}{Bdd+&t;oNXEd^Md+ z2D*N8y^jx~AOJwFtLwENhB+i!Lp`Ul+C22xv#)*aYs}*R>aYGPf0>cLbm;$JX6_c- zTk8D&Z;f!ja&>!q{*_y|LL+0T7H~4BrzZi>xd0iFy~$}WW5dCy!JuLDVpIv6u|%fN z0B!u@_hsx7t@1MwZnM!e-DPJmOp`k$0I6Dw>8!Ew`xovr(JR$gy-{(T>#-4%IGRZ^ zR;d$16d#gfy~2`q<`}ICr!F>0FzVFj2v4Kgpi#h_Fuq5IjUWOq56B8<#+y*y!<_qr z2R+TQmxxqH@0d=IN>T;c%W&>~JkAS4U_1_GP_!eCHS2h`^ISUJwsCi(RH)}31XbRX zZf#!X7w0(Eb9`DSM>#7Vg^8TNk(<7F)n({;NwrCS7?S(g{eUbq=k6yXqnm}Xsk>5X zwPLM;iuI&TY0vIAB}xl%f)*8Kd>4J=9!D^MOs%I*prxrKf(1T1DOd`HbBNt2BeN@H zWRkk9%bs=Q9cbvw;nR|>1v)m;Wf{GV37RsQbGY6ByPkU($jmsJW!wqX!p3ElBnpjZ zJ(9?+*`j3j^J;6MBg82P;v8|^W0VSi0?6j80^~GD30$uSCHTirAIr{@Cv;lZZ(L`^ zCRT@p5RaHPS^;Y7|3Mw*2Sbr3RlFW|^W>B##1XXjkE1fuHaBN)T8C$Lrj9rt6- zfk7)SaPvU3&_&ewFf87SGeTk80ak4!*jXaP9_ zw;-P4BRoGw`TZ1DLUq8x`cY-uN8GfKx1%03i z>oG5N{az3(gn^bK=<5B;m>*einjan>=2UGH`DY7jy>#fmX`r`~J6c{Kk(tdr@LFA6 zS=G$v4|RimU7h*b_SJ1V^ZB{?LJf6*nNmm~!tsEj63(0`UfnDy(6+i6FU(zm3^x1QB>ow>u|`^Yi66 zi7%-#5J)l_UqtGO({&~TS!RxgvXQPA3qycD6$~9|T{Y9JZ*RYlrTIQOWg;_IMR4F0 zFqeJ)`9p%&*4Ebu=0SOX_xY}*dwWJ$;jRJMa_&cDQA(x;c1}>y!-tRf*#uUR*0zv1 zw2>}kCat)o*SjFc?Kv4-pt>+}+UK()UNX(33ujYZpR%GxF{%bsR*R^Rp&4LZKdaK9 zF|Ia@UCsL05uFCw8PwlS9I`izTvq1LzJ(C2d~|%s00;&Tbr&;=zS}f2ps5?n_WDS6kAEn?$;&jKDpp$I3I(n`f>JV+ZMFLZ2^9pG`^Ts^{y8r3UQxZ0Dub~2hs@aS)FH6>iCrGL@ zXc!JHfFQPl$JYG|Nni-Dq`9ME9rHe?S%sgC>>ISc^Lo!wvBNXLR12yQCyv$`6+lcr zENI3K>0t!@06@~&&SdF+bd5nT1C>Z*HcOvrx#SLH7tCbe^usd_)+BM07qWNaiKuB? z6tzkmpuN$*xTu{=v6iRl>**vM>h)H1ogL~r8s^5AoU1L&D^P7~wL%R5$GU&ApLOIf z(eA(D4&5&#Uyh`a)6KEAwi;@r7a%ItNHxQP-nz0muTk?KsS*CB`t_BqD_bEL%QQ=7 zEDi^Qei|q#)$z;9^0M`*I&%cPAo@jCjz}IrF+|8mM<-+m!|@?G8f)f6(it&IP?Yvy zEYOoR098>sYqGx$FHIFn4KUshWID>|*uXHni0Bbih|JN5;&?bNvTh*CnRSkh{R$hM z-)E+H#h#f1-@t%CO4Ep5a@jvnhy3UvuK}PXoIk1s;EW#)#zbm&iIi{K_zZ9XL(@*j zxgV*KoYUZ9Yiqj8+B|rlBVef)^O!=ey77 z@RpW)M03NzCu2i011yP=CA~FePn^=2bn1Co_9wVL&0MK7FQrS%s_qnnZ2R= zgLq0^8-SbMKwt<9jTy|(j|=WQG1PPtbz$d)=_E`DBBn}O;8IO*{o zQpUPUVc=Q?Hdzst=ytX=JTFaINh~;hVoTES2)s<(8!@)MYRyP?jQ1ca8R+y{0)i&> zcRS5iaIPCl&uvS8J|W{?T=}W);lA3%vEH>yU4xA*%PXd}C%GmZjF2$W_Th&g<}b(B z{v9}U-@Ea~#n1Gfoz(;M4mC3764=~WS2Gp-PNUZN6E(=MYUU94mU?v3y6FNNl{jNi zaO3(7xwd^(v(7m>PApm~V(F1E3(Co?QyY0v2ehwQHBi1MXD37u<1?36*3@}D<8`83%rZV_ z*G(M?P97EyWoKkQX|1Zxy-kvgg@rlI9Ol^fCrJiNj2V0DfrH{e_ylEI9NYShG12MN zXXdqxWI+R&h0db%d+V~(*pvSGfDX;iGFz+Hm|=2fkWhYXku#vDuQ{pKBU6Thx*9}V zke!22WCU`MeYv!mG z1!igxuQ8P>6PpQi{eX`?aHwc7lU-6SH0RnPxkr|>jO`WA{Or0D;5LRaM+9VZ?3wfS z2JOQ&Va_~L;~t~|N4a3+;Vfb`k72c1PBNfx4j~e8OmVpv>~KyWXfx9JYNmUpfgFNd za4jSV==3<$EQgN!*g#+)7lQtLs(Y`c4)2ZE@5=V}HMw)=4g+7`CPA>etbtH})YkwQ zBr?xsfTz3Okx5On|9DT*R$rP6flOK&uvGN;m5hpmX%Xt@>(4Jj864_4?*-DhtVp}D zC~sVUQ@(WjD{^)5il}R`d2|$FzyO##XFN&>76X0&tswx);7oU)J(DL-p78nr@I(NQ zY#0H38rZZ30&uJvqfs7^4C(Crlx&R1(7}R-)&U%}4RD8!oQMmO&k6zDpg&~ble+91 zlM*P2BM8U7!#JtOf%vkv1;EBo=YeyD%dX)((H^QJ2zTN*xK?mQF!+E3u{!kzf-enh z*%BC;#INLro{u756|{3+Q#Mx$`-mJUn6pd7?WaPF}&6gmtCg4u)>h>Vqy zexq*UH0snZE-yNhNpc;dY~*e3sfnrea@I)awl+5!>V&?c8R&nSTUdB!V`F1( zWpy<`X$r;@h-ElC9CPc+6-Mw7J;CM{r)M3wtkT%iK<-ha(?mIGeRG4K3&M&Y{qTqK z>Bm2%(ZlTcty?#lVFQ$NdC}LO2kg_q38HKURVig zJJ_;FG6QGLvVBIBIMu;iH121Xec#rjfRRB%#Ab>maJ_FaG&h0_KLZSOFX%~YdJl#` z@#=XZ%f++pw&(O%4e2zxoJ&88jggB2FS@FcQK5&A`!FEoYRq$9U0c=6ctsX_T{Ywe zssbirVR1=T*0)HXx_j_Q{>OLzTK3L%XmBwCHAaO%ZA-w}_kyystS%G=UTVQP>wUs{ zfxIPV|51JiYS{{vx`wv4WWGB`2guT<{v4GZ1a|lnGtd3OkS~rM!WocRE@Ce=a{TY1 zo7)d&C_D+;gtTSV`tX5UBjPhFr}F3LlB;TS{aqap+6 zWj*JK%iMxeUyaA}Xot&Psk4+{+-ESwy19|-95&wD!=0e6!ey~J zX>LzXK~8hb{X(vV)X>;?ezTdQ&(zU^qb@w!LoU?q`T6sw{^P8HX`*8*s)MJfy zfBMl!T#U%5)iD+*hpn%zMf&&G+wJzB&d)D=O`UmfdwV;=$P_?dh$d}(B-1Roqt1Lq zGm8#4wg(Z-miA{^ld!gX4fEuDQv{Zw;WL7re^x?9K zJJ1d)6E|<(lDG8p*Yy1U`+xs`$wv*euc2}~MmC{)2B1I$888MMxx=+Pa-76v`Cfd& zlS{x!;k?LI4e}G0+1Yt|grcE(hl7#J#xtqAKmo=QpJh_930n&&cP{sqgUOspcqWy3b#T=YGo}nG zYaxOWJ=avT&SYfe@vPwIgT<>mw;-d5shJZEE0@}Idw7ya!%LJ{>n^7fFr==V4CW^?*FK88f6J%S&UO zXBA`kitV}LSt0PVSpfeTIs3cVHy0XwvW*o-EYW991Ks!GQQ2w~Xw_g$E|EEq#Av#P z0GBL_XaRvI0R&BYE&~_vpgL7=wAHyT%3ktRv*gd^nL6~7U{5OTF&#*?<}d@H0o#a& zfRralWd?d}ry8_(tFp0lMV9AQ2#_51C+w&Dkw7?Ea7kcIqts2&m3EU^EB43p=ewGn zKV=|}b4QRH2Gfaw+1VCiNyzwkD$g~mhciaS4eb>=7?S@?$)T)m67qiVK7s0%rD#Ln zpPZZ$u?`M?RBaI4$+H^+WQI}}#RYcIibRFSN4B-AKrbEB6Hf)e1XpWw3goS?|i02{_K7u4zS6DJUb zDg-7qTwogOy_k=);#wGG2T+jJ^Uzc$KGF9AVmZ?5tAcz+_eZYB$c-G!k}H3YUOM#O zz%QS<*x1OV1Zw=?!yo4Fe({T;Zn!(Tq5fcDq4)JGS2nk9-n>!0f(%Ndbqbb1s!@-D z?8$h~>+JDHGb0{T^twkRhbCqK_*+(^j6@7#Hn zBWU}(yR2fczpRF4S%ViC%TGW3gk^OY^S!-&-h(Fk^pOP|3+jLnkfe^<66XNm6XYUs zZK0!(O;a=Y1PST6!jK_T#=XPy!Sx!l*P*L58^(P*K01-z=g$SrW@dmOni=Hm%Ob<- zG@9(w-?(v;?Ey%2UR)%s0HE&=RVouHNobr9q+GjtU6xi?OcPyKe_RjMaL=hTpW`Uu z^V4VY==c*!YeQ*oR3)v{Wpsj3H9fUKZfttF&80W$U1k?RXJgF(?Tr^k@VGnz>zAhb zGkI#p6^+QPnlq3*+e3Y8)oIud2Edfr?2` z*i)N=h&EIE9lrhc+juV7x4-@E{F~qWCIE9UGxXo&Q8X;XrUQ}z0AngfBy+eiH#h%> z>XiN$HLlxNuU@U8hejh?tGZH_aV-;Q7FpQ{j<*_2v&vj#hWFUfK!%RJ4CO7|sGu_a z_MiQQoM`6u{_lKQ^s{Ja4-XD$^so`|SwPet91dBA!ruX;LSG)6AHfA8cy6fB2s%at z9XT-u5m9D@0(KOlefJq;}2&?$kc&I99AVPKUF7+>@gUwiGY zeDcYsY5*U|fjViFB#~h*uPn1_0E$^=I=Yd}keHS_3^^RKFaNy#638xK*jx4L$sIeal2CvhL4SA-)%88y6zK{i>#J#q> zsz%nbl&y^`>bO@JP*oc(SYwH5YUOJp$9?^*<45x0gYU?JI`z1f$<;TOrM*{|z0WS> z=u(Z{#Xy2Y?+>dLZEATVn;A_;>?z}ZOo;4u#54fTxjrQ3oF6@WM2rOjDyYg4@CRcY zd(QNt43@m{CBOgq1=}KcO&mu%`SwGP!PVnS~GJb;<$z^w8;?!+pVY}#i${d zg|6`=l$vIaiwiw<=1bD5YG^b9mwQ5ok1UeTbI|8=!gV63UDkDu^@CQ~fjaU}KK+b9 zKkSXK|L!+rdwbhJsJPbLM&wLY&^Q4q)u^2C7*hY;Bh`NY7=EO zEOdf4lGKP*$n;i}4ixTtcCqAcY^7{emgWA)jJz&vs2_ds!3XmA;R6EOATf%OCG^Nq zT7%IfO`;z6P#q({G;n4cSFTvuu39borQ+tXiF5_Kl@mq@909rShf$L{4$BErY%n-o zluKc7P#%8cjW^`=*I!qovBZoGpdT1(yus_6gJtrX8Whk-K78;w9TJqF3g8CrpA8_UXB?k98Inoe>RW zT%58403c?0AIl>drm{g^Buf>s^RbN3L&v zPVgmi$4W`-3BzyYZ#*mZMhmNEcyu}fBb4Hq^%aInw|f?I{SmLxF-~^$_wfv|ZoETh zD<#RSe&d8cNc@qxF*kj_NuldZom*DPN^+8zCG)BU6RF`ASZ=MvNH- zcQ&RdY)lh@0(!wQxceIoKHtZWpRgJQwly!&dU9^pjY=1s3iierZ62%v@cpBwQqjO7 z9Lr^PDu?4IvVXZN7wMU#@kG~$Is%MT7T%dxG&`?LOaB{d^fbO0NtD-Q{pOaudGBpm zYA;KHSR-|Gs+_quK_vtmXvM(+Vyz>frRWJp&YtdYIspy>I`Y@9-_RhxWo;XdCEC0I zn?Pj0dFU7-Bj*f}06c&8T<+h$&ptZaEP3v1M^b_qv91x6V(;Ly;oNaPSU+$^Xq|9m z61WQ8r(0LHSn+xM_%ZiPlT#l(X6|sHlcQrgPQu8r-mq^{tK`MGQTlqNN8|X9%M$%` zq}MYGMkb~NQ5;>(4p#wmxV~zx-Vvr3;1cY0lCe7h1Jlo!|Y^(8piDNztED%VX zy$XuyYFV#T)oK-pq#xv_8IAt=Km*!I9EX|Sr->#E#ofDi zCweW#OHTKH;|_h+N&KRbHEaT)z|kuP@N9j3t)Y?eZ!h*1|6pZh<=*=GYG-|8jZv@7 zYa2)h*#;J}m8Wutnhsy+Uwd+iLT1PpWGW?jqE7VhzVmnL(EpC5>N|H{Be>18s=**K zlLncKeh&vvtz*p?dI&IF^p5NWB{GU2Bx%{(xB20$1iN@vFQTKxvNYc_gEPmmyK21d zy?#&LeDh6~eQ|$K(nW6{#zGvg`h{-G{Ab3f}M*Kp87_qTEj5>iDv{J8; zGy_!)=uhJX6fLS6*RNlvOePHG5S4cotkEY`rb)Hx+@)NFEnMO$2^4$DCB8T0YZx-4sCoch)U5N zvj2&3`44m*p4Cs~ptVmVIMCA2wFWRR=3Kj*_0EiFhwIB_Rz#9lD-N$P^fqdOAVM#Nn4vqTi1;y ze_R)x%+$Tm|3?q{_N^Pz)65rv@bQHPS?43ECv|4*sGI9k=BQhvqnTM-gXvf^`}9~I zUj9@*J^O(iWzQw4k0fpuY>iA(fZ&XMv_jIPiXd*hI7wxAkV`XOlzXqeBVWAz+cMW& zWKbF92J!;39Rc8lKCk|;PrLvHgmlfIe~$aLySpnNfBX?0653D*MyjO^C~W$`3FLSu ziTjN;hJg8zYpbCO=4ZR7bJ~IRp4F~kWE1-e0R`?Gf;_Y{2)M(DDknm^lxl^8rK~ZO z6)_rHvmmL<@z`^g>itZ+m%%OVB76K&;(Dfxf%!E5aBTtXb@cM<80XYu9UtqO?w{#B zF`*xg>RAcHg20|0=vuGpaZt$sE@A?JWM*^clf+8z#=MhTrBIBS5G8mcFmga*v=1F+ zylaaV4onv$6U^pGSCgadN)Uoos-nSE9t8P?Ue7osf>TC%eG`3_Ax7Dtq5hYD`Iq^> z#E1M-zw_%Jul`k47UF-)&iogB>4t$^UjV0Et;WU4$w>}}3V_t|^78BY`s3x^(w9~i zdvl9(^CTw$z$>zEXKX9@JVKh0Up} z!30q33?pQzIdjvW_Sjon3&_M_>|l&xVE6V9^GHGTqe?`sSctKXy8d4cHCCch@ zsfPII0HaAKqz6TL7>+9DM7lxByeuWTyglO@&KbeZaIAsAnT-_by}}v=5*&#AYO`UE z1WpVb>{(tqa6T8;yY%}2(+-(uj*F*bY=Ikb3*GwkW&G5UisU3p2?)Z%bOD8P9C)k< zZLSz7Z>$6I^&g$c=MO$-`=z(ADBW8(dHyJ`LxpR3b(u20OS-;r9;mF;n)-Zep{|XA z^v{opif`8DGyq%Fz)Bsw23XS4d(@cdGkz)$PCk&`;xm!nNZMU>+^tCRDCf9bF{T%g z48e*9FqisF`%m;-kE=4@T9Y@nz9?6hZ%QlB%zZE+dfwV!4wRXU=s+4R8{29$t!0zD zp8taf57>G_se9|{7T?3?6*%V{TP9nLtHgs0hK4P9^yo2hBOK*(cn|}k8m+1?(VNm+ zlUeBCa=Bjq)}}NMg%wuxWI& zkyld}WJZ2z{oNZkuD_w#`Jb$=tbVPxxVX~kwjyj^M8x1tuTf4kDiyL!*(zYx#L`t1 zmSP;97u#c9ut>e3MM?DGqlfZ0fAcr8`|PI#q_PsaW z;8+^avrvgpUJtc-Xp z0DICPEhStr!#;=zI#{zn%=7T^BbHgINY`r1-r1o%K6)f4qlfaz-gji@{8JfKF4Y={)HfX^eCk%f020k<+|K zi5mtJKs`!f0$-rd>*su_(u&YLyB<6M==XhFK=ZKCF|reYT?x_rYh(4ny*|Z}B+$U;$La zUTZ+NdtPp;qsQ3Z&h9f=U0afcr8yZSfgFQC1z)=v@K{#ku=?llfu32Gts;7R`lwNyTuC2W$o84_`#TpRhx{o7k z`(z|fn#gc$J$tr#s-Qt_a2yRZzgRnm&LJc4fA78bI1vGdmR7574AXD|H2xrEn&j+z zBfxp`18P?%YD4={t+V1Wc8-bDHc48xZpyV+^*!`yfLaC=rM_GMxpYmWh`ou%<6&3t z>Q%K_qY5%}jZF01^FR*_Zg*(4>EACB>+{JszVVF^<7~f-L-#VQzsRBc_TaC}q0dUp z{=0POet{y}8}$SIOG~|L^Yimn zu$iHsis;g(P9E%Lv)f@gf9cWMUW>du7hhrz{Gte1hWgvT{f>O_!T;pH-Mn#~Mgkeo z#kujlll(!?6PpnIGi1K2Ys&;l0cgS*-PB&pw75AF$987origYSCp_g-4hWpV=7XWY z{4?g7(Gy)?zbbEi;cdBj^9IYi28_w4Edpj~2}|=k8iWA7ii?9`0Uz}C_Eoui?;a8F z*yNb)$GHHtk2Zn@PkmlT;fx7{N*=4BL$v{c6Mn||SU=DE3!-5AbDF99(k2keFm8~G zZ9(Zx9m+uOqc>#G(MDexgg>ZqAP6})KA@um7z!oVSRE+Fx4!p-@5!f+Kai|-DD!s< znP1lcp_0l3_Zm!Y8YD$?`uQz2bghgeCPAVGJ)cNC92qjJInpd~Lg5h2d01Lx&zmEC z1xt$=@fYd@B3-LSNNuA^>d?_r01AIapEp_|4?lm*szR)5VqvjIuomt;+C}&iBVQ;} z0?A)iCER@@7&0)tNLbj+xd&)^8d+3x!on&sp`&;8<8L+=7nQwRoI~NtvVIRhF96iN z=#L`+MOKb>(2)jqMmh`!;P%&-)XivteI_FsL zTSL#RQOJdQ=BMKy$-~J{WY9d)fKmh5uI}Z!DaBP1p!U^4CTQ5|GriPvzX(_@=`}ZG zbMXy%bLBl*YOF|DF9t>xECOx!OS}6=_9vhXF$2uya=fBXL<`(T`@r*msuAk4GM6ocjm+> zkdk_p6$9XFP}1kmJ?$_R_0;jjX}PCn$7sDIa}Z1w{QUZ1G89=QGIx@3L1tY1SepQj zl2l8dDMmuk##-(zGw37U2>Jwx=`$2Akd55=m}K(QPO?IUrG$jY1r)YUZ7K-sx1^AD z^ukrHVSstlXgC~o^mngG4K%PpszC>&RUy(6IY<0V|2%`_8XP^!;I@&BkqtmIWOs|b1(I&Cp9cf!6u1f(?ZZN$M_O_#yZL4R<$LAl=a+Qm z9Nz$`N2jIEd{f?h^9{Lq{W^g*WKx@DcnYR%gpmW#!C;u?c(trxT-~}N*RO9Ak$a+! ze?PZ=ALhLoxrb572$kqH;W$uU1AykL8b~-NUo!Nl_M$MhI~dHd8<}|#uw&?NWJ*XfR}@tu54b}Bo{j>5iq(ihUhx~^y81^$KU%u zt)6CLRT)<`u$l~{7^)GBG&59(9<_yf+nGA+w4v*2ctMd5iCR+aRit-)UM77tTw`@^ z7b7c~QcMroaX@eqs8W&H)$1lIgI;vx(7iU1kh9_eMlv{d7&DB9p;QemYphW?N$}xY z4;7e&X4y}-mQPl$1ZI-eN}0iPJPEQd>OjqC#~cx=xh#C*rYGR?A!Vx@#wuQ=x?F|R z7tpBx_@j@>poTTls2czdq&sjv^K*;Ro@*1_2QXX^)HRT6t3y9#yQF_PmR@U79sRmy z=aKXiJ;r=hf~E$!axOcA&*anbkL4iSm9Po$T*O&@aM9E%#Y&ybPeLg{L*gTxXjN_X1!>Tp!l!oZ1D9 zHrDI)7cw^EwJ?DmbLJ+6jC+G;#kp~`CTdld)>E$;o?8G;!kxNF7+2^FQ%AQNlsFv( zRB+}9{_$QoQ|uWy^Cd@r3~-!{wM9nf3jnWEQ;f^eIw^bR-l1C+%#fV8J-n426rbd|K(@Xs@wb z7UW?zz^Ifn?wgX48yK*Ing(-KhU(Z>jgn z=H`_eMpS?>#f!7$0DW-tO|u^F#L2K0dgdf4`@{Z0SWh!DhAB0?fBqMLA^*>R`7dOe z!Wi6ZckarS%`05w0KfS1I7Lh}yFr<+tq$?_?b{?Z!T66+wkD1wAuF9aG@r{UIcHS7 zq7gO}3;;@CC@-4cb4;q*x8Ht8wy$lIp^L&To<7ovF=Q@-Wwg&SS3-geuRI20fgUP? zAgE+Le*8#|PmHHJcEC86A!BDSC?=6o++qU2(1GbSzy8MSC7Y8cfWY4oWEksKWHOLY zy~^_vxMdE{MvVXvS_+np_#`OGM^a8UK+Q}upm{weN|FGo{q&QMQ# zJ3EhM66rk~6tesHLTU>gX{^Q4?KC9nfJ{c8Q9b8;IvL4OAyFq&q(hFN#rpS^_NJ__ zUeSBH$nxjW<3mY?6SYa0yNycpZm!R$QVj^$122Bzgj`@mF@E>((PJvKA=?dHs{xfm zv`m1**w-}@J9P7kW@-TVwc1+*YvK7)h^4S839^BSJ;R7uqyguW%(UQHWeOuVg<&Kk z_>9A&17mIjagS!P=y%S~+bAHUSh1&m^rIiigZmFy6@e4P*p*Rzih;cJe$Ow?OGo!q zqhSn&7w+PvlYmr}FW|cVu54O4{yAq)tAn zW8FFImLr}=b`EnLoX1k>cV)5IkSm>6krp znkGVvt%VxV)<^q?bm%x|fGRy$)CZiits#>*wee7j9RUbQCO=1cigtkGrtmYZoY~gr zkE%t-wVz0e#4Oea<^=-{OrXFn`OgH;16pu!>;Uc2Q9E@+aft|xxMN}TPQ1*}oj6M9 zl>Ne7ogONQfw3~eri3W7i%l;OYcRIG2ipj&4Zg>oL~@k6$)T0i6^@b`uLM3%*FHd< zq@=Euy?V+&XO^Ldfua7v^k>R}j)kY2*5^@9>p5Lxl$E?<7ywx8V}(KK#0%F$x7UpD(9GzSMUVl3Vjq9} ziTt%OB>skgsNy`y5 zvM{+#lR1ZOCBMAvk$F&skY zjpb8)F5fx+4%-D67pLl^)ydA=sMFqO=lXppTdg@g7oe^)mVhS}HBzw!2*^3;EO$Y~Bka47s>5NdJ2;C$CS`kIb^o1<1ChhsQQ~ERfL0B@>HLL}p z$3x(R%=zJi`?B-wDc2;kB@L3$TV7jRVk;pED)Rj4a|UDs4W_0X5N#oY)CiLph~}Q1RAV{6-OUz{QaaPrux_= zu_y#?VZEUR)G#5L%rUfK4Z|h?Fp2=Pq(gQ0)(4jifJs|xQy>Venr)Lw29^T%$766v zx#Pyva7;|Dkct>pk-@OkNyp;Ax!}A2G{xuO-|(Jw&4#g0(9S}sz3wEEP5w7yJ4xIW zLtKs^#0PJ|7)5(&!^Ow8yjn3tzNsUPWw+a>ix#X z=Ejwcjr9r?)Rq=|M0m4bjw>6>&8Ili!7LP+|JnsZq6NsW9Ug5)S;8l zIZBOD%~cb8-#=s7-2_;m`gQBpZT8k^_o^vqNzb%!qy*_g_!t83YkvmJT-I5iRStoN71qRmNQwq zvM%{oZ%I_s-~KywW{)N^>4P}jIKZpb2EmJ7`3?phN@6!}-z4h);OLl0VOTCW+-j|1 zizgJ+260-+eH-0HbwW*eC{vPVPP7bSqijCjaiJ%X`a4FbSeRhg?@k#2ECTG@g`LyQw5KQl%=qix8kqK4KG_~#*0i*mx?=PU2anmSV|SUD$)O*R+}xh@UC$YA0p|rhZ2UQNl%lAvzz87g$qUnaPMPhR&_nJr zOE_nc$UyrYq$MzLXq!+KEgd>msz9B3hiG@8uF)RwBs}Pg2a!XEYlaWm&EuyN30oDZ zRrEL1n?O-ZG*iS(HwoX6&+y;SS5IX)IhDiwzNRpmHLp}<;iekp{e}#arX=T83DuBk z?j~U#%Xna_b&y+)pmL?peO}KW!3Uu5xTnM)IHYq_2?^$6AF|XwFGvduM}S#*EKOiE zpzek1HYBcNLBv>-(|?D9Kn2KzKs1ZgZ1v+$J~1HI!M+?G9#Mb@&mQl^dNWGnoQ?+^WRk*xs)PXPGDJ?<@P#$MCwY|8Dsw>1NQD#Q3l zesc78a#&xGN$o-&oc~asXlCA5XI^y15_NJ(D!EKTeV&+q&vmb%(lL(ZazB-e`x=a$ zWg4*5Wn*<)wmWyE9nDKOYHQXWvHuH)fwoVc+f)S{?IfKL*l8?~bygrqr>binWo&To zL&g{~w+OI924IQxxEbf0(+@^Qc{_0|dMr1CO%K(S!6kVQ#@uJ2A;I+?!5%DVkP8+% z;1#e}2VgoJn}7?x5NLpT5djlvR3|B)8+hb#pTW9#|NaBcw*ycKj0jQWobDJ&k`*Q2 zKSDsyEl_g1=hLd3^~(b?$D#fe1(6$DwGmOTQIUnlBxn2pKxRYji3jf2T=~$Xk$RNI=H1+Q|9Q zD7>j_cBD2V#az1D;soYK&l%<_0=J-^Lm&3#-o1ON2C6*hZ@P2;M;*EchWu;#T3%iX z)zJh-z!B<0HV$!=72!~}uU_eD#`b=r-uQhr=&$KUY0OdWscW=}k%2j;E%Cqv1RT4U zDX3x8#EhainL^%=nGpv9S2X$up~R0q{E(ab-ralh)vvzK$QqdzB6-ewtARm=g-yAu zSv<1J)%8``+)}5uv}pZI&_=3Zm{8HFaHYGv1idiAW{?rOO=w07L@z*>qo)p)I8ass zj7JUbdZVO*G!hysiP6aqhYUu*kOk5f7(%!%h*WHCZ1QJ7Hp4(68izvx2@QiUYI z?$eY&z`flG%dQwvI|UFeJTpFgp5H0woza`cy+yWyEReId`X|Xb^jv`81@oIPQ3I$2 zpyMPNI~2e1z9Z{;{OB<=xE6?QdUYBmeAdL>N9N`Eu`}kN@l}BsB@_WEW1bQWkdA->Y%Xe%f)C%@A;WtmpZqO zI*l!nC231>sm^@dkX-*fKOD+vVAQ_#W>q@#9Wrh~9uv%fkZCOnQ=&p<6<0>o0BChv zrW>7EnX)L1pawvwBpWl^86^W5j{7vC2*hB-N0XtXXO5{)jV7KOC{`ho^7QdTPFYYv zPo3C+oC8VO=fzq>a3|CWAInl=beuSLMgLsC($T$jl^pt{`$Y*}pUutd4 z^|j6*s@c(iM(=ZXyDN*6rhIhr9r^yw_odLxxw25mC{kxz?@Q50I8Bh%)hWcLhK6an z8nW$Fv*=+YgJ%;t`%xzKOFh?DyK?=NJ92O9o;1Q1$H&NECr(_ZuwXdV`vd}+PPNT8 z1z7g5_G@ms1iIzl{qA@FfA-$9Ns{ck61*-#tJFHPv}i4Wh9uA+xg^bo7}9KLwzIZ2 z|BfF?+xfx|94^Tr6rl#PyV2FEbX97d8Oqh%bMAYdQH>@rB*9$}m}*O_>deRp_vi0j zdG0yf|4Yj&%t8^pq5qDvk8*k7bm*}^vDc}R#~wKJ;15`l+kX0#DDd1<7XzWKYu0Hs zSrtK>3J+`mQXBn3aF@I68rtNjcwv6O(`^|zP6Ml@l@&U8IM4&MM}Uuk%qvG@;q0gF zoE%wuD@}~}CUbPZ0Py9Gd!3HfDeJMl7}#f5A_M+LLE-k=q)>}Fc20bRW*b{<3A7o! z;7kLITCK)1H#_g}OgS+DiNkXQ1QOaBj+2axj9G5D0W$3IeS>mZh(Up&n5^{fIb&&e z1JX2;aV`VCA*~IEqXo5z`jBOypOt9zTrG0!xco%7PQ@klDgJc3-B6!l?&j2gdoy(O zyMEpNAj>xXa|uTj1Aj%c@+O=H=t`T7mSyG+>{9la zLZ9_U6M(qTA<3nT7)gXMF;a!n`3E0z2h-c&;~!@1AI^~zDk_A;*&)Bt^BWHX;Y>f$|c7*HOCqXrWCK#ePiV_;Bk z-n^yntIk{AYdsP2J3b8D!66 zM?H%^8YnE0DdK%Pt*-RuJDf`gpL%g#lx%S)`Kg2s)MF*{4QAu@dc7RYxpL()$Kg1q zTv$~iMs*`F1guwmLeG-`AwBRL8<$87#JOrrJU|{4Z3^;9aYk$#7c@=b8Rav!WSi%u+je!|Sc8Z0~K$&ejgs7A=4P&zqtnnjw$% zld`BJ%t6ME-Z<0BBI)L$5M@cPxkMR4D%%I9+#CT{Oc(u!E`vvPkH2qZG`(JGj~V z16EMj27)*Y$kSO#F{UvDO^u{U{`;C{gy_>ApB{4@?dJ6xY!!U}yWf>3n~y23QLR-- zBs0A*D_3q@k>%B8UB9}FMYGpT9br|SYjmdjZAbQok14oP)xfCM3|L|h8hW;>aOOf_ z9s<`2f~T?G_ecZT(@?TqeO|{6nd@DWS1*4?ZY*3UYChJi4FE@noMYySeLK`Z5M)1a z80j8WKDq^XlF&&{2f>N>@>jSyYhkE`o zgN}1;gf2E}WgPD@TP(ys=yRsLtp-4;Qz8V`0~M;pr3JQ+n9-^;UtC%um=^6T06`H{ zlWRXP5FFU%YE`S2z%C$gHhy)>#3i&=Ae>{7APZ0Jo?MWO>IEy4XlEGFFd91!80^N! z^0@4KvvTBm^jM?XNrROStRZY1k_gx(wqpKsi{DbGLm zJWJUir=T;R&`1s)au*|DF!1Qz!retc2c%gAGU;Oth8{h6Ec-_XR5j~# zTFjW)E7a>kHVITS?k&;p;~r2BpPim!iG0AhZDFQxM0!+H48wZ^vF$;9SicnwLSW!P zvIB)In~xUkD2k|Hc8?MwBuTN~ia6t5s=KkKdLxp- zwthZdr%t(}8Dyi^ps}0NtaWK=o@Gb$u=frQXsA(1z}!Fjk>HqPy9Fd6g|WEVSYOQq zJLYEOwKra8rRnHsU+zD+R|1XTNRZ_qa3K<1?>W(P0)ZQ3n7)J=PJlY=Ky|w;0#2b|0E?OP09kp0%v^)VGhO_n znzX}?EL~rgFW&wmdGn<&$zn%?W@M#4D-JCXAbT4ERn58qEQ~l(8kd1MISn*Re){Ao zgK#?4`8nP%S`Mjeb>W$i)>xk@&dbo#G^1Tr1WYKvM2Immf?H2d45#817+sm0v)C?M zm2xV_s%2=60Mi2k8%}@df2eXjr%3_MFiP~O=z*m%<`5 zMCESs9@n6UC)U6w3=Bw^geI#xITP=|7|(pi|6lpHAIsg!XO?5 zL3A9%`T;091jP}yIOfvvCwKFF8r+4y>FD=g=+Kk&*Ds*STwf98C`7O*T_QujbZPx| zz25lGGjnslx4OEzu(G-uL39LYZ?7qApbN`3JsqYO5D6y!dv<$WfZ$+U;d}vV``f?$ zTlwZUzsaci)mLAodKnPnoP`G~m>L6=nc;j;nnS4**RZj%Dtc`!UyV4+Y5*BHRH`01 z01L{;$k;iWHZ~O_l->N{%d>=mO~sYyZfSN7x=Mi8yt0`mcR=imebbZFs-^keS zU~ICW%rF?da1OOjU=9Q;U|8_;scFq*n#lb3O!;dxw!XK1jYp<44Zsol@Ia;G`kY>3 zIbMe~fFZ;>`Z;ra51AClcJz0%0}}=zlO5)lC}tA644~jz9Ur3y{emEoTJW(m+q?NJl(5z#w7?}rzL`E!C zCSgXSnMX!k2?ta(QZ#eFEI|K-Dpd@212CjMNsPKdy%Pw+BSCMfiU7& zb37|79^M-PPBbyXh7vADrO3IiK_hSr=s8c#%#yGPa<~-U(B})LJM0OJWMVuIbh^{? zxh$+L$=u4EL`@BLiyhfI-;@XYcjdvsJ=r~fD&xk9RM!$|&Z)KSY2a1Wb&L&kNWKxL z#|=S|Vx$?Ju3K=bf!3}*gQJdIoxdWlKL0!N`r2n?WqOI@X}%0@(ZCj4SX?Hipte0##}XUz?8`*#&BKsUvaF6 zR6KJIjy&}M=D9DF-EB^+C_%GExRo0?x3F3BRK(dodnwrk#XIq!9C`E9z=ca9z%hVX z{gLiVv~0#s<*eaU_~0)J$=zIg=tzu=h^Lb19v??+0R(PrPTZ6d|D9VqQHqOxe<2rR zeO@}6dIp|1V>pb|PINRNU8z*#oji;BK@=gcXlM}7&_~j8fz7$@fkM|3`su+xmrd?B z#-RhXT6m4n;A4T+WHjf?E&m@#*8x<4!*X_ZmcRf0hZ&st($a$ZpT>Xe_PT$(wz|5p zw!U6L=^N1`4z-`V=JsKaJaXe`25jR-lAs(j|2T8cB!4>`>zzAy^{m^lh!{EdYc|UaHHi*(WpIMl0F^vVe z!EIOSbP^B%o5RLHn?f&EZw0b&Z#sCQ+14rNQ z{M7n?APhkn8<`94367J@R%+;g^o5o>*swg8b?(S|{5TE_6iVi2j_J(<=iu;d-g=&e zz@vkGGb&ZnjF01ZOtH~(6vyId81UW4lc(awq9dbf4;tUsU&0B zKR%Q(m|{j&b`0~X$Zk%jepEq5q**TJd$86GH9`m^0Pu8T|BTmu7j{7Ka2D$Bk`SR_MyR83Br^tMsrJ33_BQ9-4frk(&rh&QKLYAaIEO zs90GVRIZq=APEgXlH;Mi$BZnkugdcJnj8<**;E2K93RT=a7%-tBiSE4l)L*M%ELWW zcJ^fu>icx{Gn%>|^ed?8wMLfyg-*9U0!RwIj8u*PnL6_mebH`R1`k51jXHAU_ABza z8=sej)}jQXz$PoQ3#~(r=xNYPV5zGL!O66mMzag&h5fd<`BdJ$^FD)X{2ZAuvSKe% zl)8~hE6wL6*o+ypUN83ere@4fG{XlTfu-)m_HH;K-h}MjpJ5`tb&qCQQ4+7<3juu? zRG3{S8i+JCNLpTAA?^XKr}y7~pJXm+nwBbQ6E|$tt<3oMISz`-R07c^>tz=cPTk0( z@V(SrqeH&4THq2LU!Any8O)wmSkS9xLxn{6kSaWbJM4f0N=f2=6&sZ|B z^1CPC687{12Y0s;JCYw@MT)>HSzd@=6%*sazET=Ekte-pIQ8kc5?#{|fUGJYc1Hnv z>w43=P8Ge@d^}DD$k6dtJ3Bl7A|aQ5_YNK998Tkw+E(1q57#a~o=z8cu zDQ5XgNNj-ER)+-jG5n4G{O3Rad6wJpS>#i8rRy=JKabd}+uz&c2n$N`$Z&{i&TOnJ zcgB+ANxI>w$i)l}RFxxlpv0j@jSvLUHb8*O%ZqaJ)@@R{qKA%q^K;z(x=BKV_k<`6 zNK8>cd0Ni&mjr^SQk~7m*J%|w?xo40V-!c1>wF>VEh7i)0 zn_HViyd!{P6-5mj`iJO!GkfJWQfFCf$?DQ71En){PN(~7l+}2}>PSd0s$O}xoy&f% z>wj`8jmsjP%bF3)i&Ur7h}5m*pSh7OCKWM^;n+CrJ0aEFTJ>CJ!R9t@NT3=2AU~J$ zCns`zb|^>5nSL*q)?$;ra;(!puZ3v%e5_7?=qfB@(~?ed4IaiEn`60NGt9y1fMaWc z%e4G4VHKk=;1Sw8S!T%ovhq?2ViazaDR(W8s!Yw!ND^eaE@!fLxFhGIGg&yEXN3d+ zNT8cHcQ>UsJ0;6&3-acF_+6>Z*JbZ`SKhk&BY9lBBb7zX*y2OkKi`wX zqOR^?faDr@rUZ}Mp4I>;;A}YnhcyXD70FL@Uv2Bx!&pw=P1#DQU+GD&){{omkbW}M z=bkuVSIi0v5#%h54{biYYMki}YKPZIgZ$om?~#%jK_`OmrKLrlnb;GmxK>%s38+*# z`e%3*eY7&{4`p8iNQ_s0=wwn)j?cKpVM#VM!7S;3t*9D!u5ynd!6+fBSYX0~-9&{6 z&U{7#Q(zYE-oGy&eDom$IP{<~rfR{gqj~mo-5{hv<)CF%#(uxxv%=oVT)WMJKD8YL z8%Bm9nxGx^L{~=87L;JV|GIefDCeZ;mB{u!Ar~s zf*RaA_8o+F(7u`kUH`A-g1*Yiz%;Z#OOuR16O_ha5Ueq3s@5RbavW;jr-1=v10u8i z0jOd7A$slqOaYhQ7>B;MxARMRW+&N{eAf4gsrwP1YAD~e=vUubS!$H zC{sdL96}EGH?m&?>scm`*W%!BZ*CDVckS8@mfA7?!_vQ(GW1z0QR4<8L+=^oL6WdU z1uIe%(@0F10Y(QSBR6i|l$&6g!2)-C` zqd$lML9e&d?l?NxfMvhjWfDlXd5|HPlE;EvEKvivx3^7j)^e~$;227g7@vXeIo4zB zl%sHCo!*qJu3eTRjTAtPGaQ5cts)^PMn}2`=b4U5YllVz4(?@lgxz&{RSoe%( zA%Qw5si+aJgf@Z$HaT^K8A|SOP!%chtExkL399Oh%f`*H$$k zn{S|jEW@Lb9PgZSetj?oa=lMvbgkNucDF@m4Ti7j-kfw=Q*wSf_2K5-!GqNaMlLt|H20YQ7@}=S|r^QHOqbDse56h1q%1=whDy z@$Lhe-PJhu5)L(3?x)0hWF@_+@j_s4 z9-khO@)&!8RLoR}tGT{-B2V=Ue&@U2lOO)@hpb|~{`%|OcjBf!LI#|sWQVLCL91ah zGJ@EUX+y){ft~@B>mNLP$o+eWDiX+hqOhD*j~r_ooL6mvLN;`I4>hNC4x8aw7}b8s zmCKhoQGf}AhiYShIce04H{IJ=65K?7mOL?>4(=C0M`(_BNc!thi7)Ux?l$@wmSuJS zo<(3|nXE?S*21|ENph`M$2bT31Ym5&*pRrg(?l?SgBRZ zz&+25h^8p7@0a_5Qmz`mQ|eHJE|E&&VSmsm@@!RqI#e40iPdw&BKq$ta0CI_YiNu5 z`fTt9*_XfkWg>pAD@FO4XfV%x4)VarES1|#WkX&rzd7}|W`|9;E+4x#gs+^qwDjPp|&51>$ZNtTv3IRBpJ8W2|dvOnHZ1FeR=rA}*kAg!xosi;%T8w07WTQ+RgvlSjkvY|w1tVDYd|c{bbs&Z{(GX?^>(TbydhUs*5&yduWM%B zmS7OdrTKNq^m&{G13Cl*Aes^&QTm0KY=BO()fK;v?8!gJDXH&bxQslegabDMwV%*FHQt=Ex_`mX|AKM((m& zR+;o{;QdN5sWf$pYgGot$jb42pagj9)-6^Ha2`PTL)`*LyNrAF1!#&-;s3*ey!OVe zAVkOG%z(XZNKJ$>_i^S3r+gLFs@#DK+*4C-1fBw*!6+c6&d;KI0I zoKa^1?Xv^n+6U2;3)l>Zm+F4hI8W_XTi2y7kgh2(jp2l8Cds@kp!fwsDK3-G3WthE zl?K;I{f<1;WT>q#xU4Tb)4=D1iVC@g^>F}D1=QK}IEIDZYx1?PeGQ~Dp(YiCiq-{?BZgC6_*(8hR^Gxk8x~8~tBgX7{s)h;(tVD)B^b zryL-|DALPmlK!9Sz(3dNb$g9wGi%2k}dc**J!Qf!l{JGoDsbO3)$8&H%z!>|lh2vu` zg0kF&GB!4QL5FH3@iRAKhKkZ$x5wb%hB|ZfbgIx<*b5sQwNi&x70l{y`a?YKuvybG*E}BOc zLi_>+NXDifmtByhcnxP0zObmjQmHyaV#74;W}Cd?0EdygK2Q0aXr$tRJ!cpqd7ALJH5wNyURcc_=YR$&}Y@?ZtrceXL)o4C#=sUjfie;#4V%m zJk<5Lr&+r?-Q+Zr#t8Yau6131R@M6r6B`FY90+7QRP~ZmIZn-w+C_VJGFoj%bU7|K@mp*pk=b<>UHFyE1UVNVuYdXJr^wC8pI zHFTZC$Vt!^AFJz4kXr|!w9Tv?kc4#9abMTvq$-2EdJXTWaX*S>er-`+c<~MS{EaWj zbYn`=zTRtU*Z?>yGKS%tfN4*&*{!Xo`izgI(Q42RLA=IV78&*1-@WrLgK+FQU|pao zfReYkKr(=>*Y{?rz0u&_C|qy`6!%j-%Wu8)mVUiWFf7jR2$H3lo6(-g9zC#>%4wQ` z1LMNI=X&!9TJb$dw#J-psA{0LOxu8D0N`2J4ZIntfQ?d(&naZ--AGpQJe}xM+qfB= zKS;G&Y1{Fu7sNau^Cmf!T!8X&IzR)wVGRld(_Ses2!GBV^EHK(9PwVZ+B|MW`KuHlR~InB{b^)LWbn~X0iyl5Q-`Lnip((ZdXU;Gym5feCg^DA#A{(X0McY`l{;S1q6zxmC4 zGLid@bLdpl$;Xz234Oq2K9t zx}VpqcVS^}E(RkO09h?^gFAr)M^oV6FPvn7`=pPSqWpY3SR8V^7JFY|r6>aq$D`7rF+$BQXd8`NT1qh% zFJy9lc0#^yl)Jzvh0g^W-Sq5?W3?K&^{p@nx2(~g)=pr`&<_yjrDh`bwg4E zagRoG&T+Z(QcMEX1Y8F*cc%l5xnERQVkaDeN&|Z7m8zSu250n%3j~UZed2@5WXOK| z;qjr&4dyf(=otA%VWb-zC4!MdW-Bof#t_UfaFPkC$gxpd$~ZQ`iX1)vkt;c>ktEBl zW}y{zmJOjGO#~%8H`%2QE;M<#SDXI6CG>pI^RU(3(`tZI$RwH8@6{c7>)b$wDr8a6y z?Ytv{5QLRhQw9aToEZc&2=43dHGz8#g2!%Y@ANUBdBsMvDU%#*yhaB$vref~T+40r zk<~IsU}aRyIjcZE2=}c>*xMGe^pg{(h!`_4$2}5Um*%eDJ|r!#2WFylpLtqZw|3># z{hWRFZ3C~PZb7Q&5eZOj6svX)lO)!pXfBRN*CUkP!|*%|^I=hFxDDFBq5u(1ZO|Vi z`V5k}xw(QI4P&d0mX48C!}#BwV~>AX+1rE20>>9Ux!{Hr4@)Z5%%Ns~C6uuf@_(5_ zWZG4|7xSz`n^uKy}Y=zRE4<70>~|{bMRH zsn68MMl=}AG&Gt9sBmU(POe|SMzlOsqp;Rw-U=)16I13>v(CCY+~uVe_Gk|d_SHRw z3|Ll{R~T^M{m9GCOgxvqX2;-J0T29e*fnsF7y=o{U}QSD4vgvm#DulTJ(-1j*63$q z_T3YL;P7Kq(U%Lo@*<=5!ZFhw9a7sGieppVY4-YYJuskBn3Seet<;F`0pJ6pO&}2v z%j1-2{xo%TuSsmZKm-SBL`Uk_PpNq>Qk&Oj*{x7JJ*)z(ld_i%9vJ>^${7QK&G3w* zj`1`#g3Xv5TzXx;^zs*Ed1?u5U^yO~8s@`E zx}y37dgSfh9nEB)=>F}~iQ#-<96%PQ!3?&9@Q94D3K@j7%26CR$JIi`OvYeo@u4^Bb~y6`_aE@^`gt7b1`^2t2IQ znZv0gU_dZ{-~w0}kR?HD9+f>#5`^frM^wr4z2-D^qq=Gj;5;enf)clLg5;2>SU`-D zf08DpIvNS02pBBr=*vkSmvN&tX(A~XV{15X#?o52(zxfJ3d@8C-zUW_Moo1Of!Y>? zRqa9Bk|DGRsuc!vIREIK*QgX|tpxlVYwc-{OR)7sk6$iU+We7RfU~V^AQ$6o7*Di> zsHV?%S@#Ci*8r={^%NiFK`v`~fmB1%ezhMsj7v0daKldaA zzpDO&f3K7%)D%70S$$A{*lhOx@80y(EAxws4V0@uZZS1ARp9WzuoL9r7@Nu-jW|y3 zU-E$byg5D>eQRXqfBxrx&M^`kz(4qdKOh(m8`kT0;}9Wwhl4^{9vcCDv6o-5vOEqp z96UJ7Mf^?mHq5%e_@ZF8K63Nwz6^!(GiPzt*^HP) zpahoK*q0w|662jnU1UDiHN`wFgfqZ;1pp6x4*0v*R@VvCL4Tely+J|o3pgb>^JHsm z{O}qXgC%TD-v_hmn7Pk#E33lEV}CUDeG!@$4rvXGf@%W-73ig-%7M9O;59&r>*YmZ zAfVCRh)q_~2MQR2IXylz&3HE}Y|3#~l`)R=#{`V^x>K^aIBQzWOs0a8@B@JfC}R;c zKrN0`ssIj-K{z$!^I$d!V^>5h*@KfbRbzgBJdoqfL|Pk>bT=x}TGC_GODX$E;FsqV zk8PZcl%#UOx`kSJp-wOygZ?v=wr02COhuA&7|CPV4BpeAp(FK%W^>W3)M7Q}u^P*f zu6^rJirzq?O2YA<p% z(tC1*X%uM?nCQKYBy4Da0wa66C41Quy_O>x*G?pw(g3n`ra{I)@``#~#7MP(;x&jA zVEjS$!*OC%DT=JbilF@vooj${UYBaWBenjlL}yb{8P3RhZ&jYV^^)9Py&(&|1-3N$ zcoswBDnMx(XAI@*{ewgH%+Cj>hTx~;G_YBPs&om#yg$`*ixM^}U(Y@Nf;|7+a~#9u zJv#+MpUGk$BiKQpIiw!_84>IVQjs|$^UO1w`^H&v7*dzG6jEz6$wnE3#*GeOE|~S; za1Dr>5{Cp5AB>@*L=8>?a3`SBwWC2c+6M#27l6G(5g|;4BsQUfGmU_G9~$#&m+;Jt zY{u!eYY>5R#EMgBm=v_i3`A#vEP%u)trva<98NTM>T01?c&KsUDhr+W;WRRoJF;@D0w`h6;MBkV^{?mu-uvgj z)S>_X{pX?*5TZO9s>6Fjo$a5_&dq*mePg4upxGrzF7#j&ILye*Ig;fVv4Wrbl3$pu zPxj5RIl%_^7k}{=^3FT&(8&YQ{@QD=@gSOJ^*LXU*8-i2Qak=e_Wq(eUjzUg;mTZ; zjWV{YI{5OZ?@0~Vhcb{2=vc{@4dp8R{Yx8{<@$}AGB>wiWj92Ut_9&sX6S`xUWYid zULJ7|ZXI)EiMmEa-d3ySxD#gJ!OjMQfj>~By1)29Zm9u;5$tJ}iwwG62a!X}zBV!z z7;iXrfN_xJE^A5@*=078Lm7EkH86F0)g{v=rA(5=(8IXpO0L%t;ox?Za*nyt<+ab1qpNJDOw zG@)6-UL>*w0HUUQGo0Oq131_}l-=!JQivi=si@(>$e4_cTYR{!0a$e;tu0-{0p{MT z(h4d@Hys#Xc0o2SCkIKulyOgv5mjMwL0^+bW6kD44;x5Zv;ATa$l39!I;>+klcr2p zHINCtv@ucj@v+|XVNR{^3Myt@eVHYs7a z4Y}xtW|=GLqP^9SR((o3tyu|M8c^yLoSYxX(aD~iCkcB&{CjNbJzg(zV)6ESpMk8KbAZ1y~{Iu?aCGT^rt^X zFr3Noo?C!JVW%2PzbFCw;Gco?;So#u&`1CX4#DQ>*@-ba=2_`Ts6Vg!1&o?#M}>i< zxfqMPdhHt7+&nvBSq)Lg3Q{2KH#lEThUjY!shpQ{ycNBC&d#5o>i3Ts9G_C9?Sw5a z*d4#`iHZmf1JFJ@Wt$7v#AJwqYLTl-q^yr2xX4Qi){9JA9Qr*BE}SRrh{H3L^5t;K zfs=?O{zccY8nP0G^)b76W}|W_zqcz+j3q3`Cw*Y+u^wfW%{gihzI)bKUtksfsWz>F zp4H~XB*uyLdZzUquj1J08VvJ1H~}!O$g;8CbE@|>)~^K5{Q2jfr+^D))BnBp&wuS5 z`o*JUhPhU+*T357PQ9_bvf73uuMGigiz_hXK z@9oQXzx!Qz`|Wr5yBKx(!WX_k+D&W#96&1g%Sy*&y~B(#L`d*wdU=I%p*`|FTM3*T&R#MmupV{ddbXh}B_kU4eLR#P zIbKsSj&L|$+#gZq1es;7q+KwOc=B|U6$xmGf8lq&C^v6j=Zq;{3~lx0#U)B9LhXxG znR*Ry>frw0)!zpYEny~P<0tbIz5e)Cv`H}+lujuJ>1TDxke2EC9m>6XcZp~Qw><(CP|6OSLpPew)G|N~Hl{jL zELET2%;3J3E2=hSFn!=krnG-vi_~VtA2I+1JfWDaBmgO90& zm6gkK*VBy*+^3EX%!Y6M^eqMj8*6Lw%B!zf_ACY-GYp1N6a%;k+T9R? zf3ZH_6yu{~?rX{i@9xOf)~0N2Z?j(yM@3>MN1lS<7;UH7nR)iJDWDPtbZ(a}UzV{3 z=;t7fDvT!|b^{qJXpdif@dchKRH`05dcyq*cLkgb0#Vo(vun?EQJHj38 zo1r1+QGu{>e8@^ykcM69N^B%>~8KqZ?VxR$4qCX4O#*CbJ zOOA0iwf*^TtwS&6@(5!4)kZhic#URlRiD+LOiy*bw7#}Bzqqs%Kv@kyG?bc(Ql0D* z02O{m1ck^iA&&{&%qX1I&wlnZX51)Uz4X${@~40Dr?R1rnzWo}Hj0JM#KFVsFrVr< z-7$7V_9iEGL8NzLJuM==3vp~s#l?(e;d!+`#_jkGLX5Z7e+#Vl?VIO$Ez z_J9C(Ju7_WjwA*KFy(04!20QMEg1kH0~>w9I9a2v#;HOBzrR1!``;&e7={gX`nG1r z5JFL#M<5x-;ZUB21ZSpB65zEN3Qa7@=JpP==gi5|j)sPapVfQ8T057^Hv0KxGa9$?+So@D&EU+uGTZJ9pkC z;Aw4bgHEX3X*rS(Vek}3K+{q-?Yte*OBFzcvQ)ZEI6mm3?1N3(JA!p8+mg9U(Nv|E`?7T_6@Ut7Zk z&=mABQ+$R&X?;#cjamz1X?N?oj{3ZC=Ab+^2qhT>q?kS19mw&M6WKoA<6QUox$eEH zUTH(mWfEPq$bt)=Y|{KTnzFR8B+tL_G9695SCP(kQ=XpRl@Q}d^-$`q$glyJyVvW) zy|7w};7kLJe2hv}$QA`N{#wj7!{8X#l@lM(O?xsEFH5hxDz)mg3=#keA&pg$;ps^F z%|6$G8DSLI9!?BU2`52OAYZ8=A=8NMxWI`UZEfwylShw;$H19+{ZpS($9joX1ni%j zm6DYGa+Ha&ugL1w*UwEfi_H_ZtngYYBWiXIrbm?CpLkVbsrBn4giCUVcd~>viFr+`oTMKj#Ur852b)%Oe0riw?|o zn@^wctW0uz;LMjZKhE1>e-bc9kSt>?_Tn*VGd*px#pqd&#)jvaR9CxDOT#Cm&QrQi z0Gnp$@kJFUwVLrc#~QGXgE6ZBoZ;7NXW)?-5e-@wBy`g6*W#)}sGABLkm(Wd2BhW9 z%Ly1GOY-DL7mj>VxTOdjfUdYe?fV&ZJEoZU0Uja=HE^$M0JB(2Q_QEIYp^gd=lLj`;dFzQKd|(km~? zn_vElT!9Q{)dU<+-bbbmhB7#EWV1NzaOOb31Hk5KVsS9xcu+=%;V^KY<5q{B^1yoD z82_UBS^u16;DzO78rbXCud@^UNPMmC;O7PKbwbMw@Guc%Ys=BUvbGjwv^hc-_NHZBAwSihyk zWoFjE41i<>hT#CEbp3tkSI=s81>=hY-XEMhl`Jr`I@-?6RO;?Oc);gy?aC&FaX<-- zEQxyAKrriTki9P~ERsT&%wSm{ufF)Qbm~otlMEaS9rIK(xsx`wsSXuDyjsdJGJp?JEkS@0INGYfRfyuI8bH0*M1z51 zsD=vEv_n(|a)8BUR2gc3Q3HFt#97R~ZBUC?_H01`E;yH=66%AeD4a4gN5e`NcW8ar0AhWA=HeCJi~C*I-5Ot*d(q)N6Jl8L6u>243+zu#S-+PY%Je|4TU!w2zShMnbcR!N7 zon6;gpQt)I?sJno_2Mr9r!R`a14OObHp)jPR?|OqbMZ|o>;ctJEdw`B=f5yEmeWy( zWKE=_1;`Vp;KX#QW2AQ3P(01g;f(sHLHe0gZo~8INWGy(ys5Fxi&*X z*A%p{b#CjTNc4M&+ODY6>CmZv@rz#!y{ON3zVn^@H{PN9jll7kqeG4Yb$i{C-N?)K zP5RME;M`={Xfhhw-#ef{PP^S|sMC8xGvBYy&o8`m_4?J;vO4n~C>x>AjXs+jVfwi~ z`Nw9>i)V^B&)x%#1bWl@ekcKd{TpAGAN}};1fzZBE59o*YebFm7-y{W+)(S$h^2Ob z;NY}@w8uypbjb03=hU0FEPmuhB2rJL;E5zv9{L&|Vc`cbXz+}yM}sv~Bohy7DV z?8ur^H=@|-w)OCtu{_w@k+**GW2u9G8VqKOK=H8UNexlD8J3j&dI7eeUvIs z`x=}aslx{$~ale`h52$*ngnrbY$@xJVtev-v1B=H%Ap z=VbHb1Nq>w27YH68E8-dx>_*LdGKkVK?SM=sb=E+Eqy*HYH~bH*8uXTgR0cBmP|L6 zWUcd@+?ak*F3(<)N?MVAy|2N5a}ww(U`#kRP@M&s2{Ugvn4a!QI<`0}$IEaQLHUYy z%>Mqa?C%;87A8^FHa0kyjer?Wk)x2918+GdILOO_#A(oHB?@~9l)n4A-?uk6N%8vR z$z!!^2O4M$$|?{G)w;L9a}Ot->F)t`jy(h<{iok}gVi7err7gn1yDO7wDYmJw8(Re ztRHN1I2$wciAaaZnF0BnENjM+Kuo(-%W7=NA;3m}kUNL{jQ@~H98~ZOTFxW)t|h@N{?@kq!`HqhU;FR> zoqf9-w{OeFrOU?Jg;KX;h61n#hwkmS-{$xg2v$D(+0U|f?q@}jvHNj|vUm|lIRaRO zrvD3Pj}jlEbQBqvH8X`XzjpJ6%&0R*pPePD)JSpymz9SukOCSgXAP>!`!SafNH}5dy2a- zs@vPVuWomm{Wp)6hVej#1;jD}q9ipi9RP$}^E@kof_|I@j$v1?$Fv3tdFAC-G`N^| z(xk>L#%$B=%Q!T)IeZ2tD5f<4!d`#+bdv-&q*eu!3>oFX1lyKo9!o9gsx8u>Z(pAa zc+_{)xz6R%SP^M1#ZsNt&l#yxAM0n;0`kB|ab`}O)UhVJiOdHgFiq%M>(68C72WbR z^dcRrpr|7pM;QT15P{1h6LbMWnKR%xpT`ju(27dn+65-3=`%U;M!UEW^q_(q#?hjx zEKje>`r^7gczj=jGtE#>^?j#mPV?HbxiE<(IoF-Lr(Zjor61(fh_8hWHS8Vf>Uo{+ zF3Z)0+j3>@hRj!&$ht>CklZPJh2qfThJuFtZR%#f&7s+AZ1y{309d%*`qRxP@<=mU z$e9A|zc@8z*>`F*#HfB@BoX~?U^KcKw4f?v2yT-^MXGqB=Z8*Kv;6z_@2W$8Bs-Yg zz{sB)$CU~36--HheGxVV=gRi>6vsHBh5qQ#CX)jKSeaqRk;#WDn^~s}oza|;Fsb~#2&V~7^e%$$nBp9 zNTS#&oE37QPW8t>{E__a|NFN@(_T?W{>G=@V6TlvHqCetQhn`{?WbgngWv<4!Sl~Q z&rvq?^o@LCSn?nHna&IHiGpQ27*H^_VKfc&sBAT;lYH)l=U8UPs1}_z9hT`uS3*~M z0|CrXoz%{b8jgo_=0J)sEHn(LA~pw(3I>9e3I$6Nf_t85<^la?B4ev|0DWL)l#uy_ zjyftWg*p5~HFgj6vt~8J0J~L3jUyZn4({g87R#FGe?sJA0acX8PndlqtW1n3P=lTx z#>rs#lJPR17qVLu5ecZa1S5t3;{6Za6Fl!;yUWNP&$y)q0X^_EF(H?3cgm2*nK5C( z(PFlq0uExbsH{q;BLqMRRS*d4;GV8tyG|e<95)O++8@WKr_uns9gHKgKz$4J|4AdP zYf`J!WLvKd&n#ERjxocOdsZ{txI-sh#A?Jw8c6M)Nv@A|tch)=4sU!CNMlByVLOz1 zThBlvAZbjc9g~nHuOOru%P3C-u)B~m%wpq2fFdC~3N2X8$2q}vsb=HQXZKkPt{3z1 z5$1)VQdhy~TtHNPNwWk1VSZ7W0_M%)`xFvUb?@51qDEXotSVz20Jmzc9TbQ|&pKSBHLS_KHl`XPDvl&ju{r z8+%})dlsb#!zpmA3?oj?7QmsABOlXo)!14rnw9S#>>IzjI={oiBi_s0{DREP&GUDF zO2;#U0|JX2M3H*EDLR#s6bt(%6o+m<(~SHPfs~IlGe@9~HW~0Do-);e4_NhO5Ii0+ zTLu0CK`JT(2qv&Ec6N3NsDmBA_t4T=(Q|=whE^Q{WVEJ0z=B|gK`BxEhM~c}h9jvs z+HHz1Ir`N}T5Q~or(O2+tlkMSv)BEbj>itqV`l|zFRnvj35BPny}&Ky&)E3FNjhgv zRVOQrwoC*77wB|cFV-Y;Tq3v^Wa}K83+gta=7Tp>EnT8xq%(md=P7<3$^O5R)CN-O zQUuQUhmP`ClatD5P)wy54j*|L+mu6afl$?@K=BJ zSB#7|*4O2$|M5>)LPz-sL?gniwo26Sy}Nhi`;bJ{=pAM8=bn3xJu3V$ZS%BzSSTa2 z?4^+^C{vAXFQnnZ!9|9R!@RV#ATPc6BAq#y+u%&8?OkN$5?iL9lS~AxZ%}3W!4H0@ z4k?n)e&!82N@UhvqnYYR8UP(19LWbCzAx{-dxs^k>8WXQNOShwG4ipOMHFjcYGtm! z%F#Ey4rD`5HaF#xt`Ej?Vv1m>bDo)&`O|s!J>fOF>Kq_by7_cVPLEF5zlTEyegO2U zhZ^*(XeMvs7`Z%tf?js&M${u_6UfrRy^R*ml}lGxB8Owf8l$I;iUy1Xf{9s~6Pxlj z0;1wrSb~Lf55z{A0>?{_?_sPEsDB`)uUx%CBaEM6GziZQZ2@r5BNwVOu5!Iy`v?VS~4_h)rGf$RD zIlk$Hcsx^=w;|rRV~+vk1@!mZKmDm}shzP=OAR0vG=NZtj-VO=7%Eg?Er8IF!mUv;O$W6S?=`o;-N?Kr{5mnwjs**}ymv!mvbym0A!am?4tdsvHZ8 zAbt82>7YRyjL}W(r2)ns^%oHU18j)dbhPKt@88+oWsru<9uDN}%$Vss^Q1qM_$+)b zb?s5{b7f#^q=y=ip)alv*)S<*bdW(%T0uA6U_pA~m>C#aDM2&aW-L3(ALUaz`-$B4bDkC6a{755qbx)leea@QWkS|or%mu zC8;Rn7wdj`kmdx7q;c0HP_UK@rYqGZFXXDM|Iv%}h^C z{lV<)>>sYLu3zeOyEPcDqod=3vWC@aV4Ep))P&Bd2SG{L|8YVBw{#_v-6%ory5VdA zZ2PbO_5b1A`O3ZfFd|KC*xRJ zmh(M&Gjp@y#{Om~Q1tdd>;eOeO!4;Z=jG2=z& zxV9l1i&tcMZdImRbLwd7x*qyj8q{QcU6&$!rWIyMml<~K={&Xo+h?Yp?$p{Q8P6BW z(V$?yrvV?F-SunNWp!hnd#=;&@_b|T3~$b{vY8p;P@0;h=Weu>$a6h=k2Mqj+1qc+ z9SwAMcDKk3w|{g<#XDjIxE>JB$*7Hh$_2B14Kxwx_no*9J{x1L2oO=?#povN1WNeG zzSlQ4O9cM|etub*L zstsrd!Ejyo)ot}reSPnTD8FN^9Y=whk`&xCf!=%Z_kaKQ$#4A}dKpoD3~l~NQI79V ztgNj-G3WEuYVCKImzJ+x+PGAWI6Lhbu8Ik{)}ZW_M!_ee*Z(PIyC^gP5NtHCr2SB{ z-1pympIPAV|NigE=RWsYB7glRM|m0>a+hjrKcq3i!$(ApQaj3R9!2|cOn_A%F2+NU zp&)WUa{?{XGxN-jAfGtpP}Yf~L$t`)IF*rtLFSUiz*PYN3`9SXA{}8sCORO#QMx0* z1b{m=6bM-M_IG*smll^;=G@-gW*Od>d^o4B2eYOJJ*gRC3um>(n4;i7kyU(n_ns`T ztV*lVB4U;lk79iHWQS9O3h)mkHt|^izd^|ij*|3{RA)NTd+o62kF}$ob^ojk?)a4z z1pDo4HUoAnQhH`d32!umV}ciLrv;DR9DqeExvIfN`5o1T!Z<4pR23RR_Dq9Elx$&m z7v|=vh}R}J|Cu`KgHkgbi0)IAzavxda-HB;BG_IfPc#aQYceV$F--%wZ8XNy1%L{}hCVL20- zI{N3>YmSHqM*)53OtaErFeXS1V`_zFI$@rN9zT`g;hA~^y(Y{$4=R$Jb{UkeOABO26G!rd z@iRDvwr1-%$5a+{&y(YldL}@o^v*j!qel9NAAUdp8sd!+olnAY21iSC>z5-fz zaO|I`%zhgUm^rR>}z6fLIAo;_ZI_{Bx~#`_ERE zmv61DtyKX^DnbLT)tij~^S2)O=Glder0SFT+CA;21Q*Igl3DfvPzliG7&-gl4}ZXi ziP1DGpU;rd$;kRG!UOp0M?dZBMa%AaF|EKJ^_g+H3KP+vMI6w z{68uQ=$+&9@fpa__Yck~0clxi>e>Vu0XxWq0XjT6jo3l~*ezghJ)^=FgfSp|ai#{g z8+Y~n>des5Uq-3_K!4WsN^F>yoqVh?2QCJ%V zV>wVl`{`S6YgRu^0S;7xux|j28#^{J8Cl#EWv?xpYVg?<-CDG9!(}`?W{(^rYWGjGbU`Of%m{nQnn0x_Lrhowi z=u3@iQB%jO>HC3YOj)X#*l8^42jwIj5j|f-BMle~1cs>tOcyjXm}o>bbutN`Ul3W} zGR<^-HB)Zse;8vclBxunA&ndApg;su$=Pqui7U#hC5*!$UBo#Yjr$$7m^@HJIF>_k#U}b;NxjFa!HtFPAbIASoEC3gGNV zk`h*V?O1!M&HsqO`7x!Q+!-gFF;j_AOvMakl&cp?HM!DV@Av8Rwi~4x;W-5^pF9es_)l%a8HqixKbXg zwS|@7(TB__W80$W1zG_Z^FgT_v#;pQ-nem99zDLNM)--#&@;~S!l9#gh*^H1-tjz< zO^-CYMHv%iHh|3r`aO&fVGIt&1fW5nh!>X^DRNPeo86ed=;Sr9U>gPWniXIWIs`c8 z2q?zB*BzDsKzLXfqk#r0AAI;BTOc=X-jK^1>onS^Qs7m_E|$69HPkPvA+Qi26@lZZ z)T`vauQqBd@1v4}j1P136mttLFwAH#+Wb2OL>?q9V>ROYdTj#@=rp)JABYA_Bcg=C zF30gT{ql&J|x5g6nGZ|wHjH+=d z9XAx*poOryzD{leIt&Lk4PhE`n~kqzno(sPY2;JV)9an-%u262BY6wKcAeOQndu%u zi{pMGL;W1E+O=z%WrE7IT{BwVApnEt9Mvpbc@^VdwYW}d--c643tfpF`x2vF|Lt%7 zhL{yN1q8pSjG^5HXU_er!72BRX3`kTLZt=mGQ1a@2r}i|jjdsX?e2s7nw5XVIr9;D z64b85kzrQy+&Og%K+(2f6-dwMEPL@i?ymt^;X+mkZr->-)iH3i-@W@0g9ZEy_zVDM z5rAM11HcETj<$~`D7;ovb386Zm^=s$_l56y5-YDpW-4elodWPAf?k`bF?^C281ZCP zHbqjD7$!e~1Ly8%wMh;8F?r)j#kf)V$-UyCjYCGhP__ZKAV5q@0@HuI0L3kb-QlG(0i46!#m+diA!N(na*`|Wh~)E-lQ=%|_=a{%no%e=I0iO%0E|6c5-@d4qXEh1UQ?z_I_Fd1`gL*110PtIIkf&TO}}!@}YqV zLV%SnhC-R{FI#&xoM(>0l43StS*k{GhZ*GlSzn%JoAjI**8`9V=z5^h0B9UJK$2I! z0e%A6I;OV=arP8I6+Ucrol`TX#BB_lkMvB?W5oi1DRRb zd&GtXuN}_~_<^N`MQQ8#g40958E}j&VoL}2+CLsjdRk~^-j!TGw-e1$(zQ~rF#GPd z^}eeOmQ1lOnZsrP13+$%!uBzONa)1}zVZ|lrA#vQ$XiVYOmMo}+q?2e_wHM7{ZxMR zqaQIS1@_|7`i9)ReM_&m#os^G{X){8Af(ep*&6{eN2J8Y;XD8pP8a~#dzzWU@osHC zWr>`0(WoEZPxR{gmS+Lp2kqdx_KZip1Toh>C1XT{KG%wzx58?E8?*13UT|9 zv6FSXowgp9-_x((Ute2anVFfXP>U7@M-Mp0l&Y?b>M8yLiUouh1Ts?mT7);!G?>+g}KYm9I*ePjE-}v;WWu20!=7>GNF!-V|bN)c1?xtoxFWi1kE~}Hm zhMO!$`Cgv~nD|mz<^)8%&M>l&g}FtFIRNbs5|xaRV?m(^0F_YQL&*$fMD%*k21bb~ zu>%aavrQ?&*h=G19z8Y%qs$QFV>PNM@9pT<8OC7TK_OKxWiBH-fT_EFI42Tz#4L-B zMq`Jf4$2vDPsQj>OHL&`qjNzZgz={%uuzSSbY~@A)-2@;{|zo|5BSNbhkl~p-(pt1 zv3^Nbmsjbq@debo2SJUTZaY}*hU8nhq*{|>kY<{uA`eF20*Sd zt`ZGTPWxV0v+RMXcAXyc3*&jGsm*)iD{zQ&^4bUX73lq;Hyz|vsj2hq)W@b`Cf0Jv zH4v@zZCp01>V;RZC-k}MzadC5&|qMHbjD{|Eg*=Z!Op4P=Q#j+rQTp!wj>ahxQihJ zu+z}wN~ww9_VjR+$oB58937lVr#7XTx9-urP7xLaqcFHYBtnzD5~FM{%&36&##m&U zr;?nH?7ZuH0t|}@4llle0H|K8mi=;oIk$DceDAy8lOOz#A273JJ50~ql`B`}%C&2B zq}X@ZM`>!66F74xp-hYeiB-@GrMzl|fiHO8pQ=;ESQ_>R95AXteC>qhdL9&|a|J6Q z95(vkzVbpL72QV*oh9m-y@xFP;IhU2uo6WUuQtsTk?Y{2qu{j()jz zrP(_$Lsm(r>-FCQHx^ce&*G$r)kqT87ON9TNU|RiIt`?v>rn}9Y5-djb`o~W_}GpA zEr_gIiB?WCW68lzY*cz}ZjI#@UcWYp}#I)m(&k|RmFDUqQ+eY(Z#?sdDYEFddEW{EK$l3O?u z9z*QMEZt)s*!Qg$78m9Ai!Tzv3&R8oSCrA&hYO5X+dFmo!`z8NIMN9?TRbm-#k}|n z+6Nudimu6%^;KRca0~c7I6;&XcQsQ7FaPw+f?U0Ng{*dvp+z7ABdnomQAu$e00;p@a`W$Tt;s+Q4y~?PY_kCrvwkl=&}T9x2n?Ay zCM+mx2_qKT10|zhSS7!C9yZ9Gj;B5>hD2{8uq%+!Lz5e%BMAP`a)iRvu#nL)_FF1d zmdepr*Iko9k34i7-yt(^OacJp_>-Uh#P;lKugRs2D|CJcymr;uQL0qe;_&o{CJg7J z?Z&83g_!ACSsTvPNP6^V7)8=RqZ%2mAaUS5tZ##w0S(6_V?iVs7{T>`3J1<6g6AK6 z{|BJjb1Ky7!djSr0-0a7VY@(F-pA6#H9Oz%B)BaB(eo)1jY|SnqD^tDVcCvMoE|+(;+ajCWJySYB5{Egf--zSni^SI@$rm2kY6&- zCeILx`QOKyy2>j01UVsdWq z6KL)NHwyLYt1lq`xUQM$Mz`B*B8i9dQo~U6dffogEi;rNFWH(x=gbZDYodEa5j-c17q1}wxvgE+OgArH{g+Xyrx!W2f?zNfLRUL z>E8U(m*r4{n4kRQr*xPw7%(8>$t9ek5eXxRgUGEsiHud(3@ml%BcmUVvOCB%FvAa! z5~x&>Ro}aRU$dMuJ{%Z3WaP-;aosT3fdl=(@Y=mg`8~WZ)Y4GW1ON@-DwF{+5`-!X zFby!KDBBT)q(KQ-4B?FH^{NR+XdnZli!mf4^sxItjuyHxBK$wVeW(yXY-4tAR%XZ; zg??i|Q3fn*-A)vz;U+#Fg2dC$}7WD3k^o_)3 zv{RRfM1?WZ!NI7L2f0v@42hjcgWS!Z>$9!kJb|H2gC9*G;&DLUFbK&=V(4;?u%)@% zn>O}z%r#7CNUh|pj&W*+<>|Zk@5%$sHo^CgY7zFx{K94Fwp)B2aNbkEwXotNBm@EF zZtg^R!oo&Nky%A?jhKWwK!i@x7Y@LHaE5A6Mi5uorothKdL zYbykk)x=L^;WVn|X8~#9#oT_`+YXH`cLI%mQEm@7?c%@hd*%Q`25!E-WT11Pc!E6{ z6nRC&GdIc=mN+Cj`NHwai_MJVdB+l$4&8LxBbQVeDj)rJv}kB+9ZQ|PmzD7eqAskQ zZdEi3BK$}#K5d*30$OI~7p}z-b$on^YC@{bV+r#7*)>5aUazB}0mhnpb>hHr_<5>7 zPu=VBcL9*&?(XjRwH7A((Y)$X-UTFt$J>W3$JRE6cG_#RGs6*38TlH~jYQ4zC4z-k_vB zrzpcYqjzNegKS8L7J+akGI5!TqiDQxW1{s)Ol&vY(Tuk%DnnoR7`s6FuGG+8t%oV z1!l)!wDaReL|&)4TVo)XGkNeZWFS?LU2u`v8^ChN+#s0=gfT#j2x34|v%0#>XUS6A z*o-*t6Qyhey?Mq#o9P}q_AMhdiAl(Vj1pY;$SN_njS@WA^(gV{N*DNxeNX)sOX#%< z#{r=@g)EJ02XP*~rq*$j*(qn*)hUkpBR)H7Q3qjZwAgdh8`Ve4N)R>99Uv(tH>z5p zF;vvH?{ZITy}&N#7(1{vDG@2 zf@mfvXVv{k7$z(5*{I~s&S|)k^C)kF%#t1)8#ZpM)g?l<%Z#Q{l3SoB2gEv@s{dSk z9z{x$tmL0(mhJ9`kR}jaAV_HU}#a<^W%O#%*N5qCfOkUiuY^^5IUrM~wX7|%HZF7{3x1tvjjfz1u0ABG6F ze}2jmIkPE8e~HrR9(348W72hwhNgJNEL|NhWKLUpu)!0L=M_8^0+1Np7nUI)K**i( z!`wT`cl6oK&CIiJ*(8z0m_0jWNeHYkbBw)#3JHuFO2?=Yn39!c(x{fe*per|Fi;Mh zKAhkF{-NEguKSb*P*6+5I&j=e9Z8(I0MCu}_?8F)EX>hbTgItBA&Af{8vr#tho;L| z5V$fUIz8haLQ4mkm+fQQ-$Mja7%@V>H^_;DFztevl@jcU7$y0@dYV+@i%pf!Mwdd% z#MH^7@4Kc!D)TL1(;4yzxJmj86aJH&_F-@8K~Ce{Vd^7@S%1f#M1tNRyO zJgY*GeARVd1W--SRY=01k>gb#k)Q>YIB=#TOGmF99O*z;<1@*&=EPlchib=lcc_KX zCQuXai+~yX2H8By_6QP?wjnqK2o$4gcutzF$&T(Z+&``x!6g#>rlx;|m;m zK65?kAaFX~UfR}=U!jkTF+wQor3uI35a4pgzFIB&?|vqoe>2;aGTZfmcwr(4v^}V- z(7p!2KgkK=Nu@{)+%N*E)X^)Kbk=!NRtiHh6Gr5Ypulh#KjTRQr-P24qkN8WIe;(= z$D~Pd8{DtjL+4jS$lv;8>W@3HfFI{FAC69~THSs`3;paUBhymi68b zG{AUlFD)uiX9GA6Ti)GR3VW?iU4EUM`oD=ohe1a+giVQZDjc3CugEXT?rqI5W;9ao zr~!*HzO=l&1TvBU>|X_Eq%X=!VOW&B>|rU7`tkY036>)OJus3{vGO@as=oid@BdHk z-t)<_>$>v1?!A|`vb+JR;0hj~2SqE>Ewv)LN1+ch^I`tQiT*O0ZnZk1WyqeOM7AI` z2t#-j3MiDX%Bo8D%r&!rYwvU4%_J$RB~jBOFp`;-=DmCGIcM9o*UCQl;C*dq5U9+Y z(*|k!@@!?SD>-udz8H;zgFTH{!Hb_~`JgxCvW7(?C1PEtM(^x@^rxSF{`u_U zTW@FYzVp5~#;=tlIUE8A=J-W4F<%6&Yp^b5{%kPNl!SL4?aEl(uq^G)&D(lyh+}Y` zF1FlB+EgGRb7DAV*u}(gzi6X}+zM&Ufn$V;GG=!RrL_k-ap%uD5b)xqZQbYo{#1ca z(u-!4jWHy8*5}S$P-ch2PgsIQy;zps@*-q2r=DRmLvPo0>FFnAxW?*TuP9if^a{`o zB>ejExM0Xxdf0AAmR58OfwsOP5KVF%O}v*!cW#5s!dK+;FaJ^Jykj|2KWO6N_}OAjZsy#xCq32c4T zRtTVk_U|Ili2$LCz-GX$KC=5fZXajt8Jw_>lLJ55FxuugtI=W+lzjg)q2GTE4!x6; zL`pCZA_tg`mfX5M=kJC+Re5^%Ag?L-@i`LjLiO|0?^lKl@WVNKN*YuYM(a?X}kw;qwasU3|eiMbtkt2gz6q zD0`?~asC3hNY{MoGOC)Z_41!Y2TG?E#rP0$?%QXW)L^S3>r6jyH2+zdBb}HNT9Xr@ zT#rK~01&Z6H42U6phu{kXn|#l#;)kdFj{S;KhZ2VPr0k+Zy2r$YfAVm0R_nDs{P2V9&;R@{^z~CuJ(*p8=CY~~+~cQLt}2Tn=vdtV ziGEs$cPbh4st!X@#0+pLBbWu6-4FRfQkawmx3}{^Kd*TOX5q8ZD=|ZzRH>w|Emgcy z!Nh#t4(z$V_M(}FV3C*2$zloq;3!Z4z$8NMhL%bLndieZI|3D@tSiX@HZZB?s=JCX1zlSL=vv+CrRD@ErR)yV)7rYfsyr1INKNQ{D$nzq8|HLp;|eKxI@s z7(v}@_hpaR1pfTivm~I?1*r-_FYOB05V1eb8t0r2O(MSO9Mvuad*v<0F0dg~nKbGN z<@2h8HIT3zRqw%@{6|86XxzpmRy%Y?bRJNjjk27x*=7|Z02uw5K zj-23S4W>G%lCi611NV?HUR`t0U><@mS=;mbJDT1TFM?qKL>q7W@lgbZs>wr=cpw-P z1z!DJGwrzpGrM86*HQkU+Q;^MH|^t;J%a;#jm_993z+3H$+=5vwL)su_JfZW{7cQy zF^n9n^mRgLrqKv5L6#GH*5~b^oi_)xdh^z;{5i`uopmcVP6z;~RF&u}lZ@d}pxvNf zk|z{AWlA$b2rm5K&;MMMtzZ7~SF-PY_q&=8CCdQinnz?y+4ptJ;(z>;A1ktd{<-HZ z;(jqhgPjdBoj#Ov>?v6z8cZZP(;#mlV<)=>P$dIpk>{fSJ1<$2?bCNoV{#ZC1$-e9 zT4YOIceM~Ah7qxe%BDV6wrbAzl~=x$ee*ZIslNwZ&a5qmh^$gkY~$OOGN`i9Anu@d zDWQ)z-0CCRvp#e3l$`iJWHtiyb=isITiK;cPh`(Nd)fKZK}I)Cj|$cyj{aX3Sq&2k zLI>lB9_~0D=lZ6yT1xL^>WgSgkkRnHGpC$%hW+#0v(Kr#Np=Et!N@Fi>C@BHc8^vHS?=K+@G1hHbhIu?YVNQp8FH5i)Bb9o!r>V@?IuImCtZF^JXIl5q1f5>J_w6WOLwP#BfF+&xn^fya%=> ztp7v%`mQBsRU82G&W`yQ8Nn{k zZ&y^X&Z<_0JZYPVT|#xIX(FjrWuy$bP~XFiSR*U#1+G1{LHj;(+x=Ymc?hsug6XQh zFW$CwKf{iMu7hhAUOA0QP}U77V8T`waoZG9pEm@cl$<~ZY#O1wQTPPMvYKllJ=PbwfNewXgZSXFo%sZG|9n zu35Xo0PufmS=9ee9eOHR4#^2P>=>#f6&K7rCug(S+57kIPZ$rofA1v$&pgQU`DQ05 zNFzqxC+r4!dA~sXUO$&v2)M!_hs@!}KmL(=%w!#8+ezjSL(VmFT{tJouu!{Vps6r? z)iQZd+gvjSc|RiKA}Asg*e{XDXl~RFFaRj}<&3w{(^b?<_BwJ$4$z2$hM}0nyt+Rx zF9WsC(9lc3X4!ITKnzxjT5}m4j4|cx-~HFWs|=lSpTrE80;yvg$7BS%cs51I){;Tx zL7)TpW;uWARSkIIXTj=4&ydyw#2(Uw-*eKIG(PB*k3GUi^Q9O_a0Pd6-4T%tfevGP zWVAOWUhzOIZE0?wzB)9u7;2QMFp@CWC7Mg-)&U?XLlyn18(8)M+0@M&H*`&i)qMRc zUzN5z!PNP4XN6ivgPI;S*$PequwIg>Y?``vD5+FApD!XPt-|HDZPkz_3v_@IlO76ig&yGMM$!;cjTds{>cNYlx zsrKX4$HF2r!O)VW*X3M>oxqD$L{bc+e7j;9S|ul7dx+Lnlq;RPf8KLzx80I4EO9I( zMMEFGDx_G*eLL{doqGLmebJGfBPpluU9>xUM!Ulkz@>&o>~{h|^>H7)9_;nbI- zT$Flo(gb<19%?4u_W$;FC-SRDwl8_kpxp`3QCC~Bbp+5!APNqK5DZMz zs+?YV@R8UeFP7w7UH5Yz!#^Su) zC-7YYquaGG^2cilSiH9{W<`L}16r7YBx)N0$lzx`7oK%XKKDcfn=e6hT?i8mwG5VX z^KF`+CrhVqzD}l2htgi}!2Z2spYLa`hXjip<#~)m{Xa_|{ntFU*8N=hCY5wx;-Qpb z(Vcmk`ADenx${5+g7$H+S*Iw=P3@9Zs9(LmN z$>4tWp05mawyc?%cVj(LApdxEd2ZN6M)u z%y?r6=u*_En3zji`F7d=-v;nkal;xu<8KKkzxdcim2$mzIO*kV^T<*F zJw5;Y^LqX`9I6}J4(Fh+>;PUJxlq<~`>mt&QGT^z$JGt$hassu5HJu?Cm$XIy2 zbLY>SL)y~XZ<2wpxMn?Be-X3qd(B>COHLT##<}SGqS*i#i5LdcY+g;MTrw8+KLU_h zlO^IT5e9WjRCC5ju3jL}(wOUS%akj@SPz1|B0L}VC5JkIyeFXT9557+@yXd_7)u>7q>}=77 zC?a801+wtT1h5#I*4Wxo5=3y$`v|v_4eV)T!-a+`+)*`)da0_mSoCzx*dmk)x#mJM z@XHLnX`4gpYQKo!CS|?Jc8K^ZXuDJJm-cVc@)!kX#4DEz_4GM+RWJ}Hj0gAbU{Ozu zu&2-xj};U|Pu`7v)&{Dn@_hPwXyS;!MF>}ZW9wrAJ6 zqT56tvFM6TdlqYUPpkI#Al~f}H2Kj9u742@{phF!3p3QxHRp&F-Ijf9+RrA;_}R~& zG>3H7HljV8QJz$J5)xP&CH$GQTSY{g4;Z%ECEh(DBlP$7M*ywRP5$#g`!j)W=rjM} zAO2x>>EcBJ&r)>G-#)M?`=bv(R7sx0^yHII%Fxp*6bJf_I~p=JdR@xmh$<3zBzc(7LVR`9-6*5NddcCKM4FgF-4Uz4w%3z ziH{i>S9q>@UrK&BH~O3ahO&fwt~^_$a&X+T4S;AMdRHwfo-StD1N*zruU}K9OwXE( zlZ=G+!x_t_q+t)Ld+Y}xu~`jeY?ZaCk2zPLnbKpTw!D4&u125894}maOg&IW;pm~0 zbuz*R(Zs=psh$rH1qXocJSA-Lrkhc^dHYtjci^<2(Zb0(h+b@M$dcZA>#gkcsWS>h zz&$7T@E_v3-PNI**9Q3D1t`6R(LO>x3J>n1R=X2-!Sy?{O9uizdL4 zQK}6iI}Q;KgfP_W4h)C*yj99IM?4*8P1ShNX#0-}jkv&rNJK+hr65^Zj?)V9BdufS z^qVf&QVJ+G9*sg<9>X_x1E?|8CcA#)diK|^zn*>k(MP%#F@S}5&C0rEx6Je_BVSX) zQEi)rYoOOLMo5r_un!~mFN*mJ($yzH8k z3xhJ!d%Ds0KWhOO)i~?|fhPAqwLMJ*3c#!An4@w|4(BAVWXP@bBAxA!f2`dU#t z=ZDMPLucO&$gu+JyR6`6y_3%^u`EY*Gp=#qT}KbSvCo7dl-^hD->a15?X@Y*w+9CY z|8h|7NBb9n6g-3+Gza#Q9m;Rn_g=DtMqlE<7GT9T@bmVuN-0rumlL0PbrvH>a+i@! zrD3o$} z+XQf_mm@4R5+vg-baD~>eP@I#^C4kQw?t!?Uh-s2>-T^E_vP4eXg_`94KuPgGzydu z%2X%xH#iOqG~MG74SHofc)PxB%Q) z1TT6aFe8VO!wGWz>L;I=Q@gEagtMaW47LE;P-IJ8BmGgfYiq*n=_7N3d%P8wbCfzx;E5Xde_Mu9jjAr31=<^d4 z0sKR}hB7aE2BWRAX6}7O-3vX-Ao5X_rEsZSCK&3*36QG67}SzKqwNvgUJYwQq@z1D z%9+k*a#lD3vZq>1V7WvxlIRhCzN-2AtzJEFZ*N<{ENAI~Iank~S!bj}ai#=eXY4+y zbfk01C?uGbTMuq#Gvt5mJpg-6VmykqJ!uXI{s4N}Wad+X$D|+B<|6o*9QmE$4 z$;v6UGnz)rB2~27BZ(XPG%3u{5@MDdK6ZHR%b0_n$0#a6Jk^Cnw!%o-E3dw4*LGUL znq*K30H#w_2cQdP?Fk+U()c^h180ddM^H#bt`1;t+Z?4ba}cqx3iez9-8pGb6+z$O zjI&c>;Uk1~tP4Oj%7^S*Y#2!iK@lkPF7{^r3o5C}kth2-WV>8ux?KbcqpZl6Lq-DS zMR0&qooCJ+GQ!aUH0^xWU*~4w{rB;t(%5Ah&yy_ADJqHpbWJQu1Nfyk9Cx z%4Yw+ap*nS#$YoIqaF_BH@@)=bJF>iIh7TQw#swoF4T}K*oI%VLvh)%#c$am`KE1@ zCvEfdAZGS^L^h}F`xR(r4l2xEj~?I2wu-Hu>sZk>hONl^u_8FHs{wOSLMdzW*ajei z|KmUY2N%K##2>DjG2kHL!06+1k3&gAQTgWH z%VpE4w`T9dVI~-%RHuVu*G(^o*T;xcK15m+%d)e#qbMGy(M4vRNF5TQU0c7OIrnI~ z4FgaNod0qj)O)cQ46YyNL{Nfr=bC@|)1L|)mwI7T1o(ZP>Fi)C!sZ=RR@IFb()2k4R5Uz3kcR+5?ZJxG!#E8BB!3WNnAER>wYH+5*36kD^iPn0Q^Y`##n9Vlghp{<(jNyv)-2?_gp*6K96LKd8sT*O!>FgM_Q`=# zz{NyPmB;s~Sn!N!T{tg6FvMjpXeC?Jcq^q1F8f8@^nsf=6!MW!@l?UUA7Fpf_m&>P z;VFyu7xd4QT}eRSrR`tlZHXdw9Ko%coDDdeNNWNpmQL9gw+YBjX!4Zk)D5|BM;~SD10; zrnNqNZ3m%vSU7(qg{^~~-Ij?3fyzrtjIF;{F_=)j~yzqXDKs{Y4BxGW3!vPSn zf~0-_gZHwxfBJ?%HjFQQ?>pa7k4tm9QKF?B2B77Wk3Uv)jq@e5#UTnn79uh@KMbFU z2k5m@Lbi+&@Xu76uF^Ocv!|=;Yf)NT2$_w8RoSR@3PrLBfpan^ZOFr6D0nFX-3~~m ztOjK-7rvlO*c350+m*w)$)3%OzgZE@>5A^-5B}f}vaf&b>)D6)Y_DGVOl5e0LpVST zFa~1#;kK7~$&&1PkDD=l?EGV*wfySWzN%~~(`^3D?8eO-E>p=|`oUD0tT?fwoX)nu zAxeBFP_{g~Ht20t>P0Hmva7q64VQtY=6Bc3$-?uD(L~UN>!1g!-gpR6^!;UfMrdJ^ zb(}QA{4+aDw@`FbpwdaP3`xqa`y{fshq`b2q=2eaeW9mo_ba+qdwv)W94wTh1SC!8 zxCa~qv+OvK=1WDkNmKV=S( zd&lYFT}NJax-Y)#;}Qkgsf$%bW!V-_-2qz%s%PiUozE_uJue&w6(qf8!hZw;nqGXOR3@ki{3>zsac)f_ScFjN?rSh;xVqP_3QKB#M>qQ?Ct<|>{!f!2QMGt$xquyud^_16{5 z5Jd1ka0YPSjFN$+7>CBVCKVz$rA35bj0@2CInPT}^h(*XuI>6vG!H~P)vY~AGj~CH zvRDcg0ZMGj{@f=}>Uiv}J?t0NjrG+vA5pEFC0Hyu^rq>bXX0My!C`}b`VhJ8{0cqy zwCq$jTB@G)YLiVHn1L9jqyHV`GDWm=U{~yN1btkmAytdmvjkRXIuv{U9^Q_OQ9NOd zoWw~Lu_6mFbRn{$Jcz|ow;&Hbh&+1ud6)N^7AZqd)eZ-{wvJ_Rn#QsH-kSY%OT_?X z=N*!(D|W3&tUj{9W)Jqb*Is+Aw)LsvIkn&V*0(q#sloowCg}1j9eV2R3>Q3s+`jzf zFF$LC=-=75e%o&B35!-YEX&DlGc$l++UH{y-EWyOSW)F@AjOvuw28C;Wck}~zokA~ z%HB9c0Ff|I+6)oVHqA&xGYQP#j7g1pr60Wie)cDS@}GpVB}@J8_r8-|eEe~3q(_!v zcA>yTZxnXAci($Y*Fx_ZAlzn9HYR`uM#2eH7Rs*40x-%o%vAKoS62k0Q`QvYL954{ zw_AcB^sp5KcpuqITV=2OmPM-|MZrmRNW1)me*mu&5mk3X@ja$Dti6w?G;w7=n5 zI7RI2P+xBm%y4bLPyA3PA_sz(RN>Hk>|{mR`Dx3%k@2LTdFsTee%z`}jjr5fOQ|C8 z{y2VGCDuo-T$yO?xz~}nz@5g|$APlGj5y@wPRL&R&Sa5Pig^B%b?@E1 zFJ1L2un?ng%yLE+B(BE@D9(p#rYA4{b9&f|TIE=tBU7O-t-=6+q-GTA)55BxpvxAW*>kLGT}`S2RfEVd)|KdNeg;JA;JnJ2*w zDoOmud*Zw=J$^B}^yCwgi-pX|&rusqicEVX0ZCae0u{WSY>s8-cT~*jPpe90zGi;xCS5jwV*Ak z6{BcFC4rVacob-hZHPv7Bx(gweWG+HbzW`_WbC$)lvP8KA8*chIF1)8BLny zZQDzzCUwG8Hm}O=P`jsZ%MQ;7Y4F&!*;xx!C8m=|;__vyvCETgOX}=9HbQL2U61QZ zI-FfNaqb?HF6WnzwU4O|0{Eeiv;9`q^ZD8VlB=`%y4^!osB#Esew`V6^{X=R1bP~(0r9m(Al%Tuv5Wmb z%;~+nzjr`JUjFDuKgyne;rZ_6mtM}FxqP|&?6c3x9WjIL_akdrKfk)1ca&4NsP~<> z-_9;Q@sy9MoIK^5rR;>-9ikI^6{5t~I`lIZxe)Lyzh_C&|YbqI&F*GTQ zwL^hqB1%p_ee+E-rgwy>e);8>HO_`3r`L(InupO{M44J_Vdl(n7;G}3M~@xTVHF^x z_Q+lV2?%$Q+C0qeKsjj{Mv)@&7zxriP!-(AiI4uM++TQwIufl zuqzyRis}=PM`AQ9K0+e{1lfzN0i$XdT#)d*_EPC-DX!o~y>`+W`!?bkQ1~)d_sK^e zWgmX1)+|bdp;u2TO$Pf&G_+yB!e}jpi1NetPX%V;ff>(WQO~l6kEUUG9W|bHMU*y| zc!f0Y?d=I4A7UJmF-QbTE?js_tq7(BFj53yfW)XUa7F->F^VX`4%=4}t5MeHy;Vqh zC~q<-zx|!;>8GEP zodH0nfFZ`dmNV5(D+{`xfHKYO@9ud(&U>YH6^<9@BeIp4*KcCBycQu$PoUMGd(HZX zN*d2?B_5;a<(u-YH`}%kC4qR12@q2iAj3ysgKU|#ArV1N9G9B z5@l^3ZPy;{f3z)}MYU7Ob-TQt#?>P8fmoPl?%~X%!q5ia2gVqsHCxN|d_G(4T<)u7 zt?cYuBHxmYzi8L+vLylMEnxkB?Ds#n?=RwcjY8aIA4hL{Wrp^;t!ZgldwVovPo?>P z3Mc>f%Fu@>NdEiwx4(VdHq~$1#{GBZ1YUmd@WB=(qJ1ezHR6P3!-I^**s}RJe6RsI zs9`x8Atw~Q5e_g0_k#~UP^Lx}#U>XI^nq(h=YiHv(H96@w2Z&Fekc3E4}XyT_^M1>hY@g0W7C`AX$a1Y8(LIku(41d^PJ2;ek~ z=azllNL6j-<=jM9T12lbS_%LS#R4{Uk&e?+L_29&-bwW>7nV_NTh`0umU`K_gJsx< z-~hC~wpYoj$zst}XZ^Vj7~n8Gd(&MxbqG)z5ujN1ivhO>uqg$uHH~pGx(G5E`rNW? zRdVgel45M376zc{$v^~rt5$kZEY8d#6vUM2!?~YE9fRKu{=YcvN zob#v8+){PR1#FzloINXML)#-lZUaao^VRZnE_NX*(NJa^7(QOR+;D1C3?`#yD-)-F zbyRWZ#6-2v2cUbk3)A{&fLzJs$3x-%05BaZ9F=u?4NPY?|=U{HO;`a-C*QV=i8-B z6+5W~RtbOLL{VvqA?y3Q>8vKcdIEVN#|uY}j|=W^iEWYQ!=mZ4)jYA5b^dPvVdK%h zuDc9nHCifS87y7ql;@Z9Dl`f<_7;$HS*&;|U1jXj*AZt|2NiST2g42==Z}^-h7UgPYfc zlgbJ3@X~y&nlE_DzIUf-oaG5UbsW0wo2&NPuiF}2vF}a8W-F05C*Ehb!_58H?$CeH zf)bsWv-^EB5Z?f`t`Vg`2=eUq?Qni^?K6!UeeG*sF=O{YU@Ll$y%JBiRQbun0YR|{ z*$4pv5jutza*Q&s0;%W^S3}^rql-lfVg~iYk3P))^uPS6`o#3)zV+>I3gE_}qg>d= zy^x_&rn~aV6&(f?oi1N~Ha%Dwkpl@hbaLhZRK#}m=%Fi+QD$F{5j)8c((H6JyGCpn zRhduaFz7cTBib%nWmR&>5OOShT&3$$|7j_vkl2;_04nc-*dsrrVwA)a_!;*^Re{e* zB?$)scG!Jg!4ZU~?ypP=Ej*dl8vs>!WB{PocP! z#c}1O<){q(Lf2h#b)_O`fG|e%_Qo;Nr_n8DjO}@jicyRh)gCd+n3hr?6RrR*>L4e| zW4<*ZY*_+;hmSpW-v0Kh3Mf8!??YvC4)R(uLh)~&6>9_W$vf}7oqhcq-^hORd*4%q zMu&I5>iNFwBtMyfCUzDt3=Uc2T1-^T7#E89U#a%ZQdKLDlJ%|&PWWVVpM`lT-rEU2 zso*lG3#r)+rboKIM6nd*2#yB6!}t>fD$UIsa)xSgbZrC(i^x3lV9&DEV77c<*mbT- zf4)$ID&ua#@g(NB`1?7|`@pk4-eaWwHuljaI16n3AyuNZPJ4h+z2hggV$8ISIb`;S z&xCifCv#z6yw6!UUIR?T-o652T4My*1SEh8zqo!~z)H@Tg5I*|ozGaLMCY?-%#o86 zyznASkLR>D0O$Byjf%$jUD6I`-{PD(1H2aozHOHC=Qwaai*F+6P?J*wgjgM_%+%iI zP<^}U)y}%erpri3Ty=2XV=Q=os9U95uKhmITDA%J%lFA(t5H<#x}|iq=w7=Xcayja zO7)f7ESh(RgtC?u&!5k}hvnyA<_i*VE=im^-+^zcj!qvACOD(D`B&X zRHCt8=%3-qPgboOO)e5V`g8IfsEf;0sK18`m(+upAZr6jFYLZaYfhU**@Cb^|Nu>a5JX-Nt?6rx&a5C_X zYnabNF>10h&W-^9vo+*>y}vtm#xYt2K?%zE%Y5D_Ljf86((^B5CqR#%IGw%y*4x?5 zFK%Qra1fzr)rEnGXHTD75aH3r7>OWfUDr6a zK#9Y?6EwE-1Fzx;Aupntk-e9b)bz|@(YH+io`f|3B-FHw^fb#dcF$UwCOVF2UkA=Y zc#mDDRPBNxxfm_67VKSm-cqcJx#2EEE^sD*s8&|jbsbHec*5JD2ll>so5YfW*{-y; zT(SGF6m(~HHq42e0|nIR1WU&)U|aP#Fa$uHc6O#}0s9KD=nV_9ac%-3MmvR;!oxcc zbS}ZIw4L|&6?BW_sT<%&>Ymb+VEZvk1^{;Acmd3P_W9@8b$bs2G;lf~z_VBbFYhk; zQK;0~5o2KBQlyNxwyyIgPJ4R13l~)xjo^QyJ(4e3+~nNzIPYmBVTq6FG}`D6#)V8W zUys>x1hSyKKWtGJ-me$OMdo@8I(ud8kI)YA>42^u@pZ?Ug|t&RFG}9s&-1MPYTdHz z5E|a?S0d2J)vic(oyw{F0lz2Iej6B$s#kJMb|l%rBx2;;`s1Fpk$_dx8so~DI_oS( z(Uu9KPm6 zy;Rx*er}FKpU=-)wl@-RRlS)MEeSnRvd8o;em6(V00N`u6~U$V|FWQ=+PXEG*6&pkE%OGpXmM5uC;H zU^%63+q1f5L1dF?b(4niQj|7}(Ia<=IPHzdR=gFHDHwpaoqi|Tv2#`X-lVKr8bq*n)$#Fg3BCeM*{-wtr zcL!5=JLmdm*RsXIo|omybXSh--QC~O?0xfJS~-y4{oUVF`F=~h-WQZfGG9%*WeUiP zjHz)}E@rI3deFOm^5UM#x%Vu9;+X?>(j2k{DVtlH%0M3p89tADt(CRwSmaBI;4aQV z-sCa)kT0=6Ve5wsj7!?rb_o(HQjnGPbeD%lPvh^Tl-@Z5SR&+be(@s2KboHA*1_M- zW+t6(z@Qth3%|Lx;o={hRSTv7xDh}nUhlSE1Tj<*x6#TeQn}zW4jV;0DrrnU2t;S^ zOG^db00P#X-QE5kWrU?)A9~_?ZC7|JLob49l=t3yR~a`M9zg)*UkSV%+w3cLZDeXV z*I9sn#a?EaBz7ws1hd|Dn)LF=Ee^eOkeS?9;~E`avUi$RB_VkpT2gsWgV__AL|e_n zwYCRv@%-oEe2RRD$-qv58R!C7JVc$N<_I34Z)1j&EMvsCr%-K!t)M%MPZ{Eqeo?vo z7xmclXbq*T*||f?c-b;&th*jJq?!D3kqrUTeYNTcC~p*U)XhPoV85)U+IQlL&$~nH zuX#xF=0TX$#pqfuKoj_$)VKG`3Tkp_sx8QS{QL#yKB%hL+sE|6RN^i?cHWY^hq{iv z5YbB7B)^Qm-7F~kjnKO zI%bDIGRI5l94Su9*et9sa_yPm`l_PAo40OcZ@lq_9Prc6Jd^#-@BL2p^pnph6WQB6 z@XROk`RHq(f0liI?K5pUjPO%WJ}J;l7o-kO#hLZxat!b^^pi0%n*#G##sQ~x=amRD za<18DR-5c#&u3DJ+>sOX5tS}7uqFR{;=uM<-^>L{9!>jbdM;qiRPPTE2C)XlWp3ZT z)pO8eRLIIjRMTgnM?fk?2*|`ta~@Q>DE-A@2Nk|9KJ6;{ zUb%XIJa4HoWe%{C=M5<%Qm$3*yZjb|;O?fvX_cA%lK!KbwEB zP&J1>|Ce6@h#h=EUB(wpmaidwOM!>xF^gQkY|82*1qey zpA&)Zf+XY+~2rzM^DBDSiFG{W0Vx|zty6)Y(Blf^McW!HPq79Za&JceKDbK@4zV=SOl=nAA ztDw^8-=?mUN)Q_{%r&Ug_5|b$6C22gt@`_74K%YYi?9Qjlqr;N>x~2dnagV3AHnhN9<7?BV5_-NhW>0_H_7fR?&ZJ4-I!1_fVeB_g*?kwvbaA1hz#~Y?dOizb zD(~^D)Lt(gx(7DC*EpX9p^sm@Bvnalluq1*=yDK-G8W4|2rMJMaTIt z@~{h7Z5Qohwh-s4vYOOou$rj}k&B$;iAxtXPW1TWkC{WBLZHy)*M z$S;I!4Vp*hD5X-hQm7mWbCfn0hAVd|Og%Fq#wz;5PT0aMH6it=>6*eEZ7yVT@N7R^Y3#qe-Ju^u z0O#Pwk&I4imq?R*-+!KrUL7rpE~ZZwfubHxq)7W9`in)-2zT8OB;`1YQ8^ZPO-^8? zRDiN|+?=$XYn9azmI?BgRp}Juu_p>Ag|X)~o{Ymt<1DLehVJ>zTOxrW7@{}q=yqoY zLpX)@7lGKWg0OuD8cHu<5mhEs!vreG649AEK<5l6h`{d9vlqp(CKtMFI(GWkQIucV z)4bL-#xH|nb+Y0;e`sa_Mvel}?|`{ndvb4YM|L4i$}skaBr-wdVpcCFFhV$|OX4Sq z7%BqXEPB~RFk31K3ZPcrBV(h2Qnb!{-L`#;CQr&`opYWgPWGkaEEL!u<~Glxy1A^} zb-{w`bMK|@CmZyg6+{fGK;0lfToSzGeV_j5s9T!aSu%-cz5Yf&+KL!b>FvP;>`hZp z={l37F?-H=;cMA)p09H=BVUo!!SFYp-sjcbH!Ru}DJj_q6+s|LH zdzjk&yw4Vb3!aj_{SH|MR0v8hY<&}dC19`Lp{E-wprnz z;Ry%5zF|fdY0^LVU;eE{Iv12>|LmQ&vQIv~;^3s|L8#?qPCC#P(ev;CXF!<0@^djD zN@25VG-K)<+A2RqFH6#i<{XIF-+TAH>_7g;|B!wB;fL9?&p(%a^XuQpETy+25wyFh) zztGFl*6zH$P(+!?2@*>0iH@8(ir3yTL(T|M7ifC2G#?vV2>8QCy>PZFvPYcyfk;{w zp?%!Qxg~Du6b+9AxSK3d=V1WII5TD7r2-!Mq_P#GAn)irGu~W3=3*p4F*{lH9yvWz zWGa;fEAVixXpPi%D z1V%S+-^{Lm@r42$4k2YyqGd+Yj!X1rMS;Q>UtCk$gBAy1DP%eyByRoMg5JEFn**WQ zx~N8_+13^|$`yM)Aoa>>g=Rn{5L-R3a|@O_X7$+%C$>(=L6L!vV?2p#U0dJu(w(iz z{f%v*^T+#B8D{8Z`J1lwYJmg%>X<*y6+EyG>u1-5-(U|jMmF8|u`;|Bq%*sTFQM}F zQs4m+9GO?4oku+lXBxT6gXf(wJymJ~4Ve;gj*a>VRfK4qLpJ5NsTms)^N2E*#!KAX*Vi|O}bM?Tet=h1a zqdvP`KFc}~|Ne8n2eA)+gguK*l9Y7tw`Vb1E;bmmxivVVz$oNFmE6m*M(~h0fJ9xqF zXWQ;|Vc)B~>sb_`ZPMEHG(}N#|13T9SP?rzqshklW_9}P`Fwg{8S*C|tAvHo{q}dh zlYQ?uzo*fyH-7p?cH5jfXmvD&>!#^hf>KuB#RycMP`F)th%5z%FcIJQxR2tLm6&4z zH1{9=?>`b54dr9TQ#ggt{jk4sLimlvJ!o#Qeqhu z^t71^Mu?$JYM3{U6v!=G?`jG?cE2lT*pNlcXVtW`9iWXFt&C2_!vfaryAM3OvdxS0hSViR z`|KC`ti{N215aFf!uHoG?Z=U{tEo~r!xcfszNQUw?ZGqW&S*^*^QrBPUC+8D@NuAf z2PLKFhH+~A?+JD=B(B&vn7abSuSfd zw*8`#dZ_Pp(FZS!CF_^SN}9T-OC7b9M%R!Rh9n0gN5JYMe6=WP%h9In0PPLNKry_u zJ8H*vJ<}sFOMyTu{?XV1w<;(5a$JkgU}G{boAwQ=3oY-Rdf5c1%{7YM)mY*q0=X3BbrdH({x4P5t_Q`?N~MnR6v`k zR|oQ>@%_5Ud*Y!qozMozEjlWF@WtM#Vg%3cH!7J9R$2lndU?>L`_SuVOL^ZRUq_M^ zZyOiEX$RkvC{6a5-oeg@(N65$e3Q^DC)(x};9NC^edP1#1 zVmGJ^_gTBBe49m7p_b+SHmHni>1T{oL2>5I(#}-Yx2cXI_OXNDsGfiR1q-rI={49V zl;F=veQ#au;!n(J6R1+j;rj~uHa7cU<5$Ru=XO6U=&Reu3Hug3^^tvDcK$E`%%MI? z6ubDxjIjMmVwv>fFTVJqt$DF&+4=6aC!Byfz-`ETrnd}dL@E6(NzVU|U&>@id zt?&P)MrCTrdS>czQr7~=0J5E|=E*0Y%AS1cDILyU!(5;-2RblfwlCq7sh1K(g5qQi z1Qy3SkJ?erlCV918}+lj4990?CLcX|pz9a~Q3i6FcPzNM&s=v@8WK4~5<#Gp>N1lK z_7TZOo(HRuNA=SG9*=v6o{*pf7Ue*m)~l$6C?}~Ttgo(Xd@KpsXhwK#)w9Oh$x#wG zD-&&__a?K&SSva8#B{rDm?A~wQysi-?N>`79 z|DET8qhUPf#O4XH$C35!+a9`k?Yc^{fEAHU)pNYAtWyrqII!I=WNEJny|jd6e{Pn{4RK=)*}2&-~t_dxIqC2UeX<2`V!s)ntP<M@*^sn z4lM2lz_qR)W0Nfzxv&&xopS{kcQhDdBdDYj!uQsc#Mqu(+1KSP1k9Z3=fnTl6O1>* zQ@|ccniq1|wr{u(VL2@DgJL>=`)!R?KmF9x+07d_R3S{s)ezx+#Gx1VniG3%^wqb5 z3m)cFO6^c0u7v2z9w0gAA8_p2k<$A=&Y|PXfB3^6w!igTzg5^xA$z)J(a-(WwUwKB zS)I4dG?B=MWwdwh-pc;+FMpK1@cd;letml7s`|f=3n16@kn<@4TZ$r2O%}{jdMK0C7@enumY^peB3R@Q>5WCjw(G9-U<| z5bZnXc-MF)uM&8upe1MIbD>p4p`~T!j({A8Vi|{i+cHYY6^3^9T?=Gxo57MG3H=k) zw#>lnnB!@pMAgOESvS<_?Lx&&?-wz0?#e<^StCe^9_C8Sai{*$Bv{wl;3Rhb>{8?% z$2OhOipk@qb|o#{Q{~Y(Wk_bT+tv@t(lM4jhjkIxNq;F7*Mx8n-g%d|%=^q>(6ez? zsOaBIAKLcH&H+qdUu0K4y()2>eLbtCniGzPfQhmfK&D%^hOnMts3i$21a_-K+QvM( z2rEG0PsWWo)2ZE~rNj9mYtyuVuBWqmt}Qa1GXP>O*gUElg6>CD770p zl@%jXQ91d+wj7@ajFAOb!EhFB8!~XR$|N6(!B*R0WvqS1Ubwe?PuPTG8(tzFDUevG z&9e}BQPPU8R3@cFy=K3=x3j1BNHgLotMfHkWCyc@o;j^3%Ro>^GFdvy9FCRGXK7=c zIqPGN(W_2EEXsD8Ciu`@QA~jod)L-eI^>pB)8f#$9NDDc8Ks!j;Ci5?0E69uz3$rj zssNl&JbN|fzMf}dSX01ZK@bS^%{A9QXMfv1>!!1V+yY(zj*Xo$%Ve4<)fQQeHe1Pa zOjACZCw+7~mqTYT34V1dcrXOM^2#gONejwhdPEZd?fSRgek=R%{r6?KWgB*P91yj( zs_6{?m{cB_@ZkE|AU=3{$(QT)|L>0Si zSv||L zH^S~rr~A%aHyFjnmY(bJ6Qe%C;x+Lf2TD9{%1)vC!PkHN`d_PctE#Ofv8lT7%N)90 z6B#-gd2;A8FR&Fm1f)SkWBWMAlTYD*w}7JgwUyj$ljoBNpX`BrVh{7fdNIFjM(7yp z2l{YY&&)u7lKshl{?DkdX#)a+Dg%(>fY6vfZ@aKz?*Nq znSJ=-hcYmTseJEy-xHN53v-}s*-_ow5AJCk=`D+>$OOLhFKeb6{D5n2YvA9SMR~Gsh8SQ@SG?Cx~GNpVy)SKo)|r>7_P% zefM;D^Im2ZqKHd(cOT3rEAK8gt0Xh=UE!k-}NeSm&U>vb8L6 zZqMleM5%yO&bUW9(SoZn166zZy_?ys%*{PL4xuk=#KxH?Dt?UAO4{xffo@p1Sm;upaZE=OpU}IZI$LlMLuX%U*Xi!670M zvcF*e+SlCsT%07Z;)_>ZSd59SLF0j0=6Dhu;Ch8v4=)cw&zTwiH$A-Qzi#6++{hE!<$J~6PWnRS3|YZLM7V{6Qr&)WIyz_!++w#BF|W1h7t zP3CzyP>cxuT+21ciED)7g?-@CnJ&RC!10!JvsC)2pDBR$|ct65UwtbD;7N!u5b-W8dYt;Y`8Vt*4*CPup9xEa4sqR<2OLhX&;XTMP4#pf`8PEx^t{Qib)+O)sU zzoXJkB}rMjeQf3=8sX6GW7~eV6Z7h02?dVF6|ZmE`LBm5&YT8UYY|3kXMFFoyLaz> zkQbwGn)5lkwy`>f35o^5`2b=g%100Z!3|2TDW+?KJpZs}?SRrC_x}@t$;#N7t0Z#a zWe>my%v^J*aOS`L+rOP%e#TkeQu*5D4`=F||F^&XYh}w%KJ|42)`+HUuQt^K zMpUIJ6cFH~HyQT<+1&UTAQ?FZ8v~-goo!y`e#y#HX)4e2UZG9pwDBlFQJ%Ts7@E42 zn2n!WJ3v98paoS4AwLK*JCS`w+Uu5=j6IReSj`(R^Z%H69mCas&eo+{!ef zMh3!&7C^W6-g{527&1GuGcs@v9g>@{NX_h^!YBwzoI}Xp``q!8in9w8Zq~C!DH{V+ zvapYtWg&|$Ms2xO{%y}_VUC}YPvb{S8-U*f(Y9-L6&T}Mn-}Yr$Rpwn(ywed&*&v`Dw z7R%Oa58{;f)NP;jk)7}DyWaOm?Ur%x&~sWvDya@jw~nCad8Ju+_G&pBTY$7LY{!Z! z2Xi@Xci^7oIBVL0PbOgWb|2|_^Qi3bTCU0M===M3@2ef4j48m{`w{$--A^OP&5JZ< z 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

9)5WFZ;w4ARDjF=?rOJ7<@Z+PDwEcWHze1 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´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 literal 0 HcmV?d00001 diff --git a/Example/Img/BCU_red.png b/Example/Img/BCU_red.png new file mode 100644 index 0000000000000000000000000000000000000000..3283a7f150c8dafa96894c6c74e324abc62f7fbd GIT binary patch literal 211422 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�xP=Cj4 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 {}wcRRk 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%0DZGY}u5(J$rs0?F+k8RGabD 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

Z)kbbiSQi$VNO)ipK>;`0exh-?oW)5qn8SR$ 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

*Wnz##@rWW1F2f%t26TcqKz`XhEs2a+;rmKIbdM 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 if5A-0<7%~gL`KwJUuQZeG?+ex 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�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 E2ZA(FhyVZp literal 0 HcmV?d00001 diff --git a/Example/Img/easy.png b/Example/Img/easy.png new file mode 100644 index 0000000000000000000000000000000000000000..05f1f8103b9893af275b33d2cfeb2e8a91ddb631 GIT binary patch literal 123986 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�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

    u^B{LG570v5H7(h_&q;mh-k2FL7*Lz3y^EZ6=| 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 literal 0 HcmV?d00001 diff --git a/Example/Ingame/IngameControl.xaml b/Example/Ingame/IngameControl.xaml index 6b03eae..88c9c18 100644 --- a/Example/Ingame/IngameControl.xaml +++ b/Example/Ingame/IngameControl.xaml @@ -6,21 +6,54 @@ xmlns:local="clr-namespace:Example" xmlns:DamnOverSharp="clr-namespace:DamnOverSharp.WPF.UiLibrary;assembly=DamnOverSharp" mc:Ignorable="d" - Height="680" Width="280"> + Height="400" Width="125" + HorizontalAlignment="Left"> - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/Ingame/IngameControl.xaml.cs b/Example/Ingame/IngameControl.xaml.cs index b3b6579..0885dc8 100644 --- a/Example/Ingame/IngameControl.xaml.cs +++ b/Example/Ingame/IngameControl.xaml.cs @@ -1,6 +1,9 @@ using DamnOverSharp.WPF.UiLibrary; +using Example.Connectors; using System; +using System.Diagnostics; using System.Windows; +using System.Windows.Threading; namespace Example { @@ -9,23 +12,39 @@ namespace Example /// public partial class IngameControl : VirtualControlBase { + + DispatcherTimer timer = MainWindow.timer; public IngameControl() { InitializeComponent(); - } - - private void VirtualButton_Clicked(object sender, EventArgs e) - { - button.Text = "Clicked :)"; + timer.Tick += (sender, e) => UpdatePagesInformation(sender, e); } private void mouseCapture_VirtualMouseDrag(object sender, System.Windows.Point e) { - if (mouseCapture.VirtualMouseDown) + if (ShopMouseCapture.VirtualMouseDown) { - this.Margin = new Thickness(e.X - mouseCapture.ActualWidth / 2, e.Y - mouseCapture.ActualHeight / 2, 0, 0); + //Debug.Write($" -- XPOS: {e.X} || YPOS: {e.Y} -- "); + this.Margin = new Thickness(e.X-this.Width/2, e.Y, 0,0); + Debug.Write($" (( YPOS: {this.Margin.Top} -- XPOS: {this.Margin.Left} -- RightPOS: {this.Margin.Right} -- BottomPOS: {this.Margin.Bottom} )) ||\n"); UpdateVisual(); } } + + private async void UpdatePagesInformation(object sender, EventArgs e) + { + Killstext.Text = GetPlayerInfo.PlayerDetails.totalKills.ToString(); + Deathstext.Text = GetPlayerInfo.PlayerDetails.totalDeaths.ToString(); + Advancetext.Text = GetPlayerInfo.PlayerminigameStats.lockpickAdvancedSuccess.ToString(); + Mediumtext.Text = GetPlayerInfo.PlayerminigameStats.lockpickMediumSuccess.ToString(); + Easytext.Text = GetPlayerInfo.PlayerminigameStats.lockpickBasicSuccess.ToString(); + Dialtext.Text = GetPlayerInfo.PlayerminigameStats.dialSuccess.ToString(); + Defusetext.Text = GetPlayerInfo.PlayerminigameStats.defusalSuccess.ToString(); + } + + private void Close_Clicked(object sender, EventArgs e) + { + this.Visibility = Visibility.Collapsed; + } } } diff --git a/Example/Ingame/overlay.xaml b/Example/Ingame/overlay.xaml index e7278a8..455cda4 100644 --- a/Example/Ingame/overlay.xaml +++ b/Example/Ingame/overlay.xaml @@ -6,19 +6,28 @@ xmlns:local="clr-namespace:Example.Ingame" xmlns:DamnOverSharp="clr-namespace:DamnOverSharp.WPF.UiLibrary;assembly=DamnOverSharp" mc:Ignorable="d" - d:DesignHeight="450" d:DesignWidth="800"> + d:DesignHeight="450" d:DesignWidth="900" + VerticalAlignment="Top" + HorizontalAlignment="Center"> + - - + + + - + + - + - diff --git a/Example/Ingame/overlay.xaml.cs b/Example/Ingame/overlay.xaml.cs index 3b59ec0..e20f23d 100644 --- a/Example/Ingame/overlay.xaml.cs +++ b/Example/Ingame/overlay.xaml.cs @@ -1,8 +1,11 @@ using DamnOverSharp.WPF.UiLibrary; +using Example.Connectors; +using Example.Models.StaticData; using System; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; @@ -13,17 +16,22 @@ using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; +using System.Windows.Threading; namespace Example.Ingame { /// /// Interaction logic for overlay.xaml /// - public partial class overlay : VirtualControlBase + public partial class overlay: VirtualControlBase { + + VirtualControlBase ShopMenu = new IngameControl() { VerticalAlignment = VerticalAlignment.Top, Margin = new Thickness(25, 25, 0, 0) }; + DispatcherTimer timer = MainWindow.timer; public overlay() { InitializeComponent(); + timer.Tick += (sender, e) => UpdatePagesInformation(sender, e); } private void ButtonDiscord_Click(object sender, RoutedEventArgs e) @@ -31,33 +39,38 @@ namespace Example.Ingame App.Current.MainWindow.Close(); } - private void VirtualButton_Clicked(object sender, EventArgs e) + + private void ShopTitle_Click(object sender, EventArgs e) { - ShopTitle.Content = "I click it"; + if (MainWindow.Renderer.MainContentGrid.Children.Contains(ShopMenu)) + { + MainWindow.Renderer.MainContentGrid.Children.Remove(ShopMenu); + } + else + { + MainWindow.Renderer.AddControl(ShopMenu); + } + + } - private void ShopTitle_Click(object sender, EventArgs e) + private async void UpdatePagesInformation(object sender, EventArgs e) { - TaxiTitle.Content = "Shop Menu"; - ShopTitle.Content = "Shop"; + } private void TaxiTitle_Click(object sender, EventArgs e) { - TaxiTitle.Content = "Taxi"; - ShopTitle.Content = "Taxi menu"; } private void SquadTitle_Click(object sender, EventArgs e) { - SquadTitle.Content = "Squad"; - SettingsTitle.Content = " Squad Menu"; } private void SettingsTitle_Click(object sender, EventArgs e) { - SquadTitle.Content = "Settings Menu"; - SettingsTitle.Content = "Settings"; + } + } } diff --git a/Example/MainWindow.xaml.cs b/Example/MainWindow.xaml.cs index cf485bd..a9565cf 100644 --- a/Example/MainWindow.xaml.cs +++ b/Example/MainWindow.xaml.cs @@ -21,10 +21,10 @@ namespace Example /// public partial class MainWindow : Window { - WpfRenderer Renderer; + public static WpfRenderer Renderer; GraphicRenderer BitmapRenderer; public static CurrentServerLoggedOn connectedServer = new CurrentServerLoggedOn(); - DispatcherTimer timer = new DispatcherTimer(); + public static DispatcherTimer timer = new DispatcherTimer(); private CancellationTokenSource _cancellationTokenReadLogs; @@ -56,8 +56,8 @@ namespace Example BitmapRenderer?.Destroy(); BitmapRenderer = null; - Renderer = new WpfRenderer("SCUM", new Size(UserPCSettings.maxScreenWidth, UserPCSettings.maxScreenHeight), new Point(0, 0)) { InteractionOffset = new Point(8, 30) }; - Renderer.AddControl(new overlay() { VerticalAlignment = VerticalAlignment.Top}); + Renderer = new WpfRenderer("SCUM", new Size(UserPCSettings.maxScreenWidth, UserPCSettings.maxScreenHeight), new Point(0, 0)) { InteractionOffset = new Point(0, 0) }; + Renderer.AddControl(new overlay() { VerticalAlignment = VerticalAlignment.Top }); Renderer.UpdateVisual(); } @@ -75,6 +75,7 @@ namespace Example GetLogedInServer._currentServerLoggedOn.status = true; GetLogedInServer._currentServerLoggedOn.serverID = "eeddaaf5"; GetLogedInServer._currentServerLoggedOn.apiPort = ""; + //UserPCSettings.activeSteamID = "76561199205876580"; if (GetLogedInServer._currentServerLoggedOn.status) { Form1Module.CurrentServer = GetLogedInServer._currentServerLoggedOn.serverID; diff --git a/Example/Models/PlayerInfoModule.cs b/Example/Models/PlayerInfoModule.cs index 5b6a6cb..6d53ab5 100644 --- a/Example/Models/PlayerInfoModule.cs +++ b/Example/Models/PlayerInfoModule.cs @@ -25,10 +25,26 @@ namespace Example.Models public int creditBalance { get; set; } public int lockpickStreak { get; set; } public string lastKnownLocation { get; set; } - //public Dictionary> packLimitJson { get; set; } - //public DateTime traderCooldown { get; set; } - //public DateTime dailyPack { get; set; } - + public string minigameStatAllString { get; set; } + public string minigameStatRankString { get; set; } + } + public class minigame + { + public int lockpickAdvancedAttempt { get; set; } + public int lockpickAdvancedSuccess { get; set; } + public double lockpickAdvancedTime { get; set; } + public int lockpickMediumAttempt { get; set; } + public int lockpickMediumSuccess { get; set; } + public double lockpickMediumTime { get; set; } + public int lockpickBasicAttempt { get; set; } + public int lockpickBasicSuccess { get; set; } + public double lockpickBasicTime { get; set; } + public int defusalAttempt { get; set; } + public int defusalSuccess { get; set; } + public double defusalTime { get; set; } + public int dialAttempt { get; set; } + public int dialSuccess { get; set; } + public double dialTime { get; set; } } } diff --git a/Example/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Example/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache index 8e07b9ed6184636208fc31fd41bea36d843dab45..8816626ed0809202c7d42cceaf55938a5265f281 100644 GIT binary patch delta 60 zcmew(bw_G~G^5qTcnx9C-1L}W=TP7Hoc#2Bz4Fwg0`tlBj0PNf$@zI{ndvS-H51Rv NFd6~r%`%J$JOF`x6hHs~ delta 107 zcmca3^+#%gG^5kRevQcrJRHKFx#=;%&Y`~XIr-`NdgZA}1@=%Wfr7;3?8NlcV!h=2 qytK@8AE>x&Kv8}{YEemMYH>_(YDr0EUV5=!F_d8iRkZO>0uKP&wkA#h diff --git a/Example/obj/Debug/Example.csproj.AssemblyReference.cache b/Example/obj/Debug/Example.csproj.AssemblyReference.cache index a79a21833a14a17629d54f2993d442f5b2fa8442..2daa6f6f86ee64ffc859dbf81ac701307f0f01e6 100644 GIT binary patch delta 572 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⩔%@kR`7mq#4U7PXw^L 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

    9oYT1T5j(%<|Z#Qq_nkyqn|Ccb|5n#MX~sH>NVt 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≺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ȄcF`;%nz znd2#Go#$&Lo0cDl#zv?n=Qsc~hVtqYXRyMoBmn(QgCc3sL7J;&oSI{j;y@?^859}~ zEKCSBa1vVk+({?#Gh}FU#SgqoU%+v)({edX;Vdu7uC>UH&^iJSMPxWnaWSWQNn80d z6LHw>_2{4LNxHPtIb?<$I$#F$R`klBHPgKU@^}R2R)dYa0K3gVLOaW~G!ppqz^C(X zTg`l1`!DF5e*ga6dW&AS%@*N2-=?0+lw`hX%l>>G5;`z`o|`uE8t)kAVN^2YHg2UC zD$2d9l;`ve(=a}~3o|S#pz4uj$2kx_)~%)4>CkHed!zDJeHD=2E#B`SQDfJ)%41k{ z0c5AeBoKU^uUSD?JndxgXjx#XnKXxc>uDH^Nq9>b9~sP(&^7UL*8J z5xvf!__LezMkyPYmT=vo-6As>g&)XQtXp81)xUgn$Y6>24xW0ohT;P0qe9G-@1IR2 zX8v#7!WFON^GUM6q9PpRK^TYQkRK475dN~moFjV|UkFA2cofnCz*-mj7f_qx$f6+k z04Gd5BzI&j158^5lddXWx{gy#*|&g?BFe1eFtLe-i#!%)b7t~n8=!^S{)=^ta$b9; zJZPsw@dIQ@#w=!qeU zHM*}D$=+2m-J%snYc{d=5C14~sM4!EVlioyPKfUEfbjoD64z?(X7#JQw9jFT*Sg6{ zDPR2ngdj3xI4vY7uec`eajkB8hVj~Jn;U4s%hzniTMk66R?u)pkM5tK6}|zs4+=vT zMQ{&=Qme8B$S%-<_)3i$$_eyNn8XZpx{*EtW0w-zcb9m1)bqWf6Sx@Ykdg~OCBD!R z+1~i{#|tO-Vc3Y{wd*y3S_)}n??=W};tnOT;t}Jv%Z$G7*Z2O|B@Lcc>0>v)$iR|f#*xsn+0OAo3 z>MOZPu9SzJJ(Q`a7J$OJLPy zik1EScKf>HB5wI5tBK0fTb^`xqn}kF4u*(2IzU~B_vQ5C4wqM!NyP&i!dtgfr?o}W zG%UW|?_E=4Blnl`8RjGfb2p!chc0vthekbwKiEB=JoyyCJXsFs?M_ZnMB;f)t5Xqn zt0Nf1sg?;ksP-*T_ubU}WIWOi6Kf#9d&IJp#4go1hFD4ToA5WA@axeyAjt30y-%t$ z`*V;KG=qyy%#OQsAG(#d3AQQ?~;r7{&v|pg^nK> zRbIT!Jue+F8v`H1e>Kkju7i4`{8v#R|J8@5RyS(JDpm`3f|e`{5%}@qOpWs=~lUk3_y2dZ@qN3_yWYzDyj(6_J?^>}|en&m29G8AworEdV$! z{{@($Rjh|BDQx>?>52A{ca?!dI?U}G8#n)gl;fe%1!sYtoiaU*r88}t3!zqG1B zJB+Fqyr&oKMJA*>+F;}WhGz8g-#D^)lQ@YAb3Qz``?i+l`@O|WEcokhbk5vLVyjV$ zZf+IE4*@1tQ}5dG?gs=?lap7oIUk_N2b`=2L%VtBa_1|s zCWUVZMKHsGe4S?Wy+V4m_+-aq@Y0OMt!U>auv)~&`gQs2;el`exT%PPC8#QwOJ!xt#)Xs-GaWeVP63gHI?w|XI9c_eoMc5;X zW4c%Ed1!z?U^Ad9;$L|Gq}Zy+-V#S0IN5z1|82rARz28(c_K&1u;ACfQB`GoF@t2n zLus6=b(ai6IG-3_e<7au^zy8-`rDGYcsCIf*FwlDMxa{yt9>Z{p~v(Z`)v=H_X7F= zR5dIn>x&BlRhy9<*=)e;!|Yb}0OIC-lpg8KC;NJf-><~)gx$Pn)rVVRJz#wq5iLJ1#zZ_&<(BE;CI?I^N92}>TR4W%8x!UT{>)@lOP!C zF90xY%6JTgaK&U^uxANyS&~$q`>J|=+vdgEgGbG~EMr%%*StT%3XUM@yKXLxW=d18 zaP9>_Q<;O{088e|OZ6gMfRbRA|U7N0tk=*HW$uL*UAXZk_T1RzR)|AE23#HH8qe_*Hska)ve z-ZxzaaXSL(lYd0PaTbnN(@*5Qi9D44L(0^q#0dZ0Pq0<55S8 zPc$1?fATsfj{(O_e^`#3^<;sL8DQc+=;T-dl|G4F@3Mi7H0{O9Bf5pbXdOA!-zC2n zxN|zd&3px9rp7n5Mjtw3;+>+BMA6q&xSxw(EQeK@A>*C4)-JGqZP8o5qB)V=EocyN zOIWJZZ|Bn;QDZopFeuVJA*NTr6c|z3t++2O^}DRvm`}btCbU)Zh-DABP9A&zeG+kttz%ko~pk@*l>>97`2afqct=Aiv)*XHr~{Zam} z`Qi?o6f0JCPis^h$8}T#s(h)5KVC)Zxj;kc-Bs53bm_S*E0!bGEXv(&58{q!oXn(JP7}p6tgaRZmmE!_7_zcEDuz?hBw3{xx~M<5)c3Wf!-ve}4?Jsc z>?hJVvd^K2p-*n*p>BC0}2w?kC>3!6AgwT%e!44s4eM|xP)91265$9wk z<=2MWlHW54;4lDboOg_wBu(qHP~EKaO`1WtCK74O+q-ZarLwE*7t1uGd)R=FRQYzR z5qxZm1F<8`CJMvd{!Y-WV$F&nY_D}(A}$JvCRMfbl}m5{jKU}`A(1S6<>e!wd(&1o zU*Gth$ax!BGCP6<=TdbC*7ksr78EU0GRo{svZkv;JG3j3G zSMWtoTT0c5A8t)C{0ZkcCKo{cZWclYwG4xbOp@~M9W|5$c~UG^&v~TXZmzS5HB7IX z4;Gkzf@Kd@oYRn>y>e)%r9QNzVv>@dz@jIU<6K}Un_`4Jp_!X2FLebl$EF-Xb}!FP zzwIaJSy)XY(kH`4rNc$p@V7lkx*~Bq;2_Z`clUqmiIi;a90~#Gkt;AXFP83oi_3^* z?z_QzsAjk5f(PZ~WW6M+5srlR0q>Jrr#*~MGMoawxpAk&?(6yI5?Je`4BqUSG}Y}m zwA39@O}lnL_i{$@PKNU%S9kaCP9kVV)Yjd@x^gzF=9Q|5?{SWFR}ve>(#6#Vyg_fm$g@&zuuCN z*$%}MslUqqqf?M$MArKuo^yRXz5Hvc;obMHuSk&jKA=ayXlytZM2H*_6(u*i1Yz<4 zX1rIs1Yw%maIyCta3U&7!0o63#UI-8oaR-y+*~8;E|<(3))huv=fNm7V%&H}Lv>ih zFinJ2^9T`40`GkAka+9@iHlUs3buFWdoQ&MIdIV>x8s3B;@;I_fXo2yM1Zew^}=lk zlms-X!^NHPZjF%wgzOPHp=vea;&*`JpBZ;#hC17;k1he|E%lBoEW1F>d_t3qOYM9C zdYa$CXysbBUWUj{unNM-ZF4+k4}RP?xNTtS0~1AS8tiYKFf^fr7ic|^f~3aQzq}$2 zjThh=nuN4n{I0U!X2KbVr@43QstGKGuL5nE-^${ugZT?)i+Kx}22;o%)r)x6b}OdR z6}G2xmkajh^qIAimGt5Dk)Mu=Gibqm;RbixExY3kv0CZ(&j_-(e#JcXdLsE}+=cF) zcT|?+{&#E%^tJm`p<+&v(&|3loRi-A0nKV`9msj^iq=HNUWzOAzkqrKw?~y_)I3=A z`c*VET+btF_3r{of)rpgdSElmpJyS0zRqJ{ONj=A(A0vS9u)lyf7-r!X7%5KZBGyr#biY~MO9Z19v|er zTP86Gw{p=H*icM^m8IMQ)jh!o=NUKVR!Zlc8ieT9guGW2w9lBeK5t>5F-qF$<|LiY z_bCVvCU=R{`3jZ}S%|P<`2C||3K)VQ90OtjaH;y-vg0c2D9Ax{Q}b=Hb@om;vTiK( z4f@@x%W$-8cSnfGC?B?S3Cl<(u^ScXdPKBd9^!V8$sq9)Ofta?(bRXaku<|at6tH9 zsT`fqo+PUq4IGWxmw4+Riv6N9{>ZcD8CcFeXLWov^hO^m@c@XJKq%)nqAd2~P%V=NQ(ug-uUxC657|7fPF#+g4$S?#px_nzn67PtmX3P5}E z&dlJxG8RK$&hjo&OA~e1xk1qGr36}%v{S4?%M_;ks;BCsyu1$8S3-Z%e36f01bHf?mc z;zR9VexWGZyUEw+zM{ECM}k?d^q`bQnQT9;(>tFIt}8AGHuJz$VPe$E9Lx)bIe7{T-3F!=Es_|9wd}`_FTez7%V2KFaSuPOBL|u4N(ofd zaAYIjKEutSf1z6nXg*|4)1{wL3+GLWdD+H)2IM@xyS(e87i zm8GT=A`n~JNUw`>m`H$UNS-Zq+r9JAz@M#eC#>6zPw|piLeX_L$qv1BD}(dYEfvX0 zinoD84Z>p(-OS+iwSy}t%trn7iD$|jXyJ_k^%DW!HqhaqD1*8kpk7qePV?HH1Wy-c zqTT_aOsnz-u&jj6srtw?;x#wbM1~o_BUduTI|p3|9L$fc3GK1dqj~1@3S_Q;{2M2} z=v;#s8#}S`Mi@C5_T?boLnwuOzK9>Rb#pJxW0!tw)+wyrseFh7F|{R^A^+(}-tEEr z#3vS3ZXn132yM=}`W0=jTeMv25`EbIRvBQoK;lYl0oT>0kQJP=674L*0YheDz^ z6a-LKLKCMp_s*%l--hRxD=-V<&)L}_L8+Sdr$>#P*mDQ~T#%0xPB&=*Z} z8baSJZH|7@;eA8x*mk@n^R$;h+8MRC#Uz^QcVxCR_6Kc+m1#R&l*X37Zv~r)op-# zh>`0;;>=;N$ESUN7Iv)-7kl=FkR`1T&fw~F9xNnvi7 zf88;#ioln3jzuliJW%Gz6itn^R&AvR)2$rTCUsx{&!PhsFxQ)08}B}VZ~hOIA6ErR z6FKD2iXZjE9$ZxaEj4BHv&J&j2<(984A|40CxWt_Qz+A{)tlv5!G^%YczsZs+v=Mi zPlDz3PnVvVhC>?B6u(50aP70gU``DizV5%M?(~IMxTC53Wkbh z$@DNuCs-zB{ebjswLuX%qAMlj@)!gZ_6TTof=@nCEY_Ool6jhlQt zRNWo^nxqF@CKGP1=HMD2wCd z0+_=OnR@LY2ofsdqoW%mgo9mc9-m- z7Oa5#36}mIX-k10$SqxU`*0mh3qy9!ut5rG#LIVKcg|foVhbd(u)cwI2viuMPeEE_ zX_g3tj}PlO4u(0ZP6|`w_`Ue)T9df?`*TlEPZ-z^ri-U%fpi9vfz+x|s8XKCC?4I` zo(PbT_{=_=7xOXH=fsV-^buq$G1R28*K_9aofGN$SvK8hMR>cv%^|8gM>IaEh2p5N zdB;Uyrd*n|*%?jr!^U1=8RW4EL9#HIdePBk0w@Se*V9_t?J$%ZkAZ+^gKHYU$ zCtc|1S2{?{9bL+kzNS3XhX7%6A#eJK4HiXU*6+S05gG~!Mr1D!x$7>#p{|pXG;i&# z`G{HO`1Q>vw{YipodKYGVX03<`NPbNkb9;ugb^au0hfdcO-E?57B7U-!QB4ZLS*o$ zeF9!->8qTVFEX1(+gi^05@UtDH$c*9_px^C>|9$V8-_{qmjT9UC{%~bvm8`zs0CcY z11m^YisAca*+o=AkBCpgQ*X)JGaFe9@?Y#jd6KTBsd!-LrqchtAImdzoT<|m<=(j9PbMs;AaKip35MIyg|6V^~g^-~k2gQK9h4$R3CTd;( ztZ~q8G{>hWKC4HycxWs4YRnT*(p_d`d`EJ@I|=|muuj0l(10$eeC*c&92@O5fjO@h z<VtLQLPgweCocRMF#L!OR+#k4SvMgObdVHQNupU4vSn6JVSk z9eqCyX-V#G&7Y{a{YQAR$SzBJaD+hh(b{a6_=*yPcrI)zT>wKlv+HD zp#z6y3gu0KOFK>|d{wEcWMIW1WDRvWbdF{sVES8&&Aqbt1S621FYWpKEw-eumI$te z4GzdmD1+J(OKd$_jGHfgNuXe`&`KzBrXt(rYtfQ7O!^dKcq|UUpT!ET<>c)BGKC2N;hxgiCv?)~-78a5Q2X zW!dUz@bOBd(+EMQsRht1dK35U%+7)!8@aFPV8}!?AJe56X z#oN;JDJeVzjlYkhG3Vtv>|_&H3*F{1l%i?(_8w)`3n1?BD1N+thZ7f!Zg`oFQC6QW z(+b!8OtDOw=3NTA8G3G=chAQ^LsMZ>>>A0Su<@v)b$hQLUHx^TGIh=&qeqXL>Ou2) zd`S0DR*Vr&AIq*XWIDj_VVcNIv|K`+0$>7$vWd?u6v#BS(KUag=9lj@&v<5b7|< zYMiET`EvieM>v@p|=uNzE(L*Kq#NDqP~FjjpD>(*WWbK)Xh6f{)M=6s;-xG4%C$U zjgOO-CIB$a9RxD-5IIjzC{LK(w$b8M1_i3Jk*8_Sx^-h0RA$7>ztFyX_QzZ6K+EC{ z(q%bC+8aP>V1!x@MwP6I^*+G*2Y2}ccdTUr)!Z6Z)%w| z_QPg$S4`WxVZCut!qgUC>wMN81!8Gwj0+X5Tb`4D7C-gEu@2K|Er#lL2cMRnJNS<2 z>Bs9usDKSeI(yk_E#wzHz4YJBEF_k{52n&H`=HNlsy=8ycN=5qJZUo0)IHaIDC4;T~b@)Dkt;avVjh z+0MtYZso`4aZ9{Ulb56%OeUwy%-IIjZNR_Do~a|fP7e-0wSEx%Awb-0k)b%KsKfe} zr(lJhJ1>UV`1?21mX}}C2!(#h^Ghj%tQJ>%F(qwj;C#db2#&E44%SqPG_pd~~}rIH^>n?L8vSN&N&^WyTTa9N}{F_+pGV@U&oa-!uIoTwi?E~^FhM;?T`s&KwgR*Pb=V+^c;(LGT+t!mQuY*hrbFm~Bx(V@JwB?lRb zYXqUy`rblr9o}bF^Lh{v3VNe2)l$8yH`{MGMN>-XZrUhve&UG0gluEl5#8eHUIcwY zZIzuA%L$Ixz#{D3uH<=aigThrb~>4=sq~-ED*}m$ZztAUJ&fUWY%p2epemSlp=;as z$4CJCp^bv|_a8yWP-Apd(Mf!BrgB{rkiAC|Vq(=k(;b+eU@m9Zn|- z71$Mnq0oilEB;RyV4lo*CD6Bb6XY2$MMAz?FYmPag%KS5>W*n4$P{n`>5o5#yhSaTcGxt7V#p$?Av)vs9h9Y?4Q4j1EqeqY| zQWLXS?e4n=1b_mJ2Hy#F1k!>3!CXmAN9 zD2ikLkDz?@9$)s~il>p!I}^i%`#P7_-sO zm5%ts2*cXZQhqM@VrD+@(7i@_@w?-1E3QgG@%lw?ov@fVmT^ zS#5CvfzZd)=Ud2H?O+)XrFZT<2c>E3z`;Q+*5@vCcMl_DyPht2b41AL^nY1=F+H&* z{Rn$&=Z$a0#S08lH0F;;<&IxZO?ae=u6)e9q`IMi`tHo;Q0#eQ&SykvpSoo2%G#cR zPM_ki!oZEyS1|kpLK**sA#YO%m;;Y`SkadHnH+?yQb^V<#{5?#oAdY(LRvUDIJiN^ zpoEQ${dAu)=aOS-d1?woS%vc`S=DqNN|LAx7+uc(bBJ4y7SGl_$5DQX5^9nF8X zh8=$=CNEj_w*H;rl_l-hY@?*DctAJZgeJVyHSm=K3RDjQFyPfxA*(b>vt?&g7MAwhdlG^2N#oKT%)6- zF^VR*%xkSG8f{fb60yAwFGc4C1qHQ;Uer1-IvPy+V`ML)lJuMak;#x$zD{t@Qz0Je zrF*|Gbbr(ky}`x%?E^zFk=KP%ns1`l^L2erf`z(~B{vUQ{I>*B=F07QgC>cmLiu)D zm)LZM?q$LR4tRbEmU=u?@T&IQWcXU9J>=tR(vPHbxfZVt_&XUl_;>{DZ%plUcpqQ9 zFzo~~lsf2m9VP-rT8{84Hhq7#sFW4e77rz7n%YQZ>v~@K4fa+)FTte7!4QhMx%&u__v`cWEx6rY=K#`8?#10WJj_7&UF_ zqJ*9svI}iD3+l1T8g|jq8MPO=7jvgbYl__{{bs*}bq?Cn#ANF_uGV=(bhLFU7Jr|_ zYDe_4dEbEi8{ui=k-WKX_&+OP>Qq3=@J4?*8Lz=4f`aG?*|KceB@nlPSUE|#)QA_j zX(_-!2bebGMd=R;-;2TVPAj-^A8iX(qilu*8Tmg@jlP0OpVs!q?~KyY(D>bN ze&zhsGf3bGTHp`<%GsT?y5id!6naIvdc1F({k@qG)iWjgq71rFk7{?oM+UmK9sQW})8d|a^$dlc5m2!8^T9lXsA(3%?9yZ=Qs|jD{jLC}=k&{R4Kk9T`Vv_n5 z5(&g@OBBz^twpk!#c56myJ82dkKX_dr{7`Mqt8AKx_#w!&l{05>4dIqAL6OjR|}T4 z$002C8WcdZh6w|61oLR+#YC*fn0L*Ts8roj*DT&tba!M>UV~&07A4m@(z{cCy+&!K z^8If)<1cMu=bTMl@NU(_0ZE!8;`@UHOQqYYuCZa_*qO%TH^t0+ zI8DCF_oHchIl3&UC3}7orLG%#WED4zB3sDMkGt^Ff=yVv=)pJJ(HJ}l&b>=05Qqbq z&?4SpBdj^arS$FlZNFu45S9S!j}cAg=W80cpjMX__SK9_fU6?^yQ}PYu1oSQ9{icP zaN)eD7xhM(q}Q5>2=Y|mPcZM?+ek+ZiZ44xuYZ9v@`y)vy7Qo{JAG}7re6FFPTF4xX z`AEPN7s|;xgC`r9pATOo1WIpV!n;DLAF5*~x)W#eUb*;;oJ>YS;@ncof)HbB-%=m! zx~3B^B&zJ+=|z0)u7DQ@jk(P2nN6S2wIL2vKBe-Ib*-3YJQ}a&$w{zcmC9}1+S`O= z0r_86ERq}FN94q=7&EKJ?@m$lhUv71bsSECz1=qN3O{UeHbukDySSy-=K z9`|YZ>{_GU8L!<^>0p>jdrwdSOUAZO@cp}9<#KlF&+4{PyMfQRlOe*-&wr3? zvcQ2y(mwm@9Li9~W{N$<#!gdwFZ>g#3sGZ~%Fd$Rm9`;5 zU$LBr6jBQL{N&0t#=^&Ad75f{SxyAWIT}o?Auah^Qiy;2#S4u(Ei``>Q8IF8GuvMu zTmn2bo=*k^HR>Y2&B?$OP$InkQO2X=sYH-5oWSr{Z8*4bvtUmtA=`znz%dbki8fM< zFOc8NgWFlQ$sqh^eUriEub;468!+n{mGiGcz=!M6i-UoucSG=V0C{r)Md)}7TxH0s zi?s)@vlK~jlx9?l?C5LjSh3rubPVXQgC$IdN)DH06ED$KWq=T_$+#*zh|W|8!X~{)n2@Fy>B( z!JsgUNPR+)GlT!Pm@gHlG#1|X-UYdVT!oVC>HsJq;`fqt56`}DZzJ1t=HknEc+sRV zd$`zpNPDyGi{XrxE89gAY<1V`W$Y}OMhUER9U41~6_qxmH!s}AIMM(J4R#5@M6oko zHRjECb`qgwb(>G&)>JErcHHqt9!K3t-=TSk&U*%Tpyc+ycikf1Bz0V;!W}wYuMSFuzk7dvlGi^M37N2zqGV;Z&3T9(V+NS z2Sc5nGzb`YsbH6-!g2)_k=cBBC{7g_%6$5LD02zPQZ=OO0OrqX*S`Orn6T);enWrg zfA2ck`RP8+N~>?rI7xGYaA*oeI6+pd%$i>A_=M>!H#;Ta1nTXVn^Vz7#Jhx-Z9j9C zrG*REWNGVs{Fy&cdHvsD-jM3KaG+wX4k6LN^qMZ~#R0x!#B2BNSo5rFi};xw#((V2 zKEX)peVgm?md~N)`GuocE02?$q6JqP;b>+@CSsd9URks|&!RDC$*O&E#5i{O<8o(> zw(N-Lf=`u$7Xsizz`PLJdiIU<)M@-JJ`cIVwYI#~iZOeN zPF6W(><2#gdVRgg4HL3iShSJs#T0Hql?|SSFLITkyMK>N*n;w{wJ)8(M(B_EtmKHB+~5}uZS$Pj)dlt&fJuH+NUk%ch4C9@y5N7@D zH{W>p;<@%(i&R}xZrJ{>S6c;g;nCO!)X_iR)6z&X7mlo9SlU!_$I|0CYiLX6N_mZ2 z1VM0ezQRL>L$N{dG8Sr9r%PKNOd>AHnj5T)b6r~_y9hU{YI*p z|31#x*d=3~r%!_>sOpR`wK}% zWHuZxDprI)DHc7R*^ei}eog4#hWer_Chs`-tl7gDb!)`qGi&>7UdYruQ3A@IpF*FQ zI7fP)D?Cz&01xU}Nv|!GhcP(lRX9ZM?6_smNsEiOq~7#&-rq2`7onB^blDsp=(ThH z6E!x3oN~Z?LIf<;`h{OAbpuVqW`e5Hp%~T98goE~sZ!i>$gKx-u+^!-Jv)xQih*8DqBl%Di-1WzAv@o3Q#W^I zfBCF#+(GJjEW;zG$TdN#m@=C-!$;u%+JraTp(b4~}>a_psIPG}>NaRlFwHSXC94$x%9HudS{d!@{)+4*x$7{asyQ*8Tk$U+3F{ z0!mnv@ZTvkqBCvQ{O&w%TC3emSIr%^`?$)mJtvI0%$}KW&EY*F^Hf6^Qh;Ik_-Kn9 z*8;9o$-bfeckADcwK* z8=m-CC%st9k`4S}-^C>B;QP`GaG25+NH%oQ{I#y_S!$!xJZi)g7iJ%t?LKM_@Sh`F zpZZAjrA3vnAH0r{e=IEuK%BvORF?F8gtzfXgkRI)BHC;IrKmI9!W8luR=2)<2<^T3 z-T2!6HUAx%!uiXAYR0QUH!x2k@$X3}6D+43C;pJXTVXS{fuCT4Jz7RK`H>^bR5jmj zC0^M7ZLDy*yDa_ zE?(fJe(|A+FXTYD)Imq=_(GtOkbZ*cM+4IuBZ$-F9_!eU#I+Az5tndT{x$PK?FGvRj&juA zwOf~5*v}Ey7t|JsVDHMy3~mx}3^=;a{dX6C!TV-gEwQGUHQaiWI8%K&jYtM=Gn3*QH}q!q4cG3!$=BAwy+wTYA6xwUXNbcF(jauHz#E*Ev)-sJ zjws9R$mnUDcA*vdJL7wD5aF?ODwRbf%Fplhd$ zZ(2Ua(ZIG+{QT-#z_fNY-dmo5_o=_U89*2lk(is0-cTzhcS;>y8+Z0$s8t_a8+u;P zFq(Dy+6iNm_xjP$eX(vlyf+b+Wh zLz^kr{XTPV#n|<(OR}VxTwlNoz9J{fP)xYcar?H4Md@7Oy%=;?<6W)oZte0ha|jLA zK~$G`CZ+)bKPXrx$;~vr^wsZ4$cUo6Y zC9v>I_eOob-%!+IpzkDV?c4aV}?>t{3t5GsuH2T|?rg6UPnS8d!Rwo0t% zzEo0z1;-J8Wie$g4@x5XoB1oLmF;Z-uzOrt;e>i222DB!JaNn%%0~DcD!w_-FmZr7 z6&rQDabF_k-+QF~?>&k)schi9Yr}hM-*m$n40J{0JUn{8!0a5}TzWhztM&tAQ} zBK_Qb4WV|MszSHkf-48MjBWwt*RoG1fA=*KSVKrx1#C-WQ;Z;R-a=60c4jSass-nF zu3Qz=Nx-16LX6p#b}N_-chIcu_OPSmQ#z%;1KZLz0>C3E3-enZ8;tzd2t)BS76n=a zqox3QKy*DS;l^3q5eHT-T?e8;UshY};^Pw`+2``}D<$Ud1XjpoFF|n!RS{TVIplXD zDGXtm>$c_s_of?RE^GL2N8sIt1-!$P(dhNra0wGmdP1($rw*h=4c<3 zBz-j7`feI)y@Wa?D_w6Zx!>W=o(V0%lC=Cl?5`J@KRZ{#MZU3Idp@sM^ti!L-nc?o z1scw8!WVONf9T>G0=<2qFM2(~gi@!}_otsBrG z6~c5Kp_~ma{NvwbNun^bHdHPaHPo&#f?f?tajfFG->w1PGzR1F^8&9%6y;Kh>$L4i zKA59laPWgoDy%}8G}6#Z=KxphI!AkD-!kukP76y zEL3f^Re4RMMDxsU)_}1-=kLv^tXeyV2{S~J0fr4wrWEa9OW`|wfBt>&FnHEGjd>Zh z_~OI=G4&hAL*Yov!KGriHyTo)<Qy(96iP=(3KjW~}^ zgT2KFZn`anwl#&ez?oy%bkbF(c-azr^FLp+vFkih$WY=+RG8Urnq*o2CBY&x<)vV# zNL7|4zPKIB^3m(%ql9p%niH>|O!i57H+7Q)t~}pzOh3~ZVv#I_BpSY?pRv7cEVrldnM)~)%&DONgGioymkodCLFMsV z_mKbZr9yR=M`Z?k6x@-cGcYZtpmP}rw`|cJ{3LX_Mlp}(F5_|H6!9dXO$k*z?=p6^ zz^Cl0*m#{6MNv@^tji{DU4sj6Ap8W?xgOK~$#$uwoq(~DFl6iXX!d{q10Sg?_}Neg z^!v8!UDvoor*D)Z*DwV#uLb0Db_WWrj2a7wTgU;fd78#utA*Lz^pAt9G3Ci$f7Zu6mDK5fb?FHeUl@f0{?^*YH=0%%lF`T)_i31ISi(7a^H-Ql1E{C_ zN0qt_oo>CwV*yEkG4Z+kIe#~fS|LSE6abzO!;Zm}R2fdZf>~E18aDP#dw(F( z48z^p4Y)N|WCx$a- zhswOYWw*vMQxwjaj4-yDbyunY0wGQhEe|eW0htU}om#j$5RZEGeOeI|}Di{Pio;2A@w?lCX=0 z3RQMamuT9YENTCzdK1e~$>n=)`a!$HNjTFL35Cw?tCPyoYmGMLCM@BWXa5HnA)@jQ zv@!40F|E?8zgm2cr7Bz16ZKZrvg+rREyfni(B}+ zHzxSwOt&_&5hf8g4)mIHtIO*zAr}f8yMcXYkATj=%9C}XGZ20YNnhmUv)@rFp6g#X zPum91_gckoP{M3Se!im_rB;VpTxXv1gvrbzML7DHmPv@$L#4i&7rM^aV;4hWR&+82 zmu@}o^I<&x-pe|^p-9?bKDN+#Xgi!cGQ$EMb_52!d2Z#PYl%sxj*gM$8{$|aIj*Ys zk=>ysKk;h)n(38VoR#=Vn(+o720#|x-_k$($v>%SW&3$Rm>I+i{&>`-RP}E2{wF~F z@JxS|7(inL(hf+LYCGCh7HtffgZ)mG-^0{D;pjHsR9;TFVYfB}!*nEyMfsK2C_ zHGjmB0G%KfdBRhke~aH!Z{WxWKM`fW3`C1SRRnVV$UwKBMEWu=(=;t>5xx zkFcW3aI|Q?eWOstm|A#shR6T!&ZUut6<0X)As7BC1eF)rEIs=|M+i%GME(;%zq~FE zn6=5MH0qf!HF0=`dJa7skUJJBB44O1*gHI4jO**(P$$g-01vw5a(50?k@OUv3lK-r z5%c7tO{4jfI0t*(S|TJsn)km?{*bKWI+^oWk<@TfapZmD8r<_^UR^ZSTV#bJ(wG9g zEGt$~;VGg&6rL7UYxAaXO7Mn}$~$$+&2t4F%x_kAZ61^DU#Q&jHFFz61v7LTe)&dzUKK?oY#pJIFiU) zm7hL)yJ$O5VVD1SGfxQrbAv(1xscOf*BQkFHK_wzcJ+mccHc2G^ za0;2K4V;*MAUsGGcx}Ga>e=I7O#I~JzHDA&cB?xtd4>fwFr2SECZ^=J^v2EUF{6yv85LNSb*5IW_`Tq10Y zVdbcHyu8!B+N>9-4|1Guu=+ij{*u>#MGmi;0 z9I^P6$y1U2cd7Vnjzz@HztrCRC@KFe$+5(h!ueKchDp~qGas3ONP=@~;AKp_F=vxDw z8^jlyW5S^bC4VS7d*@gMb?UtQWZ=5N_gcul0$cY$UIKlFF6m=04#|R(iUnI1$D%_J zT7j8MJpKpa-7NP>;$6=wC3cym;5}3;Dp>rn~AULa-w>r2*`ixH@A9 z59tDg2SI^TIu#r6{Q zT?y9VKgnNDEK~&wsl|Gfkal^_IbXH2v@2btXK)lT8aD0f!XqckEGT(SoO0^igD6 z)xzKUGH^|KTJkY?R-6%(7380kvdt~}d(3#Ai7-8QE5LW+mfYYG&g!9a;a`Nir?;hN z?^Hp|Na+XNAD34s6+A`?_%v&s|LN77B)vIJ@r8Y0nyuRkehCIcICeFqfPX23ll%;g zR6;uf*Zuddmx@W~Pnjm(O>cLb!9>*p?Hr4pyQ=@_gHMstcr-Q6wP;WT_`@VRVczHc z7Af~H6pDTZh|j=ma}&^4XbO`*Ec#`AeKHs_f9ti$Vn&Li$S%l$2^WuV$TLr*X1p+V zmVbhGX^;qU)!4+z-Qd4yc?b)P8BrQpk!nVZ61e)VwN2Cx;twzSJjw?Y`{}E=fmiqCQ9M{2f5MP{H3{aXZ1I z#GpjH?ILm_|1vtQMMs>0r|#DxV0pX+HbI3_&Glt9mYpoh2J}>OVutOOa~-BB1)g$z z%NHv|k^GoHaKFLscw%^W{ng+$%{Kff8UN`9k~4~`$U%5|pUPoJ>eSvq0go?mqp@!U zzdP*UDs7zO23^U>ytufz!TLO0#lL&mvh(>cHT=Le>lc0v6Alyi_s!CI6yuj7gM;=5 zeqD;-2q3bGta))&xG}4B&a|c(Wc2|baRiA!MI_bfLcI>OQ1VzQ^clS}D)R{;{w&8+ z1j5()C(D)wj#N=GpXkS`O)#tg2^<`#KtBox+Z+R_`Om4@=&%E@JB+}}t;O^|ra3vC zwA*%rdb|vmYx8Of-77T=W%p$4t5Ii(h0|t1hM}B>Bg=?1Y=U7_r;|3*ZUvm?e32M8D}b7v2&J2d9PRR3|)2c5YwRS>_*eUJN8TU z#1q{~PsH*f08Oxr)6N5pQn9el#B6$$6ejPrxJK5zUUsRD{t2qHY~&m-J+W+#7HwNd z5YcQ4athJfl?Q4X)&g20(dv&qV3w5pQ9sN<=e<~NyQMuMHnUNF%jKVFNQ8cAaLgytmZNjTx50z)4-QgD!yxWTXn-*^**Zm zwyJj-MT!jWbH6X>OIDiO58B#A{2JlLplxO%ssm(W#snDn=+0tZ7T4>Crm|#RKAuVF z*DS_2m2hhrmH0xd#nLE%{J>%RrbzXS=>x`cWUD9wTBgoFY8VpkWN!% zw|ES?-lWS?c=7rk$+Ydy$ugJrl69@C`E#xn*TvmEJ#(Y}0o(%{3K3|n!8Z&A9++dG zNqR-4Zpw4SP1j4ZJKPB|%Vy|raAn!M1bvQyC}!CCb(2`?;M&i1SvPLgflwzqILH_x zG$0#}W|{iYq-HC-(8F={tX+-rPNQZjs~slqXV=x|$rZ=**D}x3CI_7&`~8SE{9AF* zR40V(!0FkPb+n_Al?VT>$1oR7%_k*to2(L z$`v+kJ_K4CO79Wem*>m@+9bk=0HTxgUIyQGghgEja)r|aNQ%bI5i7l0Df4v|dbCFy zL{|fnm;4TYvS3D!RfkvLjPVk#Q>0$5W^_bw^Tm0LQs~{2EjKN$lJgGWGo-FtV3Iv$ z_~fIxJ92EhN|s(UBt5bYqx=J{`dS;!IhYV&sLppLNdEEvhZvc#h{`BFbYRWPbbR_p zpr~37BobIdjC)h^{&|}A9MOLqA-1*o4mdk^XSk_i8NVHFNRJ!glZ$D-%hAK@-f5n) z%tIw%_|RA2T@FZdw2sIQ?I>x(C2c)uSvYmZs-2heJY@F@P;o2yK5J_aW4svX^aKN< z8rau?eAMxyJ!;sQ^##YL)7vt4w>WyY`<9tm>V*?&sJ>7SgugCZE?ttww0ToVEvoBJ zwy9IXnK=SbK}xU?Ejl&CT{JHqedD>70SR}$^KdC`cW6fN-SlY1t;jPBd`)_K_ zgSLX=+3uaKGf%tjRJ8$ceKLj^g?5cg*z}2I5PxU~J$%CU!=xjdFM{^e{w+q)vQGz--ovN^e;GO~|bS7x(d24y0bMrcg zQ_klg%EaPJ2c1aZAfx*D2-YO3lG#L%*|6J(r8h^B>!$(%#Wp!U^v##^Z$lG&O(0u*2qqB^5Lyr`8R(864USd=^LWbd?kXW-Rnx}`6})CjUwQw{ z_u0*IZ;DZTjew(O*?)`xND4-tp-8r$WlVM4{@o)NMFgK2Li>sDVLIdRVu-;g-XXzn zL9>b=3R}VgLm3ztpm8)OGZ1w9mg{fW{xqpehYjB=53d`6#F&u(VN9cV6HM}ehZzQ> z?caX>)DQn{d{4Tn7@baUCq_&8+57&dO<0)w>Q?4oj*!Et|6PZ)9iMS(dpfp@DgxX5 zPbmxfmqzj-rV*Zv_cC}^%|7N zUr~=9?q5O$Z<_Gv98Dfa1GsZW#yLw^HA7!p%e#CsZ0G^thA@)>9w^-N2g~99XI1D+ zbg=y}7V1F=~PI{8+bAbJ7rNMq)5a78aOMR9EV14Skw6Mgo9O^RynA}YOHdaMd zJ=1od$tT-iAN$M#ViP49cKPTxyAP^ywr3|~!qj^b+rwj_aG1^5EmUYWe1#rNx+7AcSf5x9}Zqcyb!s#6>z zU{v!@3Y}H%xx1fNRaRC;GCDs)wF;$zZUynRZIwS{?cJuXedN4w$n2zc3C*nKyO@iX zi5RLD!ir#8x^~l*q89miw3uMrFLm)(N~nZ}8(Lz=cx`&xn|FNyRx3DHL>PCo{yT~~ zgTCM^$`|(URMYzFWzKw`hAyF`dYhsCW6yLI1no_$G8CM4#>p)*2K+(HQ^cVuZtt>BWam<#py6sP4CvxsXqf%qq9R$>uR<2TZMb+O_JZE?e0N_lY-ZqYouh zuYl&_TS@l~{TlJ1vEGeyg0osCmESAW;th7ZD%6MYixw$4&iRd1Wk-5|!yVg0m+=;a z2PC0Y#f!gDfd&GBzIRm-_w^qJ^Cn!j(7i<+YEhc}V)n2c1D#3UcOdbGZw~;ItXGkr z{dn)iYJhb4cA?7M3I=JZ{wD zS<9c#^FpZUB206IP*sa%%U=Qc1N4A~cy6cQ+%E4tVm)vEuIehRdnPbzd)tFYb0Sp~ zE7gj&G`b^Z){w4y(Lo>6R8pZe*N7V{O;R2R1q*-k>iB;CTPHtg=t;_XS-)2xsPh_|GZr}}u z?+y4SR+g5z2>QLkS;=2q49$`n&AD4~%3*4=Hl8R!p*TUD9Gc%$ys#yE`I+u#KR)l? zW1)|5hk%C<^*^eAmaaLStgjYT58SGtx})TS{kE_ zlP~B^*l2#|F@##CG z`2Hec z>H`fIyS3{;^6<|$@^+^fcKr8fc>*~H&kU)01?WHT zl#Om;X#!LsF|86%jx!AbaWuySA_xyit|0xlPT*JL$~Epz4`Av3*|m3>fC->cGVGr% zDI1%kUh$bas=BkF=a(`V<~><3zKD?_=mFs)x}f=~`|5ehV|Wsz@I41MHV=}VBp5sf zQfy)K26l92Z;vy>3xppwJXN1tPBNEa_T@u($k#@v`bh8Ct<}P~L+HNwhbHzF{72(I z22+DSlA8yl;6}Y;W+0FmA@96zN)e}f3DY&@J4+}1$iOA83%+nr_B5|Lz}-v-iWtJ{ ztD{v*g-E|E^*kq-HSqM)(2joWQ7I#q99QBvv>Sc?-d&3Oq0Qy}Qe<+gB-ZAsBwrqY z$5>Q8vFqYC?4NT0#sEI;0xnyi>ck-ySRZ@y_Ult+Hcix{cw%P(WDF~(I`fHv7$Nin z=*SN4TAYN1CJ&5)|0K$(sA#hwTJJr=CE?l&xey^74a6q_HL#YtTp!KuU^+X{Coh|f5a-q_kuZa=%EFCw3e)Ly z-E{Px>D~q?hM`GDwQdCs7mhsd7ZA(=JxXi$W{BihsYhDLatTe3I?@MZph~ve_>0S+ z?Kiv|xO+8@Ya9-6aaV4+{GSx12ES|gp!t?_ahg)wbAsu^v#2ERj4po|y$IB(p)^E@ zf`#LAK8aC~F9+msyoGDbX71)=T}j=_Qy?`k`vaS#hzlK9M@~fWHPu)FuVCvX973d* zc1eh5=GwTb6?O0SFD!zauzWNiVPt5yrr5Hs2)c0WBRt!2zOZ`bqg|@-rh)k+d;l)f5z*KesP zf!37cE@EntO8ZCCyy&~DqyH_}q5SnEO3@X{0_vrSzWduzVe@`v8}sG`XZ^+?XgW~k zS_@AEA923ZvD_K_75j>6eorISpGZ=utesCoU|`_Vc=r?0m`f7vQ>a_1r-wc_!;1(% zfTlM#I$KCW2GdilZpfxjh&9m+Vvm3x@co7RmS7GM>$3|wp{80CBhBP@=k}!z^LL!B zSKkHrB1^jy<^~@HzuRKlK)hTl1^l`Y$N(wUT8>GMkkvi;l$J;EGGWoXqmI0>R`^ed z?aYAV;H^cU=P0so;Wk|*(wGc-=Fvw z#NtbINv$ZS}@1wwyAbD;a%BT?6e z6lavV7S`w1GwOf$6p(i_Gkj&(h6v)4KS**GTwOF|Y;C97)(AclGl{v8j@isqYA<+C z$5Wi3ja@60Da1L zE^e*I)WJ*9hsyYrQ&et)Ra zg1W(qFdPMV^-w9QabhAgbiq`7Nevof)xZ*eDPW?Snqd6-9wWt$j(%enDc+-iQl)TZ zKrgvG2-Y566Ym*%b_+Xtry0gY;&|~5FeG!wbg9|7bB1Li27{>9lpbaWeFQU(|3X9O zb^=ZD>_HPW2^frCfJ$JT-26H0-wVWBZJJ2e=zzM??Zm6$6HB^9==M~Wx9c%2|6*WB zja;sWs?TKYc_~N0ph7_)NY3wp8KH2czLnU*!>14Kxb~)iEpv5S7}K@m1kTQB7?uQM zFgQ%(W_7I_QdfOtkAm3Xnm_P5xK#fkc7y`u$f}E3mNM`FQD?63P)F*B;aD}0yO2W* zkfNTv{0Wnq=)GM$)v3DlAv_(55L0DYI=LB`l!BHN!HqredMF$X{xCa>6l#VO>hSTv zLtj9ICUhS7aA)ibg*4dq1c?-DlzT2_A+6>fW5YKGgPa!JQrCL7tir0_jssc$JzCl<^Ya}xQ~N(xEl(~b0}GQ& zeg@4^{l(Q7gb@j#t=?5j$Y02sgQF_)->jS!mk0-HxWKK_`E2(oIxiS-0Rd~Mab25XmX`DNw6VQpl?Tp=`j?gOAt*Q}&S_wh6tv|NIrZ`3 zr(Y18g{?GF-5U22k|**trgq}gblj)d9m>6W?;kv$WI!h%Ae93j)A7sCB$x6(PWD?p zpCX;pdTMRBF=RjpGr`1BZh_Bi2KLw!s2eB03PqmW_wzo};DeTh#JbKn$?@ru;|@RZ zd~a7NUM6!~(M;2=cC>)IcR%*Qt1eQdo{I&Cg?K#-?qkbop!QF@dQrmqHjIcSO>b=_9UrH(;-Pzwdjc#}2WqXNa3S9AbPy6^eIm4tTMjZX0lo`JelQ+R8@m4x# za?~Rb&=N%;8yhSD7Qm?u-}=NWgc)*XguNdyfL2g<`2;@E*?xFM`3bQ|Unibq-JF`z zDH^~HLB$IzlEetU${+lVDe8n5{7o|%K~JsKx~OirW6se#K7~wm0+aDS!UFTGv+R40 z%Drl_c)zZYG%$}S#r?yhw$R6N0~QnadEUJ}Q8&qzmH);m$biI{G&v~)777o9b$ZZt zJb4dBI8H5-VtIyyXDnLx%a*Gvzc-X*RicS5zxyXpFv|=%C=?Q3<@Y8{ZkS zM!=D4y?+t+d=G>pReEw0g@=l*3vGb-3!wSWYknU5di)vTt7cobeN+XiSWN2@`{3fe z7=f|s(#Bo1wmMZRsJ-+0f$c>~4De8;2PdTB_z&O-sr&EX>%!*1_Wc)3W7Wg5Uyih0 z?jq;Gi=qQP_1&{t_1^^>m%TxNM-#!daj0T}geqQM8~E8=3p=E&7uyI6bV z)ph9nfBVv^DU`eS!r+|btxS0g8r2ccv1%A8^b{N{MvAxx`G{9h2oW0O7Fo&6YUySV zIN^IO{5mGF#MEH;^@Mq2F=QxSrK?R zD}45hWy4T7KeIA?Sb+4#YUf1?-5S^_ylEqm!VP*oS(b!GCCwG@@9&evbW*)ph~4eW z^U3g~(f3q<7x7@ao&1!D|BijT)tr;MK*rb3o!L)8(YeORiZIxnW$-2}l}6Rjqw73!wO^>lvkpixSl;s`kLf zUfI7T^W|Wxz(fZ-F*GL&Iq=&EiU*WWo$|hvLH|}0|42Q9Jd^VD-;YGCTPkFeA?Gd zE!{;1!?P=kP!Q^yEBs(}SM-^~=<`Nr4p?~&*gP1SL~lt6YqKpKQNxAfX7@6e+ywXR z>pcwA9U?B#WnCSgPiR?~ry0d>-uVZQ$8SJf|DlfV_=k~?-BDI-chnMQ zfzAeKo0W~hPAu9#HDvHz@=bnN-bq|-3CXa8Xr?G$&|eaL>hRHg0}u3)G~=oH3=rfJ z$&UGTpYXs>;g&x7U-k#M%-J2X1807`E^NZBNqxH=@~d}5lBp;Tn$a@Nn-Y38CO&#b zZv^fh7CKkU48>j;uDg>)eq@*^i35MZ5~q4RskL1BqsCZqJ#(eBV!VQFd^lymPLR$BV$Db))N*NSlXABj z2hs)5`GDWW9U5WD9rMSxV{zCQi!q|#{H3jH)B>&-1V4Il9;LeXsXcWTpIbpV69Zw>B9O#|hSo^>T~V#V&0ss3hvSU{X1XaUKxrj7_}^4WG8e0L%Q>=0lw@~qReNC9p4_Q6v1%{h7f{^1NS z%syCz6#$>d@C$)Xf28W!J^P|g63L%EPLFy#5Kia}psRrX$1$|{#P6AXoFCJmSAt~9 zg}-$@N|PXVy8lrDF{AwbykYUxj&}OEsZt;5Jb=72a3?{3?40ICXE0blB)hCx$<_G= zvWbYX8OPwZf-SnG*E-l?s0O|ZtT$9oHRnY3dhpn)h|T-PYNccGoIE^;V*L7NBHX=C z6rEMLpZ4{s$XB`f1)s?gr9Wsc&$%!xPPjGLV%`M4VLD5j25&mh#cFYOf{oW|=NC3; z!B^=jTW~#g>(uR7ks21r!k`za7jR_T2_Rc*KL_QrVfCinT4_AbSd)Efl37vlvI3~B z;IRb%v)DEzf+>TqHz9j*_%4{WWuy6*2c4-0?H@Wu9iyv)3~nT*qXHngIl^HGnZB$>5Ot zoN{QXTh1#DO%N9euE$v=Khr6_H4z?0n7iqs+Y1H?2f*DR91zRq(dyf~rXdt{sm3l1!qhNxV}8NmFI)ZwSQNm7M4N1gDNnv@ z8aX_b#IFcCO11#PBUnc1icsMV#3l+|bQd>2%`P9$Ah@-s{`XSWR}>u4&l?iNEtea- zI5k^0tx-$Yf0dbibxI7-8^r_i81BquF)HYS$L0xB15&s#BXA{Ww76(B;VRbaQtrI0 zz&JF#kBPI}71H^=>awOGE|!g}GIUr+i)!ggG-;B5Yh+d+8tLC)X?@kw5)X+3n8mMj zGqPs@C1gM3KEe{od|z+fOuDsj(q=b@y}Sl6dhGx<<2 z@>3!DAc@M;(wtgvEG2OVsz|*1qYi#m3E6pvd7oAW=~QbEv#5Q{)nD+KDCd0 z*0&xT8%sZTGG_h%I%9U|I^CV2qhSzA>@MF5I(#+Z=i%{`Q7iT=BCv2;=RnMMwz4F-Y!3X0(CIs$PEN-Cg=euds z%k}Ql>JQbE&(>3#NvBKZn(vRGFSySvd8qVd-H0$VU^7GDvxUp)z&%=?e5Tst)+?kr_jq!`m~JA#7wCv8%N*x430uTH^Z4N5;#LWN@ZrIJ z>C~o@k(T9Ph!9!8LMYZ>yr#@$6l=Y}Z?wwR+6k(j_4kgPP5^9aR)`!AISk(VJHg1K zJdr?tR-`zxOA((eT-{6%)%vu#t^qfxaoPw+!M8$Zg48_d6nt0-X@j3+@y$-v8s!A9 z-neVTih`U8eVoT`E$TYfJb}+#*v&GrvT)faz^1J}z_!5m0o2Wp^*X&42)u_=PiG^D zt`M}y@dkPa8pa;aN7g4`4)9fqnD>J!1`CY=G!AvN(5qJe>Q=!ANi3lB@l_&spoM#K z`*dPbxWGmFSp_QlYFtZnM|;)&zLv-rRTyu+=rQv34>#44_kU$B z7t%C&0>(RsplmH3mDy-Wqk8?@ch3c7o}SwE+J=l&GO+!>7cP7pR@EU57`KU~SYo09 zbhCP&Ag2S~J8?V%?jic_;orNRlapC@0!}z}C5&H-8XpW2M(H9vwp5l{Ytl!@ga6n1 zxwv2bNFV9H=85dZUJ-x1wNY&nR{RRt3izfQyN3NPZ?X2RTg#XHRFT2-J12t0l6t8^ zJSRduwWmODMStMqn!hFb&n`U%6SUFKBTYOTqR`9L-lMHwGx~X_*yqGnF~%U-^Ur$0 z$ZOo#hOgcf+IFrG+JAMmFh=;g;6M`nzmRJNiVNA`Sy`}=5Sf0kT>ook=wP=VB|{DW z5jrhB5S8j!LfIA&bosOr*W}pqzNy;o=8cimsbBNpWRak^PgNbc@HdFf(wzsp8nXHI zyY_XbfQN++!US^kRl8(YySj>=p*)>0Ng6sd#n)A74X%p5eNN!mhzm!`ek`1(S>Sv* zNwypSf3Ch!%=hT*ZA$C=qVXndOiGH!>X}c9$~C?TWPT9CVck`Q+b(O2BUO(Iz1DI# zD-v=Ewbg!JNl`&Tp~>_6`=_hBTVvJA4SwrCoU`U{JEu*;ezc!P`(Ij~sHTwKg~mmK zf_N^uK!te9;gDi_0vW!L03%5#pnd-S1Wp$3pxVWNsVx#UrVZ>_$nu8_1Zxcua-%5N%Y8l^L|+-RkyMV>pD<}ycs3Jp3AD^_2^$a0SQgUyE3-;cZw z(2(4XjvQ~DzW95TWX}(!GVyG8mDG4fE`RE;k`Wr|aynr^npFRb7d_yF{To!i_l9Q# z?GRfs9Jg?g6c<3bTbLvGs82^zo_csJZ(vn3Q~AirMmXg{3Q%$lEoFi;{O zkQMaT0-R6n)wsrufh%_yr3}mhf8R#Fje_)RO|=w`Lt!U)?2KRQJW(WQ7M1ThV&8Re zyJPLHp1Kn0ah<7tr1fHJSX?2+Cn^EI2zQn|tr%@7Mh)Rq#$zAsUs}-^U~=`%l1c<- ztVjp&WFuAX?5&(unG~+Qc9(gl#x<%>%GHTgD>xdQ>E3-a!yVYr-fu%W#_e!KptAQV zdC>tR;O=@F{ta8WT49WkXBT$46aR}u+S@ON)gtgTNWqh0?gm8-ras~up z5`rrddfq^lDMAPd8$Cr*l1__JvS;*5kl&-3lN|qp$4JT`c{68q7rHWN;oT9ekJyV& zJQjNL=GB>cNl^UsS&UXyoEP{*rzT&GVh`*~)~WTMK-rM3Wn+JM$eynir@Y@nJw26w zfof;mj7@J8ms(&ddL9Luf(c#J3HtkC=8TU3j&&~V$jt=)GJuEy(dLM2 zc2PQwjQ02UBimDlKFH4Pso>qo_^B4;@b2Cy^84(``1x}VaL5FRgK+0D2yJ86l?y4Q zmccaaHeX|#huO4p)_=Uo(PAlpe@3$mav+e|>r87fYYL!IYG{4oe2NhMV>hpK$?Gs4 z7v)MM*lt*BvfN`Xqxg$LeRYcoVVIi^u&v#8T?0w9xa9W`kWumbzX^`M6l@#9bLqkh zwnsIxyvH@Byiilt1ltWn?WUXqe6rR3-uvV3`X1JUg$HO|cBJC_peyNq1o zOA*YDyl~%w^ZA!YK(aupCA?kUHFL`!02c9uwL)Ims}|L36;I&*@KRqmRX1I1d~^Q2 z*YGS+g&j{*L$Y_F$+PK78;LN3+jQH$=IFy!f5zpDtRUJu zrXlRd5W=xCgrnr@Byl&1E1EGLcy3x1=T`K-VWmqwUZ*_tK=4Lc6E{QaZIZnSoq#70 zqQHasQWI>qFO53nJ71dJFF$n`@^mXx}MqMcy^OvcPb@0F&PR9q&O;0cAeAQ+-oIrMw z?H04-iNlv)1dy%6y`lrL*CMk2hop2K<9pi&LiH~IGb~d=KEN8JRuc4C7A~j#Y+l72 z!pR3hT(aF}T_W%B*yESgI1ElLTmaE>g*c!+f0V#> z1?eqV<3;?Zcgdoj_Uw>y_x+lFvOE8;I2mj0)5j;O99v!D4|KsJ$t_^9^Zfq&)Q|D~ z7uI>M?4Cbfx{`E078u9luFEiL^*=I4mPt^xf}<00dGQcxNb=~kBM3KOjKVB($7x5q z8^K^8c^wvAu9H7JA^g$z$Rq=$6Pg!@ECB>NV7-cCuF#9pfwl*rT^2GZz$@c*dCcCa zJ%TXTfQbAwsHd2YlZf}U`HHtk+KsZ!hu5EGR#Ozg%}UDEAWYA*ynMm(MF z50iYujK8T0vzAJ3SES?XoO;(Yw4|Io5vY(tk^UN1p);pFl&+5CSIVa(oT#%{5vm>t zDet9`d&n@gMUk)y@!nyuLfVJ1)8RPc5z-wPQ6bJ3re-QothlHHi0{p<7s8L-m@~4w zFMFh0$$cK{ga9u<}hTtC4_KBrY%=EC}^o!!h$1O@i79ey;W^GA^gZWN?iq&N~d4A~5) z`HiC*yGocR@tM>ceDVNI5dLTlobZpG*dn)}JM4+yIEoNeIr!$aJKiSIyDiakqXwF! zFV{GWPD%B1TO*?wf$@qt%Pf5zQjye&e1FPC5A12^5%5;hzUcHB2sZ8|5zsla#jjUG z_W%V?+${S`@oVVeF3(EbSPpo`GNp55Mhpg9tHbLK?i8mJenY%DzJ1|JHjWQ% zopu%;*!KrX7yJ&E6fCTv5qY#)Z~{&?5mZKin||bYDva@S`b6!B)JGmx^}T-8-z|rv zcZYCWv$u<$AO0@i|Cqg#8o%9#gS*w>e~%zAx7E&RCqqgjmlwEOv7-=+L!f!)XmN)z zMz?ZhkXQBbv?fG%(;HhO$k+et6F92NBasX8*5uZV z-a*1i!Pk&XQXAsvGxgx#Kd(fp`Td^Y=}AxQR?7TXxsumJP|7-Y25E`}m!2zStsBD> z+sj{Wyl*DdI>_kh^C9=r(Xre3OUSZktU7&U_EEeOZ5%KC{~x`TSpAzeJ7EEV1YFSH;@fug+gdvLK=H+}8=F z>}&q?!0Z;PG$^5%m5%YBgPgZ`gUi+9eQ_pNMV9I#7?l%lh6-5BLN=;%F!dWx_XduL zR-;c+$8c7mZ-OtM-#dGM>hP@UpHQA%v9k=lhoQCysayK$MPN%ngo&l!6>t$Wdqj(? z#mMcACw|ipLTYd^(3QZ?$6KVG9?<&?g{S_cBoW@1Wpb_ORd^T*UPw?zgQkIBXrG>G zy&7jSTBSFgr&n*YI3VV^(FhnhRBkItDzISA^qJZ{S11dJy3}D4bkJdNP*BtCDwR!c zB(8#Z;<&%iAHr&HTMz86W8bO)vrjz!K9YnRL)^KL1vPv2it1q~80Nch8C;w8tFX+Pm;YLw96InJ)Ja_6Ijd_r zNiFYW<>QrI?*Fcf9wG@Tr~#SERk^T*NAp#*q<6w9&c^0G7MQheUa5Ecgg=I#$R%)4 zKF(QI7_U1MdLF-c>N^Xxhuw4aNqxS5c}+^D{ZCqtlFxD>^nd>{k@4kz(yEiy7)x%i z)5yxUz8zLZ22b?sLBRxZEgQ$r`646f8?!o{>$ZD2tNRPc8bk1b?S694VI^^dyF_FT zJZ5F)_YRM_7A^iF|1*RyeGm{81{p8M{O)~}@$)3DcxP~tiT{_mRuOTL20>lh`RR}z zFbWn3quvgdq; zt*P(?YaiZS_fL4b-ac74r^U|=>1-nHf!B1OuW8QDKL?W!c;dIt5P}mU>xN!l*_T%y zRa|v-hp1jo&K2iBbun(JiFm0WO~sL3+2fi?;c8PCHi9CDFJ2z2E=CA3A3N?pMZPoSc!|=Zsf-8w8J#r#)a~;s?!*y8lWFIS^KXzP_ zQeLZlswv=F9hY%2%Iw7n+KbEyF*M~d(3AqO&7wup@kFojN`fX3qGt9=a64?r zEt6u0B(o9N{F|UzSN3V0#Q0_lL3FcuW3`eA!>}N$sZ62pWL<*#bi(3(O z`WfAwb008opVV7gbUeB(QSl<2F~pH1wyKywixC-h#BMrSp3dDe7NQ@y%^Gq!5i2ot zzB)sKisZD@E{DNXE1l5GAf69&#x$o5KDKg@cRuC{-L`J6U^aJDb^RtE{i5ApBnIUn zbrmVcaKjS%t?m_zXo})x4rf!l#P7O2$1QAfOYVGb48861#6X<$mlY3((UR)Q*MGC$ zg%uAkA%BLml@t|st%5G?bgLewBHr6iRJ?&Vwk0_#JdOK*$G$j8?Fgc#G&~<-DISaW zKrI81n{dnIO1f)H@xY6Khs&XlG; zzc)1TvFjd5_wjqSTyYvTwchse_N;94-mRU5_}VuVB+z(00_6=2Hmm=l{p)wv`PRSI@_9%(l zig?Q6*K3(oK3s=rXO;hR7tiM`-y8+n(%F=^&n1ffr3AzJcHpB1ed4Ok_D~V)_&iB7 zmVzf$^Wvg{Ek1j2(!I^u+(C^ugd&N#Ks zIL{ak+Ky-R-3klpMOUt&g#Wy}@*ZvJY101(QpO;E`irM_j?6jihZ0Ynx7p)tx;1)e z$hlCtr(s<9l%Fe%Yo3Lzb(MTAT*oVnF3US`uRTCkB4z@XL$i*)zB|!azvampImk=7 z_L!}l-n2vz8vT1R9e_FWignnW*_;@^u@=Y{JWX36A>SByp8Kx+u_^;q-NrdwVz)lJ z2??BvbVy_^-q`(nmOCwi!A;v!;#%Ce{_BW0-+D)Qy-jpWx`95hG9k#42CL8L_*C6(?@>246Xi|_scAJ1m*x#pU4jCZ6y!{24l zf%mlFAN$mZwth9|Pe6jfGFItuee-Xla?l;AfGW)u7XqSqZJpfTNKU@Nh7&ayj zC*wOejX1_&MO0eJ8!2`BL#`y8G$vvc^oKG(hmqrT3GY0JmX}OIrd@&>d%qcK89e3l zU7WQ}xs#f`kTjXSgN{P)_6Gg#?r$eQ+;8>&^Lf}WQ$2hbZa~lKHR%dzehu0Y4A%0@ zMSxT&Dofa>yCxKmD}G>VPZl}td5&27qqY?_HXHaB_IN6_F$xjCPexMz86=1diU;eb z@|u?n_o5hu7xmR!m;XVwC=T~%TReX`rWw@zdGpP7E=9Gw{=-6(XWM5cqbM7kmbv}c z5u)1P6y4`t<3QdKb+3T=3H|3jikd%8(7Z~>vL!`8MX4$8NbEi{8rqBZ)QXDe2R9PRO^(>8TjKQ7AGA6c>f>B=MP zr5nKx*1LbSckU9Q_vhVyBlwO$!1Lej`WXPb1p{yZeb5V}aO6heiCPyPx*r|v z=M&)SPTX82|Hk}U(#~c`T-nGu zrPidW+k@em)ao~;Xp<@f{!Fz{m3Ln!!ZtjYk`inq#1vb^p-I{`mg5uZ5X}jh2|tzj z>=GMv$K^y|lb|WvFXf-9;?y7_?#n?igYTer9%d)FuIc6H(LA@E>?O0~2(#7Jw%Y#S zfiuGQ%MtZO-rd`!FKZlW&OrlG3)NmRX@}+Qy9Kc}@qF16H3v6`NaPdM&|yFgFjbe6 z<6Y@;9UmJ)y_UcpmufRZ6d`*h>ig#X-yf=v&GhF0;{lYTx;;AVUQ5Fd|A46jRM3@X zj`zC!QDzNwzj=!KrAr4z(TB4*HP`twoT$UFbeO-$A45baZTYC9ct5>2kAX!U~Z)Qq$q$-+a`=aS)vu5cAJ&7EX zf7KX^%`GF-=p7^0e?nEOYB(9Z*Q2z}`Dy(x0cqz5ut-L-^h#D~z5l+Wzujt`drc?O z4pf0&%{1@0DQY6&t5fI!WNFTMifq-ei7(rahf@q#dS6@iuV~HFqQ1D1-kCSu5k{Cz zy%bCSBACHrVS6fJs8cb^d#Vle$AB&7BA8?p$gBO72@L)e2?a7`cGB1{Txh_UXPsQQ zOs5_oZwj^mO8xnuR*5B%99d-7`@^SEW{H*L15sm(AaHNW&~1GvIxnJPKqHCmy5hB5 zm~fN^kr`V($1@m-{%}sQ0XV$6&)cc)PwwwpPrMKBufFk+F#xVS^!Z^k@CX6;cdx<+gKCz?q8CVr|8JUwQiwSLGVufZa$<855;q9C8F-VoQe_6Bi>P zVKM%a0Qrmj@TPn_hRxdDmKKDsh?mOI$HJ6ilhT2R-3yiI$nojvVOe$&$BQ zmJ&b7%q$XfIF%t6Bcv|&2qQH;NhXr zW-Qr6eK0>^AS;@+ZbpDxC?8LsiPOPLtiR1Lv0@gBd zr2>7BageFN+ZYFo({!nfNrgCU&)2!uUg-1!>pAX2XAmq1Y4*IXOxD_Y)~%E7RH}g| zEi_MHtFeJ6I+|ICw1RP|F=lXnw!!HP256ds@d#3@7%1L~B0cX;r0iIM_teVVjK3=5m@(8J%TuB7bNl`^6YHiBA zp@DMiH#%>!5r5G+JCijq!zN(A<@A*7BlPJ8^1yKWtNshIoY4UwSe?+ht@o7#9vVp-$irLCLSUFl#QU2pD_ed2_ z#V5gKTsk8VX#X{=TV8E$S~(oWl6YuPv8o7}VW(TLCDZC1;b>n1pE|_;v+u%)`ATV2 z>&m3wBKzG_1y!(Zo7h2C88s10!A*RpSW{gyl@ba5n&!nWG@3I9(*1j$Y{z9%qY4%CM*C~nB+vorU6L?koY9alplY>L|Uk`hc`om?Iz z82P)C+rj%Dyv2^itF1SJ&%xC^4p73t_tx!r_swqBVie++(7PcpMa@D@XC>MIzCYmi z0D;y2ZH18l+se3Dv0g;WW;t!K@6hD+7$C;=8|Z!!j< z!mmFa|Mf-RZT8b<4sNL8dp%6W0BkCF{TLvrt1s)K#Y0Qjhr+R?)lFN3x=e}NPLK`N zw!_Uhq>LsVsA$0$IAa56K8wir4FapF-pG4<2%1w3#n%?If+PHB zW^6%Z4=;5$l^qrk1nD(%bDTk*$uVG^nb?_BXt{N$_d)w&L#B0}k&SxIGrB5a?VHVf z_}QPgE|DmyA`ZS3`w34;v7M08gaB`I>&N^B^)Z9&{9kb6Y2IuP634byw*JE!qsj`j z(BJ{SaL#ra0aDFiKv-MF5g6#EQESvXMc*tcYa&NPq(V zi*iI$DJ@MJsp+i8OCoJ+GX($Iq&0{%{Rq`UF4#IFn@o8}9m!Jaq|( zU17wFx(pzb?X>IR4LnO2_nIPG>#0Iat;HtlI|ewvRi9d!Sxkpi#t0;b)a(jxEtS9) z`xx7S<*D|K`$!!~GP3pd)&1B*^P(ICW`AnPs;a7e!&ax!;{W;KO+3-yBOxS&ZF{2|p zfR0S!UiK0z*+$0wmR@G+LcEC{JH%zKVu$^Ef}wKNs4U@EFl7K!J&+d2kCPPcTnjCH z6vL!f*NOAclxt#TPqZo(JNL#l9US5(O+^$o*I}L92Um%o!S{ZP%3lvE5_g)nu`CY2 zPny~9a85&n{^Jnkz98{vRQR0}o2P%h)8EcQ& zDNYr|%P0EHIE=!D)0H>?)ODp3Wonbl|8R1cn}<6R;E8t9L2H!TRpH%z}-yMcYS$UY#SQT;CLdsn-7 ztN8C0x-1R(2v($o5B2$Nn+TNde5WVgc*pSf`yysr_AJa+5t5&&(=K;&63Jdr9ZeXcY=y<1uPJ}mq%uT<({HZ7&HCKP zQ)Apyn&KQ)VaZxbqCMaCHoxkeNT$shpa3U(&j{ogzatP+S*HMg$b;{$=fueY?``1R z%G*6fyLuO1)5?Te6YbhfQPeI&-Pf@G+961gfNaNPI_bJ8UJ{yp(}1y+YUMl1mG+d) z$k8t11x5Gc-kDu zRE+w9OoV6TZ0|Me=TKc7HBC}~u}(IOgpbZk%2-<4E{Yq8Bxx6$Hxw3n975#uQ*_Yx zY&v>urukQ?s4#{1?v=u2Cew&58y!{1*RMa61;y<1^#8&HsF$92BG-9FWh|g?kBa|i z=MeoCiM*c7i}z!lKePT+5)Q|q#Qn^{HS66S&p(cbLz(-(NeJHq*S^2%j^8M#IH$bu zwdQPciJd50A@Z}uWD5Pph8@W9{8ZTM*C(1n&Ih1_PcM&;8~yALStpkKm2vKRw1!&l5yN`f^PLm-N1Ru_)F3Lek}=U}vV@cGi!%?Ro<2 z%-<{k{b7_mqcG?YQDxP`@#odg%#|`JyZHjzQ});VK*whyXUPE#ZW;F|otiUnad%o3 z!K+nqC=HT=b8i{7wV4q?Lk5jhHQcWFf81SWA`p)Fi0+@s<6ARe1KPR zCUU2-&y8;B_Nw$8fnPCJYiM7wibtu2+4J`O2N1?1?3N|53QItf)K1}HKbG-4h-c2) zX(ZdDrb9v}exN`++PpSM&=?B5o?AamQbeQ61t^^V9^%~{wf=W}6Lf+NBnxVt9rSId(GZ>BgLVhMo)Ta^alZQL z14NiDt>#z?&okz7|qryp~BBe`9W1sWy!}hIL&w4@Ln@`(e7+!RRSH^`CndeuJ4EKIFhn;-VTcpXv z)SBF0njBWZEId9@CoS4RwEH2gp<4+A5>$ZBgiGS`peY>~%mxe!&McNAL z4rlX~{5j+y(YUpyVzR~%|FB<`s59*p-{dF9DjRC{D5KZ@BEFmnj$*-uKy=B}Vls)Z z4sJ9Ul>rx^Q*6rtJsmSwg=Miy3^pm^`CH2V{7_J}e)WEtp;D;gj)vYCu%2M{dSZ5w z`LxQB^?f>h2f(Cxv>r>uOA!d2DU(K@%^PB?6EUQmSrZz5=yHt}0GeoxN@1J`S3lw^ zpSj25Knq7*LDb1dSr93r^i)m}g|KH>#qZ&B@~RHhYt{6FPfcChV$xN;{!yJP+$B}A z+UF+pvWrO6$PJrqUj7x#w9X+KL^7uWGX)46)SLtOr~@0&=8ud{$;*|4|L#@j|FwC6 z@$vCq5}EfPvF|IP_4uQG7o8x^e)EQI{5a`x`?!EjRfuh5IQx}kGIEgy=^9uT=7(p5 zqW1rnJNX|UyBz@p!^AO_C;^M4U}_{qQ(m}3lErpMsm_oK8;of&ldTNjU~fA1E5S;jNNcAquLyV9ip3@#m>!C#2sx>{DxkWig@Xu# zo7E#-*B?OQ3LFehY(gBszT-$Gi_XUAxsmQZM)k3VdA;X}b^TNwR}^mEFUIK@pivo- zy=m#*+A6+&8S^*euQITjtxtdY{45G7d^RxCTiB}WV*SXxZhN5jWWfRQBMb1ZFn*Sl z+A4o%lpJ2oCB$;wT(?Dk{kqq{aBzO%c^Hkanp;%hsr}~j&CVYhM80>6m%H`L_KSC} z|6RTa9uD^$kSmC@q}_~J@yPML#UqTts+S^p9vOw)|Ga9I?u{6pFj3PdCjev_cNLIe zOA9clXd$>8>GZyYHos{%x#^W)F&KR;X85XX4j7adjMG?IYpf;_%|OK5YVEUmMfwbkJ))RVMWz^9HvGkvC|lsQ4dlNP|oq>EA8M0;xmG>LO~fp*>icGcUpdKjf8ct z=%dJmFP0i6mbh9e6gHFy#)m(eiT*$w_`3WLL_vS-K=+4e+sOY_Af+M@ED38O?dsA9 z3xECv!+N62Y%}B#()1x#JB*>ncagC_@2|VyJQ7SGtNXJLw6UQKra0N9l%UBR(9pw` zSa1ko_4;m_FuY&q#Ij|8z=N$d`Qn3ms;Pq};o10m@qcp~nfCO^hA;H@<{MUU7gk3a z2T$y#aF?JP?v5TLGitJf_6D5p<-n94_gBqW6N&Ga}nCOgiPcHCCX9At{1HCp1yTR1U(G#rZ|MX|ClBXZuTVB%eABjO&V@Ox4e4f zB5ZkCGQw@7zGhimXTUpwR7N`@_Xs$4R!>_($Ju4#)~w$9vnDv6Z;8GzFsN*RnF(?p zq@U?cUGOB$mb4${5szaA+%BIBdRvnGfp|j?CyzlTdHpI zH0HIxl{@Qg`^(Gihtu(11~YjC%vO#6dUOR0! z#_kDHPPc1`gQ;M@mVBfs)>@KNn}N^n=Hh@6R|ZD9gAR`~spVpR1<7oUi>u9$Cj}=w zP-eCNB>P>S(Uoq7vVRwE+E@3zTNUnFFbo-g{^5yMSpJ|yJ+hZZXH{MT)1XkLZJV1g zRcL3`7Yc{+63lA#_q)+ixa*v925cfJFOd@yxBo8=Y!Q2<4YoSVS10B4n;@RAV9P-Q zfit`~G7_H(8%ol@@mB@V=L{(pC|Ex6a&D|P~A zA(Ee!?VEITK^|LI8=26#@|)|C)abM5qo5Tt+SwDt*;}U7d5+C%gQeT@jZAXLMa+$B z(P_wyIf!+sQBX$hHRBKN7uChF?ihw@*P`CONQ3nbVo9R=6V)2tG_N_LfP5oq(m~wc zR^z|q!^pasGgmIOeUCi`7qg$HV#3hwT9G>2mGpweCOMj=U=TA*M+#OnoMmS&r8=qf z#N0sQ(`(!_&BE@A9&6dxPfApn2dk0|#lX9r%eqdqBq{6tpUX=)%A zGaigzlDI}qM9{Wd)uto$G#qq*dTvlu^CEE zu~mQb__WZ@3reOPfzRU|uHwiD$&^{+m^qd}>ZU!eB(pOG-;vRcs#3R|C2>9HaJa=B zwrVKv=lybxFN5o&Z+Lw)`x?G8nGtB#{gB)RRH^GJrE2)yN0t6nCVKFV>7H<+(mx>5 z0luer%=0{~ky|62@Ha7ZXiF(5nc$RFAwTZwAWIrLc@CZ{Fnv@sqQPvXcrX1T0-H-g zJ}j#I5weWKSXyVDc&#-3%`5b2gz(iPx{KJZDrqI`$W(;~T8PQLR)pYD7MdGwMxNa+03(5*hV7I6-wVFT9GK-1i(cX z02u``8X->s?~KCJ`e&C^@cYSJ;jTp`kL6$v)g^b@jkMO?#(fSAqGqR6KrOgQT1Dr_ zw+n50$%o0PSb!W@^h|pi{4pF|H1ZRY{MI@MN?HxTK4eBo`{g>k+y@7sXTjdJZ}0gF zqe*tTM08OcL?ow^DWO{vXFVmS@i$BbPyS*<+7^2GYh^(|r-Q2v#)JVY3;Ag!($RGY zpY%hP%`N;J_ci#LgO)0dNLy(8|Cq16ZPqWH+-R(LoEw{Yi-tFG>^SSCJb=>UDyOl% zdV~)86QGR$3O5wesh|N_^%33Q#_Z~YtLVyhC>*Kq?w0=~m1@kMK3F52)@OKYAl<${ zcn$jAF1Dlmzkn7kWI*R>8H)rmqGA}iYn_;yJ~A*37y#LYmE6}nt2`BZkj}?=_Rm^W zYun)4ICJiMK1D~eWakI_|5}{02A^Ad+p;Gh3Wr5BM|a}~1cuVXlznN&NUO&U(bF@n z;&b~o1?`Fl{7Eb;ISWpA>L8Ot!>GCH;c!&f47z@uqGOz6vG`PO0H>NAo)DkrW;2t-n1{=n&KZcy7KuBO)kxf+GCexeIfmzH$VDBKur zj#)(dx`HI%k@=lM4;)=T>#n%E9Y0J9whDxmtEqHl90=ofNUuD?k=Q2_EBNvHTJ9!L z+fc8kB3M9ofbRuvS7Qdshu%o7P+WgfI*RBa1gl`FQG}#*x{p4W%W}#RJA(MG;S;!t z10Z!pcP?NM%HJo)W^KgGAvO?9G3t-ePM6;_6plh0?*C(~EoepIU$To@pUIr^mw}|Y z$A-wF9Nm2J0xp-Qp3&0jfO?2ZEmmU`Ua`bl@{Z0xfZ+|{VYsv^xwY}+h{eY>o}@oZ zo`Qyxud6r#JC58?e??b`)9SFgM2UGcF6hTx98|myX|;vo>;~t*rBVU()nlGyRfa3x z!}skcBLC=~<9nDiy+|pKB^`M(T(u^K7AWw1Qh6HXGki~%OpU?gPGt%=a8)!JjM3*Z%N#jF`wovU8D;il5rUR>wR3q6_&{$-?_gtQpWo4#-M zB!e*u>V{Wp7?7g)x3oGuf16f}ll;%X==WEJ=9UCr0bhY8Kim&Enc3O#q@px4122e# zM>O)wht33MD&*${HtB|*WZ5AHZML>dQAR zBaS1yEV1qk;{3J+&ouDAu=KWDF*W;v7_m<|aC}6?xCbl=Xs7*E8!LCTPcPc=ngN$% zg3`WeSbU}PR@Y&*k0$)ZUAQ!Ulaq(Xq0=aTy~Mv|JZR>mX{xSQR5Na~Q6K7Son9i# z!K(rpylu(Ey2ESC3DsRnGd+7Rj-g*o}9i@$Sf0e*y(T#cE;^b{Mzoe zW@E&?e)J91lBS)Lxg9Wl6`{Byoa}_xy+f?UvgeL~#rYi-k>YXP*h^Wm5UbHYm5#RK zw!vg;Y)KaW2I`rO2kSmzyJWy)F1B{V zVY#m>m%p!@2(1b}XS34=K?S<*#1R)uukj|AA1KDR@d8yfb0dDEhDg%r{w+K8pO8qO z3KMhouV-xBvO@6I(;ih!K%9_z5O@6qp*Z~!-*C)q%ka=~BwsDYgB-tRnw2(6*Q2p~ zW)N#|{CvW}WfpX14>0YI#J9NGO{EV8$k&1POg35Fg{G=i)J(_Evv82@7(V{n+GjhU zfAIzJQWbW;8B4RP+)-$pGUsA+L9+3Wxc^$P;iaHpfu zr9V}c9c4CqJiEMD77n?37_K(+I-`@i+6UCsMxDervq|RFfO~EcT6CeIbL()gdG#?9 z%E$oH;f}iXtT&6p8^2ID2pWhxv5>v~+A<3qOQ-%JM?(wkl=j&0)oHMzAp$&tUw7?3bSwM3x>m)54n~u((zfBOYD^cq@PcM^f*khBUDWTN zn1ob98CuDdP+*Jen~0P+a3(f&?O>?vujiz5pPT051Y=@!+L$SpDk? zta-esB1kI^z@x_dxK7g%@9Qo-NJ%(*n}pI%W;+?WC+}d3S3%kKZ5>M9h;HA*N0jgy z#*6OeF|@QAGOTezud>|qt}wJ~j55qdMn>jDmpbj+`BAQ1$CbyiGt3VU%962N&=vqnT`;bGkhJ?TY@7FjYzhXxybBT;FrtL1k877u#YxPa zhyjx4e`%Yksuk#3d^sER;*}Y2#V5p4`s9xltBCJ%e-Mcwe_b(%36i}3Jv`2f{U&3e z>npG~7`%A3GjZW}a6uE%y(--}Y_F{}IH0<=XkG-FJc}wFQOloSM28Kz9t#flwIXRV zAQTtZa(TYALtUTT2e3=DyUK4>V=txjVi+;D94uJqqzItwPN9`ab)>>w!lMQw(ncF zSYZMGw$Y|vRw$J2|4~W2?PVn^S)F%?$Q$E`2*`dfo^+h7ku|{z(-oX`5~<>}yrgmo zoKwIa`Rv8k0@LHfqz#`0dnBJ zZ7eNOH$qgLSzls(7 zIZ4as)L7?bqYe#k0tP60VWf@DcL;)HXtv0kjeLFYLl_oeu%uF)?<6Y1fqt{M^nY>C&x5Wj(evFLM2J^4-_k{?xVuRXg z;?45n12^;@IBn21YczBs6dvtsW#4L-YLH<+k12cq8o%+Y&#BpHDJbosp*LX5*YG5U zgQ9NL(2Wl;c1K)r7W;;#ML5Gvp(g@Or*&nOUZ5**cs^`( z>5XSyG^a_(2>85}sFhs21H;bBjiIOFCO;0vXtldFNM%VOMtjt^JK0-I^i9=MV2Jvn zeg`#fv(`4IMFGcE+tHjnCLd7eOWp$-)22XwN1a{!mvZAb_{P{cuY{EsFN$VW6(!!U zmE15291@q&I2fWvPwSSG9&%D<*e_cFy+q`LpSe`$tCCK#Ug=*#1>>O$>J<8@<^xTa zav$z4GRRh$4qH@MFz-(~WJ*5cim1YU0x6cY2h{!d6ui z0;D#b1dmt6g}G(Pu0Ot|&Ddyj6oJ!Ne97G@HJ#EUH0AYg+-ge!3w4_z*SN8#`&kG6 zjo)MJ(djD{ldOIy=?CfaJpieC)%*y-11^LL@yv&GVpqWC-M;l!@PSS1LB#P#xYtp5 zgG_B5wX2TW{7XX8&s>ol57h2+g6MaLbLeRXoBG9jAN2j@dvJ^n47Hkg1bNd-JcJ_W zPW3uHL!2q$IJ1A9hLSi4v4>}2$X*kj`zT~cz{A#o`aCqlpwf`kn2erGgO9dv>* zKmwvVabZZhSe3XD{WUrx0i`_ZQ$!)H-Yn4q)reg`ZD4*YPX@Ta%ZU8&GUlzgUWeq- zXx-*QVN;qu%^zfobOsc2l`F9MgD@1hYyd!_U83#sMyg$D*OXMdHkwvMEy_>b0#pR~_R?-q%-#90A)~96uUu>shJz;dz7w6a+ z^dcNQoOY!uIupK@#Lp=fUqtU*#dXgT%TKqW7`3z`y~qeT!~La1p%K5he|grMbtP+- z+3f2fk?k}gj$cZA>i6Ur*yGpxmpv3(_geyI6tD<^=?~_`7dEqkoX>(+h5OvJ)aq+EvA}{nw%zFIm%QH3 zr+Z1bthgZF1=xL;Zv3~+Uv`0q_!y{rWz?jWPcmiV~5q2!b^<;ybgcau)9*q-}&p zHWCDbBEBs?P_(fZg#Ig89Vbn1wi-WZPo9mr&U4ub#S+aX-L-*Lrv6lj`kF4f|FmsE z$p{1}?kI7vIN097!2`GPKL;u*3xb~Y8}4M_7X>b4V4xx46Db9NEkXvu!Dan>u|6*)>^bPh<&;H%fxKuw+)-DHP0-EEM`NEjX4u5!0#RPowJg zG!m)%szUJvk*oa;vno)kYC7J%q90`E|3l&H&fe*vAA%~l%`TB6dm=!&rTK!RcKNL>lyNFQsLR%+gK|hXl_FKD1;GPoNqnR;}s9+6z zQ$boYis+?l5)T$8PYW)?@XnL>9(Sm9Txfhh3S`lwT&S<>y}_*mfpI9 z-$W1>WxGXTq!VsVW_*xUYA{YEP48oH&vR&*%Hm|U#?FO}PNR={2>SfBt7Y4kD@R2R zq>C{X49n&2_XrBr9F^^VVeq^K1{_m zSVrYZ57yOTH-QY#zvO@tC|mA4c;eu3_DR1!{s@6gn9Lb!3&I)3lbyyq840y zGRAW5OQg-P$g!~mo2io>t=UA&SHgdOC`MYhSEPy&>`g3(+P+>EwA#27!6Yj+I=(6V z;)`XVMIQE@>2H79pXeQg*01T%?RNK~zZrk6G|rdRFWCJkTo+wuGvxj+XLYK2*_pjF z-e+L=0+GZL`aICpx{;{XYH~Xw=_`uX1vclD57W@t2Jhpn)W|N$ZnB%cB3^W-V?0hli$iP7F>BB>UrG2$ftC`nF+G_|x z8}_W6Qs^QNJ8KSPKI$BORJ?p4aa?9Od(I+02zfH22N+~*%rydL1;|#f1ryhDH9y;- z1wo}zjxbbwWP}fM4cVtnzKa~?g3KIIp9^~&wYA|UeeUy)RIdNV>DHDcoMYkaZwikm z>KYm)&0cxqErPOvas| zj|(HBPf{|gib6hd=%ljrzeRFPxR=++n{HOL27BerYkA+0Voge9gn*@va)8k?^xe;u zt+%Muv1LD`aYzdvt+&t{ksqvD*7rH=vNY(9tTZr6j$(Xr6wf~Nqh(pf&?Rr}<}u;I z^4_yI@{=<8iXquGf_WE1N$J}TJ+Ua;XAr{e)42T8?o4#t+=PrVwvpqbwpE zpK3~^Rbw(z!bVeYEvLl$RF*iSJpjM+JJy(g_F#khR|5Rdh;P7!aI$zw-rd#)|8D|? z1yrj8SJB(5GcrHuhIBNDfTRYFFed2j>BvCH`u_7U&EAl8%q=Z0H!zfd5ar27(V zuiFTmjCgZ8VuRl6CVi6o!by+h1v`fPcW`GeN@TSK6olTqUX}r&8y}9PjS1SEso=G& z)!5;GsZ<2I%o%1c4HGs~smiPNN{9IqnFi-VfG>{9Y8!H+^WRU3U_{T;Hp)dgP*6EF zsTQ0n7idP(K;T+ieBppb9q$w?crZ*twWA$4&Q3|?ves3~ifLY)Kq62}W{%0^Y&GUQ z9*i{*%y5eh-}L@ynoBHaCU+V{R@0Uv$Kxf1KIgmf#?DnTXmfcAJKLss(B#3yEk80a z@?-OJ15^<{%!#srNMdG1kyWw2vFPe0tct{)BK>x~&6S)g)&B%*q+8BK;}^+G?N{yO zUJklZXuPQH=VRWD|57R_l`8Tr3r z5wG^)I-gBWUElx=pL66tTZ(uKWM!fLeBR+Np(=V`&)^m}OG$Y2WI>g~?oyNet)9k$J<1~L+tVa4 zJ!>%FN5Bd(bN!~clorp`AhsZ`ID(8UTGKi7VNys+#Yh5}NF1n0E6lR%*X2Rr{RULB z^Xy|(Z!5LCsi(vouMB?UAre|tzsa+gjXxSlyoR%O^{48DwAxT~2jLn2`Vv{GWcXnl z_&I1Bm%jfWjQc+f#yN#I?tw+$&+5g_P$)l}gxKH-SMz1CMVj~}es?9Oa=tC@U^f5C z+DEA%y$ke0keRM|v2{aZX$e`rr_)k9&g&DxagKZO)VgP@)_EY&?@T;RGvi)9dhx}Z z#<##-x|vv5SO6-U%ZFGlHlK_IzBe{-n5Tqb{ z>{~Wr3F5otrg3L(C>}swia|PC@0I;l8}EkvmrA_Y(XM>*bD>G!vED8X>ziL$v$TfK zsk&cn<-uzlZ9qtAOLc{Gib8tT%b%x-STFQ?B2zYdkNyU%^+I2&1jaaeO4uc_Z$}nY z7vWotMoP;G3zHKLRE%d|5@w9POWVxcOL{{j&a+ABp{9$wuUmh#ip+~|xM|CUU^BAsmyCDJ}#wAv^pgL*)FW z#c4oD8K%8fKAYxz_u;}DJSVXTk-z#kulcfj*h@+px_`Bc|7lGXm^8HUU8P*Sl&7TD zPtcq?xJX!1nS0SAG#_M+7Tc~8hb$kRxzil#GW{iE&J!YT;i0zFi|h8C6f)&Gx15x> z46QcXu!;DxjVJk!H_B+^c~ENF9;`C(frqW%>#Pw{r=kc33&DWDBV%JiyrbVZC`zU1iS*s&j?xk#UaQdaK zxS*6yDwxR)&4PYjLC`6MkxK6PM)mBb{&HHUHC7GU#J|UtdkBG)F9NW(OsMFX=@4zc zBo%gnx8EeJj4sKLYdNsT*piP27ygednVJ4IvVco_}i z!_HJh(#>IF=`Xq-Ib*S!m-@I=GO}-m7v#?NH#jsXG$4==Q^uNAj+++~(K8n9OO(Gl zg)ybVQ?Kyw*U`u1_??OsvNd>p?^S!%7o*}O%7ahFUT&75GzG+ARB16PPqU=O1u;Pa zrlgIZ8-!V6J+J5Pp6g%VjpgihwP4)&^{;C;$agCy`usyq>ZaEjTa< zc$Vpwf`ej2u^mPl8dFxU!YKh7t@{k2j*>2qg*?#(9*>WXv-Q$JH;!JK7eVILvqZwh z>sov0g!FC^0^xES(XP&oKbg6YUUZ=Zy;)%qT#%G#D7{*d3~;?aK0PS3rGlzKj)&Qg z`4td@p`=zY5rpmVefqs9U#xFyA+{i#Rc@=1+w0TQKrb;GMhDAg4z*dzkY!t2q5I|w ziT7<+Cx!aMTUK_eB)YjbXP4`5d~RbkKZPu^9+j4kZ_jF)D(-H5e}+DkDd6uFVODx| zqsRsrB?7P{YZGW|d6sC+9=ZdeMA47PZbzmEQ`aSYsDA%k*CrW!q(e+*VljPn+Q)_^ znt04FAd4ZPEd>z3w{7=8hi~foK=((A3mW|2QC^E$?zy z)F%)==51l;9W=C%B17%GdGdZWJ*rz4!zlIs1psT$^4ibd0~i&#+*^GsPd+ z_|jS!hmqnZTutK|1+~zstu=lB-nHe@vD|?5M9{4RV{$LAURLRCWO}R#X?%sv%J*-$ z^x1nWK`IM6hJS{=Tn6dg^n#HWelfwtCbmw(WqzJu(ou!O1yS`=X^ZG|Ble}suz;5U zEG=0-3Alxl$l_Vy2=ADbBmKiuJ6C)pVNA)-tj*YeY7c9GLx;+SD{ADV_8p{`>3c?+sYAu*V2RZ;Yw3nHSlrq8r|5eF)GY>g0 zs2Z`kR(QM+eJJ-G3EUlX_7>O3#<8r|@^(zUYOJ#zdKR{Tn>X)9GN8z7-#ue=@TiT_ zqkOq6q!!(Y0L4b-QVgX^A+JlgKT8>X>OAbTK4Z4ClZD32qf~Bc<5oRsN(3{amkcpX zsGhh)>lk`}9dzvn&&!>qSHlsw;8lIgWgw5U=2U@0m4qu|%h8L@%}5Esj9>E$U93pZ zNX(OVXi3aESRhi3RMcM`a{@~jiP$m5usiA^O&OF=l6 zF8rmtRhD+{X_vl}yWm=c-HN)%|m8FGL7{8dIR1XYbcU*iB# zKJ+;kwYT7kRDPDC&|{qA)HTkd0(R71Fyo5|gz6qQldSRQS_@(P1@lKh6qmZ2)Sij5B8R3*HCGK&adhm&o&)003+)*DUoP>K$v{K-fQ%cl|+eFl|BqDft* zn~;r5dNBMl*Fji}%IH-_iU6^I+&wBBx>0kqX$6(b9}B(pr5UPqO8dORHB+P3QMKCnEh zCK>qwO-sVQ6^^xkugKQ$cUi*b65#^X5_0J)- zg8V<%rSa4xUmVkqfX;^n1RupD6bZL=>4n`M!Lu(mQQyA%;Xl!>Bqg<~o0(;f3DL5{ zcDsMKZzL?n58ftZGsTcF;rSOwwd_j|XeEqEeX&5Dfx(f2B1yb85eHnszv##C z;l4u%+BfW{(tAZZNN}6U;?(!FT;%C5^o=(vR4y#2pa~p(`QqHGy_{L24C<}>)+cKtzw49|`|I626{7S0;GCkuh01|Y>K`C3 z<^{pIWFu{vG8UcRv%=09Du7{~%oafWa+z$&43YQrZSoWaD~f@o;4X^EfY58~jan&H z*{FNezh4_zBO5|EM*aFWPIVZ~XnE;02c%87)&+dnIM;O{u3U6JR&@E$8nh{v;`Nc3 z#Tf5EL?lZhNX&WpF829Es^JG)vAV_&j=}=GkHaUMu@;szmC4jzCpHZhV2kR!0cN4M zOlb!WV*LJ*?hca3L2C0F17E4nY+8>8eXds|ZwFg0_R-$BhJpGPP5J-&Hl%-#G`mkz zRxO18iHZfLyMrJMxumz-zFyhCeN@v|`B_qSQE}Iu`jePHKIV8}Pm%y|A-8WFvQlfO4fp_K@>RUs<)A(rn z8a@%n2r@=0>*Q*6vsg#zk}LBP$5A`!=t9N6KW9RgxyiU2oS9xd`sgVltF3J+)vp^x z8-h@4*hv{Z9!@p5@H>`CtBb|pX{dQuq=zi>q2ZnTYX%#8*jJNfK5PmBJZFqf`}F*!!o+xTgMv7a_3>gxRFt-j zVusa;vknYW7|6<|t2$6%vQn<}6fhUus+yl=IrPHF+bHm*v|Rp(-YiRPmm`M(0s~Am zHlMjxB{rrI!p17j!4kRw5fgmg6!=7O{zY;|T6g4W59AzN!WvUx9V6^I^qNiwb>vm> zFFYhoGdeAV{060!q1xT(TR8Z+7w!j$bblOc^>b3VV6ehbf}7h%K?YqJA;m^?fnt_8 zBQ8<1rIreDeB=P)(e=4)KT7s}9FxBwDlUC&5`~HtCJ1EJ)|T&@@{S%K?x)KmBJ+fe^ z5tU$_4(7Q_WN9e}ku|0@Q;>u3g!mG16D$Zi{X9s>^f+(?*R?wM35BbjsUad8p_Br4 zo%Ey#cAyj%5{u?X{ugoDtRbi!>XpI8XB?z{fxeq1<;@nb$J529tE zfc7jX^~~SNPNM{T-gh~Ly-WQLW4dX1VVtDll#?JcOHgg){q|+Q7^6-^OSjvPVC)F? z9ZjKBmgnJuCYt&@GK_iHk=|OWw7T9@y84e=gmxOg`}6&Ic}Q&^Seq{DEt&sOqfCoD zq_v0D-&9Hf8|lM`4=bNPyxp{QxjKXvWCunrE$fu3C*E!<;(XEo(={Yh{_s}!2<#t>)1kw{U$XRs67J0z8oGPU*9^w$EHi@7&HC(rw)n7U;Z zi4u}{2jtnD1^_sW7C!357 zHTsqsGeJ>0&i;N%FLVH#^Ztw8siVrZ$G=zIq)IfdwlPVXIW}E8{@(Z=TwC6_mcB%z ze&}q>yu}PE>#EotClOpPizVUEWYk6fyXr6}(gn*`t?q70D}!V#ZHWErgd%pFO4;bC!Ln*i!sE0N2i_heMS4PRkKtIr%aSk8Rx^lm3p_L?4&>9-7yW_On8Qy;qgnhL-*|2Pcpy zTGau=+WTOB`Yf41Bgl!!f~1X(8USxQ*mQRk4m@|Vp8Ds|Rchlf_o@VxcD((DzVy_e z6w&u!xDlZ_KP=Ym>GMkIeQMbuclUPp+2=9iuGH59s<0n2uk20H{0j=ZeoOQyiU}FJ zQ3vs=&$L+~^*A`8(EX35tBi`O?b^f8-AH!}N_Y3rp-4z~N;e$38$>}G1d(p(Zs`Uo z0YSPuzT@+*?=Nf3VrI@g``-K7SJY$Q>7%nqxzdm$d}J9cT}Go;&N*nIMg*M7mI*nM zyIw9!xuiH+Q;u@cM@gmacdkx3B&|rZiU#M{)btxCj67;hj8p3=M&&uu;$$eo|3FQ- zJj2K|HN}Cf%q+Q(8}kJFc}!9xc^x<#8{hnBk4cNWf21tF!!cK8jBhNq8!;tDA<%^X zCZ%hs;EvmYuKz51-%&+5-316tn+J7qT)*qxvZwu&r*T^6VK2YX;9x$M<(U|bjD$(t zjOD=3M+ps#ppI!b=KR|hL4ZfOqw>p0&62r#czj#0XF)(^-W$JSx*FFb13`hsSt#pw zy-ac%Bcpo6CEryrhZErEC-e5L4%@fA&Y`S1A$kP^x9B9U0_O`U84F;Lhoyc_s#8j* z6CLiwmLU$MrUti7hUK^Kg2OHee-`p>gcZUhBovw#S|gk`NpT-2*F%&h=8uLr`XA<> zh8xAdKV7Xo9-Is`CmDfQ$4$_Wz!Rm1-iW!oXF-eN!1D;4kd7jo$iKo_-61LN`38Ov zd=z`SLBznzJKX(Cp?DxCXU}bj>_Ns}-})Qb9j&s7{e*{nt0%l=EmSiW3#FGerNcc< zBq#7>5{et_KF7!RM$c~Ya`PHrsuN>JIpcckpi6>zBxN0EI^lpy?ok9@HZ2DdbV!CW z11A4P2U5Qyh#vp}iLNhf&Cwu9CeKQREhK=1MDgib!!R!r5jYmvdxgPt)^$iDIN!d< z7Dj+Hmyr981<~!uuG7&x1y1Hq7Viq3LeZm!rG?IUm1iOPK23;dzFac%Rv79Ld0p{R zyhO^yVLJC9fr1(`mrD9wi5*OX05`FA{$l=`4UcXEq0Cw!M(vK^-hqW3$UcGm)f1KOe>xQ^;?+{X zFc`5(&i}iF(oI7l(!Ui5oXX7oOF^}aSZcKT_+kg4wLUlRjie%Bg*4UtOb!Eg|7T^C zQ?s01-zcRAwt@eU2C+G{h&7hdEedMG32q|^1*!*k-wRP*5)c27iVwzML9A!wN6q*V z0a#-XO6c48sDI!SCQslEU+rpP;m9{SSB4U=-&5@QV=oqOv6||;`Nsud6PHzeCj60s zsW6Se&+q!v>W!kMdgmFE&xbP`M!Ccw@&vwj#Nh~I_++2DJB3N`;XTw~c&yL!?&!z$Uu3I&s0dFX7u{(DkAv;Z7KK`nENGnTbblo`_`57w6mE%RpG_}`h` z6X-gnP6C;<_;&2Z$Y)W1!nx`EA&2mS`Y1vX!%2|5nn?_~)JVRz zCc6(1Ci3t+dE5S^Q{7huvstcKO;k|3@3aE^{nR5-eTNa@pPdeqY_VxXeRQn%Cjj9H zo*y4L)HC+lZl5m}xsG(dnv-Xz6!v*1^5MOE5;&*UI3-50{51f$h)payGZDB}Dd z<&?=Vi=*}kn1y$KJ5i^_f>Pyem-t0{q7;d*=?0z}9?77m=4-nBpE-gQQaxwiY?Om; z(nV~NWloMgTPA~XQBsr>25$7q-vgaGlB6Q^+xq0I+|*E4B2^5h_=ldhTt<^L?xA=j0pR1;KEL*X zA~vT5a^sC}O+tjkNZ9Du8*HgpCx%duz}kx^f`U-nWVc78SJV$+fx-Xpd==9crgr>& zJgHPocS7iofWx|1S35-co5vzG)DdG}fdgF{;No3!JD&uRK~9uJ|Epb5hf8qZ%n<9|JiO&F)2yMFUP>0JyRmy&IBrrIo?4^ww2` zOp$!;m6~YMI{@v?laTMY-NR+C>Gzy$t{ZZ{QLLW8QA_-7N?3Ai8_F3nvi529**J$l zwl?X_^(2K{{19%Fzf%n-Bj?3_rl@6U&vbyA;iXBYC=>kF_R9Lk2Ar&9l=d{w=?xei z59W_`l0rbcZF|0g)nr)8%eBfM-F>fEA#a87%#uF!0qH&CGji_V;dkz{H9sF zExl@35IZss;id83*1wp;$3Ma?m2*4tdX!TUgD@B5rQVfx+`XjwzILb9Ar3Qn*%H*nArwLa z%RRs%r8Jo5u8(0L-*E>Y{f2J*<(m>|4X-Ukb#v5M+;77eIHGkT)Jj~1%>xse6JEBN z1XwtUg~$=nxnElIZHU9`iK;|HUDcfulNsr!dS;VhI%F+%ST`6TDikh}12n@?HocTnW7l@gUG` z{KoE1xx)UlIeBbP;Fm8xS+0rEzt}R#f>sFz&+J~r$j*c+4XHGffDQ0ob3cy#Y3kJA z2-?UjT1+1;7OClJn%L%OQp%(7)B_0H6`SrXAZ1V;36xNYGv$Qa+3aB88TvP6w~Vkt~RcLDa+2`BW3 zZI_sVJxT}vKu`EO=c+MDEG$zeoGD3GY@KHDTWe~{BVE3Q;^fOs_l%+rto7$hx~566 z-2uja|6A>Vr!I2s!Ds&YO^opDOilJ8aY%)$0uT0(plZ?W(4fdm_DG69oICgt*gNEw z7E#{mVNtFubx9^V=>7qK!Mybn{GN=|Afa1doFTo50LA{Grc2NCF6Lo=ORy`Qw9xD? zO&ddar$DPBLomN(L2~`?UsV5NXq5_Rpbb8hRN6(!6h3Ez48{fICCHyFj5zbHj44ks zTMH7LOx5C>^Rm}F$NaOowR76xLvdz*pNLf#nzV+DBW`?s1nq#VS(48xqbLu>%1j;h zXdK1&!6UbzNRig~bM<|ksQ&S-DNzaqbOe!cx0ZnyWe0iQ}L z($&av?2!C_1r7qn`k~SIIoK6KoGEtYamt)ZY(-;C_m5)POiz6^RVCpW^Wlq*t1kvN zPs{WW)xTOcE^jyqtY7ZWCwViDsFIPw55j{QuhDH@zON4{bbJMwmS((O;pOlRddM`lQzf^v&)4PgPyhOOWn-HnNLg zV(9{aEwnh|xw>NW$KmB2XD}D*J8X`nZc^l9q@O!17)Wl1q$j9T%5)<XH&sQjUZdFjS`ob;ztoR-nQiKWdHm1n$UwSbs6(O3v7Ng*hD?i{wS$IMy>;Zpvn}~+^{Qzz7rgShS3}!4iMK;JMAk# zyD)Up>NOm@v5iRG*=a(%t#64)X}4u+OhnD|X_XWYDp8JQVOZS3W?{J@+ECc{Ja@F6 zJN0~dVrg-(Gmr)I4laN_UP$biLU0(8Pm%e>y1fSuH*M>4Dz3cA7 zWkNgo>>FS!`*-1-oXY>=UqFL0XACtj7@J6u!{{M}Vh#(>&yepF6p%ncEr&=*3{Up; z`cegPhdheV<#>B7y^tc-nFpk8GDJqGGlTLqc>+ruhG=Um>_8nXNLSS>AKZL!>jrh7 za4Z(&b1C#NKmRlfFF$(pUNId%)p;>k@5-x~19%BTT=+0txE7(Ic99x*G9 z5hCMe-JmOIMMZ^^yF20z`DzD%y@u&^{s#=9@+NnaEo+lpyViMSbH;`(zhuw1aOkny zj0Kt;?M35#&;S0Lnq!A8R9m4gNS%KB%t=x))awzm2eM42kXWlckCl`sZqE795{G{pcNcdM|Oq5MV3Ca`|Pf zse`i~d$XSdiRUNO6+Xiit1_n}9=iifbXkc!608ZOeGkYNr4PQ)F#~gy;y4|Dewl{DR={R7*kK>EaSK@MA)bojlAh=5 z-F*o=SUy#V$CFO5{sdZ!F7^LDG@&9bdv9F()=f!6^C57vk2x#%xMR^CivKB-pHZ)O z(-i3o+}<0HZp<8v>{yLAHR9xETC{B)@hYD*73nqf^+U(0F{={AutrSeKJt#&iGhZY zx}hJ0AAla<20QAlVL1eXjg5U$l{EB6Qg%ymvbTS3`fq6S{_iHUYtW(^3FYK81N21i zGlkpf|I=TwKlWM2(ATWr`2@r3`}gQ%g1wi6G}2~FfrE)^^?x743Vg#wmI2-T0uL%; zriQcYgbwUkirKb?ky&Bxm6#U9(M*F$L15p138zwb1wIA*6avB8A%?F@Fd-D4kYB@-3!a{Ns)DTP@cH9@&7#+&wX zdB-ZY|2}1KY^>dkbljC2-3fPGCOmhE-x@sr10E^<10FNfryl-5uKB$b&>z<%L*WPw z)GUa7T6Jq4Ha34?5tom`Mp6-$B5Y=bvV?0ZW5dUd zy(y?LUCz{npq3Rb8D6J~v|=OlEw>#KgALdC%Buv}1~ zUpE@)ztV$XmC#P*B$RXzC@~xKdB5|G3fU6zOyO@K!@pXv0fJrTN`RV8Jd&c05;=!0 zZRAD|Np?&FzUaEs(KB$0RF45iQGy=YPtWYa>ifEK@R&HjKG`k<$-p;IxSk_=j$Vy$ z>J80g0R{En5Lu^Eh<%2H0=5}F1nQEGJJB4GM#SnIh`7`cL8a$*6j?e8O<4B*{GNs# z)f#;>>8p3DOsWeKI*@Sap#;1d8C>u%AS*>@yTu6(-vXm=*Q;vt=&g4ruMHF^HLX>0 z<0a`sd?~%)6Ekhlh8H5f6sz5tBWxIbg0GfcqaxhwB(!ay>!b)L^+sjDMBq{3sV6d! zCrZ&;;p4|IvhmTL{I@u|KBAzcq%)brXXbI3$s@pu2viv4eByh#pD-N{8P4cKa@H`(F5U1 zR2f(Ux@nww6!sAT>ekDoJ-Je0ux?a|Aq1@KWam#365ZCE!zG0gb1W-lnb9gO7U{IF zd6GjUriGXfslSFK5;;+7!iWnXuO~eVWk*St6pWb(rUb1xCfT?&f!|F7 z-K|oZMYW_On$P0jz(uiFBj;5F!Z)2R+}3l(F+2e(Gew?Q5te~yTH?i+4!`z2L}uVb zVu@U|9vkL%J_*`=NxuZ+Nv(wTk~pzr8xO`0E+MAl)1f@&^Yim?Jn1)LpmRH*JqiYL zyGddC8R!p;n`3^McUN$OAbHDSWRXY`Hz|n71s0_S^Ko%RAne7^f?S}^Q?JabLq@*e zdUn-%MH^vn-d@NX7Nz-X8+ik`mA*1kz~tVuFl?Z+J&vhe!ut=1jAE5qWgok=r5j zVdwti_vog<=qf_VdGX4&vb>&o1aDvy_xk$UI)hR5orTfU7qT;4adIpHa;zUMEiuNA zcXvVoOde?iZVtd z>R5?YK1e0uWUSOGdiwj9W%UDC2J}+2{g&pt=9%H0cE~*v_Psuod`IKw=Xd_BnPvh0 zd+ny18_J|Vp!UmgJ2fRfr|cfFKVzA4=4^i_4c(^z{g)9P6*V@v+SJP!#Q zmDI;PHaHp2-+Z{(R{>Cd=s^rQdG5>ELju4vBN+SN!dd0OBjVUX_srk!Fyf+`0&Q`h#is`5034B_wd1Xa0jP) z6-=vZOv76<3-(c3`ML}KBJ-37&233dxx-Hl=h+0dD@g&=!KKT5 zyx5<@A?*cTMoK189W9h3NhY|Hp+99C<;SRn_cV}q1JZs_YkX;l^)EIBA;Sc?xl3X; z6+FTzX`v_rEImc@CM;zKk_@~d#t)oENQoAkxrBDuyZb~DCLxzLWLuI5)O8vP_=w{C zIAaoaQ9QuxH?%OGj~t|lQ<6%!btODfD}pt5PN9l+UazZG95>nqOuZ3HFxu}|j=P1{uNKiU9$9JtNd9{S zCjrXqn}_ppy7jMk9a6e~Cfn#yhtTYPkc7UJtpUi9w9AsR`Sdi;514srD1aNaNR+!G zZC|b1;A=`W_Jw!ZkXJ$Pv+Y3w(mGr9Y=kua7c7`CmYYA><)MfdcpHLTd%uU%0gb61 zy+4luR6gu;{|a5Us4r35P%T@`F&s5x)B6(B6+sTZ1wIvuZS%6c_9mJ`(aLEaRLd$r z85M~EZA_5BB7WNzxA=_^f3A({76-KRew}(|(VAuGEy9!PFY6IPbX63v1ykmk+jkdv z@!#R{s$aI3Co8q6!oI*t(?4Gwf9%3q=HapIj zjUERbZ@^A0C**&FMHtR+{j=_Q(qdHY|~ zU5d}#b>qd_KxY*yRVxoWz8l{0ms4LHa~d?Hm#;|=y5njm1ct^0s>l?L6HA|E&`V|) zPpb41hlns(f(B6>s66O_$r7*(a}y^R*_SRI9}W!oBhQ2%O-)^+4_A#rZoM4QSQ8Msc}gwDE}uIK(^#8|OkS^z}s(w#plHaDSjeb=L# ztqfupHXw%Xxc)OQ|0n>QW6En&@xX#p{k!+L{{1Vnd>0YQ5M`^#`?OM-OqrAVp8Ifi z^hN&6pnX3v?2lppn4uQBa&~eaMNyPQJZK;n~G?9Rw6S4QA#4BEbj_SMqYCT=8@Qm?1Rz7aAq^DqX zT+vr>RRiYVEsHN^{nwlQkL>k*@ccnsITLuAkBrM_Y+MwObK#gX(ro_bF|`I&v6QKAF;SWe7@}iHbpx1K z#DSK%a4&JBAs%?FFly*7<(1mSI>EuLviQsO+`_&?mFQOWZ{Nu+K87nw5v3n*W;3ZO zGS8Y4H$!+(INTV8$&yp)&9mkj)z{o_ z&W^CSR6rd~^{RuhTXf+rbqc||@oYL6*H3MJi4M>J3QV>K3l%s!fE|_w*TuQ`^Euec z$3xtgB4OJ=CWDd{!(%1fL5Vm|ZBrISZZ5~oWU24)O-p^#H@o_T%c65BbXBUtWnnKe&R6s~R?ES66&8{gIkp+j^WA;~ zjx3!he7X%?Z_#Obf%Hm2_=TPgoE2vQ8nZvkdNCkPYAwNn(+@+j8DI`)m1@xZ$ zOs!S>O1n80mRA-%#e2*k0y*2{-w~x6lN?5XaTz=Li^$Q4#A-+e6eku^4neH#I4^i~ zQ(yADcg{F6LFqj=R>ms7{ICwfWzJFmkCMn{?{okxZz~vkHyM0Fn?50x20%FaqPUo)YQtBiv<4NHSirS;U*D!aTMgnh1SPYE5qGE?5N+ykA0?9bRIFhE>?u1kWKQA(Hgg9g%!aWtQ z$|Lo1+TDOI{q1D+zZUrZk!WNwvur-?C4IWwcb+<=*v#0E*vh-3m~oGP&bu82cu2*% zYIpcS;+E7rZ&$M;>haL{?KSXxt+65oNbCNbycQL^Kj2ni0pkxRuX$`Aj*jAqHDGDZ zpu+}e>B1b126pHRzo-hP75_!~sV(YS5~kx?$|Wyoni_eFpRH!rOkN0?hYw(!VK(T0VA>aG zUgSftGO%h#ei85a(MI5xR{f6btS3XQf!*Q}$n2w_vR*DSS;V!qT1a zCzEbty$n#>hsUHELj-b4_;TXI3Js*x>n)b{JMY7Qab*Fe$WZm?*^V2dhq}A*=Z$MD z@o@cTkoe3^63l%JQoxu*12(4LRSvV>dwyrV|Bw+Het01rM?VQztxx;H6`b!%a1Jw} zK)|%zUQ28uX5)e;u$v34Wi^onuhy7hwMnKWyP-cG_-oG|+A zsg7(vJc(302}ONaLP%R+gYZM`=P;crLfk3J?DFbE-6=9bx^@^JEr*x6VxZh6u;s)M@{;T^Qqk}XLolX%!K&lXhoR$E6DUKzz92zYGtY^ zip`Cx9>8E8a_f-ysn*iq* zsCycPbACz@%fB8@&-)mS=G$M;@IGr1=oXIh*yY5KFeK1ntC;X4@)ncUCSZ;x8U8M% ztC>8@gIPxqNIcQVbZ~XOKt<^+AZq&PmH>iY*GB%ZxX~6Of2K)Zq5;vjZtGgDE8)ZQ z>OE$GnovdG!Syf!4EXOZa4h%-4Fk_};IgXy9(d#wg@XI4oTeWf|EM?#9{~RwDFv2i zOtYB|OkpDG*8u6pk z;);38ifMir@(;^XTO(ap z5F~5qxVMTd1lt(3x>4KTyTSX9_C`pnFPF>zJ-Qvc4_V!;i2xQhqVCFj`8bDZ9%~_} z<^Cn92M#fk(z7S@gcJ*U!b;hbCk7=Rq}5d1rGBAkK{}W7UZ>&%5!mWUYHT?LAkv6@ z*Nx}-$`b708H)4U-j+It-w=InpWEp)fc(=Kb&Brr>=_?NhFGu`CE(Q)@=m9C)cz%M z<@lS*(Hi(GT}#W4;$L{jHFkbsTCHaw&vKLw2R=kJeSt_!XOH<15Qm({Sb#~-&ESvGOrH6_|G<0hN(<|_gVI(yy0BWkUA zLgQ2eCuq-(Lna2x??OP)P;JiVL!&;3O0S<}flV2ad`n#2=wL&+o&&&^G=uSm$ zb#CbNpc?b((_mv}zo+=Uh@v$>{vVe>afOZT6pk_w-Fzs^)Dq3SFb*sx{3Q_u>bSDA1x z_#%~!PsbpOck!)Q2QMdBA7X{Ajl?(I#rv>s^x>*k>Z-SF&H?!tVuok^(PUR-J?b`1 zQ-ZF_0|;W#9PUwy!p-I0MYb8|4$M@uy=X(PKq87CD5bi)$(nj&lE(UTXZ}aKA&!0{ zePi-s<`%96Z?Gi9%kLVQr+2rvd0Jf&D=nCDG_eTp1a-->bNVjw(uZO}Aa0?qD-3*N*fc`zQ~y>irl;4&fjd6exjVdkHYB;H52=AsEvX%6_y`s6`la z-;E%Z5`qv7n8kI?F&m(o&5%IMBt~{(;CSHm9H-1WU-enj=%!hu`ZyKPB)qjs>^>$; zNz1aeH7?e4e{{R<4W0pVY>>DM`Qs#iMs znyEH!MmAsIq+Y%^Fp#u~8?~f5(uFEcxAiqs`mcpQE=${@9$Wl44lNqXi(EHg$sn@D zu!c-f8z)nOf+CS61%cPOnZfQvQUaYXBNIzWQxIBaDQz+yl{%hE#VeoZK0K}h0vd;S z;DAZ>zo}sGW~=8D>iSc0|L12gIJ$LpeG(f!^n|!9T$5pn4Q$w~;&H*S)!mjsp3@L) zfgJOp+{|?KE4-a>o>$w)jl!n$&=5B78^sKXA%ZsaxQ|_w%G6cIIiNFJ$G zF?T^7PCoJsf=-^;YG51H-LokKP3K`Z&I-9kb95pO?=)zZbaDzS5v-Sw5Wb;7uDr!=Y?h!N1GH4CLWxM@vH7*+T$wtjv@%CkEH!+2KfH z&jP&s7UasWXJ_9cD3l3XO7uziqdETF`I$}-VAKIT?=RUGS{z2l52Sma|o=W>3Hh|@7r$JIR#&%gT>Mrr<% zOi^z|2kx_?9Wf3-W|p66F~g@d%^ZjlSYBW4eeNWXYeV`E&bzwe3!q9%y#&3|r%t^D zgFaXEjn0nh;vd+{rG2%~?N>xm%g?f1((MTls<+zjCPY|;2g&j4{&)UG2jaqXr*)GN z5#YF8J24@W41t)cK`@K*(YoyULMB+RbgIZ+N&kN*pb(a@@YfSOXTDKHT zQi?2InDkK+X}SVC8%QBNHZwuzhF@Da5n%;F5IkAOiW-b(&@J*L!MpSyt@Qo>7+UC>tf(dSsoCHj67c@O z3c!h|<0{ecD-=P6 zi;!MNKxW>PBdXIrO>&qmHj7^YFRVhEZG)SdK#E4i71S&V^;6pz&l9DIDF7^qI~H!G zgXdtq05Qha(0Z|KHOqJ22ZEfN-ZKo`BSQzAAvb@Q_*LK`_)&^3{iZujL8+t;%bQ+h zbmxLK-FSMXwV}=#JkWy7kYW|CPAm1nWPD4%boW2=)!eAHEkCiiH-8#W3q}-)B4UcQ zX-i15cr)6p7X~Hg9UOc<0;njv^~@m%@dH|!9K$YDX;>N-xgpn)tD80%GU~n}l+}w9 zH{MfHJEuZ#6qCYz^PfG&Hb!1|M5CgE0txuCNq7HWS`Y1YNF-;O^bT@XRN|Ahl(%QZ;^07219h&fs(h|tf&A&d z-qUV9^nDz-)@w?C&uEMvu2_^CdCWHUH!&~96JMYb#ehW4`5*osAkn{c7sy5?6GBpX z|J|z6Bw)REUxwTVFZ@)bjEWXMjToMWq1CLsX#nV1ZuIh5+IZT4>yg01^yUi*k)8M0 z4Gq+W%veXw<&X-9OL&{U+c_6B> z>(>C9w1>J%SGkmiFbc%1eEe%Ol-b zVi?F#BSbgdYJ#P93BS`8a5j$P>IlDPHe$9Ys3}U2YY~n0a@@`HjnitFk_cc=m7Ui4|3Nvw*ROyy| zcaDV19PwNj=bysUGyxzi*=got={$&NDT_KZWD2TlnP@?H)=m8ykC^V{Zd3`x^W#2p zvk`HpzLiT0()(SvoO|d?zE2Y@4~PF*HO6Fjf{)L7{R;}(tuQ^Dh=nd(xhBR~fgQyI zHFaud%k|noz`Ft)p4hR(&m?uPoNY;Y9AXR=F%~eX2G{r&syMRu|M)_sDb0G}27n2;} z4%F<;4e_~gBx(SX1ja(!b>JtSL>TgD2lY;31szAhTWEn6N+M=%ZREW=JXCmvnSM*HqbB}zhYOVO{ngw>q zBBGl46EgNI81@c42TDv7R1#jWX z)dp*!Dl73q9^;|%$a!pa3VBEwRV+T(8wAz^iV&#uYnr}=VzB;g%>$P&p1RlW%GYl1 z#rJmpX~1iV{;frU@28_`hAidV&)=D&pACWJcs2@7>n;Ncu5XDPa&pD+j=5$?QGp89 z3)3W-(x2b+bLDmJ&Wl*={eVR|OcupX9*&N{Sp1|t3WDCWP6%VrZcr8GgP(UW7Cu`hq&sD48r|kC=6ixzY z*#2=1f2&uIssfhG0Fk_7dC_m2f!aH&gj%9)WI}F|=dmV%s=GfbDl2Ki1{@ou)2B}8 z&!mgzExW+T5xs*DD^7lEJ*DK}@85Il|EZ`Q8xaEs-xS-Brb}7^a58IW;4Gr6yNZuN zkgj6Rk3XkcOTX_MaO>l!i;Vj16aL9ZRQGlz4*TL@iI`eY*Jdi99W<)2jp%E|9&p1 znR2H%IzDz5(M)y|m@uZcy!`MXdlLlz6f|WTlWgjPOR+N-TxP>d6~QJL#APPs#l~G* zy-uP3cDnF>0^TNV_vbs~AfSUtg8*jF@O@D!d&My#{xS2!lO`O9D6;u|IhIRq3Q~%$ z?nVExin5aJMoSz|fxZ_;>wPiraO<>s>f@)#Sdvc-8AU}1GRbsLD)~9pd@*-h$?AF* zPJZ6ovZnlQ>zl`d5Su*-1^!P`^xXT8_m-pg@QdH*jd#*hPBiVa9YWe&lyqRIJ7vh> zB+r|%3QNJDMsG?9LQ#7VHiU$+z1(24p+v+;O-+QM0W?U~?3?i6o!oXZsAcGR#^v$` zjpFNEr`yZLD0)i`VfzD&0yJQILMNJ=8b|=ui=LQKi1kUT`#cI}*wsRs$-_Njrk@b_ zt$$h~UfuI%6!rUQ1p84+iK*o zP6==Ta-{^@eo^h{@TRRY^XT>-yhl`gyL!m`^mr+Bqe@;()hk+NrO5oaSl0VU4)4sY zRd?^j+*4E?c}K2&SMlDh6Us zh@E*AYEENv)ZgmmvOi7;MHwDv3MBEpD*(R#!AA{}p2viE(S8la3A~oJ4>xl-0%_BM zCbqf*de&(dI(F5|6wn@Jh?7{(fC(?g!q=IqxdMkTKd!u0bL%rdX=vgNR7rK}MO5sY zZJVNiG*o6D4Ots3@caPdU52PsRO!|3!QN~B6yyzop)uegLZ4RH=zXM%yG>ZD z8#EhDDPB6u3m&NUyFCzI9DuCvFe~XbZrb3x?|oQn2NR-yG&f775lxm`RO=uNX~li{ zLiX>_>guU)=Dz?3x#(QLxr0f+bJmvd4(-px(z+MCt;Voj|k(0H&q-N4?k%nqW`POh%5*>4(B zf2P%eMU76=v{FTXzSwi<7;pyA0CORsQxkJWd1dp zPbIzM{@|~bZT#sNjG=a6Ht8>_8JxOwn9#=SEVI1m{E2Q#yMIRjmr^g;f(FmRUg&g^ zy--X~kp%;YJC%`3m5W8W%=&XtAcbReH~aUL0mK9L+_eH0?H`GC-KP4pyK%65)KdUY zC@Bg1Z!0AjUGDJ_7>i9YoLpCbyxNAYidXPR!tFeUMh^?GsNWDCVg5R)Cyf^JdTlMQ zB%-tG%Ike42qO*^c;QThvz@RZ)X_RrXyX~E83WfVbeMIVsGI?eEY)Rbph-KK-+oGh zsdVm$tF_Jxnz z^!)K?!JY%QJd(f4+VgCghl-XJ53w`Vmn9g!`ox*OehHEy?|ZaFiZj1C86m56&*+(n zRpz&YyzD!f*!FJ@Zc!Wa>XmRodl3-;ve&WMC7eWSJIFJ&tw%X4;nLWq!OllcyK27;WEEWLyz= z#U8VN4ZTRYPnoaI=Qen!DiO!I8$uslDS3tss!<9KUjhJ4Z{zdXYv7@4?H2F_Znksw zB>!m`V*eYY$3+63^j`-wF`qx{r!iE5uf9jpWc8|QxJRIL(I8+z<3|5_?`-Y{nzfT( zB_Up_cKgDykf)yE5R);qRElmDVJkyPR1mbau(xkW7gaBsu<+42%%0KHGu4Q{GY=Z;1JEDLj5sB6KbJtQnj%$?`C}^|3)`@v5XobhR{}} zJs}j9LNq#&=YUjL0+$)lh^2{2pi4Qjq5@J8+j};j5}l04A^~2^}0J7>4&>%im{f z8Z$>?#UL@#~5P28xe&rc%y`%=gK36 zyGu+@c%G>O2!hDeVc~(1dZ#=L>w8vL_JGT6&Q}hMC6aHa&x`n9u6ag$!2+Jzka@|4 zaEljWzWVI127q;@f;G!K9?(odjqs^vuIB9c=`GDKCaM#rBv)`OPbk& zc6Y8B6V{27eyou!rJV}`8jP6tk3!9Ov;SDe5w%Dr$%b)Pp?(P)%p+W_<6^^pKl1ps z%evjWhG-?CI>EK{{ydf3A_yDFOsAA88WL4kYb(MXv)_S5nIg#z55{Uz7>HgYr~phk zYq@tz*k$y7`7Cmj!=sY)0yUGV(s>%g$sK!#qHMnaA3w+m@rL8}t-?|ZrISmbrlK|b zztQNtz}prajl{qFrz+--`w(z&OBh3&UdMV8<7kq0jeG{Kdf3*86;y(dpLG?Ze7a>=zZ%a7Xc{U;v0)Y*^&ki` z^p}7fX=B4tc>S^hbYvAfw!}g_JtdUC>mt~)f?1*j5hl52%I0N69Ho}!1NYZz3MsS- zB9Wq2{89HUOb6I#%ZG5wholZ>lWy#H*%z~NOnKg#@_{qgqRn%1X^p_J>j7zoVYMyj2=R|ro6StF5LK2sv74%- zK;`6{{c%Xtq7~L$8n@CY-PG+bxvPmBwF-036z~!i5fhU$+WA`tTQ$OHCqa;o_i+mN z(7?a7Y5pgZfqybe9t9};`;BhrJ0?ebYfkeYC#c{hs};u=denb{8Zlj05eif8S+n!% zYEQlqb}v(AYUv*Ozj>v}SKiZg8abI3x~b4pLCZkBdG{GXZY5E7?+wPmPp>}|H1fxV zeCqlti~MDXo_sTdlxSbbwl9h%N1icjo}MpQC;~)V31ox5e+OvI#&@DRUNUVz0G2K3 zeLHrf#J+?I#Q~sTtLIb!zG|tV&z>&^M)xk_=4KIw1Odr5AUi#OK|{|zGI zwKo@=`@pkf_71=etJ75Myv=oX`z0elJ%SN!3cj^O%Qr%6zbN1p1SX^vmu@CF!i6qj zK6syr(HDXkDX!YWKGA=;xswhx)1%D^uG}3VmtY)HrpHskenlZ+nt@7;qOc+P;V?H< zHW_0uH4ulrhD}<-y09cv8%q;o(3PYU5j(2H1o#-DMYM`W?#cd8CGAfNC063_3Ipen z-pl;%FII?#h88+w3{yX)6{3nS83PT;%qe?yO4)+A@!rLhqA-_4 z1Cu?%*enF01ShIpx+KIlnE35#X_g8pJbWG159YRgOkaCJ_ij_~97$FsMuivSL=i|T z(|Ib zanff{fDxS^8JI-k8j!__bi(xm$=NhlB47eZS6f0N&rY~?rA^o_n>`v0>?+%uVmcGa zaN#l+?Q5_DW+o%#Kv%2@4`E2;XwB-hUA^K0UP7|#e!-tCbMjtWt@RsXYi}3 z^b>kcc)Ggw5U;Qr1_$YB%Ky%9%FR|m=?5m**|BnYQ)Z(^kJ3*Yl6p{YFoP*b@vChu z)Dtz%ZX*aac2wPi+9BUl6agdis~o2t`;^opRnP!2w#mBMd z%1fVW?h)0glff{UD#=?wL-zJ9!fRVXCgWtR2JEHvbKETqJ%r?M5ugb7Q3g~0XQG+` zdgLsB(uTt_QI3Co--ddvzmEA`C`PC2@1J1CGq|Ok5uA2rZS}e(1ywRg<3@>AXOEAf zL?amU{39rPz+HQcGGie3Cz2;&F}}1n949nHju(Hk6{WleG4*>?-~^5to=IXBe zu|F0ku~<^vT-+aC-*bE77&XjP}z8MHuAc9aaG=UD4ABQLFC_{OK2e@Qk|A%2>z_69qH`a zmk%XW%G1~o+XfsxQ9?fK)*r~w<^F!$czP0RO*j>Sx3D?JK17?;(KY2_*=C-pBQx3m}S>8GS(OVXVWRbzt&=^rf zMHcJQP0DpUNkvq6&pCMb%y-`H6;^7=2(X;o{eIR2Ek6odF!*`zJ;PW zJ*TDm4Vtn<1>Z4=G8t|4f-M}0Pv`$f(piR8)ooGu(A^>39n#$$(g*?y(jh6K^r5>!M7mMBl?Fk& zk?xZ2?z{Nz^YEYAXYDn|9OE4n_7kf!@Dls2fpK}4x1=0KEB`))Y;ov*w?vt92(1@d zbybebBCD-(^7Tuk@JQ&yM}g-(tqx-DhYAuTkkAS;&-=UZ4a#N`;?y0uzUnFDx|Cu!bXmV3!8F?o?k73@D@_tH1s-wcT&;il*fJw zK_1)3D1wqygm___7l~8X^q0+fD8|WZmYI{p7shiRO8b4i+;**EV6R&SF`ITTXf(Oj z^_hDvtw5yw(cy7RN`{4)7@vV{^?=5 zh?AC4^k-ww%|nTeL4q*T&BYXB7nud#{-xn?OBe5(4E%AKn#Ojf@hyxXC?-Lf8O=_B zcO%sQ(80^^a}r%fjH+D(KoZqJKj0*mg6A2Oj!(zoWr3PqpjHD*&VeITgn@tXd(HXx zqq`d0R?wdd$d5fef`Sov66Lxo1zKIHSn=t{OJ>I}x!1di*a+#kw8BxGnTnNRD3q0u zuiTi!1F&PZ?V#e#p@*F$N)>@Uzxo%3ig6&4ERsk!P+*&p2g zzcTqhDYAz`;%aD~MJeHlU&NHti7Uk6b|iCAe)Qw>LP#7;X~smz>F?MbVP#Z3hdVyu z;B#eHC#N{IOR*ph{mq`5UnfTMo!X?-lSZUQ?@Gbp?v~6i)&7DLL`qGKPeq=M5vLr@ zn>UTGj|=UPi#Pw(LJ;qFjKL{C#@@Cdk?|Z zpKU!d)6XC_x7>zgV`MvTD>=3;+S6hK=##Ktjnzn|R4*nle=^{Fw2I@OLSzN4?=YrdMqZ*9Q;8X*0xc% zM=5s!Pm(*C z2TN_&wpH1!hr6pPm`_!DU1!T~6vaKMwTO^@d4b8Xz#@6}&N8!7(9RY?hw0hMrbU4!>_r4p{7IL+c}h(QU$ z@}pvS$ASWRihloC&}RI&ByoKw_Fqh2^7$e2-Om|)iXNoXG2QNfeq+dg%C9a7N+!8m zM2U^%T?k0WM;(mZ0vz$Zbu0K`MC_S*R9Hmm{J7siJDz_0FEJZFR)@TBgDfMYUmeFt zmc9^c&W{f^s_i``lSE@COL(2zi;EvDooZmsZp@aApIsYzWtgNz7alVhKSgr(2Oa#i zm+*|WoUt;5U1f-&_a*+hiY8j7>!9-yc>AyKV6{HrPvYux#dualk1ml+hoC$@xwaR}goDE>qoE{?&aM8uRCr_*5UJg3rKTgPD`aAkr6dOYQH< zob+>h7jdcH{qbH%+}$_Qj(_Fw5p!q)<-jRgJp!vL<%>0Ro}%dj2K@2cA?z5aJfU2~ zArwUQnYDX|@LMA1a19#muN1?xgFkbINVbjHkY&pZ(v{h2;jW9Ei-~ z$kC}&oflBJ;t!Z#ka^ugFFs*y?T+Rv_>Oo?0m~jz_AZEZfK$>8RB3 z47X`%K~8`MvccvIjipm!f;pq>P|}7gkWI1!``@>xjlRu+p%{Z72}#+$Df!;~<7hXC z1ihsa5M9BAWwF(VbwWz$Jy#>l%)a#~W}u5@l2?VXD}vz{Ytog&2SWQ-Mk@pKeD$7s z`&S~(ZFeAgPIL{%8$fJ~&<|M5>3n~`>6pVdfULJ8J`ulAB(`?A3ifGeu7RCzjwqnO z_INVJIC32OIEHA1izfEAEH0S<#&c2HDk=YBDce9iGFx0#yLKvvoUXaQs@U?i$FA7n z5+1F@IqETrS`WqWfi$i_*T31x55cohq3<$|Z(b~SZoQ|1wV0|sGXP4a9Z)2NGdR$X>ruu8;ax!W<@R}ckRO&%aQxYl{uHTW6!#(y9w_#T-YUk;x ztjx!X&DB3le_MT(0PmsOeKPHHbQ1e?A`t?q8Uw96lB1Ib3KPug3J^c&XIwwb1RMn| zyeM1!Vt zZ^ld}Y3>{>`S%fov14nJHW)f4;2Qj6W(_Sf0PAuwvCYZ&aIgsO~Z#w09E zen4Qh37cA9htig3wMF1Y0a2$HyJnI}{eI(t>p}%wCy$n|G!x(J5HyyfsK%Th-F5Qo zD(FcAmHX76Xmh&aee9g2!umg(UMwsPY50eI+|I0v)lkYclf~|q-Zl`1KTZEfc#LmI zVJ1<=;C?hVOafZr05Ha=;sgnLY$z%wMy-U-7X$qr(mymqDT9(5?V$MXi^-?7MZNr_ z>rRRLPQ6VN0dR(h-)_??k2hhe^^IjPynE70uUVPs$Gze_KJpUViN{&@`C5Tu%if&5 z{5dB81&76u<^l8nq@JArgrTZGjFjRWZ10>Uv8hVI0#)_Q2aG|rmFLPcW~ z>dWlk)_y|9Lc^fv%h$?hC%}cMm&50u`w^|oP7t!Ef96HS^n1}|OuE@A!w@`c%2>mR$!yyAbo+~gNI z`JG}3d*N29#i7{eejKc@2(T>tzhfR(;6kX;rFZS(w6U|z^`(|STR|c%pf5J)Uz*mK z`g{l^$c(_q0P9FL%a7{SOASmBOokp{MM9NM&NHJGd+{9RviEc~r0l4gqTx?=&g1kK zBFAH)hHu_mCDWL;Ptpc^8GlTe4++Vy34Eqoe~tw>Cy%+`=13s4^YGV^n8h*JT))Gk zQ)f8LD&GSD$_*m(&=ja7x1{<6zQHDu=V{JQW$8Y2{o-u%h*sJx+si&gMJ<`7Y2cZA zsqENno0o1&)EjuW*z}p{#hc@$^}|C@iREPf9|<-;WCs&!FrH#hf}OO=aDC4`@t3y0W*&qrryOp=9LYzcE1(R$1=-{S&$F%5 zV(`3;E8V}79W^OYO~b?xd4~kme8izKbUKyw3M6_qN947-V|%G19G@EiWI7Ovkn7TP z%;PGY0&~%dveg&Frvy8ZDNp4sN-=gL9Kc?WlHU)5H9>rZ3VmVeP0U;MGOcWrXhnTG zgC1{RVK~Z4Kl$7zBTPjgkZt^O8s~h>GiqzVAX1c+Z(aM~_OF@uZq88K%#oLy3pp$E z>tKzKj^IH|Ve@<39znkx5GR9T3QjUMqPJQ?dzUxCQsvguC07(-FH(bALwStox)QNS zI}iw|c0cEP$<9UqPC1*F@)$IwD>&LsjV9VfUUF2>K6!YG7Y+-gQ(cJhIlLjDS38p< zm`*6;zG<#b#1bfRre%HOs`q&$^O9|TwQ$UYi1WQzr^8S16}bTeJsJX35pdc`L=ljc z<2y+NX`w#+Kv7!MGXz76qVN(gAB?$n^|$=n(kk8fdf_>BXPQQEFEXmgqa8RnU{4;f zNa}(ljh0%D7`qBzVpKZ*Vm!{W6h7oo+b=BrrH*^vH}jpnAQ*e0hD-Qo7-#7q${{pd zwU_d-;JxqJz!S7@`R@Mcfrx?+Y!lW0o56fHPF9fwp2*Dx+urEtJg@X&A`1(5oZyWi zwqoP8K~uc$1vQ50R0>8@qQ?xuTz`o5sI%5a(c!V!;Sx90D$C(kz@-2s9nb;ieImbyy7G_Ck%Xqc z6G@etG2-#p{`OC$81*93zda&5gxiJPktLz%l@2PssmZQO!=dpza}ep=gVgUZU$v-5 zA_0?1dF?_{i!1>q387`{Q&SHJm#X}xdM_1$9!~9-!tk1y_?ARVLwnm)&1lh3A^O+g zF}JNsI3^9YRrYW-!l|BPfCW|Adr}Bz#f58b(Uo|=CXqGI%)bbwVo|~~f^oV~zu(ZI zp_;h;T}~r$I<^DmB{PWZG^traWgG8lbM^;yMMALO?yR$_Ts&O!0h7>y^~1dx`K&|o zzDf}kHc64Q(?~~W)HTuE;-)by)sY%L>GJ&5SnDeu1U~og{)c$Va1?O2{w(hHJh#PX zJ{>9W`pL8dB+cG8+=`{Jf%dr8Vo-+1DNIG&RFf61s`nS`QSglp4L@ciOW+N(-Ttr$ zFziYPq0TUE5)*$!p#DxxA-R1Qx8Qh84uKx2Ul>0tS&09E*Ve2Jhu|Bwd}EXh^|_BAuldOWOBW z5va2FrR2>!KdxQ%${_gw@zxxQvp}VQ1&I~M<)zh{5%Fhs#jZ9I59y*LXcqgZ-o8tu zCuT)ZtNESfltnE{5}LfcGL(h|I0~#A9++E7z5sYE5tZz~CbqJ^b!1QerERvwwEw)5C>rDKQ7D zi{H@c>L|{$R|2j~u$d`N%hN!0)SRt&W~}&a7(*m%mA{*cIa^faSWNul`(HR;_4er) zbhMF(UyxKmBXhe>6fuPcIbFUKA9mXVh*<(z zIxrJHh$cjdluCd^DV0hIT}7HO?5`hl938F_E^i-PL;C2vS1q4dS46I)jwPpZwykx* z3iQOi%cdwsq8lFlt{qy;a0nGsJx!9M)nskyDmE1LK+~gqd#WlMsJ=q<2ziVRv zy2yzt%W(@h_!NENiT2_=Max#OWULNz7?n(&Z>hDV^Q!d@q4oNnUCkbe9yLs=ou5z_ z{d+89Z4cZ#XaFI3b$(~*V3mQ+uhvZJ0Vr?6YZEuV&OHH_1vYJK+Le}YEE{I}bOH!j zI^N7t;8AU!n{IzQD@B?;R~q};4c#|n|52MjT1oNFsZZAPoR#t)@|6%1xmH}AFgfM5 z`7DkrWnv3$XsJv&b^$gWvsyRej)7nwvN4P~;H zQ@Q)#M$nEk+jnBcs&sUalT$1FijCMWLA^=ZXroGKR0dW$he;cM6V|Opf>cf%SRJyS zBY#x0n$wt4ZzT*+hPTjoRbRjqX<=G?qf$k0o*?psfvN5kAy?OvAYZ$p>mdl=tg&d$ zw1HMHH%5EfjVpeJS=o#yaGWQEs--f;0xvjl?E_~UAYoj}9%Iv$vt+0hxvOa-{B^_Q zTQ^jggYN0+b`qc>7X5v z=5bui!MY3b0-PIQI~===yTVqdt()pbm7cHv1-&t+lI?+{(C4;udR%*M-rAAr!NCC6+U7}M2<^vQ9BP~bDhzQ2)Z^iu=N9g_P z@?#V9`hoIb;vX2-p*#P%9w9NE#m-r*(8E=&To`$~^ zP!mFjs@h8@3W zX>mMVh`G#$LRrc#bZmiTTRpJG8gPA8GrvAy`MAMmo*x!EQ)uI4 zr^H=jP^O`yiCEEJUG`-KQe;JDznH!3ro03l*JaW# za?l;pL6#?0Qja2qPbxo2(FLPStQ537GcGI{$&mVs3h2GuN*S@SR+yMN*I1Zv z6(u!iHSnO5mqA0J7OkfDFQ7qh(?9y;{;Lg6a`OaB!dn%NzZn{h@fKe3`&cnk?}3ye zWymgioK`lIbN&u)c#hKNeVFvZoo_*AyM%yhetdlF2V|0&nR+8f+Azmd#I!}iv>{Ak zC9aa>>)nAXB1Ge#ww3x>D~Jg6F34HGMFJ=7Cb!IJR~$ zX8DE{^Iq>BY(e!ZD095ARzIBA_52|J-M}f;NVO_}9X)3~mC& z0e`>ToA?^Cf5{~2RXP|k6Zjp$s;lP+NEMl2jr#Z{W;B+YO%&A;g3o^}i4S7? z{J|&JGh|G9wzTX=7?AxoA^J4NqRk9jXdwigtnN>b6p*UsDouVR@XE^deQ;gNd4t<& zd~z;3Jv0B4*QtmtoWL>lrQa(0O(`^ro46d;X?*F*CkbP5adGwV@MQwVk{7r)O$aqM zNF{8~oF!NwM9@U`Dd_`>dN~kMM{5~DS~pm^o2+KmElEOWl57~~Y(!fzn(Mk{`A!Td z0FJ(AX?kVlRr8vrm-jcX_HPk;CJ-q=0K^!dYfTB*q()f+C&UcK{0gC%q{_#8)QXY( zm1z{6qnc)wnna>Hb?JD=!<`6-3pCjDzp1zom6cj0?)m;(kbV5mMNjFWQbcqbNR%Qd zVQg*zNw@hPUe`s;X(gXHOIc4($Dc|;S5hJbermJc*dE%snA&vxoDtU~8KRTL%P!Fp zy6xH;(Yb<;aPOg+TXf9Go09h0lcOM@-bUh!d}$2qX-Xeb}XQX;FRdJ z&?Xm8e!l)AQ5;POR%CEw6ct9i{u%(aG7S&|5yuny;$ny`cvW6ptrqytW1E^p_OEzh zp^t!80FGj1X78JuEh`c?OZ&Se`4=z5-)!i#g!}2*Mqf}%)h@6%99gJyrS{jf3i=i#Q={;9r6TXtQ2fx}W zJZuq!)|TZa;0G)ciP#-@UQB{A0oIc3nIko0=rbiCLd^b!dpdT>Ky#+IzNm@=y5#r z3zJj^d2$aYt(zCV7aYFL*JV%lSU;f=Jp<1G3xa2}38jbA`U?Tij!0uhrj-_mH^iXB z%Cq*6^Z=2#84bquA)G>*dDhHB&ze>vStx?re@ZMug<74j@n6`)DmDqnt3ijY$^bo1 zdOF+;S{;-iJPp|V3<3(k`GrdB-~;nv5Vlxy39iy;($ZoZmR}SdhZaL`HM|zC;_xZF zM?8%ZIsmj8>H1$yy!BB?yJb3!a<;H0g(Hw*CFlqVwM0;#N+fJu*Ee?jz@evIRVTf z_3wL7y#IX9sKU<0*nr}6Ony;K73|kOigMl(j4h-1GP1W>Ld^d7@j(nY>y5#cb4h_t ziLe*lfAP?-Ly#_9J~ef8fNI5u8%1gR^0ds#R0c|WAdbU*k2Mne3;9T#cH>NEVmPN9xruL1a z-x5SxTOVO6$gY)7CVj1gBl!!}0iWNu)g|B7_u-bW)%!_q^g}sN~g z=LfhZN4ZPBZ3*FOXS0#czR&@(8GYxLyxzSx3}z6+@>AYD-Y}w}SKZ1#GozhQ%63ohLZS*-X>e}UQ z*xFa=0d#Xbeh2w*>Gh0H(1t87NEgtCv=#6PSpIE0ORcQwJ2zMAx#)~mZ%&NUWH#E)V_x*Dg1?`)^ApV2daU1W2 z+h5%U+z94l(Ol5KVWf1z6A}R4PGk-4HQrBm%UHIPT@1tX^YeN*+RB*?h$op0P85ui@v38Y_zsYNy)%s}!U+{m+T80p+r%v7IM0N>kFN@EC;sE65z=r(}Iv zfFPXJ{SFUA}(?agkl6{0q#TtaT79d;hS0i@Y8cayi&q`EQ znfgW}f`Nv_##Dyp?Xo?P*FGab1sOF7yKcWAG&H$Bp!h6z1QKzV^%J=hC+fpXO+kthd9p5asb8c-hQx!?Dq=rGK_Y zbd*=0NuS76a?y3G7tD{dXp?evG&9@Wx=&wx2iM?u({VQY?moJKCRsG>K*L z=4dr3(PYsP7dArhg?2xDbgyP?0SJHkDnxqYmERRxr7!}KYE>!okzUea5d=|9dGn{` zuvu2&fTKih#vv=0A~QjUbVfB?z|jaKlTF%|6(XgJ-?@Xtw7z(q%syjhe0RTU0-Z(< zOkxLX7GrW%Wl{)~UHIEYE1;J4A+=Gy6-T8W6_Om&C+hVRT?vB&!1Ct4A|g>mkSWDiNSj{DgV zj22kZY?h{hAczKoL1BaCgy)Fo(}idD_^0i(1Xyq`9Us)5*1ZuyA+-eie~a08Bp!<~ zEhq*Jw}=FK5MzLH`WOrXEp1*>fTmxMpi*213QzdHDR&97q|mEC;nv&J=Xlj~(Cc(w zd>_0Jyz=GEpnA0GxOVke*ISRX?_;q%EaR@J-%azCk{?`vpoJEV0YUX)3UO)tq?S|W zl<_t;G=$jU^6_8aSM=8a&1vxgC?VD9a$;;X^-YT~O%D{E5W6b{UOv@*GGPSjus@78 zk|Ak(pwtIZx{)W#j6B^?Pei1opNjZIlcZ|?AX|Gp;4%Xk^{-Inw=~y>4{1U>5w%d* zz7hmA7lwN4hU|t#7#L1D;PvvGIEKx@X-vDF+Y@#pgrv>%|1tFkp|c`9DF4v5{xBqg z9t~hk8dyxVei>DaUHQ1meH+;V9KVpH{}TORp9%56fq@!c#WjSp(Pp(R#uO9ZEpqkp zRjnG?TwBEum3kjuXGsVRf=i7phVq{J~jW`Er~ z2fp(ObOVDV&K2$vwCYWT5w#NTYaO@l!3j5Jn)QWxcEW-C{o8*&-h%15>E^qSzf+yc zr^x14?Gz`^1^qQg2B*@|t%WpGJr9a(P!pq!7I^!#;jI#>h5L^s8N~V3?h6lP_6!k49ZNZx2ke zp^LsU+JS)u%O~!FE>@{S15B$XA*p5LH!1FoU<(r6ddc?f=KQO8^woNO)ul`=b=-6=t z?0wA*5;-Z!t-!ApoLTRwRZ-hn-m#aDX0lCTF`knPWe5snQ+kqpR!9f#-nN$Ri;L$A zIvVYwzie9e8~Zrx>|Wl(!&oU9mArzMpC?fN6bt?Hbi#lb85;YK}LE0J>Rw z@hTxGRUvQy=8lO+`{(>YT!DqtCbo4NX6OV?+7OAofaD%}&pOI)tG|$4f_$l}wu$8gPioildPtu|wS;bKB*Q?(;4zJZ>WE^`R)3ITMk z8x~v2`D0W$nd-bGsej>^U`EWS0re|Z#UJs7`-$Z5XgtwG&^7dNXH_hY2Y>{zuLRiY&KCwk4G?@z~i{4Y;EEC*?YDu;lc zxkv0qh4ph3E^BhJ#`t#{Y%OJ}5_lbbxyl({^3sbG4%F8*b~H$&?A&!Q;Jx?oi~n6; zj=UL6K_U-iq;I_Ty?^YRLSaS1VR}aN!<(9hH$nEuu{~y`+^PpkH+8Kp8qj_}c7;0S zxFOV(l{=0gbd{g6(FF@uK<*jk_qn&T^o`7wG-V=of3zdUOMf^dLeivHg8jh@uJL(6 zQHvVCOilrTQAa0ZmcY4&xh<%gGQMYPES3T%X3DzD_O zy4I^Yz{N>F`EMeX2=bT=w4cA5vlcw|XoWw8*YR&9Nbq=wFZd}83Dhv;Ii8)vum{>gY7C*lY8v<`3dB$C-pwrL~()>zuD;g zevrP~|80z>o7vCbxU82O{?kZY0^`EiN0N%%ZURYj$+pKB8Xg zHdiev{{5&J4K-byusoNTLI_eB{fuk4m#yRPVcn(e9Gc6fp@X18V**-#JSlm5$cwon zCnH-wJ3T;-UMJxwl859V2a0~Rj)bwViB+KrWSi>xCl^qylGk2 zYhzpjd_w(4u*Cz#2s8F?U+eIFtVcYmw^v4ol#JAPc0l}K{41J(Nj9M1SVKb& zvl^=j4FdDF<@ME7>T>4gP>?wle>k7$Gx+-aLIL&z6%r*05cTuIz++*Wurx2gho{ST z#Ws>se8EbbagbXZRwC%yx|4ZWim`O@TB_tdTS^5%h-%#8f=YTyiUD>6{NtdET zuGqPnalK+?V{ta066jg@u~ORkNtG?%1@quUtUp1yznh3oD_aF6%(aLX1`g6MaxFen ze?bnTP*!=r!7siabAY0hx_*)7*nU@WJWJ^d2(Oi5s>9HAh7w-;czU>~;*V!+!7gH# zUd}&8=D$Ogy;uf70PbzUaHzz!wZ|E zz-Zd^c6vOr92&c2awhFz8!!QSt|L=}(B zN+14DQDevAq7{xTH+I2$L>)d*KHxWnV${-zsTEGnpGK~f9x&){Po{r2=;xElTa7?# z^UcfE2WkFNbC)hejT{m(1(9IcGU#qoph+u5POAk(aBQDgb&R($8h+6ewwcJ>Xd;_ zsWh7RfQAG}0NM6$o1sq>^9RY74oMVHWE`T}BhT-J++Hd)3jdJyF`AK}7 zu1BEt1OwFWQ2TCjJmK=Eu>+4Pv=gpjM|9-<$_-Kla9LUYl@KxklU4= zbE{f{a1s7}39yZIl3yQ#y_}K6#MA*4-cX-K>MAWj)(Oz<>5-SXn=~S9nTp>cf z&P>J6IC*bD);|@H>!*8tv7%>I=->Z7k>Ts>0vwO3kf%LO1MX_d!ON4UvN|WC#aFpj zuGY!(M^}EXins~poZ3I?ux6Fm6-e~%QK%diI}G|)F%e(iAgA|7l~dbtY^g_zupqh* ze0^GxkBT2?)=}ZYXy7tI9>6B2PpSHwN`m|Cg2BhvRo`#wS(nqI-qub09?aJb378U6 z-x@Ovm`);H2AM^`Q?B`5x5>BifCBlADdm`fNQ~QOOcj!ifR(phfZ-r?{$QmFq7tUi zJTmn)UeA53l?U0u8>YJz7kyy4mG9X_;kg2_$QOz+lc9iiir|AoJFWZp+x5w1o7eGVhx?i*}vLLKL_nq;vPv8$mZ11Xj7C>G zaWn<^WORM=QBqcmvpz!zSNMpl^7JQ0Bd0kl3C_>8(Jqw#g&sA%&pRSXv926p!sg!j z(ZAR-UO@AA*j`=OMm3G{$3-qU0^J}m%CI926(@j&&JKVQp}!gn7#eElbISLSe>*xj znC9UIzNr_Vz#XlYPKH|N%bN&Q7|%=iDMZ%Kcjn1y5-Ls*Po+JtcvhZegw_j}thK=D zpQFP5Q_KM2WsaDKrpQXmql|U!f=xl%8zi3^V!}crl@RA8M^ZYOvTA|lDk`)r@}mZwu{uonG$W<%6D* z)p73CQSfUWqSPjI*9cS{Jjm2^6!t+u^mIYky0d-*NmY@}vhwD#=>to)74yv_Lgg)I zqh5F2DIzpHYUYMXI6_UewO0nVj)2)|vM|4`jf|{H-PJ(uov#l$y4`De! zKm<2D{5L0|@R5JemDVPPr-Ik&+2qrSWHl=>&Z-0j6!RMLc1oYCTM;|wf=j=hu?iUCeJ|p@Uz$rx2 zspS}J&Z4Rs%5=O+9jB8fZxrDEmHlNU&JB^uA5p5HEhN4-lc{g@Xq;D06CboUn1%u> z(y1s^;%#W>N<2bDZMPY=0!r%VhhM+F#lNmNiob=0*dYn--TNeLjP?s`{wN`I+usy( z+uT%!FA&%0mFpZfJ8!gyE8qoaB_BdrT?^XQGXQQPEpn!?W9o7N4th#)?_-3Nvj+GC zInDEN;v!k`Zoj~eNAtDmDG)daCKx$;X9tyv%=P0Zf9{L`nURmgA5sxPv5lz(I0e?2 z{`_pcU^mzIuW0j)-P+osV&w|UeT^JeeixsBEOTN-VmSTKq~Rd%vry2l?J!e%`2ug(>QO{9}P6?_*6VlM zF~>cI_f^yKpHs^n5ps&mk#u@U*cXz6R^;EZ&fLex!9!dbY+abq`{V+H#l_EiX)MZe zX}oM4%+RvR;)@>~yCnP>P!lPJGWZ%^+z{;!7~`IiL`Cvmd90R^K69Lni7Cfzd@0>S zutlp8Uje@F-;#;M>=Do9^lzpkR|0SY{AQY{Qo@KMA?0(*F&zRTn%qA#!}n#g_GT~e z<%_IS3Fn72?GA{-x~imf7?~o-ly)Pn>!y}$8-pvI2KCa_?pB~b4lGF1E?#cyW#CWR z^OG_yepV!p?E%s%>YUXGq^5*^*13RcJOnr}7FVBl5F2yq40yoBG8U-~RY~^vHPuVx zOdAhP8JJnHxb->5j`5w2mVa*#5Fj9+e69S&! zX0IoLYPQZ_Oy2(1$-Sag?P)L=S+wv6=dUO&0|X`D7lxP<&=Ip14ZjaWtrLlxf2xG8 zQZV9`%V-xN$HO}XdTnGqe0{ui^uD}$oRGNPk=QkICH{I+A_^RM+`c;}|1Md6PCZ_o zXRDrP@dLzhuT90|9q(INWfQKn72vk~Bk?rDKXi4Kt4D>nlL0p)t*unU!^N zUW@g|f>^gCkJGS|rg^7UGLgol4+3ZpQrc*8l2SOrs)Y55E?_bdF zpKWK%MvLBPX#jhPWy>2aO+b>NvG>ZdvZm$h3Ha4td7}MpJRMS56GUvx{1UlNq@QrH z)O_ssTv7e=tkH%a=f^H#k9Ke_r=nK0=+&a&z;0NzFpVmPd>(yFDDDJwN0Cn0BmTG0 zUfIFB$YEh?IHE*ENt=R)#--3_{F#4yo@H0qvl*jDsl{2*Zp@O|Xl0k0p^F$jI zRA!*EeT?8GMOpU|*2Ue&Nt#eCawOS|B$e`~(fpv5v+$kh4n$oJKi|HO z~9nOyPgYu`D2xowXLX&?ec72U_yp(}<0auv*D;lPqe6lvE{s({#vZ|4ZuxOL& z&!4KJvl=RKpL1QobIchponQ&Wdx?;fl*Xl}sl2+o+y9v#BRUy*iCB+MEnGGtfdcUX zM0COK`8Q~ch0?S3tms!;vHZ4d>Ff+;^gj9X0$fPt$)1mZ?!9Tp|2<_T(fad>v2sa7!&`d#Q%v9%U)i@uq!L zBI{??+aVKgEg2LOkU!>XWPT77v^L8w3*;x9)7OJeUy#S=Y~Hk2nBe%v<=jH&ox2KHqz4E-+`c>SK5mEALFN5h z<0xWxP5~H=t9Mv&ywUd@%<9r#4vsTZ_5x!JPQ zcJPeq7nv_&g+$BzPLZmrkUf7i*V?~oJvKTGwgIht(s%QcN6515*PM}jwKDKdQ>uyn z9mj6wg`tKTp;sOie7ZC|s}1x@0mzpso+f2tdrrzfMn(hE49>v{T=1%n09cp9*7dw+ zQF^cLT1v}`iWouOx}icK4T`~#xW?A`d!>L${!yGG4Lhml_f(P1?%O4G2J6+Q`Wo?T zf&TZ2Umpl#V`GV86=p!`>Jh(@XHplX7!vI=vtVyY2*v*6<2ETH#?f6)g>XgIh&g%o z>-9|r7QtNC`mYe7r}X?+5z*s34QTI+>K@6#-qGS7;rTXA-1hexdVY~nJ@tt7@NbK9 z!$&FyNjZrRLJ{>-O^O&VrI&0@uht%+%#SXnDkb)0_fz<+V2{aJ00;C`2D~Nyx&?QB z3ZAG*hNWJXst&FpPp`91Gbmjb#g^YT)uZL^P<}P7SdCb*JiK~Ls?pd@`PdOV>ejkW ze^Dy&c%oiqAEnU*pgyBj~ z5}Ey8$9j%1^whmDZ_>aF$}%QJ9bu}sxy3i^jGxGyn=7q}A7%!J6v_4q7$wUbV_PaX zGh*QOKpDfO)AndBU#dfFaruhfvR&A;Ir4}3sT}*3khedeMEZo(5!}{3@J;~-G-Q|b zn8(#&ynS3Gn_8j+Nxl=<$8OfCnX2=4m|F1sc5fVAqcpiXfWewUQA{4!`?U^&l^7&i zA)E}Vugmnx@ynKEni!TtbuD)G^oz6)D%}WCA)F1W6OtXdz1sK<9LI0jK$P_>jlB@r zDTQb^1b-CDOKATF3F{hO(|nX)^Egn~2-Br@dk$l~_WbsrAzT+~Q`xkTfNEf&Lk@O0 z#gpr4HO3}ex~)kX1@DIgn4L;E21xwIs6!kil^Z=^tFfH^Ojbkmo~8*c{Z+3!IaA9q zLeUa#EfXpVYKq6&9rWGEN~DU2t06+!ES+YjP;fD{c&uK5EViI>Mm(%9fZiCzIPzwn zd}Pt;ZaB`XkovFJC0bBz%uRe$kU|;w1*4?5l;?zfuaB9g*+*PTFFCZ} z-{M0N%=ON+A41@~R33!ip=NwNZPit3OPghUZS5r@lY2(kQ z>G6N3sYTCn^^`BPSMoyT^$~*arQ`Gq=uOv0^iT$fB|WoEnNP{q(`nnnT1iFQ|9E=K zfT+5*ZFuMo0qGLyknT=tDUp^^Kw3ICjdV&klG3Rljihuph=53U!@Icd=llMnFf)7B zI?p59)A{W=GF4aS(VJbEU>}4sJzY8fj?SG1rlX}2!o!p?B8dR%{6U1qkpE{umHD|-p@|s%xEkCvyRGmt?V)GW0V0K zNpTAL;Fe^mFoMCU%KJ6lq>D1avuu%N)%D+qUp;GYy`hYr$y0h zsxL&So+jkzilVv~a{pX&keInX)5^eOf)vfGoCL^6b#eYREbs!`?&e8JSwU`k2%jEl z>S0PABi^d$?r-_?7_qba6f)hxjC_%k<(b#h$n6^ulKeX@9A9kLmpJo&ShUwqGagea z-?VpfXOmJYQv{yUMMoK2@;N1s{wQe6i~+}}DFU6Bq5UV4;mta?>{JHI=+OYKR0!EzFO;5yH9 zHdh~J_WT4C)?oB1rhfXi734H@LJsuQwR6hT#xpLR#Z=5~o4~vzqbbIU`2Gnq0$hbl zyLD$RD^|x}WFV2VN;7#>N%cVp2oy@{wlgl5hieF}_t!gOUgMeFYwy9excPx;E{`$1 zYOZYf8cUg;GN_h}`G6@)JX^esch#qpmwVFJy1e@9^s&$~%a0Hr<09j-!1`9R!g{^q zJOeZH6*?At*=o+sHni1;L#2JmWJi)VzDKjtdNS$sJoK_X<6~#g6@-;6tACU_^_IY6 zG;LE*+0Y^$2f3*pD4f`|jvuS_~4h)=`Z6Y{QKH#?8BT72QBnW0b|;7fudlr2rS) zwzc$yH?2?PV4;%?$)7J4hXdAoCQdNQmV-Mh;nCv`SUrw&AfZe}|EGy(o(D~sHjJQU zB^MV3x2osJT_R~ivRPjqSLR%o2?+})iC3??M@rC`2YTC{Vnisp9eUwogz#55KyL@` z)|m^xA!^&#n(a3uR<kjHZgXZpzEOMzY%@st3+-o*rkR zpWgop1o-@3T7Q;D1r*<_1xffRkR1jv5Bq{tT9D4u1yTnxoPH<9zmG#SPal#?`4}Kj zkVxS5(TH*8+3YOIT_#i#l|R?20;L(YrW)7`Y-NATHl+H+XTDfy z`03h=l_QwoBK3W4Vj@8&IKJA#gc*VPUx%)ia)jJKP-$sAwX2wZUWI;!>Sy`oreTxE z+U`O2R*)Co1KgyPVj`V#E>*p!NJGtcgdTBgdkZrhJ*!JMmEO`>jF0nju0bf(-4T`l zdC==Q#KCdSL=Dp^p-fd-?e2BA;r^>J!#=@a5h@d{Mgel>?rJ$sMK#x_r8Pl(g!CUd zhCB4yb+fl)^%7z;wFVMs6c#NSpt@;@=y4W-{2$Xtd-y4{TYR`t4p*)xjHI<~QqtZx zB`BlvH`0dDA=!|PFze5(I>@q+$khmc(R8SU-BpCxRzvF zlnEP0wxKjrFi6E%vSUcIY3KHDUQ%^#^tLbe66{sO$A0rH{9jJFb0@T0;6Wcviiq45 z?SshyLscV7y#U8 z(FB^y)K2!gK+jqgjw%r|M`Zo4#%a>^BOO@g1IY%Oob!aaa&v|BOo(588Lf)1P-f2P z&HDrr5pryI?++U~A<#aL`B|P$DDN0D2Wi+J7;Jxk-`p-`dh3SROlI6sfE-bxHkNCU z%SNfPes5mvrDrO8`MAc+{BKW%kJd4lwJj_v%?cgS~W8KZuPt zZt>`_YfO;XI6KQM3lAUH?#)vz z#z<~spMlJPIBj=dU%44~kBOlnETb0B;FX()JGi7lI`9^PY~t42VwGr2UaZeNx}x8Cudij?*dz2^-RU0Dd7`0H_2msl@+6|c+DUl~QOXI9dAe+bWX%cY zd-BSazLiRUCQZEIReqCS`*fU@!}TxjOZ0{alV)PWueqOpmXr@mqy?~FJ2yx|TYBWG zujM6gR06RPvwe?AHf!m|CmYLKA66H%lQ$?wMyRTmMAv)8`wu@fVEQ9!p85RClBfWI z6)M^B7XN(tkSMd>j=ExFlhP|1X9l<^w!W>LkxWuEZClCq;CQJXRHjzN1S`tL4ZtiI z{Q%v&_@G7>ocJT_2`mKqBousv*itf$sq+&%2Tz2mCedHdnY1i}(#uG>=aIe0p*|$- z8syHUl*M#b2UmL;2pJ(xzApweLz~2qZ1+$NcLLacU`c5Uvm;S150UaCeHTBk4L#ai$v-**@JY0gFFw}x7@PKia_{TwH?HS(R}t$3y3;h_=rFd@QaLxv?vi!)W4}Wn z-Jjvdu$gARJpSrs?ig_3y(K)pXd!Y;_$h3AgCK*OYet#`HsWZRDVVr4%8S$?<@opE zmy2<^s1wUGSP?7YAs2+LcREJbqsL-L<4r|)0&2*N-Cb_<;0b(_#;Pr3@F8qNGWfvN zBir)ey&o5129bq!>Paf7%RYxLvtDR@&O%4xuXvTetfu!7TP`V?c}9Ip>X8G)4PW|| zjV$bYi}ggiu<&Ias9OL>5un)#WS?E&q@SvFcCH5K`cG^_e-O%Sf|`JY*#7ABG{Eg( zc@5-aanN6G@>8TW$;O-K_IU<0*^TjtnaRv$b~bXRMtW~e@pOLNURY$gBs^>WM}V&7 zWLf^Go9bGl#tI7AQtZj*qJUXYFA9bVDCWLK+Pc1u5SZ?ZKy}=$suXgj$kCrh^mv;n zf7QMqzW{w|b?p;pC(m%2pjEhk4SPt2F!d)NN9M)cXEXk#lPy-e&= zLS4mFg_FUW1HIbpFGzQb3vhh@0vK-NKftXet^-Y0Ml=IY)XV@S&S#GDo4b986%}S_ zJJ&piORa9NSm-Q5X~uO#J=oOnR$QHSwSMRJYIqa>hsO!>y5qB9fQ3C_f5lSWNv6ng z33(>ta5Jb(tZr-|fr+X(Q*a^yzwe7x_{K-3;9%*)&ODKtYmcmTK#+r;iH_n!vGD}c zpaY)+FAn-ic1xV%byzWp3^|SxkyG`T)-Zh)%xg3z7)n=o5(k zQ@eTc-T8)9F6{5tozM12uAttS{t1bU)r7;|kvECNp#?j8D@Qyu@&(|w{gjWYJebV& zgxgurH_AO%Vb)|NWd^5yKN2$sFE6qtJ@|xv#9Egs`wow6-&`zHJ$&$p08hE2ye`;so7cV{rwUDmoEX&_(&-AKX|z)Jjid{AqZW);08$$>Qy&&9WYbY@Zi~$c>@-HvbmoD=RC3u?5Vxs9f)7zFHwkDHDJ>YRBPSYC^;on%Qu@d&S#V&m{-{H zKq<$EoXg=2f<(x|CgceUM$PP#U-HKnZU>wnSI_&!*nM zsO#Zw72{c*iK5^I7%oruK}O;#0Pt?^3L7&bZZ^39D-AxX-gPmZAuEuow&x1mfNVqW zXe=2~y6NNXKI>V_%u|metGq^Nn0bg-fqcEaPgQ)iDdh5>>>I88{x?OQZ;BF(STxab z<0VYggq!8fKkT?N$uP(@DexQoqHN#mk_*A?FT^q2-Ew9^gX*ud#>)SZzQ*d76w{b` zTG~YVP3u$=HfmuKB6)C_m2=)ydzQMisJkUC@kI@j(i6Fruu5_B1{AguKPNT&04;4J zsKOLs7!r$Of5|(oi|VmR_l{WwGzNl9Wh0s@a>l4fo?BAD9oAq?lY$mPxB;4Qf*d`a z9hvA!SF8ceu-OfoAv_XU0d3?|iOTKGD{j5E~p?Bet3r!i@}=g7b(WGm)&{4C41p$#XqvVps11Z(?eY(47- ztAOorce)s`V4ereSi4@-&5Z@mGw%HQ&h0-12I>U4B3GE5McKaL+s@2$F`&qr^_6h- zrTMC`^U%@7JKEIGKLl2_m}hI`bYCx*zV^Ccw1rJwS>z+6e>(1`mhTwCs+8j#DiAG_ zaOQwpSZk{D*F*sD)XJs;12|tjI)6p~U@}MTSkVs;gGmO9In?yC z;Tx}JAiY$ZxAqadout%|YQ7f^+|k2+AOjToTWZ1`12Q)zka zF*khM0{sF`IrM`s`D?Be(Q83KI7}PW{j7))oi#utm~xbL_&J6MqB-L8u8MfnOwRt{ z{R=N}xC!)KYt|0xg))X8dfW?w<4^Hqgs8_7&OZ1!|gAI2~6k!@w^IEL!xwe~^BPI#F%QDql=#CeLN?jBxu)`2iPdd4c zBRceYQb|7qn+&l8u}``Lu|PzTNk*vCoU6l|^Gr8Z2lPnRKJkdl+xeh%CMiLc%@3-% zhF(5CH9c4aRE0(cQV@P+BD0t0nWSI1yU&pPM(+Ejv( zq<3KzXT89eeRz6G`^$&m%GkJGFLXaUOFi`Df=W0>)jsOi8DOB)53{$LR-OZA@<>y2??OK&s$5Ypi8N5fuxkkUeET?`t1G~M0$i1c>XM*wnW&*h`!HcUA z6OLh?HL5^|8vS9<3xcoYrhDn<#LiVJ5$pFb{3{-B(w`275nYZrp`;08sOn#G@N?`G z>kOmTt=Kit1JDvFZCo4t$A_Utis$d_mM71d`IIA0 zI$GTr31{uh2adS_xhDno;qE(MM};~|wl+Arx;j+jYED zoI*=K#fwL+A^0b@9=t(|c2dbJ$+yII>;#mpljt-g11b;p#5&8r)B zW0UvZ12r-emmWF4q&k8^6qUBUXB*i5l}az@^!vrOn3sC%$bbNdTth~ATNWN$I#z0! zV*m(?#m3IGRpU1*%z=1fH_(ihmOW9@N`H2RqL5LnNf02t8StPv&TqV^DO#5*JqEGU}iEAn@&r6UIALiIG3pTREl7 zlTo79eBEtDgF~JzN!TfgrGGqL#8Wrbs+o3Trz2#kbsWj9Sd1N+SbKxH6Y z^ZbH-(mN(ez&eSg<|;xN+CCP>`gh~q zbN_5N`ms@{$v#q=MbeB1h)+2vRXEd!z`U_ThNyC#1rO#Km5spee#YL9-w9qFF>@8~ zpfjR_e&tJFIF-OFn`j&=vDLLTNg;0y^j-@lYn_l9LDx^^=lXFu9Kg3jIxg5w}lP?8Rz(WHZ(ccE_mw*O757)T@rUKc+R1N z-d!CU<;R$=p?I|^qRXtCMysGU#Q=tjwWT*P0-376V>?$18PR|E+-UF8TMhNyJP-eI zYE1-Bw2eug^(KD|6KPt(Jr9k3JNX>6q+j0a}mlZ$sthLF|=w89`?m^t}Vp*rzj)tf4Hj!5H zSX8g{$*~z0mwZrkO@qS5KCiT2cm*z1bY&i;*N*w|k;aAPlu7E7&1$c^p9Y&$IDtX6 zVw6KjIu0WGv`)OR^)hixvE7hBM>Zg=!g@7NO=m{v+q9|qN9xRcsbEWwcDskjCZ@PA zqB@_HS!DwiGQ!0&PSmC(U+HJ5@lz-#!UozUrPGO37L1`{wWQA|X!#_+XFKOb2R@R) zTBQiy%~CSgr5`I(i6m;Kuu3LwSY~wGJ9MrU!_1*iHi-4y#ig!lT3b0<5lwao&-bKA zJ)?ilE=X6*Sl2a3$J4pHUk%vTSOwW?cIqG`M90ZINd!VD!WsKsViY-UETidp%d#C_ zS9ULjIVFUgDpgFpVwv?1AAOL+6Ey_Lu`iEia3m%?*j!*qE}F>nF9JEy-@H*8IcH({ z`9Tk|w&7#3X|$G^BL-q-9lk)vyz_echBP)G?g9ZL9B7M!~8u=_MYic zsr72vJD~J<g8(0}|%Pl7V3Dn-o8j5NITqNl10 zEg2T^w7!&uPOJ>enL&QhND&J0mrY@elALY=b;X*#iCPO3&b6 z#7yT1p}U@!)vxM(s1@aWZ32uZYNj5B2f_$dB0 zATq;V_%}$BE!Y1gAUWhK;|^_bF`>A&(IT&h&g>t`51_4wbBO8=Y_0gq125LO?hT^; zTRMfrwxAGJfi@~dO|kd=JM%=ySQ9DJavX6;O)`FQ77oqa$pi(7JRv41l1$V)IyT60 zLb!dJ_NvJCe+@bw68b6U9kDdW5hKj2uRA$Q{vGV0p%`AJd@S1OZYUd>wfpdPTW&4m zp*gfmTD}&V`R$&Y7!NPamFvu#Bjcw`&pT`G50_0TmWi$Lga5Q<(-A1fg*YnDmA$-$ zJTq&RJ_w%Y-e9hn@uj1soci{*I1K_e@6Yem?bzEZw=kGv;w_UT3=+FPZGmZdHfmyb zc|{@>{NN8AdGdZR#7+?;Ahiy6ghN?{{o+kK#p(@jFi6 zUcoLwvQe`5&A&%k<;s7uN|j!VF8dIP^l_YM6TJn!h(hKkWKm;%!jK%$CR*^~B}?ey zNPI2E^TWbOiLLl!T&iD!tcSuin{QG5uk`76_zkA6A;l%tRz7 zDCa4gi*XC5fOYgsNh@NkFn*A{zTLePRh4jwO6EJ77Ljx`E0i3k)y~kRrec6S=;J0zz z0p5b@`%z@Z*FlBHNZ&lN@@xryjY*Vbmy>-=veUh^G|b{h9oKvKKfvt&JG&5k#W2K9 zljsD9KPZ)4(MAZ_?D|*85u|eS6Xajpg~H5FR(mSyS6~t9FYu5*K!h!SI^0S#hCMNO zTSs~&y!yfu*zQ67`&sH@PN*`rq|hh|H6r79%joajTG)f=9#;LiAsVOym&*^Udd!*u zZ;izB4uTHacL1xe8CvXHX!v~a-KrM%W8;a~d{I8ifvz@)omvN2J<#nAdlqtL5~FGL z!QyohsWDkAA>Ovxc`u>k9P?R{IFcX$^ltG|#uVHMiC2~~e{m$={Mnc(o^{^gJ5*pl?Y6AH_r&`+CA5OwoOjMOQ)rGce7H%a#?tZZkTy8--dnW&WSo^jH~MOkJM*1F zl+7Puxe9G~wZ?^V0V|O4oQhBQDSnUg{fAKrVspYv$PrtYszbt-SS`HJw~es<0Pf>+ zJK;JL@0)YB$o))@%g4G>M<*Xwas0oOF)sll(XWL?5!7b@s1% zmWf4X?0Y2yzrO`c6Xsl-!x}`q>Hybe%vQFOlN)Oph<)$B(k``dcsh-qIi)sj z|1Z>x!Y>mc5iU{Af_I=4i!FX`dXama5PLvtR6TO|!yjFS9Q)bGAhQ%GezWJLE>fyk z7Q18*M~bl{jjkaKo`XLfi!WWYNjr0{63b9(e3CorQ@vkxF57cBY;L62uhA~o3~(rb z+gOB~5;b*3)@~xHyIV+pmD}srxusqnc>X08V=RJvIOY{#Dx3Ct z@EmyI?!$DD>m3TqI8h$jYp!gKpK(VE9?`1GNtTVAe3noGvX#<@kn3M-6kC-4^cEws zhys9MB!fS30Yzf9O%|U;>eB#*;feM2{4z4+FXm-)g+A`~=X21r?6_~=zjxU1B^WcR zaF4xUDLA~}UQ#NU%=Z(PvUL(hzW--EW}bbsWwu^^y1};)!#{2pAoL;f*{u zhN`-Ak(16I-i*pQ8+zHsTkk9Yhsb>w@3RIjON1WexFIUBHsV>% zSYg)!zY|)8(K!O!#hV!~k{ns`8?PEiKU+8?jBk){%V@QtHJx#WZq*@X^lyQCki2^E zz-bGbDoLRI|1<&YJ@fJ24;Yvtp6~Y1AIb zYJ)ei7Pl;c1PwXp^oZgT~`?KOA`M!P(OAIeZGY=Z=; z<`=Q%bpI`*4b1G+^8{AE4g|nF1%w|Fha(W(>vNfULBKAj+tvgBbvGjD#xB~C93!Xb z2I(F7uC`)Qf?sm$2-RRx2rsg8liEP@5N4+5`w7{R4+s`DG_6!K+;@M#xoekeko;qR zQV>6=#xeos@i%pZ{e9Xu`f(n>x+WA#^$Xv)f0=3Uvpl@y&U9dP)(d z$#6=TjHVWr{1SB8xD_5KI2P&kd^6be<>6cnUe5OF@H-G{ROyv>XC=;IT>k{Vd%;%& z@4v}yd&+D-IhFh%Mw~bS*|+Toflw%=&B$Y}VOfwC%DnyR zmg2qcWd;@3T-PsIa{X>>%S_1~&$pg1_)fIex$aPZR#>;=t?+*+4hGNTq1D=ddAm-9 zS?|*odeYma7h#q4Eb4iCgJn8tm;!D(rXIqyTwjfoipv%Oq_-t(!>1D1P%);9Xz}Fj zs8zY_l0cm;>{dJ9j#X<;BJ|WJi_Fp~>)8B*XWyo#5f`iFdK;o8?9YWXuAHk6YAmXe zyO^vxHP@DH=l2pI0d6>(*GxW*WJ+(tti_b5jABrd<&gI4aNQGmQDb;(6X39-GKN5$ z|6Jkq#0T3(Xko4DBHiZOO-(Qg|*e3DQ%cMkapkzcuzhK*G!bT;gPj5YJh z36(R}CI|J?K=#mMw{`bTrI?Jm*@i~ESEb5oS120|aBlFwLpt;b3i2R}>c6hdpUv{} z`*3lchKS7oKg>XF2W;H#ry3Cg+cRY-Y}$VKqWKWObBeB!nGBTP>6*1HD{``7yd<%) zEa%LgvDA&=3GNP?g@#$%Mt67j_9J&Z z*OZ;?Y(WFJldD@+#xIoKI$FCiz0?XcjGs-oNKAw%P`)cNf6QHXi~&qIpsKY)e!L+8 z{eww<*(?o(D$iHAQ8!3m4B}PV+ii$ZE4`{B>8<{C(K|;E|1sx)c|f)C2j!_CL-EGh zmVtXjFI`zZp4Ns(c;2B(2ax%xy=DOI#hWKqe&C7{dA*W$06-FQI$hfT$j_03)rA)pdv+-o?jK0Sj zr&5_&tJqu{?I^vsMt$bdKmz?b#C#B+r5=_LSV>ro?NyzQ#S0Ojcs3$3 zYSxAQ;K`Lp-^Y2J!*-xsNUP8-8PwaU67QEGYmul`g&H9_R>j7@!FYerLSd}g=#O-I z9C7E11N-z`9I~?cq81nY5z4@UCkf!NyX=BjC90s)ymj`VUUzeHdTyNIw+hrcjSFzF z=o6X1f;oWTh6c`%9$cV|<?TRlG*A7I~_Q>uy1|?sngQd}=J(L7qD0x)#eq%#6#RZx7v0c*tySf&Q^ zx9N;Ox}BYG-mAG+_BckG^BnKY@mkhH2wDjG{PD7IS#YPGAIQ)ts712+Pm7drWE%kEGFbdnEc?!p6eC)PRRHW(WENEo{!Zxh z15fCXm(3Sx2JuZ6%j!p&CD(>XX*+9XB_CT<_zN#Y8S*zEA~Qc}mcO;uP# z%(opR?SceUU?yb((m3Nt5I^iqlgUY93>@PSXzT-fl^&P4b3fA{Uc^tSG7+K(&>L*@ zMId!ad}37`0tFy23xC?whX&iYbmQbXK8NyPC%OGSP{ko4UTG{G<)fP)Dg3wMB*tRT zm?pI1UBP=xeVl;(R(Ha~ZV7WP8THfuyPLWGw@_3~`-)8p<8z!~_;CRJc?0Y=vLKD> z^mhoy7ioQ7GoCW|RZpxk$Cii6dO~bN0c@5RPbDfvzx?vwo1cu`Y_n*Nv{TpbpVAM@k zA6}PqFqkPAvds*K1A1gKhP1RweU&xN(7)i;JS&#E9L_>*mfaDbLR5@xS< z)^+Fa)_Hr{gE9Z~#xuGa-wNnUwE50pAB#hzK(pwHMwuEx|q^tc?Z?9kGc;eQUg^0L#L{Qjq{9&ZXS0ZAG6J5hXjmFf|qdnhe5pK_qQ2UH}kr?5fsRS7#`?yfIf@?$ntwIIkBCJpAK_mx+$UChWa9|A|pv7J`jZ4`q^pVySoK?Z1 ze;N&+wa!gKIBHd0-1Z@TjcW9BM|dw)h2l z=h>D_**XgB8ngM7xm00k{T2Sr#6I%m!mM;#E&@{411EkM~*H%VSYD5FjT zS0N`iu@h*{O{@JhUi@-mYfqgKi8iyU!eG9JT~rtJ7P>Mc3km!nCK39Dq@@h41su$TSj%tB2ywXcoZ|7@iX}SirbnK zJSptQ+24!qR<5rK$V2>Jku!8+0zIx_<{#gj^XyeN1t75(#o9oOM_XHTX@E=g=aWeL zDQ`d<9HVEgLnP7`K|qgQPdb0qhH>$9D-sW_6;dboP0u}PuSv?4sj40t-IU0vjw1SF zla=yaVSr>h&PPzO8r5e+7y-#z5>D~|%ZtE6zu|ZERBgwY%o0HdW7pO94p53+#P~Ky6p>--NxYPlS)&bvz|zdB`Z6DF^Mua# zFi>2;i7tNz(b^U5 zu}IyoSii^QeSoYSfiUUegu39;Iv26GT83O+7UJi2IcM%XSW1BWSz?~Z*F(3%Ch1eF zv(BmjD}+iKz{X{3P6RE_sGVS+t_D6ZOia5_)D1Y!Uihxsj8-r0Bd}~yNDXLG@U6@H z$&mN{Ugg9L=##^f(G=o9l$fN#u_XvqCaT;R#WF?RJr|~8)M`jd6xVeNhy}b0NZ-!Z zy@|UjEWB3pv_K8u%Sz_VGJ($iO_4PBeeomjdZ3fUakWFQ2p7y-N%H z;txkW*JBcx_Y8leon!FERLY2(Fo$b3??e_XbQAJ#t+u#4R&r$v>N8=zAb~cN_Y0&2 z#W>u%LqMr@G)DPeHspcpa#K)kMyw7-o4=FM1+FfDfYB#}$$K?b;9qI4dzQQg|JR*7 zo7i0gQN+&?9Z4fY!?ley^>&7to~rY}y&aHnf>ENG6By-$9d(wPdF0NTX#j?n8<^ZWPha#$j|1p&p50q$G|lYGGvS)~<#*LKD5Eq?4T^>_^0T)D0fcgN zdkc6kI%UCZC{Y{B=dZ_$Y@hSgMa>@v^2Hp@WAnJTnf%`quTC^l6sId8?6J&Vl!P@L z#Go5!q};@#jiFj9t*|Zdky-jbRTmNVmciJd!nIVIi4f$2swZam-mE#tmKR+Pp&AXz zo>~4)q`wQct+nX$aThgaxiW&tXuk%89M}w;s{iT&`wFTRmlPh6+NaTaKPS}m31Wr# zuJ5h9cN}-WOw|Hja_QV=8GmlSH)HC+9rb0kB_Xs(Qeil$S+Y}~;RU64(Y;)j8lq}e zWGw0PRVC0bprEO0Tsc6Y;5TDp%%4D?IMuU`+c@;ZMFc_15=Cwx9psdiZsf$gy?R-M zhD}qjaqdU^)EN&!k%uwM_PHS)ET}z{>{jiCS>zLaK`y&QwZ0!n=gZnruycXvxQ(zf zUdj_o9;vi5*1Tk?OY4Sjtx1B%6nvsef|;tEq)-%KhiJAW$OHzS0D*%@CdSRqj7ya^ z1{V`DpcNFvlKqZBmeT8m1-fhA%~kS1rKrN~*msed}utow@bzwmlkl5aLXET-y zgpVpc1&) zn(WWEX-`bCGVOSb>v4YTp;W4_oykVDUYH%ZtSy{zlpR5#L>Z zORD%uQmY6m#k-RPSk$)=CZ%crE14^aPqTu@{rA#C4AakYuy>Q;?x+TMtB~i>@&tG=hmp7i)N~tkel0y8;R>Cfp?-KaHl;QzC}ddI;v?ehCABK zxdAOo?L3!p@5lEi=|3WSv#ur;4$PK$RQjZBkiLx_1(RSROPUW`{M0e0G{Rfgz2}K| zXD2%N4KoP}BN#8V3Qvw|V@Hh^6c@=dp%46s{GJEsw)83gK&^R0)VlV_44}e1c^Um+ zZ4C~5mizv!{GEQDge@p*2Hc42M{GmC!fi zAw}aJxpDs6rRtVwLLWk%8c%y&&r%>G1vpk2^v;X9}Mu{nd`8__8h-$lyScueol> zf59tY1BHV@r!U0`w($Oqdtd_C8SFSfR0jAJV8_q%u`rgvGiB7RnRZk5@$iU)ITi$1;VdQTs8-JF%G;rpdyCea z>|5x5E#|)4aQkuaGXCG-m76%vR6rrE*aAd>H2Ej%Tv#I-f1eD*K8~C0?SbLa&3@KLit4 z&+&v*;7EVv&p{cN22tz0x=qhUZ@-P&rJzyoC|Du;v%THX73`Di9a#(M6Qpxe^6TQc znwt8olT&Si8$q-!I&=ZrUo3iijs1SwH;^^dRsM0WLr?#>h~Qv`sk(u^uoMB?8xxSt zU{tn13Re$MPYuWKx8V!;0G*|F2iD*#zVEBKE|Z|@R==@hMWmf}i7G6Y8DEnu&qml0 zS$G-sozqCkd$vv9LCOPhNsb<$odS+pBAaapPW~Bd%tBzpa$yYH$eky@q#N0wMVuo9 z-gfJLt=e$oDmxUASNd$-N3gED+H<}ii1X2iS-jEE~ zezV)Cz3`$ffqHNuj$X&eM*EeJCL}st_5uQc=+n7SW>^p0fw1()o{Te3AMM$zy90;{ zJX_ydT7sRhK@x#Gc!9jWF1+H_o3s`D{+6qYm>5v#$W{|J+urAphAkP)hhcm&lA1Cp zZ8ys_{5-kb3S`)V&+Xzaa*&EQ{nJRAcH)y}*gX*hg|O{_$Lr1e|NrqievsBqkw{O6 zgPR-`q=`2BLLYoEFCkawMw7FtX^mBY6*=bMP-S=!omc-E<*K)g2R0@t7nc<6-AX)G zEBooDlZ{KHGYyB9i3-P#P=qMJbycKXIMJSCZ_t!W$b#09Ci~}wwf+OJRxMlbL(zYi zIg_QBkde*DU*BNuYj4twwvIWGEbyITNhR0cTkH94@g7re=+kSj+l( z=jGva1Ka+=%A>`nk74;PSZodwLE&mPcPc?)NLQ`gxUvi=EsZU-8qK^hW(cpJB*9!L z#P5!K=5teS4+hz=-C$!}ze#F`7PS%4Q!7_>``msH*tIgeuF-Pf|9k-8s5!=q?nZaN zn5n=#CPWq3X&T=7=9jIDlE^mN64XJBFrS-`4fWI;y?(0oCgK(flEgY-r({3qIC75! z3uV6=u~|-nRt-BiQY_PuWz|tH3w=zpwmJzX5Yj7{Zk4C0s|IamTvC+jXZNmco@Vp@ zO4KTk!$kHun(ME#A_cJ!{m2}bOM9*W6+Rp(?1t>(X&=L>UL?B%N)<2!+s>VqJa|K1 z>IAa~7njf)4)m$0sK|kxxZk_Q_l|VsZr@FMNIDFVBfAga2XzO4v5*vzaCm$wc;=HN zcJ@2ObHrI1rGBDk+*UBR7yV=bhpn6W(geK6Wds;{O}bb@?>?$VDf~G@_zu+jkACYJ z@BiBw8QnlU=pL#F)-lb?43KghRagqC@zeeLhq^=h#W6%gQ{FVHLO4$;aPU*~Xesuv zCv4f75F1Uv)=2Ar{#)9^-*4rA)whsQU=?uWj#$p(e1?`! z)0O__&EGmgoE_GPu{y6GZIBN4!v;39#9l^;J zW{)LnWg$>g!pRJQ;;F$w4B#}?zNv?8jaecl&=qIe=hQ9P`KY}w{9XLt*!9-u>@$IC z&9~?dB!7O4BfzsqFMRgnKrV#IY`y9yxNEkzw;$PMsjOTv26;^NdcmwJi20h6E-SOB zFy%k7M9bGuwbe!OKRj$YN~$;DbOX$-WYW((@glJWVtLmtC1cWESCr~ck;uPA~%^>gw z=WTxzz@CVsmNAgpu7e;FB;ReTnKXRaPV6a8a`pOi-hDHwG? zk5(76c`wH{O8tYMa_$nZrAw5^gw7OilXizI;eb^)J(BYz_rJo%v?x=If|$R%aO> zGxr;9SN&5D>*81cuCm9q-N1PI%I7hE{hfD0^+j5%6NPhjMHv#R+J)#T_p~0`gbJTN z6O!c!B?BCygva5Ma|=eeMGlP#PN=5?(fvrnLiKhgcb^8%5|@}*MQ$^~M6EfdsPQP= zB%#HN=aa|S7%6?9SPF)hUk($Y#uFe|Q>@ZhF6G!}xI6SZ!nopu&9+~B<)QAJVJIUC5Gll^ zj>uV>NWh^YydgmP&4`1StF2=^fR=$VqeD`y!QF$}{B6mu1(W{E5r29Vhew^y7pz4f zr!%o-u;HBB1MC+p>6gjEb-=)X`zNp%<&`iDitVO=e-%veZj5%$SCJGpa{S~r-UDcg zG!O-xD@dlP)zYL>f5tLVR=h=qAzDcPKbp=ms;ckp+K28C5RfhjMWstpLOK;m>5}ed zBP|Wm-3U^WN{4hD5G19ALr8bOi{Jlw$KVs67>9k0IR?#tYcF$%CRceIgmuc!-AcG5Pm3FBt3HuLtNLFo`nJ>qYu{MizA7@n(u9g|-6 z52^}F*-m8_LSXq}zvzU6))|KT_OMjmlFZ{s5!~bf)m{?LAUM{lB18dSur=rD$yb0N(ibt~{DM zLro6$Q63kf1G+KP&@cgfQUlCr+F4opotA$iW+D$@dDdVjMfg}7#)fY;(i&BB8vy$GHtP8u?Yje^JZ+4&B>JcalVR>)Zg ziAiiyrWVp-{A-4FkaLtGQB8k_R**XyY^G%4#@r+>g4Tw+K#r zCt63EnR?N12H<}`wZK*hMN0wCV2=mfmal?A7BtpQmz^1_ZPrkI>N5c?9;6Y$L$oz? zlA*cV(6;r3NKD)wT#$y;6n}~qak^^Po)H6l6nU&tvpm`GV3H-o&EH;wC4#$sf;AzK zudQ&EC8m{KSorhlH9u@D-uao@^PW8Ug_?wPP&@h`@F5gfZ>BKzwK0C{q#7({`Tct) z!}!?wg)3d7y*8Y#5X+ThfKAHLAi?fs4pj1z>C+2lm2r^)4TJIAga914U=Z#{7AK#| zu&hz6f+2CIjf}vmr?=B@Z$;$Mc+lNXmO|yJ+7QFj1%g~vAtYr zrvHwxI3N!}Q;_t{pS-l$6^3Dn5s3c|eBrhb`6~DQQ@W_$za6=F;))pc-*9apCYT+j zaZGPM$zU9o&73Bm_6L*xf4;cu*ae3dT}O=DUe3;|^c08)WM?Z#lSXKZ8}>DF zbYDNHy?R{jLXslOqL}|Z$mKO;Wvg`Rr#0R0Ot;UR-){(Bl2|nY>BB)c1q<0ZzC0B7 z>KqtXL5S(l>oR=2#mr+Esqbp+G}<~S$wP8ZXo25`LrM;#<7|In`Fq;QF5ko=w*nWc zcbE06sF#&ipssb0Ys1agC=W}=*_?np(h^Ub@;y#QpPo9AWGKEH#JqMLEyDp;8 z6UA|^(UK?ZSdrO^@%$sq?^a)^7)gYK-o3C~D1al6sp=^#{$yJcyRPeIErA*}~;9bK4{%~Nc^SHUJ^GK`FV5NkCsvFQk za-XFI$e%8#oeUyl$0k!3>%e7-sk6N&x!m8p{@_OVKC%H%+sx2hM5CcEC}fpPVip=? zI=t{>Z6ScDk+f+T!>=q->qtFk`7dYo24W_S4d9YFHwR0;9p*OjSCgm9_~%o%scqMu zw*=4~OL6u^*S#M&@IOB=PN=gTcS1fc#7`N(TSz^T)9J@bxvV-+v*aN3Md}8n5x3-G zBp97uDWamrVWg(x!~T-n2v$~NsW)5XG269_1S}~TYofE=LK`0eE64K}mDZi&ovlEB zg9=h@hTDZmNOdq&!?**QYFS}XF5f?Td3{&O?wR&7rq5nNzn)Y)n2E-Cd+U=9h2X_9 zFv&%a^{u#+K6uSm8$QO@exRCf`>{g9L9@$^RB7jtUNEMNJNX)0q?6?nKygoyOpuZ_ zM#+CAlP@IqaUMhv`6z7XbDzgps%Pu>;RHALAtj>u$LF#VS+1sjEjo!No3&&rkuha_ z^Y(Ac*wpoQY=L&ZQ70q}#uC0o99`fz#)I0s4>ei}HpKw!5Ole_N? zrnqqIXxJ)KtqEMRo{6Y9g7$hT2A1P~RP}s<)k|z0EO2F2W%ebLe5N@(>jK^7mUUS#PN`RY zsl%sc^i|8n$(Epd)XO}9UlwE(lZR<*B5gl%B8=SCGb;)s%~*#Y(-59QDP=#Q_y3^QFOJ5TB*sG!$-E{&}*#e2_WviIHARmYvJFE_OX?VFf- z#Qo~jF|9uyBAnaA|Hdu$|DpO_@v@vB42sW{VBq3tJVDYgnZySg*F zQ|?Q=J(2m-H@2`lgxK8f{UQ?%lKGUij7Z@`M_~DXhkQ}#kpNn>z>ic z$-K4l1(3cVorG!7VBC@t?J}di+gua5C|Dj73-Y{l)wf7-3bEMJ5-4w=BjOmRIf;5ZI%fX4S5Gw*T-qb z=Jp$n9d*42-$=sKwsXt+1X&i=Tv&`?l8dL^#=DPM%Lxvr%elg9hY*`C@sOfA4x=l^ zM0ibms^8W%F4s_KSMCeCI^}?e6<=fO=8ugmP5}W6vrCDeZbV7{%C*u3dU5I9@>#K+ zZ~_90Wg?O>*EJIi3L1W|`! z!Iut0LL&>UD!We@?-RPo<$G+MvpPN{SE38-DeFq&29A+-G;2w|-2-@usQ1Pqag{!X zmie=_i+%V1&O2+N|M~K!QG72mVV`rl$Wd%B-v}T<{08>rDla+(1$LG)Fv!ap=MdxV zw&S@Kl(k503J(f3I=}NPF%nprx$yfxC zHJ%#CAW0`NL@~ytvs#St@lA93o`EP>#B} zg|&w%>AuYd)|l~`x3F3)MVH;JU-i$F&7L_0Ns$>hyiUd0tBGl9=Hfv22b88x4pT_n zdvpsm_OO)(-Ar9J_2TT&hq_G}$tVFF7LbpezBv%6W=%TE59MnseiJHz(IE`y1sgdz zdZdqHGS6oCMHzi$3haHP<>J+`Yi1Y(Mq$9@iTRv+$QF5FD!MRW>>lf zt$s_`2K}0#ZjEWR!=lVtIXt4|9pvL9MIxOtY%WmNa41CEclqiK>szJ&O-A(s&TG{@O84c6r)GC{d7dD+bGB`YU@ zsZdMsUvTSej&UPZ`1mzhexie7U!JEL^#zP0^K>ch-?a@NL@aaWQnnAu-2uBhkt2lN z<}dH+3E1F(EzEr}2T%uJAV8vKez!O86N?9x+lCMLEy&j@9fS2uE09`2z7ND|C9Ix8 zy(Xysz&r=4vl$1ujL@|A<;>%GiMy5(o>Msfdq(;?KMrOmkI{!~UC#Nm2Q2@c)2$o=ywxLpj@Yg^|k!9#Sd$Lih>#+?6&vXE8A#lkVc6&g0T%!=JS1LvQ|Gr83Fk~Dtq z#R->`u-ojmiHiTUyZ=jHR88(Cs;f%m0YMsNgEx1pRif<2W@d3g`f#-C?hEGD@7b+(skqrN_c?}Hm?*_7^^-{{c!mBB^Ql2uTVm60M75oS)qb5vH{ed^aQbyv+! zSf#yC8(_d&hlcy0j8vLlarb`^*KdHK@$PoOAQ4%ny0V8H#9RL?ise*TgUlHT)J^U> zzjEOj3?>Abd?2JfEl7Q^XKsI>1th{w_qHpMxXB4uYJbb9>av2=aCLvI5s|?)WT1t> z2$?tpC$|%M-mKJ}LB;pUHgPme1?9T~@Ybz&L)8|B0xs%L$`Pqb`$Wl0ud~SG=BhT5 z#qGXn$r{-uM1kRgNx%dO{4(Bu3Ob;;8nIh5Tx0gQ{y13>{(nR+G_iMdRnm#4yT&TMZhe3U0NIBU|a5f;qB z6{sN@)(Z;$FDT4e-jJdIndiVXpneDRFc6q9+{bEV;tQs2Aigi#=z~iT}aRzQ#l6Zgb@*)ScA> z^15=PboBZii8_KT-mTdcj~wY|u?RHgaZaJRyfSa7(h7)Sk2yEQqX!;>B&eIlgf5IAc{oe%%o0>b*wQa-IV$s=or6|u&87aSxRQY87 z@mzhdH2e=+VQdKS-Mq;#3gu(`X9CI=Rz_iYJKC=|XUY8IErvI`|HV{dv8%tmIMZls z5Q)sgjM}zcfrS;$sJ>K|**2NqRn=G+gq&?yZ=F>wrLJ_67P=@)@q*vqe&5Tkml&iJ z4(ny6YI{J}ZpSQy@iG+go`VTVgq1V-v;(N`V_$gou45OQWRx($-+JEx#FHWJNWDho58{}2mTBG7A<=9TUH zHTPsRe%~jCeBgu6&e(-0@#LRHw0*JLR3*f{wD^DWk5S}|?sk(dG6J7X(mcIw6@Fnq zehw9Jsu4+AbJ1qn7~@meuJShMBbG?oiwJ$b6PU4ID+cI(XypBqYJ&Q#xpoUSCBDpr z_DWvv#MfYGI?-|#TaG9g?@zAnOMznadDzRiEDqL|vQz)KxjaiDH_x7d8A=Ro`)2g$HF*b_qmOm#S%E$VHLOOa}(9BE=!E9~S8=T=4tegSo+0vlURx zosPs-SkOU;c%dY6F8}L&Cl@<3ALjZv4`vqY$0wp$5oZ$JITgppwnd-MC2 zJG}@gLneu|?-#NIMd%F{T;(Y{se(2%S3dQQ``mqG88Af(c(3(x+@Tn+yIn~Kr~a`C z>aR(LkL;7E zFTXb!5cBG|P>{cai|jWV_lUhj9DJP)rLVTumgBdR2Digai|03D&3E|_d-^PZFJ*uJ zzjJYN_9}=#{JXk*N}TLn+1b<4raT93r(8LB?6A6gZmF(O#fm_PM#~N@zh;2-hfWd7 zaqFtNdNdojd|V-44;_3Y^}y)eEBh9Nuiw{8h%mh01~y33SFA>_D1`K~Ed;?oA?_5N z$BMkwi19!ZX}{adA9#2LjFw*Q2jqCRVQadZ4xaze@#bJ)uiUjINiDLUBL%NRaCCu@ zF%L3B$aonM+ zi9r;3u$mpoEDj-PKA!r$*5MiMyyV6c3DuFD5F0xU??Fk@AvNcnjI&HXFe`vfI+I0KP$rJR%$Shv5J$u^^=i1Q|W>AsgK1u&Mr3f@i?t? zoJ#=}`Ulh`7u4MKG-nw(kWv7XYwT6}-~jxpEY4ZS`HoLln^InSVSui?2AMR=aAa`)u;a?PW_F)D~Jt3SOY&nPhK}-AU|}mVc6<;s^~L3Qcur zqaaAi&}>GZQ&0yV|FF2(GLI36j@=l&)n8zq)@RG$eM#@Xe#gcyVW}ee#}WzkEF4qk z=qtux>-nHN`veOmUoQTn+lEbGwGh2}35*W^7D|B_XlckK7*d`5nE7e%j&3uqd)DA$ z!-_CY8sRc`cy(&GW2Aubta}jCr*F+^9<=KNDDll@wAur2cgaIl2C zgdcUJ6mod|2^!o&ZKxBVI&&B?s`EK+F_>W4fIG_91D+Qy_MVJc7Hy8 zt!(WCmmwcff{qf&q=&57i(~OhF16o?j`wGQ$1=C{2^h7(w|}!XMJzXFM@7DPfnA`qW2=d?w51eZU51#Q?e1Mmi#{T zEiNvaaHaOO^jnZLc~Q*qYpv8Q z-zO8#Ivl55J5rems#E{6=Xart>;Iwu)Rm^HR>d%3i9FM;NMcPKQeBd(8$P*!O(cUf z(xiQ$&GYA_%@>Iewv?EdH~bJN>1b)a38Za?&d1%$?$w#h|NoNpI^)FoCm}Eb>vzB% zZ~pT)L3HoAoNDKA^Nx?BhKaXQF(;xEAc6Lu7TI;ozggi98(D9N^ zKLk>N*c4&Hh7_Mdwi8VR6{C{L&u>^ZP8i!%zb4uRvqLO2NEUzmVvxf%tgaFNvMp4r z6tVRt3r)^UJFmp2BQ4|=(WSJ2Wvd@a4Sic00;;Y1M&jd(T7Z z&+?2e#$^Gz5ob0C$UA!g1;3Zte58phq0nAXj7I;{8<2xTdW~8Z+9d%y1GCLQHAyjM zb%?2Tc6N662%i7Bjz*GXeO#0hD>b=%WJtGF8L?q5%^HqP8MrC;d}h#l2jRnC#Aw<3 z_;b_5sPPwmZ>#EaraYc@)n}AoMndVJYT{I<>14-3VxED9L1KS*z9}Yc?bzR{Pj-BY zdb!m+CymKhl5$}$1A_}dn&1DWFZ%S z#?I^7ZGJ8RY%$ zq1l-?clic`4kHr53<|{E)%^sNE_56tuB)!)QLcynEQ5-$^^8FLq3<}m%%)$@beieCz`LgaqMc|6s)v2x?LS3Z@1Q7riy@Kq^tfJ7Y3#w?Ife7`2k*2db4q! zU)oi+x{AdbKq3ZUc<>K}wS$o7-?IeneS0hpPaAgie~tK{r4Te{ro4dPR6gP%ItLt$ z|8g6yMK@DAz>2cG<~RTHEoxE?D|Wv_m8FBgqA7ske1oR=(_YLH}s5VE5x0nEWoxl)8YV0(@1d-zGxrC%q$kR}Cen z4QsToR-|{N&tAs7=HXobn6u^Yw(NK^H=1X7e3D=$Ry6HS_8QV zpaE4-x}*8^w{}PnSKPcE8M5ossYHq8dz1GuUN?w7X<>48)y&vbfhElRo-Z>JS#~Jc zq2G64zI&%0)1J2qcpLXwy<^1hLmjRUqA%Ao-+L%smKhRL+%BZ@E!lrE{xPU$kWRUbCla+*z)KIxJ)u2sblt7c!r^NbFQHl*3 z7#dDy_3}0Tv|LI}-v|si`nn=~lM`Qv`f6uZ&15rXAa`1BYXJGk#qR{3cCmW?Nue;h{q!pf=%TaJQp7&l>eX;dzk@lC|eE@0@; zzc3~-kA}WPjPYQv3iSRyl*it5S)~?l%$KNh6>xivlnCI~BOkx-!vJIc3R!Y)<#vYO zM6MU@4H131$5~=>C?4Nj6daZ0kzPSuq*KZg)2nyHTZL~ka>~Q!e#i1=a3&MoPlN) z4PG7c$euWVj{tl0N8r==Jzw{tQ(sJu1IX&Rb*F}6&zY8N=Sbgb=i2CG%;HUkQkR`T z(rrIZlftf?B8II3d){*V=$UIuwQNl9S$3EJ6k1!mMJy;Z|Yl{qby3xe$ce zd>(7hs9I=|H7t>l*3&(U_GTlrmHxLMTDcI|DHo^(Iqv50a8OvW?sV)}W~}}`*9n;N zG5~d!Y!pSu;UlsxDHN%C04D@mx;b&9q$$-NB)| zo6YQ5bdP&`rNjSh&j($!&~KmZogG@(`Lo+0L5%ptmTg(Xr#6*$=%dh}v}pC-YL4c) z3F1LDgPP0jWo}O_K3P|EQr9clfCg4gq@YM?u}ywW#@^RSV}5!+?&1ne&o3m)&#PFS zS#<#qbVy*%$eWDFo~?fVU#GWfC?yUfI!szGj7IOiPD&r;OQGweI2%Hvx$4W;ktSgt z7N46#c3gJxO@&1^XGrU((1fan4u=iC6dormjyBda_`_qg_atckRE~M0Z$lm4x2z)L z(9_b;6sQf3j;BSIIpgOW1AF)m_1jJ=&>)@q893KL$xq}HZIutUJ4YSvzkECcCMiG} z*wF=*z6MHZ_psBa1E$Z0u?UqbF>3%e3)}SO>Nd69Y?mm4Ql2wldAZ|p#hd;L)%5LM zRhvFowlE!ExQ#gy$7|(82L{W}>r#~lZ9Psugq?r&9qDOlo8wz*%W@11;lr&qn0`(k zUL#+kztAhzTg;FoeT#fw9S8R1_wYgRGyvNGvt`=NiO&1sfU=*~8SlO(W+Q&qT)%w_ zXmx$p(6^T?mA`?`pwA@d#GJTH#S92C!dX8GM{BMxE*^oXg?d{D0uLu))4Re|G}ei# zYVqoo1|Lr24{hZ38Qzoll50ix-NnU9T53@hA!D7;`)bKajArPLCVd#d*+{0QrhXY6 z9UP#5cDjS>WB*c722KiXntPUo|1WB0$mB(TBerzrcq%m6ZT>_exebIHx4`D>F_Xwn zYReJ@s89vX%PVCXB%)tQUeC;MU#wbi?{$n>2A%ZuI|IY-$P;oCqsTy<$+)(keRY#} z6#jSPFOFW{`C41KbPZsq_C$zjU-W z#@~`7>Y4K7bn%SN=L-&PD}MVU2XZfRT^vj5esskd@waa`$}q|m=e%P*TT>HkAsb0+ zNxQA%f%U0TQG)i=&!`*@$r7;~T6`*Mxl7|sQXJ3TPuY&iyi--81hwbwCiDE*QDIaJ*yvL%zs*eBJzpl8%R!xhzvu7aV>7{{*?zvl1;8;IQ z2>R;sjk@OwuN5qnb8=;NiiJckbE*c2Dp>I{K5o$7rFmTy;%dPHb}7bBu5`0=&O!N z1C<6Vim_G%f;n4Gn{A(IHSO$?QU2q09~F8<<(WDJG+}BVs@Ilt6wp3K8(5lRlug2K zuQLKQ%KH-9pcH_s2cPv)SKd(|GAZ*veiG7*_LU9oWErmC+5fN-ypR54CA(Z> z$d^F&=Yg%~zwmA$QNOIDjLOHB#YL$mmb4qRJ@b!7X3VzkCO0Mp$9Nx(BQCCPYT$n+4$e znm|GWKQ4?p&5^v;D=OG$>jPimnyhdWo`bCo@60q@r9TuO%D+--Jh-An;fwY z`-`ABd{6Sd7i=;tJ;H*;q9)ZJMgxU5git9+Jg$7!l4@mvDK6wqqWhvrZ2>r6;Ist~R@It#_C@Yff{(PW2p0$XRa^OIil$IpY>M$XQ!ZUsNp7tOt zEIYkVrDqdQL`D73C90Z_U2(s{`&fB1g{{k$3UqbH5ZaVSq)2qwP(`FGOpFHBxQ@ z0(WMPM`=w6EH#A7<)M|Uh>RlF-`;R7h5{1*RkMhpqR8~~?ehC;jq<`6W zm*FA4l!BRle{b>*{<{5$p&aO{qi=4xzm^_O zMEWk zP>`12v2%`-6=&_y`>2=H~@$mgOs*xuGUkUL*7(k|gNYtiEWPAQj1X5u(*OGv@AqiV6((QkH_hQk2GNSs} zYrZ}T8m+~W$)`#Uk7F`HBJq=~knD_?0{XM8Tj1d*SP zl%^a?(=hrn;QEk0J6{rmpW_DZz$~bnX=HP^snUw1-}0#r&@18Qu>$6sWSUlrBfX8a zKED8sN@tHC;^lOd%ny>Qu}>XWB9vgWz+MJDERi5#lUhD69xrKoUx7cnuRQXWEqE?n z<*!hJ*{9W92@U%y5LB1|=w8>-bRxLQdp^f$e)6bh7h|qR%YgW7A+3w50T8?l_S)>E z_ga2lAAhVMmCw{@^`Xv(H3}H1t8=GcTX2Y2Q66Tb)h^->e}$D%x!9C&c7Nkz$idt{ zKOtU5cHy-zdv}tn{*?=q{}}cNo$C5f+`&Ux#H;FQ-R_! zKI%MK#!uW#j_cN3XA8zR0L@ncN z;Nk7;9eiIB^}VIF$E~T`{Dd`ldW1qt3q%aIK&SG<*-3?8q(|?##Eu`vx*(an+RW7OqUM>lli^Tu5K4F8m&6dUD_oV?G>USN+rk}Fmz3jVHu3-8j+ z@D%KH;uFK62#F^t3JUeozKurwM(@XjH`#uL=+vw_i~gXU*5b@6VIE2KOt;zZ591-$ zMzJESB7@aiCdrosi#+fbM!U@l+cTC9{+fmx^`=xsIR)n z3VZukj^HG6Jf=7%h41$H{G-AC-Go}Be6lNpE9<+AjdZrPC1&_ZUR{rea1WrWOkP5Y z+$~z{fR+>nU{0W5#i%vq{B%)nKW?vC?}IS5V!awY`Qaf+V$_;*$S=nC8uCV`SH6~~ zrriN{LYc^QAmbOuD@BIm2cOa~m&_D=$y`bTM#Kv0x`A4gziIh+3-j}tvKApbzp*-5 z`{}+EF$Ki1`{I!M);a)mIfdT0qs*?R;BneDx*z+By+ZUg3&&Q3)w(5Zp8M> zIJ>d7EM-Oz!uVWbkpA{9hP623AzeAI@|r|}A^0s=mTaGla4%&-Ju1+p$wVDA`BNX$b2AyPra{#vp@0L?l3>0c_)XQ%uO zwJ<568aIt{(=5X0XAW>N;PiuBaxnxE za~?ju)wijuNB%4vSp%4ZGLQ+WQ%iGm4um2hGSB}C_UpnkI-fl5pj+AXcg_<6|F50G zz0(mEj(8Rit7~KN1OQYVpF;>Ax9L^dUyE+j$#2@q@E~jbT-&mY2xok`Ei-I+jIaGY z{34!bpD_+X%|~O+TI$aZx@P%Vo=_W_{45eDdMLZ9XNqg%An7j-t==0z7?bAhpwMA+ zM*lefyiKZ%n$ZoZU*ELYIcPkeb||}yaIOeQ6H&6oN3D`y^sfbe&`yCPHt;9 z1pHPPiC!5P>&Z#iy0T;m`uI(=Xb*Y9DN}o)tuD}Akd|%!bmko1w`mX-{)uSM9F98t zgEGe?2V$6buxh?g39YoEuw2M&p#;DU^rq@izv1p~G$@6LD)=7!^${!gfp^A z=~Jl}d%!g)a5Ne2J32A&2l+OOQz&GNv|i(jO+@4FQU|vN4>0nBzI!;-P_>w^x(2kCN|S@r=4G}J&ok9 z`5@n#MvDBa<_{e-EKErwjjdK-#DF(02y6t_%VmKm+@H|pktXZJ7@hytXj|X7!>(ie zW}f{6W)k?^f9IoF4}`k(pdAltj~WuA3Vc2n-+fA_Wc4_Gq3TNsyW=@;LZ+(1tUKdBRM|MJ ze?m`n6yY>(NVpfB%@yT=xD5EzPs=&VK%I_STJS2tPJb8kv}?;-QQiF!T4J&d3Swax2 z<$H@6q#Fn(_0%)qS?jj?&tZX-h3f&5xqF4r8yZ-{k-^ThGZv_MpV9%Kdb+i&g>k^; zKF#3R7}hmzFPgsWAkgQ@CS^g*&42ZI=;56kxeF)pD~FaD8>Y3&x}IjOjPlJGoR}Z= zpDhZh&q@kUn{Ck+gH|+obm%?2wIk(qs)A=k3N&x7E?L6R3XE ze~vYK#QYhn{-uEjWpLd?tG*T>liqjH&I~D(PHvy1sx;P-g5jvMsD{pYW48+#4xrzg zE}Ldgx7bYn!M@a7wR8;%UNN4b?)I*^|fc)6|<99`H zd%oNYO%DI}40fqP>JszdZ4IZiH<-V*-)g*W5cz&uqOvWF(jAb_I;lQt5s8$xWurm+ z;l;(;T`LA%SLN{fMH$RyT0L{~9hal&&6gd3tQ+KkWag=iY(tF`mM*=bzitcmtRgcb zuS|!T1Q3wEaq!wtHzZ{_Ocf{a*c9MoN2d%hjxIf5^V`y?i$+d4s-Tv6-Ldux3$s|% zqhXHzsj#IIw+{Iw%-^;cDMz@jHK!JBpjyWB(BE9NDL{$Qs&_a~XoQRs?SaqeY19#5 zo0a^5LK2*?EjIm^wb_fNMKB4vb9&HWbq6^{1V){yhb*H-c4r>K@^QuL^5Tw3W+@{k zR&F)#D-ZVf{j1p@HxWud@Vho?BfDF-zhwr^zhEGA5X$68A2tjqZmw<_nI*%Wl(6GD zl8`qnSsisuY#%HvAvwj<-WS!{&h$9yjd&;MM|K(7GrMX+gP_(ZP?oNt)z07n%eSMdWJ-;I0qwjX;eOx>EOR|G&u zcw!~!-?%(pzNF=gy4ZDxR((VRAJ2oZhhQcgfy`x56RbrH-rvLh4fPh#81ocCrcr4r zQIrsl#gF&1^}#r3@h*MKa5nhL60;o?VcEHh*5YzR_I8c`+2+N( zcDtF2umgTS$g$;5@SejelMEZIC~EzuzXA_P{pr;0@I1g|9cuu^7YFH;CJsmAPpjsq5^Fw-8tgOaj zO1~6-?>MRcRA+9-(GeryX@w?7y-@Y@@#+8+@bu_V{40~-L(CKbnK_se85a(Uc1|5> z+}EyauN9d`cym@ZZgY3LcV}m9*9LdQ)9d$zDi- zZZtG37;rPz@(YjHl7g35h4{6vGT?|@LYtV?156XIb$~oKf{s6;@h<7;Ufh8B4@gL( zbr3d49K4C-Nd1CDTmhJzAO5m!8eV3K2Q1lYediZ`$4Z>i3j!dRj9c1#i{|rE&o{zv z_KIetc;H<&VFXot-~&wz5ai0sr~yukq6kMJ&-6B!2; z??|LsoeW6Q&=p#lISO4pg+9M8sCfhdan(VjHof3CwZubh33Ind&JAVFN$Qy`BaZz8 zAsV3=;N3WIadC?}e>tG_CD))_lRTyuMEv6;1Hf`}u`T%rgXQC|aNci=d(w^7b30PT zMAC7x5Qy0J6-__)70MjY%Tz8_#Tm5@-fleA*X(K;tA9qK=s;j4MZ?MN2CaQ_8ea4C z(}X%;78`{lKk_uwAElL+s_r(dFv3?Pt)GD=3{*OIclUc3A7DG;;>K)#e_Cjm^btLq zzIOAkbxT5bpyj}P-z~R^#mnq@pwF)SI|8mOiu3Ljc|DL_*H+i8byofQKI!iS_JVXf^f7e-3S9QmKY_eJLH5LLD%nb@Np>NhgjA^vM$fY zvPE9M8+9J}LNT9>_*F}QI{u`mLk}_^!Nkdh>T^>r6UetEY*`u6SMkJP?x=6qI}I7*TWq!BdQJ%P|2o~1Mn70}koxgp}) z6F|udopb=BSDqYoOiMm`>Sfn*knx0lmShPCfi!Lly*YU>sS_E`)2HO4W)aZJ`dOS< z+|s?Z%P+e>L@%ij<}l`0tP$5tm=K3#QNIcZ-G4D)QlEFG(%j8e2XaeA`an}~bTfK` z@VV!-om)rlii@VHciVdu|AM>JsNCJ}rB5KFLexk}_bd&4>?Je@QV!KliGKXLJ-`<| zUgX;f@+^!DwT{T-#ZtAXc?2xGBUCz?UlXagQ|&KDx#y}D_u$CE^qA}3#QwzWHCmi< zL_nXVZ4c^HLS(>(n5;~dF*{Qq?sp`^S77LJ@%eo$TdzTcQ=Q7P7Nls1}&iF|Je%}S*a{kkFWhUC3{7PEHBVs)jF zth)H40=e)$CI?d1!O!0l0LJ#hhi#V$Z2dvG71(_MN^1`YYqPN3AAmqRhB7mfEv0o# zTHa%fRuW1-D*HWMMv!|0HQUFZEFavP6tT`XxVqR=EE^>KyLv=@7ODm-AW}4<{4G<_ zNUUx8-y1eKg|Koez?+P8`ZtKTf*MA=XgMU6o9usJFv*505k3{xluIJrU-LVd?=(&m z_wViLnP`ie*!AH-{0Q*1&-^FrD@0Z9F1~Z0dUuzrzO{%9dD+|DUVWQR1YpW>7Zq!NX_5DKGn@Z-0lwrH||T;kl`IU%pXw5s4>ms-{T@u z6$@}!>W(w)|NLD~PocwwL^`Zj)P##Y?RtMXaAW+@AJq_mop|g}Y@XdQ2g;y0 zvfFI`OCg`o^&*+&d09ahgKD%Co*k!)hA;sm0mq;^T=i$>r2Z0v4K`y{}TL$z(?WD}# zkV84w_f_r~>m7&bPa|!%f!TMkAjA)-a)(0=^-F8($JUD%>7qEZO)>|b)c-Uw;J!}e z*EB@1lT3YI`bN)(y$1$J`vlNM=6@4l?|-+D!qCYv$ne?iGX(p!#yd$i^9Ld?l|%m2 z{6$E0_d0#1x1_$c`ToG6#!Sa!)tw9To9myd+LJL@5*3}d^3gR3D-!^rS6lVnmIXfepJCyL%AsmAf=<(j_|ic4cUdBFH0!1*PeRNj5Gr&9|5 z8($XEgvro4BT4?7fOsRX^o2=O4;!AJ41&nTl6Bo5ZUTC*2w?sI_|C2%9dfXB*@NMZ zWEgY!jihtu%v&$U0At7c$szKGM#1E~MQWGY)Q5w6Z+Y9`YNvVk9AvI8fldjtK z>o?+F69{8}Wb;m>V7VY#Fph+h`8?pfV!Y(JW4xne?0_s5gNdWUM$uETWh;Uzv=RgG7x zg6Y5NHrba?NO0UXA1^1S>^iru)uXYFs&Ity(&DcOy>v)W-*S}_&r@$tlm?VzoLl48 z)(js4n$$rEQrQ2t+2k+2On9ywD1PCo!I&o)%4?y*=(fi zE=w#Esa)iC-3j9J3!`@&vDEtcg&ZUchNB_!Cw19i2&TK&@1nvC0H%(;yLO!i!^@_@S(U}7Jusfjo->gBxMLnT-o)jTAHFw0 zW~D`8iNc6ih!?Mmw?Fh6hu;oxqWIk@dD|%xaytK;jGmn^i2CmrS>>DOIE-!lM!xOMkK+K#6Cs4Vb{@H-00h z#UlA9e;X(M@u$8Otff%$jmQrsdpjwfE?U=^*Y zSeI0-xT&F#1v+z=R>JsV2!ilAF3C4SU0aw(wNl2zd^JLEIyd^M=1{G2#! z;q_NhW%QW-d(Zme@ z;pKtG1gOpx`*OeMIq^lCc@&yrcsNby!^jHdXHoK(Ikl^p15#Z_aeeC4D$CFm9B8X3|_R% z@n*DbzrKjNu)bg`g}uE!%+O%LNoCF!Nk^MHbh`0{RMco{Eg~*8eo})I7XP0fViG3u zD)>Gem~3$1ak!NJe#ufD{$nA^gNt;Wt$yYkjQRnkhGF~Wey>g|yZGkYrj^=ee;y?p z2dR zt>#jn#o33~OM)I&C_-TtJ${={wtUIb`H#;XNUbcE0HtX?@y2BV|2yS7KcD>TP1x@q z!0KEw0X$Yz|2tMYmzSOEKaP$}a2OvnY1)G5>d>fN{0pFO-zU{33LR>avNGs7*T}mXuD=!1C_xk0=H1 zb^tNlCzGuwpX705M(G~19n_;x7HCaS!V$?wHr5cS_3ZYZ@uPCd+QGni0435)3<*#4 z!(a9rv6`2Nd2q%MM;=EDQAShMg_}js`ur^AYSGTmV~${IbvNsz0TcQjW0E)Qbs$$R z0)j>ey_qQJ0f}XJy=gJ6n_4RfK>%D(Ucc$) zLq(+=Nro2);n{OvOLux9s;?kNi4{M#frn$-|pUj+G>ql)O z-ljRxn?9xS=!qWvaD62~U}v8z)WzBT0S-$1u9Vm-sY5i(7jf`x7iK=d!Xx*TZ0Te$ z!#d_h=4j=d3rgU1MQhUzukhJq^%Jh5y|0XYMlG0kNtj)GOt2Wsy@10 zqRIE#@)mYW^z;uzCGk){wXClm%o)IY)5){4E$re-~xW?c<6B#kTaR@lfTCf@7QZCPst ztgl2qs8x<=bw_5cYjUY9j_o!-u)HKSu=B9Lt)8)%Gafumsc8k44yAv4ZA5i-=h%$P za4}}x>ncn4i{*h=Yu$9)o-Y_0S&b(zUs9rbIv9TJ)mdUL?}p8&A3a6QNe2DxWvU>J zVudDS6Qc;{ODrjYgzLH7QrGVxZ4xeiAZ=oMDI|qGrWL)U=LmmRDe=GKAJzM$+KhR3 z|G=@uazN@CQwmJLpx%!no6x$jgbq>2Yj8AFTam zF+n{i5KnAK)tA=Ex4ILyBylet9^uMzH->kHJ}O%_%=dWEX;N|rz}6w~J*BkB%Nnww z7&*^nebxfkXP(wR@YT&dr7f0`rrwoP^;YT_C+RtX_! zronSM5Y+IxsC-_i>SIk=$dHr|OoMvWvci6}hINQC+5j>$(*fPhn+nbn>Xar)*5pt@ zsm2RGElPLdkS**Dt;fycpXmrkC5*(r2ikCI=ffz52}2<1Qg|`SOPH2u)3rsU$z+D5 zH`HmfvM<&_^_>PgS-8y#-8OV>09^xJ-d>8z$84uCbyqk4*X<%5sBD_`YWph}P+GA5G(-i-W5nZylcGZ6mD97_#{(g_d08=&52Q;csRRqGDhvMUTaS z1Nz1|S6Xom_V7goM?HM$$Mth@aoL{v`neP)n_h`5T&jISL#|vC-<0o;i?>H;3wuG2R}6rhWY8+^;X5;LmbCyev=5{OsW z7cSG)z2sL!OV2=?n>Ohhya8@-DF}E@e|JT-NZum_&&2wK^tUG`RdT1%eSAD4Jr+Pu zrgSUC&d)w7@u+mBVK)oG-a*CdyFgqF3!nO^zewQn5I-5CN^q$;gRLq}5`P8iDMx)W z^x*oe0Bk6=_{yN4=l3;)820KFz1^7i9p0@CiH8``H`nQgp?RoRCqTD*M|R7$Tfjap zW!|B*;SM&o>2Xt9YMO#(yrGiH!$c}k@~*AmMar-re}WqXD#nRDvt+ZMkqQWn(>3uB z-m<2$3^;q6(sUkN#G_#2tcvm6nFW3r;FTxUKS6QOPR0DLC-?bxVqiBl!a<%r-6?G4kSZ&^#2)C-~YaFkN%^_Do;ISRR? zdRHW)yBCa6mFe&=Vs6A)Q!%8Dq9|>}X4l#mXWNrTe7e8)9LBNeF`Ji{(4$4zvAzki zxga^Q_3|%J@U1Tl101a0*hr|o9p zW$fUhqu|6!;*4zqe*<$13Q9PzS(HK_n&Q-*POd>0C`PX)sTnV&i*+&rAMNW4Qm_-0 zO`@UW#nS6&49SZqNd;<39e&vlT$FS$>gdmydFmAWn3_0WpdW(6IRi>lq`%o6X-X9a zv$M!B?8^bq#`@tTXg`%@#ph(PQ638@BUi%YY^9(XJT4=SdCHV3@sSVS|2+j{uMBszr~9Y#o|nq={st z3eA?VI2NgSyI;`WRV_Mp0)(gRUXi_$qOQr!0By)h3zvN70F$U2WD7;)v@)&;tvf30 z@iP`-QuEi%LN!^q$$MogjcYJ9=x7$qyc3t2osn3Y`q@fAINs^oOa{d)EuNT`19Y!8fqbNODOuZ6A7#hb_srK1(o^#n-V!R=9z1YgFl8T7$uH%s&wd^ss(}}M+hFx{4 zb#4K)YW?;?@2#4CWJk@ft)E2>Vpcz}0V~ZN7ZHJJ-4%~;7JaPh>Z@!F>b36spy{)$ zPH!A*?NOy@Zc-)c`JjB;$1~J9_!!4GBBq_|#RxKrKhRzzvf1-G8s)XX*X?F(2myV* zMf;n7;WkkSYLJD@Q^x>LJ{ZZ|e{&;Rntp^YyQHT7P6AxYNFdLJFK9uA6A04fc+b+x zoZ7kIIcd6#&dEqIvC7lxj~`q<&nY~N6$q}p`SDVnITU-{Fh7b)>pCQ z1^kOn*f=01ddk8}g-3L&OCyn^M&t)Rs*xdeCs88}xKRU%aa{ggn9`=6-Qc{NcJQ8R zvRF~`9aW*DztaLMMSaa{1ils~bh`CZIU!Xz=N4B;9Yf(Jmf53_nd?GSh|$0TYj`DN z5frM(Ovpii4U0lf`98Nfl5zj_oiUyd_v=1EJAkT5C@)PvDQU$WF2Gx%smqB!3Yt3} zgRuE{@l{kFUU=$+K1^79nJYGQJ6aFUpIR;mAV~N6*GnU32rBgjv0h7LuMr05lkfAzm&P8|Lo_znH zRqMv>8wVBM)h~TRl&_np-CX|s{$=qHWN7#@xMTAKOt1I`hT8tqXoc6|^#*JzWLoWq zPa3PJ3nRNO|NP0_%yAU1UNrBU27>PLTa7AKEwKVKy`0oLP4i)9Za&0wB9ants~p~X z*c8YxdX$2;o32i)DAIhtD=7FUN)qgr!4eD$y#=$M#C223+(wi=iK@% zq|_ZGuXth9bs#pur=gVOM)|B5o)iaYx+Iypw^sC+2PwpM<-4cUpCnV+-$`j)$?z@^iQJ) zL+5h|ISi+~amhb@4As#U2AqDNV$ZJ(La)(BG+lOl>A|WS6gtsqr}Fte4|_TdzxzZK zJ8=&&y4<`KYr#Q6o_FKStr_=g3Ywj9lmaa$5zOc0&($Zbi?;?1RZ z_zKZ)c%muFW~Lfq8#fo9tMN$U#5T=X49YdoH@s9T>Mhb&LjiL$UF=*e=OILGfDMpR&28JR8joS@iey zE3_xh9W?XV#g0bem=a!Y_HXJc2y?N$oe%>Z*QDL@M$l$p!Fdx=<2ucEh^Hr_Ugg`F zKXU$Ak@M07`up$JzY*B+euD?2cC3sYi^s-fm7i&7-V z%!CIp?>}!gZ@qC)$OO8+13FjEJ)zVKE%`y-`>U$+W~?vHvz0k%b5U8xu}kfsC1j?` zU|8q6(2wBASX{~J`eGRr8MB;aYZ|*2C+crLuiu3wV*>OvlbICq#XW?(!AQbW?Wes&RTxC7nvtoaVc4q=0zgW@jiLwE@LUM=+rjp%1X{ z!Q|0N#}m%nuH9+%89}{<%#@}Vlwh(8Up#-AZ8I6dggwHYjQd8~G`6E=21(SLlsCcZ zRk$I7-qjA4w%97_P%AcsX4$9SVYb=yVNw>EhQmq&O%w?tK5@Yh27`KRbbel4A*@~B6zU(2-T#^D(gi$pH1tSC#Vf(=u=F1nwn?K66F-rA?%-=|V83~t z)m$E_++|FlFBXL$8{=03saesEEgm6^d?qnXZh%7VX~d*PFw%f(_fxhvELjkJ z03SUpWHNP;s&wv+s&Y#lX;pGlJc|gjSH)qn!;gt@B=xN8dSd|0H*II$1wfQ*rPQBv zL7SNswhC4RZSQ5nDz9iY)}cycipp|#4xQ?yM#&qt6GkOZTDu2EWNGiBcM5;3TEfRx zkM(yyv0&FHiIgL1@ER;RQpRwu+p8BM`T(t0oQ%J_f=OLIx-XB)^|M z_`(R~b82lnmAF={CqjS^CEJ>OMYc!K1Dl-@aoE)G8Rbu9&LrcsxpAk+=(!4kXezc& zA=vLh`MDxZ@*kR8QUyu9Ld^v1SMRDO(;I5vRgvtqrR>yAn>K}}GLEI{1$^RUy}=RH zOBM&R#Z3qpW`1aq6gDF9%*B=c zE2!o;rrFqwDmHCkhW=vea!tcS5=SE zYZOTM>_l#=P9%$-fdj(3^)c_kt>SKP78HY8=@`s10&gT021WOm*M<%Wi|gP@IVLDn>r>(WmWb*zTurcZ?_3?km@lwwSYP>?=h$MCZ$^GuDFU0q|u%hSu=RFB=UM!i%hwNb}oKbza zql;_XsNx>EmQ~*owtF2W(sGO&6&NDGsY%M&FEwy2YqOXMSHd4TpWxfdn2$3cKRdG@ zL-RngJz9mpU|NfWbAGpe-7hHpj!4v}D4b#-E7wH(ot>R15NqVfWyr%|J>Darf2Lt3 z|0Q>|6rq5ekxW}{1kt!OSPjLFPb3FT7f>V_4+7KYjtC5KP!EY=WD-^s8L8B~tR8tK zH36h@C=kb93&SRiBD6248xBZIV&xJJP_&399p-{c02`z1g>Et_CC5stkjtQ{qVvg= zwQHL{JNm}^)2zG702*nY6#{hGhzcFjjgx}Dmy@W9q2@*$?%&U5ZW$pj{0>=^C@+Y& z%B8R&cZO?6sevs&R}s%SSj{v#?~Y{;3AOy9cV@^^GBqBBpP_uW`U1dJEF;o{7q8A+ z47-PUK54xo+c4gA{lySi5Gv3yjQY^j0wsq^!X{awnAZ9Eeh*RNMga*)B38thrzGb= zfq`+Lz<%k-=E%4a{4@~eF_kHaPASg%+k;bT-%CECu%9&W3q9B1?tC;Be?RYp<30N2 z!)p3z80Hwt*ciH@+4pw;kFyLO@QgmMR#5T3_dy?d1o32YqWD8>%XWi>Q~_0)5&-zx zcXv5R3>gO9k&+q%Z{ENYEw0$!j#o=e53C1_Pd{wCn9ha7hKuLnpKOy_HvQ1-W+<*n zs2e{*rzXg3q|f8e7z2CIM{hVE=YzoT#K%@grH z^&No+um8IZzfK4P&uF}jAwH`Qw@XTLtNf%*pIg@e+IzMVQFuV}Treg4;*R&juU6Jwr{=E=A-8vE3Ih8!`@Br|XWPkq z+AQJ0q#Hz^HV!YV4udcB8aEJ@Q`S$pP!zE#Es)ElE~-_V9)c`GdLPlh6W0}?P(=$=jGW8RR zwV+4+ zI<#LWumZ_p-TIkD+(*=fS383+t)E@<^=ClX`t}vaxs;F_VoCA`Ov&6>a$0<@_7h}+ zRy&OXc9b(2DJ>l0J~ua?&0LTt6K3bwSPe=hpoW3z>wXzd>Xf9u;V@;!Rg7L z$=hCkR4XjoAds`nm+mYSQcerGJ22 z>RCpC?S=|wQ8-}_!IsHGI)gZP8*H7Sq8~Mh7#h94PH@d8YWmb_bhx}6fbHXUA9 z?LG}=%o92Y01K}G$XYMj%>Jd=`%Stw(<-ps##5GMl7Hm{d_=sG3-7Gf_3YmplvI(5 z<&E4Z8V>bv@Po?;=(`TMTCqvi+L|p<04o^(iL(QS16B?bd2?_fdgyn5{?LY*O+zb4 z4PLjDn5KZ)ne+8@M1h;bU%sFPn7Bf#(J-(LmMX?T{6$}y6T1a9{ujK9@}Q{KSey4l zp~K-%kaGs>5#Jb?)T2g9IT$VNd!d5(d>DHS_JLU#(>Ni9?(NLsi~Z~BD(1wF8vV2( zzphA%TZII34obXG2uMXhnGTu`JFK%35!4hEPcf>lDn3$&^7UeIyH$(Ysa zZGkDMZSB6pc!lU;^rfgE&g~~@X!+;j;7;Kxq3QbZI~DM@C|W~)a}hc9E0rvoKUjto zGq`A&hSfeRO$YN+xt|o-WJ7$iKhQ#66yHaJpIu+T1z(D~71ZYTaE; z;8VNqVX`3i<)wrKVol?u*a(&%KW0X=u8KKGEXIt;`71=Sh#w2C!ze>uzgVFK2OeW~ zS3)$H%iLeUvhz?d`)$&CphrdQT)iB07xX#9b%7H)zJX37AY^a4VCORD9r)YYzwD4W z0iP%S{mv%;cb6SkTW<{zYlp3lhJ=0!5uK>NyVZ*=_co_Ys-3nehfH5DC%$j7 z@*SYo+DQZdqfXz(ho#KC)(EeXSQh^@HyjJx7W_%ELcAiAp=0F)8OX#)v}Y$qDfvTQ;#X=kX;yv5hs z)zyX8e!9@?Nhd~&?P`2MDhI_{aOk8m6)#-%VF-I4P<{Qzb9&0ukrhUcr`97dK@N!Y_fp zZ!s(rxNsMtQ1m$>rf;@D88wAPqC;4~^Fm3azlpoVKb%J^=|7z3SF%=6fxx!Fs+~eL zCz2yiNJGZK;k7OBx4gBwJoK4Z-5RG|szmbQ>rSyAJfTm@1C&tKK%Ym!hMuZLC?w!4)g{AsASKDRU!YdEz3XGjdMa8i#t~ zEDXk``~0D7)1s4T`#cC(rn_?8!ZC?{(}DNbVMbnD@44nXH2lu+&K$o-!R%yz+Ek{g zrky(X6PgwW8;F_JtK9Q5xZl-py_Q-UlO*Z=^sY9~QP$0iY1-Yg()~xJ+dhjG9j}or z9`rGb&|MhHY>PHeI>z=5@2V6|jB)Moi5gn|_ZsO0t9^ZTh)N$2nz1{mFl|(=L|wKn zD961A5@z7RvQS7`v`2#`#nEz>%pZ7cadLh6=~?}01}qY$9OO8|);BmkIl3Azf#k-r zRf~@!?5?$^f}2^{WiYFBX}qLEDrOJl-%k#``PyMz>+0(p^ULSxy&s;Gv~ozX>aXK3 zU>Yb6rG<;DYacKf;wQ;9T#O4_r&wi=EA9n9m4<=DoHH=D0X=vzgk%PPfDrT>ga6DZ z&BgNEuBUl%`QBf(Z-l{ku!o#nt>#GzCzss^N_Ci??JVw6w8pCb5b;h z;dTY0VGXM5AyN-J!;YN@YAuM?*vszAzOXokz+YFu?vrQr;G7!dJM`by?lbXv)W#<5 z*wA7E#jtGweT#aRUOK3U_k6@nIaS!(0z)y1{k{ip5K4RCUm09oJ;|m~vsI7ZP~$)< zFRPd^)4H+L!L#KXT$85*BAmVvj}qTMh21WACf3wXHfd{8L(s`C%Atc-)PYZ2RF7Ya z1MdACsIC|WD&Ku$B^piHPeXX)`Ev9tL-^2F>x)xRid>JL?%QFoqXsD^rdYKM%XMO5 z2GU#Lf<@BcbCk-mT?HX?jx>v2cOKqyl%NN@aOv7dl5MWH>juDvjXSTXBD6TUtfHmE z?Spyt-=_lve3TcU>=G1&TlATxoG}8F&PK`p#OUX!a|jkK!Fw zF#*W+YItYQ^Al zXyeSvQ^DP+KGAylt)(#jVy3C4Vkr3N-c~K;A%|aW&~N@+`Y^53>OwWjY-B4n-%c}3 zS^~*1L<#DK!6Lr?Yf1D)aJGI#v!$BK`BR=Ve5(p3nlp1>>M$8632`}9nkFI(d=~JV z5R7gD2i3r3I{>`xg@wI=wzjrjN1*{wVF12f6x#Io7+yl7=d_^U{!i`-_bmQ-CtfJL z7X*ubCA{yUb_mY9s)waquf)qhdydS57d{!J>;W zt!J&fJh8B5MDz~CmE8j_AeUdRm^Q~}6&gm$${L?acnY^D*nA@TU2kIPXj|3JT}%o} z%a^6h`A>;^Fkg;KJ#rh5Ek5eL>Ss5d@&N+};E$372ihYqSmTPtn>V>d^Yyr{#-$^1 z3%9h_{>i)*pFp)xSh_R&P~lq~8-=iLwCxZ#X+_(mG)R2Sb`-YOZ{3H|$NOA3VZ}2X zDuvwGr0w#l-xcxI;!Y%{HNR6wHCaO5?}?^*yv4x|tUGB_oAuXtgj$&Lojx-M7UUrX z=Km*xTF7uST-Fe#X%`NzqgMZ;R&j9up=93TjQHhZNt69TlBX?abKSM21UWc=RaP#j zPl^V9e_ow==dT#xr~b=M+F#cn8<^B?bK*pr!7e&Tatn-Plw)!Z4O#9o@E*O2|IFc{ zNNnkgf6!~S#wx2Evm9~`ZX)tTxWPa%cZztmu+iN;%-+vgNm~`lFNp$5`z~mFiO_U) zpJ}#dtWV(k}AN7?j_e*Xz}jCSWU6@9M+Hv3Z=Ejhy=UnQv9o zeG9GSb;@PX8t$bj<_{KDSaoMQ1{qgeijd$r52!agd7C-}R{e00J^Q_d0)W!|3F}5? z_H?9IocGB_{foE;P0~RPl+vho7MTc$sU2k(0_;Ws{W{<`Aj%~zjqvM|*P{RZFk@q% zeZ0&K^TaCq_I8zkAPNP>sqw1WUtS<|MwU|liQilVj=nVJym=>{qju}il=jF_M+;v6 zVMpXJ#3+#9-~QGkvjhAaW^Dw6OykkEwP^j#cjz&Do+s*=UpL=nTpcFe~U+qe#$S7bzACv$k7}u)N4RUSrjQ%%YPZ9V`)3V6-waAZL-8 zPN*zq6!`)hZTg)CKLlRC&f<7I1jSMwbPa|#B?;2?4}}8?j->SqgQ1$qMV>p)n8HoB zcxfZ6w83V&CMpk3C;t=BC=3P#@mjQOp77BV=y#iUzKG1UJN!ahk?eH?a%>_j;)on{ z>ENjO7|(%dn#p=ABxbJY6MMTvtuv2;NAG^je2~|-WpA!{!)x|~*4MhLa1H)dtdO$Q zH*heVq73kyu?=%cRU350#S}094kS#FV;AHZ@sij!S$fT`s){A~OgH=kzy z`yymKyK2o zMU87AJmsr{;yX33K+>v4hZK~=CN@snugJYzzIwD^wNJi}5acqZ{8^?F^bC>?GMM2h z>ndRXD}{^}6x=w#yAT|tSkC9ligDm+G#Nf>Hw zw2J4j%0q*cjpW8$iz1_)2PFhi(dn5+xF{=+G(JhM3&u6PI9?6GnbpJ863fN+e@>`@ zEkX;KMzJ^QCm@x1J7b<$#nZFCVAZ+am^*k5^AO97Xf}Ew7;k5gx^~zMxJyf2UR`B+ z7P2JN<63ReGN4bn_WMQP*e#EXDiI_8yngj1>exf9*|AV-pMz@}-s9Twa!9YUH*cQB zL2WXd`cpHQ1zUmpam)){Ee&R8FYTkLQ^B?6GV)ktTA4J$sP@&tF@U9WZBO1*j{)eT z$YCuENpa#OP!D;+st>6F{S>BA+>U%HQjF7p7-=B1&lCckh7xXeoG;WUQuTX!d~NjF zIP}APGqRQyOdyzAbg7sfh<-O@+N!4c8m1h1njTzJh9jf=-52jY@!=wV#|J6yFvNo2 zdPlNqxeaZwR%Cd7J6JNTULGaFwwDXj*A-b&A+WL020ikmav^|otN(&sh7??~vxz6> z7ihHc%>UKsaQ~Gnlc5>sPlxmpUlS39;%)b1dqBqX)3b)G zds%he#o)nM3dZ?+lBWqB&L0TPaT}V<2uv1FFSoR?B&+gpUsMtDmKR1~GjdXb8$i`v zIV3vY(C@JU4v@cBk0EZ9riBgarvE+P6Vmy6pxUphvfQ^MbQ!cX)KSo`6JS^Di?Y-C z81f5J;wCzBAE;`K$$no^&()-b$AX<|gv;^P2aCKzVUZXmbY_fnO0ypqZ7Hm=XBCao zwN8MYgOY3D&$r8W&&SV^AgQ@0_#aWEyQ2UBj^p`k22~-$x>^Q14meLMXXG)V3AHWF zua)^wR4~X#A1N|P^)?v=%N4S?sp+#E-7PQ8wU87N?Z0>inamNpSIxAV&?TN%$HhgX zWr5nNpsi{V!>BIAo#gX&Sux)<5%#w1M# z8ccJ0rFCB@bi9F~qzl4(rHuaU^Mdi!HAG3@o&8HMSrHldzZSX}{VP2ZM?~mE$|QR;J<&(Ef(WZ6DhhyFrh@M-2qE$PefmlTly99F#Rn zRk2pT!j1+b3|*G(S{hl_r0+h9EG2*TfOwo-d=~W1Il8_hGy_)>$IClspqgZB4e5pZ z6+{LOQ!}(g#Kql_yPa*FodY0(zEoy|D{>`O?x~dU_DmwGg3J1JO)C~OTzn_dl_^&H zvFuq8QhajfbAFp?MVc;HxHo<-;dP>viVDVqLR`GOB8_WpR!%mUgVZaYa<_+okd*6C zIznnPl_ii+$pLD%6 z%*06E>wb*iQvm%X(R*(1lP?0>h9rMS9CkTrD*A_26MekdJO-w(A%9-}EyGy0%N^Pr z`p?gi6`yl6r5c&XKxy%SQ9>48+%FR%v#Qg2N(LwMaMB>h4w+ZH7Mr>+4HbW3ByF8h z!oja22-U?qa{>E?CkEG+9;gI zBfOJG`rLG;-e%cr;(G{&3XCnxb!zyaOszQu0r%{F;ohQTs2S zXuKjjc78pgi}r1KYkNXy080j?=cC4=10_V0-D8Rjm=nU*pQM}rSpRk6*YR!jWq1vW zFo6A|sDG6&O!LTs_iF2odglR>=e(6mhE6DB+NE#S6%=L1U9^B7MEPx-!y~HJJv%Ew z6ca0K8SNG8SVQoP5Xf#r&O1rR<))|-SvXz1JHZ;S0sD-?nkp2$`1QGu{8HIa{ht<` z87diozd{509DXbEJEmS8x}mM&G=Jdg0&jH{UVNjfN^skb?0|ytVzO^6$5oMp)JNhd z*=XMQLNx}v8qFGE$|Q_rqZrH1h%?f&4*A_hUah`3W*xhTMfbBK&nH^|wOeC^M)%_GZFf=)1#hQw=YoB_jhc!l z4mVlD0QHB4?%7VGP>N|2CMDubs*DxA9E7wz&#n>%rx5smJ-ZF@sCcbBVU zPxtR*$~I1}D-KudR|7rzR|^)<+dlh_(d8eNL_r!srZ=gzFM3 zW8o^uO85mtN>O`=L2cq%)>!8jyiMr<5TyWL1PG)I_v53m6CBGG`tuvXKQ+@?Q5@L0 zaq08OPnbEEP&?C;l#@&NwpmYg5$eq0WxdinAr*EO4cydm#ZAt?&WL=e35~ZBo33l)^kW`cKpn8&84>JWnWCA(RQ& zq&$BPdERC5!HPHuIO)b{MMQ?o1m1hxH8(piDsu$$wV%i9*dj!K<66Do6MG5IM4dytTJyb}9HXdBVniB?p2v!&TnScC$4w;d|v9Gh=GwaRA1d~P^vB)+*~s8 zqBT#417{X-+qxb_dBVK(E+_!v6g~B|==T z*9fOg&ai$f#YUCYITrnD&3<$Ru zBws`zs3BfLjC(Xa9*)gtqIbh{g^#??Ykef8ZKqh2If*=(6|L^O9!J-__honZ!sc#U zh^xnZyb!ApcHH;UT?cx)Zj;3J?R;sx0AYC!P8{#7|2uILksw{5fR+V(nMIfUzKJUk z1ym8LnX%KkT-B9Fa`p2CmVR0cfOC|=BYuyapai?3JzH;!D^{&r->vY(myF)NS&yW< ztO`?lwU?`$sm04xt8@N<+K;8@Pz^N+siJNcsz{J`5{RD(7SISe3B`c)_mU86-JS-b zRkOa>FX2AwV?%?dhw~_>uaMtO(qmJ<0*shc>=m`82MRyB={*>kceY2S6W?`NNyhb) zdpHSkajk2*z=vT^UoKK!$X@urYY~m#6gOuKOYUtld+gV_Wmh(jFCiR$U? zVc+7WjfOk07IU}}r#y4Wz;bD=2EHlc%Xm^=JX~zB2o@s_oDMSh5N@vRZw!>=Y$iHR zgec44@0L$N&KEpjeMFUe30&8uP#A{Lm|JQcos&b;t!n^;MGb_Yu%#X} z(WzqwbCo4Jk{smEA6n^0ioLzKW})F5szWdE_?m9iwrL*Jy52}TeT)o!{)rUtrVp*? zO>41crs!=Sp$wwpBg~W2^sBp^P@IZIqTD{VZK7LMgo$(-O!NY(`Xg#x$f?90o(Po!Gu*r!9~%d~;GD zukQPzTKbAz119in+ao$P_XCna9XBnVxL*LRI#{Y&u%{d#y!z|p^?pAe2@1=KcXd)RcJ&$bRWRpEsO>+}MD#g^P;jzXm0L|m^ub**G40v!;^@Xu9r>3TSjGCIyQ7y&R88<0zyPI=894pc*-ux;@ z;6*duwHVNpuH<`OHP=CVkr-nZxKzRVD zq++unq9AUedosdmB|r@lo2DYP{PXM9IiBs3k6hSvb1sGjR`Hcc2Uq?IO9zq4IW{Yt z&tx*v;bT~z+Ep)1VU-zuRl0*nj$ezrX%$(M%4t}DU(0ZwNM)d;DXUN==?GbZ{g%`C0`b)G`K152s@ z4{n0({D(FPIa3%)(p*3EQr>R@t?Sg$ByZnl4#Ph`TRo*gKWihCyw5?u&*`n9`!5%ipK|3;v)#F4v(04IDpr%Go z?&nhojtq}Hm+_`=YtgnDf@}I>&p|v_NVm{5qdCr`ky&X~Qgqny{?E*T#V=q;P&$uh z1{yej%oL$mK{bA8$fGQhTQ#_1Sce}J#yu1s_P*St`zYDMGjCAx(J94Y+39mk2sR9x z7hMMD(;B`Q$0N95xjMD^n^PUxFxGiAZBL4Q^lJnA!4P|1Pat7nH>imDnT!Ic!u#TOaYoq?U+ z%#}(;j{<%#@hy4x9~(mXgwo9P#nCKCC9DJ|3iWuzbG8=1YS@bTAeUJ|dtV-Ote zk3Gc@Q9(T_z5qc{e2iAY5sM1WUBD8yoSFD6A|pJNsF*hr6ZPqh*6J!0M= zM40anIDkH%cM+0+9kEc@W6)jP3yDe{W_4Kcj55^Yor^Ef{zen8ezeim4ALnn7^S8UY-EmyITb(4x#9>^Wl-C5h z?h)M>Fc7%@!El|;iQ0zLuj`IDt7Z2c{<^Vnzpa2&Ed>)Mb!6_`+@M5rmK4|d^3!0T z=-R1#++n3jqo8Byt?@XF(|_N zAZeo`1{nDMQ#&+?G4=sr(5>X7WyvDsEyP`-HQ43Wcsz6QRhk^AOpz9T)?h1sMDh;S zx@Fh6veI6Gi^2;d9HL|?^L%3GNCx0R-1zEyr9s<=0+(z*xldvUYimMFdT1}vC?f}E z(c$B9;?{F<|DK3E3Ui4B!yP%zw#+pb{gl+pJ!!&T*`<|U{mmMKeiD0AR^Qd_mu-_hso=+(KPnYH3xx8S~7j^;^%UQHPEuP5(g%e0KbGwze#@L zV-K9uLxN7aZuyQUrP}QBz&n0S)NC+wMPx?A-(^Uy00{~AxVNNJ4m-xEU-HZkkUN&q zk7(cqQwT(8Wc*2#JS3*WG!ZLhONXNEnQ2XJVx(iXUzf)JA5mW&71j5>Ju}qMh=6n` zAV>&GNr!YuOLvz@_ob0WQbD?r?vPdxkPws<>5>i!so$B;_g(8> zhtA-B7+$y1E+lQEeBXF?n*f>q`|Ky|P-wpI1$|9TvVFiFGQqz189%9DB~kgpe*WAc zLyF@^r};auHO2D)n6!@ze6>*Id0kI~U=1{{NCI^=n{=>5WkV&8X9WJ@``pyROT4-*m&)CP$|0n2^=Q6fLfmB`2Die)HnP=#UlT632o}Wdiu@Gk6Gwoz^_PoTInriy6PDjv&%p*dG zE(<&_p6Cylf>|J9w1byvblV|{A919Pw0&h|)y?|UEgh=jwn5%+0AGf^uH36ws>(V< z67k`*W5FsBL{{!?9n6Ge_3uZ_cJN%}#@;$zj{Wp0s$m~_~u%xspR#ucM znYiw{9PybThH46_o1DZr%%V-M8{r+Gk>d$A^+)f@%BFQo*%d=gzv8=qFj(z>EaLaO z6m)|c%kjJ3T6-okmK>vB2V_&huo(nOMvgx;tig!-xxrdh|1mI>`DMwgE4mzZ^}Zx< zf;^=58$;-``|NViGNYx5L|dilAIc)Zy{OshE6l8_C2!(@9C~zBP0Gfb&o{PbDLK3x zp>7*EZ)wa*lFuDs(D{^bKWaP5@V^UPFq8-~iV9B4)ZJ_1<=64bSoXnU@#^FnpNv3aTA_R!SE69f{4b=y@XkUK<_Q#ys*CuqGFw& zEuO$X@ET7=Uzijuv)LhkjA(;B2XInloPWBKWl520Iih5#B^Z%N9LLI6!WLUwubwDe z=L+R-_w{>b(oheTyuU_+G5Pnqq#7jHht#ep1;T?``uYX%c0R1?{!Fw>$d6dM+`1IK z*%G@hMs2MD^QU#b($czE!=?hz^$z!M<~sps*$)^LAnv!ufO95O(q3PjEi^DxP*3dS zf?cSjoW@#BZ{aZYl_xv;y{Vt>vGh<}bJ#_j=YF+LITtw|aBk$bEiG*!&~}O(&{*FV10afoh2c#^}aMP=?ZEoy#V3! zHLe2W)vMuqcLtmRt>I}uqfp*RZQJ|^nVn}_xf%#fk~VU=^N{<@@!6;emkED17arJ! z#w|H-7HI2#3OKw=ZXT_*)mnOx{7e2T+_Gt|`^^9JdZZRFV>eva{Sh^DLbfFZc#%Ua z25D8{Rz&EV(xUg46XS(0AP@^}DC~6rn|C@Z*%ihh*3!xa0@tysZAwIJr*E4v8fh#- z8B4JhlPY0GNy?Cns8tZBfRfLE-{jXZ42|UH%jm29r%Ss~Q*GhG7Zio$@x}k9nYg(x zjiMQDw-uBBIv-Tu*D@C?Y6w3l3H*jg512wo)lzDlsVBBV4Fh^an$JX>7st0W*=6@w zVjc1;?d8@^3VF$Y$*6@2)OXTh;9xQdQHDyOk2YaNT9Qe9ep3B=qd|gPUpInV+aocp zDPdND?{p6F@h8Bp;^w4f+eHh01Ui37ZAhs+@m0B5bieb3+o%1V#;v*n%Zr|;hz?lH zNDjaP+2m{?!X-JyO-l0EKJE1!s*lZOW%ME;EI5G*LZ#2cdUM6KXzqEaZwwXj`VYsH zPEt+{ga;K?avZ;7#yItzTc7`v>pwk`KS(OwQ{zU;S16Ha!P&J%?}-N_ezW34H#bAAlDd;#=LZZ~BEI3km*GXg?i|WW zp!%Mf05wX(2z&(2r*8il*ZD8d-5%1de2KpIt%$ffk24ggdo$+8gIll3)TVW&eij-= zXsOYU;*fZ+f3QL)JLb)TE->l*Pw-DWfR{nhUl$UZ43k`;+%d?@Gm}Jsf1Q1LuY7OLbg7=~cw(Y&AYb@-F4>U~Sbk zu!;ZB6XI)K4wk^VkNsIsfADL|F3IL!pB;xpMr^c|va*C!j9X*YFNRMmrdlw5ejevc zQ=~$+-k$`8{g8frqY+TD1v8fcOBc$FOYu&aH_}Z-tsI8Z9>+%!Vujqf4d`6hkWo4D zVT{aS=4FKY0(KhAOcPdohR)8~zBC~^$V z+U(6=CPzW|%i3oJU2odL1V2jGpVpU^k-x!R`k-&%tn5qc&!McLIRlS|z66I9E_&`q1~szHsY1zJ zm_}%LgyL?aMRQ#G! zEaHF5Svs(sg`Mxu8bft>(#NmHiRo+`hNpZx186Q;LdACtgiBQ8{9;gXlo~9*Z>cV=b{By4AVI)Q+a2=F(f`4<$FljdeCLGlh!FW6H z(pbyyh2ITMesZcjiKBRkMalplMV{mxe0|%Uzuz`0lYQ5QG7Cz!#C}|@xPBJaD3lqtH}+4eH37{K__F zJ1632sqI^$b~L2In4ye{V29L;V!eW~1lXVZZ3r!N|NJTCcbu{C8~|3}8LO=_0e!Ld zG09^i=u;Qn^>;c6WRTd+ikKDV{?Oyj&u)U2nC}Et#y_E~GaCQxt~v*j&=$C9`?;Gp zV3MbO$;p$pH*A`5;6fHA`MA9^G-z2ChBbfsWU+q7<|<#F&Trb@ijuW`p|NY|_!njc zPTU>GowGMHg#>R-C|5hoW4f*COgHW#G|)Q;p$IhQq=C0{I5nG^4lO$DMCd_(6&4(t zX@e&pl2RZRE6dS;gJB(bEc0dHg9^I0w>OPYV@0{B$P$i_AKW$nz2$a3Q_T7H@|qSr z22k4FZ+1D~pR~+11~}d$(bNB2G~S*kDgV!*Z9Z-a(~@aqbQCZG2MnzWlK~SG^7?ne z%G|s7X4moZHI%s;ciPhE_GT|-!`q=)?udF2nb0X9a$B&{+19pFjyZ3wXYI&e+<1w% z+oYQcH(H?~glYXOryFE`8^eS|kZScIPZj^!f|XOho>VYUKy0RtusAo2vF9`=^WdRTk|f z1cqeyxakr9kg7KGUeB6tJp@PfCWYy?0_h7G!SBxe?DlrHm zfGY~lX!gQ=Wrs)JZO;xEY+?e5;8FLT1&49GjnImor(Pat;xphu$v?gx;dqzjYGN>K zb=63x+nP}eR4#h+E`Q=+`~KB6sO(5}vWubg^;dq`M6_g*Ri21)j61X3_Tst#QECgmW4aaUK3`=fT6DdM_5EI6@cM{+TJ zmd+98tPDBiIw_Ws&=<3x2q&CzuT6KX^L75t$XC$i9C@q^P@SWmOy3GOe{4%jOE-wZ zAcW4PuDa>2;D1{CYO^Tqx>FfcFxWO>h$vcWAUDZdq}1vBMGEebkZ z=9aXhq5*iLFLhunF8Ez=o`LPCH#mKPQ;IOWVg>0M^k;uY?Yu!!W9Fy3Z`s3CM{mzoZiO zU`tQfiXchdH33Fm#U`>Lq0~1q52b|nM9_7k5M5u~zU@m-nLb5er6vHMh)KP8V1kr0 zd5oyE&0)uyxAv)IX_J5}H_c(d&QPpbh16ZItmjQai)Yol+r{860GbX|NeB5noeL-f zqoVwG608`Q$?tRS51i7<7NCg~Git%1^6+$Whw%!H@UThjfx41yR`@F)6&74{9eHfq zHrrPPm)|5hWKV-=2Wur$3**j9&aDB<#^;&<3`VeFvKVc&g|PhyRrQ{`w2U|~h|KW!DARhPHZ3_Ou!}=vYSd6&J-K(IwlDoi_Q}`7lGXly@13j{=Z6V z6rBA4mQXpE+iXk|(OEPP71u8-UP{=jIGA4s({i3lT3mf4K7PngPCNwVdNYS>t{MqO zS!-}HS4g;Dev$0x~+X-SLMg!MRNv3&;3-1?Nb@C2Ybkrw4}oU z)ogyOmEd{D-&5$+Z$SB_~`sWQX+{-DAsY!(LiSbnbU~a8%FH(1&5j{ou>m`CV2fNvc!yS};=( zv;H$M{^+T^JZ{I+Ft8PfaY0sC9r*BZ+0!H}YoKIh-Y=HLL9-<=A`RR{h571C!15d7 zh3pdszJGo)EAnz|$~630)P3~ae)`&Z9_#FfcWifK@YyO~J&)%&8e%n?PO z6Nr;uh%Q*nPyN38rki;S9Rm+P+TMMB0@@-8w2ZFf*{}{@6-hRPb#;rYO&2`{VJsFc zvRYao>KC{{OK52UPPi;+NxmUS<$sT!Haw;2vxoWo=gH1akrxBUm`XOxzW_lQKy6|0 zM)B-DLU7@%CCP5i^TXtGH4>tLG{e_lWxfw;;b8@W0bp(((E0MG>U1$7{cM*wm9w7R zFHA})y+24}=8gw&-d48ka!JR%G{C$0YmHyGx_cb5&Jeey1*<(;_eU5ATt+v26`1`;8~CM9Am*g z-DGTEODn8)>_7y*_6@o{|{{Tp;Ft(vGvZ^>E5ua~Dmp zir$<*82Y_;>UFW^dajNN3_M?setZx@cLnqGB zvgJq|joWP`c7x-O2)RUbfVEgQQ6aQ7n_s3vOn!GBj5;!K!$IKM=n?%Wu7ER36pmh! zCWAPMw@Q+O|85=oipskagD=tQ@f<`df+2WyRzgVbP*#1>V5B*r`M ztOsJ#_W5TEbRH^?EZvU+a#Xh=Vrktxc31Rnm?=5X6W))L!u$8Y{zbZwEMo-&920nr z&JMRr5}hBQVH7e78+X}6=GE%*X6WYQQJK)F*;HW_FpfGao_l3Ul4CAhXMC_kHQD?B zHQBC!0lD8K(M;2?=lrj&a^Q6TBfj_S?JG2IA49~3V{9H-|L+<|LXmCye3WlrEtN@_ zPBsxeXG>4MJVlvGzqAJx(*+{B3_3G}Mycn91cEJ3!Fz5Yf^AlxIja@P+d0Bhxt9FXiASzH7@`-pjdo9-H5Y4keTyn}iV ztVgpL6mc8l=JqR|4gp;%DDI$I$8?^Z1>B41h2O3(Tu}k5utP6A^YUAF;NY@<{d@m4 z+Pmv}>?23n{B8e*C_$}^rxh`ijcFvjvZ`BTN9PVc9ZMS_ zK5iB&H~ffiBcB)wf1yjJEc2j#G2vz(JKlYS2>+m?xmlcAUmmUEjD0Alp?&nTQ`8_= zLcx+ZtzZBaSg8ilZ~3yG=eaMW%8dClZ($8M$ze*qPZfx}_%}zNdh#3S5ZdKG?*RYz zb$TQhrEcdxu#XKe!bT?+`g18NvvS8;0Wi{@p7MY}!8dury1*Cc`$*j5sHN&B4VvX* zp6;Td3rEf`IPj6jM|=>m*=}K-&Q>WNp>%r#OkVW-#?w7p?}&M>HYnc~pXH6dV3g2L zUyg`2SPztio1)UP-uCQx&Nfu{xiUUxrqb$xDWTM>|QpdroQR$8=EmQ)+YzTLqC2r1XucXd8M*W5lb@z)w&+ec4-Wbq~-xB zX~dVYS#hcjwcW}ZC>WQ(1$UK~J!iZ!GFm3iB<(>?AK!@Jx7y#qYm9*shWg%-yQgwW zA4Hlp&SiHO3uDH%zmVg}G$yG1!xO*^fmc@2E&|Zs>*|~vG|Qsb%VKENS>uw(g3^>= z;Aw&>qWO7t%k2PV$w>zEx5I7r8O!|QhT2|N2X{C}MxZ6upm~qjw8z;ir|UF8X@a#c z_67XuYZAM_1S6MK5_bnso&Zr_&2j(sR24YPXa%VRSFNqT;AtLRgIcKS^kOZs!7>E^x2I*!>E2YgMDah z>qJLe$|NiJexiYQtfX8cJlc>Z_NsuF5z4(p3(Rg{i2~O9 z-~*Cr+SYXFytdx`ftjufwJ3H;=QrlejBHrd)tpApldEGF*oN~At3p4S?vJ{E;<}TZrjEZHurA;IcC69kcX#edqB5iIpz-_Q*T&B|HK8ue3hhdWXj1A&9ZdZh zQDuXpa#dzVD38Z*N(Fso=18$*OF(D*HRsBHldk;2nXZb3kh7hfZ5xlezWY(&WO}RM zq@UOX4@RgJk%|&?g|``{yq$!^-2umrxc5v4ilZvj{opqK5UC@`CT;d@j)ql!ACNb~ zS2#-)nPH832Ed@SYU)4yq3vA)ZT7o=z}N-&#sKdZed0uWY*bG76sqGolK_eC7jDjf)EqIlTuGqG4? zVfE>|gno|v@o$UCoomKjA(++979|TBkZ$nPt*l!?PVF<-4*g_lmbw7&1fSXziwuU_ zK7LVWO8bnKL$tNubCacvTa(;NeHRH+U@YJK+qPpSwfz7o%)+2bsFxsmeWWT72 zV~lV}YmVhfI^rO0|Hi()NAyIh6vG0b6sJV?i&x+I50BQ;&PQ)Az#N#7U+%L>xYPZ1 z9aDNKN{#`JP5vM^R-ytw5JALi2RTN64Mo2iqs^fd*Ry%qg<+vY`FjY*%k67@#;eUyjaZcl>-aIo2A5 zz&Yjcrf8Ai8;VE93>8mos(MVw^XJkwPw?mo4|2FEypcbRz>o>zu+g^Xy-`jSXMNwy@6w(sWG`)0zb~@FRkcYdAr4l7G<~arL|SDPx?uTe>1f zMf<=E?A-PqtuW$5)%@lZA2!wfTA)j`B7qF6|Hzl+4{^%jqO8A{L|}LG*43Xdk(2PJ z8*Xc!-nP%MOo-Xi)ul`Z_N!IK)C=xBQ7gW^2G)*!C*pqYIvGBi8Ln9vm)n+)|8bb`;UUy#?i&cA z9QK5Dra-aqjd&q;O+p7b&?o|&ct+^o(NSW1y4dZN>mHF@z~qmDa04MZMPX`!XC@34 zTs1wfsaF6ZE%!i$0-mS}guqAF4s*kIj^!}2R~f(WRmc#-VtktHWtx z*loKUqj>WSy7W2-#Hk_#R2_icgQ;XrIaaCbfUVV1F)5Bk~E~}7Z{RgiJW2p1< z-geQunEk%?(b%`ERCI<$SLYMk8J*7gsJI6G|26kb60OcdJ9>@eun*rZ2)ouB{y<+wMatKBS_x`y;a^cxfQ6bj#z?{?lkVI_c( z{3EBQ;5hf+S#p|~X%%(q={dUl^OL7O8=(%@i!QS#?-&34!O_xM0wBshKq%>-@Iu0) z6I&#sSt70&(NtiQwsF3i^kRB^53J_EROmwA^E(=d*FYg%1YtS7V7(TX_So2k%?*Jl zcvV;##h3vL1Ur5J^SQMdf<5Bnj`L-??5mv_;4c}Bf?VS1#QOf*TY}CAtUDYEW&hdL z8Wo6H>bm6o)Zy2Ibb((*b>_2|Y^e{4SeR^KLE#=1h+($j3m<>+!~!lE`nZbc!0%Xc z8^_j1T=%c3YA;Gd$gLz7tMTaN*sRXX+W=8{;>Jy1Fn}1#3hCI0M3h6!&R{D;PSk`; zW*bmKo)oCm)@G5&ctu;FQ7j&^%EhRd>zz985y&w}4ap}8wtx-V_RmRwBQ71L3Sd*< z#V!wCRtX|dZF`P|Q*(jmU0vN%B!iB+g#Go-PR#oo(3drv`!`K(Gl8ouWQw`kZs+1p z>pHVGYRB`uZJPz7+yYzfOWUf&if^h!v0zLd%LmsHFmBT}@q2>YFVOiB_4GUVggZe^ zLo*3HA|_3BzJ@5vRX$)g6|5;5TK$(jP-ZDAU|@!2H1pmwl6wlk_%D!O-hoAqX;?@; z$idk{sQzD&nLH8qE`SUsw#Y%%mz*Z(8CpZQ8`g#3@6wzY{1}nc^6qiR=ZMFVj)XDj zrtI6phc=FML zJgXuD&m6DLfn0ex+S)RCv+7bV(Vnv#7P3a@j7F{GDRt1*<ceJuztpVViSo}4d7E8@)fEQcWx2&@tTEr|~F=_W)fsjg{+v|OrLD#c*w zw~FWk0(MaQp2#uLt$-OFFqIb9*D(PSi`qX}XZu?@(inHjq+0$G0X4@ZdKaALYMJEe zpBH{{OOW#$fPaIKR^7-TbD&4-K}87z^BADl2gXKuWsgoS{ryh9%c6Fg9&Kx6OTdt< zy=zMpL_wt99Som1;d#l9W(#*j@SNW8rT_Fu4G+#`gkKsZrM_gv_>r!=B@p-BbvWwi zqzkWQcm#dVJ@LWrQ+Izx=U+}X6C=&4kW@CG0AHUod;!>1)WyN#3^d9;bdQf^0ZsGq zg>X|eMdX*F2Dz^Hlo-2>z8g}8fP|ILZg&P{uW_eFa#DP~D_7)uKh*K)2>2fZ{vQD7 zO$0M*Pd^C%1VY8WYudH|U=hK%6(rGI!Tt4Mb>J?*$A1Lvq1pEpCWA;tXk8?t3nb#K zzZRVzvW{)(5@(6pWX zBz$f+e1jGS-W;qsZHU?WdM@Q2*9u4IVqA}7>Tk?c<P&%@l2gH;MOvg`|od>1z=G(V9G%VZP*f>HRH_;p1 zRi&)hyrH&?gfLaAhu_~4OR^vx;e{`>O;vu2i@#4#Btil#0ELlke@apJI_;KqD14_i z8SW?mQA^qnW7z1Xa_dX)(6zAn{o5)&Um}FwfVfI(YwOgR2Strj+pk+iL71C?LC(Uy z>syKe!C7TJBz1OnHdyzXwHSc9-UW1*dJN(mpE0_>=yE#>vHH#*SXal)DE;Z{OyIC9X zS{IL3aN!r-IWnmar-l05>t>pR=R`+of>;rc0EFm&ncB_J!1xNw$1N6p1nH*{WJcW& zqdZIWfER+F@30|@Zx~E(B1^`~1jg;{E^HeOSJt*H^f&LC@JgQliX7X8PUu6sJ?!Vc z^~zzIp4Mr?cnH2^F+Kco2(lc(+4*#PbLntLZu|rDc>~^oU4vj^BD$%0{&Z?nL$s}J z95Ah{%vd)*soM?bPd26R&piF5d!f>I7Givs;A+maCjWU*R@FB_lHoD&n-Ceb)C2_} z*GIAWxpsu2W#_tV8z4P^i002VjAwBj86M`3PNo4MHU2RjsQoVH1&s352As`@DyfBX z#B>siXk5SEDImMfME1n>wvTKokf!@${L+caSW0F1auXz(0@fFA@v|HQ@5zV`eQ=<| z5=yhBtT`DNiLZ%|;&R$=s>(IR-5dz&7l_t=;CQN5yHgnsX$owimO3u~)mwvz2R{d9@x27DVEB3zdOZ;uF(fyc9)Xy}yF?vi>RImT~@S(GM{9d|Yln20)F zwCCgaA&eDxS+#v%3$)%`j)z`8A)(xjx~-xr7%h~F7k#+BN)x?(S-GeYLfAx)q%W|T zY?<1ofocrhY&yWV3?^$lJh|g`9d`P{c!0$k7#rtLZMTq|{2;ZiXi<$`S3(9o20aKW zO#t9yXK4KI%S)Dd}yDGfJ~ z?9SK&afO_yEYjNc3?*h*7yC1jyN-qceo)5NBpxdsRiJ>69_x%iQtJ5u3w*0Jt?t>z z5d~D*qGlm*L;mf|onzn{Uv4%sNc4^|@{Kym_}(^sR_4j22*5vt{6MesNRdkW;&1L*EZ#?8T3St!2`)EX}%DRX->(v&RCT38IvwT%ISz>>M;+ z$=Vr@(H^owNgQ)hLyTwtDu*m>h5Tpm1uhRjfi``WDZ!ceqU49={bUx{i#We_*;G1z*+A8My_J`ELgRaPPSItdY31QN8&UzI%qxolfzG* zJ4GWn6WR0EFKCy!+pMPgW=MJ$=lIcTOE>}EU~O<9M?kG1K89Oi(5L6pN_p@j*jJ?9LPnKsna8Ya>JiQI(XPF?x$V+u2bYE0Z5iwCiN#CT57D^9eOr@ ztKB)D4PYE#R29D}&Er|{m#Gww*PTK4yTudJ%jVP3MtjW7V>NLZN|)N+2eKsTVr(re z@xjHww4x9lT&OT}jz7ubi97R@jmAT@cny3b;ol>;8+>DlI&2)UWbp(dmkMLV0SE8Xr+Vq=3??i>VAm8<*qW$BPSmTMc&E&_dEt9< z{RAKVqx8Kr_gI#wJK@@CMk&BKN@}s+ud0V@{oC6~%I#s$DNr6?a6p_x>~p??)PI5I ziU?g4Y;vORO93JJjaGAen-is^H!WVdz6MZ1ynw>5S~hRiq{C`!T@8{cfF^mnXNA`^ zGImxzp9Gq(UAB?G6h3Jc;bdtzgYAi|eSa$TKDv?l7cn+dnR@RrV*#;tUkN_?j?tge z#VqPCiKObhS=$}2h|s%Hx_&6kd>eGL_xS$n94e)dhp$XkL$3ag?d5pyOsh>*CO~RD zH&v(Gr(;t^E)m@|kDJvsze(RL#cpuY=mc8++%XjmB@sQnq&fA~-}Ic`_@(?^13tu7 zQlp$|$)$I&WU_{j--Zth=h@>3RL(x^IKAu)#XghDmN>6@ipN`HLyfUh5}#h3keoAr zXY5!Q5NW_p1hi?WGiFK_^=<|VmpDCGil8&&s&@Rn0Oo(X+w*=0DY;r#)^6oXs`k;#> zSM~WY?J&O0EFTQ2Il!>xSOH~tBw%Tk{b=(jrYeYM?MF*ZJESuAKJ$SmohO}KCrI#3 zu!JYJr(}SBq0i&Xr%#fd3lR?)?=hu@nJ)SQ5j1E@J_zAanrFVOpZrES?)z4_aAHe` zes-UZ)I3op!-7UL8HY#olHIhF_{M+)nLtuXBk;CUV2nqdyANCk1fZ3aAgb9$&WNas z^f)zzaQ8qyL;WJD?%+LLa|&~68rpeeTf6}j2b}@KN+P6h6RY?tF6!6Pa~r~gtOD&~ zmYhCL%#ed0W2xJ$5IOln!sJI zM)LaYBMkH(Uo?>2GY@h2<|yzJ^T%9qVe)1|d7@s@+(;^E9Y8?M|wqj zHf7D@2JiqEgb>S)Gie(XUPjxz_V{R9a>(suMEx2IKJwM}Tqft$e>@I5)Rhli8T9YE z)MP40K#0XA%08j4;vm{ZASGvU@%zdKMGMEI^I z_oOtLSXY+;Pf%4N^i%S5M}~Qws0r}D>}(Pr^N333nw2uLA=hZJ$9rq_jNT8)^frxB zI;G_-zlgF!=&I!ILl{q3aym5LQc0dn(8f2`P&FZE6WG_vjU&X~lpFHBqtQRR><5b_ zJ`9HhCB2ymxa=r-%H z3uFQd>w~L{<9ss-usDH>iiu%e7-$4h(Hx=2ffR7SM*<;OU{i=%&sV(i#|12=&LR2? zoZ&x%e>_9zy8v5>2pt}9l$1@ctN~s(YJ!L=5=Y``04-G;o3|?@Z17@Ub8~VsPdoWj zLmu{;?%{b~t7q5`HkUBW7W%Jz;>r+5!e6#uP9@wBfujamkYBA?@1!4T76yh*o9W3; z8Wu)?ggx-zN2Olcd>(y>VNfqBUnxO>ZjL9su=0$NNWqX9J0|JFn_zaFM8Ac8kEU=w z5Z@5N%`h@j6qkudV~+Q2q^R+x_X2u7!Am0D9Yj9hCKoP+(G2{7!S4f|xq*QKJu%FV zN!RKQI(%7WH8`2z9!CFbJjX{Fet*OY(6AGy49oKK21x)G;&7kR=x!7FyH%3(<;Pes*jzdbh6R}(w%9(}* z;EN+v)t;PTmM3=bwEz728wJs$EX*#6X%ntR`ZAhNNsLiZO+xc;HYDw1$85Lfo)k6a z6T|}JMd{u~^52-#^G4rlDcBx=-)WZGdkWS$b%r_Yq{*@~DriVFRuULCl8Qv)kyX#G zPvb^6!<<_9THC_aIV5>?@xtlm$nG3vT{ZR}#w#7Ok9J;hY5b|`PVsjS#2v|Ms_=dN zMa=Iu-N(XM&)3|Fg3Mo#-20cn-1x{IxV#obDo=<55z)p7VVzOPkq5&M@Q3jUP^Y0;H?mNso<;(G65I5$JQPAPQJH zO;hGG4Exdn!;k`mc+wMKrT7JegOi^>2L8$b(&ZhkS^$$dN~G~3OBhh8No(1Ak2g>r zmc3O|9>cazms{&c?(p;T1Mt4NwRVJ3a(bOr0o#fk`!lnA5aSHU;ajn~NkmHm8YoV& z`aZyxGRGWu)P<80s6#>2w#x(l;lcTQzRLDV&rby%Y@!d@*H&7GCi5B*5qnaJ9BM&R8S=*dHQXkEM*8|9V6xTI1H zYxqF7xI*~5e?HT41>0d(e6qDI!PqZxkD~c*($1x*hd%BiB!5>W-4{nRb!hFauf|-d z3~Lw`VU@w6KHb(#l2l*Zv(t1QF+$LV^)5}@e!t6>#Fk;LV?Q^|9A`cPDk}5I4q=3p z+toWN3bmjoycU%4{lau^@vJ3j}_j@IQ>D-n>VM0qS0gk#=E5+B;`IAicv!!FrK%MmcYh78{G9HYV&5jVUziR?2 zaqpSo+Y+>L5(^S(cpX2xKV_^;YKkZ4^UGe^h<5x`J4fDGo+^>fXcipcVw+!f1d=3F z?FW&V(B@g2s$O0hh%%Q|o6fVTU_+O%aGxBP(v8Zu?!mO3RH?ap_8~()e(gCQTb+js ztuGYH1EN^3zNxBhni?OpGnB@pG=F_Cr^_lIJ}rDJiA2wh$SYa&?s--yu-vP&k*hc7 zuiq&J~-P??w zEOZ^n(f#I-L5Mezx1P6T*NRmm``(6tt7#8%3;!kb4J|rOr zgu$^3SHlaRW$FAwTSn}A%EUVK%pcv3#a&gD1%VtHFk8T+b0jRN zAV0TV7s2r?C1F&6_mo~9E6DoMXT}_*9l;<|myamHdMFX9PCvE!Y{$=+%sa|Z!PEiS zT>S_m0?e9k>y7gaa#@h;Gb-0Rf99IBjTH?gB6=B$&*G!P9*!PWx!IFc)K ze&7CUkYM7~0pN+E350@P4i%>12jj4-SzsH{+KF<@eZMu!3d@~hq`-n4iP_|AhmWc*$dn` zEx(kRP)n-i{85pDfDMuZ5hcK@ovn(dwsR*N)d(wbn<%2M%M_{S$&EXCLf#=<)vxaKxR9#jHOjn)=jF zYpp+TeM1{~dss}X4H%l8i~nP2(s@G1Yj%9^Z>j<>2uw`s8)3gF-*?%-^0vIRwVc0& zO^9Nh5+$fhdgGXqKX55ES%{_5>=>TYPBlveH57)(SPQ=cxGn8QP)|9XYK zUfjj-t-*Tp@k3A8&(jccRuiFVnzncK?y0A$*l`4;xMXaaTHP@P`~5^c5y?zIf8=wc zEhB{^{)ldzJk+%R!v5t!Fmk-kcDKB~TcOE3`Yv<~9aEv!V!%qxNEix3ZD;`nnQ6Nu zZD{TLU%jz4iANvRcF)S!lRovV2=rmm`2~V@xK0D3rf665>Dal}-Ra%4%U@)_kA+dO z(xmqbzeH*kxj4cS(6V~8(M08$j6J1{1r0WwmB~|+k98_OU_6bxa-T0uLaxW7n`T2$>yKx!DLcww+S4y2C#D}lX`Lzki51$dV3dVGU5 zp{e}Cd);roo+f%X=$l6f9gfM@{mlBMiJ7he%}`u=1slT$qZPkwc+v&tYw-z^P6Gd0 zfrMj;Q$U1x_a2jya1V&1z&{qyi9kT>VtkZ{qf{2Jl2(neU+03XRvKrWnWfoW1xIb{ z#{@J;{NDxmyK83sv^ykU6Bxt0*lTuH`JUIt=dn~T?8iTOfX-Fwtf9cR<$e7RM4rz2 zOPcZg={?@5la+X7_;Sxkht7RXH{PkDV(<4U4-0&n*Axf8OV1L~I1q=ghX$Lq{fnQR zh(wGU(y5Yg|EGJ6rx^_D?6Krq!rX{uq-;(~`hmI<+{)pXf?i!D0 zE}`Itr~knXYAaZEoB{Pli-l=XpVKv`!aSthv=+Q5jo_cC>{US!dc2BqVl%G7o9)P8J5t6 z&nszrPsnkC^ioV?i3z4+I&oX0SND?!JDd0Pm za7BMA6dCOWj>h1ghXCEH<8aqliU=K$;uz+BW@cxv%+y&MoXgr;eT-=6Drcc&6LLuh zZsGf#w;*w@7qrGGKQz=z7)1**YWHz3h<=!=WsjoE1CIwzR#cY?%8{R_Z1IEyi8R>! z_a{Ak0SkPuYNo-8JC3OWD94~l26K+X7wBxU8x2g+!IXc2l(V4i@7p1SZE)mT@iy~% z(zLu;k-5Ma=Fn=V|0UU|s9)%R9?)^uro$$&I|y5XdcJa9=2teHjBewF9wD@drDTen z3kUmf*0J2KRj}!>F+x)F5hurRoa*E)!+=5`L}oPTb(6En0=D{&u+)mE8LL9isgO2+zcS(sc6&;F_l#$RN}WMbboemIBS|6ycUwXf>FCFIJ1 z0)driHX2e?XpVs(ScjLsFo-CY_rC3x{cBua94_)JVpw|z7wbsG zRIC*85PxHVSFq0!g#e>3V7{YB0@yPDHq%~pb^)HHlhd9Kmg1HX%zzvz_p$91K>$l+ z>;?b;YD0iR(Sp=*I&Zc+N7zZZ#{fo8=XU`AFT)}LWow>lAbhhZ0_y_Q&U>{W`U9kC z)A2sGjZ&m)d{1ClYr!@I5v!3bg%FB%fp-D46asxqSHeD?uWiR{(4 z@Am3XsTW@TdzfH=Zxif>!=mc~O(2dm{RT0X2Qf3U9_t=~@MVuSeDGa?T)at%&DW`+ z4hF151+W;LXVH0qnl`P5lxP(hW*#`dSi3lnX4|deeod5!%(0SVswM>1q&xdocC|A* zuHqwKdc3&i{I3qn|HoB+YAvqp;5j(%sN?N(|QQ#s4MEI3QBsh8UE- z@^~f>^=1S#EU-6A;@|H9D|AY^ZG%qYfx*dZ;G7FUTYxnrTSfxv32K&$v%LJk0iYOX z_FpmY5A%=268eb;j72dNp(z0clP?d&UAOmW(h@4aA6Aeg<9%hVsUk>Wo6 z&jc4MEmX1N7ON;E-PWYTIo-NIsK&2uY7zx#u(gzL!3B)ou+`W}i z)ThYBTEL`4PEIcMMx1nPI8h*2VrbiST+hbJw|cV37N4E;s}f_s+Y1g-XSxZ?2mXW) z8lC}e`rB2ne}kfKvcZ6Ys~k6To-WIk0*6VSuR^1*nL9QtA>h+ZJ7cVS1JgLY`oYyx z@m~bid_SC_I0`w!w>>1pt^p!6_1XYh8s*)H3M&=<`1UZbM&5`LX z4}0J+^(I0BmGF>F;Y$az?EXrS$?nP|GXTM*(+Yb3e)qrY^zMF%nkj!^n9LkBB5t2*@a!&IL-_2OomPI}7}-1AFF>adlJ>)6%)Wo=9keKs zt{QP-2)o-W4{$^78oK`9akUsoiEP?tyNw?`Dc8Umh4Jdie1UbI(RWdBLI7(~g*pdx7N@fSCV- zV6)Xpubt2#K>FX?nR=D~k5)`{>By4f>tgfCAoM zs%jb8bGs`me`$(Oi0+Og@5;}wpu2-r=yvMP$$;n2w|*i3&O%W`1?PwQi|wF80H`f8 zAm49ysx3N)&G}>rS;)*hco}$M#d(ovD%kSUK~S=?aC(Q4uSH21er7N2m!{@~V{&C%@nu%NRn+6sA>Gh$EWlw*lY`o5fhX7Rt^So^h zc=-cL#Jski8usMF^QGEbC;o0`_l;Xye)!dN=UUx2{UZ@&$?tcRs8+GyNMDWk$Az^c zYiOZ?PIy^V9a~vTb<3om4K3hqj?#d&HFPf?*-wfO9MqPn^L0D(J}cyxeYIJXELwSu z0BZyL9~E;s?w#JF=mttw`sy+e)ja!C`V(gkuV`7OLFK6ddx#A$vgrchH)Z4pAfb1u z8|MSt=VINgW=W?h@3$7JlT0RN1sy;g?UVS^%7ZkSIE3Cf zqi!hX_Q5&81<=V`ouLt3i;mF1TCB(n?m$c#9xS8V0)aKyw(*j+qrr4$Fp>3O#vbuE z&Z_pKvslC0Kwtu8e;`{sQ&_5i%8XT(+uHZ`#NSL&*SRfm*L7gm-_%netSZr-V+@^t z%Jca02?#tshiGL@9~Mub2v50U+1PJ9s)HvW?yJdx^H@cYN&b0`_HC(3x$xVobl`B3 z;CV*j@i{3>)vEn?_v%3u;2B!w%W!*J-u$*R?27c4&7ipH3&%~wwzx9t4f)7~uap>( zb^lRDWp{f(wigd5405S~*FAmrs(`G^ADs|`Er$Slv-DXDBVVZZCrzUkZ^Um6gJ=xW z8Qi&7RaRm}eANHWD`Fj&?iM^-kJv8NBm**T4DPo8q`Iy1e@Jx{Qc^nEfzQ}>;)?7fFvT-%q(*D_*tXgj+9lDX$ldC0h0|3-UV(OKt^|9 zK0MrP1)r03caimQkbgT4yt{RLtU||NlR}$92X=*ymd;uk%4mETj(b;!j3=0KGN^U7gb}rsDK`G@SoMdy{Vr~v3=LA(V zK*|gvVVDiMQ-Ep3&+v_IWg*|=5b#49*MS@tUW#v-nUl|b9qJ@`L{&lWa9ZzZWd+jW z4@9RTXNOW)sbXEt9*@uNK*eKAz-z$vc0cd_MmTeRs1Uegpx^ZFA~Yae`*et9-=XQe z(xE~)GZRSfP!Rho+x9p%Ttus?*)?4A*_%~{yHb;WYx^ou5)&jN{Ia`tbt)pRC`*dC ziy(qSv_KFWA$SK=n@##Ik2y-&$H>QBz4)B}cY zru1AE{eKYUws%gbpo;!gII|tF)tZj13s&iHe$&xOZk?(#NnVq3p?TY`1P>-a0RTIv zT8_Mmn?Kq)+<6es->6g&OmL?cf%8s9N5eM-&mERBn6O{uDGE(kF0d=U%FOVs3@X_P z+Dx8QrU>m_Uw*`dwO=g%LQC?b9$uc}VX28l2(jk}+;6}8n{vGal3<7Z|C0fAB4di5 zh2P~~osIrbgw@&Pjgln2c{Scrj$eHMMc*zixJ5r68KVibDi(BDBQ`Rb3rgW?ab6Ox z4azjPn5E0m5f}T1ZICb}+yaWKh$MsnWRK&VDtajBki9cq3!kG9qOHxgOU9T(r!!#Z zgbR&1FNJd;72HtCCGjLHi3sHP10B>u==$;Pe%nnQTYo~}F)%*)wEVE(lQx_Jp7`Y; z6&M+s2(NrrdPHH-NcEE`2UZH|cfGlE?>8bQ5fi@@ybfB<4*OWMmX3!dk*P0~pGNF7 zWwOAO*wx`7euK10buB{(a3|b72{;yp67Pf6yVlhF`P=ceA3pXV7h_Oet*oFR{aVKx z_+XrKc6D7XK`8_%h2JoCNlheo%_JBX0Jde!-s*rF=Fu~L)B1gIkaltx@Pp3?WU+!N z-k7@Ax>z`zau@;yF$mNmm9u4IjzyG>l5Kqm3Dk0iPGf7Qbrjo=NhOAPWwJI!U%c#f z$Y;a3w^O8E=OC>68b#MOIIP>O&ycC_*(e4ol})AOm`Y+^$FXguFv@2pnf_y%vve#$ z?VJ-0y2*pHSQLv&R6r~nJd*CfyP+?n_EE$6i0wRnLk|Q$|oyMzU*%+J;!9Ua1^5o&NXxRfJP&OJijuHc@astuw6!G~%>fQabgSOVD z{VyF2c5TP4Rf)3kf?k;C=azSOXA2HPPptN9ri{`}QUk?fBPYY~F4+YEm^))1@oP|H z4Y7$)B)g$Y6I&3z+G?S|miswUrBqvHNufwPH`?+I=f_v~(lZ=_ER2N34-Gx#w4IZ1 zp{f2QOKzOkjQuZsxhT^Q+&>7gFP?dRLtmady2CWb?W_apjU-LzHaDP^d+QNXw3B{w ze&e|Y&)mrC*}Jw&Cu%H0in*l=4g`zL_h>P;(!Soy8CYtTxxPdEmsOVY%iVI^-2pm4 z90IzQ=HWx!qPdxwnUU9Xlqh0maYu~M$K}VzXTO^PZs+&3r>_q?N%MTb>M5v`53+&( zeQ!^>x(aZ>YFST7>C`5psOIEz1G~-W2L#+ZEbzSd_XZa+MEj+i}fyA%Nlim7&8?gsZe5y@7`=q7Bv#8%=Hrc(sO{mx~5P&UsQI%^GaQz*$d%~Ig zqfqQWg4=DjDZCSAgT1AYJNo1C_oG=xgAO#7N36k{;?}>Y*>HM~n4Y7QVrBC%XBTT1 zTi4CWJ0>tqFD{ZNC%Hlp(2w#`Ed5>4g3&~BU^B2UuQbdVt=mr$eRz5?K&GA}3$wu# zv3Lo`dO2?`@Xio}?$UAyn)_RBRQ`fMX{2p@Zsucdt(C;4=#vYFbcI=>v8l|>F4s-h zA*tcAkfq;3W%Rpdjz$kLlA4EpS@4I`Ati<*HtC(_us5eAp%7@(9EW>zH;#2h4<>bU z>9DdZ{)qJ1qi=F%@ic{Y4B?T;(c5W!o!abE{Vb=k^!G2(O@MJPLa#JbyZBA>^s)Pt z>SV3+;2UWUf@HY=%(kXe8SbaZ+IjYaFAbRm-)?(m^>lY1XUQ$Z61{Wk@wguAAp`&N z*c;$&^vr9YK<2Rf18T}$)cFQ5B^;{0D6DDslCm_i-OFuLU&C_2xtPC8diXB(#orjh z5IO}q6sb$K3&ZuwL|+1X~l%?GB_N-GQ6S+$OtBUl|pfP;uoGcw=4yV)SAj=vg1A;LTIjlw!NucaPdl)BQ z!2#d*(3ko+FP*r=_nfc3?0)vZ;Tly}2UhMf&Dp_k`K8yR)^5BM{~l)y^(!mD>4a%f z<^^^5_}=R@XFQRFC53WSJ>mTGX}EA?7VT+GC}Z}0Ua7M2ZAEixj7T|+aMFUwg7s_A ze=`iJuVIJ??|kN+iowxXkKh7u3vB`p_Z&Lv%DPtkx?SdEW=`59FG5G-^k3j^w^u>c>k&urbJBB z&7h{sY57sL2c^J!k+b z@7axvnk@lrO9* zWi^XNEp-_muzwU_hag>Jd1Ekr%T27a-ZwK0T*DxYPa7%@@o3^|{f>BUK1Y}F#niF( z*VR+sQ@ohfr9bmcUYi-7OIJ@XZ(2q40VD+6n{a6mJ2+uWDlRTwq+RTFxk2cVljtl-7-WK(?Rx58IrM7`R9I2J z#gmF`O(9AHh4{$JT2SvXBc6=8{&vq;P6po7Z}->?rsm>^C_JV)5AbTO*L&&WW=)5W zk=dT9%1qOh!-eyIbfRCPm@4&&yqp{Ig{+MW!TTW5C+v5WTKf4q3eE+C7vOQQ)0+~q z;|4$a5YZe%#OM=#ted;W5|hHvwq$iEW>*?=R1p0TCOU+4if_IwX7h7!?eqP;d$MLU zU5Se^mJ};Mh0m6sm+cD50ZZEOBg!rO`E!osw#QS8CAv0bFOu60cAueu{ZLTosFz95 zgjUL*=O3bjUg`h&v8xDE?F8elmqva3^R*KzR|X;Aar_jB&5t*A>XC0U(X0LUt>G}U z^{M~En5N{*$Niec6W_jl(w|H_bPv2%qxQq!EOGkiJau*hVJ+PcC=i~B*+2KC(kE!8 zZ5#Q#C@8b{#?<7@-jJfT3iP!cq|Yowr!9Yf-V4XX{1Fn| zo`Of`zFhqh6)`^k(g5TqE}s7oKJ0<6d(Jz_Tj}TmAjmj^9~+NSYUb_3OZ(%eus9Tz z0B$&#-xIQC5b4la!WdptxEeb;I(ZBVPR0k_ER;l-h~p}FK_asO>$8^0xFyDZV(T^a zn9u`uSq=oZ7Pb)%Q{UG;G2QkvLz0kZEtX8gRogh;e?Fi`7L2bqH^*?AS#;&j*t2j7 zNIxD9G?}WO*HVHdb^!-Vu7?PFhXaT5)&zpWnKwOJE(~%qeposFFRqT6`Fh5zf~{uk zLFb4<+7D-%ah0*(3W}rIE`GYex zZ157^;NPSQeu|+qzO5BtHPu34mFvvtDhm@&ABWYe?Hl1W>-F+hyl<4yp;p)b8mRuc^)q&9VHb*t3o@!$n3_D z(oR=Aam|ZcVk&IYyDgFnYca<7?{v`N{<&PNBvd8MiNHT~b49(YHm++4oR#XuSQ66F zR{A`#g+<(@Q9kA3_zLj7>!~+caQr5|9@f z`JcQ(eiTk<*B9$=4i18E9$;c(u4n@vE?V~V0D~?#K{zwg@jW(GT4-1wl+cA8f44*6 zR`PpF?hMwN7mR;F==Hc9?i7~;U+wQkcU;}%|4#7vYV1+QfuF*^$rB$#iXM+Soh1L$ zs;q91&RWsbgbN#UiQRU>pl(iiz0O{3lgr&~RE{e?Xr~${RWRbB941>C2PUBhpia6t zJHy&x{A7BSeFWpXgOc5TTkY%9>2~KzrqFHa4dS9pU}q+6uPtb<;>rd6D)G;6J6XV_>}#rXo8I5>2GH6t4Me)RR)PXQq`Z@zOP z_KYdx7oL*9H%G`GiRB4y1TpOS-Q^* z`<7B0R&j`jI71DkY|o6V*u`+(IjeO%4p^S6pl$nAfgB)kX>UgV z>E;sMG;#LdqR$Ww;|hIzgKCj?K$$~C;aau9(h&{u#F$%y>?uV!an0<$2X$~C$$cYV z6&gjKmP~>E&#H+Bg&%@ey$^$6Mh%o+`D;OYgo5#<+PHG2vjGQtdy1FowWbz*)gI^{ zf7uGU6si9d(P;L&AS!RWZA3&_RMieFtdH+|u>(EL6YdU}bqcsW^jsCL^YDcv;x0|`Tw2b>h2Z{^0y7J@Pv_a>G1 z417M|wvaM0E6FQeU=rLrH~^5rQikV3hh2G#wV zoOi+YHkwmSBd^`M{(C<;d41rMbERAjC-VeLzzfTjLsQbZ8eDThn?+i7&QC%v%p#f< zN9~2a=ag!GF%jTXrNY4|!c#~Y2}#&hnvB;D(ja+WVM`*nb%r!7fj{9nSYRWdZn7zu zotAuFOdBYDv8|y32MpXxEQ#;YJga&03_uEPUjDBzMAEF=BquK-``)K)kqCz0^)9H= zPMA4*NqjIXIKHY)ErQ6@-X6$NqeAl2NuV&86X zc%=e#T-deX7}$SUnyK1MP)Q%OWWX)f;s8l&U^zM~h zJ~#Oi`rsQY63c2}vGHRz&I_$@@W!gezrmJRl*@#F9Vs9yDxv=ggz;9r(1}m!GL=#5 znZA=`eZ$>C56@6QfcS3@`<_L6d+BqJ>rPO#ks00(QKlKq(XYJ<#4E<`YH8lJpU&3U z<#e%h$^Br*lkxlGTE0|Tx6pZWbp~o;q-r7Kl1&DYq31`&CWV67_DOEM>NixN92ayM z&IHCD^lNWQtCLPfDMOitB$kC?eYZ1T92~E~F=NOFlM#98zX_o;4-MiDi6?D9^X=j3 zS<%+UBlpqQ*Y|uW_&!iGc0ui7jTKj07*=@>kpU%WAVUe|Uy zYd03I$i8ad;cJG;CuDBl)Qp^cybh(@X7DP#oG#?DpzvR=ETb%!kne*K7}zdjnR&+6`HKHS7v=SI`b zF%Q8-C#Sj>N1l`FVMrcW=ZHOw2!{D&a;~*{G#L_qVz!LoA%Bl3%wfy^mW-bFzG28{ zBpEWVWtKtG-qG^)?z_pb2MbPQ7<|*!)F;jl_@(wve6k~7v@NE<-u=Z|+by|Q({PP9 zX*fOH=74U)#4hji#)=FU{^#SmhkN)iM_dTw98VG;%22ut6f`yhTMFd9kgf0E>WDW7grB?zz|5Scl z33<)l^8`8`ysO0>cP3aBZazD$sk&SpneAzogtu9myJ)7xFbMkqr4n}I(G(42NsDJ7 z`$86j7%k9^!C~TALtS&M$E0RjVMBV`YMOS^ZoTR3Yi9%UGTfuggV+MLw;_;0%8XW+ z3gV}Cl56SA@317zpYHRE@Wb-EWc?ZBDfIr|DeQ3;6L*@TMxMmQS(9;Yp{lk@rqE4v zhKl;Hl>crBz{vrKMhZg}utH6_g9>t#b!&AeT4vb9qM{3G0g$;A9HUo0Gq2Ubu?|{& z)__jqfb*=16G~ADq)UMXQm1WtCq(3T{RI60kOF}4jiXsRr{}iGu=GtS2R6ZM1qB6A zumHkB@FR3!4P5=gum`mCSYF=y_H?~LoQl zSeK|2$PydPehsQSC_cYi{izRHueiB+c;sF;RaFH~{1o_34K9_ZPvvQPz~^fAVn`wS z#|zcg^+tJaFeT67w;ht_nDzcwLbLm|y);E9`S{s`m4qVG-RXMijpz{m{g~~U2!o#R z*XS&(%n`qXsT;AnaA?-)pKI%MzhtWm)MIS_>YTmwAu1o_;x84U=qAIyw!ak&v$4tS zaHm=G4qSg5bMbo%QFt7P5V#zCnLbGO>mD5zN1vsw0zFnIzMUH50h>C>k9>ybW}GRm zCEAgH{b{^1gL8V-x!`95;i z-MoJZxlq|JEhanfG3ZV|_b>`d*Tf)0g9B5ss;cUekp+VcedHf+w`bTd=rXZCaz@}~ zTJb$hGMa`noh&y0iI$h~+t}aLASocW&Mc+g`DpdcvMj#vXQ<|Ts3fwvP&Zk+OA)ME zi6784&FFWJkj^tye6dOQQ*WoVcG^pGvPOqfeN8HDjpE*q9PCX&588*`1r^H4TQ#Zzu7;9PrhoqZC4;lIdCr@zXT)*+GqsvI0~VOA!{NR=o=Cm zTfC219!Pj0fKL$&^PkzG>h>-8;sx0J3qZ_Z5ka4u=YT~Z#~X90G@~6P5!9T1mTeA{w&toc7m|Qf9jg(78>7*!@3!hkc*d&eU!)65~suDC?J5mfs&B zn?Cj3&5=5O5b4d(!B>8NlP2q><&R3vM0+@DeBVE_RjR||FSu4hU@fO&!B_3#K9_G4 zW0u9MB0_Rms}+j=I-b%GeP?4Q?Hn#R86Wb&>mMFYA6HWNu%vnQKrZUVuhokuoc;Vb zbsu2pNk~#x^Jlx!Sjk)+gt+S#f>#UB7ZTUm8iLk?+<8ZHE33jJ>{L-ZEA_J3?`eW% zNsH&Z_JM1OdALw*LiC20_-A+(gN+gmoHAqrI;@xC{{~1uE0&>gocYPpFz)|FXm^jlT zSWlPPvdR65I0Q0p*ELwWF_c+$;;Kq z?q`jhm2t7@ar5ClWs|H|SQN$Wz&v+#cHo2tZ-%r1_?XxyTix(HA-oISKdYgGaI3(E zqqHA8p}qr!py2nJ|2SISoE&IPk-hNlBv%FJH4>o*Gob_kst%fu@7-Px-_byqg;3+D zOKi6T9!_sjY0Yi-4^Kd^9KPbfkQkAVJs8|o=55d`mAyO$1K!FRba!?HYAob;6ln|= z4#-u_e0LW44wQWPnjIY-aL{u(izMan2}O&Fh_tu(o;kmL%Ru=7X(lee-6?nW_-8N# zz>Gffj=Y1bx0%g#;B{_%rwXXpWS!A?S znCqt*>|wQda`ct&%`w`6Nrti-@AO(?c=6V$w7%w_iomE&LbsZ|@dj=Wy(?&gMOd-E zKKif~@vv?d>!(k|@R)Z>nFeU0Y~B!a}jhlk1lxgJ6rG4c1+l!FpE2 zys7u*MUs6X?bB74Prdv@?(e4Jh#v2>&ERclu=_>4%76hFI zf@s0D7VQ`f(gaK3%>n`;6vh1@g&vo0ZEdmtJwX5mV{KI9`w*%jxP2_{`3Fn?W>n!J zwEXWMNp+$)U<1JMyS;6N@z}cTn^)cq4yMBB@nnz}K9Jh}K0K*y83$-22|N=BbY}%o z(OPfzomQiT7vkCmk7L{GW2L7qFfF@?uGITU4&_uVZZ4+ zsR(KN;`t;*h$ae#9NH^1_G`*4>~^=aYE<)`;M5KVJEiRYr9`=N*@S=9!%YOc3_zy`yY#n zjftADy~e@WW8K;6U4h}~n>vtA1uBG1T8>^RXoeVuU4gy-%Q$GCfOufbIBIPHQyOvM z7Xh+-d~!LC?;|YeDE!a^dF)mue8}`O(MlpM*bPmW@L;RD9IgeU)+V6ApRj#pU%5!!6JB_4E7Cq!7mJ#`H4aB_F`<`(lds8ZC7~t3kU`NXNs^qP?-__h=@&6)3?&fJWH)EvWtea)bQ6 zB=W}zZs=1ld;gi`(i5mBWv*ga18KlB^4-pk?lG^D!uNetB`fQpLbLZ+u!>$6lL8dL z>+{^~&5R$D>+~^o(IiLbKdMl%ZVn;cprh{)NjnFt!esN1YQKrBB z{s-i%eL^^~*p*oAUJiRJiVMM<{of2q-m!1E{tz9u>xGrFMMQ5p@ukwK3gbS+&7kim zCJ}r0R=G}-%~kC$L&#eRww_Ps31#1N=gQdWVXu{*k687~0IeBlTEX85^>Gb7cx2EN zvH6pRS*-R{X+FIhw7^{_1IeZzA!i`w@j1OHTzKl8Q8}y8Vzp}Z;_B9x;v{(jd3A>1 zrSmao+|4lGxJtbye!sG@&l`vNy^jN{STf}U;g*Lt>Kiz*atpbirkn*}Z(2>c+?Ndk z&2IycY00ikT<;FfmF%f7!zMugQo(?COrlM6|n76z*yW-75EX9iUR3_(cHmEXbT+J$63QbWQ&G)$&FT$I#YZ$(0Yfacr6YxJXU|; zgP|)TMKo322*R*U&vm>wyD8Yv_58 zG5KIcKl8fGMCG_05wQvN{2%ZTlDQ@_+tgA~4{Cmo&OxipP*vEV9?(WxUXLXF5RS@X^yzt|Os{vTUSE)?e{>88f zl!eGJ$w(!_z}kb_&7V$}I$3mA3!%^134gU;y>$6=Bx>SpDy*bOe2>MoK%I{3=TvVE zH>zn*n5G>c;;fT>(~|(L?Pm5--LJ6NtUEWo0P)(@O^N@GSXu6bZA0t9o$KP+of_Cd z{E9t9iyCI-^bueR$4|~b;8ebSi35ForIn^~E{*WcG=ECj1sqbl9?s6I7#56?UCaRD|K~_Mj6*ru$ zV-S-~{@5Ttj`MYq7RSe!9-wCq3k&-=xS>8#l$5pBspPvb+gi>>^Unvm`Z#RPNrqi8 z&dl)v1K@@ao?fFtr&dtt;$`XLGtkC7c|yu7E1#UMmR3+SwF}Br=ULmG|Mg}0T_eKY zR*q5%jOjQd>@zg*WMYf3u#I_yg7g#wp~!Saig~gJJq>3mxeO+@zS)R!G2LcsKirDBr(l% z{`Yslps?NI(M}Bp2@TBy1DUgZ-}7V1J694&F3_^-ePqfec%-d=?J$27_Vp~)?6D=3 zu@a@ypw<0EKS;cl9enEy&&QDsc=x7Kwo&gh?JGk0SIUL17P^6SMRa&+Y=7a}#39YZ z^d&VT4?oeVy_9W5y$}EUDo~yDFe$jbbZKQB&E*rLQGRE8n02;ubo8oyLXI}BIyOE6 z%CvkL#fr-IMq)cG1=rxz>Z7t{{&gphe>#5Ayxl>>_0Q3JD_`VkhSA$AEVK0-I*<9c zlo?Y~FAQDubuMH?9O2O*Vz0StHf2qnPHKb8o8_y!eY@1`Wi-o0 zIsnStw4kC%BOJ@QpJ1(6811w$#{UET4SbqKy(mZ9F5)-SIE%U4(@e&P0|e0d(=mbW z?IUIo%M%C^Ef|MYl3602{d)9DH_<4&DL}M@wrzycpCx_cXQ#~pNS5|7Hz4Q3 zK!^iCn)@gkVq(2Mbh^qgx!glfe6JbPcPI+zGwa+o5fpVgZ5$&Kx}R^~wT4A(b{;)q z%jPv2s!+nUJ|BUN{gy6(lwnC5I7S4|MA6@tYOG-|p{S#;2!L?7E7Q1U^re=zx@Z^h zNcTh`yX>rfYXK^i{9n+#z0h53+3vz;?&?wNrF~&ZMydr6Lk*fR;8x%)cnSXOC8@Y= z{RANjKoXUgyS_hHH@fX6TX^;JQMr^|G^ockG&G8OsSq9!r8wW7Thcd55hZ@GXtrV0 z;2m_Fi}P4_uUku0xTUy^Tlp%1vL@BRR%S*jgb()~UnZKc$0+$?`nGQn_MBM^9`(0B zUY>4lOeV<>S^-1>dXZU(g=-bp-WK=YjdZ6Kq&Z`%q+((qxP;yK z#Y`V$8K1!zb@$2>cV`5&*NUzpYI_WPVlS%a98kGc)gDs~zY_%(p8Uyxigg+~`2F^=`YFUK0kS86w&?Nq_N)Nf79T-7LF58cY{u zSn<$Ajv5e3yxgc#ugY=6>#M5FZSf#WY;`4T?SN1wA!)9fD-Rd8d{od7e~>q<#I)GL zp4^9pWvK6-H1^t_FM#Ns%--2D?ME(MSY7H1iSQ2xS0fz1O?W7k<0;qqzh@5&p&aS1 z9_;gEVjAl1MG;hy0L2uLuojUuS>4uVyomvR;4+meD1*$N1dXLNyUbUYx1y zW#mGM^K6FM_Rp0G&~gL|@vwBP%<3@&sqmxZWlZb6%lCYHgY45ytq@e9^xPQ4NRsO& zU=i))&Awb_9=OO8IptbxOVCpISH;}Cy=@c|M^emeezw=Mz@!St_;Mq>ry`!KD6y|LB^{G|JE#5=0luI>3KyV4 zaC#iewTth9HFw%v4D0#^cjWsFrfdcMwjZ@&Pq}xuIsrNg>C|FH6 z;Hh4Sfk@^T)NgG|Z1&}B!ZJDsj%ip~Srf$2CkGuM0OKrH6f+7xZi)+ATKSq!&Wwe& z^^4!QMmd)lQ&`+1>z7{c;sNeCjBW_GYgt{d&~?>OC|v}A0>$O65kS4R>>LhI0W*mQ zxG!1Q{c37$a({!SIKuP7UZ@M4dUU@zhr<0FiKY&mK)ARS3X-bho(uuk1VH`4{?Gb$ zYk>rk(+Rf*t}r^2l^^{KszLUQn0oJDM0`uk$EOhwMh<-7Ch^W(-5xJQUPp+Uad9@? zKi;B}1MaG3sA!lejDCk5VPJz3`n~&(9cMC3&%r9uK!L%dl{FISn$R26m(zM|bmQoJ zY;2NJdO`Q{Y2nM>@r+aG)hLi#YtR@w4I5ki;SEX*b&ei3A;tswTzE{Z;lKvzKo2TO z=5huYESzavCmVsILq!j8835dQTKvr;W1e z)BQ^lIIFrSSmh%Fydg)b7#IAQNM#F77aH8F(v#WB5$-fhx@ff=lz)NcSx;k2=)M2|k*&=hUN9YEmu)SQLdoVB9iMHdOEg>$-xIh~Z`*yDc zWMa&G8OfVvT}|cv0{SuV1A0NAe2!WR9IkZZ0?8Msx)K2w1c2ouVw#4(TNMe{70?ZG zCP}A#wOoQ)lB2FZM1_a)gMIbdz+C7okW;>;qKr~q={+-u9UTdYlz0Kyrx&y?p`2XV zNjy?%K6)slx7PKaw=I|6H03&TYn}}$4@@+eSV34O7Y2t1=fW0{y?3eClf5*Uc)u*& zFbuI2brz?KrcXXFyzD*gjwx|}@&3BI5P`+Wknhiic9SHy5`h@<8Ke^jG3S1M20JyL z`BEvHKxG3|zRWr__hQy>u$jDXL)o1a2|6~jrV<6I4IY+b&@vI9OYkkxvrX!C;o5uQZv&*faURNX#~llE1{1)DYp6dj&@@&28qcUX5M|x54-4+*1rZF#PLiDX#|Y+pap} zC(eskTLO3Qp=R2-Bi9H271LZ$OmB~K*lx?^APv6{xNnLlh%i2BeM@og+Ndar6)?Owk* zN8Y64!y9&V({F<5gYTZ?RrgqK&Cn;ITcTNT_U7iVAcYEkXHAQOm52deTbR%qX;S#% z!jV5bH+rh!Sv&{HcH^j8H#Bwl3jITNsO@z7l35f3X6s?YFk?TCU*$Pk@deITb&43) z!yp3hGNdI_qpxI$tUyZW4dElWWd%kWY-xwoAb&XfA@P?A*admKVVO?L;y$!;NcER>sF+|EXhm6_N+y zep~cy)y{4j1h0ohzsi|3suW2T*4gbNWDs45@Mu}^{eYt6TT_!=ql_6BSZ0uU76a?N*9f!U z>U1EBYF!5p5V0q@UIU?XBI&@f0W4~p!+J<`*j2z*@Ys9Xw##hf7>{3!0@ef2nA!iy9{eOx6ankOo_Oz9v3lC_JZErpnSl zw3lJ_c)&6~dO=&7{eGjm4)@FLX~m6LX;OZoB(ymCH}SNn(nI7sKKt44&!U#%hI455 z;`TQlA1@4Tx~B3=c>GMN70(JsQPG1!T=X>>9-?Pd(@@ze!StiT2A+^?U*CLrWPwW3LE5f$2Axls&`6-mK84 z&&5pBrgXzsy(cL%53Zb7^j{d%xuekZ)#=OnRhoNbbEa)?W*i* z(samXPpF!Q_Pj^z!l-LFB`jeKS<42impxa*Cqb^!P{J?RDdHM}9rC<--?-mN4g(G(7+uK$&<%iJ z-uDxRp)l(0qvAb2Ve=sMS{o}RVx2)OO!=egbK54p5#qU+xrJ3#9`s7gT|W z0rEUWnfPrtjxn6fRomL+Y=il&J#*8>EGj#`8l)HwgbBzdyxpG_1WxOT;p4ahjQTcd5ssO3f%qY_4&$bW8-wWpe?Aw!+gJorT@sMV42TJ2 zED|sqFjtay`B5%?SB3!2*BO(D?Mb76piOm#pEPzXH5F-c5?nt0#(|ar2Z}}WKQR&x_P0gtsg4sDpvmF%}PT6gTZq8;&rUo-3?L+ za=5qs5-6dG_f+IXo`~w9USB9jy!oKnJ5CX>ME62Tn9>l!!V=bu=0lIActDagmQR9X zU4!D5_DahRzB57a;cKjXOOSSP=#VPz2R+)dT^YNOK8w))TN2>Z)BOskrNeuae^(i~ zZSj7>HgMYwuT=2stHiHid`sQsTKF(+be3_#@T1S_=NsZnha5@;=b?}BW(Du%7Vw_g&)2Ss0J$08FdOFQ zKTq&vILW_UFWk%i^3v)wDyt8VuT=%-GbB%I698zYLwZ zU+xge#rIn1e6%4i z{kJ;(pqaI`TO$`Xfy8jhtK)914HRad%+1dulw+LoHMaKp4au(iY6-Gp{eQ*OZxz0k zB?WEDt2@KJoDHMtu;K-Ye(iurJre06f_FG&m?GYR1}TBXV{8$4f7Ak(ZPGd;pPd(k z+(384(4E)+N9@+DwZ3X3zqw117`}6IOg-4Za3e)4w24qH3 zq8f+{vTKkcaoz{9`2-*C-OJqU`|y;woptsWCn#X+l?I;>^#WM(} z8hEE+-9NNpeywViR@pq=8rndPZXTbWCH-|RleY1`aIAJV@B~!aw zc^PUAW$G`KA9|5F6WNam1KoB;2JHnWJUN*&7>~P(c=bpJMVnYemHAj6BQ;z6IT6Sv z2m8|0*zJ9sbd^{_+Z!zRB=$rf|od5U?luOXNk1)?ju~X-Juk4pkmDFqE0INNq2D~%- zeLDAa6PN%_)af@TO*GZ9{+9iCFu6g)c=(B|-OZODrk@nr#Soh<0+by!4?ejEqHIz{%-M|B00rl?F{96^QVy;;J84+#XPS&X=DIlCy6J4Mg4q zvI|btPNdrO*mKqyd9Rax%E*wmTZsqM z#VwV~YUNYJ-)=$75fb8UTD;)~DA#+S2Ri`bT3N{T&sD2V9Jr=!aE`ApT=TwcGhKqy z1$G}uc>k3Z8UXMD*nI+EHGr2<+_>6^PdnDdZ;G-cVsm`J0bhyz3^5i894yEH-rJk2 z5xo}$-!u7ttAnf0K#kfhL1TV#u_xWB^*wSM53-0O_cH-WJue>6X+AoGE|8bP*}NzC zn#k9Mtq2T@ab;$3V<3YBTd=v>iybV9gTNNO2QINFO@UDq`qYnAnn(?}Lkqt;&l5<6+YTbE zQT5n9_Y#B>?m#tU1>)0ES>|pPN%K!}%EN>u07q@cy zdgfKSjCii>+;bGkCTmI^Vat_Wn4)@*RTf=}G;``Q@TdS&6EFq>9|KZ42Mlvyq+v(} zPctUU{V5|YEe_yc9EL{Zks%VBuTg=$IR-dYqBC~ftH|8N zXmxQZ*~0%cTQoj@Fr5(RSXeuXW&>cJ-uyMt(b&+cWrzenThBugV88opAEtaog)j>i z6z-T3>!pnCQJf~QZypBzib5S&lXY%B44!;8!dgtdqYzQZfI=j}*GbQ)u{~t?N85LF6wuhk`=@RJ& z5CQ3u6a)mMM7q1A1&KolCAx$}=1h|hm#LSF?P0YJwYZ1hi@Rsr51)^I(_U%@-{O!JI23I3lsyH*4OQ#}E)xBK=GNNJj}4Y_WNex8KZmrh%jGU-UE>L3(AC87j?QbDEAH zu$^#@{bj-AP+7j{C&G!ENQvIM(~bl7Y1FKQj2@>1OLhw{h7~=uC&yr!9xK58H!XFO zj9lh_bbMWvhAVa>yFSocTo5J2T8~ zQ^C|1`0w7AUXa1SnD=@v#Qkt}JT*>yLfux28McwWQDbi{-I(ZN#3QyzT4lkaV8KI# zibrBtrfum@S=m8EKQ6N-K9Q5XA#5+APb#OwIp6nlh2-E#xEsO_Bk6BLjd1z?AA)~m zU?5T@AuFG!;m0&_{#U5dC>aJ@YeuhufUo}8BHq!F*<t2<-WS?Xv@&OAnQndpB-Uv%G%1{tZQ9NH#?Xs|E z97G|i=&XL}2QfL0%s=tJ)1kaXIx$N1%5a$ab2*)~(b(<`fy`@djgAfidP)#i2plM_ zK$gh(m%i9!Kost$rvSI7NCi@UAks%Zm*^E}oZ*834&w z5gk{!K#Ha;>IUz}O(7twughsube+k^PxF(+hJmnVNGofS_HX*MX-S+&?G4XM_n|yn?`aF4<+li(*1)vSS0Ij?#=D7$&Wc$W=RW z-O?>n527hz>#E0{a3i|Gk>1E9_I{sBpi*(eZwACt+u=8NjU0UVS zj%o2(oo?zKMbr+)>{5jrFgyqFaEvuh2vngCl&!2fT*OtavxDm2fpE4n##LFW={>GZ z2GhhmY;5#1t&%ONTomVXHBvOO(mix(Nonr7NykEf&MTgO0%xVIh*`1kx>XN8 z!y1-8_!u=uofi|6c#_^!KQ&}gr}yEhqi9C>xIWHUPbeBIp70tJ7r1HPy7g@@=S1oR1nkRFP=Xm!&E04 zdfR3HVq}b8MQ%6Y;#L8i1J zW-+tiX)w%g0RLm-o8!#NBD9MY=I^Rte3eA6b*xm~7{OmjEI#?2d<0nrvQn}0j?}+! zuhZ*0I^qJvx3jl5c3B;1JRKb!Jis?|?AzIhX8?V%DfQR-oit!UINSb^p9)>|JOF~I zZ~c)pG|fYHbsWtanS2qOtZ_r3Jt$8yfaw+}^TTsH!J5V%oeJnv5`{QLB%)U7Blxfb zkd!n+PT8wY(AL$J4lTY8sZwDK4Y%$!$QlAdAf&o?{qLX4Qvl1F)(*bYT|y z870!VbheERW(%UEM89(TsLzv&{k{*w>!6oRFfac_%eqRi*`qY=boO*Wq?rPn7K%qMFXu75pgJ1nr@OaPt66>del*- z`Jbhh;(qg@lO7tp4a8P*1qQiz7#iL*O8>a>J>~L?xtv*H7||m>`$xrltl8%35W^~8 zw-SQ}p2TJPetZv4oa`R4$0-=~krze)hE)Dz-(SgORno!{PluXmgi^lDa!u03_a%rY zmT2&SG1}%xL3^lOd)Bl@CpCCJ)#2LJRy1vToG5?@jwj*e&{~Lg5Ve)PsQ2cVmeLU4 zurlgA#%%;uJHN_fV@t+Y=i(4yB|Moe{N(!-6Cc#(VXee_3!)n(GL$Awj`1!29PV37 zwlM2@E=9g5I~HtlZ25fB=Ix7zRX)sMIKSu|UDZK5fEGO)a^6(vc+VDAzJAy0nsqg8 zZQQbYvrm{6Sp`5}+H}^l^{~YxZz89`gIS`N_^o zV*cQ(gW%MmXW!>{*-`Az;dEScchwYTEzVP_PpUUQe!ZLpT@6@)jjO}$MiqI$;=hzw zHi-Wo`<-`vAR`J_Ff0hu>7X#A=|89itVzhnhcH27`Tz`LrqYi57q5N) zu!}u|N615YfyTeT8utOW8_-37$noci^LX+tEAWkb~1uz|eAwgG!+Z6em7DF&0Z-CbUaC1^^MqzV$?$xxv4S*2bXsvC zx|H83hm_SRcdMriZauBN_d003rkM*Tn=0GuwVqqBlql26Vrl6Hj97y`@IwKMwD6&5 z(Yf2u4?w7e^wd_1OG+joLN7m}hnLE2=yf5w3ACx+@lrB0GGeWP%o81Z9iMLNF{{GE zc{c)3iS0qosZ>Y`1ra}(3kMk+6ZpXjYY!wQEOx!`1E+Aoe9&QgZ)d-kQ&Fr7Y|iKh zj9GydyK{oEXG|G&V*b&5C7751o;u>~rRx1ho54J_5D3zR=`gJEW*q_^5pzBNGhlu9 zWhLS=*aEfXn}%L*HW!w@LJZsqqdkk`~872OgUJur+ z|Kc~D+0v>qV%xqP*IRO<9o%({4FVtjZNaL0kB8wRe+9X&hQzdkU`Rp1bKIGJcTtF* z{y&|DMJTBM?8foR6@)v2$x@4h%rsxWEHPjYARj;xiMy}7%U%PggTKVUz~lA8n|)29 zaFWV{1;*Rl^@95kG^fRjkU+uNnMVG7;Qm3rO0|MV#O{?aW$OX3j?73H+Os>Eo33nb zGOYQYtF->P*+)u1fBk}fZ5u675!|+9yshWMwUFrHd8(ew%F}*qE}HQTWD7E?1LeoR z6BQXG2|~D~G7-S}*9C40P=T_uvlFVCh{&|0A|KHmYQHC*>~nzWCt@ z#)N0d+Mcc3d>7k`|G`z40i@Cu?|XQB{90jlaC*ks?=@%!eoox)^~iNcH0 zaC{3sco=<11=^|ShLTLc0pGkyEbg~=8b3FKnOhKk7-_j zSWUTKGAXGXweG*%4JoACn!DbS)W$-;G3f0%YcvlYf-s({WIUliYnhP6THRc%97E68 zKKqe+3hK*b#K(ai`$7BN+W>@ZqZ2_98?0=jv7l5V0cKEEAk*64A2}4Ze{U;#XMe_z2W;;MEwx+kDzNrai5zO@UJHOn7h%JZ={<~VE`f)+x=>z!t}@XT@& z#&}#vs&Ts(ID?{4d?ywiLV?GZhEH=P-o{m8;rFbV zk2{}Vx`M(8F;E-JA09n!KgQMkjZ8)aAMQW92N(qiC9YuLMrR9`IRNe6)k0=)%K}m$ z=sD@*_P_T}Pk+9vf}Fsa-vl1%t&;+xUYZ^E3>-aZXLdq?e@-;z);ERssVy+2oLlB{#?mtA0#~f znC^v8YXQn&O}{kE3e(NkpK@dAt%DweU76g>b1@YwzG50lF-h4rqa;=}-#b9Gz`BYxvhKWdeN3w^cj#&Yj_EmguBz@F*Ty`SDI@nU*NVdB(5w}Xa z=NE0mj(EKraRsDVr$_eMZ@>l2hC8Cbfgh44r{3xEkR~=2%ydqV#RZ2q4sty)($jtL zO65KomtddZ_YkRKd-)BJrRl)l+o`fY7z)S@a1|FWm&p;}uL)YJoTU~CmoaZjWl{uQ z%lGLax52AF!>ZFga?bSPUIZ1YaRs!FqKWjc_G+H^L3z(F#U;|{#JR%|V$LhHs_ltn z@POPdn1rEmJ}zc^Ru8U>S7yW45M*Z3|At=Q^}oLXKrGg>@!@ZIB5c`e`k-qV5(~kV z62$otbf}`b&`s<`Od1`iU#87y-k7>uC*Vta0NTUF0ZE*9zP3p62BlgS?H;hKGV?(- zi^_Lzo2Eid-#<-@Tvk1e_1Nm~K4;)@r8VdC{C(pAq#DHjq!Jzg5y(tKkwPG33=T#$J@}43Do=~N(gEz%gu;sSa;_fxQ*>PVbc9v- z?mTo=1@r+p9sm?t3n4r+0`{A`10+Db4seoZ-L4=`fX;nHfQ}%Hk{}EKnOUi?J+q}d zO#P7wVLf4lr${G0(sl&ASpb=iE-ai`2P)t{ThQI7Z_)sk1P{N<@!FHt(|#JHT(skN z!(Y!s48EeM`IVY%v;k=oUfeP5HaypK4f1ag_JX!j*O=K=_+iTv$~N0j{^#nX?5(^~ zU*?sw=S%06_To}X%EmK!Hq}YHPG>Rbb^GOI_$djubeYQqm&#+1=*~ z4zU^-&Mn2JOgVVA>G<6mdlc&{Y$7=xVE}RqPJCkopX9o=)Xh zwExM$-@j_Ii2Xh>er{q6(=Rur2ojA77ET$t)zpw)oCoO|*pUdT67Auo;<8`ArB>d7 zi_1$q(Sa;@d&&lS_tlOCGPgexF#Fs<&mPSTiVJ{3{F@lK(KeGr(;ZJ|pt$kK0h-IVDMM)+Zx@X^pG&J)S%dzb z*3@KK9tFRAP{_F)e(`h?rVW}i1<&r!3=3_YVoOwk!l)Nu2n8#U zmzqKnA9Dmd{F%9Kz5=;sqf(Ax1xy#uf|}z6PrLZD>SV?z;+zrHUucwRr3Fz;W0{ft z58bp+z@rB`yg^mEJlFvlBh?A@zTZE{S=>*~rpK8STadLciujZz(Qnl9VbdXKW(0So z(T66aglMkhJ+*+Al4q21RvGFJ>-e{sw`~NS4zUSJayXi{LjnLsYLC%V88#loic852 z^L%oabA}d}my;j^@%Oum29@x64MLl5aa@eD6%uunL!CWPb8u&62;E+o2I490=#*LM za246`a|~7k>Gq!an}*;wYu7-&ko50*`1_;dW_@e3C+w<=&>xw;^E7H|v?0v{$!!XY zi$4Vb3z&95wv&1DiAdC*^N$uRKN5w{{C!R(fx5$jvqZZyXattfy^K5;_cLN(Y9{ap zEA6-I^CIL+4gOmi@<`?EZ$96R+of3Wrkd(dU!*Xuy#2nhRwmnf&fb1;A=%~5o7DY; z5NDOzP-L*a35#il|39pe+ID?#Ed-E-i}TqYD|fjV=I^1W^Smp8TlDG0zASsig4@$A zWQ6)(=!N|ABQY71S>ua-wMb=W!ln3GctMVvJZLb|5UmG2mND8 z0(A?i*aG1W@gCj3)$vO(Z>#EiZAT308s}^K$T%CNdM|eLkn;UbcSp2%cr0_ji8K3| zuvFgiA-!=*w`0-ZRQdemK6S^jZ6f2Fc;PrwInz?S8MMqTdX8XnL&`#3Tg*TT1{L#< zp}0_~Hv5+ZR?)+?n>rV~0<{~fG!stMT`XBb=Us(!^zLx%A9bk=Sg51q=1;%Ux-@s5 z?iEz_u4do_Wusu?PjO8YVsniToH>BxI=eoKA`0;9r;S^VeaOW+AA+go1rENZ#}jYF z+7LlM3+I;BOte(MoyoJh_uu;g`8ncHhENDq^O;78U_KF_ibjfNsIc<}8@dfQQlS#*G$2@LG}`|;LN$u!{VNZ-iIqSITOJ--ffYc1krlap%nM9 zlTVJY%yP&XqQ>OK6i~%>l88MsdM4{EJlTA3ME%xz1+FL<;#y~Sx$-Y#p#2xLe7Ham z_3t(BtjSC2b1J&URQe2gT)aW+@RTOiWk{oH@K~-L1n^%Uu*4!Wlq%-IejMU$u1B@N zxx%myw1FTVx6)@J{wEjAbi64b4kahb8BFhB-u>2WR#beQ;y~aEe5-dGn364g|bPrepkc0I(E6>o?(g@58B%~L&U?=v#6U;&Zxg0qy~ou8Sto zkp9L2t9LYMOIR&s2r5?#bKEs!ys`C1m(oXMIwh0Ib@^OKU7kL=Fi}pp*2r*}jM6MFRhxb`F20X(V zqUjYZ-!5>;hj_SRc5){=A1FO2;_DdvNq?xRWhDlnz)%DSq?yT#bdY z)e1Hri9gGvP=E>V2#k^Bv3TCcY_HgOM-bF0M~d>&xC@fg8egnVCb06~>BABA*tibh za=$)@4-Y-R58_DDEMdXN7M`sk@S$7ow98nC9 zipyo28~gZ8SiW`G(r66vJY`F%>7*5=uEpMErIOlQ`n&Qx(n?sa>eokB69zBSEheR> z{aaNwvx|_3fXZC^1^^t#tTdM<0sa8n?-n1{X5$8=w71jGvGeN%SPk3LhUt)FZ!9Jt zz7}6He1*!h^jmy>Fb2*Mj3})epDmw};R8fJxOr*NS2*93QY4CeVxoxtTt`kp5X7yN zODXO;HpBApq1^kB>+z58w&Fv+aM`ocVlRzCF2`6o(S@M}Z|>6@73l1tMV%2{-J`9m zC)&Bm0iu$3G-y~uAZnFm{9(Og9y^B9V2xo}N>k71{rh^2s;4PTxGH;DWy`xu6I?~& z{kBf}kZaS^#~(87fR9e9|6z5GMVkRmH!ZwNst)s9&HAaI>d&2+Z|?Q0uqU8k+$2TmMb7L zD4^N--EtXXh}eC0$liqydPXIX%EFVL2Y(h$n$ zZ(9lyJ(>Gj?^2anb;kdrneWLNuR$v-(;k6QJbcekj1`ajGWwJQq1h!PFSws`TqQEV z<2rKiAtvp>oe_l-4RzGD(kqfa5$`_29LS@G6~Hop4K(|8xtxD~YO&v*pi7}kLjjBv z7F_ox4e;L%xmVxArO7_=*4=l0k`mXtPFv462Bvpy-U&CL%?4y6ePs3l$hScnY}$+{ ztcg6?3d)nTQ$eWQ`Jzsy*u?q9jeP)62fF~N8sC2pV{C@DgyqSTLXrnroE2i9mfowI zW7Nzm9ht+4D^q#(8LfF#16t_(G@mFv2tGhTkV4Jpg;2yyFgt2 z1OMRV{60b5-a(Y@B^kY1oivhd@_nUq4a~$yf=){1@-Y?w?}+qG5AI6>5hn@4^b)$cfRr9q6Uu}0Ht6bYJ9ie!{7$C2UYg8^ z2sefO>x-`(a*4U|#I`1m!Yo;SWCw2C@Xm|7qYD3{{?!grA2+?@*zejWcVSNgQ zhA^eie}hcmI^23Il#MwqrVWmNuzXV_cHraPGWwSTV~MytLXgQA+WG5)$negzQHFxY z2Bo@0O3*dHs*}F){3yp}6U!h#vOnN4ofk-31)+DLOmNs@Yoo|XI@Vh(Er-8uM%?vU z4P|fu64DNM?IgU~K0b`+5E{&71L#%()i}_j?w&XC_$!OWecql}BxN4q1rY6XiZQ1K zd+{&Jjwqub^$_5bi~_)osHOy>4K|>JS4Le)?RPJcgw4Fu8oyNWB;^E!@B_TQgb>|N z$YPl7?Wf`eb#skx_UVG?btn*D9~QWGqFGB`l^mOb(ZJPNog5@t+L?vd^T(Svt2CG6 zuJfI>=4dLmQh$1BeHh;8hIQ*fPdGqv3ar2k zo@XVn67B3fZmAo!6DycVtr&~58@PCvpQs}sTW0U-+0u=w2V+7y(BQzeBL zgjHh0vWWleI>0lA6`M6K#cPJIGQZ@#cNF~TrfBiG-vetz5zQIAr85S-*P@^OIJ=G3 zl0N-h%65<9MyH&d@m3pdW$Q zM#Cl&QRd9H1Q`Wv?onTPL*}GN*}XD9S=EGSmpE?A7l;u~jKM@gm=$yCL@3rHH^QtQ zfrJ9v_FngTso0OqCk$+vqvXKZXqBPP^`)FU;FQC;!LP=VDq|0tZA={9tN#8emPGXF z>2XTeH)?Ct@4#v9I@d;t<*Dl>kv7IGYce9xC}F9KF+URpN ztM?)J)OTcNPf^0hHWsdIG>|>y*<8I7WwF!*C0mzEiG^_b<-EZ@iM-jcKKqP*BJFg^6!}E6wrutEF#6O3zXpa^#^i5^h&FgCN>vy zhJ`j9&FrN@6gSEGPZvi*hUzA^P>cuYVBRB~>; znOazoT*#M=jwjn|l%3urap7iiEY{XJC7nmP#q|x15|?QgHbzPtfzww3Enn^Y3+~KU zcZswS5%zP1_+0}r4T6CUEw*sQMG5tC#O!gMh~H`@lz|0rvAP-jbLs$(a}(zb~# zh<)z~1K;1!bR{;B+cM(G+QI~kxwegL%3|V2tz6`$>A9%y&*;V*oqFC6 z|NZfC=Vq$ObM{6Fo<=6=PN||*Cz|<`SQP}H?cKcL&@VE%KpE(@=Z}wD#GMS>pD?TG zcAMDk>QKaJh!*D$ajxR_@uX5cUUKw*iN>!3cBq1Cu4WdshOpyXEE#BP<=V}v!9mS2 z?vcg(!-VmEpQXjlTsDwx-}`pDK8o~Op*o(E_yfi``*_mWJ{4}2IXqM)Vx^8>4L8RO zldXRH>1PjTs|kpvef{eVjhNIU7WRMMlnSI!#N1ps>O2f)R#vxNdKg4jz50vQ>#Ia~ z!27p9KtU`PxR*fyB7o+=rP5rtNY{aeiH0ROS+zs&Sw#@YnzGKUh*lY^Uf97U^z!x! zWLrI~XbpPpf1cJ|dg_R{Hkjx*`5(BT8fuB4Y?zvKs&bW{y6lr@#1zS@h?Car+3PvxNz1}8 zuK(^XorPmNqlsZbobBUt@+5<5GSb=g1hkl7d1G)wAhFpAUyLLrwnwgLbJ-?xor zQaQtS#yITs@XfakwM-wZ+4iQ(wZnG?sZ#V0`Q!I<0%V9@s@W%7zn9WYkj@$Wh*PfO zLN$8>@77ILl)}nx?bt^EeIBUo9p)SLX?B|337C5ufLfqTKi(N0OI0owH)O%&)jYfq zwt2JA^y^f@Eo$KmVj13YP!UA5WZ>5ZlZ_Vvx$3^irwRob?9#y~P4eE24>!&jjN%w1 zY>m#e=Lcd08;K?zlT^Mx;w|Kw*Ih^S5$o4`D@F$iR%NhM|WIiQcpJgQz0e?YDR#349o=?D>UzGX`IA#1-W zqqg2Z?CI(XR8UP8M4!8VS-fm9uR_k?;?j^}^OijB$u{d?j287llXF@M&W0c^B@D0e0q1$F1SU zE%XQmPI+X?3vyFKa+)hmZqEeGn@fT85-12Yf-s&KE1KVPdk{ekE58`D@Nf)6C2zId zTNssW;G7G>&>|>sgYDcwvKXYhzrT=enYPV1=1tjTLlWG}eGS8%MWyU&_LVXL*&}c@ zx=#r2!7?r=9q}{Ss`4qUOT?C9w=kuu-a-wn&1x4`x`P$M;m8?g=Dk-8`}(EI6LfsA zceTfaI2*<2W~df{_+g;nXA6e|fFH=0-=-*z!B9D)a@pSHK)XJiY%BfmV% zOk{ugNo0XOF2!hXFE5+S6o>k**7K`P%K2FB26HJ>(@d3d)Q0pexm+Pi2cuV+n1LBO zLWwt?7$b+j#xc&7A4%#if_xj(a9h4%0UL=drW4s1b)vy(xdDYK&tdPXqhv*S(FqkF zFNq@0oHrHo5U_2L1w5Bu#t2V;Uit{Ms0$$07X(vAttusD)k(kq`cd6pSv-UBHMmQP z7q7KGy(1H0Dv{-2p&c+bUg)r-MH)iOG!(%Wp6y#yTW;|FkOlk0q60=jygT=<#}_RQ zK<4fE#1&Y3=8tNS+J7Le2=O}=drcrJ(qy;1_L34h50F8z1$-2v79S{SL< zlMnzs1xS{siU&ROAq_RfBf(#lLNe8q_2R*4TLTZEkL!O9*X1kbWdR2R+&6%9WR9Sd zez>gUwwb>jblexjy{xzmT+85G1m|>ah=txcSof!4!2y>b4ahePGZ+P+_ix)Ex_GY-xX^pA<$VN$i6+<#8luvmt12 zKoN0=XFFK&Q=2}f`UcKn!0CYO4P=IV(t+T`I*1gh(lOzobf`4Yvqw_y0G0+(Z+%F7 z0t^Fdo#2;)zz0-~qTb>p^atzVy>jD@C}3VhtpM@O?yK7#e?G0>VSqObY>fFMJFZQn zi^}-+k7`l)2n+~M{3uK*>AB+_?xamXG^DL!5a*CuNqlKGN33Cu|sxyg9d&a)vUKbZMWxwlEf-u%JxbLW`6~jdHC_ z<}M(y1$bb?46jCfBU_3tlm3U71ljQ(b`Elv_(CKIPx13^#aVtL3 zCf!%z2Idm_^v~U9?Lnvjlc|^Cd$&{X?O009yf{DoEvli3I)u!Obz8fX@OQ+kyNl^BYhr+CHGO%!-yA z1Y?*#EG$eL8`wuOKXQDL5ED)og1wEeSx)p4Ub{S2J?IlIKA~17SZQEjJE}>rCMKqD zktGDv;z+14MJ6j9{}Tn?6`ukC`7bsrHwUNiz{?g1E~C4q-(uu@M6_<3mRlISf_JoO zWtAzmaAN(fr9H@9?V&z5Q1K+cEP3g|=xj&)hU(P6gAkTG!m@yHHSq02}o zJaNf!u{E(D*@ppN2>}>ZDCIr&bijr4GS{dgX*##gA)J#t;s5|QAoX^~yD~#9o_AFi zJ6$v*%H`LT{a-&jzrA z+H5XrqA4Q-I00yMsn%Xs?|5Q_3Z_|n_ddj~XLkuVA3R;W3_uLpLrM+Im+{am_5#Ydt*4(de(RVe{&?M^!ut?S-;(U;^ChMo%67}Pg!q~ z@d6XJNM7F8&HxW{;PCBMi_&Lfpl5kC^LAg(>9<%*0CoT=7kC3f%G)>O5j+Sy{2(n| z31;^s9|CeS^(makWh<4cBaZSm4#-VVY$>XR`3Vu4mmhH z#7=t_E#=&Ml=M^Pjp3_wc`sVD6fk%c$61P!~WBpCA2M z;Qpt9>OByW4!nQ>NdlO}7Dy#Y9aO7%0abSQ%OQ1nz>bA9r1TXKuKxxZ0@#4HcL5Bv z183l#D=(4rzA!;IJ==ZdkA-5cxTF$FQs%S-p)UO(V+t;wSBmH>p3T0IAI?)#ioywD{0eW!Rw%Y_gN8pYMlqOD z%7ie0wvUpR+!-7=UPeQ2WlXEyvvh8+eAvQ^`(T^geQA4(&ju?;y)wE!pu8hQf8{%1 z`)J@A@YNuXhkOVgQP6Z8u|sKF&%;@Xv-x(nxn7L5#I>cd9%WqnlvHlhA^qV*Oh^m> zc>_r5T0KcJgmvE!xF=deAXCcbO=_{0jE$p#A#DTaQ%;Q`4k;8hbnOu|7Zy26o5rY5 zJf-m{4naG-p=U~CPK7xesoVt{w+`LJx*-GhtcjO1mytdyu@*qDrNgCCRlVhO%+ z8>uG379VUGi!(E9ZOUs*`EYc{b?Yv;GmIkiq{hKKs&rp`uAC0))T7%LR@#23#6I&; zvB^2!UazPH$6Mr?2a584ZrDHW@8l4F-SEj7{d(=d8jx99=SZQDxHhN7M{jl*>Nqv* zF>l0sB-Ntx@v;Jx@yGcdxQ%E3mcfH1cR=9Auei5IFqJSJt-`+@Uw%H@*;>m z1_|-7*R7|ajabgXpxq91V+qReUjKYj|EOV_pX>uj+6E;ymJzS>5Ul62i4l57CG;_z zL>`D)NphVs*oT%HUmD)$pQAUZLY20|bFDh-^0fdMZ-tbvi@7j7Z0`#<+de53b&s^Ciidwn>+Ik|-v$`xlk%_d4$_yhk@kk z0DB3>q?r880HGsioPCk0>HEfpkyY*xhN9 z&yw$2ey06beW-YZ66^JS#0Y^(W_l~S7RXQIf zHV5mVQquk|r-88ooM!_@e?D{R2hNQy4?}Q`@VmZW7f5l%_#;h(<;;BhFar{N-YKu0 zpc~sdI9wNYS?fOkd6s3S=fb5*r_*EZh_0SBW#SrKhlAqEam8QIq~*^N61W%ys+hKY zcqWfMTL3pl0VKCsb=yuQYN#Vy1ddo0@G72KJ)fK~byQMT9`@C1;w0D{T?g z|Hlq^)*zV)v42Te4@BZM{yq%&+r^`0-xPqacMuYfhxd2)%TpE=O`wDaEpX2nm^5=d zIb!f|r2`h7X{W;7;+Pi-ex;E+DF>3Eu@?XlGCR2+8WgEqRKM&vWd%}EX&*euW5cOk zE-XF<#xW=x@UPKpPD@??Ft^Pr*QHfn1BEWQig%92PFx|K-C>7l)dBqG6nv zz-a%~Z#qJN2h)82Ljc7Qq@Kfe0g{Hao&e9eGAoI=@0D6PS;{Yv)0OddF+~ee90uX& z(aaMiaK|Lb6>B^#^hGNVI_A?sU74;B!6E&k4zjH7c}YxvQ55ot8ggKMsEIpiqdn;` zr&dCB+u63}ZLZl~63S$eiPxrQxd&t#=NR^t@%OegMtj?X~ zc`YhQ)wEiRmkZx+lF!^fyM|n%5qiny`W(;dX?VB<@x1!CPD3Tc@nqTlOQ;Ku7396p zvuE!vBuFDp0VNXT%3ttdDvJa#_E9wYW5xSI(pL`dP12dsn~2mHORChdLIYzfORpE- zEU*XA4G0Ulm@Na3M6*FulIb?n1g`0iz418nN6R<&ZqqG7%Xzm~_MvW`yZgxb;qJ-5 zAms-l7;&dP@&z|Uo%^2ZxI#82`1MU*iyz^YzpPo#T|p!byXp;w+YD-@>6G<;`F)D+ zw>2Y7fjm2u7B++LVq;8G?qX9$~(7fR5a|YcSp#A^|Nu|Oob)H&fHTc~>$Z{h= z9d!XS3Cbh{MzYthU*!L1p^V*~paGIe;`YyhZ2%M$YFTg#F5{FsZn4=`EwV4G^m__p z;pE6X}vtXGP5^tUTw>Oux~i=coVSQ?$~k3H7QrofNvQtb$)Y= zQ8F4Z5!o7PJ(1{eYIKUgQ`-|XWhSV@FPz~THUJIEszt8cj=$nkU^_Op!Kxwt+p|Y+QwweC^+6p7dF)xHiq%Xc<*ASPlWoM663JQ0i6A>Cnqc~G;D#xA3!SJrB{N!;@uFA>5yr#1CD81#b zVJwI*SnhY5=?5m=c?W&17O6Ps(gVO9JUof9Xx$MzTGbFNADg7^kMCTQ#FC!()(wBc zMc9DJ^E92_k-`_AtRLM1+>+{8@a#Zn>i9T8;>b>Dl4uP~oz%37CttR>HPSU+s^cA#*&ag(n8i*~&X0~Tqw^Xg#~wV!A%TmDJ*=9jbfxfRzut@kn^JX+4Q z52Q`P)qZ!9(Z4Fw2KhP6!VkmYa!#<9F_5*+BXh4W4omSAYShUuBGFCM;~n(%1esl) zuYRe?{LiBOsa`aKE!;v@bxV}sjQE5_5sn#};BJ^_T}a9{g462~KGZu%UtA{CiL1k9 z&YAT1#|1|>Jumg;Thx&8ca9E%`f!X$A9+;R)49!C367UrPvfkrR?N5eyR8R6_W%^u z=yus3Di+%K&Z{o6`x!QYQuZ_Nd&VPD5!vim^QsiB^PZ2354E1w&saTK?R`cn!tx%o z+Mr8af|jh)V`0?;d*b=MPyri5Jq0_$Qw|E-m`Bp)DwtW%tdc32Gk`y&dCKVxpmaji ztpcR4N4>;XPeylJ`5?@x7jBV^l&_%SQL6SiFRe6cw3heL8vM)Cu@laj2%5PVJl1#( zUP<?A{HLBD|5gFdIN$3A$Ypg9NMX z#I5Z-U%Yq`;+HqzmRi{Vpeeo@n86OIdQVap=T{Pc5;;%z+yU=4&{hd*WP;8_q7qp+ zN6vy(v~eCPE<}XZ66}7X$rGVMm1g0 z>6H_Cf9$-Ld>)yk=!on4PX3 zXzDvqT&uFi;p;zJ`tsPmi+lYt#%h1OX5ah+3)Z(=TSxJ1d(+xY635&9a}fp;h8cw< z+=+82y59|D!-DlNJMvgohyf!Z-bc9nmEf!4r(Ck$IF|R&e%DL3k<$3=%j*Fj-B-I5 zhgX?2_EYtrv9t4oCVUNo1Tq`S@-XP<{rG{T%RkleRTDY;2XsADr!cV8-X)N!UVh-DfrTDbB zYnSAJJ=xkC#!$_3isbe&(>)ZY9C9;;*wdIMDP z`S*%`p!c@$_-oizT$bqsa>%6l-(4(bF#r3=wMm@7{;T~jjKRnt+*bt}izeO<{e3R9 zqg!~9^5`xEt$(MO?rvWHAum5X*t)v&GidRkuujU;c$LwO%`xc|fX7v9PdOxYt?-TZ zltZ@VrF6-n9LpD`=K|Bc4jjYKB~b;hR<5Z3?|FaO1@STg>Vz+xH~m?QwR+=0c&alf z8XI@tX=7+M=Qbbxd~u^tL#hyn_>{Q?h=OU$=v9tIg0##9_kfgtZih~Au-Z5>y?mQ- zi=rhMriy1Tknt#AQ5AGIY~>P%+9bW5TQpOLH;}^~WEQDa%tu>2hQb*`w%~R0?|69k zob_X4$sUq6HBppE>+wFL&YYXn4fjgy^tk^s^=1Ad@mD)w`Z-2Tu+v%_K~JsYvQw<{ zUB_#loIE8SatK(M*f0+rOv|0-tekP##H8zvzRzyxm5Dm=+KK!Pdqp~p<-H1CpkSF* zcaS!IZ^Sg9Onv;DN zrV^MW9??^3y|QSE$JrXB)H>y?3xq9ds_#yP`%M-GTjF0h{e;@qn{A?rej_;2ouJFhX}XxPkcVk)^!BsOa=VX`dyz;zLt|P zP6SxI>>T5;L6fkmVF>D!jkQrO!Z?waelLDe_1>IKM z161F{F3(;DQ{x=<*a8-AX?Ba7wL@XE5$m zIiGs<_x%*6ye*P#@?gV!5!Zw+O?15rqL}qK`W0cPZJRmx)0nF15m%-xg>zD}32Ch* z4l7-hc}<El^8@b_s*Yno9t`J|mW)mp_{{ zXtnDxbGlo6mWT39m}_5$0}D>5hj_omLObBjP*6j(KI1{=%l7fMf3Di-vy`Ps;yJoF ztj-Q!H{GNzoJC)|7dy6zL2xOOHM}vJlLA#ml1Jcigck~FKpt&=32EMDvBiYn_89FV zuWZR1Ea)&Qnv^cRdWy0YhZjwuj_{dSav9EclZ;rgY)gU$V?xg1Q#I9(!m1#w#C;Pc z`fjVynW#JP(~j?lo!IJ3TE*rdR}FssdqGk;ny5cHx-_`&eSv3gF+LZlhJ$Or+%sUs zonWv|2IYJw7w>xwu2$~OvB^KQ*!17j4J|xQR}G)M_#eG&0w29BV+k*Zi(8TM;O4HQQ(a}{O z)0L`P^iP}!RiUD7nwDpoi-Nl5Cu9>Co(>$*(8axVT|Cczdo;#Q>9p~*F3)=PunbA4dK60$VQdA76&37a8CLkm7}pFI>pcnL&Le?o9ex zqzm7jzk6FWm$3MhZi`GUS;iv*k@pL3TW$zF|FhesL}0C6Epyo_>J;u3TgpGZOpc4_eaGx zqjl%a?AoC0c$Ab3mkrv@=H5|Q!DHV)O@fb|L0~cHo3M;y>>1C>%A)?YFtyV<*F8;> zzmfVryux=bxiFXx$bipVCcE-DJ|k|{epmuW_0Ne~ zjLz0Mf8}57?pVANpI{N*Y-8LXx0VFDPv2{eeD_jm1I2$}KnPek3A&iF|Ievs$ZRbe3!N;Gke~ppi8{-x zkL7O9^0}9u?Vt_fl9=S{Hho5jfc?>_!}Z_4bad1{s0q;IsLT$wnJwH>ZBPO7(n<9> zD%+XP(TD4AyRT_!?feM_rkvA>KVG}Lnvi_dXrUnu#qY;aD=5fLGZ&#rQPCsA$|D*p zjNyD2gPr(R?2uP1cjVFJ5dAwE6K!-N5qjlheJtaYo~sDn1#>c?9tMMmus6mn=X z^st0!F&QO`=W?g-7af>Zhk$^Dba#W~1%{Fak?scR z?iP?56s1#y5kXQK;k|x;>;03pSZfCEIp^-P_w#(7j6|n8F%}(D^B=D~uKmQ#jG1~3 zIM7y!)jerX#9suU5y>~sW)Ak^Gw!`}nWO`-hET@us=l%F1bK!r`XxKit4-FcGa*ov z&@1KfS<`NIZS+-(9XmWq7z~F%lu;!~Y)$-S?&dl~m4zwU$ko^Tj%l#*QmJ?}yP?w-2b! z|C`W~26+)QS0#16dWn5cvB^uZ8@Ln@VoUS}pZz_N1?j+<39|}@@08vS6$|BND9_@anJg%Dy?!ee*_-@m)#UZ- z!j<2apgHcJ-SwZd4^)yNfcvwn>5V%Lv{nc>DFVg9|G-+uGh#;|0^`kEO}X{RcxdX! zXSas+3z7cKOM|{+kcRe+5NhzDclaZPKyCdd>)irr#5%G&v;3(^uFXIUiqOXMWXM3oz{an48Jk*IHW%v09uKOcFEJ@t>P z28yS_)@3{o5rmN`8h6x~-%<$!e*7G0LWB0uJ{#Dk@^Vhb>1I-vp z`YwMH-&_;dfNvR`QE(jWW;)C4@xQ2eBxyHA)UmT#xLe>uB{b)7DQuoR{*c4C+M1Zp zjB+H1B4Or4o|tp{IaLthK_mS+#|U>g*M{E2uQIiYHdejO3o5=#KYE)eJ?HIN%Oc*|=HV^qU#Qdb<4ea7T)eSAx?sk#GDF88 z@$E;!m>1G|F-Q8zvqjr%@NYPQc28YyVBP)%G6!#@D{;s}hgA=<=qx+tWa~5-7cS+s z2}|6+y_Z5e#srWWKL0<%0Hi$BGvYdQs_p=kyU7ocoWAd+$mN?fUvGA>Hqkr(r(ZA! zvw#F8aRZ%2aB_sTDjagTb*v4cb5BJ%aZ5sBV0M!UpGVZ+IZ-e+ewc#!LjmO4KgM~?VUr1j`fI7G%08A#&mki;cUQndp>~f#{ zDDgs-T6iJyLbfB!BHI4#8&Jx<+UNBT`3C|E>c)vB@2`kK*DIJ;7!N|}n7k+{MC5Wg zY_@U43B${OPPSyPuh=XRTH>_6j`PZRDr78ja+8+HHygdA;Gi`23Wj)70WILao8rR|)TR zsY5t3!|ZEv?NbSZAbTjMnSmrHCsqC)MngB)jh&YF z<;mx%cRk?I!2JnI=9*J8<|tQfiAe&q>B1pkrN&B8g^l{Xrf0Y3FdsR1Dc-RIS9*&x zc=&N|se+kGs0idmqSWwXLgWef^E6Y$k_+EEcOTt?x)N}HNnInwUkqw#hH|4#pCW_5 zaYpHo9t!%N2}x#rfJGuHgL}3qKIra1sL(^96DWl!k<)(@%yYd4FaK_Q1pXyaBK{Zh z`?aX`-mGQ*Ar&uan#}#ASs33qDHqvUn!$#$cX^vS0S@B95BwrMGH;Xmxkaj8JU@Zm z|Hghr)VnEDwW@Wu-FiKhnb;7OIu$gUH`0oOWy?RM5@<~=b%+gUjs-c2pg;ypVo~Xb zCX@0DyNZ&`0<@(@wTzzxK;ixIzg$Q#P;UT~(AlSf;+Td0dmr$(|A7ns#ioL>z#y_N z)b@Q=T0l{A!u}C#zokh>mBL}nP`GH;X!vXaCGivA8|ppxolK5@-q)@*E>M~m4@!*& zyZ~SWT3EEGdfH{?(^%w$*1tMSPUNsl1V}_D=$VzQvoCSKIHZGI^;zh1b8|;N{xLe0 zkTJ!FEW*EEB2r*$$IBF=CHwM4g#k+iOko%8Sp(caHSf_b z!4E|F<3XTUPc1c?KckrAd~U)M5?`{R8J=Ywsue!{{qyGGW&AOKSG~Qr{x$6dzoFv{ zfE>F&`G+0#{O@kYu}#=I-#9PY5|_}?;K9#i-X_z5BDK$0Cyww42#5vO(mzqz5J7XE zC?z4aypst;HA~ZnEG~tdGMO5KMwN-1&$?5w$m=TXv!qxe{F@`&GfUJbPbz-r1c3yi ze{2n@J79|tH1y(KIqFAbp-pwdREIBVIufIKjyKZ+%*jZJ<-hIwv|QAK%Hb^iW$nNpy0$P4<&6W?HCSb6 zh4oQ142ovi(n_?jgXJHSdmN;5ctC3T(Zb?*YFv9BsQv_`X4`El(Zl{3sit^o2!O`d zGs1rwWI8ZNK&>=Her_L@2(jUNo2IUX11Y?VZyYBdn$3__XQKz>^`2vt62vkNTc)^r z3%*8`LzSfTE_J}G^_oH|4uf{rvi8roT@O>J2VxKF5^0~$yx_SWYZyK`uZC}5_ zaW}CW=5lk9>vR0#;LZ^J{02rm+mXDf(SQDu!k85{0XJT@`+{6MTvWMU zc5G$++okf%_nBeZguPQGWER;C7A92F_V0B*9|juT_j5VX%3iA`6Mny{)-l5 zsT{2e4a8vcts0wFQnTVr^)I@nd3Qd747+ z`E$38<%jh^1mYgJFx~@K{O*5!ZLry8l<@rh#6n#0l|&QYKv&nQZS(xcuziK)Gub5y zZ125j4Gjj|S}d)DaJ4>RDTFQSsd&aH@z=X$V7rU!Nyw=jgosF*Y!AeZgFaO7HD5gV zw4}O~Oz7`aBpzR#q2iqHH(XwWX8| zl-mpK4`Gl%wCL0%xF}^$Jlk~U`;M@3KE}r#-9j%~W>~xi{jE{&zkOMa1CK+H6)7$( zd1&bRr$w7Ib{?#7!HM8PLps;UU-+3l4~4S!E*Rokx*@W74OX9^%n|&8tgVL5G-xx5 z!&DQRK~k)7NWPP8B)>H?#Cg0Kn76Yti~GO+?)JoCj24**3Zi8r&nP5QI)1}&(d%DBv)lJz?j`Da4Rs3?ay?`X{ax&^Q4-=~tT8 zHe*4bhq0aWj9={L2%xr8o=n|HsQt^P`WtAQjXh;!EgJ6WNGoFQgm0JYvZ<4KEFHrd+=R} zj}IiskV!Bb3b<;1_=Z!mxL8^>zD3gN)RLvp6bU5nMEl_>)a|{up2lg4XwW{Kgc$PYGA{9aUoW zV`-ADCyqgmyx~ugau>-qpliclA%2TQz}01wN2n@YDp4)Qgj!}q9Uq& z2P$XfG6%sLU^9nH+}nrVoD!tsB#qgc?%=ZdZVSd+ZO2-c(q%y|uUA1uyMtw}tN05l zJeeIEk8)Xx8`fBe|Kaz$JJL9X@E&FDTE$8|<4WCMBnJN9K$Kfr*D-rIP}qwy3wjhxNt(X`fSHb3_T32 zcQSTG)-+>Z!rtvat0zb0uX_t_IZ(?7)hA1t`Q94wb`3TspwMeNM(x%U2J!$rDKJVw zs4+<4x8yp@)ZwZ_w8;^i-{E~lF$X6~MJGNE4e}Vu)lI~ z83)g$ME}$eNUM>{zcw*a^gn!Vc~RO8D&*na{Bq-99p`UI!0C1jZq(|aYvC-? zTfwMW;5C0D+7EGCsXsf-ryTI3oS~{pR~owSJH^%k^Cox_2ssvks@rQ%t+v=ittwdg zPP@HstB?AV@BtYj3dBCx5pv`lFcl+p2Qz9|&U4G1l*lodL3v#r3vOX#t~HZ%_a_~A z9yNBNaa*zwvXNl4W!`|faSE5fRx9(G=aL)X#)U0#P`B%%joS|R_cn9f zrbRxHD)0iQvzja z6$bEeMq!y{%ciuUt`7)2Cw6Cy%w?NjamESRKfB4}(9>;p$322O$v~xvQKzR_rIHZI zqmtlfff}5r&O$5WBelqlE-YdQdu?08ymON4LL*PdR!;|eumRV?6!%+<2}dkX$~W!_ zO=~7NE+H@485X=IL_XE1>CfP^%mAGJu0gF}YdgIz>0@1RBP#xSMlsL&B`9+l==$(e zk1~nWA>A2PCQ{>37{sbVGIeH+`eTLGA0_5iFWrVBL6L+=<#WpsPV)?yqDkp{YSNtn z)6rFZYHD|-t3e1yDVtA}5a+ffWu0~qp!&y1)=eMRDNMGUv9wz2@4|Ek7F)GcMfz`< z9_;^_KmHdET;6C@n;5+DkT`#{P)}w{BER(hXjPeZER3D}BP=oUF?E9C)$uUl33dMo zHFcG|s?LG8Zz{#8fm2DzRFhAj)r6rlp(XTCKqE|ita^=j7bo;%%r48MiS)ikvWwGL z$!z~ni<2}mbbeL=2-|wYO3g@V4PB(iYB0)7grA#61T4xEiDJ=^FMoEAdwiz~t(YA@ zqhJ?)d|O0byjvC%jwROZvdyfuPp=lXGsN@RL5E(0?+tsjFAl8kv-qoOuAyuHaYti<1I!!z4A&yIuRAN%BJrqPY9hF%{4M|JcP{Yq;9@nqL_a~q`s7A>=HV9 zEkEs_?(mXE*f@QCMXj-fzy1|8{L`OSBTlriMv_u^;(VmF}RyNGigm+1&^5qe-?tsCj z?iZ-!<$+a-+4kGjC8V*8+-2G#h3Y0?I_)Miw+<`#cE)HD4^wo-(MEkGfb>XZPOuFfY)ub0Wny$|r$6EcBFFCH^^q&q!a=N5)5(Y#Wzb9XU6L zOU|HAElSk~KYj0E&0c^fXSAt2`?_I9R!8S!=SXOpCn1RXv-h!<St0V)v*Vc`jrL=0iSBLp zm~S3wYaY6jTUhO@RqhCaZsvieV$xEZ4>*j{DfB4J{8?|OGLHPDko^x%oWi@=PDfrF zO!CP!vC^j;BOj;zjyjPCh-Ie)k=;xyz_ObgYRnk{DOF@AjekUeA1;`_Zb*n%?avpk(L{OyCaI{j^5f69rnSvBzSx6$TWY*t>WSzeA=fL*g_Ws+ygi_Z_zO!?%gjY$xBP^)| zsWT$kyA6tnTL5!6mRuf!lH8Q8TVc3}_n}%g-Dc5Q=)c|O)PLbrWH`)|H+hs}Lm6vH z9WqnH1b@wSOlhQl!iz`gh9NqY#;a^$>o6Wf_z(y?RMoq>^sB`Y5u8@H{$;oa@*K5u zWtCA^S}K=u(zA@Pl(QJq0UT|4=iL$h(4=+h6u7$3u&eR+k7tivU4<513G83jvwbrP z7-f^qRv1}Ke8)5`K({?>7sxtRRgEL2;!IIdQ2WC>klcWS<#u1*_s!UvE;j4jU-t<= zenB_}McZX~x(?>1+!!UMS{E$Q!r7-ZWyjnRwsEzXrDC1@o*Da>EkK=^Fz^_maAEO; z)VH|pSN(1NHUwAihafkuh=G{jhXn27Uy?oS*7CJ^Qqox1>G)1{~o*E~2Kx zDWt`av*~)X>V&P6;=mQGil_CcbP}OdI+rY?n#v3b!1zr=g9rCZU)Q=Q6t%2p$i;+D z6K5VQB$ytyulyb-`&=JA>_0r#zi~7iym|X6i?#0wXwC&(i^a)B_y^QQ;Kmq}tBpP) zn&IM#Y!lykKYbCvcXe|EM-Cuz1nRzPZf6iZd@5k2j+KoPF@bwgn_6iC32In1p!xAN)`W%zu;2$xnxUi%LrN^RGP|IMY9HlRaG5L&Y}W&@-EC&k4h@pcwlKk zFPNkqM%b|jo_+blQid0q0rjxQ=DtJn7<|~LTKT@o!qTfj>GEr2_hU*p5g)0s!$)bU zQ{a$oY#|qk4#%Ir=9iQ7-nYooobzUl6&>gJc@7O7vGl;0OKJDeyXd-SP~I+AIp7-( zjp#{hU8w%WL`3(4k3i|*m&v{c0b}bt3dfnBZF97=jd(s9wJcO8@WIHeq7bd7j0z1a zE@$QW!##;AHY=w^O_&$ij0Xxk@B0~cWuOXDA=hTvqdwe=HX5@%zA}ZP@zSa>6V-gQ z6VB^Qt&}LiLA_;{RNz3%VyZfr9@0zdv^e`r!{Kj7U*D*+5H1%hhl+*BaDyQcrkE@i zbM=C@m-|qtnG-ED#jrXhTnM_xnX1b;DcBTWdl#^R_{4k`rh;FErnpTZ%WRQn0UVE~ zvSIrEVMw)<>@T&VCADt$uBdZTe`d$fv9)nR^HO!|V;nid@c5bQc)D3Fcq+7abarAV z)WXI!dSdR-5}3z=Xg=IFN#(%EFE1h2=@s|eDkECFDLA>p&{Rer<1?J zL8vG>t63)qALca>fphd&e4(bb0jNWf$BZFcRSM@Xl!e?s#1KbcJP>SbVjS(fE&F#i z_P2OIw<=ETo@mV7v1-gE)wUi%B_4%j@Y<&PV2LlvM8sv5ruB(T)BQschJEXp6lk`6 zM{c_w|Axt?5OotPlrSq%pzHZFk^8@ELsQ*_h{2vy*ccam=e^Z0PU-8}*1R#XZsTtNJW&VNC*J4rM^UMu!u?HOq=Ok?O1Uy)= z+1O)zX~m2A4mtFfYnulw1@_=PeaO44RYRZ5rA>`&7DmH-%l?h%As!Z{4WC9gs1?3L zFnTrwX4vNL;YQW+&16BwNu{=9Zk*gmQ#_NoTR1eNRvR1WLSn>b_t%kv$gn#+q_mmFW zjOg*%@O0W0EOQO>Mv?R2v?$0$Rx(?fEfOL15YCL#1SCc;dsMF_S^u`e zPcgNfzqexwk;MYNr=<>5KX|8R2wX___-}5~EP8Q(r{tBMFKM4Xz4ABWAlvdWOdq_K zRd?#WjX7PDhy#Y|pNXPDL94E)VT4^0tto|iGd>f77Gqo-v%7BiJb?P}F(wn(QSL}R z?)f1d0XMWo<~a@B2&G*%2;G8#M_XN>3#1Sex&6HR>Cc~?u-x8(YuM$j1n4$9#zkJw z3E*!gxpf>82%h%L9|uf%9UlhJ#YBwDI$^RIFAg3743!oyl1mCV;4n2J2VA!Ejfb87 zi?FM8y1T0v!jw`8b65O{|JGrF0}OfZgj@xL&>DNNps?k5h|$#Y8i9==sL&}oHaP}$ z!xy&_ArF@T9T;(X^|K^Nc8ij`a?0_iGW5NIUAAd^Ed=?~uICzyZD9ZK_^Mbra+{6| z*u`7TE*CXw`0Ic1!0GNSDfekAS;NlEic5dH#qqXyFsS(Cri5R-rz854fLwLew0|*L zdK_hwGNX#+h|XXaMjP8~E50bQP!VHZ&)z6*Cav^LgUOq-u@g_XSeZW7{v|oo-QL0k zKJzhDuffHv$7tctMmg%!cf{7Y3siTjFXYF9|5> z=u5!HIHHZiCeAZip*)9|qUjOXd~%8lum0r@`?`4a{HxxhP`u_ppaL!bTJsO_3NRLi z|G+WD|G9ZxE*XPpe=E{h@6yJgDX*GVnl^FD+jl?8^o0cM<3$6~SkNL@Z6&R%r%PW|4!j%?@ixscSP=ZD5(_#C+!!V|3km}h%`t@Iy7yjS$Vuc7_on5e zCkn4Hh>dUSrM@dN6$-s8(p;r|^_h^;UJ?M&R)J&naoZFdSEJpazri4%lV@@)=Fwa2 zR7S+h_&Exfmyw8!RHF{uDioQ}-BFjJ*56CJeHQ5ap4xwaCb z{pNfm^>7EAB|k3QuaWJ(EfRc!`owp7HU;m@fBY-&_$IIV8vpi;dRrPv9?K;un>XYY z-cVUu(c1*x8PxBhJiR5Ke~vqpxfn0HAKlKpKj^Tkl}CzYrQ4{0U31z})F~X#;U|*! z7WkO_Q$hWd94F1xw}D=)>|l6<`NpgHb)^-!`@92?VM8pM-n7vM>R*=P#b;hUhhRx3 z%TOVT>Ku}SHnZL%oj%d08}5K{<9BH~#rz86>AWRkUr#_7u{U7&Yt&h?pPSBX?u$S6 zR!|s|tQKZ+EfZ#;j_QG*&$zya#}0@)0CVWA`LGcT&9gK-CpROaH$@-m_D7aXQxTD2 z;(*jE5Sr=R+Y?vMEu2Tyv^%wW_7~|K!S4dQ0DJWFENz87JadnU3$!)TzcIwgV6;JN!^Ez!poY}bW_S)=Wr+WFPozWvnXmWr87{Y~4YAr;z4nb?NuduGN$ey1}rNxDVXUO&Ft4?Gc?v zUd-L}3#6Dkj`GA>3(|(r5@L4`-bkGR-|j&$`{Q_&+RYqG>PzT>(HM&vx& z=+=T?Du=h+BLx`yoh(GXBcoJF>?Oh-t>jHqKE8S@&nC!6S)#@$P%C3X&FmkgJeJHZ z%S=l!U+98IkS?^We8ZKBW4{bQ+jH2R*VCHT10eJK`ZFR2lQ=epg+8HP7)H4ADG|xU z-#HY8s2B>=Kd}rNd6&Z*Om!?orBSqLtVsK1BK`H?%%6)O2VlJp8e8D20-z=279Pn9 z6;(+|;Fg8wD)0QEELY5b&T7-J;nraKvdAb`zQZqxgFdbpVjXuP0N|J_sIN0h*E9WO z4ttAM=ZkKx@+4)X^m*Nc1i0pwETLGqPH!cicfGgMmB311p{FAJGHQ+TmI6wmw*)EV zDuz1p*ud?~#83FJp*iFkNF`cPyLW1YPq7!3VnM9FCA08;1?cb^ z_7sUuBj|R8SFh0nGaQO@SUc~?JS;6t!hY9D8_vf(GVjX-2`m=v67-0dV9+A^u~NJM zPu>hYY3C)qXY$+7M;HovmH@2K6-QU_F(z3wYF&N)Al2r<0bblEl4v=oIdQ0`VY=3g zC0{mUoR01a20{{u(w1b}Q%q%g=LM0@PW`q<7jm(&b$18+Gf_gn?&z}wU(Uc(WvvRv z3cyTUM1dTeqw`}0;+dneWF4k2pXev$koE~9A+P8Yy+%G$7{zW5pgfYRq9DTXk<$-4 zko+R{JGuLj8sAkXln5$z0WCm$DhM`sJ^gWdD%op`1yjMuNtZEfmMTC%PAI3yfeH-e zgc@`Ig#ic3&2-P*q<&>xR=2Pg6KMELlL}^P?qya?;>}{Wtq2OfrndPrWdvVt8z*_o zT0XR-(HQ3Z%sv-C%w&zGXJr;E;|#N-UHpur`#dZ7TQDzOqe^NS}i_~?BbJaJeaKz z6^+(?=B^1ThkwN%&AP{g+)q9{X7((UXzV+0bUg_}j~)?b`NroR1cCAy*8(rk=w&to(Uky&HH*m>RD9b)raLIu}bm zHMTd(nJ3I0+lqLxVyhFMGSD_4s)?S-**r|-(Ezn4se(IHx_Fi{y3I%V6c0)@3Y`xi zd)+Y*5Pbi~(7b3#5MA2*>GjQtgn4>AaK7K%%u>vXGcCU8mW_xD9``3W3En1cn;#)v z@SzPIwU!O|4o2O8&x^6NK9VR*#j5uz;b^A11uG17KNLiteBn4*A6eac5sAPE?KPzJ z`KhksHa4G(#-#Rk$&@R@n`VOcn|yrgz3Hlk%dpy`(x1ImpX!SI*8Gn*Wiq9J+rLi~ zJdW`i{pvkxiV}x{zh4hH*QJpd{dA{c&SStHC|X1#LZBCn6zfRefO1+|oA)iY3mMEj zEkT+!85jXVDS5mdDr#o$q$yKAT2dNppPhLPXdC<2syy)w4yOG<6GZE~mPlbQM@hi) zsi^Gq3k8HCA?B|c2ic&Gn*seNK>cq;K?qgu3$T2(ZC*;rt#Pi4*`m`JK4-&8HEY%A zUvF`VtMlpIPbx&_!%siklS1EHlty^>>-UuxM`4MP8lLuQFW|ES!s5KtdmpZvk$0 z$%23BhTEU^?{DS;+E?m>Y~#e9%&jIoI&9ddwKgB>E%AxY)2fj&wLSQ#?ct(LYnrM| zYa^=Qrt!v)PVAIT4OIncv6?ZxNVTFjp zSZ~lre%b^#C)#H?va?Qam&!hdq;^3BRIG9%3BnFiCeuA%znLJj3F07qZGh#(ppL&I z%IZ=?WFx{tR5(b$Ob@y+mlIwpTXYfmB%l!mbJRu z6!qFG*}p)ATVB3e(-_@rTs-eMfVRd&U1-&k=F zTD~nQXMYc~$*y|=-gI2YBa;JR)*f7+xFJ?rG`{zV>P#4q}?%^_7yB!5S`4&w|zVNWQ` zSNY|>;L6i0?`Dj=nMsU5DI^Wo5odT`w*wVy@*MJG*TWa^)s)d!fCP81ZO3uvW9&Vi zREYfgg4*lj|PJPgeejC-1!T zBaW&X>{&81sWK=FBlUQ_-S8~03)SS|5)_xsUj8#7#{{FcPWY32A1NkbrUL zK-;TFWnYijIYVBkUI(gHZRn}~eWhB}FC5h0U9bSS9<2{Pr0d9{NeJ&_&^nlo`2({^ zlH{lJQ@S4p*iTOQR=PKi;Jbd~1o$#ekgb_PALtM?r6Iy&ZWDLRoDQ+E9>ax zN*id;8TtMDcgjpw>jD5WtHL%ib7Iqq3< z7~f_-0?CkU9bL7uvf|#G^~sig24&7!Q75Ob5H*#9it4uK!GhAx+DcN~(FFUZmIB(d8l?3`qVnUlvXaR~$d1F}kb~ zLr@lS-`Gj?ryUe%)@Q{2{d=DB40a^)+KcxO-YcBYW{Bzfi#NvG=2QM3v@MwJ>OyG$ z)%U>Q|5j#FlZ)g`@s$+VTIM%x340RM-;&wcXL4-X|kO&fs0dxt^ZlXRbSfa zWnEnzFz+XI+uLsXfXMR#+{S(Rw|z4>an;3Dxz)5yGp6Er!t#Pf67>1%?an#!tF$sW zOVMiz&1Ii&{2cz0q0hTK+72Y~D;J!)Ia<2a7JXb5!Q2uZfY~$53J^bLb&Ra8PSGXy zCXsWJW@V@N6_4(NISsFg!X2(@CDIBxlfz;MDnnn;ibOy@6GH?>2fQ&{>^`@V)e72Y z&s4PaI?F06D}){|osnC3J$33=fiyd7k6yk*K@%f`Asa*vo>15-@0Tn%8Le}KhitbXGod2nLSS~5>$wwyQX<(1QDZhOnLKL%!g7RH&C{^QBw`z zyahdePcvVnWylk4Di>3XhjAqEP->(odYgTLDJ>W*&J?jbmTJ??L=F<7Kgn{lnxTAz ziWFs~qZ#2{8(XVWpuuJqA?Fxlm`%|shUw;Kxw*6A(hx+K+?wd+**!c~EWtBO#~4k` zk_&jss9Ytnt)fXhW5oJ6th-Dnd9DzsrW#PO-ow)SR>+}(n$PUO8t+044Kr~i~>SO_|lQ7W6I!n$!3Yrp{glEQZww3W&*4o8lXLdcY4p2CkTc!lVg5GA0EAMy;< zFC;30Xi+4c(k zB=9|zAyD{zxbQ)+ZROdUi)&!66y3+tF+_FQ__VY6>&h(^NE$i z6L+Q}n5L{^X!sbb^-5G^b4Zd5DND?E5+hU{LsoqI-T!>c7pZC|aWtPTJClSg(KKBTM6FPHoiKh^Dj&Gbq|%;Mok*`#L2)dM|oa zsCeO$bA8k~`}i1$cPgbXMK#wx^g|I}5bV{Lmb=kR0$U~xGI&EvBncZyC@}uIDFYEC zk^k)2CZ)7_RTj3bSkHL?{zdrA*(!W~{Z$SNdk`T(w45@6FuZF$Uz3eyURPRQKLImv z#Gp=J7@QXj=D76|XE#B991eADR#(r44p`)S3QI$Ea{+D2d71{aNE&9=t7J=(I_}9g zi@%u=UZgvcQ|JMNl(~%HEfiGM5Fd(7GZC-585Fi}(8+2*F`dPaKqw9e{B7-(MS>M4Aiwo&%KwM`D`6t$f0Ubb9UKLX%F^yyhGpZJ$mDT3g_N$BFM!8st zK1aI!f;NF|VEuRdy?#jD*QUyZ52CyU2H+EDoH7km)kP_tgB2Eu)Jt&N`NMaDQ{kQv{+jMBLCM6&@l_Uigra%4%g55+4Sf4fvfs!|e~usmZr$#N#P)#8 zho3J3!2GP-Q3UMY-R^$1tshj{bKsMC%tKAaOjb!Fegds;XP~k;STbz7ELCwOL^z>n()f;P@yc{l^YPVZ z2e>@WG=tO$2?lLL_^Lq_N=w3<7HXY+4K6?ZG^wmlZxxd3(`>NqSiZ+EZYmMdJuv|^ zalK{-*u3T+^W%mH3r;=Q`o@|KPruIfDk?m!3FiI2UX|6Pp%CqBKtdJJ?dN}+`=%Gs6-=3>#_@`BK6 z{ngw(L2r6<$Ivdz9x@7MhqIOboJP0u-0>15wehoWr z7P*^2SkCD)Ob#3QQ=KXY4E<22*DH-8#aWd?fkd>-5))Mr=&k9r&7W*gIvVY;n(%#% z*r-ZSDZzSRf;{{}bou3tI;{S$Rw>dJICm=(4JY~zFq8pz5^Ot1H%A-fvUi_;`<`X2 z>rGLdamVvMsLZ}0q_`|vCwr5XN9c)XMK22d1onzn9g?YMuoz^E5YBC|05ex8Dt&{C zoSV0;@ta5X;UD7MsOxSt;DZvVU%^do1vP8v`=m9!dB0dsrWtTaO71=DvNANW?v)+- zLd<-lR}ole=qPE>eWrr8Jl{O68Hqs$Uga9>56)NGT+Gj-NJwo5vrcx3`55FE1?mpJyONyhnaFiy=HO;%!&j z7_?MKR4c|*ymg%h7v3Rp;q+z25a@na6zOWw+#ea$?c|XX$Q3x@C>_!+qC*wK@X^yl zV}s9A@$DHWy{LF;y*IwU^Y(LJSJ#klx5C0josisxhbT4bK;h#2WMosLoz90%0#7e5 z04^|na=bN6)Zo&-G7#GIRoW>*^Rrj$n(J^gKUKoeks&yz#Ll90^#p$cXR9D^@!~dk z_Dl2G%*T)D;QQZMsNrH~$lUhJJLWyO1h>!k#EM~CJ`T6<$WrhDoUH%$WpLuJ!QbM@ z@j9#wBjEoNBw2%LM>Kg3ecdA}+7BpQL_bgc<}R&6if-ET24y8B;`!Mak;-E}LCCD2 zZp7-%xksy!MfX~9HBSGNtmD_8yLN}pa?9D$FA+o8gZu6#3vVtCD4$4${1=vbU=`x) ztJuUKvu~Zs%wSJty1k7o#2gLoReB+d*MG(@_&O*U!VpVR`WCZ&rnvU`Vj|foPTqn{ zH)H@}6!V_6G?J#Lzm-6zDIr5)t_4*wUzD7{tUgH07p7{0s=GKGY2sp~r6;&NZ_cNZ ze50W+8V6Ig@YzlRFd3#brRWR2yyVCNrr3ukA5(0e2s&nCL+FJ3uCs-tLbJ7*{h2PP99D2kzg=ulloKlelN4-di{D_-(|}C5yUl|ES-i` zAB97OGTQ0WyzB4~0&J;9KV=FE&U_1MniDW{AhJB4eP~Ys@sHp;eBF=Z#~I%!T<_@A zl4#Ida5-wgfh2I@oq@~<&XD#m$#e7sRUHU_!3$8Tqa}1(LQg-bGle{ZM3u^p4;bJY zFeQ($L2%IMnMj{RBq%ajugk!*R>YtAr8)}?+KUc4DsX(5r`k4*vNV=q$5AFg|0D{t z8sOq~;$8x@RT(rqnN>En+>H-;p1fmWe!TGb2?QJGmnbHiKmdkGbJpfx<;%UOd;Lkg4<6;eg??Y*;k$yvawo1&P?`~VqvxZwse z#1i`1|Jxf#*Vpxax7V;+;qdA?Gw22+F*E6vif)wDk)eYhvX!wx>y96zMb1_{^!p%1 zxH}h_Zn*P$&F@-V!xC}paKjm<-Vf?4-VC%8k->7)+iPb(7Ea7r4!k zdn`zNIhioWro?HRb^22PCK->U+8L5j<$y#B&u*65fJWSb_Y`}qixPZrMWY9HW!hXX zp30$XW)&z4@2vLN_#y&!!Ur&}sG(+>*dEz(ja&DMbz8ZcYw77-1+{(r!IiQqy5@cO zlPbdoyS9~EKQ6^a1U&nG7H0lj=Xy8O>~>U_He}g|r4FV$DZev~^?=b3U5AV0*XN!) zP+1zC#UJVYXzl7;AbsRyte;aNGBGA=iezzhbrql76I*NpL&o2IiU6osuaVAROT-Az z_A-#OmtY|R*WW?&0)gRo?>&>EbhAYSW$r@;aYh+Fu0ydf7fUnn5Q;DGB5=PF;hGej zXu`u2Br-$)LV{Y@;uL(6x0*Y(% zor41oH1bvN7@wOU)7QcSCNKBwe(0cC42z0z=-4b2GTZDguNTFjs`YX867*i;R&XOX z5W>OT!`XzF_%Teocg7ocWtVpSw?|T|Jv}eMV&E=%3_GG=6hQ0{$p(#yT<*)^7d~8@ zTb!Hyq|ZI*k0|NO)`aN4k)R(>B^F^?e;`9ie-5jhQ$8omxe2CrV z4&k->fAen3ZObNJ3e zir+N@FsksyE9z<)lABKv}Ee^e2?Fz8^A z{7EN%&znko62z+xN;wr@XKg~YXYP1-Y=wZ#eL*O{tLS1|m_BsLnIzXz$Bm`4t1rx( zY=4E?S%_L3xDh}@HzXMprN&X%&!+f!@+MYbuAvPqQ}y(~3FOb1@%Sz_dTZ6LD|w6m zW9clzqU_o(Jai8s-5@9+okMqrgdic33P?yd4Bah)bR#0&(m8-2siZUrNP~2Jo9F%h zdK~t?_r7ASa|!NbSSf!=EW}n$0%KphsTKlMCr9}j2In2E??OQ}exwOGaHtwq>(e`t z$bxg#T5=gU!Q+a@CUw-Ray;~7((*JfFfh#+LPqtmaA5fHs2>FVjcLldpc=}o4|Qz3 zWWS(0<>&uqZ70GZ1oz#-=N%|l$kg{IkH!BQFTl7h2e;dM)ra2*b5?IViW6Ivl4Rnin|V3-%~Pu*XYwIv<| zb_w?!w#O8(!%e40kC4aL9LvLSxrMd~Wl&9Xn3N&%ZpIcZ3yjD?5+A$pK5yWMqd@x> z;W-&6cCAn;i6}<9^E#&;CG<1`18pKqPW%l*>w`_2A8D>*xe)=02mdxBZXc>iz<0Fd zMS&a;SL2;u4E}N{n_kcQArCjSWn!(p(*cRG>%!Y7ANYYZvd6qyidf$BsHyRjC1h}z zulBU;`O`fIvVD9>MX{|Vkzp@RwYTuEFbmv?9<`-{coHx%$7o6T1x zU8aan@q3Q2kZ(l&JaTHspO37Gu{CBRw;W-nelDuKg`fT%HBL_lmP?3=2G9M=hBiExUMn+8R}%BiJ|vc$=h;jViN{mGg}3xa(3ZFKJY z${otA?O^g0I=o;X=vIMJ_$fRn*d?XvXtA^YY4O@^?!kp^7Q~bxQ{23#2ab{7*Cm3( zx*^&7a8u^EWJ+Dw+`NKH3x+?3h*2XSnla$PS$hfekQJm^+$9qs?3as_Q-L@z)z{Ti zFnw9d_gl2Clh|UvO(_n$Ygx9Ih79h#ojYj@ZRA7K`c`PI7{f1TUoXPGL>>#1Q|1eq=@Fj#-6SPG=qmAWaP&- z<$b;q`2F4c%(Aggyx)7C4D!b1y`ezSfF@@anAe|r$2M0SUG2Qb_{!^UYPQo0n$^4P z+aT~g_iGb}zDK~5(Xg;c?DZHvbkawsy=9O~KwmHDB^w5=7{)hT=JNFJ62=$j9}`OV z_*imnvj=!WB23kyD~f&?eI?h%?(EZFc->RSGu6m(COQGF)LW<4N?|svj4WsS&dI_- zUnrj>r^FZAXCCKsE(A_d0CxmqXsJlQvv9v>X18%R!veeyiMk$V&7i62&=(o3-@SDD;(kLV6IkzJpqqu3+ zeUX@FxfJI3(q#&4IVvjOJNdLI80&BgXRG;IFs-3TCRz1H9-m|co8wqe63d5{vWc^- zF|H!Z5DdZ9)C;fP>Wx%eiEein#W1w(eXb`Z@C$5A{>g65n`SDuQmp!7OYK-NJR>8c zz%6o1S(|E+%9$6}j=lz+?ZaJoC8p^z|X5)2+2iIRBhcfVgRErYUg##?l# z!2x7mhlL-shfkaMMEu%7E9Wu}KXs2rhh`Id?gendz;$*kr+gK zt9xf>aq(#vagwMQP}Owu_Sj(Lb;dXrB92y*6+1wKPA|WkWmadx<&z)8$7`>+gE6Gk zWGWbU{lqwVdz;xWxq2lX=ea&hGz+O|ydx{eY<(0k#ZM_WY1HB|z|h5!SM02mkS;6l z)8IlCU_vYUzdF+Vf9mzYb9dzO(;)PStZx z$GZYzf=YNk2NgioWwZF^_0ao6_|$0@*K zytAbg;X2chASQ{)!!wq8Jjiz}L<^4%_GOA&8^elUP;8jrOJs^@5pXtp5{!YqSmw9r z(8vO^i>cWPT-91^#kRJsOq-eoENr_C%+PRTLt}VBh0!aM za_~>8nPNXy(l~OJJJe`3jST&H#HUOmm>~e|Lq9(-G3Wh3DE}Qp9v!$EQ8+v|4dkd6 zTPg;zxguS_l}qP1yDYbw*|WDlH7ZI-K6C3IUs3=1v-r_*0yMk_NjVdpG&6&L{C4NG zsW9>B(?>`Y$irZUKi5^u2mk)-)CEWkj$r*88$f}OhLQ1tE`do4vLvQo`lh_^ZLKJq z;X2opfeQj$hhBfYo_4jcVKE0u(JkP-)a zwF6DPziQy&zZ-VTH!~PHIRzjWYtFVZRLWO`nKaW@^KY|)k(Lg73QiYI9$Sp~ox7A#Y!XD|6SPtNMh>{;GtG`>?61luXOI)AO?Xm=!~novQn| zY=Q7cV_G-S9q{An4*!Fej`QG6Nw)%6?4)Pkf4Vs@T19$l7-thIIj#$KDupc?You3j zaHaR=Yv+G5(&8vc)V3p+eEWCT`}yM3SzOut=v$`a-FYcc6(c3v)?qXJJ)D~fvB!9i ztsghsaZvQ4PYsdb)|4&l=HM-3s<9NAO831VcHpgrYkYaTa%I=s<^a1a-6k<`KF5^!9q*_R?U-Ir$d36QIN5!9Q!@<7Xk_l zhJk%eMX5=fIz*oTF><;6QF>GSHhZ`o6Xm4TQ%Y!fLX8#oaNh@Gj558iV`d4PSdiTY zCfgaI7Vi5H0+wh>-C6oLotXYda)dUB`9A^hni9ty2k}k@iUGR@%wuNn*0}PunIGXO zPtjL=Tg!GpxXy}rNg}Szwa4|x9Fyd>f#XHzL}L$qM*e@p2hC9118Ux6FK+Tb7Bw7b zdWAL()_=WC@d9#j%t~%ErsYA@gR>}5% z)ndm#?aNZz)^Yr@ia}6})X3{Ui#8{lifpi7Hia-qPn9us1?CmMP)_o)(c^lKas>%# zy=+Tu-Vc71RB<{%6i|j8j_0G_Ak$F*PbcvA1HAFpOfHRl&G%#PP%!=;mszgogzj4} zkijZi61B0*Pb*O_Dqnwtha8+E>iLhiX{ zCF)|&eLGH2_`QAX`4h5$Kze#knskJ;aAXM)D4e5M@x)K{0;XX2FWgMwYo0w{cIH$K z(qEz@$qHlhb^a8yKvfDX7dM5oXr%~TGWQF=C5^B!UqRzfevh)C=LSh_b7;cr3`%1` zH^lWn^I>BmPJ}MD;S#}qNn~mCEO9$7he^uX%AS?Kj5fWkDA+pjJ|DQva`_8}t1SaDff>9!R17<&Q=B>Haa zOie49S#uE@GydWLrcsxgAY!cL7no|OVSV=56fvt~)Cl2p+i*X4+39WARt8#@u-at#KZeTH6j;~U#=F{6Y&KYHXzJ>$F?V>MUV8mzio`~1y- z#)cPkdpd%Du*b{YcyCmPaR@PUzy_cxFLbGz{dwWRw_D>VB9%(eW|VUWk(;u=B^?eP z;?o9;yrOcd8YLWi-xlyM+H=iNN`(BW7Db?jT!1P=f|PQsaRGPqW2v|?H`40`N|pLgaeOhg zs4{A~A44M}2g@^%rzpu^b~Yi)xGA}aoY(Mgso@oo6y{rG_v*-r$g-P9==EUHPYQEK za%&iE!H|mUF3By%DBs>weQK7Tt@#Bvq!7FT!uA2OwFSF|z^*mDNyaD!uze%PbdsXR ziBSMRFhctTjzNCJ8U@cEMuqXc@npPaL&n$v3m-Asf`8;;eONat;eeD<9V57XT2AaPj zq4iFXkhXqr;wZbpQ>GvnQr+p?Bo1dK80)xUcm=A+=RCKl7oV+L$el!c`Zh$#i->ak zeM3)AC_66k@1cwEe@MTJ;R<#%`&`8lV=H|pM%1Oq#VCUFc(27ex`P{{7SqUlyr$8xPT*K;J$N`1d2s={ zqrS%s!_L^lJA+@h;bXhJS~N1}rSM9VCzi5EQSRj_S53u7NOK+oR?4fTGQVrjQnv)c z!EiQNz0iVa9N^*-Gbv}88A~3FQY7?ylWvFd6L6GBF=r_XEY{OvYSiHzSRS zX(LzlY|`%A#;;&TjIv1$3^2*sU}ut79E?-?QTx+VIIBVd&s@c^8#~o{0rAiY)~SUz#JxY)FMNJGFpj zb;i*8VvtgQy!#te16HRV3LCjwf!~WR+W1oZH)tC@1#>oxL;9Ov9gVZ)Gy&g>S4CHtbR**iyi3b%|J5`}Qn#h3Dsfl2G+o#@8dtt>8wsO_VK%+-W5>%D^9my4qFueaB-$ZC(}0UT z-+r$?0COckZLY8UND#2?E$P^9HJt9OAgdAyu2V|kYM*}NX*vnAsjX-7(;o%4R21&K zpLX?yQGky!luy@Kan1#O1w^PxI=ie)*R&h4QC09vKdR#NgINt)h~pfWG}wco88>Y_ zO7M_;7rT%7!Bxxd-$U5L7=H)8V+#tU0s&KfyTO3O__T!}h-c+KG zwxFjQIzMkjEFZXi%xFnoT8dpEC!?u2AvP-e=yA%*t5>f=Mv4qoUEvCzg8m`w&mr{I z+o9B!;ww8AuEbM1Ynv5kJCNFc3EPIY%) z^{F(q4wuyW)EORF;sTw5q^u`FFqbpp=Hi6h!k;*_4j14M1yt zKf#TVRwde+uLyHRCcYn#+?%2Zvn?`Exh7WP)6l;E8o_sFZXPM4$b;XtIkU@U{=Fx7`-L80r+6jgXdc9ksN)RH1Fy;pR zM}^ES$Z>dIj93jjj(phfq67?#w^MGKhG5>g6;apVl^xy*+Dl0ftbyZO43VY46UTp< z&Q;xABp6sdw$o$>SY^{+A3sehE$!ai^rEGN_w1fu(`T$&rJ`(uA3N!fO>Mg14)D7l zu3`^Ac#7hd@{-$gBOTqHsCo*W>N#gKljid)@1o??sf6`X+j5K>t*Y$8%|uI0V^!&w z$%&^70P|UWeB{t*1U^nX!Hh%plN%BlQ{LBM-yX>m#-t7^Z!V-{hHX=l?~KU@)Is5I z#?5ObfW%?VT@{jn3*l5hV1n6hqoApJ(xKZCQMRKLGi;6YvKr(GfEm`$xMe0CzW;b|K_OPpSYB!jw zh}iYGRZq#l9?i^%4FwC5(UgUj$MJz*tt7h?>EM1LwX>*0wU>#HA~*%=8l*Ea*D2I6fNN@AyQpT0vU++1u!s58 zgIS`2P%Rqg(M*NX)O=TLsX7m;AaRmUhj_VWHKiMIATM7E-QD?2Q+|oxA00a|P@ynv zcd^K5Imz(*XW%@}uWro(+&t;USY@1i1-swcX6@o?NY;+X;a-B+1{k*XTbhICAA$o` z#3@v!XK2FgF@zo8Qeb0X%gAn)dN3$B9(JaS4OMwTY6mNlt?!3@=}4NcTu4$z1mY~b_53h&C+h$& zN#6%Y4z9IxnBHIy!nG47f(Hm#V^%N^tD7 zageM|a+MFj!1LsFHzIUDt@py(WaBw|3A;VapLK%}vk~DVN)@e@B=bG+B-n$@nnU$b z1cllJ@f4-qndp1r>CRZ1@8+9sV_6;$t+D3!m(+8O*Tt;EOnMce+lF>R>P>LH*2G7T z_JowXXjjnfCp~s8xh>~8l9P#jmBN*t}soG7zyDx$sqM?`K>B%6f8|z zkqF_+qO#=5N@*cBm{%t?>4-#EyTPNdhC68!GtPoPY&C6wX_Ff?sSKwpBDy<<=n)*g zVkbp8&t60dmgeXCYKJoL`by?s->^-(xnKrb<)vA`_wpU#rn)KGADe@oNXOD#!Efm2 zU%DHIpPZaP{)M5H?pD<5v-8lNpG0=v2~t0H)3k4WQzDfe&z-{sEE9zCJjcK!*4pLJ z*ze%exwltt6@m}s2JqdMiuy1;!Xy~pwDn6p>9CsDmDTfmhZjc{;G+XUf#AWO3aX?K zl5iebxvZT(Y+)bbrifQ&ThG|}nf~w8O?fux$KH3c3!=`prcCtNSH!FUzWeGm@bhPd zc~!pfU5Ch`wHp2H^_sc1iwKS5omhB^_2dK3+gggV>+&2NI5I-1qkV!WEiTBeM!~Mf z&+LnVq$1^ep6@k}j)TdPyp<0{u1m$=9JX}aKkNAC{%-+(KluE-PCRy!Jmx=N{`HF6 z%Kf^obMi{Z0q^W^$oajyV=(fM&ZyPT9=+85AhKkvc2AodW!F@yte`HrIJQvk6%K!_ z)cp6(E8a)&55=qskC7?u6}RCFf5(uhHVC&nps?hJ$`k8 z7$yr|Zm#GFW0zav_%Ir4GD`Vc0^aU!KQEI|qzHk@Vqkcy?-`7@;|a`@fmIAxITkV$ z?lJ9IOQ^IB1zU|IFKLpr$kr+P54X(+iZ=^^dL3@Rra8_0cP{sg=5_|n!YWd^?5iL| z=v})kX}rCWtZg&KUkyYTc`(aJ{GUGKCvi-QTBb;so486*_HO*|!;e{#G{=RFO-$Cd zCqFmoYpcNBj2?g;12w%q-0?xl-NMRxc8uN6Y2k5V8T53U?QUY*KQaz<>$#fsf`D3NoajXmj=N->5%~s55lg@1)1)cP1<=f3V6g9oec2P_&PaUItYWwqXjZCsEf@#d)^&L(kT{x$r?+XLivw`o2tYbczQ_LM*H|O@?+zW}Zb!-Q>M8YNR}@BH`gdTV z4l7D9(CA#?6|d#IK5uQ&MCrHL%B7>G4limJ(I4}`3?CtwXDpX8pv`?1!-8I_&!9}) zoEd~!rz$CAA1cOxC2K+DYOKD`Kh^2p>*-c3^Rxt~ zFd4ZZ5qY}?iIqlSjmfTtm>O1S6Qi$Vk<7H6%Clq0Z%?DWr9KJoloKx0N~j5S`CDS3 zVeB@u2eqb};GZTzarg_F<;TMwJb!WR^Sy=u?J04l%2=RSTPO)Fv8w*pmCPX4VTj$+ zPcgNfHEczW{{FO5`UcwlYWpy@BDt4ZMs7G*C`l>?J+ZQ=bBNrJ$Xu^~KUA4L*9Yx^ zN1oUg)a{-(sB7?T%;;KXQl}7KUPOt_a!9~wO{5kj!>Bn^H9oQ_J$*s|a*n46w6oTR zt#UdmOzNu*oBq5sD^_{YXfwH-R@4zp@!46`NG=~o8DCXHFb}eu@s$-i!>8qCjDXZk z7BFW5E6}m1tT#^}aqJL^vFcYLehm*`ky8OsZU$q(@dqBykzw&B{E_n7;xX1GQLcYQ zh0Hv16;j`IpBWsPCn>H9tEkAPs~%R)G!x4&76gVJU0oUym*d)3x+HT5NOu^r-h?I! z;N5PCAos5wC6{4)JVX8-DNpTzMDV^LgMMk%V$IYNuN;}|pD;8)$=A-)z?%63& zCWYa|_Gt4HR(4aOIXvWm`?F&1g~VFq(PYrMh2qwd3^mB6SGVA|50#Y;5T+|isADYH zqpUN=voO-1?wTRBvLb8pIG{~p>i)3@#sZCFgt?EgHreQ!#!lAQ-!Rs=s>L+e5^TpH z6X~Gn$-KiNkq1l;oAkUAL+2^%9dC@>_iz@bUV?y*SJyrCzn9jQIv+N@qyIxh?f3tB zcfD@Ta~nvoTDgF>AZd@A=48%UZk2>&g<-rPx0H3PKQ&Ri(G%2SMwm;0tmi$8Q{V;D zSIn_kPIFuV=KD#xEfK%S1(1Q$VtyC!r2DX&_;WHeANb=d|Wn zKAy%8+W2e}`AhyT@&^PB`!`QpPnx-gQ;9+K!^1y6C4w2Ix+dY1-(<-vot`TA@vnkF zQWl8W50Pc*NGt41|HFEs5nB5sP_8+quXC37_;>Wb1*54pd8d**x81ZuO5>fS&ySYf zcl92l3PDWODpyiy^$ngO!%ytnm{^D-nGKrU0m9z%_H-J^QDxalqdWh__gg?Zfjbt2 z)F0f@JZ$G|F(Bmq?EZBBj=tH_(}bP;`yv+2#@Q)FeTpnI($55*9%i6yTF!cqu&Cucu2g!GG#~$5?f-JN?7u28agE zS9W?{pQn=HqbO~_SZ$ES(64(8WD)pKVWvrHsi`^_LDQe;xr4Fv^vZL^H7 zylGNj26j5&ExBpMCqvy{SPa~cZkJvg8v}ehD6}4Y*xfA$?Nrn%7v42=mkx~&pG*^l zKFf^Vws4#;!yYJz3Ho{7PO|T!WLeh-Ilg6QXIW^4I>s!r;0h0N zpOLz_4zAwk6c7F~lc@2Ay$(&oJAt`jZ};?d2wQ+8a_vt)j;M&!QZ|+IXGQepG*X_G zd%G>$coYW=C?g$oq{X4c&&UhiS8i8Xf~JTPi6AjnD>RvpwnU=yS$MwZkMRfV)VIQw zZOhHXXVzT>Nb)F5{{70WV0D8FK7L{-C8HwpzKFQ25%vLF=|#wktJvp6wHC(V&D&%A z?I&w10T~%z4-Hh5U9-AYs&J@Y5VJB3vfPM{>hS9lvfm-RkZF*lFjlA)3_=E7{|L#k zRZX-DMxa|XLS_eNY`sypp9VzSOHLA+|G$2JxJ zXusuPmCS#I>~PBH{evM9FhWa8u|cUJquG;J!_Je#akN!0bh!OAXXS4n9=y(dfapNM zoCcLCgh)}^kot3W;-eXdvy0WEN4|TvLPsO>2P^UZ7uVb}`G0Y7sZj$)4AjU9(e8F@ zvB7EqbTKoP)7%KpmR8gW!I?_c-LsD!_y!5-31Qy==8R9WLqDi1_EQPY=fG`tK{TWt zFzOz({8K+JG-Kx;P_X(EUT#6hzt^^57W*t$Vx&vb9e#+OeFiQ`)Q6ZQCy_K&7dVwrV@}P zI;WZCcIyQ(;pZC?ZuSz4F^mFa&diWZ0Ib;J>gI&Y5tdvvCG!mKOysqhB^;HHxz7ih zt&CG>><+Wo`;J?|l%Y3}Dp^0*Nq!)>2Y*k+<3|=OQfMWEdS#LI&rcHXe|spc)+{86 zF&#uZM(1}Pci|3gAOjzAj^7zYwzv<7n~cs&_fAEd7JWf2T0-6O^7l9#mA36EJj|?WME5L+!nG3{X$2*O zA-ab?P>2uxrqzaWZT?yGB7T}k`zcbulz1>2y>))ik(V$Ou3+^FLM3Yz)srXA_GxvE z0ezq~IeW7V32xsYT3JMT*Xk?k333ET4ZmcQ6#l!Z-k`D~4QmE!r%Iz!`fW!R6qh*w zI0X5-rKPf3yW@hdbGR&)gp;CGuVtq4SxRhvEQ`&Ghw7_%5nC=SE_&lM5`wiT7(0dw zE%|=f{gs5eS<43?;}3igL<>t)r#4C_xS<||_yAtC3L0>hA>J+T;EqNVlAUIYj;n?p zQ{q;MHoQ2hp^XP_wv=RJ&|?*N61^T%IScgT`yi&cW_fHAz6YMEs-AZkk z+B@UvyZ~*LNDO>h)IT4VGNg;^T{{e>`jUvJ8o|3F=5@Tzd|r@e1Rt#;5wG3pF%1;> zJDhalQdSQQ&F|TC-%47~1Q)@PnjcLN7xq7;5h9zUFEmhQuLhyFV_B~8gU*z^oV$FS zA(-a@qrnRXO(jWul7{_x3J>5E!Mt1?1p3R5KupN=hC3qsdvS3U z7*icb&{&~#WG(PT?%+`*b%PY8H~X8MZ%j*@G28#iLI3$*A~RtHO@2~SGS`_(R@Vt) z#|*FO%KPw~SiVZ8%X3GQt&X%(t!$Cm1YH*SLJ@LTdEbS%#jk<#-*uhD5ON^|IfEcP zx(*5GYoGWwIY8TDv!;=|PvKSzRXA_oKN7mRX3+F!h10x~$|19>^fs;x4c2}!zT}4P z_AB3pe=cmE7YB28XL5EsFz#zADMZS+UeQKxGi2!|!*Q3OZ8BQc#8pK!Hk5~h@<6kD z+ufGwMHzu2B{C|s4!Mpr!gr0x{R0vN34=LwX@Ch~fmXEIuE`bYYeo~;tmLGX;bAyV z=|mhZ1MjSvOlUx|!`q=QRp`DAVh`l1@(A_PT?B(c#s07q+CSveQ>ZSX;^XgeU%qE+_QipNDcBz*M4s%VU zBg&B9?BBZ#kv5yY+62NhobK=ZTAP}Cb*mBH9sLgQfESdnNC=Ct{#dC(8Y3RXYGo&p z`D%s5L?=ltBvZ{GKEV6$^Lbs4-T0o|>Ndjlfw8cJU*4 zm7dghOy$hSqffZA|f(CaQA-s5iATqyLspj^e5mRHQp3W z@J<+x5gc^ddacT;wR;8@mS`r`L3(K&3at4`c`Wbv)zQ9)RJO(Q$uy ztBTXasbrVWB18PFw^|_`A@y}k1gU&*d;k;4wckxj_VAW%8;9QizvB%@{HK8^B5$0R z^%JDK1ysQM5GnT@PJaX5pn@E}h!pKk5w>14N7aD6nU2c}PT!J1v^!VQc6fYV``9IY zC+g?0+eIl`(~i$U@ZL*vQjiW~0rRBWtH3i&%z}o+7>`*tWLbUM8!zta|Ly5MGGif_ zEv=IBXW&Gvm8;(HWmjARg)-DL4F0tqYFgL$v0$es)az!BMSGD`jfO{7uwxJ&jIicj= zIP5~TnO*|&%hubo`HR0VJEDXZJyF0@53v7jAtf->J^ldt54mS&RQk3+w{HS8`fM{h zNaWUI+b($2Xz$z6(>5u#4e>(gGx~nLljkkmKn8Vn)14g%jn!F#ePLHUK(*|?M5A-Z z&laAUfdgjDYdJz?8hu%C^=12R5qxQSFXySnTC0UZsaXWAR1fG}DtV7;p7L_<`X*Y#H zbk*#Oldw?{jB^lXDVtslWEFXs8KSS8-2>w@HmxTU{zyLOL%wn%idzy6_Z`13J^8&1 z$q4ovNly6rCFe2l-?c2Pf|<7pmZeung>Ci1Lify^Rqg~gS&i%NW;HI2a%hB%Bb;kI z&;G~wHQ%FbCahfkF$0!2J?TSlWG(X<`Kjr^8h`nfrVDya-HjuGOhTONBA$QNfzU#zudE=YF*FsCAnt^9@@aV80) zCD>^v412t$qfGrg74LX(iS*$uPza)~O3&wMv_wf&!)c{e1Kr|u`ll|?ghz_6IZ(}1 z1cjoPg*ZZO*u|gyHmPKpP$HVUQAne$T0+=PGM6D0aw~~9jfsRMVHekzM1A+TMXA6S z*>VCEQ9CGTpH++RYQ01c^^mRB==?@JbqNhY4*2EhwnY9ErYVQ)1W#bVYtfH#%tU3u z|1`YsBb*qlO*uJET-kPJn2>q1%H@w&*>NYb=(!f#*?L@^@+R_#McNoermE=m!)AYN zEnX71l6(X4C2zPrUrPFVQW(a()D30QlIlNqPWVDGTn?1yI#SALwpezcj95K3kDRp& z^c4#VmEB}d62pNvc-gDUf6_H7n9-IB7@?2Ds?uj2Z$KZ~aPIv6onV(obmW+5Uu>|9 z8$&%daoz9Wb{q+dm47t?VxO+r^NF8fHgKD14&B-oYlRrG=CtK1ocxPB!2918080F^ zm_IlNm|lg}Lt!oA1Nu>$uRF<^xf#q;Xi&B=+J5@8{+ z`Z~^1V3NztnYGPbxb-ErnI?yv$E}fHvJ@aR+p)BC9x2hpJ|U0)tUoM@|4QD`nxSf^ zmPw-44V20p%bFGk)FhHbe3i%-R@$A-lm$*P<1<4euW)uCG+HlzjY?btqX}|>SkMdf zDJ_Du4LIconJS&+3iPO8Fap;vu0j`eb(!ub~4gZ(mU2;Xnes_ z=x%R(S3H7Y>e9yYG=&AYnaPxf{R!H#*m&j4NlalnL<;1XEA)lIj*7)biXkITe{@1~ zl=EnB%T4aCxbE)T&x0jzY8_sEK6>f#UwxVeM>P6;8#I1?Xd#R}R@>0OWU^p(vVV<> z!$%Q|dYqR%4UP=bA8`$p7IAq!`++vsVAv-NOloxHgrzThJUw1A`p?`?k|3wBp_&pwjbv{>J>OFjCPm{Z=@m? z!O2Y`ci%X88rXXJ?vcJS=awbi0T63j@|!eS$1}nD4X{!^0aUM81Ki;H_KFHWE-veI zb{MD4=|#)~Rh(?&PpT~pjqjQR)J-J=9Kk1#ZQVnDhNsG$`Dxg|w?M{0&ziNAZ2N}S6# z_-lBbe=03qE<3iZ7x6AmdzBc(8$Q*yH5QtiSbw9T>{_um?X1|4TRHbAObsS9S|dn& zdygLQup_u%{!ddo5tDHWNphh-QZeAPe95hO_-=mDo9;oLKajibn*(fIn8G6oUXW-A^;?Durj;;lwvzRSfo>8OMGHcDJ$;z z4W$~M*q4Vjfp@Ij&{VGIsFz=liYjUWv6ez4B!*332Pj}*z|?VJG=%hl{C{urV{OLL z5IG*GMHb}I^nPFmDF5wTZ4DFbF%Q~r-CFPOt}lL>-0I#;aNQDtePRGi&oNGHBicEB z@9o1{5}j3P+6{EG4|ftV4lpA=!BqP^`S`FX zxx3bC6j^B#T^P5@;HAXRkXkB2l(jh{YiRlY#qU@iP_ZBdxL7=E=VYH|9pbg*&@b-Y z8FBuGd%_2KKk6;InXs`Ax5$1%@nnq^%+%yR60fI?gwm%5F;K0`+}t=bFbyf|S9I@z zn$!=n*t+PL%bTvG^oAigvs{)~SuPv*;_vigfi3fwlAqn@hK_iDi-XkyNBFHpJ&0Q! zt6uA2B>PFSv6yG>kPi5TY|Qebk`5nJSU7^-=ywMk zuoIvlj~U#k5B$i#&4BgV8VKNx=3X8cm@B3?Z3GR|PA93=ZBySw^uh7}=@ttgk7%Y_ zTwJ6LtmHNck@?2S5SY6n5XOX5b#tfXcxI|dj4lrT7=jt0>^OYu!`lKm z)v#B;esAO7KbwfUqBL42P}o>uIi#4P%k3hTOvK~(+o2KY?Ajq`@`sp`qM|ta%)5v# z8ny%8L$T?Qi0+e~&a4AwzBzc$X>KVS5UOa3YQ02l0xPcvWz}Dn5*ANl*Oi`*58B}O zCajhGZrx6z`^m$XeaaB%nXj6oe;S3K*j50u zw^!yOS=!5djJ7fsxXM7;R5#N;`_oelIxG(9Rl$fAFBe)M`~vSZw154Q{FCTrP#m0} zF{20Im2H?1YdjPD(pGFg-9krxZi!$Q7BZrn*v5(#{84pEz6v^*W@sLD1)D0uE_b$n z45mq4m^kIe9brin+vBf!f5Pd8D6ScbZd#UZuCBKa?v{K07MWxtY;X||+l5qnUn7;v z9A20J0`*(7Hwl@94>30(2w05t3`}F(wD&4$LUT`5jOR5-QX45Zle*<&i?s8 z!T4oRvgHeXmO>fcF~7_Qwil7oU!L)=2GkgPpM42-fCnNd$?KHL<%n^P%PR1#=ZOq$ z)ev8%n++>%+^QOmoAur=STQZ*CTr5-Dq%h){L0Ti2hRUS9^yk%rjdIK`n-JLZh~H-r$m4kD1C*09hpLO(LCcXqA;lUU$E zd|L~rSoFQ+03Mpw>;0CCk0zHS4}I4s4J;=3-R0&*u;c}b9Td;d2k#m0&n(30A5uEs zTiY38(VIJbcmPOrX|M-bO;!5rhl5XZmcu1)7$mNDYZLIAfKzgDEiZS}Fc zAOMih&#s>gJPRQpk41_S9jp%e;}ZhYKq8Z-SD^gtSR68jZrD%kx=X3{nY9M4X0|77 zmAzRqPnnVNj5r+Sn7?n9LLg39QnDW$ZdWEJ!5j?77Ku9WW`)(C4LB!m(1Iyj)N7Js#@SK7%#l8sc6*X=h!>&5!DynZ?_)W?ftlq?tc80RJ$Eu|(bQ4gOS+(rY z5VOolC0*Wa2nSVZBVrwHxBC@}sU4%;oXWgpAocHxLRY3-TM<*tW`6 z;hEYI$RDWPbc+@PMvmvznIrT?aw%^l-_I&3XU}fKPXFtD25mHJ*on-a$?f}nwU}R&KyfKmI;sF56L-9Ew7WhrZ zCIuC?fH)C-i3So+O~Pqv-k@Uym$FqGrh=YT>4c)NlzyW)^$I2>ibo@_>42*rX*_Pq zZ!FU%?BD=*7<=K98B5K$R<*R0ABz@q#NIebFczSb5P_t`uN%zroSu0Mpc*)&N-Opc zAQ!3kD0@Dik6c6^r1$N1YbGcqNKBnyZ(ki06Z$*}#u0M**PJJGW=tc<=kBp&d(n1c zKU!YTy&R+=g@v(+3vQKlKbvry?R=Kj*GFPA1#q68;fW75?7 z2>AafpmugjrAl)`IuZrBvgr5>-F{s{JxSFUaw~)wiu_>In$(oO&9epe)ZdQ-@^g`g z8jf~TbtCdoIjbuA?LH77+f39R^jvobd}WDBKx*>YRZi;sjtK@CAP}%q^q@8Pz5hwZ z1zhodi*Ci%Rr+5hCtG(?;UETTtOk+~2r>b)Z?}e5gaz!)#c0-KTD0FZgra z6lM3>Nn9a5Nl2ZeUe64vy{g?29IzX4xp&gi+WJZwf7_+=R?Q5{;kzwP^{v!CdHtO+ zBz0dYiLaNiKJjT)5en5v`}*$n@b0BGf48d$p1KjpUa(H@c7Ei(UbUzmZuH9~k#h%_ z*0BAj-Hb6XK5e^3F)2SF&o2<%fDsG*?N!akR#j6NJ*DVITT!s1`4Y^ZmjHAL(>=s1 z8%1hsX5c(LShD@xKtcW^yT__Va#@>0`V(URu+#3^TK0P+?;j${?@NSJUewVtvknf< zj5BGl@G16Dl03IRS60CWKluRM(w9$AhmcBWsL6_EISiJziWIp@tWYbehV z>K*Q{hDwjQxAeg`bKrrnxSm$pIdM|?z@43)stTtRAbkcQw*UuSAfc%^D$kE|+z7(E zXJhscPBx$0;GIBqR8FBPNqbyG!1nv6=irrnpH7$P7UvIq!i4d3=U%VX$;ADNb7OvA? zNRXJ5?4GII(;PZ1tY?8rn3&SpqX;Y$Y8x;e(4CZ?<`9`?R1sKZm$9Y#nbpfeA+3NN zYr~T@640#htD#D>D#DboE0SCr#olbJAqzu^R0h;W`RYU1m^Snu<%l=NM1m5CMqa|N zaj;-{E9^qk4E+(M4%L$6FN&nK>RE7{3rfCo+O5C%q`%g@-TK@kx}gYf%wP#NfQ8Au zMH+CTO}CXQ*ltQ8%;F66tw1AY6`m&-b|6hGpJ&0KO42aT@o-w#@b3@tkHA$A_|^I6 zn`Z|-q5kZIX+KJI&wxQ5Flym|!6{SK#f!u_u@N-c`+4^O0MRD)ZPHhPiU_|zb2*aQ^nPEnH+5X0@{L>NS} z@2?#DMhQD{!*5yYhxO0I!qPVcyWZb$D#>;;yQOi+&ib6F)6WlE-_W^m7E+TM@M2Pn zeE8``v#&VG51;uh!K~>(Iof%iMTHc);k<$}!tzrf`OP+sKDER9O5~~{1$7G04~>kD zvMT*1yL&a9bq7hNF~bw})p~4uGAONV>ecYDc>o6F*;scn-Ok2r((BoN}08hdWO8zs?73~fw=^&MXVtYjHJLGJ}|3p3VpD@st3*t zhw_!QxldnBdyekVXH;8@(kq*9l{7y2P&zF<@#OJXJ=6_cxr18yFoImxXwsciL73Ff zk63ey%?@J?QY4^h?G}F5Mo|L-h9{CSI?4ZW<5UW z@W~D+$9>NC%|x;unoggkYuao$n1_HX>Y;jhP#k2uZ;xzT@~4WYlT`R0SqpRr;4FjH z-`z$0{lkt8G`l93-(Mya+l<*QEiN)D6Nz~q($9Rarcwq!<9e_0=*N5iN1zsXo}+#A z2VBVDf9?p7(^q1J77tSbQ5nH62M+z1o3V9{hCJM=S6@Yue#}+f^xxGtEOM0Hb6plx zzqQP{^vY>lpdHHXC%F?Twuvg{L{=RL#Ni7kz}ttmFWRXNklGjT_;peIJUEwk6gPV& z;$V+Y?~1+=)SFj}j>3SxQr7oJL2P%wr!VE<75G1zzA`Gx?t6Ra4(XIeO1eQp8UYcD zl$%MYVVX71T%pB+~)t#$O#+-@rPTQWBb zM22xiY#~mJ1b>ExMO@^srFbx{(E@GFG}E2^i8nT4GNt|A)sw~f(^M@tl{qj_ac)wH z4oBlIATxXMCI^}OuQ@jfYI^HV_t^*ti7gw{l+7NVeEW9zuaECu%l5~l%V#B6QFpX# z)SS76ojU$88gz&TIw#FiJA=|LBc4v6kL)9%0JJgAb|JY#IvU;$&{e<85XTT8@Kh^% z0^aW5b3m;AOn|t7FZk=7`ebz3(c0SOi>ux2*@$>H-4VmXVd-IDDuO^$p56ppRgi!G z`*V!{0k_h1_noWI3QPXY)&0f$dC$Z9%l%C8+ak)JmN#D>|F;@!SW3ID1=4#9NC(FD z_H@vd+kUwd1vzi2RBP`%%7XZh`u^fP7TBnxVeC}wi#eSP%X|cvH!R2qJ4B-FV=joQ zSo}{b=I0DPsNm;k#Au+Z3I!9w-|)CyBNh;TrNlC(CyUFnF%(bj<6ZN);`i4!J-u&B-+FBc9CbtCVz<$l-RPFxqpMJGJ7 z_*NdDIpm>d^=2 z))mM`fvrTI-~$Q?SOZ+BBrpP&jKO!!EL$C*HBJT8#X#M7u^5PVxK)^WMgPVMcJi=Z zd@xKXod%9qu$1Cm$#he4mw2PP+3YfO@vV=mXx*fA+E|+Av?#qtsMOmO(RLnhKBmbakKj*1bMUC&@WrNnyn3uMC(( zi#}+E!w?v^TeJbbS$X1bxDg7q(yC{ecwtH48>xxdn{Re(!kV(*I~2`EV`Ot&Iyc7|Li)-t=JEx*Vh5JC2gfB~;e?ol|>gj^td_FnJC}5>k1m=jp5q_SC z@ExuTzq0<3qq2H?0Pk7@_gSyYq;}xo=!>fnvEvXx{lG8TsS)m%q_5S?_ zUh^eWB8r%^^k;fO0C@}B1Q0N<=F<@jp2N7lpQK!`VFOMv!pcbAAEsO#h>cJi%P@BJ z^&x$RNaLoXZc0!plSQ52li^u|Nu_G<^GjEXNp0{2cz9wE=ir8W%+_|5v0Airu?aVi zib`1z?d{p36DT4QXP50b;PkBY#pvLOO*?c)uD$4duFpvU@Bo$n$aDQ54Efq;ujkPa zbjx$%iL`ehJI5*ljxyn;4d{{;4U{P_VQp&ad@u&wZohy#bfQZUt~ z(BDShL_@2Sw+o%#PPt^i?Z3hT?(h$T^AcS8iTfc~0si8=Guc?>g-2olt9Ip1hrfgNZ{jr|b}DjQo6^XfCw z)6wdc6HK$SBWr-l6ZkABpD>Yx6F3xEku(!EP~|gDmsV{bdsa+Oy;Nk)=I_&xXYgIc z8x}xMvo+jOnXQ%n)=umDBgDZBeji!0A)`Rog62a#jTpm3{LjYuEnNb{(CPch_t(;hZ*u^-!^hf!h)`^Ys!6xS|iJprea2f z%>|~5g8jLsut0rOBBI6RCrtIw%>(nRL+@Fl?1Tr#0QH@fYar0!*oxm(BhLf6ba~R9 zpQkGb*^%rrqO{fk@iw)!gnh2@HcH5`7s@wajuA*quSSy-rnSyK@WTDldz|QP0blue%sxM z4hg$!jIQG@!>`&4oJLCnEvRu_BX&+P>Bq^U*5TWWwcae`*;NGZ@*sG1a z2_UOVWHJo!inr2*K-Ulb+YDso#m44XDp4&>wY9CunDjeNwEFbRkZm?TV4pf@%O8{y~66Yp&BqB7o>oe?Zt? zFAW&@I7YA}kVOzyKb=8IkRz3PI^v32qxT}y_9@DbxIRXH=U5GTCE^^gSpj%4RRT2#f&(tq07tqbBN#mxtl+q1a`kxtgQbtlq+zCxx0hf9K~tk zT#fY%!2EYar`-P4TjGR)`oyuHcQ?!mD0x0Zo_|dnL@0SPM}Qo%O#4A5=d)c~JI}vN zMw{AN7Nz$~z>5y;_`3DpI2^F<-v2L>cP<3skm!wcChyHennq;J=#8E-bUyxku=N~8 znCo`v5!U1HEi?8Vn-kT;qSdw$ny+?DSecBTcA9ff)Gi#b4wdqiGt`Z;g=p}A{fAbq zW_hj0(G4nq!}NrcK2%rgR8}q@pSKhH2X$8oBa>uE_&ygMDm&Ya!bCBZGc?G(Y%4-Q zi08Jjn(ngSrZp0CwIEq(PBH&!%Q2jYu~p9B$7gBC+jN{+ACLPgi?V-s6$fW zL&=X2$pw2k(-@k8vt}0n{+j%8Z^I6Df4uuWuNx5indbftCm0S_wEjDK_B?54@G8Xk z-+3|?>4`Xwsv#)0L6?XW-rs}#@55qBs>0>s4;~<%QRi{AEVr2_yelD+ITA%7d$dql z>)ESY}1dSgasy?hOf0D@-7N!rDnpwlu|3Hapc?8OegC_cNe* z^ENL7iNWckKRN}Xzi+xfSUNF~ zar-5$>`C4;qmOp@EUnwJ$>@I=OoiFnd;9$OSIVqQR|R}hBcr&lD+hxn0{-Zzo5}1jb5(~RTMS}!;IDDs)Nr7P7~|=K>wP88G1}o zj03cgxl@62QW(Ah>)j&AVTLakPqtBrZ};4ZQ)&YQ5Y-8~(KTOC8kiIE>je#)a0>=H zlG8G1l4ciC+PLc;7SaX*Q3QNQ@oHzCF)teI@ReY(WyMwT8KzRh?3yaYRxJ8eqn zN^)j-p#|M^&!cZZuVs`RE&xDo6+j|HU%pRUQM|Q3vt4q4iG#{@PGqx`@6Nq*G}2=mOB35*bG0* z5$JrCu4qf9VB-53BSmG|28-b|6#aBt*1k7{o0xd+;CUn}n2MAk+4%fcI=JhYj(8?v zRhT{>>UK%UWzo1J!~uH88uFSP>q#o|bTH4G3#>fLFc49~k#xvs^KsG%Pgm&6=huj$PTDB2Vjcms3dJG}47`EqCOt!~mRfAStRmz!4sU%Dr`;&Q&BWv_<%BU2(>W9VHm zG00P40D1?O5aIy1vPt3S(0^PCa>VmotQj=U{rr;O=wN{W`~{DAMcIs^=&4s<$i1Rf z8h02GF7EIr*YQ8D;s?=~IpPR(h^c&(o!i{J50QgI@GqOW6m%a>^mB#4qFx* z%`*Tjxyk8&2cySq0h;GD-*QK|p>V*C3`I$mdA6X(oCfs_QboNlWQppT8$rUqSU40T zy)k*l;+jEsEG_fGYs`G4)=;LUc}`uS{sv{7KlB~O-R%8YYg# zuKAGEfl`_&xmzPOm`Q*~_yDOxMvXuH#(`$U&5T?xg3hn_>|>ph(`tty_NZ&g*8Wq} z^0G1qN2M}48=N}rQlHKQmQ4fqMjWMgP5JX4;_?|0fM9KpT#%kG=u@U#G-?P%d-@^bc zJW=q|gfPy3(O2J7wOm4H+`8w)puUaxFwfhWRtN0Mgs_U>i`7(z*Ne9jmVWp zqh|za)xNkV7kdkLdj?;+ONhbK^{_hv;xSENLI6+@4`$Sd?)Uo(IBhXPo@Tn9Rj60- zLRCK4QYVmj53q;@FeQn*3*(#H*86kEgZXBd@DJ|Dg*scEJaYewN)7;tHt5M~50#oC zm&`ymeC zu7$`qc-{Hf7AV+Hdw-Bp_GdX;&w z`b3z9j$t;TQ%>lI!Ul$WJW92H)DJ~D_yt2Wj|xh~@vWN`+!yjpFF1zHst)~N&yS4X z#^5m46>f;Moxu07Lr-D z@i6naVgbDQWd_;iCWGdzVG9|9n(iph6D7o*&-N)3h-$e-IMtlu;nN1L*M`Cyzy+cj zU7C<*-jDLpnMEXThB3DYvV#oQ;ggpcLAwxI)!?8urSan02tp9wqOnxBvnnewnbW>n zA4-}3Tp8P&w@axbns`4V&MSsxYM-O~GcqxYM#^W)07pyotV~J)oaC9MOK1G96GN6l zz^bU|D-qFQI=(!OaNb@-2KMu@jGaKUcxDE;6ah-23~)1jPc5gkNz#AttQwOa3JLGu zYFPK&&s^DLsUo!;|8)=0EeJ4|0*rPhMHFfEG5*O*~A2V6`2 z4Hp|<$X)KVGA3>}Rrrz?cy;4Wy;Ko62D3Igk3xVzr(}SXYzZ$G>)Q;M}<Mkh|{BJjjPoh4{5WTbDWZ z^OOWBIa_5Z9VvH~S?Vw|v~)zds;-k%(H~mq(ztlYQp1OUnfV`1qFbotKa3DiJ;Doi zDw*LNARwXFoaH&Z`Tv0R))TST!0>RaiZp*D_F9n#ATGFyzRZ#_HPGp;egGk&!tjj;h z{~*{zgXV#au4O!|?Q%EB$c!=UQ_yjvI6>t48mL&ezT%93i|3NXytUg(a@4MEN9_Am1*|>VT9cN+Oave^xiYUAzqWTPO{CI zt<0wSbG64e&T11ajBk%D-}z-G!mAk=svBv2F0Ko95V{TW#V-ySp$HaPc) zx<36mW{vE%?zV~APJ6TOeG=lCHZG)Khk@N8k}mO&VYa)|l?jb1^wTDvh^uTCq1y!3X;U2L^O?2O?4tgbZzutv`1 zVA9Z_)IOk{Jxqzf#EIs1jAjWqj)M!^|2+CJ$~iDIy+MJ}leJ7k5_LT4Y{Sh*GM20% z{cG(D6+85QV5W~cbZuQ8hcfFTijt*H%~t&w`|yau*dStx^ZNQvt(3VHM7zODLj~Ys?~ZlNUb^EVUx;5`ZZ&Ws>zHbxu4iOo`N_kOM~B*JC1q9~3B)bomi?mm zVAz=ZdDN+1Dq};FGf_ceW-_KUx2ngcVv-jQy6l9;isJAZ5?47j_T9A%vs_5bA9aY7 z`gBex^xXAp{`w$lxtM1LTHDZ|+6tETFU>hl) zo7?es>HDE8S=kG!Hz>z#*9&~=qy;0m1QT|K5nEV;Xo2nLhtoGaH>ki1_yf;>c$M9i zSzv4C^d3zyJWuS8`hhYV-m_{@oz4q5lYhWx`p zTHx--t$l>!qmGwz=tV%&s)4#+TKliltNdL^eq;GIYN(A4HRF*2-m0q3^-4AVuyoGJ zI1=nR?Fb=sM-4;6Kzd3{k7DuEK$kS>**p;jBk#&~R?VU4AM}$h2strv0|0raghqJ! z%{(^J-4BafuZk~ppdI_AV*OjTgcod5#B{1mtwccYCe3b#&+kfp}PkWM*0+fD5zn%)3}GWo7oE!U1?U6NnWHrf&wp0)TmI&t1Tg%LpoV)IDjgYvWKH_>2uIb^8kk4Gt1Mjs!wHH%nEvegfC3P+QyRF7>vK z6R3%+qvRWA>JTS#8)$_1cb3{1)X>GN2J={a;>s1NE&q6yE}Q4r&eG~FyTT7n?dq^j ziT{3gtD2!gNg5Yy9}2OS`FdjGO2i!{pPR+Eft%-3;&ZFjI-HOrGaw^jhs${Jp>aH< zzJRDSsvy^fL5MQ9CN@0m!+4Mk>**cWJv9D);cCA1eykAcmvE(k2Kbm zJi|BFlJgjP1jBM7mMpQ1nm&I2y`vm)DLZ;X=Yrh*M$9QP(^{|L0SKzBa)d0v{ z+)F;w&pe83Kl{#&O!4rt*47=_OVMrujUjZ~;h#6FH|^7)HY1+%tUAop+fm3r%Td*! z78VrG!>9JQ-I1Su;QNeEK)KHvJBUh9`z5xVsoorO-Sf7bmf9}?13e=6(XD~Qz%Vt3 zf&n*AM&=Swo}r6gmKOtq96;XYo{>qHKsflc64{fRom_~=F6gIDXe1~!TSu`&}F1&V6{cVXgGk4vBeV@DN6F2AY zNg)Owr6RGik^*&5&pB2M-S{I{U=2T#94|_6!vB()0A(@A-cm{G4q#o{@1l?xPF|YGmHVeqLrLmZl=!-@&jM)k&~I`r^|Yvg?NnOsM1B%7CA5Zt^e^E9}Ddq_cfpN;g!@tLmGGZ z9q(({vuT4Fub&~Iv(uLPSf1FI&@&uRIFvOrP{w54zV<*(ZN&qSh@tUK0Wy~ej{bE; z)bXluObv9}1|3bWUE{|+g!Vh@0U0&6I>IcgmXR#m&nnWLEh40+&L|1}`Lr>&q1xbh zRL9lXXYQzKmi)Hiifo@x9_8hA^V+Jyay{Gv0fOylRour-*qm-rCG?eqe-$EFpes`h zny(i6G&lU0#%2LMANK*(SAN$I1>s3tzySKAy!GsHO<4kBro0rPZl`9JXd7?we$NDfz@dJAk6oxxeqZwDKs z-~!f)5Bk^GQsFEFUw1ICZ<#e$E{pdLND+q1b`B%#eUKjbh&M}kU|Z30v5e(&bJUZ) z^zs#vv{1|Cebu@7vszPgHx|Knt&{uLn8u6kKk{^$OB-xLammzd*=a>QN=gI-P^u@B@DixXIW;V9yhd=rC>|g)B zHY_{Zt9fY_Q{rt}5srZjUZ?ghH!BnA5o$S#uor*l|NKbx-?cAQ)X35K{oO)Oru#io zhd~&0d#m@)>sin%IIV7b1tFv1$3A5({y%b96JJ7#Spt4H1~_|#asB%6JijKQYX-5i z9Z|bP=A}yYjt-eY(9R{kT6^%C$H&jC%fB&?Y*=s^PW)(IK-d$!hT5VX76B}R2v2)` zPNpn91joksjdP_{@sX2Mn8|QM2{!S2D-^X|pc(Sq7dl;loRT}W)6R|kruZ#Uxb+6* z1pkf<@~wFIEGLpGBig=0blm(yPepW`j(ai z^ALY!vJe)cr@Q+#V|I1!_9_}E!OkSBl5zclYu zDYnbDE6(ZJviZdF!EmkImi7FsE-$!wrvduL?I{{!__fU+WdL*`1NnFZP8H3~nSCKt zLH-4koI^5XvWM>_z6rc6(Nvv~Eqxb9fmqhah^HyutjWPB%u!F_!{=`=J4y(9g(-;% zXY@DR{Fr0oJLzH(68T0bOWENU#pVcS{9E%^*9?E*hp9&$KM7*t;)8`AciFFPVet0uDU zi_cn+p)zCLzwY^R|7=8B2`z`zW!b7}GbuK4?bps}#E2f>@$`ktK;_S)Hh$G3O+a4+ zID9cp_B_*D> zd1M=|)*D_mH8sX(xKe5Sy^E;rMxD*eop_QzAGjUBD>;&QFl_a7aYrOtaS0q^63-w* zvTBmH=|!ln&-9%Rin&@@mj!sf^bn~G2Xr0f$AkM0!$F|U^*hE#B{zWbS7>|b`I<6 z*@V6}@u!9d3%;M0vQw`0G&kNd`bfU26L6JbIU!;_dv;qF=1=reE2o|po9O@0L4b{a zeG>LYaQEs;+odO^z!0jz=ADsEn#(=zPLmBAEcA|K2?KzavcEF#4A)=SDHn9R>ire9 zv1@7_pW#CJTD2Ls@h@k=H($fwc9!zP?!cOc=8bkKb25#x=+|sPRl>-%BJ)2{Yvd_v zg25Gw?w?X{+rB}wOL5@m)8ZGGdZZ(1Cv`D&5kccfb*}@vzb5rJl-L_O$UI%^ zNqyR=e{+`;dD8_QC{=3t-Yy7E| z?(WBl-m$TV0WHl6z>)wwD}k*`@$U``{s7AqVR7*{aLBwSmj6EdTyUWx&<^9*L7`=s zS99c)K12;&CPJ*D#sLa{D!wQ)sW2mXMm^7l1L7vue{JFT3ob+6Wc1B}k!+vZfK<_P z)#eWh`5KR;q?6I-crGN63owY<($xxuMMYy_!JkhWe!L{SRQQl%WYK0rk-b0zKpMI4 zo_0Xo9LRn_M;2jk&6%YA4av|e7ekyV-|IJ;{U~EE?ZD_3)<1TB;=RwCe)qhrks^%g zUAaKl+H*`xK3|?S-iEia)+5gOI7~>7l$9;?6d}7VDKw3yA``SsFXSpXL*Fpppb7g6 zM^rjmW2qd8Cj`D#1(p>mXa(6a6O(e@*vFm_R|oe`tNQ*VXMqj*+?a-gq6{r95ke=82Mryc zVEBmOq3Xq7eHHN6ApW?~YO1AKw(d0Og8uEd73C?}KW%d}V<0W{?;la~2RyEYXR;{; zkjCG>`lNEcY^tytno}>ml*6Qi258MmD+$tOIi6YZSvxULVGiq}x2mD=3dEr539;1y z>EDtBWJh{O+(pud;sNr92Qz4)qW z)QKTT=FozM@VfL}C*XVTjJvsHvJ85XiE>&510X?$# zTO@Cm$maz1=bOW4>+D}J;4hr>kYRIE;W`2@Bv8`$wMGG2nqd(-2egTy(nb|R*KgXz zPaumJO|P0i^R9%92@Bb()^=raQOdTu`LWM}LcMOnXPA)Db}#S%`Lie3a({cUGM20G z(Eib%f5c{!6r(wm9TSBw3(yhvsJ4E1PyKWRtl~8}f@+YW<4A?U7Qka`&6_;yM5qDb zSQs=0ACTY&NZ|f^1G6f6)8SOcLAr7B)N+AZ?$JBxk89(JwAL-!z0b1lMUl!iiWuSP z{^STE2R#PdkIXc7S*xyIBcEermDz4CONR$9au%;E5O9%4vP{X*DC!k` zZceFe#R8G9G^eUCFX!;4tD(U4KYYMURYRqO-wc(`&Kg0&nIopQ%Y4^48RGhs9f+zU zCyQkXnonh5R=&TT6Ur|0q2|eNJLcQik*-Mvm$nZVYz(Ck?Ty(@cT}JFF;>QPr4PnXdviX8RlP8-A2R8&-p0A)J;=TE?jFaUEul)eDUKYwI{ zjf#|(naPgh^zO6bS*)egV?H5$UfWVN1u6T&3F+eBh%khgPo6x1#S+qPO};w3+Php~qKWCc>0DVQazE>6w{!V6_Y&@Zc1Jt)WjD1!GLQ zvGg<$fKxAe{un1La6QIJC zoBFf&p}(H(FiXjxt8KWF;MGs!`3vk9zWOdwq%FLb=0a} zu)i%S-svYds=?0PdwI{ zQB#*Q5j+>RiMa1&HpYMsnLo{gEkjlivE;x)+pPUMApzS6`A4^O_p}(atPN%Z2#nk= zSQHjrg_Zaj=ADkZ7scrQG<1)(u!a-Mc1CgpJ>lb?B8%8B3G=c< zOi3fe4(3DtR%OPEySql6+uU4ez?&++5@Aje;c1B7rUN!%ZIxX`e%XdHyxfqCTLnow z2OZgLI_ar4-=0YWsTQCo@c_9yeBksTOs!vB3r~S#oWO=xSRXUUE-zJfs+IY(s7M`wI0#y}=EvO?k{Y z#Vl*laT7gw=~<|1vF2O;5t}sW;tt8%U(Akte%3uW=&j_f5OF8}&^=G&$~_xb4{fRn zKAKO;)^OB_w#|toAxjf_tg5r^?5UQ1$>4pe%anA5+S*3A_$3st8@-h0m$2yL?M(@w zaOrAjpqc>pu6)%Dkpjl=+cNt7NAT?&(EJzPlq4!!D|up(vt-cBysV6_#+qGN=t&oI z&(dPPx`iZw5^zW-UBetFSb&3s$`nbMV5&6h*1$Ji8=+kq(%C5kLiBHgD;5~`D^$(= zHAtxUC-hloqNues7EbH`PVkRF<(HMf!@qb~IDut-FjL-Jorek?GpA_MmD>GaUaoxV zf$UxQA-Qg4x#D4S7zuGt0u2(m(I%$?>T0X`^9`{dr5T`bGcL zf}cRF_2k4kc>z0&<>@O+kJoU%ImKR=xL5ggt{Ls7hWRuWluq=+&-xkBF(IInKf*^o z15hS@t>x41&?j&U&kU8;Oei(XjHew_Xp@dJP>wRakP6X6SaDq}4hT;s$~tawuw#3Y zMbW>;>(!jmZxD)P+JkA^_ zq44dP(Q_N!Q*Ilv(E-n9pbuOK2)LQjW=LO9=VGo^YBL5eOn76wzW6KzHQ7WQbc$G| zNYFFLrCEJk*6hQXkmWFCebHww;>?>^?zeSvzHQ%nZE{hBvu<_+y^Ey8_v7LWyNXTiS2Inxn`IwK~diF^0?x3q<#K+L=?tplwrOySLG}vyM z*jhY1#BV5jC@KJaKBZvkME?pC6bo+d?%!Kmqtpr+QcP4Q4#9d6V0rvnxjwssPq4o2 zoOw;f_9e^$GC`>}ae^Ug`#myw2qFEe@x;UCgZn2yS8nOwzcKD1)JZMUA$T zO=xH+;?LQ=S|UF|3LJh49E5pfLQfoFp&@bfzN#~m(cbmOvT%_4!i+ItO3;SwG{*oa zHaoVqSi$>o1gY|F>4_GC!Ft-5^vSkk3zWKxZN{o@1>u=TfP|>0aF&CdP0h6<(;mc>@ z8@O4yGdA|fv}x`;HOz8Up_-)-2|@K&?=Q4U^cbAK#ozwfUvuKLIb72+TO;FOB6|hb z=Q$6~N%XbjAfP9~p745uLKuI}5mto$JTtkM93WQNC-Y6f}55|J8gN_PVaV-w3 z`~}h2)^lRTYfpyFizF50ZZ>~RuH;uxz*J#_Q)b>#i<4A<+xg3%MH-?~P}DGWPqnhf zQv9tR$NRIUx~Ed5v$8}I2FNSP;a5W!rR4wJ=<-pC2lKN}g_Q4SwM)-hQ%AlmxXzQN zG#D+~Z~KMd44s?vtZ`ZW(2sA#-@Q|%6~CWHM)Op^uHxVM8w8@@?oOiRW{oRXon;Z! zZ9oTwP}RCdy9)wEjc7V9ILH=!@>y|cziepK&I(_7DpeP*9BGElqZ46J#4$b^ViKrK zFkM2EyzsA>|9iNpF}me4YQYaC1reZK0Y7eyPyblnWx$g;@l^UwT>q+j>b9l$=9u#f zeW)yHifn9b%&EzTxc$Y*Wjnba(52u&JfKUVfi>PLB^|p#ta;LTh0_m{AsivLTSYNy z1g5#dWZ0|EfLJz=0?{r_uz0^U>^Rp*ASkKtlTy&#ebZ~b>Z+%(_yo}=)}%BJbob!O z{c4VY8`vQn8S|4)K6gw$n=O3y0{am+B7QPPavv@FV!1p$`?BZMj_cU|xY7M+;9mPnvo?@rI9lzHr8dIhMwZiOuvadSi2QX_z6y+A_~$Jb)`5v-m|sXeBap zVil%~1-rU!A!1}_jWE*ED~tw`-zjcy;Xmv|UdsP?SDgK!yg18n%NSUgil!@nF9!Y= z)IwN_{T)O-j@adkwiQ3VD9a%xEI|$*t!mh;mG2r($j4lC@+3{_Psme2o+x86DS8t3 z$pue9eF2>@KKJu+-}=V44u?~YgaNrDhz6*tPWCS&4POt|rxt98A_fJf z>B!7x*uWxtq;b((a@^35D`Z1vuQBDfR9`0Jlw+iavBdOM&0~MS=nzq;haRs6@_7!w z?h2Awh^Jp?3Z>GjIQd^88S!6YTxkX!b)$v^xCQ>O*wknU_8W<{G$@MuvrrNhq8#E>QzV&`+UpdXiYm_{ zxs0Qfk&TBgxwsr^2`l$IEd~>K`B+9EvL$qQbLo8X{m(^YRMdkIGAP5hM3pMez^jfa zU~~s=hS=CMBpNWtQJi=qHEzHSKe(=JAKGyK+w4sWUVV_8eZvNdMrnLx&|&{P*%;~4 z0*wr8&yCWMY#EU7;5!YJ!RE;QyH4mOwh$7==&=UT9S(vB60COYtce%gf5H>7uK5_WcJmU1PV>Yg`DOoN} zkC~10&zaQoc8fGQ!kXGEIeyRZU{S%|TJ#TgKcSKA2DDJ|kzhBkOfp1`jo(nWFWtHNV^pzeD44pmy9?HXiQqcu z-yf~wQ?2G42bAt_E^S&BkC72{3!@SA39FJt?FH^_;+2VieVdeTt2riy>vJYsr?U}ok-jUroDTN__(BM?$XPJc4ak8?5u>9!S@6-k8$=LX*4gWpwQ zOR1xyb9l?$n7LyvTHeQ%SWMu+GCN8hKpRj%KFV)UoXY_VbYR+f0~GPp-m3c@-06Wy z+mEvJ`sN^w#lelF<7{w#5is*b!50q4OaQ;J^4!VvDGmu6!%xnlrUa1IQgmyypMuEx zy~_?&m8F3%2Z#@Gh!NM$abshI93!Ke%IX?xJ~5aT>?h`mlT)oYHdoZ3NkQEV>9=8e zg{&t8n~QeEgg4b$mS~-;;~A!`)7-zDo3-n7xRNpy-r~0yA$-1SICT=_)ecVWfx^76dvc#R!?99h=C-Jhk$HRLp-nPHb3An7Xql&v~XK@_xDMhe@0`1kHzu8<0_Lx19FA}O$nDf8Ro^p$6kh!M&Ca+H$MY6 z-ppoSO3Y>I$cBTSduK6VhZ^uE_b!yKQS9sn$JR^n7n)>xa)HAEd#f%sh-s0$Z~i*< z$b-XSav<^rSa3aQby&1EIfbM0-wLq)R87`G8z`}0aU+PoP9|C0RIx2kLU!0{T?A1p9y z+b3VkOo2H(-#PA-tD}PhoCP#JVflJ}x>%hKGEuwN05k{{Y8IxVkT zWXyn{554MZ!-d2bOk#$DgZ)YWd`g2bE8Prd1+M}#D#n$!vn8VBDnaiHj(@D_vUl~Y z?e4+BKpKQN*^KM459CG@3dB1x7L#!d9<5JKCJ>EpH*k(%w>yx95TtEPX_k@e(nwhE zt&8`Ox)$H-m(w(q71Iy>y^6bU;fx>RO&_(p9p0c3zc^~7fo_VrHqCA(|Chf@dzO}# zDDyS8G85R=Ae-4UPJc|HL6$HBP3C1H#VkmgPbH}VVTe0Bm1Ngq4)NBWqSo?O1^=;m zmxxlVa+m;@*w!g3bZUz8}5#uKCk|TM8ff zVUG$_UmhMc7j!uQ@E0s3;bcQzh<;yh3mD`IC;ZEHmW4Y;Xf0?d0b+Y}&n+18We_&< zC&H50`th9nlkM#B{G8o;jrOt~dUQlEO}J@pJwHd*UAqm_QcrZ3ToPc)THApS#XEiw zjOSuoy+UEE-^X+x^BmB>ijmvj_-%%E43GG-aa$t?XhYlJwKInq%bPi%#E|fIbc<`m-1@sF zSX3z1X1%jE$%6h$Q!$NZO(v|-cbMc}o@olUj*?mpf&V7?Qi;sx?sr+Hg{kRiQ zdiRMdD7sKV%G~o>{xe)yz4*7n-*uz*rk8K4b4hc$v?>3w5P}u;3GrR(ACBD$--X5GP00N*{*M#)K}+9h>6M6>&h4Z zehwBr=}#s$PrZBtBdBphJN#Y~>au+qwGsT@+zcMLs?3|zbH(XpkR$&#y5oTx4csvG z6=`5U04iaRwJ+}lE73ihg{p`ljNT5LU83Ll~ww4#~EC7WG4OpxV?%#%bxr zP|hc)-m^{1c-9FRgkS+xaUg6xbYoQ?Ti<7cJ)%10YRH1Y!ul+0zkY5$!94EIc2lh| zq>u3x!vWOdNzd2q@sUBfki%o%_T1si{jg}LQxWs7C)m1jnGqv37&W9kA)7&5;R5_&T8QcQ%$-)PA>Nf5wO3ovkYRA6F1K-Oj4x+25) zX(^Hdx%I4kC%QY<62wMghuB6iM#5(Z`;XD1wb(nP(Fi9$9X4>1U;&%;?1h7s;kix~ zuiSu4(A8-OZ1-N;OfaN1qiY5YtYrP|t1J;Xgm8cJ4dvL79PuIvrmN)(i`(<{()L#q z#N;}tt)4DidZyO7uZqT*w_P6m95;}M8~z;CK(hSCpc=2jlWEJ)wsHG02R$WQX6n=) z>7v!oil>3R)pg~+SWR^VGM!vn38y1^Q@1?{re99}SX4%t2p(hEj53z`ewnoOV_Y0?O|aJQ1YO1^%y#>Vi4%k+izxkmSg%KRv3T>z05P7m2%oP?93%@gu!H=VWieq7NM4`FRz zbkznHeMB~v+tNB!pgGjz@E>9piKlop_`Q))2&%FE9Bw%R>k1B?JdJ-q<8Ia= z4A*8h_Od3a%s|V{Ow}X(GJXnyb|6|8tCt^J8*iJ1Yel!xVqZ}jM@!()Tmq1U7QU2(*7nSPvOT+ybHwD&WFPb))#_Kz?I zAI(mGhz&S^bgG|sC5ly2`zwo_m6nOVC(~koQO!0@In;fdmc&dEV8K};ZcF^z_l>h> zjdl^78S6uU0mqJFN&y*mBV}+;Ng!=+LESSxBv1UWmK4yxHfb`JCqz=A#)*rf!Tq_ zCEc@x3GSlR2+QVc%sA*izyvnZek(LcgZ6)DVQ^1$4kQ;kNCllHu-k8IaJc6?2w!vQE zf8(hJ6O&P)CgR2>`JriEDfT1sC%Bxc`0h)dvdeR0190Acs`{7CfXV?Co$HJ8atWwD zAM_%}EEt1JJQs|4JCI+bK`uWZ;ux?LgWj5DYu!nx7a){~HO8_QEI5`=4eb9PPhS~U zRoAt<=~hZgR9d=QL=fqc6p$`yDG?M{grHK=-QC>+64I#%2#A!F7=%bjoUxzxyUuSf zME726&N1$s(U!hbr8qkNSa6ol3wfIF31ScNf}jA_gSL{~2Sd0tN+?2cJ$8F5}WDluS(f}l(Qe9iJG7P2E zT%VtOz$(@@SHhSBJ6|oSmN`w zLeUvY{1!C0>)|!!_H9v8F6TV6u9X5lvk%eaTuXe*rg+rIBk5bd)B7SfeJ1GT$#TV` z53MHFe6GXZTbIo`5_C}W>GEc46lKXL@B5b&TU5%X$gj%bYWWyyq3@f|Nu3;7Jl4}? zu&KV)>d+5LJ@rz&l8LPIIQX13SFUZV?|H=jki4U6Ba9(8Lw1jYm{~Uc+aVdr77>y) z-oaKP{DE`M>jbQN$3;|)!0wCu$FC;P^DStVH#yH=eCDrrH;t=E!__7+^muXaEWJ=E zyW``Ji#V21QPN)R5Q{dg_l5OELvqwIE{uK{`FP6;HIbNzfn$cCtO@;1)JL_O-^+DY z3z@_HOLXr7lRmx;`%ya}Tz>=`^18s&JQ(rw47izyy$UUChM1q zF!8J$)O2rhy4dmI#?o1V)XG@KE%XX_XWzYryP_5Y2URQwDIlJrl)SAQQf#K16>6X;b+pl?X6Ht!X~hU-*Tow&>@sf|*` zEKii~Mi>&Fgm|dTKsIk<7rjnpZde%J5Z4Xm=}kuy>{*wl4_lu1*(oP(u;1~+{gZx~ zcwLFuJJY>la8U?Xfp{o6#HwjnSP!SDKwJ5nk*~&nZ-YbDC}6!;E^VoZPiTl_cRRG^V?Q{KRxCdK0zy^7Ej!;x*zvdeevEJTR;Fi z$RdB=*H?I*#sDi!YITQc`=*)~4H9;?`keIBDYxwxU&i*dM`F#i?vq6i@4-0Q|E6Lr z>d3Qc-kC#*X;OYi0e7Q!g>lm8t8r_Hko~omR}w%ES{Nw(Cx#kZcpTe z)^%cBxO!KL(h4~MbOW6Lpt|jDegmyh|FGOXWn1CDIo{h7B$6}+R?xyrF)!vwRHtr) zqX zDEHfTS_9_6+A-{5)$J98&qdVZ*wjYWCm7j&cd0FD_DyN#k{}ZrJAIu2@-@eu!OWnX zGckD`+GfCQDXBB(WSd15p7N3DQE#x+4L8#dA4kSMjen(Z|7HDxBkz81bfR4>cy$ub z@2#hA__#XhNl9GS6dM0~@5lDhA$CT2&(gmd^Hg(*3n?v~(QRoO;)(5p``n4Fs|xy= z;~pKwDP6R6k&cMFY=yI1_7_8xwYl-upY2Ga#0HO?X9D@avDPY}qE`+Vk0f{n>Z zoqD4RO@S%y0gYJfNCi23?5`dsGd6w}8M3K`EA5rs433-zVpdyMs$DwsoYT!Z`d*IX z&G_8(AhRT;4CTmW7_#|P|K&UnV@^^D{)X1X->fw*$S)h3ts7WJcTRKvt&ARx(*MUb zs6?JU#JlL;ZMzd<#Vn$J4;Aa$(q+j)W}+}%Vu-^aNPrm;DeozMbpTV<5H)+33O|Ox zqV+n%>N-=D7!k(4`3=+;ZCcnlfR_d6*?^&N>kytl8Zrx7^=mFAukOv5&ku$2gfYFB zM9gVYY>X&-go$4Dkd|b2yE=Vt#c{sEr1pfn2RlUNnpaMQa}{lU&snSA12u~giRcX&ws}Mmg`hkCo1D3Exu~I`A^!Y zVp<^)E_C9TXxbQCHg*;lx7wKmkj>`S?^ceEms?#{t1eEQeb2U`HlV=)NniO#v?*zx z%Io#?v2u=+>G1I1Ww86u!Rm&#d((shFZ%|@di3GF?nQ$~qaG^$PP`WwJ@WUT=NCep z(;!8SHeiJOu|z+o0iz1$J>_*OtL>cwfxAL4eruW=1nAV)gvlLQysG$nDKksD$5&8s zkgHS3#Je?Qpyoc};mrNguM>ZX?-BkfcH&ldJ-7I4lEur_#xD$b@0KU3Ja(Gr)h}bM ztisYQ#epRm&SfWOF?ptm_UqxEb~Of_Uc`1rgp-(I@|yVspEe$B^XA$GGU$4_6<)Ct zZ11znFW+=%kko#G;`Yu=U7Xy~&D`yL)9a-L)U2 zEyhT%ieo{YG>`RVXA_e30{fXbqsGn_+5)M;t%9iv<1L#K&UTVJ2W1Rm-Fb z5nx-T<(`yXQdF|kvs#wqR0_|dY+TDVmw2T{p~ok0+>pa+breoU%oAwEIuX-djgilB zs`rXNB3rg)qq&i2n49r6g&o0tcODwi=sq1g`=j;6O8f`hQRA~hHUKdA@twSUuMmr@`MCR&6cn4vv6#;P&<))+XnHj9UD?(RXR zRWEybdLm^4O#~-}6MnfvGJ-h$keip}HMoY9D}-!*`dl}Cw#5nF??J0h$Wl3B-0+ryS+==dB@7Tq;Y{Yvnyj3KCA(WDaaDzJP& zYCPJtUXuh2!sgQ|Xu0O6DW%%Su4^3=Zhx0UtvT6133tj1TE~n+8OkzC6|YThaTQC! z(IBB#U5Eke*UBJ7gv9WOPvX@6-M}mvf=1B1GL?d$QqwW%JF$f~;nYyFlq1yGCn;rr zM@Ni%)t%T>Zsv*Jhn&nQYZk|mE9s2|y277$#DR#hw-I zt9>nnMvM>3+pP|*y=rMUDrUN=Z48OM_6{hybqiQ{%_vorV^?YLy9=x>yq)Dc;!*o8 z?#elJnjP86?Ii4CtB-bQ$x;;m5?_8PH?mIQbFR0PZQ7$2`ZGD!&C)LzB&MeZV*{(!Ucm~W~)SDYbo4g4s zvC>m@lw)6BdBdMx59dNBtI{GZn_o{VrqPn2+<$I<-mAl%-GOK0?92~Cnos4;p1M5y z<&r6fO|Q3r3zFx5!@xTz|MCiBz)gqqqeBCW`S!sxH0}7i{m_~>^V*$$&=sY>0Br8_ z;(UL_*}MU_ZF1D3Y(yjnSKWu|s%Wn8UCOfOl)V^g6xBQ=i5cDeB7l(Y_fqb+-1Oj4 z*OB0>Z7k3x2rc;B&#$yx#gt!?DBwp$|8S5Qv;&@4v-GB7F}r>@lz1@gjyEFqP?*_m z4cBe(GB+3n5}vCpRmoQFMQ4JsK6gR1pogjI&IZ;7L6%z(vU*C-$nedhU|SLdAyVV> z6GR(C0bskdmdztGd6TQww>m83l**>o6X&tM-w4?ZVa*MF)a(nz*t&h+Mpsg zc1~M^Ua{471}}yjNq*yWaemDelj|YGb!Bboy)@CV5E)`M;)DO2bF_x zcFG~4MGOc0Bltc19zJtU196Wv5-*z?5D&G7rvBmI6Ps3@7qFPO6@8>9s@ZNv%)l%q z$mg?g-z0I0F4{J*C-uG{@#-6x^pUdv)4%=E;!V213Ai&A5ivT#lMEr@gSI7`^%OyQ z2i=u2%Ys-$HPy0Ft1>Uyeuz?Qn=kmdIy$OqFCH^7x==2juHVT1U}p{@IKZ$a>B!q$ z_iqx7R=(lvZKEv07Bv6l=@HY!jiWtqKQ_T;l`?3MMOmiGs@68t!U^Rv_hrhV0U=Qr zLVeKMsGu(q@q8T|)8e*MZ_{0&K#A53rDxM3xl_Ii|2_Hq~YPom>1p^R`;{-=P43^5o8n;tJJ zfU1pvWO0?+q8mveL92}b3UZ^g1U^lLhJ(8!wM=5O-(mYIKvY^sIk+^zd0O? zk_<1uWmsAn4(~{Pzh?{>P^(3-8jMKhZ(Xxc1f9yT()`%E2i>3$R=J^s93C;&4n3aD zxI$h|K2~Y(ky6;u9^Gu4t*>Mj!MyR#5Xuu9>A*DR4uYZ}+2)}r`%*$mqDsy-`Z7$# zpr392X|p6j18tEv8^%J5ep%7HUrFv>+-=_X=n)qCNkp5x{;+c2lqdtq+Y^CkAC9s5%nG%m#SH^U{DI(o!p`f&H0sv z?N-z375_px#=6{Eg+;MAc>K%yB2BK{Wx2bGF{wU*0z#d%!^4cDgrwgihjo?7Mmuoh5_7vBzsJI?fg|Ys^jc z(f7r4pe$*&0eAPll-p+p6!XI|%v-g?Qh1ApIKt62xfS}?i=!*P*+TvoTFMSApY!KI zOmeB%f`TtWA0uH$N>5M6&r5syNXuwkMD=oc$`U{E?)S1POW?nOe1sM(3=~YU;!)^u z25u@&WD{yKWB{t#k_9>9!9hbaAOFrEwYfuTD4fsXUKgP21GX^sE+hz`TX{EPt1IH) zOyK^0L}E$-pm;+AYh=jh^RzS(p5=j8nngMwWxhM}g#Ow!bl&slBPqcgLKd{|n8;c< zzvR;5o8^C{_dTA!4R(1-^ya!>5Te|7I@?H~zVG_{P!u+3G|CRt{ox{_X~RY=V^q)& zB04Mbt`oc~-)QFumC2bRF=jY&Hd~Zd@gF=$+BD0^`M_?mTy@`Z+Pviwu_}&#*&2D= zEPY-~X$ik4Ug5Tk1eQ%UuR04w+-20jNvTA8w2wmj)6Cuc_Uju08#4%~10nVFNBP@w zTS9RilINwU02Zx7DfN0MQ<<=T5Hc0ov)d;i5yeH^R=Leic{`>9wsb(K9Fm6@INZ5INAli9q<=?cV(vz|Du4PN4bwbdFCMeEJ*&5x8{PoV0m6sj)Vv^~ zC*_4DbZUm8Yg&&z zznXfcvkHrd+{;3)2W7$n7=CqA?R$=R!Y0AEPV!Fn7@BEm|oG zf_xbw9^4c{{VPW~0e1xbeHO&UIE+YQY0>96ItTIHyDX9GC1Jx@!IvET%|1zHfu!{G zlpYTc?_-qz)2Gy0^|50}iuLCKQ^*&GIlc=5Ub3=Qe>N>D)EH3O@`W+|_!0kNmt|g& zEee&sfn7{eJ>_75AUEI?|Mw3<3O9gy>AQ>^$(_CgPHE@QmX1XU@+a>`SEDmrNO#k zpV15VmV2O?=BjFAI$zStmn6DQPoF)x)fp55djX{Qig6LP>uS)l@}&hknw^M8VerJD z6mV!{XbSmB2OL4t-Ipg3YfdmPO-gV@XU}@ChkvBiKU9grDwx%i9xrk0b)vY2C7ef; zNVrR4hS77)jfSt*jDvUIR&xCwHjkHHfH;=SE$fhI#}*os$KXn{&JE)y$#CaW66@== zWbC3?kXI>)RWkGDJ$1t58&kz4gdcFrmHI$y-si^N>hwgD(LKSp)5Wk7dkS`5-_aKT z=s=skkb}$d6W*DJDc7DJivbh7$Bpp!^rd29I$bg~GgTCg%H_^q{0-pm@ToQF*pkx1 zhLRxpDN@O2Q9PY9>lp&kuj-TE_I+G@LkFTZSf$fdePNMyqr8D`P;35f+UZ8WyPu`T z216m(9Az+mSxUUEO0|}U*EltDthIw(@mCv71iwdLXGs4G@$nZ`XUM-}n^d;DenS7= zZ}2HkN3MFGQSiiJIi%cabG{G&i2d=;|DE}wgdyExBI^GV^MCEwKh~QRj(LCHw^Cx! zKH*l!uZ|{|(N4*Zoe;ik(<&%|UjFtC8|dip-n#*YrrSity&XWuq9gX9w~z=l#~>bs zqfP@U3Wl%qf#?qP*&~iYAk;zQmwPR1e8YRYq6vi1ewTlr{VC$-CW5E-Xl|whSA7yN z8Fop1T%7t&%xVmk&s0);WB^hYkbMybCIUS$u!rThixJ5Wp2vl(G%VSE{OPp|Er!15 z`&mgO?_l)*{$1_kn04%D10?}1gbfWKxw|u+&tz`E3-G1I1JB-J>F9_ia|0fAGfX^x zFZzDK)w=-=djImFfQdZEuQudD8bq^_8BqZ#0L?%Pc)SWL6wy(FJR6iBE6+2M#!t&- ztLd;Y)F$79Y3o0o{B=}sb)5it!}6!ae;tt45U44AjEw+a5C1jH%tNq3v^}5W?vK*&|Fr` zC3uV4ZK$2NvafwYAeFY1)4t&9kkzlJxDP zZsF^C*-5713zbeMjuxumH1P_U$K)s`MzpQs#|GN*D^mQ}fWr`+af<}C?a)i~jD)eyF@Rl(PYB47!;+eG? zj1pHsm0X!_q`#eA{gr({a8$_gZy z$rkGa*0lT_6>5RPkuhhlC^=Tdh47T(@AcM3fC%8u#g`BuN)`S`l-dIT5R;Q{&&iOE zNE}G4QPLgx3HyH!IwWYpM zq$Snbmp6Pry8I7A*nsxxZ6weI1@fHY87|CHr+I~vO=}#Foa#0=dev-&fWBP06Y07o zuX-BmlVt-;G1Eujqs$sl7%2xA_7{;sg%5rqoe5DQ@h^A%fuh)Kbw9CSi-12Y#?-JLpq69ud{r2gqgTcgSrq8Szr{Xlv6rNi&) z{xKy8-MA10I*%N&1Nmyj=AcsS$u7^$O?z>-~aAtil$Bh{0u~FwVR}~aBHu1=h z-Y)%~6d-Ik%r532s_ipgh5YK$SPp)}=kGQ2>;FIV9C9=DkLe1JD^v<n^a~Am^{p zUx~tGP>n2Ns>xoUl@+J{1`0GuU2xMt#XUM7t8!Z<1~gYaKg__MQ{|aIasw1E+7S+hRR398 zvrglXpym6J!)$8GM67qq!R7ClYT8ZoWCp5o^qQJFT1Z*xRwpGb-TUiTrJaW1QA=(AwWtfTi)|!w@#1We z`nbnaa@62~+~*Eo=<4;>9F3cu3AwN;+U7noLLqUu6-1jq3hqtqme}Q zYnu)lr7}cP*tK4gn>0s^B!x!eqnpFwe-%I68_^XZ-%tNyh%OrAh42u8{z_~X5$6^0qMmT)d4mcn6uB^612;cLqH2Sv%;kd5Po=X|*@h0M4hkY7J0%w7 zo9?rBy6YiDTB1splO-BObr!+mDQfwFWPv3XGyti&^R2XS`g@vCq+S9c>Yslz+WDqc zGYP~aJVg7(Wmi}!I#CHT@wIGow1WToIw5sKc<4aQWhD&fhh z2$KL?C+GtrKKtBZ$xc*(F>jtxg^I-^>3@AlkSXpT3(U`#(x^Fjo_#9rzKjKae9J*O z(qf~_`E=O@uX4*hDpwgUF)NYaL~jkmj8@QS!>((*k@7BUJDD`GsFG_=k(E+4e6Kv4$Y`4m{SsteWP^8seLMuF(G%gB*eqx zX0xpWME!Q_(;4%fN1pIQK?5(3XMt8IWq%g4k zGJ_d9(NP_+RGVrZ2gH#Ts?#UNj7+g8=kLTGW*`Bg^0jWJ+Kzz@)b1S&yabl-U%Q7e z4hRxsY2n6tyI5=R3ayLZNs7r0y*@GeO>SCgw(lcVLq9o!Iceo*3NmzW%eiIUEvRN6(1T|=8bwA z!xcnYZi8Y*Z^^l-6-%D2__*gV!70H0aWhkmX#grd7GH(YpnfzW@quuN^CRsedRsU8;ixoB@CoKECHYA9KuB6Zyz|(4d!z{sWODrv$c)c%Jh3oc9l_zN zB7p{RW%`~8(eT26gV3(X$Vh#3$OEmC(fpy`=2#(*?)mTiJxmuu?7lC^2+uGDX(r!T zej8SR(XwB1ox8#aTvJ4 zF>tqPhN3Xq$;ZEL`H4CDkTeIen;Sg@iQ_l9EW|zs@XaEX4a^N_Z4KxUBbMOmJ^Ob! zb$jXwsHQOxx<4m>r7lAr#0|ecWZw@YJC1t!KrpugxX(|oTieeJ-?STI4yF?pXJ)p%#^x8miTv>54_ho2+cSyEDcU{cyW=4*@kb-=2jk+qDj1o^N_ z@#OM9ll)i9RSH+Tn5%h9r?R`eyrZxQ9K*%bCzrhGJ}Lzl6yQ_ojIae%6uCN46ed_c zf23(&MTEnGT35XhH;cI+K~g@mEtpi26v=#`_Tl4W5HE%?e>l1tTC2yMpfVw%h>1u! zED+@HHTq$jSaZm8IkQLlkXPAAof5l!H{g!8#_{z1i?OC>QkFEGxh0X5ONpD!`YMjJ zu%Ks((jZe!@#+%};~UYHtZal!l6yaj_oJ-G*4M=C=@>NpUer7bRlgPDBI!ybO0Rj= zE;NaA3aF4SQM3a_cK=RWZGfw-dNX3`KDPemppIL2f9b=%lx`XDV;LG^>6Xc?!$MvA zvrJawJn=)kLkZ+g52-te%dwtSTAe%myt{^%Xe=iwwfpo`EW@L@P`NXu5T5r^@u>#u zU&TRsievqa&fYjT<6iNEa4-Kp{;{651>}mMf+-j3>U7!nR*a$5hkjyeBuMGQ5?(sD z$xjwE+_omS{4fLz1V+}2Kno@Py+Vu2S1xCu~ zCRO8k!rEi}HGb=|fW3gwx^AE3>7En!ok!B>R4R){kMIEA zH<8!15 zd)!GLR1jlhQA)}A3s3qA$(AOPeBdGn&vVuJ_o|)Ue&}~RU%GrxU!Khyp83V!k11bF zZ9f6+gYV(n#a{5U?M^>@ybQT!v1>5R3EuHu{6zoN`m6EGAm*j(d5suhZHQ%%Yk{(i zO|nd#(a;xb2bd>ff4oV3Yc)kBmDIY?eyx(Nx$TFgz-9CKOR?V0Je$uNtskKW^>Tmd zXV1cRz1x;wO+o|S`h-hUi1N)_>5uN|s0LoJm_EJ#?dkQZkGzhSQz^)Gg2p}C%eXo| z6?{mc5Ls~4+1c%0X})O_8bsoTkF-Nnb@Jp_?{R;Go8@kYD$BNJJiQHT>XT{5`=t+f zle#KX%bAzY@Tx7I4~YbBcfl+xtSeXx3erJqCQ09E?daDxxzyc*9r=lRoabK@&MZH> z#I3rp?a&ZbRz@`FfKpI+aj!N?mMa@_KO{V)YliuPD}0$*adC~ukrid|DWlHqlZ7@cdz|kMq69YfQ&}ERf&jtaAs&)$$RS0KOh?5 z^uX*wgt({s!8_zcPrUIZNK6K;b6HTqYYKF+Mmtig-FI(da`FEC62Eu#vGf!0pP394 zSEnd_B?!7Ii8{UwZmxJ`r6c(a&V$8{-@_~87go#UT|}~2?L&`*riNN(opRwJ0ZeL7 z;tRjG%a;Lm9SLdaM8^jZCILwY66??$?b5_0pO%4W;GtLo28!%Tgl@VrGDu2G_pPn5 zf|Vx}a=Xycw+UgK-^iB|>>_2TlR|-+jNw`Z;XX|q&3?JA& zLG>0fm=!c>%|amE<)jY9~Y zzjJXJrf?eKXY2`t?3DO)-2D!>1p92?N&KJ|M8tu`rK;;|F_q>lR1q%hf|j&a9}t%hM$O8FhE z1ZDRx+;R8$&5a0FtY0$_N9VHzxrVZsU>IR9DCKO~_c=V&7V197;6@tPTYI_{Dqrul zq`X&bq7)iKgj|<|diJf0bSsgM+WrNZ;o2nuUPV!sC8)(LB4(4S2L)u80w2>?{A3wk z`>0Uey_(N83hNs-gK})PQH9IEW~miYoy2$E=sjuw5V|YKH!o&WF3AVZ= zRzSIk)3d&82{RcI2E;>HrB1@7vr(NTbFYby(pNlcC@3`%Qpm_|zIOdu@;#~KJZJZI z-S3sFnKCmZpQDbQQ5U0p_2vr^i^=~fCi!e=LU$L$=d5X75R7jnkn{v(T4KpCv%b;~ zZ-HeCipU{>3yosr7_bv{7UGIr&~kfyb8Ozx-jihuL*%W$G^0)<8Pbi^YHPXsSh#u) z4SACQM*%DnMo}!(tnuK-wT3q9yCX6eNaZv*VUmpkX4Y}qCsu6P>V&GNm8qo zl=PF3^IJ$}0!bP=U-@9hjC%10VAjAk0dHb)JUCP{5#=QC24ul1yB5G4ptn63Pj=7^ zp+$GjN(@d4?887W0HPMOa~M*yVKxCEHS6MZgVj4*Uw=}#Ca7GOlPNOi{TjqYqw}5f z^O3I%R+t-6wM7>LC6Diy*oYy2V%pgKvWvs{sBn|8Wff zu_EYS{5r$hR8ezF@%%I8tGu<$v%5|DIGozm7D{axLn|yYV0n7G@c!Hj@7CLgpXVKN z7F=?TIT)g5vLlUL%rhilsm2dNCAecHxRW*hWP1H1Ud3iJmFMu@Otio{C(4*x{lj&N z>^&ox<>5a?U`rShq@-tBPA1#-%UuLTSo;N?8o8R-*2_M@Y@fklfpHT5p0)IjKrvVuk_TG)wOqJ~6gL_CtaQt%d z^TMx+qcH%4aKu;X>*cYU%+&EFZR1*h!P75GP+A6{DK@UU+FOK=kCT$nq1BoSe1>;h zBzjXvUP^6sm+MM4g?uwdGey&mW5a zr&%wEn6>l=C#G90%S+_=6K6GVJjGIkr-xNY%oRSi+M3$Yr%m(nd0*$04%frK@1=Q| zjsfaa5FH&UfX_rw-_8HUTn&Z4-#5PG_Km0r8jw))jRjn5cEXT-b)`DJ9VP>nU%lT5mS&+7kLsWSI(H1lT?YL775eC46VRyx=Ldu<{1BSeMLX`B=1m^{ zuwe)p0dg3Pga49Ih5oK^Fu?=W0tt&t)PD(z{4-qGtS8ZW^wTtCA9m>Dx ziur0QFMSfPBsaf~ISW2k{woW*lD6quZt=!I+lCj@`gjjVCBH`srcRNEv5G#{MsdGl z&Tqx-f08phw8@CbhC!H&>0d%!NBq-rQ*-G)S8>Ww-ay8eh4$zGpLrXq!dWMk)~t<; zsuqUi_22NBEh%38o8~kvM1Sc@K%;I~CG5nyoGXIwH(rl(WR;v6^=vR@UBhDF74tdc zPci5%c7$plqNS-Cye<{Oc#99a+N{*e|DG~f>Z|<`{`#fu( z_rcD(KS#OKJk?Na#QN;IRz4;^IjQdjWHV~$5>M}8u!rjmSH`L^rV+8Aynl?mC>O%z z8thI$R9N!|=Ry;!a* zb)mA^k94H1*k;@@i7SB+XrW#<-Y6@KVAOksh%~O?;I>if-#4mVC_3tpI;@`i8LZIK z2tf&VP82WjAGht|0`C1kdAce-a{1}}$2=%2G;}?G~{<{-E?*%*rXonClL3?{b>ivQ)HH2(9NDikfq6fAXeU0F_*bb7Q; zJ1~B0xHfx>Edm>#3CA0(&k)3%F#YTb1VUO!?*o_q;ddmuMu&td#qG^T$@42AbGXG8 zUavetmcly|X6b@zY_gMwj-5C{-XUQU56T73vIr`Rb8Oc+@XsPw9)6X(PPF0K!NzQc zM;f|qM0^rd=2JHo#Xgf}*vMNvBX}Q;El2uf46fHQB>e7axEv6T5$?m@pT_c9SaId~ zH=FCk{w;;y<{O0S1g^h9>omZZQ8iOjSI0bep;CZpGQ+x)K58rO|A+e_BBxuV*544K zo~2Rrc}{!OEOHE8R(Qz4A)bf4&5 z*9=z0`#cNB9Hp}cCBNDUlOENOVjgp|S8au3cxC3JP(8+v6hG=>xf>RqN+&E*oEI{U zjMGVUm*i}pBw@525MAt!B1a83{*%0a47EyLd{~*d=*E3jNt-1G^F_hP3Ac*iQe3K1 ztZv}rg?p6!_&rLZmy8a1sD#=MziRF#RGnT@v7xRz#_!c8iz|4^Z_J?VnOsQJul03N zCLJT2(%wO42AFV?comWNZb4Hj%EY-!A_*n>W!m*Uy;lROK^%k-g0YwB4Ls+dD;)__ z;5ps6IL(5u@IGe(AfwhX8-0oo~!>7AY4XchKNcrydHj?1FJLdPDu@wBPy6*%z$TQaIB{LI5gw3kb%oLXGP z5@Sn?GptaboMXbtjHK|H=W{sq$OxLOAp7r5&6Y2A7cazUxZf7LBxR>bwx!m-q96TN zTqrU^rSqS+Uf)hM?dbQ#TO?9b+CSpP#lf3hzKgYY_lk4^SHCBAZpzZ{Z zou~<(7O2vN30*S;)pP=lOt5gz1p49_KMLzb+7aSl%Lah>MdSHp0^*Sku86*w%>%xB zx%%8xtYBjY#|YNJGo7&+e&TZd@3VsHCdb<^!?}@c%t9R-J^PgF-TYm?>sTd$+BLX6 z+~y*hu6|D#W%-2UdV?H9?xb;(odm4L-;<^eWqf9$R}OrMHdp9_`(6Fkg0kt@c8w0? z1LPxVg|BCQxwnbKsf+S>RlZ*O-oWW=W^-#jk99>aOjy*-|BGU*0sAeUC$}fnq$x31 zztTKF7AU+kUsn93`YZW-WuP0yWZEk(d5642CGUgGtlnY0`ITy8PQ%xQMdYZGb3#&O zx;4krj%*g0IXC+HR1!wjWFCHEERIh`rkrJGY#Mi8>|#!+d-pP-5=34l#TVuC6L;2n z8ia-hIp_Rn!CzNxE{qDwVHD-woG{O)`*<(71W8GDEaMg*bs|3y$J*gM`WVAtz-vxJ zHI#XVPC;5M{oj@5Y?u1igv3!ozGEpiFwpJvVj)Jm(8gUt};>xnzi91maLXcWf zpAy1@&pv!VeTOoBW^z>Id}A9IjAOKR$c&|=(h+P>b=CA^oh@w}OYB$4{^;a_##8q)Yk>{v6Mrm4<;Xbk!v41q}@}_EapJMyXduMgEhK=B|Yys41|4Q-?9Umwyy5-xw}2J0_oq3|$tWza&6AZhaj@5$j(wv2XwR zxK6)P_x@PXODxI??%$f>Z&G?oLi=qqpVB#~4kDEGv(18e19=VI9fqEIdEL_-X}POR zYJ=l5EkrB_pM6Rk%3ZB0YtW3`=j(B1d@*E0NzvV&i+-%7pkGmHz5!WKAjxT+(Z;=N zdjm;rjVg%c^i-?i)yOZ%u`h1mswO`wW8dF59e&cB$xkF-m_^Pnjn*@68%vNj`u-k^ zGL8de2Rt#_wEb@RdS{UJwr|eNKPikpJkfT~Fs2w{0msg6ghTf~a z+3-QTkex*1FzrxG2{248{7OIwy;U-m9_ZTMt?&TU4&3wKcw{)c!Zv)8HEj9HQ#j2h zYnKuaZgHoNP?wi_SbACd-DqxnP(~ISTvPsb`!;TO^1J3m7~#(MdK;8<{Fg6^-mU3B z6Y`JzA1q%lU^w!|WKuFJcQaas+yKj|zvd23cgyFsvYGv>;9f?0VD?8R^bfF|ZsE9- z^fmJfhNL~t@2Lc}{bwbX-z?p^Qj(FbLd&7XWmD+9H-Hakb(6KPMJl|?Rq7-P@87%j zWiO3pHiO#l6#?m<{9R8Hi=<)5AS8VF#i8L|>8j6lwm5>Y-rP+ti0+2OKy-;as3dcZ zc~{qx5VJ&*fAU+zDNjw``nG0_d;wzj?e3my{GQ#E6sRy3$BrA|L~*Zh`~BQcmO$KLHw#)(Z4<-Xid>pRn_TU( zmFaU6DgRTNVV{8Z3_{KVPLNtIZ;BcnAVQy1|7*-v+~nJ78TY${F7CoYdG8$wz;&2o zpVDqk&+wXg^OeP1*corj^#JU|#7_P?1wl9L1(YZAe&x9EQg3WhL&k$x{HkmjFR&q5 ziqAY*zJmYhldo*E3ugig0p^|emX-PZAo@FL&9d>*{mVvd>2@{esYl1{TS%P%>iv2Y zd7$rud$_5@=QQS+M!1buHATZ>ManC>n0NZ!AmU-o2WU3Srlcx2hNHal0F30{|Jc3P zA|KsWk1Kz;Mgu`Mp*gR|>npcEetYS1txS*QBQq|VZv;KNtYvICi*s~96V}9nTjnvX7+YNtM3j%;bq|Y-^=hR$5=b}cQg+}rw}n# zs12bUQ8{uuYw*wBV(F2hgc@36a&`#S6i|AJ2DxEsZ(SQ&>CkeGi=@t=9q_K5c**d_ ziLm+-z!eDS8g#z6FSNv9m74tRzkx(R zfo|@7cJODves>5AtJoLiSZfpZBg5d6=kuTP@#FVnx=8A95Rl{d>AwxuFT@VLpV6YBBv^_d&0>TD=C5J8NMd=^-J)S1Q z?2C74s>kToxi>2m<71u{jbc$IxBCDz3v>^<@^_o_li~{F=W?gz$+(x;5kM&eMcv48 zh({8#6hCJlq%W8y_27H?tqf6k>|$941AO&mnh05*XVVy5v8IjU7`yhTdgCTc#in2?f5D@oVdr62renPY~KMYFo#-RtwsO;rgjzJbI`2_cAkwer_^@ zk4nAEiC=7D%i|>po6HB2<5L*Nnrw(T2-AUM!SX7YJu{_zm=061QNax?%J<9kto^Hr zxMwC!t8UJe8dVJKEBcsG%CA^eZIz6OBw*Y(jGa=!I7xUnpcIy1eX2Hzt*wg5ir6GH zcS3kpnD~DGgMY6xY;22nA4OtUF$Rk>%&74iK4r9>AWt1&iP}Enyg^e)`wDN5TjJ>P zB!9#r-cHrI=)cX;ql0VzZ7|v|?Nb-SC;!}X?5wvn6p>p*WgOQ#NheTa2L>!bgbAR2 zFlvFS9X;SHIOqi##yo={A@awNuz$b1kcQ|@r6`EBh5i#5WLU(NW3h7@ zXT9i@!*sjo8$P5`C0e`^*Baw1sl*74Vpk_)>~*JSIv|PvL0D>f%_x8MbQb69zpXdB zW5})F=91r6{{Ea7|Ge03?HhRG{6G;p6M{1DZhedlu{65YDq+2FKaSLb_}(sk=vHT) z2_?u#SXs}Cb#=eD&$18DTk$70vHNPdH1IZ#(7j{0M=z897&lm!ikmaKuIYKSvTB6d zbY2j~f^ZDVGEFQ+4c5AQi8zo5vc4u0kI=em^t;6e7DNa<`BGl|IPpp9lUfEf`}k|~ zS9~;U4B}hvy~f12f1O54=vrtFHZ?c)2(`$=L>%VHAPOlhuE)1*|El$BqnzhO2~A~d zU474Ke5-fTwowZ@dyw?E#-Q$Lkcc(xzQjUEoVK2tV#<^E!=GiMp0c%)QJMKg3Kl|% zAqjGVf1f#$XTseRsEI^NcE=xm-s^pR?36Ak`XtkhK5vebpjcELt1+*nlSzg21=pwV zy-#E-shGl;eQu-D)1}58aHe^MBNhDQEPMH$JZ8oYbeGV2G18ht?r5f~XlzY>JAt;| z>DjBR*=?Cwdngti4VNn=(VZkqJ zfIJxlQUP|xZv6)41pPO`ZVSf$kFEavG)s{FY%mJCfe%ly(DC|cWeX^o(Z3S(0kMuI z75Z+VX#h!FKt?&8lTIZC9&HJnLlwHZ*?C)-D^XEVuBU(S(Qga7r;Gj)`bRknMf5-B zuNGZ)gNV|%PcKy?2HfaYZ~&>8qvRlpfgw`YDh)<~pq%yk)Sjpc8I$(HN|W}|&z(Sb z0hq|pW-NF| zyuN;VvL-RQQKqYnlQ>mQOEweK7HWd=geQ)-Ii)Q2=ANMRL%5|tq76cG^ylO=->Aiz zaIdnbW%!ZGU_rd_2>+Bw1|OSYv`g4?t)=nW0MTK~d`GsFN=4#Kv+`R$yDhBQHqla< zNR(KrzuUFE^cN{Ig6nP5*ah*CS`P8!`d|Qp&z_O1S%V)13A$xA3?%i%%8#4o0qc!j zGyjP~#%?8|I3F5TQbN8>z6L{>Za~+5wG%T@C^5j-zz&sh=RS;)F{xNnDb(hqu3d6I zb1HeB|Bfn3M9&r0{JuA%5NkqMYQYplxLg+yBSXSw=;n{atwI?(S}o?gnX4N~F6> zIwXcx>6R`DK^o~!K{_O*yQD-w5Z*KQ|E_gExb9l_s?3>lezEtnP1zGahT#@_CczRm zFE)A+U_R4NOKmRyVq#lBc8-z_dPYIhciW%gh1#O zFc3z7r(x-QlP7DVQ=L< z8Q0jLQMgg4ttIvQ)K(IqwxXb3(~JL&3sSKJd%gBVGoeF8k0zyq!7}v>9xwV~L(QI2 z^U6v_gK1$ZoS`sBUoONVLf}K4adoZX9XtfYe@N)75W|NMGG1mfI%PriSWEac2(In| z5pJP)m4p&DY76!P^>(Ir|G4+mGVcL%)P1~B(&|s3etM(pP;%uxdhN9+nHyhkAXYvv zQth?+sMC9?Z1db(NtVL z;&HqaokFY#T9Vx1dRfCrl&^oeaU%RApx_(Os0OCa4Num`vNse_41eAFP)PwgBIuv0 z_}d|lr4&cgSFCNx3Y(()7{a36qWklq)y#0fX8>Xrp;%t!km@sJ}+i; zP@s}H@%gI1Z18j9AuZ5lM^hWVqHDDcAzLP@bxsw{^v`A6Ee*Iy@IlXF-{Gx?}*I`u^uPK!HP|mj#Fzz%c*@ znn1X`eU;{6fHcw2zM0!GH8y_#l~x5Gd<}uPZEI^wE{sS>-cmf^Z43ygJtY6WF{ZTE z{W`9L_$Eau0hUo6czN*-wkm_!UIuZ+*sGvHL0pFGfXl$pfE@dfmW(j>%d$0x4l@lA z+Q;=}A}F|4ccW**nw*I{B~uqr!ZfScksEd08e+r#P7KjlA8hG|ZUvUD8(Rbz*q0uQ%{)(0*9msL`+^I~z}Z8?28t-U4pkM?(X4Q=TtgZ<5kZsr z$&dPsOh)g^E40Lv=R`ylZRlTZ8w^UJPI~d|7Pub>K*}X+TH4o0Z0b~Euz^hb&=T+( zJ;`JNsn&;Lt6`KjAv7}!!%+jAOwsVM^d%=sv}czy@j!s1QG6gjzOM-kN%uS95adNb z67una`wix#U*~cHA8vVPBF3%IdAx|6TjI00=Vtdi582epb=fK6QoT$_pd;zk$N0|s z#}ue7t+v4ardAqv!p|QHkb~3A;5W-~TGO#L0Zi}*4bzDs??F!@pjyKeTzANFwVzF4 zOlpi-$Puam5_}HmMLE2&>LDST?7e>DqpOQc;i{fSn9_kriDFA$t3nFa5T$G^uwo({zW;U_Tt0Wj|wo0`IGvLM3( zq{BrQa*oPcu$3~*jtIKfq6C}e z-{J7if3WC36~6lO;NPZs!A zz}W%`@9VBhqUTx>z*PmVe=s-zGWL$A$NTRI;v7CDzrng6Y}9~wI@-jf)AXIi=NGZg zw{q*(+MVSxP8Ew)OV(lFKL|Wud+83aA2`57Yl5-zy!BwC5ydy{mlvNLIScE&t`>ct zXmk@C6`FvgEVNZ8Dt!!(lY#caf?kGv@VyRIyi<{8lf@hr;C!Wk=Gro{JmU?M@I^HG zSB@%n^CfajdHF2n_bI4t>6UexZF(!(GES|!%lgogXoh}TCq4qkqU&dAsV+viOv;Uf z7L?XVgKvfGQnB(~%3CEV*&zncULn!?5AxZLmJ`aiF(z8#vclKPI4*&Ol7Zy zzYfPJ=;@am!Q-d>ltX&^LscUh%YYEyr^dkaaOLnB@@1L>{b?@yzzV`}W~Eb#;|oF#zmCc@(UH1PGW?^)KQ8?v>>F7g)i0&eKoD?$&4D5ksiu} zt~n(skmY?471eO11FUaz$KLj2!`9Qb$&5fXQy-6yi?HbSntlYA%hrvOBHpUMUR|G< zO4AZC6lc;C%su9QvVGLzBz_M4)%Gks2I_sm;e_(}>L!Q=46ESlK-`YQQOR-JqBMZG z-u7xAJttJ@+cGCoCyagu01=emh%FTsyib0eMCT|b!84&fPmPi?x|g>RJ`y=Lq`4+% z!O$ZB=>#0&BqcWqb;cSN;>hSo6cz`TjfV6pK{7WM*$Ty@jbD>!&Bo)rSCbr|?4lWO zgS`mRBVqj3e;=340Uqbq|L`~#fxa#@e;lxc4TvGh#7qQzNV&9WW3wY8XcH3?Kn8&% zv4er%imLNgu6ArtnEPt@xF1ckwWrL1y{r8}(txG(u$3*P733vp@75fP0b&Bs2!H)p zIuMl|WJ)eGf$f&9lyLsoezpbb zy{J-Sx~|9T8V++&@`Cj5?{=^v#M*$Y(`~KMPNqfj+pGzLlCJNpj&sW6-^fyM`{G1@VpRtL0vK<23!_khC zfk?78Ig8Vk$yoFSg$os74FfCv)Co~iB{o3A7)mMRx%@7xQq>R+m3>()3_-)sBqPH_ zPR>LOq19Aq8|G8gBDB5y_PiQy!TA^4(O<{RRL2G@+b;W?!7b>-^uzF(JNF|LtZ>~m zW*^t~%|vV0{_X788HumPn%)0@{iD9$upM?xRp#(^SOH64O()qNi?20gS5{<+uT&qr z;GjPQGGeF|05Pls0xQg6ZrhMqyTM6qCCfBhr@p$65Z3XW+00z27F&k>4;pog>>kAl z7!-qK3&6Do4NeSl+6;Endi=IN(b11%ie5-eX^R6t){A4VE@qrLe`65j4xGVY*_`(0 zcLz4-t@Yci7d%>oBaL7`3?SOc@!5zB(C@2qjjm0G(}^yZQJs1Y5En!eF==JQrTU&HhzW4ilVYADVN zA=TXGa^7tSsR2=?-)gaXc;Nbx(G^e{RpEA{-)R%a0t8w~cVnvQ0$1g#i-1PBgAtE6 zl|^xgS`IVBvUqd3flP4F*fWQV&oc#63;%W#g-9_1VTa_94I!@sTaUo%8>8ah(3As zoW21Fl@|vbfmS23g72|LO!W4Y57PuMD_;r@0!9b4nFC*luuL{*qI_rc&P%|%aN2) zlfJsEzGWY=e`=d+CY5VeD`81yRjE@@^lvR%$?uQz-^0=bRuJ?Im<2*D9C^5G#49L1 zctp#Bo}|Fxc*}r^g8|iy;N?-KN`qO+lt3rcnRMt3{x;?bKj38i_Q(GwsTHwc8uT|; z0+oc>Sk1bSzP$%})o5*m2FT;Qu&>QK=`UfmRAtp5^MqE}>*v=o ztm%|3nHt7*#r0&N-HCVUlUoDO^0u-V%=1CA{yh7{dl3G)rEXf}6ovRbK&5^- zRr^`rMk7$z_I$}hd3A-WbU4KCw35!#HM-kopwY0Dx}R{uMfO8LV~_xv1IfI~ntaoG z;wrHnrE*%$eB%6g2TzL>B8v+tXX?ogh2!U&7+zrXAXc#@4sENJ{Vk0FbCFdVp{3)#OW0|r*uaHKW;;+Bzg1pY9%`>Fhd3If^| zqyztu33CP-LU)s5XjHHWB|WCLfmO?&WSJ>%lV98=lBv1V8Yty#vi?#8qWK&wl#`y% z^C!&Xmndz+U^#^#XDEvq1nIo^DWJ~g^+N!wTJffQ{9oi`jzhh@RO)^9&71wskuxq? zQu$f+rGR9x5dG!uq-Y$p)^@-T@uA zdxETSW-!;h7-7jDJ_C9^V6%no9Dv;gxJ+R>Ct2JLqxHY()<{EEy8?iShUnFC|EnEl zz6H{xcfM=>D4>HufdZ_=kZ@Nh^v~oYnd|9SP+?#EKD2shhF&}kUd$>1AM#Xz3|0{; zGDIz=(12XPL`B}KSO%StQu->!N0U|L9KB-Kr?r5z^+h|{LW3r|Uu~|S{_Aol1icDQ z^x4V+K1_bxtX7dRz2JB>6z!lCG&5|H^Vg1Ruf8y|6P4INvGtJUph%-0xC;E7dr4zx zYery{c_vW2xWLEtxjKq`OTTdk`+?MfkD&C2fD5EeBOdG5p`dx10B0;=-H}y~;Ev zNyFE79rNy>tFQ&4`FiM&nU5!g7=k7XX_m)ewMmH$hRr1@EG48}XP@+zrkFW9A?435Z&q585X2Ygi0sVsO)k%qj-*zOuLp>K)a&w0 z(uON6H7u#;t~f^ew0CYQ_FpTIzxH7D1gFE70AllrjZ}Fh;*kLlAA2>l25n= zt$qVi&eIi?8BEshUlo;R?_ZQL{VD#M&6TG5ej7{~ASC+>$u3JLnypPJJ5q(k?*u_w z=b=~D>b^G??pe7*7HfJ(Y@mK8ErY=sSCmB$UoIy@d9_7O<$l4we=?rd75^A|D8i3M z0jPm22Ah&WbJgoBcY+8Om1xH4f@3yJ`7*QHr;9grabTd-|6f5>Gce`-uf39(WQf*; zL>jNwgMYVsWQJ!ogWK}t`YlWmXSfoe&6w^R?w6!dgq^VwS!0K1wT8u%--SebdNeYC zJCOW?xgmw|!$CNiCMe8lKN5owaA-86H4o`~4kWJi%S(88u<&>F0t!7XLO>}&2XR5S zhcBVgU=UrWYOO`Ms+VE;8XsRxXdI}jfer)aD0m#v2bL=sfNl0rxkpYo8VpgvIG2)! zCgz7e(B42`TWugY1z{!vt+2&%wkVjy?)z^g_tFA1J{0u&8b5P31zHwx3Fj z?f5WyEmcZ>tL1TR7z=CbM`6#-n3F9lZV(}6Hhat?4&nT`Vb!{VD`lcJo)su=Yl0>v zS;)wjehk$kWP+F2_hh=$7nU#(R|Wub3mc-@FQdj^IWY`v9X|R}7X>l^eUFm{z;^*3 z0UST(ls%eqoX9>wXvte<0W@||pgMk@_4$c`Q~*=Wu#Dj6zV}cd@zpWJiLb@={8k7< zmgMrS#%uuvVwlrX?6!zIm2>Y&1VZc{`<>{L*PwTuI+U;$op5K z*e#tma$PLRNM^c*W6MrDwv$a{Fu$D1l#jQ0eIfBOi)}i|2G}t=(V(Gxf-5;FIV<74 z5ZFK*NV$sb+kZH!@K(F9kL>#-y!>g?6ykO9uU*49`&~aF6YH!bOt;2)~YZV({ zDo@Kg)&)jsrOehsuIh#EIcm98^ucf-}?6xKE6$T4xS(ku`QxBT)74a+Z za}mo0;nnZOQ4CsuN9AO#jRBLI#Hs7GX>+b!RuOCRoRF-vurEBl3=%5nvcOGWkJcd1 zY}D(i!>kX6p_Wxjv`=6t`EZ~l4XfE}Z=lz0mkGA~DI^9m)FdU0V2}n8ie3a*DNsi3 z?v{jXf`I_|w83BwDBQsibb8>5zhx<_^aHT0fnyE^OaQ$D-UxuwJz;{I0!CT|YTPI~ z*s|>S`uV%b@e}Yp0?G(5hJ8=}Bl#_mLv(Jyh~@urj9oUNAm=B3`#(P;Y-a~Ny&$7G z6Mn7X4fKA+@A}7UchEOGWL>>^I_)03xTtd^_X>^x9F&!S3eO|!x&DFxI4m}2C8f$Q zSo6GCen>cjVYzqSUz}#_IgqQhb-UK$zl6l58K4@Lrr&u^;wh2i>mWs?G9!AXjiB*Q z<;p?fGI&z*Ga$(#3aN*31YF0z$(Y_3A=-Qi9ni`fRdKeE!nmXmB#v<)7FnvT^preK`0f~L2Qsb%j0E8#9$xTFY=nh>Q=nDQ9Ns5} z2v9A#e_l`cW<}IdoYcZmHxxQJhj>0F0ca$J3&$frOZZ=|NoiJp*tF^Wj-Ex`|5d=o zjLZ=Kp`z#lF+K(9yp&}}zIi3>_(kn-W3+*sDT2nV_38$HbKB8~p+Y%gLQ>u@#4AQ9 z2aqv~&sR7(>zjDEHefga!TYCb_}~S13!`UZE+~0MdXXz5+Qk%%+mV zC{!E`nos}ZHf;MP&o@=!T14lvL{OsuA<(+GWKUgt%jA_FGh48S7@t9N@*Uc+5i$Fx zG-e+dAWvsc4(&(dx89`x2`$*;K*#VRPf#;ves4?7Cl-Sw(>Y9Q{lb;h^V++Fs{`7Oh09!ynF}%F{;#)Jb>13 z{A`f8Zpj%Q0!knN`hrpZfmR&MRWnN2JcxD|+MDYRIZiLpK?4AgV~`L~RDm^o{=*In zAe2B`e9x%!q@nSEI7l;@Fa42z9!4sG(dj^q1*`=CT?NW4cYps6-M2B_Jz(qIkUsD9 zIuiz52dg|VuY!blOoMFquxdE>t$wp-8~)F-8Xb{YzXQpdn= zH9s3s14f>;8_m&@P0u=uX`OjEJEgKV`1o9gLvW?7T0WecI2Tb1b2+5(i8r4Np0y22 zql^Gf?x^wYpN_#~@1h(gO!g0nXz=&{x)329#87&sTF%Av=H67f zPo)MVJk<{5C!8UfFIYgl9T+jpcza6a$6(Rq8;E@uiD#G;--lb+{?dqOZ^)f|S07nKSJ=}NPQq<{>fs=N|V7;V2^+902H!mtY z@Sp&!3&5a&X1oxcoL@4hP&OU9HD(#)|Dz=C%k&ZNCkM2r|p;p301b+vxA|W<)B?M^Ar3SlO zJ$S#;xZWR)mY=-{KDpC?t-fSM>xI^>D zZDI9BTU+uruZ9l!b6miQe+LQ?3$a(ROganfY2WqM*r+AnMt}kY5>h+geG|})vT`{< zu-v2@Ev(@+fM%Zg4AW!;8D3gugFA6Rb>HPc$ZNch!}pBA6p7U2#{Kd)DGaDDcFim? ztJs0Qp-((R8-_&HWJ{aDodgx5W;eyNX%6YB*=$W%EOEb-MrH;Pu9G&$j_Df+wxMdG6t zg)I!ojZtbV1=LDd=rJ;5i552{lF~QJkw~e3*CRkncF5!RWoOkn`*E4Q2xEvA3*!|w z85g5zi=^Ro8^WD`6)po~5WR-ef zg)m3cA6P^$IYyZ`hUGDSCQ=trWiGNuqvG{CK;2h;XN2=nIDrv{kNU z7=5|EQk_r~ha$ocIW$||9zTgeK2nAsX|9Xo^_q|D z1D1I7@w!?Uj$}52rFbBJz)<6xTFo5eCxuS2aAZ|eR-A1y+49$4e!$1Farz?FSQkxm z+IpmmR`$q2d%wV!BP?i{(Cjzh##>p_>WwU^&nk9SfBlwPdeHWPRh1{3izl0{RRxSl z!Hoz6k@m&#`5vv&Q%#gyG5hP-W zjwiOph%0f-U{p5IDIUNPS3bE{FuXX7?^7qhjbcNOR3#26Jx2$gC7hUD!t|6LufSAj z5Kb2jog#X_u18(ZOI$vkVmv<sfSudAR9O8Q?LG&Uu08o-QI1F`X*6ZzsvsV=(; z+{$uy;Ob|_cq_y%v4p^BzD##1Ve9^@XL6~Cq-`Ag>OMZ8!u=V(5N&Ao{l%>Wxgu@; zWH$#P`uo0X?>bJ5-THcx->(Zr>_Ml~S5C>>ea%(M$U?{nQts$Ltz^i| zpcWBnm*}!mLHkiwip)Xkqp|Si+Z}Km_Xk6=lgVcVN^BX;ATLHWRll?5ZY=i}IeuT+ z(igPRUR#PX#v!&zKvtV>05R(kN%=^)suRAe$F7yl51d^K9z-!z4x~}%2xj%pU-e6l zp_mkBK;;8bA?6|4?GSl=c`Ot|Q66K*)n{3k=$ex%uN6;>2nXPpKI^YE&`$B#RyN7M z{Y9=$NDfl&JMko8=ifCXTl(a6VSQ@SOgl+=rW4G)<-K*4!cE%fLZN0GovfSJ{SbWZ zIrQteW-Vy@UqW8jP0V92P|cFViaF@R_t=X-A7hWsZAKOBQ15BgE=Y1VBAlG*aV8BS z9B5)d&kQ7amOs9+2M`n0k#cZb(0-0CLfw7)YUc5$%q10NtEkpIo&w(gV!S{DBK&*9 z|NI56+`CALjM6K405=5cXPH3_b9v7!UXeRwe*X_(Wg!Qa-GFofg`qBl*8>SauuLz2 zIf7E`*)u}03KbGTmIR6$HbQqv(k-Po-53W>A>iclkiOKMSe#z+qUCg{a5_kc@_YJ( zQ+P-R3O_K=eRu`24|&aQ4i+fahFH7*Sxgrt7heZYBH0N0uO4qs2PD)|#`93c!}Ncq zH7HQ1=&O3PN!eB%IovUG+9(UgT1={Rn;v(}Y1eGSL~jf)exBlA;SPtjE>yl}RJP;Z z=u5Wa0X2Id1@HVd9dim9*cmM*Yd!skSB|o=HDL%x)FQR<{4PUSNy24s(6gN#3tF3fTHH(z~C93=nz#mr; zvN1~i%VQ2y-SlV{xaunUK#KBlRJ%u*I-%rQMC1^Fzue>1^3zU`tnN{GYfTh7WI6Vm zvMO7V5vPHAZP5o0u$Y&JCP`*vozIyvG<(A@Nf!jTIL>u56Iu1BUNG?pdzX{ZUDY^b zfgGi0d&|b?yI+2YIi_Vn&Y^*H68j)G-k@w|Y3S{Q_oBB68|I%Nn($s3cs*N|G@(HD z0pNv8l-mlNF3&oSK2XMcbI`TPvUF`m@@h6Obq8Y~?xyg8KY3w!-^6P#9b0lLQPEuw zC)rm`Mb|eku5iC&Kro~9(FFo4>b(9})Cqc-Jh^6-uEW*BLEoBL)1gvc#xe>^Liz;2 zk`)FtN;Vv8a0L@1^d$X6W#*V{dNLZ<3gbXDH^AoWUjL}!SEmniM}Ybt$b%P-T_AzM z$lj^d$LKLHK>lw6&lVrbLmbL5D3j9@V@$);Hp8at#g^d|F{Yvs=RkP zjVt@ev^?W;a#={ycI`?bJd}Mf`JJ{3(MeWjywPE7+Pp|Kkqobnp!D#--je-P>66HvSD`NhBpUoaRxKLD z=Ga}`VeWYEN!aGmm?=46=gYQvY3}FXWZg+|^6c}DrebOMJqy)v*w6)nD|Ytt zRcCgVxJ|d5TzPt#rFu@xm+zMBzMS-01KD3Gd^E6}<>s0kWR;)?GiVgMjF!~Y%V*|g z+`zXhbu8fmSi3rV!$tkj)1oxIvGbbSFmjVXSw5Z$3zX<&XXL*qYT zA|-7s-qPej{ZW&j^y{j5aFiz!o9LeP1Gx%*BR=r@zF2Hk7v7&ezrTTVzT?OgfU z{oG897Cn)_1|o}mZ0J;#d9;Ib4|5;oD>zP)cz1$%9}^E9t2lqUZ2tQx`@)I;KdoyT zIcPzIA&PMb1uUefkomnQo zGQhEhHXgTWBR>BV5i1ITV+UL-Tgo}ruJOY8q&VGrC5=l^Vm zp!4+`{3HIme7Gv+Sz;2CvMqdC)r1y?V$8F6wpVCPzGAF|CIcUi#>yx{Y$$4-VW)^k zP`}AC#VX^yg{4StZ`%=&-)x?oV5Zv?{&4I~_@?^H%JmEV$eN(#`n$u&r^Wje+tK6` z3BvoIK{sXH8o%)}4Gcb8+7wnOhtR@7wQ)~AScXQyp-{RrZtonTC?kv`c6?Arz!FH! zWagVy|09r;iCmT?%+10VgT)>Vg_rK)zP+Q7R%o(%Qn?ApU&RKo3K z{%4XmIjgrmPxBxLsS0!Z4)Zvh3bapQW`LhythI~a2r#fhw@T~(IDY>8xzP_TquBs* zaygyWJ)t@|M@+9Ec}|BtF(g%lDx=>)7^{xzES{IT6KEZ_*aLe=E)o88k|HifF>^%5 z6Sn-^yCFoMkLSwTm=IuRu2n3k zAlH4hExetbO@Y#9tEt*&2<)+&nfII|rf;OO#{;?GNVa*8M=PmGHh4+>F18|3Fy&Au zgBw;*?wQ}M>W~dnSk;<-eC)h!Mdv~xdw+frfge3>k4S{(<^8Vu4elU*!yRt1AeIe$ zL@MqKd|!`#j7W6SzSq-)rDGtG!Uu$eWfX~5uL{o^F_OuBoe9-V%*@20IA?;fbj(zc ziXem#a>qC&&yyQ**0iDujsp-cCF_wzegAg1^KS|x@NHg&G;pfHuE!dc6n%JILL|N8 znd2nzLYXWO8nZ`&A{P2jL}trrj58o>2)D1O`eqF|v4KKCHkJd)gX>b_nzKzCJ!TNo zWW}=G=ss*oAdWX1s!@;=13L0d0*`c$e>jR{irbXh=qNc{e*!Fjt$ckal$*k8pkC&w zUS?If;8d&Q_+>4XWAWW9#NX*h3g2TS%2;&FM|^+-2No&3)n%m4z9;#k*}JHBlgACpH`^% z9MI=JgxGU(a?%PE!xzIvxJid2JwN+<CqeLNA`9#Qda3z+KhT&5#tr&vQ`ZpR$AH-DtQ8P({Fobxr=#_C#(;?eh;S zH-0w04m9ZRD_)-2K@1+F*$ej<%mnK{BbLgi?Y*X6n5upNCeke@vwQO3sDi+^paIQ6kI8c=X==%s;rIxiz1kFx5 zpZ;O`r+=(^o_uy|jNi*5iR3A-m*ve^GuJa4@vkN<5EoeC)pYu=F;AUYe{87tK?fGOeh%1;R%Mj4`7f>s>;U^Il{r2_e48MJ1I>hf(DuOMz9^ExKS*z!g z{=W~BCMA*-yX9UrK1z&w#IVxOLkach)Nq!ZY_slKZPxOP4chUe|7Yt z&&<-9q*lm$NO!L##^&8*z6Z#o_T6!e68^cLU*%WgR0&&>LtQUE-c}@3@F!Gw(t$kH zybRoQf6$I+K$VW4{L!)mt&}FUyF-Dj*(QGBaX#tUkfwycSfQ0b!~k&C-O-Og@z52L zl9CcGG>$3dzl~9ad)K+YUq)>l;ep^9T(8gR=II&!FWCO&1i4eX7fi_tx?318G==4* z8&Kx~7bc+NJxpHIJY9GHnaKo2%KC@oYzIwW$xzEwD?TVyf1jU8eI2>WLeDQOPRuRq zcmXxdS46>oH&JeTae_m-!4{4I)H81G7x>%m0M@N$zY4xgN<4csTQ8q}zocq+N@B#D zNfnb!7Mh_Q@gz(^^V!7~J|-F=sf3&QG@UyCy1Z}1Ii5Q=5D)eSz@po|s75?NkNlUP z^CMI(@H~ZP8<5A?j%*W_Sikuh7btVGyU==Jks@?9PlX9Ja(<{~#sAqJ@KH!|rCmdO z$S=oIf|>aX`Af=;e1g&AYzuwXAN{DwSl3a`+cOgHw8`5qk%iU5>x;uA>USALOKZ`R zS>cLM2koU09rLglW>kk!ms#iHWM_q{Xgiay&0@1Bp4B*JOgL_x!1>=3OUObYq$=q6tZ1@GiAHqpC@a9QAq z@pQo_M^(u4J>0m2P$)aDdyP|TQ;fjY%O7jn@P3S}h8I-EXB}7A5RpvXqfGq?OP+Ss z(_be08_JNd22A{+nd7#+==ez7gSSvim#eU!X0fNd`T2!shs)YgtOyYbCa0Z&k@*}Y z5tHvP0##-)O&0nM3tYq@#GmjInY~V4ne?@(&$u>!iy`3-#8vco=8aqIe>^O+J|Rmz z`4XGYp9%^~&j8pK|4b}lrETvl8(zvq$hq{F<3Ag%8+)(V@l78IzVX%%+d!A+G=Cev zBAS?BMhU=@jtM-IN0v;T^<$PGcuz0GzMVj#+M|k~k5na%9AShu6T!jC^vD)Z`|xI0 zB{b?ncN2;3VS2Vc-Z#A z!(;1TaH}X5f2rJigjM(9zgLQ&2>mY}1p4p|8td48S?Onx4sPIHaD9Q*AyAfJM_iK#HoXP>9slg zyCLon&%gGWODpDlWWDzLUbF-_rKln$A+Jyh1n0!~TXv6W9KZPI?fJvnly!BsX#7bJ zU+uj*By( zJm$$BhhVnt^B~N5=iXH953#|PrVoL(WGGPH>@jnqko*{M4;wn6Y_T!GK^puwA9jUJ zEsIk7T-!mwl^|I3M*#*ncw4u@&l;*AC58IEHQQun1Ow^B!K0bzLWTMU59G4GvLNJH#Eh0u{X`8)AW9ld>*C30cw7e#Q8GE z`NQ5Oj7_`h`cB;U*9LGxk}}DUzMa^LxW-Vgj=(4C%7cXNDE*E(T!8Vow>`9ubFwrB#NWk$60QKr&a-lF${VaO`@cgT_e z5!Swn3~c?}W>Vig{Nri@cR4^!%m72T68*WSV)rS}c#*U(`d_l%Y2B>c5*vH@k0{)^pppZiAKzvpic zhCbYTOkQ;ZM)T?3uT1z%Jf_8o+E%HGq;dGMGrg*{!^$<8#WU@RKzIUv)M4B#2GMq| zpXwoo$|Xs~@Wj=u+Q3q}ZyGk|ORSY@E@UzVlB8Bx(MW$wnpcGqN*W3$pqe){ypPbt zOO35tOJ4;1kuK%b#+u42vo&Yl{9LR^!w-ExUk_P6mj-K0>6bA@J$~9U-}{7x9mqrP zZ_YrPO2^x4^#3g2T{rW|oG&d$kVsJZ?XBi1L-K_&e9vYFU z_#o@TAYFvp$ui}>OM#LjCpYP3aJtR=Pd{lWpxrb`&xucL)|%qDW49HBF-7vb3!Elm zOL5`B&rhlK3+xexUcP*UeL%6HIC=BOjW~H6oi_zZUK=`-i!}>QpumCsnQRQ`Cp~qq z*HF5azv5aBQ@iy7)c8#(cDRm@g5`KqD!#C=u!v;#-L@@lU{KKM^>9aeWO_2R5aGLr z|F*O=W;}|xQfQM4WrpO-D$(C`v@I!zR|d~>KM&#*R-7S-^6KE=Fg`F0^J2A&WRDPMV1=*1i9P2ZY-oOAB$ z!Bx272nhU}2I>BK0$(%GV|;Ie`sWzlU^h4Ra+`L9G|rPC1CH@WZnNa4E8FeHYRs=0 znV4MT8UC9^Rp8&g{fOyWh=u7=(c1IAecnZg;^Fq2G-%FXuq20Sv(C#ym$e6ZthRY_ z*xP(50n?a4ebll}!F3Df;cw@)P~tHW;VY%%yUs2^^i)E1qcyVDz3y8=h0o1Q^hBa; z;Sq^4^aLKf?i7DTVtA=ZGIrQ5!=lZUT4&L|T*{<~`YEJz8Hs12uWwI{6uTJdj!(4X z`*E=&XM_Dbvi|N4Lf^4Oxw(#fE3(RF;N>b+$pF-&_4mmNz~?S>cqF-=FcRhDrK6kj zPqfXlMoY+#Wnv*e8Y)R4z~PRLAi0c%@yS?`soolc{XVHxtzngfIBA!(os&L(-@Fgu zM$*6_X*eKq(hSt|Px-W8%S88zo9P5MF>mWYPf5Q_A9#sV*T60?r<`g=@LF(^`*Lv%&aM7fICBI6}5L|25;Hb{RciIGs^=TGB1 zxfj@TEuY@BxYqs3Z=jQq77Zsj`XjHGbHuWY-~;w0Zx<+;pGDwyIS||7$MX8!ton9} z6W0V-=w1I=wpcanxygo37{u2$h2>-UENrzAbzw`q7U@@ZLYLulYu@kio`9zQGQ;UJ z(d+qJc_s|^U?%1IMk3y9;(t9Y#lrCql!obBgzbkud7n)onLRvJ-9AeVWS5+#9DpEt zQC8ifd>fgRiSa0<{=s9^YfY21@~Ur~6Q|i~|0r;6%nxDLY6reiK*Jrd%E5df*;WL% z4=HHOwDEKe+SN!Nv<|iGUf>2&YJ$)ky%b~GqHQr*8zQg----+^5K@Re9 z^7QBk{%KSCAppoWr29bN4QwUe3}Jzv*2JJrYJ zg*^o~7+7?gTJlbs{8K#)Ah$LE^;R^%Aev&>&&s|>ZCIKcZK-U`c=7G?7i#DboLc)An4GWGxB#YE|FIIjZkh4H@e`1Iv*xk^aM%|WlID^f^%xGlhOEWMx9QDXe%OS zfo;?_E)thmTkMP5(^$O;izIZt?ToG@M0*Rh?}_+-UGed)FyxVl`+H#?_O0KaY^B?` zwv=Fz`fIK8Sa8w8oteAs1cSm+-nTvX#unQC?SdlM3~Mv1gpF$i_3*uV z6$xrbV`F1;Fi{0l$*@#>PzC{6 z#LRp&iae)gsO_hWX8j?6~u8SmD4P@G?P^?+b zKbTTZMWQi%f-Hp*&jRO<+J;hCaQ?ORIbkhexy>>lM`e#kQL4xo?g4jg5BkD>&szf& z=%h6KX4Pc;^qs2RD`kTS2^}fr4wo|Jw(Cglq1{Rf>6)DD?R~B>#yTfVl%$_dp{r4S zk0=j;=N6CiA<0?_k-)9FPe&`Nng!ic9}W<-qxqz)DW3FEZQf zT=i-|TSwG5edD9zlA9a$N z#W&rf)2{0=v-}urrp72lc@}A-9Hu~W>Ju;MozB4u0k|M>Kq`9PtY5cRHI#W0VWaLs zJ7(8IMZ-nv@9^<7nR4Bv8=(TOV$rFi7lq{p%PbnqAM*}}286=QHHZxTA?5OvA)QRs z^Nw_&7H?AQ@9R@sHW7zk?tE4lAxDYB2GW-jNm8*|KDNb&pphJ~SsO%;5$VU5wRY2J z5y~nit)m8fp%V+OIFty19=}Df;uInZ?Pzo9s1}c=|19F+uu7^aL;vla=QrE};&~Z# z45oK|@>xpga+vk`ZPZyMwJ)*_wis1-^Ivv$UxKcxgY(0_vR3S>#8EC+;U)PjfWQcg zql6iMl(C{EQVz&g9KL^m6!7}l>LtOEhqE@V?ud%mAE3!R`#2g7-QOLIA?Yf)14UsY z9;Vd(RVD{KSBI0D)=tKFDatq5L3f#j#>F#-YE$D5xdm*gQ|HrW)0&`vgTTxUtBt{I z453|)8|sG168N5-&*B;ES9?ic zpXabLei#@ZAA+LzSXfZ4n@JJd+TS&N8up)_R5C5Xht~{&2nyp_VW|FTv9(RFV(hoe zD$%gu6~nQ$%51FRIELITHm0pZAf*kwU}7FLiF7FWcMW`Cb6BF1yX=EYCnp88t;ejl z_Sw`fKR=y1IyZ}-_{@p&PwJ=-@vnb=$1hbFXRhBd28DB7X{uJy-VGm>m<(bLL&L!i z%RB*a!L_a=aWeixIZy4oRtO~MtUe>FLB2XeC>n>m*{f4;CPS_xr253ENk~|JA-9g%E3C}(6{5fN=8S6si#CzMILO?EuZU`atU}p%WLyU+vUBMJ3=(`E~#q|(WprPxpm(qp2%146y&J#Wa zC1lQp|FX@%=j&#Xv=t_L8J1m?p{k!|5+hoco?p}p)eol4dEP6hKAM+PxpW;YCuUHp z35$6<{&TCn6v64Ap-GY-_pe0JeQ`u+CBZo8l7mjgSIYD8ly0LqN=SYj5uxhTM-5Kf z#Hz6}kU5G={BD`wX!Nhe#AWT38t|=&X43GKg*(f%kVp0=F;=3Pr_Z(Q(`#7K^iUrC zA5C8w71jH-Jv7oKor*|zmvlF%G(&?!cOP)*l9KLJq`NyM6{NdMQaXH(|KIa2Sggf2 zICGzU?|tnnT0eIt8{Q1feyE*?*3RER;$N|wnil{K_WqMyITN$C)w;AUjh`xU(N0X) zh7pJlzZNi_SI~eF7po^4vE5fm51BS%H)}j=t0&hs2cY~(oa9OH3)FW*vT26A#~pk7 zk~7Ig11i81?%y+Mm=0l_2Kz{;m zHU*IBe_Br?1->3Poq5(n<-6^d6A5^T)$4LPJG9WDnhmJY`nAyHaBG=_uINZYZy^;q zA5+nzuo8^A{vZ$Ka5L=`TH!}1kN4F0U&&-2{LpwAu#V;DFrs<$*YOjcAEAhXt&N8S z2uh1V<;c1?qbLGGxlkv`TbFTWXMtJd(vQWI_hLdEr=esH1dukYkSqqT+Vxp7^V1aI zHYJ;H)uD0v-QvEN;ycZ|v5#4%g1_`<>r-ODoHV2|2vG!{o z+XCnb>_FZ)FO)oV#aWCL9K`wDN;Xn3dFXt|){Kem4S8bW_BvD1fH|6e9RQ;?3vm^c zL<2*!mXW9+YW=mb&3V3B0%Ga!q~#>6*zyIXlVRwxjPfF=iUyJaD^6r#a#C~XN_|i5 zVo^mz3&m24q&k;X^I#Bj^JV~Lpo@-lSi=@Vk0BnQ_D(&yH00 zFm=yu1F?9{5-SW~Pr84k{^|C#5G+Y=o!A3`@3O;>@WNel5wT)oaQvp>5|KR2GD=vo z#Yypn*W0%oMS@Pq+*URn1KldRx+AXfIR*?SJy_2s5QKC3E{((SWyO-X_~He59F7q2nH5JR5*yLF~w%0R?mCI%q|@zv_GAu@}j}GLwHc;Uub=8`Q_#3kAhx znXkGScyavBXN00qwK@kSMS78K_Ehwy2Wf0#V|}&im^jMsQ86A$A9RjBT*iRl9I**0 z_qcwHqG}c*8o`L>0&(g**dd07e8Cd%yafLg+y$yxtBmGXx4-cyB04C&vb%B<7TXga z8fB?nT=ENsw}FGl{0|Mx@xY97mfo(o-PwT7!4LK4qx8xsrKRT=X<3@Oz7uz=8evaY z2I@Fl;#k~iMwZs`VCVZ7aB{hBC*Qp6(C&&iLZ14&*otQf`$v${7dUO9lRdB_6kf$I z25A9dlHpW5L`~6i6<4F#R5hz7-wtBGocdyMWWNet0|>9zF2Y`kiBKGuE1( zSx@#frQIptrt3~_2uvJoH{FEY*}3{9trznd|LMf6j;_`p28>?oi6=`AzVV8?sMVU~ zvzWOLq;<2YCVui_MB;G=j2X-vh_4@>5WR`Ouod2=e}C!MqNS?b-fBCcXS zQQ*XZJ>-HXjIFd(C@w`K@rxw8b@@nLsWc&^gXZ4-{Rj3z~>?| zyV-)1I|N49ER||0yq^LBWgIJkFn+D#VN)Y1u}Mb-9^rqZO}tN{ybhz(PtO6bAaJHX zB4_p^Bo2>4*DRlWPjy!zO>fr6fC$aYAO~gkI*Vfn=G3zIrN2>sd29--m6lem{+|5B zXUrxL(A$KK+zXg-Oxemv<;{xS6~i5#5fRk{?IBV0%Sm6canr?FKT9H*#G72?`v8k~ zsrt#M5YugkZ|Yhr^&X*s3-6W0GNc-XL8vO#@=GbXclyS9FWJtxh{%L1>&~uV>pdQa ziQzg(%LhRmIRl5hL-MbX;sQiGF)-%Hi^!atI5n1S2iU~9aE9k=kj5P6ov@~Ng#E&y zB|oSF>1!K;{U7S(>noRw)z=bsUjU}t5bPuJHDu)yldB@=WToAIX{GjI?w zLN2!XhgWO|mUkQ=MxJv*pm=R1cF^1fjj6GBCrv&zity;#*RW!E@%G=e(}aYasw;1F z4EhgihAGewCE|}0dvXSF?kRpoq$PLr|71Kh@%`IR18XIwAAB<XLA8Vs%1kNy_9Azi^D^T zHazgn{=1MkUH13l=+XH@0tFuyXG9LG0E;iB0xK8ur0~ZMsVNWW>iyy2KdZ&F|E3yA;%4e@-FX{AqvrJzn6Xb?SND$Al$FPK3wcx+5 z_=^ZzZQ4r|CIS_Z5U;o4qZqKLK~JH{9&YBDL_eXSG7!fu_yaM#hDc9%paW>@_Gw3i z(C?ed_YYefNzf~fIwT8Flh*#(-q=8FX%rL_0{zN*LI1}>1MI+NsLL7OOKaYR+jrb8pl zmRIpQbq-FG9_Mz^AoCDCcAOd7K;Gn)FY!6LBln+@)(znuTWSGPB)Xo%F(op(+bs!p zZ9MtPv{J1Lbk)WHq_w|iCZ;1|v7JHxp>b3o!-R#CNH>(#Ylt*ByTOrsNr>}^dN3O2 zeJu#O1=NowJfoYOg|i?yPQst?1J<$U@vOdq@}OCRiGyG!>nDtDl&;CViNA}u`|eMp zRT_*IO}D_@&1EM0rx#G+F{j<*XL6fZ0}Vqz(Wh*K(5{cWNa3Pm|DwF+EyN4GEF)7= zMvxl3Ci%5b;|k&L+_}lL33Eg*7S2mcCq3a0q4k3?EDcBZS*xOC4>h$4l!Hya*A<=O zekLH}CRy2R2($~nU-MDSd*C|0_GMLbHTm;=96;!hGi(}?g^$`*-~S6H6?59$v?dm^ z_~iZ4x?utd&3*1M4xIGgdeoVUF+u)vd}>_r!Bk>8@(=+b>$_(3K+){PKDfd-xsxWt zNV>z}+HmW+f^c3;?AM*<;2}VD7UWr_BO(iHT9i<2^bw#tqT>-x^oE6qrit%%)icv zx+awn^FHreBs}-&zScuuZv|YSM6RY5$#+dr%-wc(JzH7XtQ3@oAYt#5Mwr2m@K;-Vh4@te{} zVOhCqH>`)aJaoPbEsKDxb$!(F?`K^6s+;yEdJElT+~dZl7u_x_kdAd60iFVHRhS_d z8#J*S_u~97V8Fvs^v6Lg&mqI|jS`cJwK<^LoByt3#;;A(q^IZIhXx*?thH@C)ZtAY zWoRw(`l0l@91}uW{5qi|nU(R4l_$MZFvk)<_-{FxJYE20&SG`>6^(`F!z!7101auR zo);X0FEoeOtM}{Sf)Kx<*Ec>?9xNpYWm6%Z1|4e5w}pFgA8fp^kW9J}s)KH6Jn_N- zwinyN<$9P*5IU4Xk~W>tJ=Iwg7~GU3dFP4k``euwR^@6s#8Nn z$7u^Cvt?7qF}9fORcw#^S}_;4bYrUwjm>NI@>m;f(lPX}IpvT@0})5`bfd_=Q%o|M zG|8J#7B&?NunB0s&={adpGi-h9NT#};;?o_wA(4x@j1A@3-}ep{yOpy)ALL zucTKGHX(_k>~_;pecV}E3Kt?iC~`y#9Zk9r3PJJ7L(ReL6T}{`#BTrc561(ywcrJ~ zon>87M&xIg1(nq84m7> zmPls+)ngrc01n^HJi(2QTZO;1=KH>ZFt*=C^lRx1%^AIm@IW1=kl!9r8L$JZ#V7h|b+(`s^b`_TL}M2=#Gn7**}6PFVz0Z9i#4X`Fhy-mq(L?*W>N{F z*&cIAb=jnia?VwpN=#L|%`%c7j=OI@)Vn2Q;MC3oSk45utRrA{+N`E_{%v$iT*WNR z6ELHZVJ>>O+}e#Y!TfRWU8I9-UMC{|bA|)#i<)l8tJFkPwb8N0e0%iCt>X25*0^N3 zH*?|K2dQ5?vy>}cg6q5x{jvj+(Fmp-g*CM^XQJ^bX5SxWgnysM}&1~9fhPT=$eD0=^^`JVG=ty3~j&r zBeg@IDPDqQ8b^!y)h8;Z0rQYs!NK->Pp6Y7p>t8xV7d6gR2A1ccSY9R>XlxhSo42W zx?bEjeZSs@Y`YvT%JE2SR-XEWew4(-^kggO%fSuGn+bxN0aNs@Pv854U;rYDny=v- zUk}LDW~#&ic-4X59tOe0g|!_q$}o=j+=qRi)X+nRIDqsl`cPY|DwmH@UP)C$CKgK^lTd=J)GF_rV!` zLz8m<)A0(Hr5~WS5tn-YN9Z;uR&XNy#U;94a<@{;YfC_OCWynNqtG?RNYYNY2@X=( zYj1m6Ni_pyCv5iay05dMFmLNYBM5O$3%P8heBSLqfh*TftU6!e3_MS7+r=1lK(V~u zwO-}p>&XmXkBl9W=a))cHgmVSw`A)_I*em$Yj37iLHo4l*giLLLOa56kZu9fUN<3; z#ecDT0!+Y+_HeT;)2s))*|rZMT_f)W_jW#d(gmk<2X|BEU;=6h^mspSTsQeXZJT>% zcP3ljH2EaOp_Cj&-}beSR({*5ntac6*CB}U zV?;>=d-udfmGOlH&IB(NQ6l|hjQdq%TJ|S-pD(CE-y56PxAgc-r}aGLhZEU)G`Z##bdSH=l^ckBq2RkmH5Sd5Ls;8_RZ%z7fu7Wjp^P>Mh5^Qt z#Z|Fqc5}ch`ptqm66@9tNb^9M2_z!>vfLm=S)>8J{OZ(R&Er1pSHw>4zsx|gEKob&9QaBk z&L3PUgC+~+K0X^r4B3mO@8CJL8b67?f7)QYru|$QRX+n8)eGoZ%d!ML8d9@)?As~9 zX|OKcg0tMU(zGgTD-CVkv^ITY1onRPHD%N1C!Wt*L+6yW^OQ5>Tes+t=PAr&Q+ztu z|B6sjYou^>%l(AiG3bB(;_xqE7E;w`hCQEzc?=8-S9IqSJ-ubZ&^l+KrL!~HixjB5m$CKB0g$uL}zZdjo@6?Z*h>aJZh|tqQ@!{UDB@4w)!?-6llj1R#8rY zyS|tc!2qTK{9u|vj{bi&n86#teDoxY`_lxs7t*@Y6S(f8z8N$K>%+yYi*ue-uM6*FG&@x2N!M7AWKpYRY!rXCo-5<9uCP%$N)446B#! zeLfS8cskg&dXh&qS1so?@M#r3&-W89@@d0i&f-?=5NHWai0^dt1EkCShSEdI+=h@Z zLeqg#-bNsqzD?1my;k{Zn`n&o4HZ{lKzWOp#>FGR!QX5wGMaKGrK_vMTs;MOi0 z5_VN?JJhrhUo5z^Hjmry2t8y}1%R$$eTwTrJe9r=D@RE^u4h;2*~MS4e*EoKj&JWm64X|sQ@_k04)EVtFgIv_iqH##-DKY59Rd_Tfv_* z3$0S&@{nUh^uJUs&7|-S_gn?tIzIPr;5~TR(Gy1V@CO=ib}8W-d>yya`X2o*>%td15NPtj4h)O-VQ?&AVGE|Ueik?ib+a~Il(fcy7;$I_AhuLa z_7Q9cg#8lkwlmIMQrA3oIlqdP%r%$!`m3QJl-<2HD4Lu;LMBJHDx4OtSKmQ5&lEvH z2pL~X37xUZD07C~@~t#R!VxJ8?aL4yEwo<7NGPv2dBH0Un-GcR8DOtYGO6%O=>i)4 z=+aLr4Qhx+UiKN7p7k3{ zH;|joneu+ZA{md?X?pPqN@$Im0mGF_j;|kM^V0JhqXc|@i5A&Jt0 zIhNh33Ix%EUc~)mvP?q>6;{z^N#cN+4f$O>k0Q*aDxjDNRX!Fj9-hV{jfny zN6BV6d5xrnM@vP75Sz;f&B{wW33R$Pl|op(wT`qC;fx{V^yhPE)s?y8n4h@(A}I~) znd`uHC<4nWCJwXoZib*5ZriQpAZ-FB%WU>~`5}2ZQW+&MdEORo&MdAvHA=-nHQ}I~ zR#)L@C{4MJ1Ui(%hj~kO6q(Nws5`C)NdNhNi|0rW&jlUffHcAmmVK~m)q4kaCo3!J z5_zQ`>V6l!k%JjQkAx>&a_9KlJD>crQv0CIN%i!Wo4dU93QYlY99n-Vo!$h|D}r)r z$*ZUj03=iNuh3N2#4rdkB+#E3$q8X{f*c5EE&(R90l!+ZrLU3srx4+!U#FK_-rW<; zNd(^URJ!u#-WRL2UZg5!-%4*vk}a@$ckaNu0n|tC*?SE3}%hCgfs2#E*QXe>T)+A zq9PVnfik0ChwV8<5dd~Z34)hc8Cn=1dA5?z^VfyZdFGYBDD}OL0FP^#!T7}z610Ox zya?+iy4OB;=sE#G0EvhF0kfMwhY*SADJ_Wr-+%8?x=H4M>lhD6rK0BJ%23rbNVjj@Uz0lTA0ulTTSGX4%qKIMj&9jvX z;w7RqP9Fmh%(603b9?4Rp~F8kI83)(!wx`79P}Dgih%IGlqQiE7;J%SVRZC)e1hbS zt8IFIsq&lI=DBnvcX2cv3!%e77`Z1YHZ0idH%?Lf`W*$4#vQCHt&M&^o?cpmU9_n| zE!NDmKZB>@LGRD48AH*7D&+6+rf1dWjU}l(9uPn|c*a#warg$z<_n6uy2ghXLjqCi z$e6c7h%^%Pb602VU&o6>1|M7lvn0IM1E`<|uxgn2{Kt5C-KM^yQar@+nW}h+WcfJm zk6aQ)jT%~XV?-XUV&E%b^a*cpE21JvCS6OQdCK(}9oVpaJRSy&z8^{aBt%8*v(gL# zEGYYRGh^{&zgkPp3%$^yFVa2XkImE4JyEJt#eH6)KzZ?}*GzFU`<^=KHZJpWc-Xljocg|-;a z5v+GH9XGAmP}H@^OzaeC17GnX`$YMD6#Ra=bvDVli+R!()p1g7=%6{v#*oMaW+ENCH$$`^6WZ;kDx+x!*^+23wG&9b}15 zT579VZ9xoX-G^$h#$u1%S8Z7x-+iHAPER6Gd-tQ8ls3{#Wq|A_Z_vzi+I4v&gMwB` z!3;8L$<)`2z*WKx`ao&N35`7tiPVQa25!C ztsNari^1wUsr^?IRdW;dz^;Ra(HYV+!7$PM>%(@2ptD9Vf~;P`>n9NXrM28Sq>SdW zXa)S!=%tn#=VW{FAx)?JJv{TR;qGf%8Xm?_U9(*WFA=HpVY+ z=9v83^^q;kl5WmU633{~dho!Ke5+5uISTSO7L)FI?YvxyU zFVSvP(aL>wmwiz?D||oi0mAv7-!K@Yep?s=#7t=8d(oOFu`Q%ETp zJ+-F)gyOILuzPd)|J+zl{&J_Xn(E=2AgVj_+uem{14h15Qujg zHxSDQIDqd}+6tZEa|9^GpX=%Pnm^Zx@D4Ch*`o+x*R>u!5*v#cwES?vI@ZCO`}XAa!i#M;5SmI6#@$;*Ec=~Ws;MkZY&!719oU%Z=y6p{ zc)R}hs`fX|;F&koKcsW;j7b{(fiCcGGCy#akCGZB05?G}XSES~rS53X3Z)#uM!=NB z7Av}py2%KZ{q(&G1Xx#Wpzn>1p7_eVhozc3?=4UVX~ zLd+xeU^cBt0M z88wE#Kq@lh7&DDfKxepFlBRL)$T4*y_-f-s`|Qsu9TXFjw6_N^N=^)B8`DegrtnAq z?p1)BB|*yzPM<;xNbhA($l4Ybg5BMyz-740FHM%TM07 zO`ubSJXcH^Q^=Z`GoA?<)`9+&Y6Md-U*^nm%wj7hk_qN@V5;ZSg)X_2=r(x z3w`3yb#K<-u5a%v6#_oHQ1!;~eXqf);w@2ESLe!^@VAQI{xGWLn=e7#qQT`lK}K&@ zg62uZ?tt^yn?}Fag453^7DpOtC-7#M4n*W4uW%6PSo0MUq?PD%^Cw>w!Q-f)Lll%f zO#^j^Rlsxx;?Ewb*7~>bni_IV`oB-_f$gVZlfS3^W7Z3_v74?!|L9V&o7$mx8=oK# zjbZ)qVJcpN#z;RJQ%@HGLM3g7&c8v(JDZL)C&;`xKR2Vx|sedBOZbVgVH_~Vjg zO6!g$(?9cBUy-IjpIzH_PnPo;P+-~?8L!Uf1(JxS-D3pJJlcH6BwtONUWD!n=sPW# z+`CWtzu+Rv5*N=%>_$WeMo#q!JBUEiS$ zXI)BIwB(e)(;W}XPzb=PY~gN7Cs6 zwEJ?-Yo(h!jK|dH_2xqOpk1iCnwlRr0wAXw{=Ji;iwq%-zS!*Nvcql#Q*)@3DKA>Q zADeUv5vqD79W?AEd$9RThI_}-SrSrSv8`w#Wj2cmMF8<$f~WZ-$m6@Vmh%LC$|p(jKidI zM`6fg?L!j=PgG-H=dAe?=p~!KX}*1)AHHR!4+Ga$f7`M%GjGhd>v=7rg|vZzaZWm@ zzyPJ&&+XlhCnYoF{fz!da5fWz#@~J^~mBuc|KxpD&A8mbp$==9P5GZog1C}jlu!? z63{q*(#K(+q(zB2noQuHAbE}+#;St5rzUYtP^=Cm>`F(MV{t2&UB!2Gh;~9rMI{ys zp45oMX@em!Z}7x%U$7Q(iIve2tJA8q$9}|)s6lpLHfvliU}Y&}n&hP_q-+B|zldt> z-~rV>t(_G7xefN3@5`qGaYm;>Y}+hg!+l&Ib}%qY*rZ}+2GswgzmUz`b~s5BugNIP zIb6wIm_@@OF|-+}!AlnBgpnLn`=5ea)%(49RkY-^;hmmQkka8Fg@8fOlqI|hTj@(v z#9`aG5xikhBN>X9UxE8}=B0UCvaFYkK;j zHCPL=pRwBv;F8ZoH~S-lY2TzV3rb9nuJ4E$oyCtXXW;c9*Vx%Pq=vPf-bOer@nZ0n z7R^jzM8dyuk#52jH(Rg@Jxu|Jo^+2p*OW{Ny(>wpLt(ZvC3nKogUU(rTcY;aqm^fr z#z$~^H>$V!fWcV=iX%!(|I7-hYJ+nD4VFt#c@jY2Ui->c^;?#5OrM*uEahPAdd%6u zFBVou_N;dSaVT6DZ!$Ea?rT`9=a2AYpGCe1t1rBW-6Yk^zUd0C5E!ff?eY6^Y1HoG z!TQmE4|iOPGCL78VYJlCU(&YL!J*F&-vPyhpT6D~?HfYLyl>}0;tUu`3zjy&m;sQ; z4X8A64IsH@lQb&ge+?~$t-}O|EVD%5#yB(cxT35Z*p{yx6JCb8JV#wn)uu+?S9;dx z9L$(dh@C?44uhFHe||fh@F3Ne@?tEf`$Am-OnvB#c!~bE2((B1-z{q1Udmy8al}zx zzq%H3ulnnd?wfO$6LRM!z5`KPHLwKW<*akH`x`cXvWMoCAEo**G}(u5492^$c9QME?-*)t;A(_ zIK{IGYz$H+udi1zt^ld&s@J~W2pr0qYT&1ab#>SAPo&yXAp(`sGwaGdd3ab_HR*VV zRpsSyc8Ruk1L}u7TB)d4nsQ*U`1p?zJ; zK`XDfP7)fT^%oT4elCkZh9BsdLB05U##$#KSOn^^!jOmv)Gi&?=%x2k$yQcYRvRvZ zy*}1I5v7|jD1G||za3$9PX8(DbN8p@NeJ93gUE9D=9~!!>he0@R=#-=QN^-*Sw?$K zfhg{#;DC*eAaMEJDDi1hV6_~uyBu6ryL|w|DkKT4N4><+nfxK$6U3G7l!B+1N5JslKZM!Y zui=c1u1{bExvLkDmh0zO`ZyI!Fd7>cB~X1xGvR@W4;-EBU1t*WIX(!nHUqi^rory| zPWzqF#CyKEC)h1&(z+&dKtsW1xvYLfkTscg3jTEAOZX_kvu7zpAM<~(z zKaQ1??w_Yy#r>YF#zrZe=5O~<1E_hx4675tAD#oN*NZWlQX0my_0}}EqC$A<_g(YI zI9__$y{wF|BQm@9Z@0z1@bD?X?mEKw*oUyTbd{KNnQ-W(MYZB@{_a9z0_Tz{B*{hE z8{L8kekJ0)WN!PWn!fdPbM5>6#ShBdO^{6UveW5#>ndT~dsLq=7B_7k+ zO*@B}*NMm*uO}+X|D$aR#!hes4cx1$-29$Bhwe+>w4C}rGW{l9 z>HFBZKi8v5|M23S8qPQ+|9SMgS$8}ah-g)ymYM+8{!|&=jX8j~(j1$7ctHNEZ z&J8YRua@yxO%4dZo!Rs7|E(wHVQ8B2nRTQsx`%{*Z3Hh8wP>ojFiWl~yum(h8+480N|5P(alR|RjB$bF zt&px2NN3c2w&)0Sqi_x&rm!DZacTv4<+jDTOa2^PG#7p_*-Wz!;6P5meBlsUw`&F--^J+0V}Iddp}rQJzBFs_b!0|@L+@i zNYcmezIW^^O1UzrB~9RfDsc~wom#<}1*C7?`HXEV>3lnl?h}-g57X{bW&#FbvLVW~V?MqUH%&C+KLbL?h;BZ=9-ztbli3I}fV$ z0*$lBobb78vB)2ISU%WonooCaw#&G{>}7AgVNaL)tXpT)=1m3!?DkXK{)vAm2dzoH zdG9uhZCgOISf=pXbD7#-aUWYOnYWqOeocyLw=jE}4YLKW5#5_!5Fk8@l4j^b%4t26&Z;@CmkbanR!fNOoS*gX% zMS7g!{d?sl!%CaPG5X{&a_1S^Y!#3#cFfnd?SMoz2#QD;N3h?`PJp4$|MZ{to)h@8 zuARe5@&CM%LG3#TTUi59T;GE$aDB0Pq!nq=;~GMoDg1e}phmNMEbr&i7;LVeH>kp8 z`9sKp{6+4Fm zSXd*#Lk`v<5VZRCjp7g0WCPcN2aY{o*;~B!z)3`^4@*g?O0R|np9wRa9ub5$k|(wW z-r9x?PeX;#tO|(qvP})qr!CP;lc^s-re>Gj0pDLpTrvGOQVS+_&iaZ&W}k_VB(jmE z+;etUjLKk!4FFLXcMAwOPqz{nc`3u??h%6}R=L2-*&v&VUS|~60GsrXn0;-`-d$7j zsZmyk0nbIs}& z<83=xA^uk>J%{SmMC!~VN-#j-?vS~bcz*x}kknfDUJjBwCkc<-A_=L5kB7Vdu0Tnm6KEv4Z-TEP{1)&m3#iXBHR9^3XVLsPZPsC^EV9%@f zkPPk_0Z0VG34=h+2rrxM?rUwA0ozvc#oq+}tHRAAgp6d;pao+j0t#)(ZG0aY-(%_U zn3ax2+>0I$Z66QuaQnrU7D+rPpZf3 zj;pO*tn?y?muq3>l3K#2Y8BF!gD&BgI$q-lAl|%rTFO{-eu(*>`g8LJYqNj**Rh50 ztv007|K2l){uRP$x=hI6?>{?GcdsZE&2zr1$NE{no*R05;Vvw$T)z5@5*=?uwuoxJ zN9drS&C6vW=w6usk(vua9_(ZZ`y9(mh)K+3maokA43yt>;RN)tDuORZstSX`IWWT$ z->5xqG<%!R!)`_yBWJ8twfGxPegHP6*HbfZ*EWT=NOpetjBRb9LH3Zh@ImC*STFh2 zBn8nXWkg}IKw@+upFZqMcp>sz+zBTuy--c=0T3Xk#3Xuou=2VvG_Fohx|$GuIjWjU zxCRWdpF)i14ku(bGiP&LyxeO=1?*RairqdH&)hskrOf?i2Kh@HJ3cWWasD5i)bL}^ z7cTf+Ok3U6?DScqnbY16Eo~}<&}NcBE^t{4x>nr@_u5dJ3bTOS?I{>+!I~0d9rA3n zG*`TvvTAG8g#Zko2@L*o=htx!u1BmPbGt%ym=>!11_x)pp%oNZH^9ki=gIOLP?kS? z6iP%V&!Hodnh~IFvH0V{Z%nq_-QO(YgLI+(vMy-P*^8>rqI?SUH`ZVSS zXQEl3MdT07%Pb)IN|f_~VW0m}vd?Ue$pQjanz=NSEx|qEZ`S9^9^cDrC+i6GaVwNF ze~@j_^gO3Y%oZC1_C%Y`a0PUgrlys@&4p#YNy%}X8PKL}zMgp9T`!O$I{j$T4~>{BI%x-rKOP#2yiZ!Bi%cr#96NFsh>&Db4rBUb~q>| zt+LlO54}`QRZ(*mdH!t?W5<^0fB$;%i1X;Ouw&zZJK$-vC|k%}csI zM}TtYNpN3r==+b(o+1`p`|`G73a&LYjguVPc=69|VfEH{$aFo? z)8CN5DVq<|t@SLr?qkXes4Z-HD%c7KUL_k?1*2xdpYnp;5ae*l_!PKXo+%$x4%pq7rpf2@G8Q83<$mv2}+1ij*(aUw44jWK4_8FQ6QB@DJkFoN(~`k zrsJG$U<2uKc^lMYei-(03R)3ojNKreE%0DXsA{G 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

    T0nhk9FJ^bh9o6 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%0Aso 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≠&pZus>`-DXb?&P*jja!lJml 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 Xp@$`9V@F;R3OJT48#~i2c-j8|7;RG4 delta 43460 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®4QkVvurMjq4Y)hmg7#ADk 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%0A+_D^ZP{>&2I#Rp_cS!u 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 uRP40 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

    bPnTqXsv3@anGWjv1XOw(4Z^hpt6;j0 zzrpq2Z2I|sa=Ciu;NWn!w|AgX5KFoZ^uLvtGda{=k^8s+Ew(N;V5Yz#3}JW%P%w}c%gJ|AiBL^uv0{TzmmRKu(PWX{!kDvf297sVOO!N zDCvQ2x|yepf87cdt5P5jnzds-9wX0G%(LrlW&SddFlVlOAk5^6A!<5pje7EHjM8IY zOVBV53al2Y@ir_?m)(yzGjGYF)VS0J`0~_dq2&IT``Sa(Z$s%0(J6Y47{1 zU;VoK>es&RZr;4;6x4;p>R#V9~|{? z@EJv_dV_;|K&7XEI6XF+rNsB6f~I1hfTTp6$ICR zb?a6nPyNIKr~Kb5X67p@``zW7`E70($;es0MXA*Tuc3d4ciVt)e_^Trvs!tdG4}SI z?|erti72cg#Hx0{i4Jk80;>Hgl~(|q)4}tp{^mB1%78oirIxQ3?qTp z@~w@)b%HMSe)mR5cIqc;u4n}NUWqV&)Tw=G5*g##IHd~Y)h-Pvk+WxluQW;3lGHqv?v0_{goEELLC*2cx3b$LC18&J*y zlU@A=>`%0}l*naHWP8XXw6UN{HlmhNZq$CiT%Q@UXCU0yeMaYJ)jdx#7@k)`RKs%% z=jBG2>$EbM+1U8{LRZeVfFvRW0PB(se1EEf)&!p!Fw0)HDqK$eXCzN9PQB|1AwN~} zqL6cGdsF)S5Vl!R!c}x7mTrB2zSQ%oo#b45j{He`Eymq!n(Y~vS?nZP+22=CEJ50M z$b=NdjAXJZ6S=!bt;=$HWK)3RPKfKd&r!_vpy=D)T1q%SKW}ILg*fzr{}-G7TKZeB zr|5ToxmtRZr$GDz5!*;n`27dcQXay8L`-AZF`P1JVX-J3mD(Ds90&)q3dVrk2E-Pg<7!Jmz7K+Y z73L^vwQHL}=Ug#DbNB8YDa#`O!*#%hn3Ep>^tf5IYHK6KNA}K(xzX&*XS41+z3a7` zw9QANM-3&tBy!Z|l#gttnT|zJrkFQ3a)zJ%?CtS!Wae{9Wm-vp6{D0t{NWEXs18*o ztkFOG!#`Z7>p)-5lJ&-y&Z0d{4!PS=gxltL^r3q3Xu)yEJjN7Z6vSuOaUiLAXgl{ix2*?_z z_2$3++_Mt!|J#3m`)`}BvoR+x+SJDIg~Qnb&CimhfAd@4l1LnkZ5=Z8zQ0QlQVZg= zR>a8#x!)!yEppE%$0umOU%7Ve84t!u1>FY8>fp#h27^p7_L2Kr_pqbXsgo>Fd(v6c zp;e3y&O11C*gn`S8|%Ys)y& zDw8-HgVX+WPvm|_$z}u4MzR_4n9A96#-`@Vq|d}$fw~ddd75J<(9ct{6`Fh_c}M(s zF&H)2XdKT+mKo(5;r-Y&jpzAl91=E}U;1rst?Z10j%0`n)OlDF=$W0lRSZ81lKrtd^yFxj(o%aJ5LS%IAw?k7 z_tQbQmmZsD5Tv%~qEnk$2@yIOXS4Df%Hhwy@Phls?|lQkP;tO0SM47x+h;>ZbtJ7J&dj6gGS z<^-AGdFi}7-MGhS#*igWgSZ1Y^#A;y|8rwmmY?*b(TeKP-?g7LLLP!kF{%ZX%tZ>c zJgW8hSY+%CILU#QC-BBDc1YLH4jQAQZJaBAPGJQQNrr#HpV1hvIu4qA`FE%80v^pP´_Et!M_pu=l}Zu{MSarV}_nmnT--75m*V{2r9XK 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/{TvSM+Z+ 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

    (K*2s-* zj6lJFk92W8mjM*)s#4W!3&+nYNkYM!AoqjMOf#RZcpxJ-8nU{&POkzQ?C1+78XTj{ zp0oEkjgXpN0RCRo_ukZFkLn3r+TcOJ>pe1oq11m>LG-m=sZ{a37$5IJRK^N9UIuo1 zsKKS1Ct%HK?!Gsn20QaVH%rgkA2YQ?U`w<7 zslW?>|5Ic+XADu%u@X`BoJH@sF7sS>pbpoO`L_ zY1`wd*tt=NE$~LT!cRZ4Q7FpmDyZT2gZ+P}@{^zbSRU^_rbr8prByg8t~Wj5R09AR zNh*SY8#ivswQJYd2M6J+MrMAM8FEgP!}-EbsGl(#*PtwK$>7?kR%)7=H}#wv;VvIj zyf{8?Y607R=B(^0eyM;%xp)^iu7XmHFt~4 z0S0|?_VwuTZH6wAn(nn9IuRLHM$Jh)lpJ*nbwnc8vkqw&Qt7S~?AY$i;`DEjqCFq< ztc35PjMNF$qz-g*oq4dp$Jv^xy{$rG`kqlvVW(G%r$>UJue?syR4JV>7&d{ zSg_cWN$)at7kuEo4o{9`_SsB+_vy#7uNf*z?L|~r$^g2StZl4ujIG^lN$2=jgAiYi zk56peDvgb#21A;8wlE>d=fHP%cH}$X`3?nY_V@Q$wueJpdU8S_dida>GliMU?H6B= z6|W@~uOcP=FLQr^-NJCjxAL~{1c35=xSWY+E(1o{7w?~2>f*k(vZnj8Dh&-b)>hZd ztu3C}F>f{Hx^64DAK3T$#=5L;ZHm`DleI^WrJz8cU@UT;DsWoK8@dBy-JY2%@fUoP zg&hwD(m6Pg)^o?qYGlq*|TWJ3XGZGGMP!rqr87h*>JlTSa9n>TMtF*02M z>6$v+Q$2SiNP%MkE&l5}^6tCu%9#dZ$nasgIvSmj9ERfotI(Iim&_Vg{Doeq@8#8x zynlc0de+WmZxQIYY&;B&m_VO)26;YhgYi9~8RlRoM1;BAO1~~5c zrxqA8$k5+o2i$%kkZQHY%0@offw44fxBq_!-xz#5l0O&Bl29#XJRYt6muJfyj9C#!Z6tliep|!}EVdn6uZ<1qg3%Z<`ZXqfT)ZXq;mf{i!3z?LOY+ zhn?%TA;T;b_T}uXCtrN=1!vUJ??<^Ev*qg>8}ic2ugIyM&*P&L&RVm#J(PDJ#+z@+3%6dNXTjmHFMWOgfdY9!@BTD)6`_nIzr-m7X1?7Cra>eW zXQd5p$c!ASa=yrd(}9u6IQAs}&(BY1W)&E0cdl#C+K+4hOwwn; zKD!h<+fN1bRHLS#keM*OyQF_J$6UF%z5o9E{*QnB<8-;IEpJOeUuNhw#!@YC918*% z$VAPlYrZHadr8tt;&?Ne#Z^UH)~i{H)P){uXsIruScI{@^?L*MIrlU(Jnx=!;few? zZ^?;M?7BKX_kw065IccTORqPu1wUU1-53~q*@4ZlJ1X6xzv{aMHS&K_3A}9aTF)`g z9R5ASypD>2l&eLlXr>G1dccL=V>cZC#<*GD-?bTQk4kO1oGm0g^HOsFk(I)nMk-K= zLl2#Obw5~`b>yV6yjsC3L*^9hoQ0+%yEEum1V5S>BjfC!>wEXdd_fcy1q6Q*1u4*uqQ ze{YJOxs|$Nxj1X2Uu7~Vu9bRs!nYlJe#$(A0J+Fmim#V&(q+l14 zum#t)5ObP?clv4fjDg19-V^E*;17=;KastI1G#m`sDwinwv|P=Ww zT)lRU$L{Rpj8&2Sy*)Y9tR6b??UfY<1bJqSV+G0Cx88hHu54_vsv<6Eg1LzG&hv={ zx38%w_8HkBbCV3-LQg&?Xk9p*`Rt6KrwnV-&S8H?4)zaaRksCg9G)*d{-{0xSi$E1 z#m|2s_kZ)D6!!P!Wd+Hqg7XSh>LN1Nk&#byyUyVNm}$nZe>+7PUXNR<*ZJYuxoq_N zq6d{~am=F0#V}9voShEs_^eRk_!(LkH}Bl$b&B#m-0vbUB�xP=Cj4djZ=30-kdg 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 {}wcRRkr>-hCO(?!GI?}V`q{#|ynK9~r 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%0DOr4aSX zWJ$)o?h6GGB1$bJLYdY7Nc%4C9*|Xl6Ech`6JP~&_HxsH0>#c(s@TrmR{_lHI)U@#uM9&t-h+BG!sP;%0}Ke zBq_$yoBKPaW0N%}dT)H54)TMVxZ$I;jLD?e4#H`rvDvZ(djYPl8UiI6dk7%|B5c4* zIMKhPD0B$MOv)vGpU0PA$U%Q$IxF$@heqSuml&6yy%&K7FVg(;#yW(-D$rp;hg9I6 zeLmq}qjVdlx^aUU6lJ;>a-I!P@6l450Z^P>0Oy3HRX)AYhqIa5^(bpBQGS< zbdqDUO%aL&IBVN2LH6u3LJPG_ImAqy{-x*Q$aOii7KYEHtb?3dSZJiAaEhD~NF4Rs zUkZfgMC5XRE>;|akF&hhUAeSw9k$QB_}F^UHhDp+<+gTeO-o2Mj*}Y0^9IF=cw&(NERgIn zuh9p?dFGTI6AlzkNHTmP5~bixMAsx&(rios+2-NDPk_<^KR&(Ht@>^;HG3U#Il+j7 zI%k6S2)OsxBb&4X?HVUOH(F_GNVm)3Vjf^$$f?V}NX>uw6?EFkFGyu%Wc=LUCkP30 ztF!a!Z)p|;Y7wKhY*O^4?x%vuuy#&GLKi&cY2lL<1zB5vV;~rw?_N} ztxelarPkk%Kmx|be&OTzN`s$vKZ8c@o-0!v3*Yo0RFMUQ@U$U3P-#fU0$h}>G+Su% zB-iQT^p5-3-dSz1@pMPDJo-(u2BpG^Tc#dlJO;eBt^v!GcznvWjN zu1!vPFu0VkxFA%c44a7VPi}4KnLnAsI9>3+=k>Ts@P!`EdnM`jl_P$WOJBz=-X${_ z#=r(MZZ?+y7!UcM(Ei#Aj>A;zzQz_<0$+h4u*}upAIO#z6{$~_n3G_j26S4A1^*^w z6nI8@yl;}rV5=IAeTR_%Bem#ELay7#Ib7aLEd2S&?v$jZgV8O-RB86Kfo%*B64xk3 zBmRcx^~9Blbcmx}13xu@Qk#BK5%eg|%S)N50&)*X2?*@K+2WQQgn=M>*?16uHa5g@ zFu0xQK-)nU@{v(}e+Cs^1m&eW?$v)YAm2}qS)&Hp-_OOMI)Wgb>sF2FjoO+I2Hpgt z5e2`sVgL?RK%52k!^lkjv)N`MS)5;TNTCzpCIIK{h=>RptzqHe7|EUfYgrMD^pQA zfI;8QjPI}}m%F@aG!kk{agnJh0cET=bQ|DPd*q+*sf%0P>?oG*gt_OZcF{}~w#%R# zIJb9ZhiIs%lmK>hnOeM@J)*)aTiv|MN3QntQRW`p3mK(V{#F1;=i4Yl;RJt0Rgl*h zCp7BjP^r4~zL3LHhvv5rJ!hD)NJDGN$g9%7-=qSt9CvT_ey7If`u8NW6cyWR)KgYI zK!^5*z}FptAnAAyErJGO zbRtSvAr{lSYSzq@9+9$-diUi_<&V0o4ivc}z%Ph{Z<}f^Wg@HKAz_JzquU3^ zpDG-$bU3|2*Zm>WHuECm)2xHpv&an@59ZBEykluK)K{s@e3%qq%H} z4>BJw?H~*xI!qXJ3n7O!)hu=`%d4AKfR9Qj4T6Z}IU!l>75b%hGz+>vo(&$h*SO`H z*BM!Sc;4L4#EsUAmca4@Ej{6nf|oJ8*!Z!7!}rv+TJ=F6Cw{no8m=#7DD!-`jd8C-Nul#~Jop6=Uc{KCT7id8qkG1>RjE8*&?6*ZVuvHMHm5)K& z;$t@pJv1irxYvJAhxN0r_a}UuIE%+X*JZXglvGu9lm}NkQ2=-bSy7%r_{Xv#AS{csroJ(*SAeWmhnE^roxWJpPrvT;@fVJv9g1&$X*b(m> zy`lW$(PTvUV>>*7T-DwtaYrD?OPj-9AlcKzsU}|-jY~$XgA)R>txKv2`(#124Hf%5 zKczc&1&+#L$|AT~+3;SFFcF%NcUG~ARH@nWP93gwG*~!D$(*uSy69fdu8xq2D6GmM zqEJu$4VVSe*wjGm4C#QhWSAN3R38a95Le;Hu5Zh8g6=DUq@*06%oA=8ds|T6ro!AL zMe0t!g6SP~5*ppQPe;G)yK^O_UbL>nJoO~5br;|h;GlpO2Sp0nrQBVCpN_w(EKv_Q*cs4?}=~-emz)u z^z$q?!(f0StAv$#H{erP>I*imlB)aKwcU2VvC6+-yBohbvL7)KrZ;QvZLcfA&saDx zRkrGeTVp|vOJwz&u=o5jl&}gay&1sLmRDs7w;82yy0s;wG)2^hgW4#MMToFNoUp+uX74OoF^KBY$L z^*ZI5)wu4HHE*giHmPkLRCXxWy&1%W?r*?PgaFwb0P2lroVa4kKH!bqyZp3(z~8Ce zUCoK_W>JJP&1n_net_0sX&I#OTP1{+oce3;RhZRCmKD6s^k8hq4^M+Vui}3O*rpN zwwNe*@;-L?&wG*^PV#dU?b@77At8PV^K%|gD&(VdG_575lj8Y=>Q4cK({gh`Z=NKB zh$qixUVe!!(+i#G#$mvgSTc*ZiTVmY(G&dfm+DSK z7&Qbm_obaR1+Z(jtoE$nm$+o=_ue1V6&71W*22=l86;|flg;T#*Jp%XUN>zAaf+rD z8qVxFbv3p@8HKX9j}IP4u9I^ol)tfQwzgELhfR9@47?736`;{Ym9AGmLH2=rWi3I1 zCpun$9wN8o+-~7H2P?`SH8G*-cYCqbhu{9ru-bmFw`gd57w)c(ph%F2uwT$Eo$uKVy37D0%#fF&7CvzBE+ z2hQ4DQ49_EQ1jTskCf4VRy#qhv#_)43P%HfC-SL6A3(N23hvnk*(BaS0r^&pnLdOz zFu_?W_7(k(-JX^IG(a%UHZC=T(uLet8yPNdq#BouC5fLCPIJO2i@Ci&jP?C!?Y>9YAn$-)t(`!j3dHSz0(2eKlpBjVSqM) zr8K11%8}Xhlg9U|FO8I@nq_+GKS;m*HU}YWlIm4aVD31&$$KoLt^eLUXd}xuAV=41 z!{jk%JM}pzj)Bp7IOjuCD|sjpKjfR}A?zN1pG$@U&qz_OvLjt|3SkY2oZ?OMi6mUp zKb;-EKHtCfxduXz^Mu{@Ll%xpSJvs~Kcs>Ej$CYW-z$V_g(t$YJXaHaQ-e&p_3)Vj zzO6=w%dF5;#Clg8A~22`15cseXEcZ@%-qGA9wy;y{$}N4Tit&{y&vK)g!=ceka{Il$z?SB(|*~&C8zKRlYJ)f=RCf zkP`$HDU?_k`+kat7Ea;rF}!IJpXc=;jW!9rja;LA)J9Mv26VI<+k6`zi?jq<{5S?zo#r+MExy634?@-+D^tqC6xlH`s@8&-aV@B4( zX=t%yhmS+0>tlC)2r21{t)=k{p85id$I|b~Ia(9!ZpDPm5-+%Yj~o4zT=Q;Yn%p-R zI_B+58Ui=tv7i??;G2*)8l}SP$mPERcs?`Txw~#!o3`*4(9{cN;@E?&D78nBUAMKC ziFRfCPHMWepwgWt)v~*#z2A*$ON@_7XM%gOS3Hb#JrmJb&MjTsK-zKGweR!Exq=e# zE7~O5Zsmf5EQ}#ysgWJtvHX!?a8!oaKGSntNxw5|)lO2_x5tK8636(SV7(h6nI>|I@jI z3}s)D&sO#R*L(MH%MY3lI(ukUn?-; zf!ioRq&67-1o&ucDF|ldkW*H*^ZJ>#XMiK%a)JBd>p`5$n^vbsZx@7}%HED0{&n{B z2?kI3haVooVO9c3-odcB_KG0b((1{~sPn|ZYWh2dwc90Thb)qbJ%i_a)D9ec`&@am z9-P(s!anK3!H6iC-Y_uvukw@WcH4utL}TCgZ|cJMUzY1xAJO3&=zvS%WWfw|J1ORI zPAFzjB^F`KqBKRLccqcFpP_qGEh4B(FOpr!y#kKhP11d6__o{-2^x;VLwJsxIaYH7 z;&z%wt>2gA>~v*8A3i|1t0zO#*uT4rm5GNGnbyN1X$lI2vKF)%u3O8hXHU9Sms%H5 zo|(w3b}tE}B?+|5q?k<;!HweVtf^D{bQEUNFD0rJe8FXt-KV^0xMEjM8NPe*QP>4e zFEPjds-u?93;8ji?4whD#F^Oh`$akjvN-3)#m2M_^~kcV)E~V0I5T_+qEmYGu4(ow6VHexNr73^F+q&!_4f&Jt%pCEuU7q)d=zndh%k^gnNC3zN9h8Tw}iZECLdPY$Q_=qU%lHVg~@$M32Ny)&2;6ZW>sbkHEgSIC7$q+!0>SS%$^KR5UOHp_cdyfdxFBQ0BS@c z8KyhOM>KMAMYgF^uPsT(x&;8|1REYITGP+~2i1$q0~m4Ne)9d!I|!2hsii%zbpZ_G z6k?t}C?FIda_r7}dxQbQz=6l@Znv9zlab${?@ISl)4TCK4?D+W3}ENRmYlLP>T5I| zsuDCOf`G94{n*CsYV9|cWtIC|Pp5fT_)COMt$)GEi;l zVI>HK!00(Mu6H-8)hat7M6|0hkk;5 z+sG`XQ+xI{4aTCem{xMWOn8p7;ukx|TC=<~rzS&M$hNPHd`3_r?ezJ(r2jK)*O2P_Z6kp&oQsQ&fZ5`hLv z@c-BJZj^@FIQH^Vxg~=?6E^VN1YU)czV|x2|20yVo%Tj_#vHj`Vkym`j)>ukZ^)lA zKfHI#`d`mt*&>PTbqWb^fRi;JP~M?=p*tT2C~{Qj7ECXJtT!qNv)ls^x0J5Bva{U{PcCo%z{Tem8F{f^(paBHsfYzVCzli3cx(5wUrjTiV>tP4OTN$E zia|tk=5!>FwrgjHL+WZ@V5ujKW*Mv)HAxnw6N2C}MF{we=7P=$@h@OpkWu=8x(uGfPoCbnfnz4nfLDQF3?kCuY26MM7t}aMm;Zbu z2_ia6NAkh39_(+IXOr1!$7}-TZ-n#LY5*{aMi+olHhy7M?J*hqBdc4!`d#B+AAf4= zIvAz^Pr?>)W>hP|whhJt4_||iv9EgBm?!?1j9PaZI*7w7=>Z(=drWXHExu*v*`9)x z&dh}%X7Vv=;@A<|7)+TOX4IW}8~9qQ|Q(h3U^d!PE0Kd`9AS!;9O#5>a$ zZUtm);RFlMAMi-bl*u^i*?&u}O(CKu_>QV`YQR63B0tV}vCj&oficbM&NKA0DPut0k?s`vl~-Er<1s;b<5~Eo22y!1mrQUstL~gO$H0keUbEv3EMp7O=0139Pnjb@r%~TVVx7n4`~mb zDU)=P@xB)jjz-aWC(j&~+L>*-dBk903&VP4d*6mm#;!BkaOlhv(}Aez(AG&~Mqcqp z5oP?-#t<>DLdM*&QKpou3%{aZsTt@^zjk}3LNq`A*`;D3;S6l#4VI+g+o8SZfhr`( z&HS-F9syCg6nJI{|9NW@tE%z@ohFpaV6SzY%INLFyRn<|1-k!IH4VV4?V^Xc+X4+@Eit%v4@pK&AL=bt!cYicU=9+R z2Q$JSu}S>;LTVOfIpJZ9PP)ZeEg#>i4e=2(_!D8yH%dt*xSD4O%WpvN~_VgMH2@yWAwy$_pN5D76^$J}uZ=Ms14~NuTbY*7NXw zL1i84W?rkue83WAcz{ARpcnBH+$*J+a5T`U@&%D_kqlP{k5Zf;hINw~9Kk$R;@cA6 zS3?u9tU>@VY}hr11ssI{@>zk5Z-P(i_*{RFVtB!8Ug5j;~9}kbBcSyhcVZ zq;1oZND&VFP6V<5%^26v`r?akjHg%A9povf*G5Cw#&CuX?9axQ7^Me`Ob^2}r(*#C z%+Tr7`dII^n~9#1(i{67(wX~KqG0Uf33sURyBXpTx#v-m*dJ5-LA&g%)^FSq$lt0W zig2U01UstFQ+AkxMYuRkxie70pH&2vtwgX>*80uMMG-qsF9yT>`c^mk4GCmXxZv2H z)xBqZq^&FU5|(;cZ^qY~r;}zd^OFNxBPRcf@NhH)WGvT?x;*6?Jf2&bZf$&U=l{P6 zTqGw6xctgNwo)b^xAj7faj%glyc5oZnu|fEQE%+buVZw{th0ep<3wS#(ttoQ&bD%W zzg>^q!8zWBWMuTsNhVMbmPpeW)?Sg@hF1U^T+1WP!6cV*7ZN?A363ra_(Vmpry)3( z+FRfj-DepSj?P>f!YU8*r|Z3}nv3oRmLmKuA-lH){V)p0Z zhREV`Z~B5iR?Y%|RE6zBf&nbuC_xF3r~iiJsYH}e2BCFepplG%CQZBY!Jm_YU)CRf zS%=oRE9h+3`BfY6_^otoM7^AGTC$Ez#=V;Qi)mqicH)y4Zm|0_b!^WfL zcARhw2io_-d_|(T5b2RB8eSbB0WZNaaj-I(8GvKUS zuf!~9YvHPjF+TD*=j+cYVk7Cw52WaNr+6ONO_r%1&zCCp3&M&Ugu&&=S$xQcBXiG( zRiFDq7Q21RHJ(c|n)>$>zw>}%t0;<)l61vg6+-k_cD#GNd_+X@;wha<%A$0=LCjNz z^A5tO6GNkS)%h1!`b73soKAK0U5UrLkZ+*M{#e2>a&CO~8)XAA3=No24RheZKP}*3UA0t7 zD`BZ=&68kOBrV;`%}9g~?u~S;^G9&pFp3w8{pOIq2Hqq`G%paqr4xi4uy@3U!7y^q zXwx0;FQP;^&;*)db&zBZ4=F2)u`G=Bk$7q>l9$(yB=d7yH-=H3Z)blzT7PhN9~Doy zcb$}q$(D_6_po&d|m5RZM+>)`i1Ug+;OQv)KWIRbBmwSG(esuJ z7MkbBG~I9)f+m`NCt}!WfaS;%86n82GZ~;7(R@>|4j&Z@H=_ zAsRKyL)L?hnJIxkrv8Mn0d0PzXjK7jVY`p&XYEWVQQOASVzIr)s(M1=9; z$8?WFPp3XQGMh4Ui}~y8D(4Kzhv#2xxrQ#`Z$%$*)VyMBE-W4sdRWeAp=n{FZI?b; zI)8?J_Al!%tV}$#OOc9>;DDQP5POVOwQY&G)F3d zwsy5>nF)mUx3!ON4?x1zPih6aA#J|bt@W*6Uj4R1tIT$zr|liIyNI-JtRciS1)gda z?Cd0;5WhWni(H$W;cB2RbI#!w(5$5#@WQ)mutl8R(bVCO=ZGpNOHsYlnlzahIn&nj#S57%HLiN)tA)jx5{CV^_qzTXX( zt4+^b&<^BLaxIy;C)UE_uppP8?S5K&kOlih<1SuX>~RLRh+0GXE^uve_jNq@HexzZ zO$_R6Hgp1&3tu)Z>0~bbsp&EWhVcg7nf;v9^$aRTocZ#cDxr@?Gi8VVMD0Hu#1EO# zpL@a$VzMj-^IMBB0KW+PCVn?q?7lf*-@~*?tv`< z?cE$JVfdEg3Wi$4?+5IXF?YXq7jOpYz>8x5lytCYVg3cjaY^Vxl>J3FR`M+4AeTi$ z?(8z>i@F(ky^UE1PI??6J&XshiW=ki+fB;lxe#6SRu{3P}*&9o=}I zzx;mKzT8&|gJ0#{1abO2+|y}f=)U@E28<3JF4xLSt52%N%9;;lpWq($BELk?=<(MA zp+KpY@4hL>{9kF4hyC7u2NdL*bc+w(Z{Zh%CO=V4AV(sYyW$;{^@;yO4I`XQxeMGO)@-w_;1{)c&|!d1wbFLZWzL| zc_LwQ`3o{-rH0nWupeKugUeL};*bln3$G7WPpT`je%(Z75oDFD`Z~JX$8jv>O)!>~ zxpp|m=W(#r37{-{8vnE)<^O$nFj(PpFSHxbBE zh0fDXPcj8A@0ZOKnMVzlaHd^gxh@g?7&7-b;E%WV-uGI;k$)knrs};-#RtNQT!5`56=A`1IEJ ze;-m;48+Nn%Qs<5+l4ri0lg{1!1Vd}>=JctRtvq3DhC`Kaz#8{N(YW{r+4Zs9KlYs zCkwcnbz}rsaCC_nGOd((i^8@|EY(#N$`6e1OA6-~{ft(pv<8apuE4oj1PYlajl*x7 zpG?|V20bob5-~zF_YWf~3%A z1Kkpl9)L!Ndvq~j^0RyJ(ftPmf6@>Auut>=n>z-DfdUZR&0{$QrHT^@{z2`-EaR`ka~?+MMFhreO00=N8i1 zw9bTQ3h|6w8YPKzX}s_-$4^29uIgD`2XcAI-7 zGIbH_0#oERV5kAPj6K!pdiL^IjS?L)7R6AI1{x{H-$8?O2rE>PANrrf{s^D_h?P9e}nbW^X9g$414j0PJg@Fs)%elhdP5q5ysYR@pe64?rlz z@eR{ig`3s{#N2N4%sWzfTXmjEE-pIoroSXPr+1%!W~61SNNmYOGJ}+K=lQU%rED6E zcughG+0(!-a2|jwJ)Q6o57BL=%8LHSzc&0a({tRFx2dtJ`7=136qHeh2G=_}do_N2 z75>%Gib}zt$U_z+n?O6!*dAv24G)&gOZec#ci!hdAnNV>UIX%af|jDBT0#XO zuxPyey|G$-`EYH2AE#xyf=CSv8;A)CuS!W{s)SXi@EKO7Ysl z!6Qs!Eqo5|AcNFzYT5Y=)Z+7KpSwh}s6t*zBS;@o+0;qmh)Uab)Xg91OaAhXR27Xl zfY-%81Lx>ddGqQ<$1d;i9MELL-|kb@WtI302m7E_v+VBPu|)WRf`vB`4s9$rL{R?F zEg1Rq{RJDT7m_faRr{VT{bQ~7@j1zyoP3s650XsqS-R;%9UU2#o4r)dNr$%@&;r}hp4iVIoLh66Yga?>94LUjM(rnyT^hL%y$N;H`w1fYo*Z#^(dar zMmNU92iH+xkFm{RVZqLRhVo~d++EK6!G<4UpWm!p`BP|3ItdME(xy&v57Gf4)9cT* z8!Dk+W-QS;HT48OqV_Urx^YHx-h#HqFL%r>{9kmtveE~qy3(4eUE_As`Ank+eaG?s zJjYtt>a_=Z!Jxq&`V=&7fL~*n(X0-VAHSdBfoEWp+6gX|iWs-a$yIewhO52&+wGS-H!V6+^Sha3ES;zd z*6H)jLPM{}kUvtT|7E1udrRj0cFoIxCLU>+l84Hx=4l~f;5h~zZ7W+@>?9la)aUf^ z_r;M!IF1YQVJg_wew09c1wl$Z9HVVe`wDG4k#|Yo>FL^v2^*YTMIWQ)wQbP9?V9;v z`=J}2>c{=H8<_2134V-Mk!o{GpA0yvxelJANWl1_JOr&QM~pJz;vl&Unc1dGcWv@@_`tRo?Ntbd2Eby{&EebZo@q7Hf zk^+I!V;bZ{N}eUdn9ZXdrOGtQ;S;)Chtsc3Jd6+;su-G~iJOpUVWF=e8HEkU#@3y2 z9ND1+T_}LVQzM@?B+~JuW--sO$Ne2&(3NYUA#*_tX5h-*%?hY`3;L~8*!&H>bX*u; zUvgA)={Ev6-4<7?Mx{FIS2_Uhfj6D=Q#7Ef1{3i~Jgs78wIooPY07A0#m}1hoFEUm z+lQZjJ&H29hEi?4uK%+16AnaonX&I?wLK;`pG?du=Gb4JXi#`JwnnUV+<)MAM2ISX z?*7+yC5hs$A`jm*=+t^d)Nrp_xJG>vp#m9d)(pRECJ;D!qXz{-YwQr;zWC?mW@+Ot z_9znDO4*d&qt6!#vh|3tlD=2k4LrhHn6Y?tzDTjxgOncXpWxfR87$NeP2<&gOzJw+ zkt*JT3y5}SUfB$xZr@mQCdG#byQ_6YVmFU#Q+d6OGq)P`l;iR^Me*#~wgs`ehqkB8Uh03;O{qDWZy)_yQc0`vg zYQF-(4NSx2l9@n_(Qbfo#Y-WA031M=16Td37>OKLQdoli=f-zc1!ManrurXt!ykLZ zscW=YPtenRLusPf*kzsGUEP!*tm*pwyEA-(C&`{X#Mkbi@TIjIqnoPG zo(;P|{CAmDs`~U1!FsFA*`2d{lWv^D_!ePeNK#Bj?pb6+E7fF>Y-D8|gyqL`MOpHz zGQ6L;8=WWqqH6fwOcirl3W+w#`cxRIE;vYVT($4eA`*)ws>rMx3 z0o!q8)^oVFr9t;5^7RY}%kIS~_Y1fb{t~TGYm21}M{a0I?LXml{ij#o30{Cr598`$`JjYftTmf@LaYo5cQH)}Q)r zc@qt~oo%_etv_rrxOoW~V3S%b*lCx3Y~vFJe=AH&=;ydFjrn!*#wR0xiMV!F;+en$ zxp*n~<>3!oiyHkk0QfVYbR$p!RDI81vn>b>&c9b+n$s4ZB=qz0SNTVM+fw;NlN#+Z zKJB&(BG{hw$(vm6Jp1V-Gq@^&E=p9VMv=%8FM)j&FEJ3)M5RQvhCj!~qG-bK=6}mG zD72PD^E(sU@K5&LlX^uPe*qcm57@Os<$$aayz?t>`AhP1D_6I$y)^uDBziA}0@+53 z<6!0Q?Jb-3JyD|2P##ll>C!(=*r_~l3ubT0;LKdKlo5Rk!Y0KJG6@!9zS)cF#Up8e8!Q& z5xOw)2qWZlHA96BNQyN3DM)5Rf(GdyS3XqlPpaSpm7!IdTIM_>RyA!q&2K1aphfjj zum(L6#d12ic&k;FIAv?{M9Z~sM<*q#IBDt8$$fC;L^VYN{0-1QhO7iYbLf6up~wt( z#@;4X=RXF}7HQ6(f@+aQQ7rwz>GiGU-mv-LJv-iFydC)(w$?7!hMr%Zv2Xou;0yPO zVvpKd{aV_A%v(SsVpim5r-;Zh)%xOT-PrnP%MqIbO%H*gNJfS0Z#^bRzgt8&v*jR# zH-yx<*YgCE3_fhF`O74M> z+cUW9EgC<0uWjlx9CUk#qrRZ3NL-qNLLp;lu#n`ud<4{NTl#tLt|;+$^!Db*e=<7Z zWz$!yu3Zji&JR*m*uFVisrMu4hGsRy%tNzpY6whV%5doO^XqWa3MBEG%Up1>3Gv{d z*WIs^_jmhO3`PqWPw18V03V356rd%8EMuEhx8g`tvDuS!2Ziu#^rkb zfsEpF09-6wf)NhmId}W^bL%q$o!nwK|D$K^E+yYgzvVzzmyAhrG@o7;inN|w3g}sr z1Q@rKD=S?X$iC-{^wUa}sNLIU+XyO?OwJ)dyHL+Rpi?an=)49VEpQypG-9Y+eTEIS z()V)npDDEPdWPTrW5s5!#o}{#uaByg^0^SJA{^|>G`g+`SD@GY{Q2|YbG0fm#R)+` zeXE+=&q;n#&CA>y!_utgSuC2jha0(ED@+jC>T|}qm=xh@JoKx|_{&)_=qdx!6A%pI}`{=E}2?g>8)jjQH>{?)q8wgBu)Rfoyk|=s>|U9{68B1E#OZ z2V1C*915&*i>lIFJ6NdGeJX_l($+Wm;^&gLUW~h;{`l{Y9^5hXTarFzrLlfK@%BBV?m=+kh|1$3ZBdp6Oh-^JqVhm4DM z`l;!kz704@W2m|9cooIo7vxTUxS_hHlsJahuRNzx^n=x5|1o9oFgT<|W@w>gG40@gFoKI(!lpy@MCuTg2u24zqk>V z+pS(Obga4G3HC&IH%!oBVXYDU%qeg+<(f7B#$^isRwGCEz*4RHlbu56F(s~jY-oQ9 z?wwDG0M64gli9QSrR_PJ>$H)EHYtZceA~(21;j+@lYTwDIP?>MDm?Ay?gz>c0GWh} zZmbR4dXbq+4~txUOQseWy`B$NTMU6>T@#$HILcKTx4;GyDW5K261`oO$N{GN4)lz} za8)>gp0Lv$5q7ueSRPDy|DUg}eZ`U!XaiM*@bExs5iI1dM@k*7FfLlEs<$GZUNeEX zGGz1ZN-N=kHwSBE77n^EfyQ~o_6lXsX@ULLN2-b-c>^uhejcg2Ys_k_fSpePxNVnQ zcmCJihx!sy$iC8z@b+@&oVL5;L8|i(Vt7E{>&M1fNc(H5y9;=@$?b+o&)sU-wf6N# z_y+v_jz#q2)^ljvAKJE{yYs_q;noXdnpl~lz_$`<5J=AQ+TV@C_5K7bNEGZ(hrBz{ z6O+|sZpaF%8qP*VSzx+R#X1><}{>2JzjMLJ1P1Kj6$+)J*?>NKka9ukGTHG2lhsxlsJYcnR1Q2bd^Qry zWf*+d&P0}aZ?xt#Y$1rUqIAq`1R?V3<&5cPHV76cpCu|Aq zHj8pKYn7gEiDzns3J&w8s1#mlB}V5R60WjT!ibl0zda+ZYHfx)zl+=w4HvU|Z~iE@ zW3K!&-EUh%3F5X#mcMeJ``S2m6lS_R(swWpw)SE6VK5HUvyX6=Pn)%^z#}?zq>!+u z)B_d?EHZp~L6-Qq__)?VdD)WXBzTmhvfU({;Ck(`Fk#s7E$iWwjY(kq!GpsNmwiS{ zCt(JNGiJ)tD9H!jZe(i{mQc8+7h zlBub`RQF%;FRL13b1%LPbh{EomP zv6W#Y1YC^3ef>}|Z0b{|hW4E~pD!aUwE1{YGqISblJ)KA>h&VJymUx`CT4m1AU-=$ zU0?ry78Itpe@xk)x<193^}M?S4SQH*woEp78!rR26!IL@_|sCXP^}HGLpre7Q?c&; zK&RC{TUxOr($~06&ig<;p{*~>o(f@+kGMVD`OPfBz_=4}@!*GF2+=#|2ytH?n7s6srx zGqu2Q6{LyvUQ%N~73$SZPARRGi4qNnl-0=@jlZg??iPa&vO;$dyh{?jphDlKEWYJh zHEA>)X}Jgr1X_5i5Yi)PvOi9S3-uic&Y+6)leP&GX%##IwmVnxuR~NsTTK3 zFj|kP1O%#GJs4` zQd%0YN-I6F6iCzcLROnzog#b=k9+K!9)mVxdhnR1FQ`L#Lg->CjDRs5vy0O-=#s5* zZWpWn!L$gt#SvKIHqJc;-gG)s!r(i+6MB(V>Jt!vyMO!;EP-+`REOJf^r$1W<0Rvb z7+mj6Y&^}Q%?TUdJPE@WR3&~Og9!)-I0uOTXJ|LSA4D;dFVhG9dg6ZIzCXa~ zmrDmk-bin}Bk>lct;sQAPO!ZBE_04x3}=M>JqP*U!MfO<#;f`F#}GXfsTmb_7a$#l zE~W(p#tfg10f5CO`sa9eZVEV#We%0P44bzFb>7|v9?&-}F0MWph-L70bON-+^!5ux z1{`nJ?{P(5;fNv*OmA*G67LaZ`739;4&1H8u$RTo`$S)m<7c!hZh7QL*Q3eM5_w9g zvf$Vh?%46Q&3*r%J97D?z?FAt$q`oS&G*fvjm_^-VQ!|GS~i)(?0K3()BEZtZCzkt zdP7i+;dd@JT2B3f9GpP)sU}IulVaD9Qu~^D$Ai1$^BRM}gQInI$~m+RH@&1Bd&w*~ zWz>UC&)V=oCs#kiiQDDsSCB^BLdO3yR?P4zb{EmEETk_S>^@xq9@MYSf4ztJu{~%Y zFUEdqj$HR)4c0fg^E*9v5%ZK-0na1TcS%MXv}HAoJxzyPs}L6f|Ya%obdk_O24)x{IE1((K3%-`Lr(|MVTT#DvFFO z37SA#F(`Dx&y(Zux&xUtC1Q(?HS>Eq^xTT?u^=->e8-;0mx_F*S%fl?-QdZS&hJRo?E!R=0*GTV z;*pJ~RT1@=VV~7>=wS|P6GC`d{xFE?M=Xl-G7P1Dt)=qYF=~BImZPm1peHK%~R*<%c zwa57^PfpVbhI2wbT|&Izv{3xKwN0_Km2CzBweNiUA>0hppN?$ zZ|LM-8G%CXRQ^x#u!G~P2ow3}MN;__*oyZZ19BNkl#D&v<$GIK-^{m^dG0yUGS3tU zJm=u)e2X;(Z&NO&&28GD1y5dc-zY-x@UlvXt4#{eu<|N$t!{-ofJ0RXNUb=(#j4L? zRsHtaHP(l6Zdl}3C*@0hpZuHGuyB{0s3;7;2!M8WG<~B`|A~gd>!T{0yqU)i_R)v8 z=ZggJ4{D#2Dt^*;D~OHxwUze$#3Thfc@H&1N6~Swy!<8@V#Oqs}7q2Q8y9aoK6zK>M2NxI7@Vp$8qqK%vZoY_}y<~*g zdmav((QSwGh5MVDMU22oLge8S>Cg38(t~<6F)qOS{aFIH4k}k-TrNL5DcdCH&bg4# zFI)>!rBSF<<}d(ZK2unI>miOuo}T&>w>UI3ZHd`Hy&!V}3CZV?oLX8Opg#m~cQymK z0x6>M{5x2jZPU3A4j8?`5qolT`a7~{B$Hg1q4FppEP$@OE<{(^dC&a3M~vdV)HcrM z!#j9=OJB?bvR84JUkA=b$fr_TAS>y&Me!>`Wkfc<+09{u{41Ox0M}7?!du-|eSvM= zpp?_kIJU%`f*?y_MS2#BY$Q$>(1R2nVnE-xVfpJF0+?Mn-TdvgsmD@kf9gmXw2?rz zPoZ2!MP~vhB0LIScfAXj2)sFd6IY**zj&M!vOYs-vl!2BPGCOHqWJ>b;z*E9Uq1rk zwfyn3y^ojz0pt?&-39D2(lRmwhTpb9j$W(f#H1;TN2QB$C>vWqK>7fV+qo}-zO$O@ zfDWm{`S3V{jjV!)O08IO$32a6AW=DAZc5}Xr{q>ZwMaX7^mI`Cu7Cf$Zw3||xwo89 zA*x<|aVPJUjXs%&`#XR2Uk5vAsvyu+`OQm9>#bUxJV(0uZ@DIc5ZOoh{x?X1_yljz9)C!~kArIU7PH zodc!~avnji0G7|?zXlZgm)F5K{&nbsXXUmyIA*wTC&J|7^N%DS+F)=`p=!2Svo`N&notKTJBd3m>0&Z-T6 z-+sV-{@9RYp}Uy?lw!bBsuDPscKK9vkukRQ00FD5FHv`{HLP|OrM6|+m%S! z7JNfiSEvG#pNgm(!w6g}S{IDEUXPbJO<}xil6WVDB1)f_%t}?qDPLkC`|aQxYA5Z> zFA^t#yCY;_MU*e}0{Gb~JD6;oCF!HOmKrNVZ_ETf6l~8pK(wE>$$Lc?a|=T|seRBH zkZw>qz0?tfdylV%8M9cm>y!yBU}N>H-992|z4@tBOFV4)XLu{o!%W3w&E(qHn-WMW z1)m=?vyC=%S_FkjW}D|w7(BuJah4lALAI2jFg#0}YH4@`?~MA0WIR>m@DqEai!lbr z&au|S+12};9BQj_^=*(PWvd~#%cAbBsi=&qFHuM*a`+GJEUHf%Rv(7t(DE^jX((yJ#g-Y7o7`3N)k)y@Ng{(R6t35&& zPO8NJOeaZb@Tu&Iq03&t__ckZCjk{PPH{R)((ZqVoxk#drFIpZ z>q?Eu;x{Dqb+J)V_OhyWr$OKk6=4GD#-Vh-wOO{00=s4*9%GJk9-PK%pW9_na@#US zr%qID~|`!@aoVo67LZIk>pTV9GP3=V>qM z&|?=Ko^KItz|HglN&>IQgBY3?KZI@L>BZ=JaF^y>nmOeJB?-DT6%QXL_1jZ>vt%cq zOS|xOH!O_t&KKL4`1Ld4u<9b3>py=$W>vLPn>;)#NlKUf$Aph42hYiJKo z`tHIKB*`>w(TmxOss zd~4}Ni0@OJG`nd)rD#WzJw7RNYRez#;zvkT!iIPVK7(BbPFr~UPh+AWnVbE>2*#!E z1t70#Jio3PIm%Pt&!`aLNOjF*U`9|;oxRM`cf0eU2zo9ti+kkYmSX!ML5oL^^J#Q= z7-1U+I}h2jK**;1f44oj?7>171gAWPs24U%(g^pUeji+nN0;}(t3w~43@Yq|@ak>q zkvu6JKP9IvWaZurYns7#2OHGW?zBd20Vvj;zeJV_qj(k#zH?HRZt>6c93eGE#};Ak zciab=vC4qZSK#-)>xBa|x3rCXH$7?7+w3?u%5BS@EtUSCZWpl=U?l)|268(}JO>w6 zaG{sqqc?ectLy(PAGGm*5uzt~LDR<%ZtAxU*u%VPA7RWV#u4Qe=DA%~0^L39$gf_h z^P~%El%Z8s@$!Gz*lY%N?SUa60G4T?)i>;8(`R4;UiC8>hkCj-Z#~oc)#fbql!$r> z(ND`FN`p9_Qp=Dh{}Il3)@-u$CYOlQ$UuDDJRvPYEZ!MHS_OI`LaNE@$P-`AM?J+i zPh*Q1jdx0)P5lXb5+59lIVj|9KHEruVmG+(wo=OIm06o%msnKY-{Nfx6*Lv4n50xL zJh+-FV%psF!Qrgq3(Bf5ZtPnaqe^(iwt~)>uLw>;M7~y8wBAbWj~Lr=uH_ft{vF2l z$n&jopgxKvAuuasj0mk=i*kCboi1En9wuz!HkN9g&5vF`AhyD(oJSNL6L9fz(Q~w| zb9au+et(<&4acw;kBz(47OJB%S0TQTguEMfNNHuw%sXv;GH~bv?EYXHW+CnM$JIG9 zdcTc}oWl9S_-EN;0$vzekL+934e>o1kn&kH?|6q^*P4%O4Q{6hvCu{gg)hedMWK z7P@1#&Lmz@7_TJpzn#yba-@Bf&u#nP>x>TXpZoJ{Pyk&m=-Z<$V-8v2kcC(XO2p&J zj#j0V6n_<;A!fNbYSA(#N1D!{5{pH9<`0-Zofg=LV8Ig(Ej7SjBIIq9Wuc}&h3_>= zuqKQphd^}PTvj;2^6O*%IK`! z8$5?f_sJNN-Z^?_NvL%TZ;CLQfMRjJy}(J)@y+$ve-Nj2vbNz;uA_#1c~61ElFegBr5FlE02LS_o+xZp&eJi0l#SEl8D=mzzQ92w$_( z3mX~w#I`5GJr9b&^Zbq|XXsktujF_66waM98ofXG9q0ZXQGc%RL7G>6Vjpwd?2wS6 zIK6)dqDpBB>p^4mt(l$BgcL37%mq0TKS(8kO-hSlcRG%r5)olb{5kLmI{(CeBugOl z-ei$wkF7N{jhKQ$(&ZIeX|haga~08N)ZS4I zSzkNJ{;6ooI$2t;SCk&qmPsWZl0|wzjniqTqiv87jGe%Xx)yV5sXc=Bk&wIJI&w*# z23ZV5lzAGbqJFWh-XtpGJQUx2`UaYCrBx93dmMlNrnwix7|R#=iQ%~3^`=|GXO6Sq zW-Ue-xowkRc*cG8>Upv)T6vwqybEGGv&v{nIL?u&q{o8)x>hPAk7l_6n<Y_?X{|-01yM6wBSjqAeUBG`1Z1w!=Xe9J{V?7c6+P>8>Ba|c zt{4FXuMDqaK(+ClW;zhYVbL0;}Eq-nI!O$ne zd=2(xse||!=l3wJ%!a~KM*q9FnzaW2?dfV;e+U)@K6W5HE($PH#hmX8x;9?!Xb%&= zTgUH1sw#}k3mE{>!ePMoS?KGyn9t@V27|eHu7xjup9R01i50!aJ-$in4espkXp3=N z1v^pOq>VmEv3LJXdty{mlTScvl+fexeluy+f}{d^q*T{X)hg{Zt~5&XrqAYcQq)tj zToH3omcMe{@w;^_^7OFA--TP$6^t0aFpEMRb%-)?P?Re8(}hwXy6GNeOoTzwNns!A zzPVrqO%uhIswAqLtd`VAvXEG9qc>>@B_gwW;UMFSX0%Qhs~n`SIEL;UQ4#JTxMdH4sm{Ykt+C)kKjgC-tkw ztBpYo@+g6*?~dZEo~u3EY>~qM7_x_#rUAPs&>U;C!S?zW$~vSWA^40l6en`m(n+Ob+WEot$S%aldVkf-&EFAh z2Omc7kU1C??-_YiMrz(($LMZ$6e-QriF-0 z(vbhwJ{q`28DOSa^eygwV#tv z6`LP`nS79K^9&pS4{v~+{GEs9(fEd|c$E7vEmjP)y04t~kb#t1;9IpQqGoRQU`&}I zVp$_dL+j_-D*BRL?Rpo%y$o+qJ0OjVhO$e$00;nj>;DBPo0t?$l;l_cLwU$Nu&g(R zi#1~<_F1O=*XxsFF2EHq6@siat^DmXHOQ!2rdjmS8V~Mo8i(3w)N2AYibnaF@_l?L z(oahIb>z_*2YPe>2|ds|pp&4*FOT_22q#Nt{LD*^BgdL*WvxHWEn`J=%FH}Ko`HcE zapZDGWR!^kn-ap?z^R-5>m<^ZJ~G=Y7&eHXLi)C8u8{LR$)zl<^0K7r1Znq=LQy}k z=+nd^S>Pzq3IXat|BqR%!P3v6`laW?4nDLAv({7|1G;K|=jVNsQo^^xhqsQxXV#fH z&k=fgLSn{O1$Mvl;ey)kkEB<3lY2)>h=`7zp zN0IYAs!m+z%j2DH7jov9dY3lj&bRg0XuJ%s=*`w{Bcb)TgHP(y+c>c?RXb?DlC833877KZV#6K&^NMTIkH^McEzq6uG{>jv2s5GgRk4mF8)&u z15sOfqQR#4!rxKzweNE9XkB24H>We%^Ka6AzQ4rwMFa^bXJ9x}(0gTRcUD zH7R<9v{DQW+HWp7C>?}FL#6iAAO#Eh?HLaQG?IW$F`M_Ko5{Ll;znk3gsI*51TM1V z(>4?;$R5EN?g;I(R(NkBItYW`8m2El>v`#(n3%Y9^0STyMPcyu1bjIdL~ejt8l3f; zp^i%tA|;{+e}wnpBkY?Fc=LYjkI1!k<=DB7Se51`?Y6Od&w>cw#x^-aiz~~^NH0ac z8EhC-`n};{k^BpVR9&K{@m*}v>@Qz0ns#l`8`7GKWp|&^O=c?#{Yh}54J1fKYS=PU zd@jOT8M45nsXIt6sDc@AqRz15R*Q>IB$rTY#N-$hU0y!g_~WZoJ{e`at_oX$CrSo& z+%u}WfNhq-W#L&?j3f%6zih$Rso?)Wtnlg;@=MNX?x-YwdT*({$;8dqvF(Xt4fO?K zfwyOtfE##YykI6!_;s*!tR3w!V~IjuV$GDlq@)vJA3uXc+B$LlVtBKUL-p>NWhRPXD=dBJ%6 zCRWZ4^Ge7@svfW@$%Ld4M0<;lykS9g+oJ^1Pv?5yG}&2XVAQKeDK{Am`}<~pNF*0J zo*C|q>7`MFhz5*Ge;{yarDPgl{c5DpLSAnjx3xm7uY}mP5>S}>v*{!Ie4|E7UI}=} z5q&Mq^yc<@#0sfK3dI-3;|mLxGJTUw2gwh?L%7dbf4if0*(2I5Vmww7jUYBvctR~@<)(Z1~EOCsd% zUiHG^V%s>TDjlHIe8I#mR8+y?Ki1Evi#@L9QQ6ffSpdBg-rA73`T+J3-u&fJsnXep zaS*a0tCAM}9nFbM$M;l1d$VY$Ld23FFxW;Qu3W9Y{L#!6pDnc@Y9mD7CORrO=eGTO zEU+%4XNzzhlXW3F`PW*OY|J7i0K$yx{=&spg^&6FxrM>^$fM?;^siX36{IOuycV5c zdimH)I173o>|XJD?Xz6PYgXNr8a9G^11?UY;)O;&)li-+3)1-IA4sZBW0{@hnlJr3H0X1n zYAn?kKpO+^YV?ipzy@Hy_)x?~ogklU%4z+eT-KPvqE(>j`Eldf;4Shg)LCRc=U*qe z07`zT(9O)bRQtt^b<)VYr!?R?0sJ7n1jYgyiV2I%SxkQH7D%-v9?6qrE5ocl4FqAT z54r1L_vq5)m3A$XD=rsThD!bt;zL5HQiDD9WjXnTWtRf3WhZ;D4=rH)>H& z-eiAO;Oz7d-%&l}slIB^pJyz5O%?7{+v3yw0yxcc>8NqWq~h#@UYhKJ09i7wXR;ZJ zI!n^Gruka_js#0?gsf+6QHt7jO}<{ROL@PoghBlcTx z19{6l{yo#eFz4}1-=Y+Or1-gs55!IIFjrG@ELomDrKwI zgwPHO;PV3+BlouMMR(M=X{KNJ(FM9VuC!TA>#VqE#r81O2fa15d%kA&7tL}DeIx)^ zczAI1nT}!#_F}x{^GkE)N8a#Ep{2GWdur;9mwLFzJWwxRU9Jp{w6t>DiK|zrDarnv z0v4m`L@O`8wZGxBBTh^@R;kwxDm`b3${5@T+OJ~2NRYxc(8<^eSNpHtaj{wOHWBsI z9(V1%yfG=_l;2U!D=%j(k;~FOoDlh14O|Q)X;R7WWM?oy^UwBWHjv@B z`E_&`KOef16**5^BPiWpKA~Q1?W?y%8!zd$QyhHC@2q+-r?1vEJ-LlAcIje-X7EGs zknm)?4P#2#+pK|S8{rdWLx2vxefLzt<1x|;wihaeOW|_KsST$3p4#P#S(&L!%2xqK zCxIAD!iK*-VjET^*$`iYs3LNGd_kL!G+%s*4t64aG>9MpXq76q-a}~y z)k^YOi!OevqSK?fv;N#E0MZjh%kl_BtHcY3p#qKC)xSWnP*LD0+?Xx3&>k2p988ML zAbC&tU_qpzY&S>jses~|NZ`;K=#Ejs6Q#yjf>XuhD>qN=glKZac3>5sVvI?J(Q`}? zH9w6?OWxnm<139M)q&~i(%mjcxDa;xwlqe+d4Vo~Gdb=R=uZrZ!<{H_qbYezWWIM< zJ&kzJLTRhh#45b$kyyc$`#mD;IO8)3tRy&&G(5$8IP`QhaPg{8ty#Lr;7YDrDvsah zXbtPV1uhp+rgaw5CwNURA%1fcQ)~f`x~%pO|8$%7%_EcuqNT49wbYIKh4GPk_-d+{ z_RF&H&`Ep6TKN>{2a*BxTw%q(nhsSqMlyoW{*QF$ipvT5P+$D8n|)tZEF@3*9Qm@7 zIK#Y#AnepUvdgK7Wlp7%KkIR5!vCfHsE3m!uv$y!?NKnU z-mhR1@{jYJp&TZ2XlaN-29ff0Y0SZ12-*q)VSx?NPgH#ne^Gcl0X*!GYsH|;cMHdx z{d@L|uqUTlNgChiXlazaIHsZOr*3};#n{1IBavC%T*&3xE9`mD1)53Q8}k;YQBQLA z7_+$jrSY0egv?wE!uMA7e^a~fC4iblU^jK{dytS-II}BiKYUr%i_W~%VUrI=8*&09 z4WkN>z+4)FR7u9_?}eBTitR2VuT4NiUmGM)9dBQ^6*hZ{pQ4~o}QXnX2nEHNnj`r7}8YxtNQ>1?ZHE87e26@kt{ z-KXKv|k0-B{2YK)Feyl0l4$+YvZJMBNq_xE~WSAN{bblX05WD2OfJNKeV9;6m z0}xEVjUet0#IV&mh&|?$qS|cGy4L>0U2~|KVkY@SK06RFAl**=oo9iGqVk-6AN4}$ ztl3}w+C-J4yDe=a!Agh|R)xM9z|o3}>-_Ain0gRZ!MSkoO$_xDt_^(h@PSZIj9h6zW)uOIZ*i1jJI4#5eFlWH2v zI| zVTsUr6cB@mrWv&c-BLF-RoA?E!kHIsWF{WBcL^%dfZO6Rru&9~+<8eaAr>(kC(QtCKIbx4AO^xtT)XOHjxBtXT z3~6ujA_!f?Lb8O^mlVSklz8mscNj~anJ7j>df}p4t+-)MgRfqZRzF4^J!SiKORw1y z!7o&^G58~j$hdPBShIPKUcRjaxv@9044wkdR%z|CuG8C}J=GdB3X3|8{5s``!9iL9 ziyOOGkhzzBh#Fsa(_%E7Qqhf=aSQ2LM+@3d9bpPrA~hnY;aal+>_po_CuLnSEg3|b zC&X<71b3sit8w;;Td}nEjlUY8 zK06}^VkBH(+WO$_C!~o&R+gFYvz>%~hdu8$vZ3a+rC5GGA?$=|6tZK>-_|g38S4ti zG-Aa^5=+JRsG>7AybxSlc3-#$Z`_Kdz}`VnS5H1N(m5wHdB+fmM__oB15qDpcSHdd z5eAB*xJMugl?Y|LE#-5YWhw3tjA|C2ROG1&DuPF3I^YD*1$On~I~@`9Nvq8(d~F`K zl;9ed;lL}wHrKoMp&)5$0%G>=M_j>P-TnfFG(H#qWd60EdJw0_P?f% z+g&~(Kad@m!E3rA0v(G0uUr^xTiK#{D!UJ+5xrHv098iZJy+5C^_#<7`uI{9hT8b( z{W3-l>&CHIo(zP|#RisGh$eM7wR7AF-&^6-vTFZF!Bsi|&i#-1Kq>bPh1P-%TJz#8crSQ!i3ZQ9mQ_H8F-(7o)bCOQQIUam4Z>pdsYj z=+7F5@Ul|x^}bz_EHQH_ru23#hZsNRROJmJ<&IIY2dz1O`E zH_%^;HHk~e@^(`{T(}aJs@j6=?k()iM92w572*xX;92<5J550_CA9uImTsDSXjf^vCOP7;3B zGKBJ+HlKZu>Df*3qXeTw?g}xg-SNQ?((^!;fi13zsqIdlTBwa;F>?WJxtCJNGe#%| zW?K-J_Z4sHc<)RTw(*XtckEP2XX)xn{3~S0@sp8Tl^8fz_*1;cT4=o^c6_m%%5W#` zE9nq_J=fx5nW~F^rlZz5gK9kI)5*?cX7)8wm^!&=vZ)T$BK?>sPxAW@<;5G=z6=z4 zD2fr@yZR5m8ZzzZjin$U{8Vc&+G#y^2DGq>+)@e#yM;MDsq4r<*xKV2m}qm(#{Qwl z{}qcy9~I+Sa8*)2dGWV!7cwh1EDm8@aaqo26?+y@KiFZb?`rmg2=g+EJO!14Do0EgyX#UB4_7S z%acmddND**J`(ki*N?H*L>oKk=!0KITc-G8ZW&886LY(%=pt2yw5mL4s=usH5UPxy z=T6Mt6pOsTyiqjVMf(;J2k;=0y~3Di?|d07RG##w}a3I`A2E+ zxE!EQ(X;|6qEYvP*?f!BuiC8;O2=U&U-a;|8WxhsGIyRgzQQ&s|WU&FI7uH z>BD|EYt75z{YzRhLeZ;T5*GEP@09CZN2zPl@x1gcF73)X;iAPqdRb{K1+t@7G%%40 zb%p3WRlo7=UDG@6!&H$JjE!G(v09Q|5=GZRk)jD?IV5)3^o|n>4q?qs+EXVVZvRyW zQA}*5y)h*g@3o%k-dtUPGiJ3sFZn=j;7p&~7h1U$iu-85f)h<;OSXOQ5LO`}YFkK} zR7w>7BIw&6Us<(b#>uxyP@}w#Rlk7v*_vNU_iO5Co-Z$a(Fok!yhG@U$zzp96Wo)@ zASEJ?DYN~V<0KAkLpy?-R26w_j4u+KAo>8^&@KFF1L{iV21*I)*FAYx`3UC~BzHWA z2HQro58@Tx-L#eK0()-BECEHw3PLUFKgIL)!~;y$F<|JUeGt9k$r;yHy0L{s`P z9rsFE&3U)X$Gj3P8|TOQVJ<2k?Gk1??*VAS+bd5yd%#MlaJ7+VM2bNNP#6QC)gH1f zL9Yc!Nx*Y~UT%8-TxFFd`*RvLW6lfgZc`DUkaPqM(CN-Ixj~x=LUpxCS3|RPFiJhm zetdSF!n22-zz^WW#7D?Rsj3Oq{5^JxM+|tYhQFD=A)iVaKN`eNe8xhZ<&M97O6_Qg zY$Vaa+0D;B@8-9nFLN@|I4OVrl=SO~FRNU&2L0~{hQW_3=b+^QTO^y!y#(A}I;Sa= zLb3-S>(MdyGKWp|p{0y@TZ8g0g}iQ*Z)2Z2J=ExTbk&3$*Q@1F9i(k!#C9TZQ1M4r z9I`i15ShgFzy@|Jt5%lMYHryf@-+}2j`PW7^*kR0!QYq z6#jp+Bx3X&9~&KkW>Q^+3wV({7msbtCs%@qBo8f zejezjZ`KZvBa#0M{L9>880I**?40M>E44PH7B3*pQ$%dM6Hv-39WAAq=1L+-ly-zPWEb6f_d_P&RLjqOxr_2fFjcyWK^6 zkqMAyEzk9@8GoE`l1TurJ0%RZExlTd?Xm^7hZH1oQu@wJ;2_9|h>Er9jDb!L zfHRA;ukQZ3s}Q?EEJX5!j{YU~2_Ui(KZJDqG|}v_yxa#?Dwu^b7OXT$Kz{1%(--vp zwtITuHRzK>3iF!70MJ2^Gp%!~cP6Q5kKsIh8IR4XZ zIyQ|sc3l)^K2E^q8KVq;^!bfz~tMzJ!&%sh+ zNNl1G>1T|V5-7AdPNAAfq&+?iz5;R{aC`Ng>k==lawfeG%Al1GW{m+fKZpYaVwm&u zb7>(inVA8*jffnlB9(5jkVC7ra~qUxTs>Cv3fVbfyVv7kAWMu?NsjKBQeASLIAEYy z`9t2O?>y!u52}_5Uo|B~`?>}4EJuZeA>db@(1VQnK2*NJ&gZ+L{(r$WoX@DpW2xG_ z)Yot;kbILsZA-Gj5ppDOfb#I#fCXj0f7By1I|W#$Uj{N$5#e0x;(nnOE+Tqtt-IHd z;gzGoHLrrJrzkCQY+qk|A{Rl~m}UU2w1dsczvkX{@thiGSOCRZX2}OutQAFcjQ`5Z zVde@tKL&YSH0-R)u+Yy|UF8Il+Of7Weg_&}pgyNSms1rGeo$^f^Ye84;kjZ|YLBqF z6FlY$&x149k$VC{zkGQFL)DJ?ER?BL2DG=C8g5op{G-oktzYk)4oM&N`i$%hTL@6G z3_JtwOP&o%DXeKeZ+{V54x7EVWtz@a!6XVUX%O#k0QQ2di{YypQ&hJy;W!mXgg=fh z2L`v=nFo~Ue^`1!Db+OSnK$3@V^0b@#9VS#8693^$vtdj&8{x$Xwd;K6w)Q z@ln3|jltyWoyKcEup?Z0bMe{%YldYB5NoBWJ{b;v62(mRg-o}_&luZzcp`b_YRraSGKg}MkmDK-9j_;P;NzW1&x z?5(IaXLxWj@$l<|;o%P908KAO*X2GkdD&njk?wq2b!n@KSXOBy0-eEOjP6A{eb{nY z2*ruXvj`eVHtLBXuanJB4>_a7Km`0v)L=1p3*t#02xJVNHK#FrgqvyhY z#$APBdc)U(BuVPygA~d@K@+VPUb^SXnTSv!1{`=6Hpa&S|D#TJ2Dhk2`$AU!Cc`Yi z(lu_`n+?ERt(e}#pI*@eAt<@v{+$k740#>IX95q9mU($>Y`pSE*gt-b6X{9I>FaMw zgjwwH*^94TQeH+QTi02{L4k&F@%VRoW&&l}*{mF}lW(sJ_k+Pz9x~=566cuoSx7UC zH3mePF)1d%L)yIq1^ea|7$VJMYGueX^u8ulnr8JRafdvm%L0*ONsUs???-L_(S_En zTBc~=m~SSvs975pRT=Ggt&KV59>KGPC}dxo;34i!`%xzkPm`D-Ew__gxy4kr;?qJd zV9?O~cC3NgFz>>QKK`~neDZ0q%#|8bXJafTV?d^=>@~9b2UZIm#$V&G{%N<-S$dtd zPA+vn?cUbf#|G(GQUAj1xEhO3UjFE)+le$w0j`ZJsmMx+_c%lE@ zSCjXd)>DlYib?ti@uTw0mdd}#u**hQL-tKCsKVzs7S?nOi3A%OftOzbstW^+_Ag$1Q3rC0sJiv2E1378H{XzaRUz(4FnY%|z35#^dJ6q6tM& z6)vX#(5z6+(O6qghG$Ig*XpOL?|rFPJ*#*##el;;`PtTfkAy|) z#Yf$0Pl^y7tEDatK_ls-_zWs7o8KRDCtqW1Aww=2TD0Qrq7*sU$dCGV{uN3hW2dtc zS$-L7AS;O@RQ5F^nW>F@{g?W+x5>HslH=(&Z0Z9FUK7+N9Q0?gJ)r@yO>+kyj`^ck zDbdOT!Aex)tLuKZGsOB;NzjI}84|MvgSe^f_ zi_ve45hT*jcG~%Kj?IFrbDK`KeG|gFxI;bSW&Fqa9rh>Xa|zFwFgP3AdBFB)B!5{? zgkC$Gd0H&YigOj~yXS!ha!c?*!{T`$G+K0g3Rkk3YwRC)WyHN`HOrPuzpXimDB9|C zSvU;GX#bdIP5{hUlyp#~WIA4A|F-Y8?TI@F03$^tg5YWPP|PvjeKrq!;=J6Xjo>we zy4bhJ_I)TbwWgpjAd2;^D&V)zauB$YT2d9>yaNLLIR++hd|us@$RKg1=f}|Q`!{9p zLu3NM>U|KTPZ&}mMvL!rdWD~Vw+X}oH^kYRF$87f z-bMURQhj{IQuXI;19}bm!ALuJIAeAI!Wu0m2Z`i7+6iv z=|lz_Vuo13#KTDmS0K#hMeCIgHDW>9Pb>R)Ay30T=cE3x{8>?rloK)$jAVw|H0*HS zB5M8%zIraDF(yadc}k~em0W_aR1_SeNTliNZD1Z~RP>o{=^0_JqERZ2W=^S#d}pUz zFA+15oDx<}T1~W$K6;?@m;*{7Y?^d90hTOZPW$-)9@`u;)(Od-ZMI+sVgP@KKdb1z zRe?)={J1fOfk+HbQ#qn7#LogJEFgmy6+WdkbJe3Xb@J+r+D#I&8*5bbRCZEHe3;lb zqqBaG#F|yTE4`;{x$0PzSOqt=3ah?iTnYbD*hccgcOYb5u&+r)AKi$Jc}{T>Q~AYT z*1(|b@a#MqunP>Y3a0^sjFcF;l{e5_^0m(!D(fDZ7!er_`Qv$WOYh zs0%rDg^Zsk;Bm{pjAOJ4zb))8{990NbVA2y9sB2P)KD`sm+I550Q%K`|FG4Fl5EY` z!{Jtb5kMPu>Zio?thca%mKF|oJwdGh8CTCxgAvkIgD))Cz~%0Jz_dnQS}DS0Mwa?|}8Sd7FR^woAzgS)!4{GZwdLIcLx49B1#bVJa7boVKYjf<+LjJ!{KvF?34{|g z+Zeb=>5j4#$n@i9KJ3{Y;&}|+En%b z^-fCNeraAtOD^ai?Z2#wj$gCPTEUmheW_&`pj|B_1WD^j?EGL+F1=GmLJ5YdR=2kK zs}q+hc$7P_Byr^Iofo$rWjHJPnKbl`8RWWvL5sxH!Xfc#DsJ3`yIG(^9%54*IbL7s zEYR~s1g00d+s>ci0^rg@shLkDSkW~+cy!FVeBo(~AvD~V^~#Rs4)<*ImY;w0bu1@3 zIL*i`GeT=r?KAH}o!t#ndgj66?f!@2F@h+RBF^shb!$pLq2486Vjw*a3Ck}U0)CJ4 zLy@DsOO-vf1^R?&umQS>zCO|u{J!wEpY=QnSv?PK$JgW(6ckKKlNU(;kEgecit_uv zzX9n6>5d^qN?N)@QlvpjLO_Nt;i89b5fPA9k?xRgQCd2srMuyO{Qf@oy%x`BF>|hS zowMJ2zqVAWhV^uYq{Hl|`ULqzTrPo6y*s$MDZxVi3HZFTVkc#FW+6?B`xRzo+9ZbN zk?~gt6fTaP4ec9k2UnJ4A7p5sR3imV70_3&O+v^PAsNv_7A1l)9&D-pb1Ibh`cIaC zQmNRKj3T*1x_4oeq7$@*m+nH-WHm>$9Bj?r`R5!CwLXmu-q?3LRH8c@>EB+%2Q_9r zzReOU3#$(AJZ_PKjR!_J5N6b-wo0_Z`!C+^x(2h68+}I{ZiB6y^Oyf}I%@M%yqhFP z$XfCfh7d$?)|nYO0wdr6pJOG!{T**-VV~np{22*wu@;W0BxrIJz^~zc9mTzo*kV`U ziQXPyDfsN!3p3u+IuMmd+oGy-7V^IQOLl&4d@{qRu9yH%FbkL6d(rD}qKfU|hJPPV z|MuoeM8((a<;VY9icpW5gFg~<@ZkRR;iR|t-MHv^qFZm!4-0CK%?>`)xqbfWHkYMs z)AfvdXUwj}ci-CtK1&T$EXF0vp&=p1g_Ng$@RO3Z14whmCG!~RMSJV7vWu*|&6=an z^&`5_(E~eB35j|d0@+dJE3j!%3P|KhI;FEGPu_Corb^1kG$N0(%hGH>@TBm)TBo&J z&xaJ`ImKsRX6af z$ov=oz^538p2zfx7LK8)io!S;3W8Ixig$%w%1D!CADWQnQ?HZE`r`*dzxbT!IM66E3r{JY=#Kfl1+r^fv+94VKSqNHCv`A;xe-+*D)>U2a*Q5TYGVScO0g|vVwamT&9=)&#`uuUMdoIpHp+@Jl!Jd zA|(3ZZQbX9)te2%2#ob1I>CH7R_FSK-?1nNisiHAPae&xenWI74V;j!^83pb5dEeQ8sOKS=}6srevQv!Hz_TO|e z>{wP{#z<`Q1m&@Qif1Fx!eShr>^gCkWuWh^6hl?35g+P|efqzON>o;#<^Y(#mn}M0 z*s8p?KJE05O5=$BtLREDiAO3s)|1aKpd=D)cu>$&X%$O)!*52v^JUbZ?4=M=G`6&y zWxpHzxa%1W{(w6NRNX8YweusRgH{i^PyT0=>&IUwXX6eQs?Jp;#~xh!Q)avXXS`0U zG#C~@088=2)UCjtidC{Z@*OSg;P!yM7vuq#GO)5^WkC6oDe0g+V_(QiNHwxQw2iV! zUqtCB<63yz%l!^ER4GAf3al+ajLUiC>gE#!+Z0VWR zoV#@suNh8~scHN;sza?unfa3qYEeV-@OgJdc7Nn)Y%aQ!98#LqT4w-5=DoOb)pzF~ zS`54&hxiFKI#yRGVRl*2tHEO$(^i7EWJJ{^g@NBsK7hi{8`%_r|IO48$w17%$#4Uj zdCpX_PWZUKZ>#_C@v+BHue$&ho{6iS)T&h*KW)IRy=rAzY~4K#tIg5dUTqX>*$pIV z^UFMTY<@~kd9)}Z541mNw&Ltt9!+`6>mqR-6;_5(eCQo?PHNDxxKipc(lz_%QUvXk zwJQ;G=s_mcUpql{a8^95LKOgCd6};2{DSiFiwn*ZI~AhEYf}s(hw2$C>S*!bB_?EKj2vI-GrKxG63Y|4mAhqR zl`QT0VRnUYg1%oZ!W2`mpDAIHt>9V}~dp?@PhtPf8ZC& z)k;;wim5`Ky`_z@w=jvX-5;?>sRrQ8e}G1$rNcuaFix6rhsR=N199D+5Gz)m66`-q z?y)U~%z7v*(;z$A_n;2FXHUx->rE-PyMOfV89tG#dm+LVy#l^j^q?qHG4)k_+ApMe znKZhNlZ3dA-l$+}I#Z9pT1gSb9xZ;kd`tGNY*wr&$6)Q$TrRcZg@xq=*y_w!t=5EP z>MLa>qC#dWu2}P7PYIn53~H{{Q4qQnGtjiKm3?>8iLoDZ8R=f5=kbxUq!bWdx9^Z? zr|gdCzD^Z3z(d@gL9BB9ie{DW%8LGzxXKJkSR*yHvtq zs*GWwPw-#R-p?;y-qNRi>Xz909&q+QRNVKLLN(08_)tPJ29medCG+~XT%k*!M1Mo~ zF=hk(t%%~2rol)1cU(|~CR4Rf>{gDhYpyMQqguva7kl>o6aOC%O|P}LUqe5!6fuLq zc$C*p8niFcO$gYf`Oxo-uoLX(?fVIsQcumpR8ai-pHU%6CA>pS4z>>LdM~Asfp{YfSK~P>{4Ya#i@p+8TF{7;!H!sF) z5xnepU947 zcwmhX@8Zo>8qvI?P;YgQ$|@}jJ7Y}|XTCknNmmzZZ;*OSF6R7T*zqQ~7=raUZZVaV z`c&gdwNrE@!~}U$(hjlwjiZ4+B|n^=wiNnkQ8k@W?_aKlAWVT%Gh(@-+Gxl*Hrqx_ zuZ7aSO#5Zc@XM48f6daL*8xyc26wi#%+QxMFXZ?wpsbP0TY#-z{Ixl9DoEpNFe@`T zLmprV-?YFJGRAO~#%nbTxXamPtm^owaeRO1K_(7u`BUg7erEil$blxmJ~i#4gdnrp z^p&8&XWWzcl~Q+2-EOqU)%KL=1AGp&;CYL)2xmF2*4*y&ItOzvQiRwJWuc{JAmkQz zv-qg-X~v{4-Aqihh=!;R02_(3e!!IdXLK%rg|Q6`X?rpqSEg4V$gxobysYofP{)Jm!lD>HUxlNYej6=2+4ybYml zG*tE}@|XI%v5agN&aSiRM>V|TjsrP>z>a9*-*UQlEL>HVQCtHkZPvV<<^Wb2x-4H{ zi7AqT5JP&Zssz(2%M7bQ*I`$ty!`05)h_)2K^GVjrQDKJ6TT(rzHe?Gtf9{k?s6ud z+U^;rJ|^ASW|u^jP++9Cw4mCxko+NBf-M!HfW=-fRNrX({Ivh(Rf7s=SHwabmv0rn7 zWNC>lMeK7PYBBUq-as4SSo4AnWG;dkQO3@t$7+nB<9)7SFjDwn_C8ibw@b{f=L!N7 z=clb3`-i-*kN-9*J)cd0$ewc5dfREJQW85;TDuT)_GS**JVC-N`>?wn-gYK}0Z)mA zSG37>2L@LC?L`+9-LVnRdeD)*s|x(T6F$RiNiuampB}U^sark!Y~^l>Qt~u~<)sv$ zkq)P06EKoqwa86gljvN?cG^+oxlCzO=wz{)^=5c8s4y7k;V`5_!J(TTC;o^^an!aV z^%(XnD9qR2!dZwQTLL{~&)4_8w)$;Bdmlf6K5&kS-yA(`ls4|#u0DJ>nAYxotOMOAWo ze~9?he7Epv6CG{_75%q3djJfXAk*#s$CmWk7JQA+F@O~F9{bNte02aZ&fVT3Lh8PB zJ;Rym`^9>1TjXhuN>baIkR4m(?~(n$eXD0)!;o~;bKA7#;kh?;I7pw2hj9}?N-02d zcimEUW==$17O59RT#wjsgbx@EY?0i(yvU1DY^x}9*|E6 z@?XrG6ePv_iaX=6foWn)lld6cAl@0=!jYY_nJ_-~XbsA;2%PAVpy|DA0bc!z#r`C4adNRP zFpk#?U}@pwbGX0x!aFc>E)laEY>elX+lP4jH`@8{k79je5bnygpMhtU7uYVI*SEGx zoi3iuR}~e(MG`Ff;Cq2hhTqHHfbo74J(ySi`n>QULz3K+m?_hn#)j|0TPH!ExOB2~ zTdtywHr0Zyw3G_aev6_1S*yndf0-YMdRR9$)3SOWJUROmFE{CdD73#LZ@r(sg{~0u z8$;VKfBu8qiGjE?vFr^M!`kC_xnLX1ud zgZKohG1$zX5peWZePEvS%ahCQ19-?yE8ol}IZRv&q(Oe%JeHIgWb(XynwcJ7de_L_ z-Sn44OPJPe4NG*%8x8MePV8pTU1%5wo^(}U*lNcW?u~2;Az|kA{{|zmjx;($607vF zZCYCn;w@f?)AiZs=P)ke?SS>?oRhZ){{`xu$T-uAU%!@f!`?YhVL*&VCp&gIj^ zBOd53@^2_+sw4jVtUAYUev?xZy_zgNavy{8a})S&|Ql zkEcnrEQsKebOa?h#)qfm)sp!(!;ODc@IV$x#o56%4)8u_CSZ)QZv(w*@@rS>WAb zA2_lOOlJN;8AE_vp@aRp_`7^JibmL?L`5@>UhFEvF|djJO1=52q>bt%_C=XNMMp%* z{0R>z-lP%XHGNiFl_)H-_K07UASeFx}cUe^6cH8*M%V`6Ep68$CTWu&wtu7pU@fx zt{aAmM{BK8Mu{_1#%_%Wp^hp&S^gvymcmC|(pS-CudA;1pjHo=Np@1jvChv?Snv!3 zujI)IZPT9jdlsn`t0g2`^f-f-z^%qfkKZ@H;#=$QcRw{&e43oJ{J+`rq&Hw8-K$wW zV-D?$D`oxMc7fS5{}j60k-i|b2Kb))kTiInAZ%*jVsoxt?AL7oeTUJgfPyh?`#NC; zP0%@?L<;hu7F+-Q(2iYtA>iHsCm2X&Z#Los4$R6HOaul1y@&3qSI=xiSnK!w($fFb zOl}KqHTfUWhva}mf!#b%;4e(abVg2|3ToRkjpBJdW85xv>CeHldG}4fP%1Nf9J|$};~g6 z=o_(3CkY)g3XpenyaEj-1vDZ_=jc0*4IEs~%R5$9m`gv2pQUQ<`q`bOf81U`U-b|P;Cf)e zfe~o_q_31il_SMpC5{`Vg+iKLI*br-VnOZ${GEsu@tYue(h|6EXmD07Dh749HN<1B zB1MQKO_VHZj7A(tueIPrespLJi4#;#V=K$c5VF(k$kK^>lt`R*Dx!Q6NvRd0l4col z=3YR=J>MaG()=9=ao#5L7{&u!1MCrMs&HAS)K}ocv{cOja?F8~B!ed-+?9Nu+2pz6 zQvr4QIe0{xNT}PvyuYV%Bd!WYnehEC*hy>tt-qtsZ~kta*8H!?U<0&g5PXC@nlm)+ z)Hdc`(g#~C5#-_74qvfBwEL36Jm}v$1#jvIQ4&+&8rR4IN96i{`z)&*fvN$PmCn1M zdDf?`u@_`vMV1?dOy{uasE`pI*ie)WBxFS?cG)r1!XE6}@i3}=e$ z56k@;f@;hEVNBh)%Q|R^S;T#_6wArS(>lTuRj6Td57R)2%1Bdd5)w>b54_C@sgPjs zRpua6z{WrD48wo%Te_bFaTN#jafx7OmaS+U6EIbQ`sPq-O30iZ+c zcdvlLS)om;Xq=U_mXhL$Qd2YF$gXbjXFSc{C>#nhy2h%V#ryHV=b3P9IFi>3Wn*KK z4;a0I8BYTA7=sBppcLYOO+MKqd5YMGl3ft1Gww8soh*Bq{Gbo%qQakcK!D96lDKs=Po-YW7sG-Z^k_*?t&lyxy7I_M~02tR%sMEAAXoAXxEAbUD=V{jqg_g4q z(EhzzDr3$rC6cyIFYM#zqThNN{~wyl8Au{@_&kJw%4W@X0=V>qF@_l zNn>VDt{$~_yNwCh8AS`k@@A1lB&Q@v#kSj2o#_z$jRCAa9G{?R_aH7c@M|S*a1<3C zW^#sz#07T_y!L;#XGNSCk_vB%l< zgE11ung`MNmnHNNk)T?B)mlX}59H_3rhjelTh177_O~>NTtBF@vfCZj$8#s3Im4r) z_cAC0yN0i>;BYOr|Awt;aj?e%HreOZs1bZU5sJL~s?zQI4XKNrGnyaAZq@&=)`Q#I zt#>(uf6C|$>&xPb=t~(Lj@Y`FaLpIc{>YUrL1n&g?wX>k>^kF!C!S1m^8PN?j=f=6 z9~KNYI_l-k&0(Dtr8)iD6S&f6U%s=sQ5?167OTk2#mxhH8N%jf(-fkn=0eV=$@sW_soi$vwGoY*gg)m9Z~s^`ST zp|n?&G3dp>QpSy`ht{J{L4DE?2_xfCdkBI<-(QQ#Ye%*0A6%5Tzo|kt3EfId8>!{? z@6E;Peex^fl_~do5KrSq{RWN@KMTRvL;tVG58!womK_$__py$tailevmDBed{i#3{(&#ct!MkTQL7XN@8Fa9BXSzQ>yfOeC|2CV~4BKG8HIPn2GW zm40q9jPI~pGg03NHOiV!<~-==MXb5_*WeY4>~qM~C4qV5!3Vcgq`-rx&Dk5ZJ&aLe zu!>N(zzOsoBz2I3+krz+{B9wPJZ<5!RF=Syq#T9qdJ!If+BtnMY&Cbkd@kwlU(0kO z`k(dj^kr*6(ft_|#f(W8e7sD^e0zyV&cikS*a@izh;Vs|*+nANrWyKq!DHKwy4y9By$~tIGJ}c7atLJt{M*P=ge$(|{^!jKHIvKhCaViXuQc0!8!lZQZ;&)V zElc_BmUn0v+k6 z-+1643)cUo?fAwXi6>bl{?r%rPl%W`-+?yBW?2%I@8@@mrhDm|$W+Qe4-L5+?Z zK+`ON{ErNY0wA}yfg^yB12!d9PZ20i8=6Rdy9%EI0x({Z?jJx8Pq^h%NI*!J)TI3+ z13$X~7bk!z5%aXZ#Y3w9-qP;c0PFuTPb=i$+6W9fV5V!A4&k4BIRJKr9sTXXc|qNe zfy4qI_&fVqGQ-qt``4I^K&R%VB1MY$+5$ctc;~>$Vc5eop^d$OmoA>Lmk6jCA>S<| zKQXJ1E$wuCVhn5>uRKQC)j{cN7?yB_*9(lBNG&putm>1<1JEdjNgH<@-Cne$UJ4n%2neKy1;jbtdX#8I`m zj1DF??_H_TjNE;Yw$9iG8z^6R!S&He1)BI6=E)YY+yrssClv6Va8diYLqOEeLL1){!AOT~dz#1r)ghR{>C zVz)gh!xEwUvyZ=*TdzP-9N4m}{{O9;15Dr6KJ|n^?+X3u1CmhJf!50TIpyFwtAQ@S zZ^h9|M$nohRU;iG!$#uRRW3qEGG-L~MT zH%Mowe}ADPb;SBps6+S(p&_TA#Op7?&UxY=4<@QRvnB7*xe{z2uKFxfx>y>05EQ4u z-}JyMfb~2~O8>V*dO6dpxF)hiq$uv1s^!A)CFci4!SVHGaQ_CsHlDzHf1TKhfDF2> zgQ%|oTEWkH3)7xP4m+~tf3+L$SG$G<@bXmwt_SrDN+Ev|4jzsp*T`;5BFi>pOGm(} z2eUvB1WAHnaWeqDv|O>nFyq3KTmjh%w*jGREMog$z@a4UjBb7O(-W|uS{JRFctALJ z=`BC717gX=(xk&e+g6xqTPwMm;}$Gizxg*>$_Ea5S;XX=Q}h2ErE&WEjoHeCKq>pJ+sOC~J zL6~3&58yWI^yHG7heyP`BoC?Q8bGpGVo1zKaZ-A=7(jrDM)7#K7I+CqsO6sJdSzyB z`bJLQV9MtiAa^jHJ%d^jq{k-gj2eBuDR+p4oZ2Xu)1Jw%#S9woQ=^a2IAu zu_pY-I4&8t2hr48MVR0VLR}NcsHk8hUNnNmlT3J0-@@+Q>9C9SQZ8omUd5?n zRw$k;b$~d!j!zb|4wi|$2LFo}Ig^6i+_o3%buB?_u9U$68IW576Z+EFT@hJh9mux% zYom2xk*e1|3507UhU%c0POfOB+KGXqUcwqtv7kYj{*+V#+DpDHhA1ZbpOs3^G@#Cd zyR`Iy9l#qYVo(QE|uV1(VzFCUW@sz{ZSamTh$WyMGg!ws}Uo7|Y}pzaSItUmanJ>ZmCtL}XV1eZyc ze3HH+nt^BzfYt*ck!8f|{zL^%hF_K7fbXAwA6ZR>HnWkDT#-9(002>=VD6Q%} z1P^Q;zRnV(CBe;?33_>Q+v2SK0^d_qf$sy;DZ>;6qFOm&^|{orF%!MIR?KH!jpe-{ zVsGeDtOepV3!hAK)0xfP@5{vCmYp>cVY5(2-5|+;;XGGsXkaJ6NZl8AH$C6?%)D!b zd|I2YzkWRPxt;sZ|9EN88ZO0(c^@*-#F4yzcWav9pDTQi{XWHO+STE4XcyK)Np~Rt zwO@?bPPQ0WUcqmTW4KERvMrayU4s|`WjbH((9fMnWUNWkt8Th!7paOcZ+vtb%#f54s#1Fc#T%Jq)^7;;FE>* zXLzIB$f&93f1?`Ft~sf!VH1Q;W9L^|z91VA#W|MDi2098-{7a-T}!xrW9`6*;+K z!n@sbKk!oj#~rx7&1&Q?mEzx+dCF~n6_dYY&WwfJMsYQFy+>hPJMAdxGI;y4q~?Bk zySMTRYZkijxy|^`&H~oaS?_JPRK(W$r%U^#Ytujpll{B7rbXc%X=UWC)&BhhyqUDT zy$odHx`uZ;a5AYgzms#TK(xT19eG6W<~1D|mFZ%;SgeS4d2sc@#I<}f4GQm|jKdEh z*SHSp8AZ7s5(-$ssjw{;16D{OV*?Qw?Z4R`Ut#rFtviNvo8hnhuQC+ZEOOD8tKwbR6 z!!QN}QS9v@i1H2&yk?S5#I8&fb~Xd*iiyeauqP?Ls0`-XV>;o8Tz2Ibc1zD0)i>z6-s`4#`{~*=B6}kJ=*(s(@5;ELR3LIpmmy)6 zpO6)L>|51Y`@8&U9@fWx(3XJKbvh+I_%aXjZaDEbQBWGZv)Ury} z!Go3SC}w-;3bjyC>?vGe_a z`)^2R`pBm_?$(=GmL-6`7tEKEYkGz^^|t zXrv3p*o($9c10vmY5N%xDlY6}VUEa-xQvh8LA{w(>o>-f6W2(pSCgHM_}C;>gL_nf z60mTc^3ue_oIi_MjTo5w5c87a7*$y>nw4N^o=rH&Ez&c^Kb-$Otf9#<*aKhq@3vM}mORBC^A4_m=vqT%~&CV$dVQ;cwhuRrL`Vhg@X z+T1+QDUm7S03`LBWdl}|Lqg1&H#bx{pbC(ADz<0ucCmbF0})weJZ0an(KB)Kp$X-& z8|(5hijdNMhIa}iwDWr0-0SU;p+S-_F?P;6<&pq&|6f}c*qi}rV#`-Z0EfW^S21@e zo$h%TjHr?ody+||AcD4(ic@+CmLGv}{fnFAQ)_f8YuQ$@x|r+9H6yVbSAL;~O4YIGpL?AFVLle3KSaQ`)qJZmwl9p@)wiJnfT?d{aC9 zv@J7yIuv6Wm-i~mYCJyG#mIp|ZAKHt9xWFpGj>v5D!$qYM`3P|K%%OwR*a73kOqN2Lv7rz1?BR;CzjHdTgCpo5SVU^GQCZ3aX) z&xUQhg17G+4qsIi)iTNmsFP+?)i?V+urlUpRknCWK#KL#<~htIyl}*hnm|6As2io> z*^QOg<`qOWajHeMG;9S;CCoF89eV@G+Mudnt7BWXuTY;O$k#WcXA*L{|L$AuxGm zgg|uXHt14SpJjMR8O8n}wEI``BaNV!uTKuSW!fIp(yVszGf0+Q7?~R@XR?Znb4e6cEWGpfxDKpy zUd-h*7Eo8u6p&N!OlVi&%a0=Z8iUSN5-c>RmQEAH*CTqqI9_vyG1vgsS*wr#`ImcM zzbl{Hf&Z?x8@9L1H+<3;^wkRx+TeaEW0Qo59O3QW%HchM%!U3fx0=q6(Wj=kbje8O zVTbJ9O>K*!TpV_2?Sa7)J`=U@><~j^;7zI*dmNP;hqNpNsMlrmiu|^qK z;}_B4P5$9H%WIm5@yzhyz$g(1OTGvS5B7E@pvZ|D_}Lx!x1h5wNp0Mi2~d_eq@vE=(?Yw(kq1|M&s zrJ?tKfCcRCQD~*Jr>fbsTzqc-9HdUWK+DE4fik(t3qOO;a#yenY*$S5>H|Fle-uz+ zD!v~C48>~R(ge!el*IBS{Mb%0r61e{74^{rl*Kg$fTIh#F?YbVXu@H%vkDiS{IaDm z2nE_r*x^)6&FGX<8#z+K4&Q*$PUxe0f^2zh2Gq{kis5;(bdG}gNw)EHqd71Ni4>rf zDSR{0SOKj|i;2QlKsNSfFyHiL(IJhtTy| z3D4jPL+i3z-nQ6xpJUdWL3c4U_zCjBb%goraz0J z%7Jpt8X9v*h zX2e*8Nsn=UQMQCOv;R=>zlb=Z*i<7K!_^|=C6+}Vm4^fL4D!S9N3Vvne~5%c5T9tY zM__V3MzZ4Lw&~-4-Rh+tdj${NeFVdXmnwjMjgmwK%25%FjKBnlirce30HO@v@g3{z zkS*lPbwqtcbt2Rqpl?+*VK@7e;JV;${i$Lqrt_{6H-<~@TLw&|oWxb>Bvq2Iz!<^e zVx$++Scrw!?nWzb)Z2vB71LOmF%3vmVm?N*gw z@!TSyxecL7j!Kvg_)lLtYUgsvQG8mu-X=0f^?R&U4ZV~uqS$Xfr@J}}e0eummP=6p zCUAes_qEZETT82f2>O4IwGkzr2p`@cuvs?NdU1jKv;-V0^jQP8BK7 z*`+)zh%bSPKk~WW$2X*Dme_f54s_O_`v@tTidws%Gvjfu3)h?ctdMdXwqcHmqA`?A z;J1q`^8E6R3`OvYRcSW=i>GzJ!S3smMn%aVydPr|$%#!h_k{g_TkvPC9NA!TyejY5 z1~-0=pcY68cd5Voo$a43qaR}^$^EE{SDO!zq~~?}Dp_$gS-+law9xCtW=ux-U53IE zuDn}2-j-_VKmG1~h~jLvD2sX26L7mG0jeM36M9g5(lMmfHN>8Ozu%z}evkf-?6aEb4|MSd|2irTWd`kyXrq8O%k zKvY-`0_MyHYzzu9Tr8T-8_MSk9=@+)E}Os;h4BfxJgU3PKMy*-dhhUmL;Ior8JZu6 zOYaj2Bq(y~PuX3ASNjotb+`uXWzEi0;&)#6G=&BzA{IF+a;msQ5C8tmwpZ7HxxgOy z$@`jJc|CuB;?~nPomV>tNRy{ayAa=|ZD9

    QzgxqrlmYXv3p%ysfB@wb?a!OcKq}c!;eCnufGa9gR$a_=lX{iE2q_*7lp?6p7DPC#gGq@4J_PcfKvLe^!4ztS4y5{ zt*?>@^$+jV<_*JvBP4{Qpldn_-V}C~bc*zyS#SSl(~IwnI9xpwAssV{F0Fy5qRXB8 z#H87e-l|x7VZw`3OcTCTgNY|1!<0-St;e3JcPr6Mr@FF>m+7?@W!)%Fipm z$2@Eq+`KlV^U)_e+b-PraZCf)8UKn(zXw16b_V%AQ`ms+QxkAvT zVZO9frt5+y&lSv@ZM0#m#B*e6j<^AB+?-o&861wQE0DCXP12m7cqZHH#|=D z&a1#a9UJoBPu9!CzBb9)p!+^{mtPaUXIfTscMUL0ixlUdpu4q!yv$!dnUm)KEx*Yt z1Sn%i%}^EFTvVDr)g1MLeqV)1i`?)|9#n)w_{it__l-x3Qhys`U4|L(Y}4hDy%jh+ zt&{S&9FiiZ2A^Vi*P1>U#M)1D9rs5049$4ZkvOKKSB*>&sEnv*VQd18nD>Jg`@q}U zP!hh{*;|HZirHTU-8I`>>t?~DljCIPt#jVy+bol)*{s`*3?Q{KG|7eaT<2zz=E%db z>G2II#Pt3riMF0wlBW8Sk_&&4XebllF74Tn zKX~OCmlZFohWaN$Ix7h)v~>;Ug1?d1wB0C{NJ%3_|1gRz@NLfdwFK)JjgA>p6qkx0 zSGMl6u!!j3UD_pvcXFw5$mBkdr%q0(kqEU+|G2RN3PLWd=(QFJM~bR{d2~qCDst8< z${yxyr$A7_IQwFAHt&?7KV!3*79T?Zk2f96>=h%DDN!S)SvZu}Y>AckboKm3|FU6K z+nX16+of2Es}OdRnZ9JwP*fhnl*V?hL}r|3eWFP78R(EIKf5gvGX#)4ch7Uo@xDFfZmz`JIL0krF&|P{lrSXhMdf zqr90_N^M2sUe>zkG2goAwYUHF@Tz-y;QISr+kZ!mm)n!bHy_=PUD=SXKO?V6ZTad8 zOQJ4_ON*GuDUo8gXUlY3VfG)|s;sCkOaLvKf@S#-+EN_k5^4AiSVhgJS0Jmy%CX zV@FK(K@5p^5gy)!_K{Wm#?YeD#Zq=E*Lqt9hGvaMd0d z0GCUsL1s45whpd+k$Ia%qb(9+*KCHd{xojI+`g}^5maPMu1+P|5ZN5(Jy-o(@~{Cs z7^5LIBJ$Ndg3?4I*njVx+U{`ABD>Yr!hHXC(0*+1#kj+_mZ3*L44M%r9w- zLpTC8;UmQ0g=QaDEU|q8NGI8T(ISI{&{wWL9#BZiAON72KVHXQUkk%|(|+}&@hG!7 z;%+q_n{;%cyc4vb3k;Wje$v?ESr;~e$BM_d(;)6CBO+#sNq>+G6S+XuN3T-QzF1W< zZ(YpWK4%n6dPVV|_@avD=96b?yvy?Lb?7VW0$D{3|d8k+&GI!~oH} zcVV4Z@x=>9t^taW+kkzmSuD8T3raJd+mC~qHtB51D#PY(iFgNZdt3r_9cWL0i5(^x zP)xm{fefcfvaTcABZPs%gvd@G9c$5IK`nf??xGqpmsHswlAG1nEeJsr^~D@}fyNfV zHaBqc1bA~@_1IFu;X){c4`rr-fhX~3YAtV@9=r!0F0~dUU&JiYcB22@fZ>+mcSY ztcJ|PjiDjT$%5+Ntom@2h879K&+a_42WZ$4EpCCv%jJ-~>ApFhXh}k7j>4GxrctaU z+0ioE&NIyQn&?{-fcj%Wr~GRD+F96?|Bv&qF_MCNsUH3%80_SrOr2$4=G7E z5tzA`@`H{XUZ%eEvi#Jn3B9>rxE36NeR!6tTfqM#2~Sy;G?X7ZeY{Q31rL|twI#_? zq;0sw;m`0}0`J#>AM%rszQH;QEoO*6a46?TRa+aec&hS0VdiHF*mZd0b@j%X06Lq# zUO4|lt}c{ML1c@}v#>w!wJ))e<+m4IGikV3^Ov%P$DoA!Ljn1!kILdQm#~6%%=E0N zeY%ctc!FZ>WN(J4vB>|IyVLjE%MGxU?JV6pWiDv#!w%B z9o5ikmlQk?Q)0zn1`?Rcvvl+w0?7DH9sNixDTsFW#4)4#mnov`#BW4^p7Id^y!Y=P z@3%aa`;k@@ILQ-F^9H-+?zHT9aCULY@;J2RVSc{@ex*E~;<5ydYiK>)yUiem2qoDa z?a9LMW_uUxv)46DxW6nX6b&0ECJSANpm5lEsq|NSDy5%~8SCUq;7r3p4_AGoggA-S)OuS(a_UaT5+GxB`- z7MJT7yQUnn!E#}yx`a{vqY#awdh`VQs+4}F_O{pmbF1OITW1sJ{q&*JUeAtDj5Oto zP^^~>JIA?=27>|m4!7qe#COneoa@!yWy--2({j3|en*MZ(v8>oW6rb6%g(8evG-0@ z;C#oGiWMDpXeX>L_q!Um8U8en1XF_#F66%?K=ZnoM%FuyYo;=tJxZEF>h&bfd)j%S z!U7FUWFwtaL2wmv+>e_Bu=w7*W3$=t4mX1D&7pMRIcn+UyUDUJ4XB-KVDv>ej{SHS zs80ukS?AW{sr+I+Lcthzhz;N**SSlN?ol5FN^`sPEUUgU(mG7Xb6v&>HYrpkg9E3KE03<16r$x(mR*iz@CCc5q7l!-EBnXMywq6MU(TG zoYlX`-L>uMn9B6^a{Q&g`F43-RY{OeZI{?{RG^?#Q(tm$k>I+nH!EaAbX};s>)an* zyXg@Nbmj(XyJm#R@~uxYnmk7W;6B^n)hw3WW2IV(E+(j@FVS0^+viYOnY%CG^m*h* zlWlUv^r7u5twrka<&UP{pfx3W)7Fb|sf>rLZ}FeO-gboY(6v0cxpm9+kNZ@Bx28UH zUbvf;ymvfKg2b`&i85>gMKI>Be_@qj!>8R6`Vd#-p<-Gi?jzp&Fp29Ch5I1GV=Uni zLzE#r`I+5D3r!N=6SD_z2%q`(C_P%+f;LYiQ503Tt}kHk=iAFkO&YG>Dv4O2%v6gf`bE<2LR zLYOvN!O_2drwy5m3DD~Jy3Yruv_z|rcz3yA8x4;?&N{)mL6WdZIB#|$J0X&dYdu%~ zgBE>>ULroDDEcQ^kW_oKX^|ek5UczvMlQUEQTQyr@UhGZyCA4Q^}e~_8(2eMJXcOe zGo5s~y<(}W^E#nTc{TXvJ<+wMD4oM!7YLIl>gNlTya=Iud(}z(K$H=pP{tN|rrQ*T zP!SW+B&n11LOvIF^|7jXy83!=`AH7cp7e(bicT7~$OwO4#idiOb!-k21+&BrrK^_D z?EK`5wpJv9uGMUpUt|blf7FP+kuYuQKDWFYT-S0)FU+OqOd2=QRvtwf68@AZ&kFj# zoY1dlsD>We`Ce({=ngq%@#6~mXy>>`)8pcDvSKcm)RkeP#IL!k(0qO~HIgtID59$5 z0OX{$;p^`KHG;K?Zy92RmFIKNQbbJQk5yD4b7^r`>4<6#0JYbUfY(@@NhUmxSr_DcYaJ#DH!L^Ib2y&nr^mPS>4 zd>*!M`DFK5Fg+{#GT&0rSx}aSM~b?fw!;tfxTcO%!f_AHdH3pH(uU{mnYs4j;|$Mo z;?9O=K08RvSeR4zq8H%%FWwtXdMw_IRK0IKe{z{8X3-H58LF9f(B0|$;C=%_2uq$I zpoR9ILs!kC=VO|5N$_u$pB6pKUb*3lR!3cN&~}S!8tTIAl~?`Vun(R4ucr0yUQ5Q9 zX|7SeqV-pm6*)Km2vHNiaVT0Q$+1%o+Xz4ZBeK4?7dQX^X!`1SI{)|o1;fU~#0cnz|%?p<8vXr6K7XH>-%{U!Q(vPjX%d zH4v*E=C4<5IxhenXSFzZ$!FY2R2B#@;Of`kKA7o*Ps5h%do%B@GOHI3bt=l`iE><7 z+lMY40XO7wMK*U_wAb3n#ezfh?NSE!>n_{Mk3aQO|DOEdy-RyB7!S6HiAM&Mn+?6> z!znvFtO~d%cweGu!90&iw_aZ{S{FntvCNvrj8F{d9{!o4SmQYv{Tv^jcI>MmlcK4E zlJu(5w`88<>F8H>>2GB}MIq_;x+|E6%` z9>v-D7`|9qiKMD6gJrx*2R%aTMJw#86v#u+ueXL9G!_}RwSEXzCfUw>)YaS?2-Tbc z5M-wk1l*CsKK{?=Ni4O~FmSg4J@5Joog`r*Lt;G5B^V~L*e8zP%#IHE()`ftr8;Qq z9DZj7aJlYwUIZ|)DqrI8#2w>2gMT6qS-ZosyJ>6U#wd09Vx!0&M2rqQO`Ej#tj@k+ znOeZliM_d<_%!v}$7rQGdHl->jVTTgen!y2q{rtLdW01?>S@?y|CS>-Q4BgEVqQ8W z8%%l5CrE6CEo{Y?!76*_%r`G;|4+^BL>2obpf*yusiEOVpY7Aoz+yY)>~L|96BqcI zRU8IfEd^EjHa3sRiTD|YShY?>{)XeMliy8*gd3Q$G0xYHy6@e_majnMbPntUo_nig zY&UzKN8}f&(glesWKh( z^2Z7M%*kP;$D7r-WY0c0ZZJ~M%w-LW-xglEyG1Y2rPngdMtJgmgniAu-}xyK0ihM0 zbQ?ZA{7&&%Q!F6!D>X-P6~KsX@_b5Yq1&Qb0(*G)kYk|g9w8{a^E^F^pX2C%~D+zRQ^l zrQF&WEu^*T;Ff%*rWrNhGPFM<%bbBAZ9YE>?Ec%AdApnWo>(~Y3K-yg@h67vENuM~ z)8IpyD7b~Wz$woE-v~|$yGWdobZHxcan&oX} z8uwa3mvjestOM8HPj=dn-l>H>ezjM@Ted#^I~_y8Z3d%oTEHNH0C-{*6gx)2ox1}Kau1m zU#-bb?_a<~{0CLzHC{qH`w93I=a3$p+C_S7d{BPxpDNki#w$&Sb7!%hc4bl7eMOlU z!iUH6&JCd5_^$)|JYsObLqDeXO=bl-G5lwavt#Zgk>=}(V5jAk(O~>5o9$h6!Uj*3 zHq8ju??5`oivT{A?~=>z%!+ttUl41nO#u)+pwhnhkTJwCsw^b%uh5@pKc20qH1zO` zS(S-j91kR)N6Kbw;|_REgpPO=mxf!OeUE^u%MI;6*W7jg)U@R6cLVz;)-eAv_^`h7 z3mjQJXO}W;G4k$5A`QYk7VJp9TfnvUQC-g;$`ILZe(N{X8Mtf_fx{NO^O4F?xwTOM zu8mzF=MqIf$W2x-{R7XpR$;mHZn0=F1ap&yOjz-HIG%NWB+cy!B(JtI>_i5TRJY>8>k6*n&QWYnlGID3LOJwZ3Vp)0I%fX!*De%qIY;`n^gQa&P z?&jpvqc>?8@X-7stAzkK?fWm1ymVb}b*8b(ev9vstUQ0@zkLImXbXtJL6R933z3*{ z2idb$yuZl~&xdMu*~H&T4ivQC;-4BbWwi_wt)bGvHjs!vWzT-0%`4D)6ZZ>Hd8)%P znN?T}Hn#FqA@XaPGLd+*=fU)OHOP;ZQO9(|bJQ zM7plkzg=n&S}3vT%_tEokHT|0QK=ZR!JtN-Cz$MbS7m!9Oc0pRN%V}7(&-o&?W5Md z!S(~qXRb3oNp1d(p2=cVZEEAKdE{3M2@)B?YS(U?T8fR+r&RbPGO3jdz~QfEPd=^U zL8kx{($`WI-~Ct-N`K(25u!C(#G3)lv*Y;8@XV-bOqGd5HmIF|6U_0dkD#}yNu<&J zlRzt9oJYT}@*VcBh%%S22$)0~ODpd5rB3sEzz*Sfr$wr^rU#;q&}$0?erbQ$4pPV4 z_`|GL_vG@V`w|{nZdU+6y&K^?m0`{ThBsQnAzK0JHJkko4dCNbCcq#yrfs9h|8?1uQ44nf)sB-~4} zv%mhJEu8Q1^+!c<4i1qddea><)SQxsB$n^*{0V>~H7i1pFY;PblZPwBTbEVc6L9X{ zasRLQekPFg-A?dFSJMnZv>SV&O-KiZE%ya{TC{?Ywz-6eIqz{40|hnXwyA)>eXOCa zcAX2u9c}$IkkYO?fh&|Y97UAcbrj#I*6+7hT)?)c#{Q}|>}@zJqXt1^7k1hs)5y=T z{Izux(+D%?XTg`h`x%%0uc3SoLFMaj#_-CZiKq9bYby;uuAFyw2cx{nWY+$cc4nnJ z=-cXRRZ=Uqw6wS>dXwjIm346O38Y0UJfcW@b$`387GUO_)`R-B3~t6(an2pO6U#U` z+(V#)Mcl!gp9@r%Kdvd3c@ zo0FRX7yr#}e*yQV@3ww?gn{2tN)K~?C_Dqd5j4e%pZw?p?v7M5#mvQGmjZ`A20d_b z%N5ve+uVYBn0M%p?e@I>G3}>yZ?Bkw@`dX5Tk?=F?06=6>}DtTcG>&SmBK2b@qt?1 zPlr$zel~^}(}DF7>Mz{5h!M@g;(>3vyBAdPooEJhdyLy|X%PJFpe_A&= z)Pl7PZFt1m)E@+F|A%+HJwWYUriZBDd-GSv&;<#o5QfcP zri__rIFZmi*u6UYp8bMyTIm_ueF&fN{z0!aF|B&))k$}|7t^|^Q4=yDA17`2`RC5H zPa2iwU<4cgR0`oD8pfvhu_F3z675&@XEmeg(5~F&(2ikna~!whTYKRdPSub;3vlB- zc=(;3N8vSN3?oF9DCB-*cX~O{#DtAosW36O6MY^XxMVwelj2n#*HM6!7|qd){E*-8 z*t*g*Q}K-sVf!g^o3g2WL#`*s7EAu{K?km|0Co|%hRVd2tDizt=-DH_mtTq%HliCI z5GW+>jh$V>!^xvIQqH}jKg4(b$m-+GJqz!kfRhmfiy3P?lZl`E*pcfBsAyXDY(t2c z=`l3toFIwBUUIPfp$TS%nzhY+bXW^qnw-; z{g^sQKU}3MbX^X##ZbYj3t|cklpK!fV`SLtQ(!C(%|w8+V?`iPJ8HAe&t6lCTv;bert_if094s5{G zbg634g)ZK#S+Z*3$n*R(=H~Y8%z0bN#*)UyJ!oGRB*B=A*_e3zoWy)8ChoI~Rtcu0 z&0gbb%AvIge%`~t(O#^?y=W#e3#W(WYc93Apr7>a^>l4;;0f?8P3BuTIp|!IvsCPY z2F+)QgHK{WZ4o$Ga6~y1e%bi+vo;OG1arOsVp5*%s@JIH#OC7rD&OYmSxf$|ZlhLC zjm|yKAF0=U9_GvF8}ZV;qhwgfiWl*14N zah#DSnl!p<%Ybwnq7|Sace8Ip*_E!WLb9x3RdaSjtJ+g^!J*q%g@SpE$0tymvee-% zuHcURn4?i^tv~F_w;L45C(!qPQS;odb5}g^^5Wf=pNVHGFITb)&dz|uZL~q6IIlonq6}55YLM3Tf zUCH|wo9oWQ7S(Gerp>#kt3`gMjBB5=Mq9rnl?g`(jluGnAp8U`H__~B#5499cC|RK z13Tdd7afgz_tqkO1L?AC5=FG8GmVn+7#$s2Z|VjkMyjH~vL!cJdMIT(JPM*QR1o5P zfUQTscw~#i*C^Xni5$nGIz=KCc0C1gY?%6DBOmX1W?W%lgH4`yQR}TTQNy`KDOgi{ zzH1YGo^=gJ_=KSlPY4O&(Y} z#&5kl&H3wcCjsMLdqwzvhX!d?cDEnfOL%KX>=@}Im9)q@o0&-AADeD#4L|U=M$@+a z#W&iy{}NL&{W&8PwG6h#O-t~xM=tL=kkAh+uO3$2q3WjgWOa~*1NLX-93c`DwGRse zjJa>^%P`e`$1V^7rWkrVr4%99^`Ge?OdyB?8qxL;{oqoqp4;{7eELZ)@b97t<=yaM z%7rS2)F3H7P+by!@C5mmS}S<+!dZ`oZXftnynoy=%KBZ#P9Pc5*l5yX$Y>5qJKuuO zr@;DgOz%t0Z-gN0V;n7NQ61LJKmlbFJoD?EnhGv?*iHAqi7%i1!WdlPD zsq5kAHbHI9ueilDwnu(jk*q;+y|<2`NFUHJXkCcs3CGlU-9xvfF}H{VtL2Kh@xt5( zrfIt({G|6Oo{X3XZlbzco7ruoRcbk@dWIcC}U9*Ou}{?8Wsr3ht!!Fj`!V z^SI7RW^73TGLFFGL_!Csn#HWfGYp)PDdv5*{)_yrql-Rna!P`Ek4TI%{{31VJ9cv- z+r9i;`{%g@sl!rc5LRs8z_#C+ue8}q&T&`J$G~6k*K@I#L=}%n;0FD;QZ91hc8wF` zm--&50ZMW0_Xq`^#rmIxw=TaE_pfsoZ&hc#Ly*@!4RYn;gYF6DbA_kHJUHE71L&}K zdXswK6O)>9V!tml`pH!%5~pms%jX)S9BkX)4?vQ`9VhI^M){(ZN`6|i8mtJNBc2vm zml-_CVrC9$laW^2miJO49wCEj+5*)(+<8(G1Sy=3W#Q|fQFMPofwsP(VU-~zCS=es zjlM%ot?rNNi9Bf5Orfiz`-mhJYfqm}QREajRO#6AXwN`VpZW9Mi(^8Dbir-9L z^w4%hRUx~x%Vsvxr!kId#Nx?JA{fnKRo&(d2K0fh?RAGpudb=KU)*!RLxM*<5}!hz zMrME7iPna^lT1#4uOJmH?<1R0i9+Fp`!F~U#jNC0v$>4UlfJ{U9u%LOLG?$@#c%Q8 z8x1V3d(j&cxIk!xX^Nc)1!+ZZw)RFFh$?FHDHTf2r8vxWIdev5g+Y}RD9n(Hr9stJ z_(k`|(x#POEIBD#s{vrDXySklCn>0O%@Ffb^!HqAo&-PPrgOh{OTNAHUZZ>D`!s)( z5UJs8RmFZ0WV4h`((fxm1Zq(eSET-ATF=4B&$RiRrO1MFPpw5Mp>jJ%6p_GWET)Rn z`IVEG#z9<&xnh509I~W#4&821}=j>$?t$SQ#fK@ z5B7&d5gimq7nQ4EK>^vm7LW?!hvPd@y`Om)o1GUaT)G#}rU;^O(D}N}>lGj~TS$oH z`g|WZNb*_Sh`_x|3CTBlYnb#pYR*GXYQEB8%4k-JE>c`a6Jw~!i@!CTWRW~s#{m?t znM~splguGLCxovIo9S?+Xhglc7%qiBDNV?WU9N@*JtbtIk9sgrTwq;X`Le2jQa4^l znK;#W(NIwSJnU*Q_Zy#z)C%=53BlNV4PmbzbJTBqjRLI*I@pG)uhItx<+3ammk+?b zvTK=H5=5r>>kMM;3d<)$ESlnx!VC~B-A>Y;pI0OT9#NUpXO|q{9(b3N2FGM@c=%=S z#@MV6o z1BLv8^ofVae)=~$MMkp`ogKa{jIyba3EN}*N-xR01Mhtp&nB@SpO!XrWTOG=k|van zv#7*Yh!3XB=8qhJ9e66~9LP^3p8tXVc}En?yX@!F3D$WKi1hJ28{-|wHm`1Y8$m$N zBqg3>?Yqa2&-ohWz1nF2sE~(nlD4)b01o_hlSyE@86*N<99@Kb}hXnl4{!D{K80xd2rr7T24Mu8{Jt4;c;Dhva^&n;s>U|{$h#tkW zjeF*_PR>6$y7s~HpgJ(WU{b*T+lEJxzq@GQ?;t1cN`N8lwCX!2W7q^cn&WgTz67i6 zq0PYS9P1%JSn;|ecUfpGjVNeMCVW>n?DweJvr6pn#$VN7Ca1O8QFB9)eI~51Hk`30 z=~;=ro*PgPwKZ(<4o0$q^Pd0Fw!eLijt1A@5{v$;b}^DM{@?J_+rV+`fxh2N+tBqZRv$t?0}}%#vowPy=<-{n;!M}*V83`Z$qUS zJXfe_lB65>uZ`Uf6|~61V#~vpoG6?Z47c^J0gx>>Q8iE{9rKN=?^Pc;u{*o+T0UYf zm^JDl{DQ}+70=J4hHrm%qJ>3NAA0!9s&#GVZQE&Y?S-keb#mtxzi_{98bf88xHLdf zxeDq$%TD6lcTM%%5_HFkoS^Y6$_stsY2Id*Y^0x3 z2y|~aA_3RhOS(9iN6KUh{XRtBV5O=ex4hmN&|BQlbw@^ssn$;LJ0~Mk)euc zsj8cNzn=*9o`qa0EK)fJ(LTWGt|xPhmB`+At-3m_4)zXD-g?r*sqXX7E{)60uAJ&gLtz5WH2~%K)plm&+N@;!iGwAMV@6&Pd@a+()E%jB#>k8q_bLh%I+6G zJ4+dn&4j3Dv3ImmFmrWit6+OPP{pLuyPhHBO6Y4$PV`tRUjtB#{s}M*{^E+Hzt|7=0%Lke%z*u8fm{rvM*U0<>u6#$p z*Zs0u{F-+r#p|6SG%C<<1!lGg>TeSEJl8)KBnleV2+p4 z%W)0s!2%bZfoz7r&yPbX!=^PfJ!q{}A9jNoM<18B18scbHd1s@0k?(c4t@spM^wC< z5G4y^Wr7rx$U9|U@FD-&fjslG96{FcE?e26u%#xBo`;}O2PIqbNj~xwlzMbn+DD9L zZQwEzgfgV#1i83}=p0w&HY6(;aUagRQ^AHW62BowD1o%9akuCbEi@iBp2^$YnDV2q zA96J0D(E;UEy+L|h^e$29j>Gyi|P{;eR$yKsn-^@Iy^h~ca@U&54~t42pC$v)|E&E zVXO^(4A)g5fSHoYx)?6e2+=4%R#L}LH19Vy`nt^w&FP`HYaiwKbIU|3FW&L&zNV&T zXy@9Dg9G3ITzNwLx2Fz=3+e%tlw-_}|AFrhq_9sAHPd(mbH=@>L}E`=%9b!;eeS^; z_r~u2aK>@yG79m0aZ>Aw27oHmU&uXRKky4y&m6ut>#UKYep;H3)Xn9S`jl@bx1<_G zSU1#5;FLyA7?SfwR9Dc>Wdo$9D3D_KOV0r8F`?<5^aX4KJW30=#u*w;n~5vsyvx(& zyv2oy`E0#RQ7O6j;%C$f?&z_Co{=UI^(!u>8ff?#nDFH2*MJ0O5?DUj70 z2UF?~eY}LIWaEj27$`CBXRzuMg(1^^NL_onq(>1QVL2<0$%B3`?}BS?t-0N{>Vf+D zjrSJ6ZI&am9j(doyHRgpDcEue6x45Cg9!>t7s-QpgYBdrRwxguH(#ll86qr9ZKg8C z{Dw?YPaQx%wb2^P&QXzW&(;;*LZ=khuehS+Og*SKSuO~`e<}~@V_BgXuXcaC`J4Ls z^?2dkcjxUQ&5DxZ?0w4QH7HqxJJ4RETlTRcd1FK6&%5}Z4H6>MW%f`Hs-843QW3*O#{>F%t6kOJTxSE6qc5oVdp>0Bt3D%1oI@icW)ZZgEZm*L%yb14? zfVi-0uJ7Gj@wR14tNGN1x5ro1*9JZA9!i?9jZqJ8DoL#kAEGsdOzx-=Am=gQu#@KC zf4n?sbiI02-EaSTO)30;8*0p+ixkb|k}Ck~uVs?9xH6_N>mdF&hgDOi3sa*#|7TlL z%zx>x{4af!)+unRk{)b4=P4GFuhH6AmtY9OVDb|mty`L%XQNgSS&8|;+5yb>PB?Mf zaC1#DL@+eQNqZRZ#y0_dqP<>a=&U!1fpFB0uGAu~1Zu}eV&;z(^Bgj29D@6tp4f(4 zAi8`C`+-(TgKcrC?F5%_VFuglFDW3oC!_{<>ErZz98(YJst>)fRVju0$EkSYrc7(t z1EIko_oh5fCChNH>%#*3UsJeadptIy1cRI+jU^Z=6F(Aroe2SFFhMvmzH_;Y#s9b+ z3*A@9+^p4*`EM0`RJ@?7=qDgcD(jg+u5KBkhNsO%-^EnVhc+R@r0K^cAW^Y=oTRnS z3{r-|z?M21hmTN4>%HdEuj6C(h!6%uU+i<~{SeVZZd-Dg7ihb_vQRLJi8s<~@DLzkMLPghX<0_L}Iz^O*eJ34xSHK6OX`RZf2itC2E z-Ultr(2Wdk+$A42W=0Bu%*gzalU%dvjAy+(CEpqp2{35f3|#zfp7Xn6k5zx{`nQy> zU-ll1yIFU8w@_O+T{uy^ANP2j&M{X{F+5AEB!uZHpc5sP>~t{kRI~#fHjY7Y`I+wc z8ASD7&${Nfm#>Vdi%K#;#?Rql89QvxSdWwnKYwjvdK$6Kk!=-{d6~ba9zB*je4Jgp zXT%<{o(BBA!Dj)%&sU=Vtzu}wRgC3!#+Q^Bu;-xUV2cn&oV{KbpoaqK#fBrQc zoDCNe(Jwit1LMq7)ma17hWUd`c2r3zZPns3YL{_GR_qjV)IN8f#5Yyil7DNUeRY?X z`(%IYsV}~(c=6Jbm9-Fa+w7u~ZRpQD#t(`hedB~4>kG=v5-L!<^H}u{Iwr32#ZKID zZF!kqo0m9j^@m|Fezq}6$6^CdiziF2JOY{s{7X9IQ^D!%njGK8GuIJNS-O)| zBVOT**rL5#&6!D9GVAz1MDfYfvU8BYQt$M_yN8V`UB z0Y!Cs!z7SJRsU{IOgmW=;X)Y55^2e;k`af*zT~z#ZFaSBr7GY|CIg$<>d_A#Y-QGZ zDhmP!Xcio^rf72Sgi6s&Xd#D7X>pY?`P(q;U<6ZQTVcn!0r!Kiyip6Q;d~?mM1hM$T?-AX|aw3F{mW+r~s|iw}=QvXtg` zhL?xih5K)69+X8L_B|DTdewq1kl-0RfhbJ7*SH1P zU;*>voL?=}6sfw{ROy+6I#|z`;K#d(vikx4Rumdx<2|~0Uoar1jBkG9>1d4#bbjQT zI_;!wR@D)xQHf>EadIM|Z~n>@Md8|O0WIap*yh3QF>&=^yIZ|*M-NvO0_R`wjqJry z_)8%5Q}RD{p4jcZ+52gst=zen!wLXPQlGBO_=_L-6KbOlENd6wLi3M;*`1lH7wW>` z;(V@k&8$KQAyL=qmLVwcQPEBHyq0N^&0R=y64x`LlCOvJabTN2z7-4x+SD~aRegje zCEWJkkG(j#SU6w~DC6;r zIW$4nP7BJ&z-Yq;mWlcm{{{A3ttrrViHn{Y>@27#KUj`)9-LHx#F*lb!lzU+?Jekq zE$M}soojg0u!Ta!j4gQeSTl;!>|QTVWh~6BmcFW0TmSZ^wkpK9Z=;t*PDFvIxOjaI zg}-=GFXo%Z8gtRm-0Zpl)M!y{qzXiWmTymzHx0Bc?xyJUBR4=tu!@jG>>ueKEASAu zi1bFN=-BoXRgtDoP^OZpf!fbDWhc^WkZl9Ysv(uF=7wxXA*w|$XvW{adoj)1IrYK| zEViQ0p)cz#$G*f>8|tLR54l)U>Q>A!q0D?+-xS!V?TohhWgH#=V5F}&4=HgI5*+?b z>P4%T?B@<&Cq>qxMnfguz+1Qersi>ws#Zk3G;i7j1D2cM4Gq`sGj6SCIkX0MW4*U* zV9!X>`5$4!)Q2-u*!weL|J8-^^T#ZttpkPUb~k{~+Z(`c*Ew$qD8I{4z{QPb+4tUgLHqh2xtx&D<~aJsGU&s@~+Kl2+)s<`Ga9 zP)exC9$})KNsiOWjSC`Hf8MDj;rVG3VptGp;Kkq6$>56>elFhGh1qZdJlCUq)G8AV zGs|vxGI4QCIBLW{8-2S#J8xrh-m^gXOtY_3=P)o#9ksmUvFsJf6du+6K!ys@J4u2{ zpBA*wS>;r~?HrBM6QN=a0@aq$!^t9sExu5qPwT||J3Q1~(}P&pkjA~UwME`S99n>L(zPjO)D@^kc>?C+ydRiVgf(t>ES9)w`ZA9kXA3YEvJ6{KdB?N@A zTou?ipQYTH5H7@9iV;-e_^-L2%(n>&Pzyf|5_tUn=gm$MNKK4PMtEMWhX5NVVOsIr zQ4P)W1ikDJfM##A7%wVBc=o-O$ScdcQ*=`u6sTs4FnSTOE|@9qv*fo$`yC{^G5m)j zKlR1J#ko^Bwyq;7(T7_Lq5h&XgAnRQmg;H;t%%mAp$|d$;A+uht~Wp5U<^HQWnNa` zMotOYOsOK28B1yV1Q2QRbrjuBkF0soSSgU(K#ERoMnBT`_*G4l>|4@=+)tcqg&@8Y z*%8aPFPj4=Pvnxi^`L@tV1|7$z|FD30S(qps4YY;f9Q{m(#j zT_L`U*=$xLCf^zyIamy2(oYd8Vl^j5y=v=_wa=(I4)ar>W@evRfV z0NOXTWZ*=^n~8|l?2YWneQxSkv=<1bL-3qg@K}hB!)cpL&5c6OZ8OXNq{sXajUCP| zZ7LAb127F0cYTL@)+b|jnJOs*hf(PuSOfC$?ryIa7Z;B`ZZBRn<_`{ANF`CUx-L+C zNBI0@YCr@S=rb#H*pUhk#)-OXoxq!$bCG1S!B0EKjA$PI+ESk4%lG%MdR zNRN%%y^4yihwtiwFq4PRvx+MR;4&RPaV7;Qt)wC(3A%%fqmUFzs#K}Uo`}f80kGu} z0r!Sia=lVlN(;r87uQHX*BjwmT;-JGZ~xsk&a3tQ<5>Rj19-HrE-P06P9l4qUv=ne zkl=kvKdKwGDGG|2@uJ*`*djXc?&)@z^2Qy0{Z7qQW9V3&X~Ps7=R++)KmY`-wX_cp z4k`syk=@tLKJr|1yi&eBN~Kw6h?dY-*ycA?>*{s>6=?Y$hfc`6W2&L{c_QIuv9D zn&9a=3;kYPI{eDeg~Iso=Mw(1<>VOB?%(R66$9`5j@6lEFw*!E_{D?V?uUVm4z{F( zn!w~am_^ogf(agDgX>ii`7$ZEkCr=ucTiDy3$bX~B|^ z7w4KY6EC8f=x_n`H)YnfxuqCx29-1;pfTX%?;zr9b=qiqZw64bGR~fcSoZQrkA1y^CKBSL)j0HP58>v|65U-|J@33I5_ zBW^CLZ|WP+q4n0=nL8NxqAYvwzx=l%FtLs?AeP}Wy*7Rk*RltGzSO)p3bW=Wm*{M; z+;NJeWM@wK`mVftnQ;N(H-`)m`XW%riSE{-DiiOc`g!ZG|8bY>01vDx&K#Q|lAz)4 zg-ic~=a4USZzJ0H_2Ir(RsB_`g7)@?fJ^=GZ9jbHPv#ze2iQl_|JO(2gDQ_#z#>*l ze}uDt8gqxkhpsi3uZ}0jh@pN;ds+v0u9{8l8$8>Xu6CkCREnf}8I)lwigt<;i#M;j z_+w<>m6%TkAehgWa`Ougmks+2SLaiS)#|t^ouZ>&I|_{{ceroMFK8$vTA%p z-U)UlkzSk>;D*w_6yw#PFXSDevDI^)g?y=9uxU{H49Kn>>a&l4`~KNOr2f-ienzE@ z2iI`M0(XgOeXf7EJ~)+yOv*mYD4+<5J6JMEuw)6AiD;X%TxT=hfljWz)tPiXe49bL z^z&0Zlk{5roSkr;%koc(bO$V~~g zd!7PBeLS6uUH-C8_as5uGgzlSQ=t&g=4GRkawjZ%pQ_8Qr57JGG|WYBe-0O$G}ZZ5 z7C`3gs1~3`T=nrXw}@$BnZj00ef^2Vsx^~n#`_?6maSs55K9z8O$hvuu#xesT~#V^ zo8DZW6>E}iSFNUH{o|%<!D3sSK#Kmqfo$nN9^s2Cr$&G2a5F&d z{gG|;KHo!oG%X1>m0#B`Ecm{dNabE*ZTnxZdAeGEiK8I2s9pcER1*EQ5Xji+oOmR5 zGqbI;_Q<9t89P}9$_uOY{z_KvBR5^Eqlq;&jvx)yE=iX<|1d%~wG( zj4}B?@;qqR2-48O4uLTu`xoE=pM}oe5Ovgu9^td#`CUbojksUP zD_o;2+b+f24CLZrGtD14)5RAPC-qUFUu=kB(}r>Df@>-W0~nHUDK!`2jZy#cui3V; z%)^n&Jhy1K;peR|pfI{zT6!soU7%YZt&qt+I6s$aCsy}iozIjT4#Z5E7{j!kx*a_By?X@3*>LPsw~d{Ni$3L3<2x9N2_(Ud(vzx0b^Y z6V9vg5LZ&!N4vKx;|zQM;Mw<(z-EFoDLiM#?V6VXUvBl8A)=*`k$3j2_ZX*fo*a{#!P>+YJ2TH-r{wbBd+0Na7o3&Jt}%W|11e6Pq>LoB?Cfq3y5^p?@N*XcHTopwj$V>>jsraXXz#$ zSC400;@5V_1DpMteyWN;!4J^$HKSdJ-llSLn9{{KVuZ++aXv@4DUs6I^u?+y2 z!=HH1hX(5W4b!xEGM_|rbj`Sxu_zD~P=U`=BPt0OVXi~Df+imnia+H(qgE3~+z6PB z&>qq}b~wWT|JqDXIJu@vwGb%Suz|?-(2Uo}HVjooRdMP-E$lDBKxH$kjp&D8J?edu z2A?EPaR&WL&MT{Rw9lo>OJezCV7@1WT%yRN;b=&vqYi3Z~(` zG8AJ)sF*}DpENDmQ@JMQTEF3vA9A#y>g5_o(D~v?0vHtkf*9sO0K@fh3-DTpnL|3v42~08JesQ|LDU$Y8g{Lwzk}X2{kNj`2&p+|) zL8}l3ja?e1N*J4#5gqAg4qMa&&pG&DTC@rZBSBQ!RX>O%XQ{7w<@x5k92kJ=QNcU! zo>lrpt|OF&SWNd%sg^BpER{WG!6tTr;ZIEqbLKoBz$Gm;@T}PrV{GGlY6olVvHm-wGCh#vFz=i$qmh|Qv7xx2-Umg@ep%t_?~5PM zd;OUDt{yZu7d!VGc4R-I1NG$SvEapZRk)A6qqEak#S zF;q`O#Ya$oY57!892NF4uWmbT--GwV{SeT0GA^8I7o!?2=6A^y{~I@N3M(^Ok+Wu}vx1ZexyO%j>4 zzOW+enL>$}0n01};0Zar!bxpKyJ^YA$iI1VB8n2jK|0&b+odyPn)?Lty|@E! z?~?6gVwqtq@jq5WA*z?b6|IAzz$=HvZc@S!Lx}Z$M%w!55 z)U8L?YvVPRZ+Jr9EJSP8lreXI3}6U~nM1z*Ga`q_QiVwPwPxfKrPAYJ7UC|`Ia+h( zr=+QgO;M$6!KwYkWF>cZC}H$>7k)(DOC+AVx0BU~Y0Y5MjA9H8DqZ^(;LsOCvT&Gj z!^JyXRwj_)&OAr0=OH$)HHC6H%839;P_JF1PR`S1LOaF3P zcb^m+nJ^y9F_pQ6f|E%UzB5DfLA)5;@Lf7+<596Q@Yph#xkpo;LINu{IKQ+kY>Pj)Y$Gg)Ws!`(g4{zL|g zJklCgiN}~bH-&{<85pD~y02lzIEENw7dx9xh|xGk5{Llu)(XFn*SSSHpC;W7!y2Mn zo;C8S#LGx%PPzI?k#l*S?GUC#Vk!_llO+-*uQKFkH&NO#x|Bb1lo}+=VY2d+p zYl{-aR=g--^uq_6yT6Mw@TdOZ?$IrrGY(1U-EVCi#t`u!yYI4IdtX@1ci<*NCKl&` zsdy#Do)&P!-!B+gY%`0DovfWhT=@#;7g$M8{pg5s71$VaR>)$yHjrHaiA-`=_h4heE`#U(Z1n>crD7BKs1UcDoq_ zg}&==>uSlq~hTnN)#ru0@BgKg%v z%F0W6fv!FQ-3$$Dm)2_pkdbP~a1_F$ID&gJH;G>op+{7nC`qTfcPbANebp=ov{}~I z&e^?JjE?i@F@-9mO~>Exw0ht|dCjI^R!vj$X4bT*bg&^dgvmpc@;&OYw&`QC!-g$D z{_Z!97LYGr1KlUqQHp?Sxe`g2Lu9cf2w*EkoCW2!Rh+y`Wwzf}=7`RPVv4Hguky;y z`?$D4M&lm$YBmYk6W%lJD1el*4exW$kCSj#g$|2q_q^BO{43D|>V5PQ;2-!a)fb@8 z`zH!i)rvhbZVuhSH>>L;3S@aEv#KsTH5?=1*GDaf3mka2Rt}0LF6kZIu6RlA0lc^m zW0!RrYRD%h8+t%d1}FITHkLfowN0MzFDLb=O%?B}hOsGAJlX`r$c)LyJWQ=M=;Ul; zooN8>)P2yVfgVFfZM3$w>48a_VyJOeG1wPfHkBckp7!Wg`04N^nhzTrIeOG@da~(o zYMJ%M-yF$L;7S`0S)jte50|FXxIUZaa_tFmhR^^NAbMI>yr(Vh?Nom=B+mAXMfvhc z_kUB=8c-i_H+g%^eZ8=Jq4Oo_qKUO7mhd=~=`W}g)-6$fY&@aVjD>M0VU3V4H{YQT za{fJo&SRXIeqoY{R*_y#T6FzRw}YujVZJ<1V)r<#KS+Qu$oNw{TYRo@eFeF z%Bt~cXsT$Do1~MmDE=(gi)g-Y9WRJ+-*0B68c4D#Ghp1b6L5*dDfy6TnbYeu1g6yz z1VY5)&9S6jPt08!KE;)i6R(lSH+d!SoA0r~GfQF_*Ug)cz2*Dqjd(wG%k(FIP*>HU z!I`VdUYXBGTV0SD9+f(5niQ$@$6tylE%)h4GM}4Vw1Ovvw>s$r2kMgZmDkC75*zzGl(wC%k?TuyTZ`P2jo>~U_2swr^J3)3 zhz)x11z3}*Jf!svK-#|0j6F=IhvP#nfpyyM(I4~oH+}RWAfM$t?0;CXg&OG^!K1W3Po-i=Of;(Z8(CsHec<*=_JbS6u2AzRVdlbcuA-u%dD z<&|*N6NU*I7zn>FArDS|QY^U{Y{c^K|G)-y-#WS=%!U0xg7{BRT)8<9w zHZ(NQivUTBWYA8d_K?d5D>^Z^U+z|M6d;yjMnu6y>=RyY3BcuA=-u(3KYtc3 z+dYg{Xx@oc;efaDxAy;ghm9V{m7Slem|fAw`KP#_Dxj-93)A%wXjaj!MQ4*+zX7|t z-<@ntHooaX)hSlQd9qOw6l<&1SIXe-YlyZkSD&rp^;FbvaY%bD7XLmJZRk2P3rJl zjT@B63`S}spHwaULF(wLOHFy_Dkwvhi7EO2v2@sB-bb0)BE+%Rv5)N-hu_n;-|N*M`tzLgjQhFo>v~_2w?E+-$t+np z_^*JO%-#14{Tc@?w?(DQ7VnMnG40)0ivgP83A?E*mR<8kcmapuvkXmb&hEu2xFli`|X$$cjF4Aoi zoyW)8fet9d{Ezrx@#n$DrEA6o?|iFJD<(_gVgYNJC9kNEm-+kxevAx*?S&z#icfkX z9q=kj3+iN0GJ_}-f`{;f%kgM&w*py1bvV>m)*bL{u6*>nHF-!5-IRA(h*l1+i2FT~ zl87YPNEEJ2R)v3ui!yndWPhVWdO7v;TRGpsv>PboSjs$Hfu?l=wEPcj!p!7TQ-ee| zM@u))W}nnX-cdrEh@b!D6aaE=0OOxK>FMj0-8hBE(uhqI{t!z}h+A?&j_7Sc=eD;% z{bl9t`es8^O|oKkx7b!LmcK*4e|T)?h~pkXYU9P9yUC4Zla6)G-h073Vv`^LiZLdj z1!F)Kg;|p+CH1Y;Q^w1f$y0WbH&CVegEwGWU*ukj{gNzQU;J@Rk8NEz``^0kV(3cL zu0OJlpca7uR0Pk`&*SHiL%CIosCSMpqBHgA9Ux2@0w+X1Q*ZI?xSOLD+3OP;Gs?zC z%5#DWoK?fk+(7z4?(>e~CdaCMD%`wDOyh*sa?-g;;@jNHvZdt2~EF#KN|WtR}+rEYI}J1W|12n7WFXnCK>+Lo>j5%-T#9l%fBCMGR-~D;D5ppa3Y4 z!ZY&+8*U>w1wk*)Q3ohwIIB}z1MPBFBiH*^YiGE18LoXp4s04vYYk`XN`N@Ktpf|B zELWIZY=W7rs~gZ(u7&LGw%{>{HtIBlywFc_{7L#Nr^`Jy-*#s#@K4jeX^J4@3Q{g^tlNPI&^fFN>rKvKjrY6fe#0Vch1%>^460Wp0MFk_Xg<@={{wgTi zcyc+Ojxf#lED@}RFN5dH>nBR5U4rl*tydH9AmlA^-=p-#DL0pf)n7SOL#9g2H=(mE zNskEDD@+zngW)A4uU{o8CX9TY z2-l}vp;BbKcR+>J-5#{N5pm@DZlZSjO=djmY0Ttvon-&R1%g!UGgVCwF%{ln&tS7% z<;#|P%?CR}Ptrb9cGKhitcp9CgWwQm{vC1P5m3u)Z_n(VKmri|BQWDk{?~I^>F}Z> zbBGjV&cBddQmJ?+HLbfWp-?19)ze;R&{vf}98j($Z=drZ_~K8kDr_%a>Wu=t)L&PT zRF>3WN#4a+5YLRg5Q&|2v0nI}p*=K~(Z`E5S@O*mPYA<)n?oVSv zz76EAihh%o_LQG^1P#77TZ<`Z*%tNb5{T(?*?J=|j&SO;->Rr6dZaTsZg8j2(Vx3( zIT=nhS28*leCqFL@T5B=uBP~J$L+7(Fm6S-+_ZHy)OCzB5FNUIkdN?N9wmAUBX%zY{E_ zN5?}G`rZP&7|{33t;mxuDg1Es!}@-3R9Fn9C5_XQaNT+o9xd2R6~^_Bo*w^B70=7- zaPp2%VdM`25F_I^j5Qf$aeG;I{Y1;Xv!*%t`>L;bjF)WaY^uQ&aIeYKJ>)WysUAzm%;}xxX8sX1E55wGT^_)g1?nqM5&- z7Y}z^U=nASyrSH|=g|B5i{lMDoApLmek^Nms!-~|@?QGs8!@hk*Y9xyIMJgL=d*NL zmgfUYduV$Je^h%~=0Jh#-z)L%zm`NZnrqiota!oWFgloZ{I{s{{P{dv zFbqf)H>9AoRkCa20YVsEUvoyfDh@aO1%W!m3rYjadX%5&D*=(avk=yxlzExP;a{!A z0`AbBg@pkRGI(?5mv?_609*6zwEASK62y|^Jq1t>1?BO&(+p3avPL6@pESNp zwaTE>W-|heZw>>z(zk2BT2CkOm+G*OIzPKdJ{c08FrsW2ECL%eEIMjwV1$zX%tSWR=tt^M}D*!UJld*@r6k`gN7s=<{r;cXn#Ifgf*=JuG04 z{pxr~0v(^Z&nN`C!mZi=6gV0-rI3<6#xx*~>@qnkxV?b6Y&urTzh0=GF424S30>mU zWWP-HiqDSx*s1ySCar?uoIMGB%P4(Ojg+2!7{qL=5Jw^#nlignb{ktJHt8Lu1m2oQ z)JL)P{(@rSgzhMzPq}?0>k7?Z1jX&Fb^vNjIxdAgaiA-q8YE7EE6QOrxLY?L=u=7gW-#nOKuY5Y=z?<#B{do7c7|AS}|H!BERII_R3oa*3v{9EUHzpA^A z<0tOw>$v(=A-{3IeE0o;=n#m#PH0GJh=hF{t$43BSkx-&mEL}6Fb*?aM6Tng`XZ`U4oZ_|H8j=u^GKnps#-UG;#NQ87+Pbil<%4f(#rJcMtlV z7?jt0_q=Ho(Cgx!B8qHGI-TTrw_Jx+Z`?2v$(m8yJQ$nmKm%-$T$|cZK*VX)M!m%2 zGBcYIy{{~O!luvi#<}jjX$#ee05l>IC$ta8ywBI1qi{c%9KUZ_X{n5&@c69L!1g=W zOA9vUC~^Ce7(?PC9zrc`XeCZJeNk*x4^e^(>mwIzFa1S%`lt3?A2+HorexqQsH1@3 zL6m>4N!9JHcm8(8v&IyecoxSkQO~s6($SLuFVQV~Ue36nzOEQ^Ix!q?agNpe-#_)D z`dvi0AEXW;9rvuZxyNHs=i;*JSkr!2gK2sJq>T*PIgSNom?{+H2i#|}>M8g7w)E6> zX+35%@7?v7iN7_<bfJ$e1efkvrQ6?At5k89&#Pvg_ebPnFs}funBaes{`Msw*mvD}KD*E!hL=q3Ut18irK^ z*i8{^tDdb{l0sv>KeAFZ-EWHu>jbDbKi73bom%DP`drBOS-Es}&#@!mPT*Pk!mh{P zGaMD-ZStIi$!11sLdY*nVEvfKfd^Q}#I`@IM8-{T|@3*X3Vdtw`F|7LFXnZ6Y_Pn;v7XO{`h7^&F@;XHF z_V~K*lb0u)0W+FM`9?pvh=6&hOr*Fnrzp$*t~4E4#}gOoy>St>&qEXaWNwLOUP8_X zi(|wR==mI{8MrT|)clufMKD<9vj0~3G`Ioi+E@@`m)S05G!WUkz=_|%tNcCJl3%zS zJK9r*E5Ex4vrEZ{YSCSe(vW?~?}9k`y!Qvx2&SkqL6@jU<3okb?|AS_4_o{^6IE=; zgx_ecez~n*EpC7RN|)yG$+NAcr9a-VrZOPQc{y>^k|I@-uEh3fiuKCae)^UVEY0B1 z1rQP^LCEU6r-42T_n{i*+P{`a%9}BAO9Qn%bUK#6$;0)l1FnXI2;xn`E0|rasOe<8 zc@E{XW;S~&31i=8ov7SyRyNj9$UNer?J~N>Bb^!eN<$t@SQgH_Us4O7O&x&=dFiXRe$t$bRKX2V?XsP&B6M{*2C_{bH)=3=a(%d9LL^R z@=|s5k0XN3$EOV;rn^4U#$La*W2vwC4{=aFkO*wE!hFbhsipn5bJ7a@ktdgFV5&Q? zU9yD2C`(xUZ68X#{%^1wo)tP@ck%to6p>j&X7ik3Pjsoq5#h)rdZKN?@P=T8O?YYA zK0utw%eTK+1^ntHdCom(mjut3cHSqo_{iq&7yfb+x?Rj$ z(88o(5X}Yx7v)>ATC^}0N=nAv_Z`GQPL$A0Xp?HfgSQ(HTS>dNt`PUZ!uI!+L!gQY z&ANrOY1>NY4TU($^Y=P9PqXcPcgo5?Y5dj8pDo4#@r4H_wakt+Ryd$l?zYvui@52x zN$8CpCpV?<&zSsMzv3A-$C%+1>PdN#LnWK3#R3j#;ZeJ7ltTyJ34=q6=hQ@qj0#hC z+AQ)fzGn}mtAq4u4&!RKC2@0mBFxt68)joXKU{9L(AXegW@|R7A6cKuKFLZ>8~L0o zTNnXS2&eVrdHT7O=C+}k+fU4;&q_g=r4yie?{zGI}IP7-yxtR)&!pN`UZ<~ z%KX1_YZ`6+9m|^-+KVT&hAYTk+1@=msQu}Nsy`B8FC|gTNqBCDZS8q?^Pom%gmrmb zL>&IYr*-|npZ<3jnYfnJP#7c%rtDRp*-Y0PV~Y8gL86TJ9`Lesl^APtDfu-RJ(H-S z)~Is=oSz!ogld>WNq=Vd3j;dPG5{|bz{o*_9k62`yNt&N!U)a7*d2U7RLr}(8}mLM zX=zHudUV=JR5;6SNF7^2yR&r;s})&7mtmL?T>KguKTXuvHMdpxxGu?-@LmB?72KETn9np-5D`b?(PcQN4acnJ5S2fFK~8%M#(Qg<4C?og?!0F5SL6LyBUo~Nx~l8tSEz? zR*Fh1%F^8OH6Hoxw`lXDb0z9@gxAi^lsY(__G5AP!Hr11MOS|0YhmdPBGXsdEMiqZ z@!tzbr)n^?U@?#h`cKtzdT2Mr<%`-IktypZS?B}ZU4o_BgzcHC>%mzPpn4~eiTWOX zFumw%9r_Cm;^KY)`j6hI7UEOP9CURBN5@NC&X&(iPhV)v5JQKb>7xD?O)LMdljUIp zhyoppqCljG?hKW@mtaCj#E=D+4F*oRWtJo*ePE9_4tw#0@Y>MH^YqG=w0wq$ws@8c z!sCX+?uTS3io5!<4Jbo7qtdg@bMaFKul9s?9wDcCS^@XvQXV!2s7>Uy`V;!+N>lcrfY)@nG(7?%JSg?du%{YFdG;L&|YMHWn@>2V5 zU1{tH57@^UG|9~0Z(fHuVIXMnA9hnHV|6N-n|r1Ipz(se*I8PbN8LN z;qT}o9hx78nJ%JR_XN>r6VRu>hqu}bP@C_ELFlkC z)a4H9^2OXiAILLW0>?+{f5*pe!@qC$0s=?_=t@ETEio%!#{O^qqXfKrsO!uhQ!{6vZHXkZK=A~h%Oico z6J%$D!}3KF(r1YS$#&ZD=vB(9vd@rosoYSVMgjK7c@Kw<<;f0awivF%_96w*vOsQL zSd(uTm2J#l3Owuu9U$lr;~ep_dZQBQ1AZ`Mk&gLstymzkd;IZ~=kwA0uX;n(0o?nd zNN1ssOyQbsrO<{0Feji!1*Yx)RO8owTotm?=butHNS@D52oKRxtk53>$ItSqhJuu$R`$H$oT%@u9-mE9{Lxv8RavN zDXtf}qQ*f&+|;Q9cf5!Uoa)4MMTeGFt&m^Eb$+xqK{IK{og1L{Kg9d45HyLu>f8sI zA3)C2^Jspbmd4q7b>4c_4mx#L2+(D^TtRYI(OoL5p8Y)`^8SB9033}~mGY(VZYBZ| zsKI=3xpZ4R@+UMqCqaWJO3D_W`!Iy&Rtd1w!MlCxw#BLU3GF@-zT10Bz(D5>wH>tt z{VdyjG2)wP^w=TLRFKMm81GY5$2e0T-jk^7pP3bd3i#|k+H6Og4xfmrlQ$s6Vq2@u zF~FB9ms%<@^C%PO7Pi=cg@l>bIkyrubVpU(vFg)^2;(K#F6X1QM|w%-KfNTP&fj;8 zKFWJxf8#n+mOc)LwUU%XZiylEegtQvonoYL%~(xWkc-&ZK6=A2$+pdxl(d^6(&xj+ zkNFIRFpjx9A>t~A^EbpJRh~EQzci5@BR}M$#2xuQ%s!Q$U&OBa^ZKyYZBTikd`3sL zR!b5d?d+|VWfwo&Xw0=Ali#@y*!TxhqENf5&kqodP~Ye;m70%tZK@Wstg|P+I`j(M zY@KneYpq0V2O@p_&|Y_{CBVyyoB2NI#O$5f&5 zVHsv`D=bGH`&g@3AoeKQ%WAlJDL=r?3JGW*1H#jr_ff{TKGkICg&47|?3g2j=^jX* zKLZJA@o>M}Na^zNoWQ`Zbj35ZJx>+LlJAHg_TK)6&(M|o>HIbfs0Y&bff+nL7yDI= z9LX7zf{bBWP~Rj6RhWcGqhp|x#3)~W2VR@~_6-`^-rn8?8@md+=m!5<&$cG3Oy`nRjx;moK}DXj zd+XmD6dSZ-Hf5@J5YM(q9?Dy93$b`?+|IF*h`G^8HXODWdfZfF`3J!v>3NQb6}ZE> z2Kn6}yZBCs;8&6JwW`Z$}jni#)cEQ!58EP#5H?b=R4MZbZmLyeM*{- z3Dvj5Li0IopYh7r2K;qI|KHn@T}(-oA?Gp%|Czcx9o}FJ}_I$q57if9k}*0P<`2ECT%}` z()Cco8g#5EsreDaINCG&XJ;V{(*~q04`4{%v`(%X%OsoqH%c=)T|=`3sUU*{i~yLs z-wfG_b;tTwlW$eM(|;u+-WLBRbM6;kD!n{wA1uFNWn-h4&;H&GDW*4d%qnh>vrNn8 zGcU)0!!vorLs}99sz)&BB;04G*qr?2FiZ#LPFF2#e=={++ z6q)BZnV@g{K9l6XLzNwip@Z&P-S@t{w^qwg67yKL%u&Y{{J>D3P z6#gqaIT=a@E+mWPnHgIBB=w{krQ`}*c5Q8!G+Ti*Isc{mbMwE(G#7>PZEpfH<`Ar< z`EvFIezLu#7jQmzv7UML11X#do(Mb()*=5XNAG?YFB!A?3`BmJ?QGoVqQ$#eQkbem zB(nIF1u9xVqU*V*uPZaRQ1eOIg<^+FGU5U+MQ+if!|TEHQXi%)bFrL(90xR6tH$;imaxw-Fi z9;~DY)h$IA(j$^ARjF4>!sv4Bukb8w^!9b1h9!#2DelG)8FlhEb$-X4MEq|Wnwpk& z9HDNYU9JCfK?6_&?@mlXaR#`%0Ng-uK>=N%vJ-naC1{BJ(e2iM4Fg+(;upK^rjxU@ zmvh};Hv$E$&;H)(7vBH&J}DjpyidMuAsvfAu8WT7cyjKFW7ihvLiF0NOaDtDK?|X? zhLERBMu)wmBdmBC)S`qhW}xGMOxQ83I1ol;PHs~29d?gU;B2UP%=6o?lk34kZSf3> zX*z>^D!+Qo3)wfOmP6P*?B)*rGXYv0&@Ts4!J6!QuiZ2h?n#0(c;KM5aXCA0Nf|mw zFcI=1K58=~*6kk_rH-CoJm8Ek6_&RQFRx; zU)r|5>G;Cji|qczf!Fn-FWb3Jf8SyIscq`w`9fioAl{Fjq^EF4#24F*S!Q*bD3Fl! z_{U2|_o!j9LZSq!6eA8KsKDS?7&24OL*o~7mh$QhVz(NV5Z5L)7l zZuc)n5J)X1Jp8X(birWWN#a5m+LxQNLmVTxGfl51)jS^l_k|8o{yQCmx3m1O?0Byj z)=b~K$(}6*+S==$>d!->4a=iiyQ7{cWC(HZZ0x7^hV0Qe?+@e+^Cr%|hFx9?3}zlo z>k`45F#fD#afd*%Pi~;pHcDQ~WI2`|r_~srC<7#ap*j37gjVWV@spjwW0i4LoqXp0 z3vI<;e9^YKTYlD(72>Y;ecvu!nm$x?XE_+^TDKZ;-3tC7Is_HjumARBz>%Wv>*F~b z9CC20k7sg;xEMpIWze;h*~fH?xzOZ1@tJjMIl5=5?;3CbMlBM>s|2|TqR?e}-^w&6 z3D5~i`O2uv6yTl_ois$JMV%y&MgwsG>3@BI@_T{z(VcE;Xdjb$?czDU z4s`sYO8ZCT99`UD?5EuykC#UZ=l26^Pkjt?Bgf-OuXFa2>oy{N>xaEH;k5y(_7vfw z(MSb)N=+%ELt1jn9v*kT=v{LWe^ba|0O7Gbw;9ld_cVOA~t) z5CEaw>D%II0a(3=AoWuI9-F0aiVd9CD(xDPpGWBJUBVY%`48At7pEXK8@)`xPxFGD zs-)X+^YcL^%2UMADVE%F;7Pnp1(098)ZxUu47O1iec$=C>p(>@lKi@Z?x@FY7{v0y zx=8;mA$}3Rk4c>M(903t?ixy=2hpjS9pWn=s}N&vUkMnxxd`e&WBQ|eR6S59_ncveV#WVr zj+l{qyfOyw?Dq^`%_!ojP&99(doz- zW1h?z2upq4Q;(_SKlVib-U(|MAej-0>Bf8EV&E-9nl^yX#=NpK1r;G4ss3Ub;gA#Q zEz#wk4oqXm4*gv|@#vtr9zmVyYkjPy6r}U0Ca(yW$Z~M+_F#H?l{?M#-I1bgB*k`Lo~`mFF8*2#9U!c*%u6kO|Kn(Hr*3%BPhzgZSb`y#;?qYy#u5Y$%7`~QkF%7 z5wB_5+Vdga5D{2P1!87zagz4x*W4LMkADKtO+e~<)>*PWGn09-5!iaQdN5I*ulM8c zYtiiAYf`#or^}P?S7_^_bci_oR9ciK#vhHTBKO|Z7rcTy$yOlhNP}O99cRRS zO^{+&LU)I})o#wX7Nc33mw*?bczZ8^E~GJeG9!OokH_3Og#QSzL(iBqOZzVz!iY5tR)C^xE=kf-2!%YSK|D}s86fYr8(opM2la`UhH^MTmD4{%Id z>VrJ{g)0vsn!qB~h&kv2Fvr+*oc}gHz5g9}lArkNd9oaq>N$;)z|*GsI{t z3VFKtdCWxJ`;49EE6Nal&D_a0Eh(GTCN-1?e|O2II>q~~6uacyJJh>`7cG##55G=j z`<}N9G3W=iC6ijd4iz(Zn)Wmu7PuQ6!$t1xI=@k2oA~Ao*b@}eQ&jWoJlNTAt$zod*kAw5B;8=2&mbDZr`GtqZ>NF^N)9XfZki%6KK!Y)&?GBabL{Fj;@oV zDRh9LsGB?QkGBV_=MMbKzc1qn9z!67&2u>xsmLn(bT}l=d{HI3keTagxR3b^b8S*n z{6cEub9^B5P55vM4K;bhCM?LyT>m0wh!tgF1R}@H22IPEn*bX^mb7JumW@B6QD4Y= zM07mPyA-#$w}S-C9OIgQf)+;G!(Aiy*EIJ>Y|XE2AE)MLaS$y}66Gb_7k`7e7mK5o z+SQ{UN3WxF$Fi_nUdHZDY8kG7x!lcts++`YkNvgDpc|x-f0oO-CDmBXc5lAl zx^+!*{uUF1)Qy~)jxD6$P~d#1WW2X3ue*B)AYxvR_h`Qyu0RNW5zFS2>Lq8hpL(&k zc%Bx3vc3f>~(57;RvU@i!86K*j=7~ zhpv_{j@2r2{F4ST`ijTaliK10ndG0nRZ|l;(qEtFr?l^po{$In(WQw#l#AQBwavk2 zU_Vvnu~8L*^x=8*X?kWxSglt3>nI;{#KT#ibNi0<3llQsxfAeiALTm?KpAkSb^Uoc z!nd-&KT@rvbGL>1?&0rRyWxouxq9r>^k6D;V<=p*KubX|qq_bZgd0D>lD#ScD*p$KxZqS+3qLSwR7SvT%k0sVOjUj$nv zRw+N`mDSx*y($AVhi(NMRWJS-{JBSI)sGZ&E`5%NQ&Y=cCoM0IsX6)4OJ3M&Ft|Cj zV9kq~>mH>)`(l z2D9NkA2yZ>5 z7-Iv{fR>8LD)g2POr**-mCe+sn}Yhm4B}0a5M9&h(+BHgXK}0%g~c$@p`QKg9>#ZY zV&&uB15pDndXk*5eg0`jDbgtM0nlDs4!y46xt9j-KIr!}ZSfW^J`e+jysja7dcyvS z;^GK^&-3iQ4yU*i`o!R~R3^PVdUsOEpWEtXaHS1odmeN8rZY!Q4Tu_=12G_`urA2syAzED_WGLcV9)xOo=0S0O z@?GwB`X|J>?6Z5wSReGC1Ee>)3KcE9n2n30NOdJ>z~~#oVsJr^Q#!d#8HVtMJM;i<d37ryl*|z3<7M z_hIp80$TowZ><_>h=IMRY2(FC=j$IhDZ0r%GiotE}N2^}2r4#YI5Mf~^0MEtYMd+gB;%AAyFcHZ|B zsW|U0N2Yj{3?U{Ldc+N+mugXbY>5W0^ zhQm2EkB)zgUZV=@fXjTyV`q=k(D1#bPP2p?8kMY~qH{b=ds4XYbJPnqlEB$yu9~Dx zQx#mc`FWu1FJ|(5jbEDkqlqF7H1HfhVTW}CUz?au`UPx)d&jfM3FX;s>T`6q8XFiF z@ABW>ZujqQH}*$f;0iXgO8D>`#LJ(y&t*s;(_l+xjzZHXp{+f&*%_r49II4`_DaRr z$eEqSnBkLM%sI69p2QrH_rhjnzdnTIr@9#h+}&p~^rBbO3JszCE%i0DK`M6@;MsT&iw)-Id%7P z;i^q#sR$M8@TC+UJ`?B7Pimv?)0Yaj=YZYvVL=gYC7@V8Y#X-lQsU;h{zdl3g7b6y zJ1mqe3{~!u5W>r%J7UIB_pT3S(?>nPknL2>!~`WC&;}y2!K#@42fNx>j18KQ`oMBx zHdlAJ#!#5`ArXyp3BD_p+bb6XU8q=J-Zqq-@b8=y9? zFf1*nsSO6NfzwMqu1qs=tjBuX)}YBju22Odxi&}qVd*1lL`o+KP6X>ypIHsX>_Gsw zZX6_^BYfu^o#pxIi93(GSXHDFIO@@Bot)(+Gv6d0s4G5vH%yLw<9kLicjpKkJ;YAeIURRudDaUPsB9>Sc7X16Rzw_eXBZ1Y? zs{w8_1Sh!Qo?lW#r|m9zH%P4SW#;EYQv#~7V@^!_u*01dXIvP=Z#XJ;{I+yV9&O|A zUgjV?29mSf4&wHC^8H7ZpP>aS)3p32HG5gMt^V#u7Fw{QwcCPlXN05APnCfS9`~HK zZPM;1kt-m}MUq7HX}NTYr0S5h7F?xGVUC=x$(5wLtMMrzj}pb9n7gqYf>4#2TWQpw zp*$+nuMY8q@H*K1Jj$f-FdZvN9>RCF8#Fj2znRK#%;YC*fssEQLLe~2rgPK&>_Z1m z(C*@Kiy*w=??8uVq5B_++ivN>E!=b#qs@513kLC?JApfxOVQ=CX}^HWKYqo4cvjP@ zi6`pSTDBR!h{eDpReh2GzzppIH)Nxe65Q@bC6KB0e(ImA`}yaO^jjW2>CgF7VrC6S zF_*icOHZsJ;AIoqQW?!dj(PxEB7GhcRm<`SZ=MhU8}#+@tCNoq^9MND&Axj{CJV?# z{xhG56>oouevFFl#?JcnmRnN($Cs><`$XrAlNH&HilGkzy)hBRTWi|gt_=(O8xefQ z8hrddItT556*#sZ$Aa>IH~A)HAr_`ETXz6R6jw zV71yd9x}J%8XYH5ygNIdU>BDO^6%>>Rm`oBYpcR^LGCxreS+IlNED`}RZf$*xjAqk z^P(q{a00ZG>mA0x(!PL1p{oTD!~d1%ZS@EWlo(tupfKS~IPZN{gTZ1r z$$E%)n_T3gdB=&_VBKjQ<{F#Yi31`~nHzi5pY7{chn>xq@Nb!po7>-Whv{(?-`>OT zd^;Q=L{xN69U@2RV^h@A8^wCt`w&f949POy$Rl&lc=0#{l8_hWe(oE0`kMbSlJoEy zC$q+T`2|MiYAMp8*V%lsj~EQ_59xoVrO#}~TtR+b2TT*%vo052g8}R7JL|SjP?ZVZ zM)l60Z)*ju(B5cTCZ<;snEWWg)W;F${ew%S>&yF>A@sLvO< zE%LO>CLo}N5G|R@G{l!4HCE+-**PllMP|@)RyS@O`9i(z@HtBiqZ^JxeYj zs;l1UpMJg-sG4uc-1smKRLytf)e`z>?%d!+gwl8amF1YP#<4?dUEC#%je`YdN^TP5 ze)eS*@;@{kQ!-I`cq`b|(X-};rbdI9Thil*haOF|oLpSR&Y!bc<1))jQAfT9CuL^b2{hFB9=U>4;vba4OWYG3ig#8IVOey_jj z6)pgOQWARJeD|Xc^q-E8(&_?_#04KfSi7VT-(Syk?n=p=Eq}I^9=``K!_uY8JCEi1 zD(>Y;gbs5rJt?%%)l})-^n{Blf42NQ!lz9md+=aKS=Qv|`RLulcmls>H&@li5w5HC zQJ>t*T4)NMebFBvtQ+5$Zg4w#gQCadOB+~jDQ6#2uh)W1Mv5Gg^pnO+OCLaJPP25@yQ1$mdTho3sPOp215KK4>gX4}mC7w9Y7?`*eu4^d zsHpBGCvZVhIJStmTcg;qzWBU%p1-qm{0cP?o#;0AZ9EWT@vW?+y|(b(>AU>A=@PN! zz^aatA?=|668nLo*aDMweIFkx$Q;Rt(%Tvg*NGfTuu*k5`P-xK97vj!j;qH+) zF_{%oXuvm5=u;f*yBo(Yb^1MV>4H2_drdxKsj`zfCYL8FrcQs=M3yNeOZOE)P1C1+ zQC%2?VkBeH&$}TGvZeASD?f%sNBuvm7WY_aoFq`lW_8fmLeSI98?%W|poUz%D*eKD zn4+8SXdN6)hLI9iRHfx&`576snB!jdFfUwGpi|b^4E$`hlx}9`z9n&U57yf*(l+e1 zLFYr=`|L=QkB4<}<7#D*Cy&bgGD{-%S_~A6?~$&%do&bdWo|WG(r@{@znYYKy-}N7 zY}{3{u?};ZNq1`d`glQd7%DoiFX?SKDT85aVge`gUt9LOn0l*w3tMmcsdL@L-&|)i zqZ~izXy^HgjLGz$VU1Y5iugE)454_Oy+1R`$1P}@Zz3lrM;%QBwxGMS^A|qOZcezE z(1?5LIO=|A)}T|Fou#F$?c!m_9W|Q(Ofyq*^Wlh+1PDCeIB5R?t@)L=`h@j7!rCQa ze1H8T(+pJ%Y)()3qLnUOZd@*|7{E{QS_KM(|E(p z^ZmlPcH4Esqc~k{bn#f{P|1N6T#PrtpH(-ZJi}VY$BNnB;u^bCdh?!ZK5L!RVCEct zAM6cdVpUyqye@qKludI>&*G{0%U8|W-&yga7Kb0FI(4|0f&aH{>}T)WXShACl##PN zZI@bgQ;E~^S+#H|et42P@KlAUpx15P=IN-nd*PmUagIV(n-5ipUFT-yBh5NQDIEou zXjxt!Gwl}L-H9^e^E!6jz>|v_dnbQn@8(tCO(iUE8Im?^==TnxoV0?e>G|&w5L$Wl zVkFbYYg)?xsrOt7@?4U)gN~2lLQ)lexo&sXd@V56)nac zTtHjsi6ia@*48yUpRPxi@cK_mE#jAdzZrMU$La1LNG~oSPqnGN;tZ4hhVGUjzI1`; zL8U;#C(d?Po!^Yu@4mA;h8&E??MEMXG1fFGZEzgll_BWGXFJwW4cedX3Dr?pO}JaM z-~5JKAuiW3nJT7xC12T|e^#y9ZPR#rCq{euh1u}POp{+kPVGp?`tGZI)q;|PG$`Ao zynv6>9rE5xS{#ocBJ!|A9v?ZukH!t>d>4{i;d^F*t=L!tU`^JSXEZgTZbspseZ26{X$eS2;ybJ*Uj#7a8vpm2}HQP#kQOC^+- z!>Sr~Sas0h2Ki>gO4|-D%(Xa|o~%g9msDEjj@hwAJmiFlXq1e_Jqa4=U>hR%?BgRo za#kF(wsFOMOqfj`=}v z-Gye<1^E7d+2l_0X;O08WYrWFK$(|clO$@&Ivq_1^+Dcg+WAsXo#Slt=>T+=Ob17+ z2codB=;)+`-V)E89tF<%UCE*_RVM4aao_{diBNTvtTT))e>$(psplPA_X}}0SH{?v zxN0bjl{hQ~fvTyEM+c@b=%cTBZ|6W%moJlXN4sCp%-}{=ximUB@eIPi&oJ;d9<3zH z-pa3K!`z&l;A}Q+Uw9c776xo&znhQHMrwmpDg~Of5BitWN2fOOL9=pbV^0E8y;z?& z$=B+KJf7b-bZV&zKn`Y@UMwS97rCvl(2R0;xWgX?j*f4b_cNRK^TxsWyZj|Ju1v;I znn9wX8EvJRb*cT()ds%BCdp1qakPIZTMsBgn-@>zV} zO%pS{klp>Gk=)_M#q6Y{B=S%*s(fPN#QdVKHP4)u}VS2LRvv%~|ojfD8C{T#K`p>q#o0~BOx1$Qs z__RVNGc()CkZIs45W4JflVM|tf5Kb9dO&^Oo`6#!lef!gL^K80Wj8?!HSVK^7yHhY zDrQU+eXmUXEfr2s_Moy0O>!8Ybx1@T8{s{W=@;N#jla-!4?o9l{pIPi&+O;jCC(Z7 zMW9$|n$c;Uo9K+B*j#z85cj+Eu_OsAp>*k2qo2*hP@rgrYG!M|`LUNNI@Xj{z)u$& ziYCBoyyk==?$TtW(OtAO*MQVCn!|mN zjXU2!Pwyp7_u~kus!5>uXCrK{wDzB+n6;}R56y~W`sMyin=;hE$msX%tO;gH8@MXl zg25v9ZGjOH6W7$#29JnHKgz@jr;=|E$cE$lGRJ^%?B6sclbThfV`o z^<2lg63?bm)q;cK8c#nV8b{~~R{~mEYNW$@D@XA6gKh6c+M9AlEH;QjLlYTp9`a?6 z5t3_(`L-?91*w{Wl?H(eZ6TUDHzTuCoCf&fBpd~ch|Cmy2MqlF$J%>9!`Xa~==v-8Z{x%bYUJ9qBP^N6&eUFxuv-{?f->=-DH;=H(x;&7K0uN0|; zq$69wTbabuCTteaEU@Z||N4C%-993j&j2_B13I_N%1TQ!0s}AYc}uv7CgWf}x^PrR zHT#ltoCV@+rE%&;H9j7k93Z|F9ew@@uUQ8Ii83x8^lyb#0Xv@e=#Fd?0q3q|_bTAC z2M1mVS@)cI0|S9TDCMKrV_NO{GImS8wCfsqCI7sJcklxk-;aAlYfp2Ljg4K149>$) z)V?w>_s~&x2Z#ZDt^~qmCM*Sv&CX!iedwgDrManNY(AkQ-d~CV z&$kyS3=i*BFrfJTH*fI&YH9!b!r=eS#{BQA$Aka(QTo4v0{&m8=>MwvSMdKXL!B_u zE!&S7QB11>JbT?jPsvhM6^{#ugU*>42)$Y{=QkyJHMzpa&jVNpG-qRah$zVbsPXXe zKv#g9fpd;!3_gew?x>*Pa-R7jjB=HC0gTQo z<0;9>XnW!l*1g8ZV%VlkLQr8=Z2XGM6|1%Hb zFH6vMeCFSoZU9G9QWJv6nWaJG1aI(Iq+j9T6P#a|@er?r|Eca76a>1P;tMJP z09^sla9$EC@Gqhm3Sz!~UK0S|#TBR%AOOq1NCiAX1Y`kFN=`_~`S}$AvoxaTHRu+= zu;;Y{4*-Qw(Mg}P@Sj!@06&4sFCh3EmrxKX#Tz_w;E`w2oS%V)5Z)koLr#ETu_mT~ zg8))6<6Ts80XE*>0Uz(@-(>>O0u2S~``u(bApUorbIeHp^T0p%SLBaD=dANjz^^A~ zCO!WFO!~Y!!{!aK!8UQ(@hUe}6C;1N^ z$uHmrYPdks|Df#e5}41M`={IgT`C^gKaukWg78fKCI?Uth@FKH#PWBenWdR;NE5T( zynEy7E1+rsnE(*=`8V@ni>D@Z|DdKZvbQ`lqSDu?W=RnqC2N1 zJ;3xA9rnChF3|K#kvIPV>nh$W0%8Df1cdMKo=M~5lgqsVIN^77KmpWDz|a2~E->*= z(whsOL!5IJH^CeH=l`TjpGQD=uO3hUB97by^c*B>9slRa`g7Q5;3og%2JU}xfYi*~ zI!WqZot<`XOKzN|tQA_VkH?F35WLgwxpn(S?hPJ&nWy1(zzemFpX5Er4IU;FEDmq_ ziB0G|$V6JpaWj8U4=}ZP&8lo7WI5k8(e(&BUW!?mKrDEjo}Bz4iVH8@1gHg&K>8IRqe$hL32xvqpEDP$oT=)& ze~FFr9(d8)wDIuqrRDJC2+w(iCHl%^IcE7_!Vj#n5u}d^k z-2woQkPz=3`HggD^2_+-A+PafA2h8q{WutAB9zRMCcFGu8gPXFp-2W?uiq% zx4`J5Rql3(Ikso5!j$$s@?H0wS;8J$@9axeFT(xoAojw$Y7pXY#YoRt=WO^~kK$3< z$Rf&H|HQ%U$4VK|$%yNudVr~5VwJO-$G{q@xnVl6$D?MebIV+S(eXvOroz=q{7{71@tj4P{WkuXOG}pmnO?e{P$8LM{q47epEkEq2>@Kxl zy4FA ztg+u+hB9y5`ix@>jfVTqd^^sxyrrB-4Cnixvn!aa*V}O9_G-TpV>=Rg>b>z&+X%C5 z`s~rLb&*yv4`OBe)Kjx)7KXD#CA@EoIniAa^DuUDocsjG&WTy=Ecw2BF!Js`I}elp zL_=kG(>AVW#|$_JZwl_Qig;g4ARX{7K`$&V?%f}%1C1vq$H%`=0~qni{|FaS_yuR+ z<3CFH9>LG&Gr32?E17uK!GCr*C`K<_bOsoE6P5dL&YQyurBglY$SMo?(X`!(qT~3Y z#K~&uN%CZ-gRoL1k%v)RWH;ktSygbu9gp=1XCab7j_kA;t8GZPbupMOb!8qLT8{Ic zUR?!KDt%;&w}8eYA(i35cJ5Jj8}=*ZVlb#lIjlWF6$wd;k}J*wkI@Si89_Va!dml^ zB1@}<=_1scbSwBH+PCbzzIiO7bg#!5;|8T7+8UP^zn0Z5e{)>M5B_8pLIsHu_^J@X z$@=acYXB!R!5_{iC;vUzUI>W4nSq)4Vr+!tF*7q?WMpQ($*f=l(%kjhxjST3wSKyI z&#r3GZaa1jC-td8eKThH33>y)3W|5=^#|h-FCUyze=}!E-k0 zu(%R7&LQp{=d2O?d|kWcw&zEH1(3U&;)n_Eb~!nGJyt<>|M+-;ck;+c zx!_sYXX<{_f~z+)@P7A-3yDC$O2CRJwgfTYGyh=^5S)-u`r5e=y{QyM1Y1mdyWTA| zG4@CTy0%ZlIN>`xo$bH9a5}esB(*zz+BB$8WT0|XY(TjXB)ncXHvLbEW}5 zD)ey={E4ha8Q7FHB$hnj)0GFR{ZHGWxh?dCMwo&j2fE#{>uSO443SCU&D1+itk1^BOd+CG>G@g=qp6pW{ZQ=i0PW(ZuA@+S%rjkMU_$(HiFELafAiIFuE2Y&Q@qxo2K%xwACQLCCJhw7FFi0ADvg;V-uUEHb3Qcde&JL7>?Uo z!r`X3TDKNXkNMwrPgM%m;~V);^r=tz&CySZe81PEM?iwd8b!-$3-lyuIfN7TD&x5* zz49;o5D?^XQj`(!mi=g)f7pE-*6Cw>RWMJT$a2upn_}NmeR-LMF9`?w&fH zyd6eVQM{3xeI0Y~>z0Dv^N2?fPK|U0Ky{Ss|6BDqpV=U8xB;^%0Cl8rLbi7~GWLG+ z!jh#c6in5&LxmDUn=NEDM^*@_Lz0atpeyf)1)6^C6H8PZ#gdWfV;pLoR`!uRcGL+p z!Ua338$Ls02CG81QzJ>;%VXzSwr2bH_vrV#77nTCscbToQfTds?@KU@p!-X_EQWl= zojs4TEDOM*y!t1>W!CU$!Hz77WLBD$rwlg&nXOTx(O?Y-w@!gz@AJ~y+^DQj1zAJg ztd&em%tI%1e-2loP2cA+4fQ}~+p;lgx4Gr{@~s4g7Sb#FSu;TeDa#(-kL9cM+ReUx z;tN+(D-mt2YB<6sHbW&BUtlYyP6{gw;YVVL4Vam&R)pkPW(@faMUn5PKM$Xu9q;2L z)$S`GWTJuTA22AB;eYs>uYma@9P|qG`27Ql$14>}XVivel1C${W4NCjHJ%s*dVfQ5 z`}Ksd0xsY;){`Z`?T_Zg?; z>gn0taaU27muD@5L51Mlx$vy^A;ze8LPBC}JriO_O)>Fbtd+DOeIX?V@YZeZT=rb; z{2;LEEWkYZELTG;P;pjha?Sj?He18Cm|!kKrJJ$sC;I*-+Z`E6rw)VS%!AVK^gRu^!xjk#PRM$?7hMY_8K#>7# zt%){KL$*h6n=zP-3=$>&3=ChN{q{7r=7no9#>w6LD|{E&ggS6SRMEX*NJr|xQsSxPSU4fH^{7^#3;^*|Fo;B-n-^WS_R*pS~tM;!*LT~8-C5* z4!eBDw$~Qid<6B~C2?=z!@h@|kybm@73-5O;tXD%E)9{V2M-}Sca?6E8T!Bb5N!^z zxL*k;;7Q+ELQmvZZL?9B&FwDs`??nnt&Ms9y2>wcR*l=#&VDjc>yZb%Y&Oou^ihh9 zpi3uD>8FVAus#C6&Lwe%og3=d1@n@OR35KcEjtQl9T)RTw3mKa|HmIea9V#0AR>Gnz zFksIPv1=F@^>k$|h=UG3d05$i5ewhiZk+r)h1pH4-ENP();+Xfj9cNCqMfYvs-7kF z5TCuwfUPzUc+jMW&nzSNkIo1n^D;0-;Jreyy!@?0lE9h!wP$5k$;%rO`PR38ZgtWp zI-X+B_Gco`R@Eh{##YKb+T=&hCXqhj<{N(v)$B!1|E#kSFfNpJ+zG8~Do3^_3JD+X z8&%ECF21hox=bI)Ycu-60{yh#p<=>whJGBqlaMiEmKYe3-gAG^gI8A>XW1=W>otb6 z!-5kS+TmO1bfb8(w}pl^v-9~yd5`;7-80k5^B~KW(dO5R^Psw>ad}$3;xVS^1pUqc zf4FRN$D0yLGYgDCZoV8~>8A=3Ro#8DY@X{J-@2m>>aiAe@s<3zJ~dGDa^&+EaKf;g zV4t;6^7Xf(f(sdG;v{*ZCpi_qRTqRiwV8e%hFQx;u(m87fz26u0)np7~;i#Y8&F%iT{l zir|fXj(%Ze)e8$RjD|J%heo}YCwo}JV%e^QTXqlr3;15 zqKI@0CBIY^udVL(pJK#DPYS`;0Ezx$!{ELR)#(NTewNMQAa1DO{R0DtHcyK zKcJC&aIFMPW5$~mQpTBME6>aq_c;1#VvwbVUSS+$4weg{R5jJ+TlnSu;)jjhe0-&$ zb$L}ZII0n5IMl_sI#yX}S7VSjl=-!Abz^F0JdFRADh+H2maWA(6k8clPLvoCxuMUG z5ULQ8MRJ&p(RjQ83rjHBEikOSR6>1fUuG5a-HSDf%|eEaB_`J5?3gf{z3swGxcZ?Q zKcepGM}J*nYTme4{1@F_Tf+XF3kgcbeCc0PAYdv0Oz5eADGxqdi`^*gPwznClfl|k zE2-l_55L*Bvibf8t<8)}sSFajU z`F?-HZubg1+zp(Z5}!1Io!C%$VT>_d`E@yF1l{OsA3r;2!TaP(_+you&^BLGNeVxB zC)f>|+um#InPBg&cGi*Q;s$23NeC?)8RF?Nz+?=kpT|46b5zyktuUC5MY?{7 zng7&qBlwf)>zjD^f~*$?LikxKvqlYh$OX*0BcNoD$NUa%*e_g;8`z zSbD^0a7 zo)H_8lSlr1{!-_}{MY=BoLTXFIp$A5T>l6nhJ!%P&Y{*WYXYfLjhKzI)U&;bM91Tf zScqNzN$M#Lyb9vzK&`86a?qq(yVelcKjBmKiL9x2L=&m4drvsPB6_*N5%ko8_%3&B z0uN|T!y28W-_;zz>@vC*QfiQEe6zcm$1I=5+{*(`?uHhWRrqZ$Qq1(|VFm=2Q(;ZH-Wi1x_E+0-C!aHe z1n#f80lU$(d7wN90dzqMXIY-*Oqwmm;X!J=3P-?W8J2FH^zdlcyx4S`_eg&%dZn#+|ifUn^ z@4gY=c8<1&9hfk-WD*$SKU{gOR6!GwB4K1WQMuU*-*h|;)33$7mHM{TrAWqf&mvXt z@b+ct07{m}vn?M0D%*jWNI3r>{K9%i1DAdU7)U?5Gz?Ij9sf!d`-XDKJZtMdi`AV1 zjwo4x9|s}U{q}+~6jRrah0ivbv}?Ceso{kNHMfmMFqChQYF`IQ1Cm%9G z-jh+^xyiMz*opA@W_7?Nkv`d0AR+b!i{dNR57|$9@c_Ht`SQqPLOc-OCBWKyZn|P1 zVJ7%P8pH!VK-A$opC`bu>*fA=LN*xJqhW6Ng4F5W0&vjZkv>iFe&pHdl*4hK)L~lf zW^Y){=^Q`qWW%@lp#E~|@&1PQNjN_pSyz&3FrUG)`p|5>sY_to=ZW_Bgr&y$D@N2Y*Gs2lBz;ic1K)s>t{QO zHr1+Tg^V;5GOTS($0>U0nomU6^}S%NFfhx);;agqTq!y!hbyn5z<9XCWiMgBEzhBr z|Ebo1t&Rs+D7jOd@qO&k0w2WDT5x$Eiw!c#xfz_0uNstNneZhdGICYoxZl=J6{$_B zpq&p-6Rv$Z1i1a~=<#WBQCoO9pjFsx@(lP$2)R&MYst||Updqs0xzbC`bzG3x=j^6 z7`i@^8#7s~S!@nA{=}OFLzRy>-y?M~L7Mf_$3euByV@%XW5wv#I;U`bOjE~;U(e7y zRq7{~*nMbC-`voYYx(f+AqSyi2cjVU(_b#S3oTq4U%u?CUE>4Y5x&>+sjcnz5R({CJ?R0O>4A>shzL^AT&ze z=ZB3H_+fGMYYTji;1mh5oUXVXQ}j4rrVaWpR>c5P7J^woK3#N#i{63AGXhau{f8*8 zF4mRcc${e=^aqFD1IFKcrh5_aliEWjqr={AUo$&N#{MZUtYXh}-^ueTP2mK7RfX)X zDv6o87W-Rbq9WV4K0iPqna_yY@Y@h8oTy%^%Xqt=A_?J(``&(8U}o#Dp6MEJik+)y zgnDH49-wLLZ#4(7LG1cFX_T`$vKm zJNCZJl5_=a=Y=kb(z+j>BEpO+dzA|TJQU6G;@yJzZY%i=0}xdh4|EnSqWnJi5tYIo~u*z7=(=&>-nt?S5;Ng%VG< zzzTQ%yiMVdm=013@k8w1-5J82xI zJiRJlTosaDN9y%QM?Q6vlPT`#%#oZ#_27u+j~r%mw#u2b-aFaG&p-qihaot&_V`Yx z@2|w{sqz6^Vljpc8RKH3KBn-bWF~HeT{Jp}kH01*rbVs6ulohx&JD z7KAITO+IEx4z2max~#Kr*rtNRNNsNE2|1PFD8|y&x6lBzCgD%Yx4J4K`ba?BP*iMb zM6cc4q{mYP0xHZa0HefIfgN9_lJL@@mBYo>hk>PqrPC_#${*^cHaExgjJ57jecX|z zZO%glo942$YsK(D9Qz41*`VgL#y)J`^k)FxL z#e%|5s?;gB87cJ}t3{TQV`~rUUG}(Fxc8W<_l$52b>D)7_FsldX1$AIkte*~5_Jcm z;R~X}e|2siWrP#HkzsD%CYL|+_OFw=YV<;3{p4`!pe?y}%dXZxb8y7qB>Sw{u`G1X z9py2}ExF>+@bv>BO0)5^6iWvxQB{We35g&yj+ja=6X21>k&L$y-H`(;g77WlgYra= zbcqhDemw%+D z%xrk&h~o_F*wQ3hggMUJGIenCll_n#&Eq~P5!-n6u~T)K0ne-#o03-Ph#vOfnYb~m z%e1u7z{)~4B`e^ub@`{|$n2YxPoq>gp|e7x*XX%lAR$^Tq$&!R_D~TsrG@6j+T3yd z+*G~a=aS*PYq4?8s6vhWwt&B;p+hkoJ`pMFx3Wo`w8^i&=a9|kwsSD7<#}S6H&+Sn z8~~J;+~*>qpH=X%C(z^nA+3!GaSiVb@d^slS%dCNinJI z0WpvFz0ePrm7ZNEu5WytK^Mp1=cbO#eCYm&q%Z!xj;{cyC>-Kx1R2JXk9*e$1_lsQ`Bvy(Nm9x`pu zY`|mQkb;#u_zPmy*GP}pBf2Ezf98i}^0RhzFN8Ye>)4h&x2bvG%DS`kI1>hrkLZjm z7HL;{!pI1Uy3At2Mk%GuZ zrOrr{-)Q@xV?id9G6-cmG140Uv^ZzPHnGc6XlMvoSk|ay`-ADpe6eToea5{#4%t$i zcF_>3#7!n+U~{(aQpxw}y4M)1qqe!wH4?F`n6!=4t&O9f-SBi_+R82Xv5P2ho;bH% z@8?B(aZR4L`>B#!>!~Nh4M(ZV>RF7dYq*~=SU+rJ?MCU_?vCusBRpSK79$tBu3Tzo z1{;21&xn6aF3O-r`s<^!^^Jv4d{k`cq%RAJwYGBk(4ea*!+@zq!hEmz5BkX4Ny$rl z!InGU?c);EC`z{su&W(C@Yawm)Ah2cho8E>Xs~g|s>GyhYl)zwY*BPUApn ztuNW2S=3?Qmqy|(lJ3Q}ZHwPeem|#_H(>uXE*Iy^uB>I1O(Z1bE=b2M>A%}CyX%4) zj0+#oLE1KU?PoRm+K4BIwFzpV7f+ivs=RjOcW{sMdp>fBRh~i8IE*6lrcUD>3&OJl z+c}6%CU)(6qf@Bve;+S;cbtoNRr7Cemvcp$_9|eq&6khh+p>;l zn^ke8QToCTKI?;U7Z^9MlDM0{r0dy8l)B_;OJF3EvVg5uopzocSHgE?r#9F<=aV)! zja)7z3Z=iSAN1wK4uqz`kgQyBFB}S#vt*&P*6y~!GeP#^x*K4^fs$sj6cGv0hm5L} z^?I4G9_Uz9(B)FkG(ApGVEWFEOEw1wwGCgJ^8i7tW}PqmM&fMzlbk+#=!l-v+%lDL zp$|=fSErEkAe=QYN~xk4;_PS2rA=5M0C>*7&zO zqc`gsBrv9qM7-ExfxZn%NjX_kcla4RQ8EnjP8 zeE{R(DbZ&4u<&Spno+2iXC23y&&~Um!zyKMt(_!FAtRUdqZ(1+WF;`eapyPMpTJ5w zc?h~~gr^QNb*dhkp`Mys*lGEg>82pWJ$GB4zg*pS8M1&bu2oFA`}?wmEJVL~ockGF z6A>`EgeD?`OCrqU#ajqvWHKhD-$^HZUyg0bBuSL};`Os_{hD1eRS@ShN8x_%G__Jw z0jTHpVlKd7!(J6(KjxC%h8zrrav;f)KAcKs`H5oz;;71A0V6(FBIT2v!gXs~f!kG; zgU%{)?b;;k?Z*oyHHg5j8V69&HdEQyIREDrSalxRoG=r^`s4Nw@>y=MeW(v zv=7wt%+qm~WyfQSR-yy{LDoC`TLQoJK*Z~J#JAznRQjGbjE@p)cZ)E%u(MORr-$cc ztq6T&-pp3^t-g9j07r&=n{ zqbwpJ=Kk_)HZ3L64Z>^r5UTwZ?w;=BKfgC*bb}oo>Awwhsl)G+F;;wrmA~dY6Ct{y zYVhs|zm22Xxzv+svg46vpZ&;%(9Gc2Se?X`6;WgsTT1@W9b?}a9brdFD>F0YstIcT zX4qPSW%l|$rmAK)ya)%T%1z{DbKOIkcJKEg_kOl`OF5(!!pWu4jgfhRi}*FShzY5QRF z*Mv{kk(T;C8PB}gz|$UQ(H>h=tg?K3zpoG#vwqjaH(Yh!dNH$7$1iP^=AiAMl**w* zxOXS3s<})K44I&^&sy5l>Cd@sCmeL%gPwnR&+WFch1-5tx&rXSl^d%shLPoh7HtpJ!Qn_ z@P~5^rK#JC_P}nYl~nN_=oICZ*FnHYR(1V4HdBVP>)?0^u%|uK=4{&uxX+U#clX3Z z*HHk>MEbt_sBrw719qE=n|{UUn@@90cK7in+3AmshVs?JTU(V+7 z-=ocKL_|Dr^_ORyhQd6IcSpHBFo$j2>owaY;YhauSZmXAC<#5ikViQNH^;vMPMkd1 zywq1$yx=g=zg`CBvdFwo<31=jBsMrW_>s$^!f~n$gR%5;kUG5FyrO(gjLRA8@V_2@WAiaYGHc5BAdU0}M%;=k6-)LJx zV6%ES4ap8p^8pX1`Qywc6iH**E;= ztfS4vt;0n;7u_fz#7L@Rr_(r-_7iS+&JRdt>g# zC|Tv&R%P~EkByJJi|UU`iMZ_IX6iA*j=HvUYPjiBBSA9ayEZAz6;<@N!U+glqFCjB z+x`G$2C%8q!*dRdUmRSk*xEBb339AHZLi&Cnh3R;+1v8e6j^u2U`J##aNw4vz~_Tv z#b>*@mKn&Qjn;+_<_h^=n4hCoUifXs+R#nl22QNtao&m?69>ISqZk(by;Of}RGS+@RvVwVb5PjR&Xk5+) zx?R7}aD2O|y{OV_CQCzn>rfXy8cQ!+P*^nVbBLBY-8%9lb5kF?zWx2eIp17zOUsy$5qp#PD}?B2-}&mXSj%Fz@Sva{$i!}L^ISGH z;9WHEs+21KfdTHSJeeGFg=J&}EW^agMJrpUv>2V&=Ws6w?M!JiUQbv11!ie^cToIV)FT1lUlnd7A_kh z7@)NRhcI0~obSsuE&hV3WDVEC_)pnX6iE#+iO`dFW=kMoIxF=0hcU&m?phmVb~hr; zZ>076!*e|(Nt!ukdV`b`=N5|AKQf6+az(AW3VjcoD<;VaY`QOvD^iGYI8KC(sOShFQxRC7p0)E#k> zF?F0e?l)t{XH@0j;WGituz8TIL|IT!m^;7)5mSXG9rWls-cqNIi;2g%&Z79M(=nq? zlDCygRf;vYJU3cmx*2o&?HD&C2F9j_?1kP3bR;_Z>g4O8YHH?}2NF*wr;hmHhEs({ zh_hwm;+o=nQ1jrO+^v_)k(XWvDBUC>k(Xg9)BE1rI6gh2sCGS)a)md;bN!3Y`j;_8 zBYGW&?km+w_Ex^jPi#pcQ}WC{jw(^L$Nr0UuG04KfU=m;H@68>0j%qpUU82$QkR$A zEY?(sk0$$p7oXD2c2^tGZpx>;&rr6{GbYG?YG$NsbNP5X^L0@GJsG1RoT9qjV;Y6+ zGUGT2nXu*KlDA<^H2&tkGFyAr2|v9bmVVT}wCyL_4eY9a7igZV%wiKhHh;>gXFalN0m63!ss$Y}+gpVwI8tw+wQrGd82oS=+V z{$;U>@qn`;JeT%K6av$x7dz(ngJTB-*TP>o#gR0OqZZ&r^tIm2OIsoO-BKG{R*{t4 zR2a|o=8b9&#t6gO(T^*Lgc@VB+jt?VV|3yW*j6k)vD_pJJpQc1u0 z!4sA_{?j?QqYrLCY!bd;*sa!8HaK{VNVd~bpPZ@#p^WmDH+iHB(u&pmTsm6bYd->g z0kye7O`w5XE$zmdf9f)86{x5wzx6)OaAoOn9F0nhNNDsor_)`H&Gy<&-ZS8pC772= zk82k<>m;3}-;v`x&$i&>{SPv~IRk1CYy3U-ee(3j_^%@-`fre zoc?QOp(`}~M_iN#Rv8ISn=?Rv9SmHKIZTFLfBQUC}J?#E;+5zf}v7Qi?%O zcN?EQbgYF>v`t%ZPgK5SB(5JmfPdz&2ZLkki)XCFkLvGcGl{)GLxIQBN6q zax+p$Sld<*VeG3BMaYgXPyS9m{r#lAv-Z@_fN!r}+ zQIIM#FN=X~&E~Ys%aO?vGvCu1uDfGjtl76)QH=OzP3E*(YBg->4d=Ai|2PsB7Oy;# z&e!n3Q6LPf+_khjE<5q4>S>kKn~Mu2yzeMcflw}^f|Vq()*ju14pSml>~U7{%%R_% zR;N$r`{xG%0>t$1g=~HzJz1UJ8&nOnzG*RII4p zo2+8obv8cvwP5J`E6Jk<8@Jaf_6s&K*cD+?ThzBi-1{U7@$vPvr@2U?*SFIj%}j<= zTu27d^bP_3+Jh327vHv~-8OtTGQkLQT`t(P^cGw#$Yr{4TX zA^*v1ekpsPFLZ8BaLB=*4GF2<%Gk(ri#(hq;m_ex3DkSQgx>pEb0=F3D&hJhV+72g z*4aKzXb}yPRcNS*ozv0CT<(u=MlwpU6F*qF8mfuvf#@6b!eE2;Ze_NDNSMw8I#17q z!qP~I_2Wi(HYvv?ZtnI`W$r?M*M_FkI1aUxXzn+$PaY&b&Ct8e-fOA)38KxdgM=Bv z^7D1_3EpQtlvjcw^C0x|Big7DZKb?=k^ScvL?4QN-gOo z@$tc1M_XQoK^yHC45TXA6pCaFJ@)04_#RA?sBi9o69(V|!Hc2+)2R;FcJ`Px^YWJ4 z7fjJu07p6?h1++VwPMS-h%cQ4*5K^(jFi{lFC5X^r&KijhG51$RV#GP;1BBx73}`) z)m6H6`;l)heHeOSm8OR>(K%pxu7L!w+TDSKFOV3T%lNJf4CgEzL627E*GPiM^{jodPq!vUEPo8B5|Gb3Ntm;9dDeTOQzmZ$!2_E ziCq;R-3vh&X*;s*3%kq3=85xz^W2gh#>@qTx*qQMItbh*Y14eDisa$7;dkvUeI#?Q z#o0zsCxlgAgH}D8{UHp+(kl>Y<^?AY55~;aH*zFo1g@D|eNfe)y-s3z8IPC}@SeQb z7Y8i%0J8yVI5R0HzTS)-|F40w{f*P+qGQFg)+q^q>XYl;O&X|4^2-61g4b%c&ip4l zMSE0ai+r~!%9$LFey(2&+ycx96hvuYB?c+q;q|VFEo&7e50h5&lqII!HzO*%N=c%A z3UQs^HB22h{!$#0(pJjP>Wd%o%qso5_u^LcxH$rzALgsu zVMU<&zwCu}I)_f53MGob_X|j@x@;<73K=zy{zq=cr}f>M)b8Gw7WgI2oNQ!RHW%w; zQI@jgO>qc__KND-dcdi_I;Gro_wv7udEiT>0x_2n)}cQr^{`nPn=qFjikn2#82tsJb% zrZIaEGIO2bk*#Pum4yl1vDs66sGu?6mDeqYPpZT-tsQ%IOv~jkY6Q((DcW8jmc~V1 zuPwCxx%kcIkf#Zu>3VmSW*dQHGWLCrsHv$h!WOrV`5OV8S^=f*>O20@?YA_y*e`^C;J_}yoX#3|pcP8+3; zlM$zbj>pM69_y0^MpILf^8{X!!t2;Trw!(VpNG6LBPu>lt#yNO$&CRy)T>%_H` zSJ?ZCN34Mr`msrgXN0e9gdX0$&g)j0;&o_~?9g7_F)^uEv9%e|iImtW>6cpM4wLq< z>6xD_U;4Hg)a~C|1V4RSJG~nJFu^9hwqj;*;_dQY){J5#?KQIMQ{AcEQ=g4*p40cN z)NT(IRPgZgkB#~-_RI&jcN@g9zZQRAz*CeXY}>{OPVK%7O&hciv%A)&d7Gt$VRe0Y zVyqZbYUYId`fcp)hC@0Xmq0r0Le?jZ&V{3V(G+$D!r68+!`MC>T{^TJi+1qwmq# z!-S50E}iU%t-x@%V)clWLscovnLLf$@f$S`mUjcGqJVpG38~zsgjK<+_vE* z7~Cmfa#yg`83mi@TCXt`>aq4vRct8H$WNd$^Fw|f{zl(v8BL;|>^SN5l`%3KH>@H= z7f$T*2#@&Vc_*iYpL-0Q&j{L#gRD=Lx z47&|QHilcZesQ{EXXx2W$JeSn#^K&y`EMquSS?RPlqBiv!?uQ(O8rmUjrX^?rOftP z5)`r>{9Gm?r@W?mC>F{@8Kw@J&ep;=YSu9o{y%r49xe~$%`~fvIBmaQvd`*x2&nw- zK1y-jyiCy2Z{Knz)^oH0efKc^^E34oY6N7>-m#VaPG65S5)z|r8^AfZ2ItAk64ano zN`HdVp|~5x8QRYsa<mM6S2wI{xjjX3N|Gd~0NExOZ%9VBOu`@x}14o^ZU?Hr|ao z@rSoazpUNGOzWLJ@3#NCaf~LJzo~I|AZO_I`@`~ziWfyiE7&8x+RgOr)M{pafe~M> z4(F4TOZ88pA#*M5no)?h=rVXh&VXsQddde#9&sAL9u*bY3GC%Qmr4un^FAf>*q=CE ztfa_}II8dV>*^#cyc(!kQDqJJDEB%L!!Y6scw~Lh*2J8?uCq?>G169A@g|apSu%KL zZfnz7-2%2#8d13;qi35*CAO1S4d=hzxxKi()7>PzE}rv7>BiihJ4pE8ceIQB3w**? zH~&NXe`3GA$pG&7_eNr7JiL#0b2JLKP+!1x)(h>?xGk21ME)}H(5cFD6wey{Cb3uKUm zRd@ky>}to0ZB(%eaIMmw;;%1Te)XDkLYgxa$-s%KoeqkWO@nc|ZZrr%IuaPNFms?G z{VD5H&2WeoN<%pQeP=0Jgmm?V!-MwsWZpu9!oYEQS|5mh-G7is!=4e9nJJ$!U326i zx&Pd+FP3aFMwOk*X*FKGdNsGbTOSH#PrbFuXkA8Ab{(m-40o&lOPv3`B1PJGT~~xM z4WBJ9ID7}t-5;lkbEs+!c+0|y?v)xq$#rk;;0!3=7Q7Mn%fmb6EY4O)ZkH`eIh zH@Cg|%%c;iN8UU*R54NO*9|`ejvaLs-2SwEByko%hAqTAIHe1h`FqO z^QOC3f`*iuz=aqRJ6&SI<;edN^mEO$OL_`ibm`8w&}X2d^#F-t3L3K9^0v?Ju7et0&5NcEnp z@ZYGddg(X=_pgv*Z0?rA+JDsy3vh>#gg*X2B||>z^>uHth9^;(vRxN z9>K-l5W@V5atvkTu_8190=XAW)I;?7jfP`el#|H$6KMElkC2d8L(M}5~A}>U|4(NAr8l~B0}gF1OsPMNj|3-hHN`|A-;1qD;B*c+nKTke{$@qF{2sSNK_ZNARn zGTQ>bYWFr$)OR)~wn358(lR3oFlvYq5oI+mqLsj-I7@Qlcr{msvu5Yg$%~Ep3#Sf4dEssw;vII1l?ejdv_sl0Ed-7 z;a`s3zipJ~|7?1gvAz|DozVpqg5n z?_pmr3d&WGE=Z5yl_n61R6%+X>C%-Ry0j45Q4tXkkRTu+L3#&iK}z5%ozO!MW0fqg|B?H;>Q5^D7)EB;t zzEJ;D^eG+p6Wb?49#9ixj1F7S@t!B$&W!KbCcrr2rD^6!=y_5;2krM2!j{J5+`~E_ zg(!{%o0={6@+Eaf-;1HY8u1u2JmLlgQ;ughKVH8)eONO0xlkGP@k73Z<0yB?P8>Y+ zZ~~a}OBG9_>r`q9v*Su3cz8*q#U`owW%GN=Fgx*z`6iw8g-YW*>h%ivRZ?K^@mC36 zz#L8dCk4h$Z!hX+C~Cu7mvIU-@Ezs1tnypE>+7n1va4NWLvfKLVUDBVhO~Euy3)E# zcW&@Jc*}5G=YNLt`{EaOkmujp885&a|MN^O8ZV?;h(8*@YX5n^H)VS8jO2Zu*>&Et zL-sm71WMtHmEnipZetwIHGQrrX|x@@h!pLdc2J3RrXj#siNng$*4P`Zula|QbbZrA z4F*#w!ag2o`@0y`{=IB**C|+1k~NOS4}GQxZA<&94&raZwMS zdwwfaI)se{G4H_H z#muiBSZnKdG9J3=*Vy{44Cv>sO{%)|Gz;s+7?qEupydd%!!|ZU7Pdy7(!!#F0W3hO zV)%k~7O(_X&cmjvj1%19jdx*gpP0YP)-?vUCmAU4R+xZsmv(uDp?BK#ke2f;@B5Q@ zW;Dy60uF}n?*|{h&l_jbs9N*C8}ESYnerL|N!^wy?_?DONiJs*RcAHM6@u;ec-lS95mGYaN9 zOKK~Jf1RpOdoGvdqS#OsE0kDXe&G_B-u~`2eHb;olCZ6H8h^^d;u*mi>*x9;;P?T&#sv5i0XR3WJ!*zVEI{NJVZBcNh-Y>wF1@~9LwNXN8{OH$`B7^yxw6H9JdBRp z62UiR5JE+1XrJG{mr6VGz&e)Z>ho?88~@m!r=8O@dBdE6Y@2|D7Gs?m7uO!scU^rM zn43TA));o`02W#4miA{Bk_zisrz>nu9u&@^8*A^L{9g3izG#~}21$MF9eDt?>D zZcMcyo4_uHB04qE`uap#L`J7FtZM;SZKHx=P~IR**=ydVdksXe;G%N#YR zmaJAc{e`ky(H}+pq!7?ID-VB-cm|z@Z}0hi&w<_?^f)*wHsRc^RSa80ZmV{Ijpu`O z;kzmFO%9pC9f`>)Q$FjAS!ZPiVe3wsAT%Mvm0*JjY$F|(&XM=5lv)DX#&b2jY|n>& zd`A|FDvDh#Me3;Ej@H)FwLdZC`2z8{G;sNyIb<1?Szq-#je4t?g36rT6e3; zPvMxoHkpp(C+QFn-TuN*I$j#nJjxwEbF%v8#KXhvr*o1Xz2KY0XbeV?Zb#W?YaL)# zK3S8W14pxgHQ9pJv-RscKsNy zF-KlAmDB?)DcL-5Hd4W}yQ@_ER6sj8y2;;{~fN zDv%I?#ptp=FyG@KYX10Y|NMC(0@kX0&p4g+zKUp8{3Qe|CSv&SAP3wMb`Y_boEmnH zpJ&WVEdCIgj$0$IV#$-HX>8e=L{dZO?ud zzJ?|9&_`xtwnUyivQ0tibo49&E+(Y`W5KgNqe+W8u? zf(kamZ3(Z5io_yEGp)Eod{)pWK|kj*L$>FdR{r_CvfPiam?w2700aOHZ#_ka$ZVgk zc7}1!H|I2bbq2p;zKJcU>4p@7jeeOFBLDqPZEf@B)APT5WWRhJ%I;JA>W6;{%%9Y( zjBP}7hn~;>6=h70$fh;00WtH(SNO;B>?JbpvmK~w>sfRcFsj=Yjj?y`r%B{}8dO(t zg|~|7yN^J}++_TxMSx^WQxW}0Cs*iA4o5~~hqyZuZ2fVhhpbr*t7);Up{IkCnUQIv zYZacJ6RH_5yB(J3z@?6N zHFwmrPDZf933Cl*J-y9L0@N`c?`~bv`DI9t|LctYvulA(!{D7)zwPVAh1=jC4?umf z3!svi(NFi1piRj^>F}eK@FP%8gD~Q!*}As^7}2s^pZW^N3T6Rw?(=6gJmq6xp=>`! zVFEuj;u*Mf6|?t1L`MPqsO*4^LDL^4Cmv-sJB@zC_=O-3Y0jqOQFSa93sl&(t_do) ztPejL{O*Qd_r)eIE!v*+v2xx=^lnqoJFR=1`QLx6$H?k48~&xkP^F6M?^}sn2wGiD zT)dtsE1JHR9bEm07 z+u*4wV;2ST&m_4xw1wH*-1Z>Z>iK#2T8|)Dn_x6c_~f%Z!)O~yQ6E%3Z+1a7{p{Ii z6|PSi-7n5l_|k~Bhx_4)^PxC+3pss<{7+@`>2^YZJSReWqR1R57Zxp%aU<~5)U}q5 zx%Rs7bBFJ?49~qhl&7->;h1NYm1b``bECgb@Alyggs`eiA1>#eX71W8u6^kEAkr zAwdy1xe^th<-Y`IdKZnBe!qjRt}U}DpPID>m4Xb}Zyoe?GA4ihkPu9m>T{F;=|74= zwO+7i`I}Jo%emRLQa$OJK?8;_cst^uI&< zg$rPa-3$7!e}QM62QL_IU-+!{f`R@s74U-LrQCJ%1YrfrOyWaU;6x^TtFQGeLfIpn zD7ZsailuGYJrN7upq_tz^h15ic>oSLl(pRj2-Y{_4Wmt@U4Tqd@t(#1d5*b%=!Jd_<8&haPpJwL_#v1OUTm$VX@ zXJqJ{R@D8crlLWn{0?D}^=z0sjyzyaX)#l*1Mc~6kvJzR!d&Gz{)+9hnkS>DAd;v@ zRL}pSc?imud`Kr!yJ;8Iw>rpiN9Q))>M^0G`hE|}k?^>vF#67)qo@$eLJOkh$H}Q? z2X6(*^mhlB!xlkCU1=cEpHFl>p{n!IPA*a*jC5|naiw!FREMQUpsX_u2;^3Yte z=m?USu(7UFUTuJH@dK%LLBre2W?x!cOD){--0^j+tjrO!U+WtA zdsK{lhI|)3+>1_#jb(P0o$6cO?7FHi~rJx zM*r)E`rBJh@9%!mIj`z_{J}EvU)WbXMUfvO8ImI*0!>tb!1Jlo^x3qj`yr%{Elu;M z$2RjDi~Ikz+y__xlm7kEs08=fe}OLX#qXsbda!c&M36EKkSCN6LRyI-h4aBXZsBgV zETW(8Z_TVDqw2j7n*`?bW9+#OqIPj+O)5$=>Xq6ii>S5i;y6fIBND^s{ekJVI1Mv{ zPhaZbJjHI@l!KLWZxlhkm3Uhjao9*Mk)C`~RXv(I9%o0%S6&O_4jQlH*!dc^gBC7u zOq1@B@~r)6PBOAcPcxN_J+W36`XuK!O>KAl8rn~#Vp?C_Y;trtc=7hLAwTH-agn<# zqPEZX*640lWWFx|d5Ae)?0~$cd<&(#@{~J#u@$~QOWm>?rQ}ds{S!Zbjw;U-F|cmf zJfUlz_Zw^;?6N)n+Mgs?E-EJf{KxA(!X#m2vUfdwAxM2rOv=+8ff#djYI6-xPtU*H z#tXZPHA19ch4Bff42vDU2@9AgVPTx7EVnWttx@^xadC0iux(XwKwJ_kcwL)yP(Wg5a^%T;T+;DgAwJmOK7UpI_*L&S>3hzymOjtv< zXA-^GD=TzyqxRzFV|9@JxAcGZqCN_+1n}owsltsWLm??C8fGbPw&xKBDCb8gC8r^* z=T5(gzC*BoSsE9RZsMnnTxb9Ot-|h1Qh6uY8?#iD5#qhl{q4EFYvvP+e5+L=2}%F1 z)17N;ds+!qV!yjP7q+j?Xf`gRYAUAMD%`d}377Su6Y5N2A7OlbKBU)j9rC#JCF>heRAkNQLB zumAU}qg$DhZEhPfdm@PP3k_Y(gwOAeE)E{=3M%U}gf3;+5j*ia_W>`q%F5NHau-o+ zLSgulf&A&@eVO^Nu0#ApfX!WPzv6ZeY1Rxg-jYt^cnR4sCdcF7Dm-E#`vGZ@Kisbeh zP-lp^VgJM3jvP~M2OKwKonA6%*}2a;@X7C}@8*V}Or~sIu`)aRHO3+8Dh?>P@CK}xsmo93)z`@NyTY6$#V+rt_6oT-k4>$(~ z)-S<+#L3L>cGfi^r%d>28qr>!0eNZWNAX7@_PN5e*&830{vIEHNv5U_Um84r#o;~U zdrAtqYrHZDWD%yDXXI{NJt)eO8IRPX9lM>X%9JTmla-e&qt7CgrbJXkJ{PdGKI& zBj~T|h_%hw(A~=ODTDKaD5X=)Ip7@MN;F9AT3p&Z=zP=G_Ry2#H6Q$|Y+&tqcSn~& zBWbS1FEz{TL;h@(cgT+s$?ZAJ3aL)MV(zQw;^=)F z{Y5Ym6Ah&#iIMW{&YVuZ?5xL?dd)WRj~k{EU*~{5;)a0Zs8GH|&PGlLu-VO{e-M&i zu<@(kBpGYKURhRT6|A1^bvM>c^x94FyQhj%Pw(hT94=Iu+mT<2g&kt!3%isEeW#;i zGttJZKM{ZFzuF1ip{8`CQtW^u^Yd3i1{edw__))Di%W^3R|q-p9rND{#Jn#`pKi8w zP1i85Z=75ks*9tS*Zy+^Xa*JU8{KblZAMq|Q{kri{KdyilOr-Y>nkveYc8moaKZ=Z z4mPRJb+Wz@%@>zBTvVxV0R|SS z0gm^%;lcZ_a4rU5rt>nVuN~42;=e!BONNCcN_8DdbFf$d!;eYRi^xzKo&+Q=C zAA{bzd#yxpq{?nRg#;kBmo_G<>6A_=LwW+~qN^7%dy~0j&L(-QImAAQX-0W9!?Es_ z=iU2*iXb@+m%C*{$9?M~pm&#AGX#bBab-|}7(U@`yK$>Pkhsq(xX=FyLCFGBk^4ZxMoH(<(aX3voU{R| z_T#|oM(O)XgcGr|cVqnlZ3~m2mf$c!i$0%sOoNaE1z+m4^8Pp=*jp`z&YT>z-+Zfr zzb&W2^cpgW$3I`$_UsS6yWZzwe7M&aN_4&X>@Qi$R?@E+6|C zDC>SgY`)891l&ieSAu*u7iRG+Nzu8Bk>SA8Fi%sQSuf@9Cb(BaAhE)u(IFrJ=Wp8( zvhhZNkhw!1s^bm^CvZMe4%86VAyXc--Z`MoKe2ZX3DIQjL8`qSb_~7~Z77u?MEJhx z>gM3^Fr9T8imT1Ewdf8h4wQSoHJ%du{B!hhZTgxjkP~0twwM+Xl^}d={GhtX)}(h~ zsM+flxBj0|{JGz{?ZuPwqJ?#t5e3n4)OhM?0p!vMUlJtR2)d!Fg;cCouxGLj*1iB(|2;_IZao<( zq@0|S4F<#a+~+sXM+KE{Xyh6`R?l5Ramb(#yW;S~o!HsG+cf1RzAgAK)F>a~q-7o* z55rp>!pN_&g9?k=ZPZGqKU_Y^HY^;<*b_M&`yUsVe*|hjhP5HSfhHvMv z$zyVSpqV$1f?M{>fkl$M_whHZGU3Qz&g^Z4Er31gs+?2^8=melE(q9aUw)H4O^7PU?IHlEo(Y+Vl!>AWJ{=G~>K8RHCl7`mU~D z_6Fo-&L%I71)pvNB(R{X>pC3Hxw-Y$#$CZ$f;~P@c5cddalI6UAXto`=ow(2OWpU^ z`Xc1v)~%$JtyAJP5Z zU|X-x(;Z;pk0|*BVP{(S_KeTga=^-8F!q)~ zK`{Ac?VU(A6VDGsQm2q^yda}_Ws7?Nq9Z!F1@1jpUsRB;Uhe6RLpXV_3^hlmq-u^& znB`Z2#s?1N;58Dtt739=+V~)yN_#aAmh)|!0<_oypWW_e-f_;4u*lzVvoI1!&1!x^ zS>58uq=&a3y{Ei(esh_V-Twk88u$OKzkVZL7eHxM(4roIy3?TU+256|kY=^$WV^Et zF@^eoeG)5W)b4DIc)s0AAsyEYhRe#=RNWXUxiaRFqbpD{g+zqlfQ@>hLg4ai(E>D@ z>sSalF~=OAG0&5FCvKk%4Gi!{9kx5Liphpha%AR$vF0sD)Qxw$^XxUn2Nd^bBq@u^ z#H?dlU`Z@m7b}_-*7y0&<`(yjReM2w9sLO!n47J6b@PYz@zCI+QjS@B0WO2MD1O$g zX2)iQaiJ&@`L-u8dw+8FDC2x%{t%#ypKl+95Sw?u3!Y^UQa&UV4jgY|E02ewlwqEp zv(wQ@qMsB?W$t9kh3TXej3E0+WgW@$#UMk-)$adY=n z_vN_J0AL^vL#WT~(85ZT*-ADnIjo4=bMW)+uxMB4-41EjjPX$MRF`sf&i?hz;klN$ zI@1VS(Q#T+QwzMpR*-ZZ{HseKG&M?fg?m%;;l6 zu#?(Us*IMm>YDJ3eXjB157lB>IC*j&QiJ0`{s6^(gCvLT7h$ zG>$&ZzqSZX6e!j<#Uf4KwNEBenc84SOjg;gsJp6r5+z*>8V`O-268Emj7pmRbF!lB z(Hw5XDgl19=ljaXO<;Vs(8f*rY!LnbmKn=K^Seb|Yj7-q3QMH;NC?w{CyK0?y`b2WL#a&$A_CSTPput}uirVSj zYFF&v*|T<3Fd{z}gKo#9QuvCB?J}YHz2nWQz|(Olp~Xbp%0N;I@`2W?_f9_>AO_6j z@2-fBr-;=aVym55!1iq8R*-lq@v2j6A&gx+UFRZ@9hYLBQl2FX8y;HbS5NPin0~+^ zC+;s14e^f=UZ>Llv*n#5j6AaJ3%ZKewO;^~D%Qb)j*&6?&dwp!h97bz$JQcfclG7e z9#eF4H>e2#+H3$$ySAF%(W0axx2WjcK z*}q~-a@_R-9`B?IfXE@dY{!_7ce&X zB=4eNxi`z*Y!79hlCAnNl24nGYVPRt*HK9DVhfZ`Rd3ZOwjeMlbagyLW{X?lVAF3W zmH4Kl0Nt!$Hc?lx@tO^4BdESAM@=22`c^gFZ90B(O?5PollKNv4L6?N$YSsB9|Za9 zDuhryY68&4_O#2i9x)Fpl9e_%GS=B>Alf`sHu$?Sqr=~_w=zB5T?{xtYGz{qetZDE zx8C?I2;y(Z!k~|X*$dwI0Cuw6vb3-@iyEbrC5=h)a+fqcVt;k=^U19A$a}fTDL?YM zsd?qB&+-AR*wq(m$`T2R76p{vxoV1AOO2$L2Q1P{(k<(X`mWO*#*Pqr(-j7V<20&s z9y|U8TX&U^v4J)=GGCGxuOhpeD~o}w6C z5hy4emv58n>Av*zpU+pHos#OloJ=-+30!yFBOPXBu4<(W2G~SivV^)0|64B|%>Vyw zMtR`K1kiRs55)5;-u`VzFBnPz0{!j`BaIO%{7eL{Pjrp54 z?R>^MeTU{+zCl_d7uS7p_9T}0l3pLgl*jmeB^3C{9JP0JN$rC@G(T9$8{92UA;Tr6 zs4xPoZFth)d}a_h`94UwF)@!>-K~se@W32bKH3v+)ln#prVMw*H(P~IyL0ZAq z2Shw56BV1>P;3EMHLWCerUykmjo6&tns4pl{cE|U9GdN$@r2&lSr5Q9>{UOEVg zjK~xrdd(iaTtTr`>#?q`TY6aTpXjY>H9m4>*|r8I4t5_11f5vfO=z{h2j5(b)*@Yd zL@(V5Ktj7m^fu)XiT7(7o;_LS;xZG!@n^fg)-sn#FGyNS+oFbpNM;wAnmCI&K^bpw zq?nKQuUn>EGR54>=s(;yN_0X(lO5BlW$v+GAFWA)XftDs((_orKyNS(EQg2B*RIWk zd@U>$YI`==9P3})uMz870;p<|hW7jb^YTQf+lYO- z51(5Y&c6G({FVh_8*4|KyLYGZ$IQU9F|BGHJl794=DWf}d@8TrzWqOj(*-ap0@nj@ zV#f>cOr^%7_Fb3iwN_B{3ucAnKym^(7a$}k5kb~#C;~3tzcYscHrl648oj=|)^csn zH!V_*D%gB=$=T=%>#w^XbId1|(-AA{R;ci0GNJpk`Q)T*wjE0g5wmmL+Cnhh7pR#N z`y?OI$!Lxuyi5pfZzT$zzeX2_?uX3#GzS#D%T&;=<#e)m0;Sc*k4USkvdUMvizH~i z!5GbgtVlDDvU1>f4(olKuY9y0PMRknB9dQXFrKaZOY?iAj7oeHyvswb4ihlpdheho zA$)TE%Szo&_(Uq@gq8d)HGHC+qn`7TRo3ZoVV)->5DCdIj|^UL1-cq&S8SRO@)mpa zQ28;?Bpv-iNlj|%+VT$nA3oj_+ehdMo5>l4+gFMwfk4&G*Yy5cs_#J|3oO-7*xm7R zo~srGr9$54KTQRtrOV4J-T%Nq!Sd33*7SI3hHAY;)(XsCqj?Kaq%!o}Dg92rZuuh= zq)|(#H%2eLz~2yGhZJUYFd1~wh(N{FIi2pWE)1BAi@ZjIR;S)N+K~?F#i>bVx^0Y~ z2&DpfFnf4N*GP~yE+7Uf$(7(Qp04lGKCtO(uavcMF=?&p8Nh?}Lm0Ydm;v{`NN|;I zjMt*3GxW;dk*aHlge2VEOO+_!C9ekx29s62C;j|`iac{Mxnbgg_L}Jh_V2C}iDhLX z(fbYMnVj0}2bc4gRMx6u4PJvtl2(?2AMkBMIUHB(#(wMB8d|#_^QTPg<;Hbo8+Z}9rEBX^gwZ+i{i9hslS`Tx)-2w(Hhl-3Y;BviW?4r)mTq<#(C02E~^F}YrhPTs;>hwTqo*Qk)6V>8he z0pdDH6P$*2$_8^}urza1?{eql`g(O{M5OxIN0a35Gd@oJ_Tr4Ck!9N+TV9B-HBK;? zW5D6-lN@vl`iHA;o|lz2%?O0%<%xZTo0X~Y+M&)^=rgl1LUrYhC3W6G-^GQYGT0_J zu$5-OO33>Hhk|CBvM)I9;Z-L4=}~`1TDXO!FuPM_Wo(=Tw!K0!v){?W%OOA?r7kEV z^JlMK8YHH=7A=v|Cpa!c{me;rzz!2`#oBL}t3vzMb?Ea$HEPgg{V%uxWk7r?(k%F_7P#agv>b; zeb&yls3-i8`iP7SS2`UeNS1=pSX_Swmpp&O0Xg9u`0n% zhf~ViY?hvum9PikNeSVHVj)KjbZG;Hd4_`YMzziXxBDe5Q1VKjRv$YylnF}(+`jhB zL)ug-ZV5=f?Szt(osqe9z1;KD`}|^sYaHGq!b&@RojI~%<4;olw~?XoVLdHL3m{#n_hn;ooejT`1n+{Y_r$hSQ| z3b(v_uzy~+B(4MrO2nI|4-_<_aVBvPZGRgViOg8>)r;z=H2uQM90Q#5q3B_#x(5G$!tux^+Q zR5)sbK7e{MIJlEvxCm)Vbt{-U^xAs^&8s;M}>huzw8P0 zONqxD%?C(kg=kjF!u)X^D;=6n6cY{(*6C8(P5k*I(r>OQ7&{$(jar^gHRYgfVGkuw ztk*9vUhgG!YKO=JA#Wm3m*sKAA#~i9oC%!UoI%7bnPyUM)+#XtTJ?N+6jslrNJujX zo7o=(Mx*NjHWm|y1~xsEeE=5&Owl_{eqQZ-i@VxJN$O55MePNWYzIFhP|3+sTRAzj zU}+1MbyCbq-fG>4pB*Wm=lE?1DUoJsww1na6zj6O$^-o#UTnS@f`cIWzM8MTu4(1? zpT|zT((BWFQFcwe-kv&jxa(!}=Gx1M^sh*^I@H;DGU z`t@Z3AC?+&b00=ghnS_L3df~xDKvw%_H%UO)}IsOV_@Npo`yl+*s5=(QJO&uX`+^% z4@NtXH1vjvr_i9U4SqHC+sNmg)gaNGxc<@x>C4&OuZ6QSv2yW+l1UK{u@O~JY;s$+ zXdtN#1uCz?*ex5`)HBhsN5rGL0HIFTd%&%adIG&UJnvsWmB_U0i|@~fM5obmssneX z=J&DZ-v%4~4qF=ClXbDdP68X2PQx{>?rjU*!;bblK?O)KKOFdU-#q~O-chBGdRt*; zzb+ME@M_*q`VzdZ*L>=uobyeb<-&`%mqp}$0Y(2_FQ`DfxyW--jpy4_!brSiTc_whesXWzv>opj2C!;gOyDks?@NZO}#=*Y>ULPpG7^_qXlX8E0z zPG|AM^)ZgX>+xloa%Fg`JH(JrwpvjY;H}3$DVnH$@QX97ojBG6r|w@HzA$|iSW=jK63Z}m_>CeY{^uzE<%60rDB5MPgR zO-~<)L0}>{Yfh>P%0UD3&~~*Kd5fGZX7#J-P_q$ZdRc8AL?{+AlQGaiezt%X>^F$= z>KiBJI>2{kj-H0#7yRdE@iJ1TU|rCj>7ssKiJPH`2+K73hQkL)r1~rktORCdLj!>z zM0<4hQ|H(A!@0eYbm{u?zOOdXvYyS`YH)mBl@mJ36C{N1Ev!hV-w~Lom<39zF$RnkfST zR#tQ#D8(JhQ9RV(Fm`mhcgSBNnRq#n+mqvfmN(BfeChOhX=LVN@b zMz(PC@GN5|6kl(L=D21)|HZrU;~Me~NL09&F(?d*vV21!jML2hnogToVjFrq_%1I4v1x0L_EjGn(-F0hDt3zT|3+P1o0U~G}Hw$d?{3`F;SC5!fb!e)ECj#SiQwN&hMD!j3q@HcNN}GQ81F2RfwD|3B z%3iyp5;#_^c-apS;&6YeWc6`yrKChUORP^&(y8(u+x6Fw)s=>|(1KVMoYZv1aBbX_ zy@2i-wLntw)|y(Y-JOiiD5an&V#|4nX2@xL0t?u>)n5?R7+l~fkDD5e!0?xJa-TQ= zlRa@bfuujQ+0~*21db94murf_O58fZ?Q4AFrFIj&1C$)c@(}fG& zzeW@AP}xH|U(j5%=g|PCFJ4f)z{|jM@9%~}nND-cSr*B`oNKlL*xr~wv)lved2gN% z*MtzW_gzGTp7eiG0;WQUJ5w3kv=;6T`+1lMk};B)Ikdn@q5+IC5mPGLQvQli;_w zZcRO5=Maly!l=H>bgQE0Go59Rzl@A;-qI^HUfi49Tl79K<2eVmut%~hDn#0#OunJYO9{w$Ya_&17h5c9?|AjT`mef{F zT(Y;?AW}Qy(uBnzoHm=Uh1U;trU!oRK1g&S2p{$)*b(c1LnnMx(_9mL9z%V)-eHm^ zXb;i#8}k?FXT*elu2@#|wA$WJ<|2s&s zFYTi46~^6GVa;hQK8!Ikb6jsUlSyXlsj+6F88sEki>7C=!CwWvmpm9QBGpVyUyts2 zrmgA0I1ijw z;KW)z4@c9zo1YtlUrxg1@l>59p69;%?>;(_bRDv{H)q5C;d##-*^^UK-?Wnnz75z9 zOh#3W)yBqBBoma;1X2_Hk#^(5%+twle_qmo9-m)%weu9P*>B_N8{F}nzIyP0gxBrZgtMvn{geUAVLe)q3;n<4bL4RR(8!a@%_<@q2#={3-jMia>oE>fqtv zbEA3;({#6K+Lw6bOFAJD(RQdpl?bXEzi`ms3ly@adCB&#w>Nk$zGS=cuix`B!J&9L z^t{02-_#)yV^QHh5-5AK^OPT{av_U8%5uK!1Zpm)(Xr;H>WIWl~R69wJNo0k#3ibil(BTj89m$uV zk1#Ux2iVrLjC5HU1K*l8>q0H8HV?7 zseUpV^GLI>`zI#;{q5ed-Y*l(ss%B1;gw=Ju$$MTKIqOqs<0RbwSYLq*nxAqupUii zFu2W_xb;a?LH54y;aaLGHrmw2Eq&Uu)#ZJ`ddHJ-J3nb5PEhV&;XYveGdga&ajax? z%O8oW!Fl+F`3?27c}<}gyYGL>R*htl(t&^smj8lWS1vqw_W*>pUVw=tIBXW=Ec0AZ zd9~2bfj2mxQ$D6f%~|80WK8H!Tg=l&Y;n#bHkz2CE$WQi>vHIQtGtpI8P$unJmW|A zjj0p36#HMxQVSymJ6G0j8c<&V`Zy8Y!MnVjmN8Cf?EBwaKOW?KC4GPb8Sygi># znTWM%r?nq?h)}SDy~01!Nb$5!GEv08n8`E_QQ3IR(s}UqTCd4`d|Z07il~_ z0{76V&Pdce1sB~B>Ls0JA>s_S>MuvuuF}IYG;ES-R8uVKz+I`J%pAtZraq=`Pmxg^%nR7P{sWqi9HOQ>sT!O$RPOWJHixCn%ioUvzV~2dJie) z>v7T+aBPr9PqWo|iqzH>WOw_)5@UI3;vDbage!&acLsZ;b4Dv}KIQ!5U`XZVt(y!~ z|Bdv)K>y+eKAsEq7pTB+9}LdGg9aanH+7VH*+cl=D5V=3xffNQA1HQ@F*L2YrGw8Hv&o2KVuJwbeHv-H8mc`&%0^ALich>E>Xe88*2rAEkFt z7gM{qz65Z{MMx3nL%KqC=6%gXA+Up)A780NX{3UW3mRLndC)CCt-i%w*(I1&pIA z&Qb-hfk3)tyrF+B{5DY<33>S-R+<6%`T-+b-cU#~})4L^jtupUzxTXJEQwQC4TV;W!<9-n2vV1CCk) zyuKEsPk`0Ljoo1f^>m$)571Qqt4n~R>sL@beXut6Gg%;B31A@04^ zxra4Nea#}^P&;!`Tbvz!c#Rl9h|eYeVOqzu(Tlh9 zxP)*v6{VNb=f47|AR&)BUEZ{{pesIox+Q=A{@7nvEqeXsQkK%78>@6OeXM@7(4yXa z9^}tzg`@%%8k*Pi;4teKZ&Tj$=|8X#DKELiUi|rbv}H*m4e!|Hk`lGi&O2IpFg_|s zu^ErP6XMb5xEpF}hFZqjDHjvzVI`Ifx#+lc^o=^OG-&S+_y?8YdTcP^W7U>xM^V$Y zKIc6TT?84YEW46tJuOC_`v*G{zuzZ&c@1sdj30-0P1N+*oRQz+XL zPmi~rKjyx@Jz@;^!t1bY@sdro7vyEWjh@GxWc_r5_2d%dMuwJi->Bipy_PNxBLu*Ww9 z&q2~Y=!ZyUp?YE~=oHSYD}fXEK~rSLAkb$l*5YV5p^A!Ow?M`)n2vR;j@Blh{4}Yl zD!9|gr5su`v4wTu(~j`1dH_z)pncU*0!1aO>WmafkBlBU8+ce@P4nYjtpf7m+8?|# zOn=WDeMc)vjUxhj1$C>x3|MvvwkW7@_vCO=H^)JtaS&dtQB@qsGkEvv0nN1ZRbCKn zVtXY${+j3Yo%YWaZs1^;X^pprcxhD{dk$06(b_nu{%vtryhaMMDg)FB)B>KmSw2-c zP&U$+R3m9IUL|ceWz8{VG4HQn7rb#O6Z&(^+_Sr3l5StIt zUebPCepfwx3g7h4Hv-6h=d@~C@wl}quZR*tt{#1JhQSW`i5BwA)SK1wOkT4bH z!v!6_yjuYZNCCXxTw| zH?7|I*DJE--8r6q7Lhv%1!ycFu2u48J|5DuZ>rLiVx;Bx(Yj zx;W;8&5sk#hZl(3MT5&Rb8qIx)0KCVlwoijlv+_h5|e7|DV8lN3*2 zB_4On?-WEs@>KEk47HXYOtrQ00BwOcY8<%&8aF&~G~#^Sa*>TCKeg>mQ)&%`kdWyT zmP@>GNGPMBj8r%Blfd-sbgiX`FkUD9T^W^=&HejI(le71YzH%l70wWRh|)eIH%QNo z>ylLAheSKsq{nxGz(Agbv+QQWJ|#qMKReT}2|c)@{e?|=X|*SD=`0?QODG|<-}NA6 z04wK5z!|1>nLmqC=1m#!w!+VtDmHj4DAj@EYdzht1!LUT`Z^6wq`G0gvtoq=l*r!1xP9Y>EJIeyckS6 zn;E=vPTCh$>IJaeL2JS1xxlU~V-F8g z88E!7Mvv4Q8k@#=+1ZR4mG>O?bv9tRFn~dQe^h}US~5O6C$S39>C+ilfA#NJq3kPfSyi?!cvuFL z`{C`wL!=`2QEh8X&~OBGy{DJgn*S*{IWFgF`M2rEh4{m7=C;GLleGxSD{4CK#&e1Y zS!Hmo=Vddf%Y|7y*lS4zb~QaWGc`xihOtmAMEiqVM|VkluPMyk?~n585|c5b`xzT? z8h|}&^=Dd+R_6B3sZ8sEt}SUOKuqEEUEJIQ54TKP&DM#r9TqwDyI1Oi_imqt6M;%>GG*o8g3q??)?+v}(>tT8S# zZaSueQbVL5PBB(*BBW9)ZO1nP!Rj2g+N2&|)6n8|?^XLZZ@>A z+`Uk<%dL*QSL|!5>sFn&lTjIl1_o0^D5ZYQ!JA6%T|lh0Zab$ zzJij*5BX_j_+)rU{G$OTakRS2(5?7FA-yjTqM6N#9_LEa=YmMKce0{p6d4h1Me<(R75I7Wk#79k$Fn?%+5HJy$)sO81K6>lI#^aWF0v; z;&5af?y`5*u}K`8WADT7a(_R+-%rlLA9>VyT<5x8*K=y+U9zK1vLiubL_f|2BzZzU zEM7cQ{3-8^?DS~D!7KKl1-mc@hx4ePm!vY{c~e%35EYYkcI2PZ1TOF0iCd`EUx`a5 zkwmFNW6zYYXH zF00@xx?*#yDCrRSjKs0gXN-hiP%#zLsecrb@3uuTLVCSYLSj$jTBDuAW`!V9UNwZ3}C^n+3yy5T*C z3eRJ;7M#U^3Ps`-r3sJf1Q*}k^o2bon*5^eO#8~GThz0nRfjETR@D6`&bNf<;seDq9ejV6=$*ETX%B(m7jAU;;Th@Q$%Gp?rOm=8DC1OLoqy= z`^tlXUR%jThf0!l?&yLhglU@D`{nqsUulHLH)!{B{ky>E38;B|)O~;M1$h? zbBTnkytkLv^4?6pb8Vd6z085K^0IjjJz{wbul2_)C9YVzd^7@TWC>w-Po>BDw$#EY z%{Y~J5q-s`{~jO@uJAbVzNcXf|7uiGdbd=o5+jl4nH~9NJz#d~M|k{tLswIh zpwoahK-M~%`I@Hl#|fJoZdMhep5IRz0xAuOkyFpVh6{I%3MA&-Tl${ zFD z8W}mK8OP>Y1IfoCQ{|9Sd!tx_cDzvuHn|-cDvf@|mGwCMA|0!QfRyVFme2Y1(opZ_;Y_4}AM094&<@|MDpmPTn}^kEYxP zjV%TDl9TKT#95GDuYdn(Ea2@+sTnj7W@5sXFsDP0Q+Ea1iR&JqbCy#xaEC7_14@P+ zaY7rqfn8lY-g&BdsSCY)R{LMWz*s-$UonGNT1HoF3JnX|cn_1vut?F8)t zg`tXvH%2E$?pv4-nod4VN<5i^*eP|ZHS5>O1PV4x_p&yosqn8wo^>LDdKEUpJjyZq zc-)Yv^2Cp|-!30v?hP``fkOKN2BR;f*CMWn`INK4I)D*NWlq^NfDL8R}hgbJ$G zLD;Io*Nz9BUy3akjj@k=6sJFsDA9T0F&no!SA$`nA=P5loi6}!!a%~BPN`1ZC5T3r z>!zHFnvCzN-0Vy-uFmyYYqom+N5JC*g3rFpt!;J0*9U?iHCs99KHY_#YB%}s(<#|c zlBokLCMTufMYPm`ri_KNfFcCVs#`Mf2$H^0e19UzdTKZ?WBs_u7d1NcRL~@dvg97? zLGF@&7h1Q)tU!kNPKKfniu!D(8?~g!_vV0>9kd(P_Bg@|%0*fHB+~QajVt1vmc9y_ z#66;UTh%6v8ePcvEN{^)b1-imB8+_YJmep+fBp9n^Vcbf^O#2OqtcZ#N>soGL#5Pk z_rl|onU{QuoX@Ui z-O9nXi;u8He_B^3vnR8N{4}we{LJubv_s_NVIceNpLP+y?Wy^XpTwKb}7qOW*rfJQ-ex?4b`lIHdfkJIMRsrOBx` zAP!Yk4%Qu4nZS-e*cr(@ME==N>&C<-2$nqS08;9957O4MVFip!q|DpK!|V5gX0ms6 zO0#OTx6BiYppitPi|lBZ?;*x{mTht`^-{9%$cVg%WYOc|JULmtB+sS#H}}m9a`T&g z$%n9$smV=&x}ySQMB6Z?^kNSOov?f47Bq;jS)V{;@}q>4Qvg~{pb+up~00BkdjRuMsOoft0&~Xlxaw28Urj}A`32QYTrCS@#R%^D9 zmX_e00dB#<%qzh=e{#VrNz)(lpVMk`NVT_n$dX!C^scerOQF271S_~v)2A-gRyzJc z6gx#_kTahZc7ucCf6FZA)Q1i>xl=bfnCsU(Gm?YS;Q`+U*EhOPP#Mq^%6DQ|`c`!P z@Jxpbn5bnZ{e=2A+rEtsbc(|^Y+$P?bH&oAC?hfQcpx;B!ls+nou?C}3~Gv*n$0uG$FHZz?vjTlCcc%F2w(b9WKOPv$awmI z-^#k<-`)Dzzke6su*slM7E8BG>el{7ZF@46;C)}{N}C_dYl^VYUSyl|DJn+z?-FJ4 zT_{|6B~&ELhMM>{K+@OES5+W(`@E0jAYqpvCFJ0MabErXJ3O)z5osJKBdH)AvlS+6 zRqG~mJFPnjYgMU3)BC9M6Aj`T?&nLy3_zdhAPRISPnb^f|ngSw&Md)(pirx0Q z6?RnvXGru_+p}!wg6BPDNdp=N4;UXay=8d|-F^S|{apqyUNywD^%~x$;Vda+n=ah} zDd2~ct?qy>lEB~=aZp{K^ZcBMr9{EpZMmR7>jc%d#-9`Wa76hvn`{`1DOSTT-FZf3OgT(?JhfCh$pE~B4BJy=C9n%tr zh@sgJjLh3*;NIgb8MkF*Wy{J-AOO*W*WXz>dfW|m8`Y^1C;sP}X5rK9pNtP!%N+kV zsEPdpC_9?Ju7EH9`{QUstEl!Z)WPa_o;p3fW9bJ5aqISNvj;`v?bVh@5_fu~SN(DJ zp?!Oa@8m($_@+O`-U#9AdqC+Jam>Lo=0OgL@e7LZYjMs~D;4bf;?Pd_ z=&c=#vEkB_nUct<)Ot!Yo~XhYDbX!tl1LhUW;}B+-f>Jg?9$0wWDsIXtgayMjhNJN z-a^P0XfFBtgB3Eh*x50#Sv^s;jbE8k#s$wQ?7fZe6Gu%Yt#~rqDi4l_?T&rl|7>Yn zi9w}9sML#A{HgpQgNipoX!MP;@8+Px>fbufg*Q2bpY^l#b{$A+|hfK3-g+WN*7ii5dTfRvhnTdisV_KT}4l81l@S z|I-o-&nU&^ND{%(J_dEV=vI2qCF%Ko@;V@_%I;o1Uv`dGwEm`e&U~igJJt(arz`~s z(mVA;a4=GVXND^P*tilb@$@C+%{NQt(l@hVdrl(qC!ebLPgDeR_ppq~_mZT8;gbVh^U>vqfw7}KB^Y@z_c14b zDM!136W_pW_)}Zk6hZR*t}32LL|_p^7La)buGZe)rt@W>_SIH>E}8N4edo+VaL?_Q z^BxC@PYwZVPejsCI&i}4u7Nz^Poas2e7XT7fx2vd0T;rX;o0@XJ2b;CMkfo z)dSJ_Mao0c+zF$>%IePscQIYqP>ln9~n+VTZjAL5r|`n{E*QGQMh3cVymbUCC(HwWBM) zdvxgqva~owm-f61(#2eHbmV4HE3V;3yy}L|i>goU)$sf=2;`Ss_25*uqhv-%2_GzE z96SLwkag=>N4f27_n?@n^CeL7A{Y@;4k~R}#a(%k3`bQsBlzS(RJ|e-b~A%dXJ^Y7eFE2U0&OC6Uaq1=(gve8LiGn4vzPDie|yY2dR@Nh&C;_cH!Bt*eV zbdEts4W&-5uI^uxH3pLsNSqJJi9i&JDsC<@4YRzoaEOGfR=4CVt7-mjwmbKtjjnE2!4G%cq+h?DRINRs*4EYiC@D#IC|`gd;0YfN zm>PtRDI$kk(Luz)x;^EzaXRWSdc#-q2CyUU+b{)&UdPf;d;f-6l|AbZT0c2-s9gil z%I1D=xh8WC!nv%+WYC~EXt^Hk(5#rGfr~AF+*~<+OLjD^3r<+DExrE)r8G@?i|!%Y zEruEyxiDQvTmvdp8&jIz1O`TRR8ctOXzPTJrWW#&zgqt-eXhvr1l>KRG11gT(k~F|#SDF$d3b^9$s^i^ z%W>>~t_{&xbDXGI^F2Px6Z+y@$(w(fu1S4;w&6@#iM-}p$&*akNvSlbJHYeJ&9s*4 zea_i@)z@@SST9TI4Im_P)K0T#z{lw@c{)yJfi?XP^!_~npw4h{DsABdNQZ0X{K%&ViuePuENAxb^Ai<`O5 zC2P=+Lo&brxeN$tm98z=B}^gJ?U-yI=Emc=Nw0aD^hH_OTvw2#RM+}KICeo0V>T?{s-s%FUF7cEtK`1>??dAJ=bQ4c{Csj?BVIus z_9t!EPr6~p0E|32Jm+Lm?SF__XlnQaZT0WGd~#Rv7VLPeb;{t~LQ>kUo8NY#$+8<_ zDQ>LMV`X7I#b`Ol?}F({cBZ<)$k*iUtZS53vTpUJ4>)tud~p&0IdI+r0v^gqPD?6R&7D$d5Csu>x1?q3?z2W) zOv2XIhE*p{ej7;n><+-WvBrx&D~GUS?2lukKFYbio|bQeeVU%#!onZ=nG5q)_Hm5^geG8K=C34Llj_cZ<>8=UHd6qJ(a%C6*=)B*;-B|le8=^5mYIkXm%>_ZHj31&MvBxp`9q$%a3EVX$gAA6yVH76{o|v!GiPF1 z!sodVAFI^DsLt?M)0SEaH{I3L2Tl?m$265BW@|<@ePuoV_F9R~2L)#6vO4eI6+uf< zfeS8HiI)%4Kd1Yjh)kHYZS@(#y6x08M%AqQ%TYBgpoCA`fC{ApJ>;S~Rh{)1f^aq{ z6@A4z+hitgNZlILm-Y%K&Q;c*IXg8YoJkbl$zF@k z&a;{&;fqxdmYJi{<#y&Kk36BhX6Vo6Aw7Trv!|43QsPM?@zc%ex8(I^Dml!2BXRp9 z(LrnCu>DqDIx%5pz1{~=w-tU3xIpg~p6So_O5n_djRtxhDwYEo<+u~xr`~ecyZF#yqk1I)^jr(`bL{GuB&{olMv8T+c5=Yhxj=PJz49S+YOwG zaF+?%Q5rRBJAPzrk6m`VkQsj&sSvcL2Fa~Y9Fk?_cXwuGZ>cBEt8N8l*8M27IB?s9j`|!3Pn_8Akrhh`N@=xL9#@OgO1-1_u~(wpOz@f?dc_Q3 z9w7q?#0?x_6uk#Ltp4nc7!B{d_b@J%gS1}+)_YVzXH_JRtKpue7N+Lsc)&632(lR zgWh23r^5=s&s0j@u9So9``PE|R7Y4OymKvuI@3|ltSm7mn#|o%C^@9-11pwD$&b7S z^{ova3e3rK!%bgrT5E|lvDnbYaB)D&p|tn@Pl^VvxL_42ae?bCSWMtZ)OZ>YO*i&> zyIjPg`dP;TF2bSo-^Rui*ZaL}m%R~lYkMW}@mHH2943wz%r9rizrsI5dIkKMpHWH` zXNe4?B-bt1?*_dXme5H`W@^_=i!U(&h0%zzTzDB%dm?o-`|JHg6R0NO5Kj)=Ogr9+ zJ~o7j6f%pOY8aGH9IxvVfWP%Jee}_I-6rgzoZR}})Hw-f7s_KNAHP4j)gnW~3QxD1 zhy_jcx-gHuy%Gk-VrbpFf;@(IbHNStPV8WX8A>gdWpJCCh{14meswVl&wwD4Tb-9` z%hkE|^5(o|mFW@)2ygeQPx>Ho#&LoB2hoz@jMvkoOHKN_=?1Ahvq* zr@)7)mMR3?(z5CV@qxAFPgm2In%fSP?7nPPvBP!|4 zALJ?uoe6RSMlO`B1dRsllWSFXwZ%p8RV=ycm`J_2T#&2j9m}JZsY#RKZFD0FiG|Dm zQeK5g8`7e6x^)ei9YWO?naOnpmr%mt)?JQrOkB7K@#30*?skze(YuDL99StSeTn-oiKS< zspnERsLkCg=_XJ5)_#BK6O?%~ny}Togq4HZtxn9LKI`$lyc06nwCF7)cZoM!5nfC< z+9+ty8S(xQ9If!W+e^%c^!o#K#`x~c@i{BXh=~OuuzN6QMQZ!JylJ{duTqlz`FELO z?cPG!Q&0J1Q1I6$%rM`rU&&Xzd7ZgmZxF!z2;w;)OW(&wno<$61;m)i#uXnHFt4TZzViQ_9rj!;eR1*Fa|4&hhnkh2-SAExWqoaw|Qi$~?ZX zpbZLpK~iMv7rxGCf+DC4l$oWanMt`f+`M=&DWVeZ#KQ=wb2MEJmM{}!7M^3ard`DL zc^9D(1KxLp#6;UAO0L=fy@YkbTvxYnQFZ@w&-(qwa5ScdLZlDam7VnQ@pBtuzo?zy ztygy!6nor=KKLM3fibpkPg!?dCM8=w;1@Ta&hKoc>VIfnB>#}GMeLp&D5F!(U)~NW zdpZzFa)zABEu{l}1RH*PNP2o9|17MRG^^^~0%v3XikrKW%~RR~pIu)u+WU__Tnqg8 zOZCnFt*bMPr$hYz26-R{rP+E_boayD@$BT@(qXn(T7QIhlC8W$bMt}U;?_||E$men0yJY@=m__E_U*pOd#Y4ZGMPw&<$8mWG0+U$=nf#Q_wTwoW?L%}VNB_8uQ=Lfre_!uz*ry%2fM0^WW9NaT2-B-#OyYIn~^kJ%iz z-{z`NVJQ^y>29e-ET2py#_~e!FJ;sB*wqzG^>2^|o5Y(BRTT*ix)3a1RLV)Ucrv#q z4hP&@kjeh>%ev&HpO3xKVAt#=Q=)-yxxis{+mup*8E^_jV73(pi!3A~n{}gW)_Rxl z6?g`WN-es`)!of;sXQp@dr8Gg(<&Z_193PU;+2mzPOy(-OH_&e zZ;gbzP%O9dTPi?i0g&x4@XFBqzmNB4e(Y(AoFt3L7hsZuc43Fz&3?;;x*$MJ7He7U zcK>!YAVG=VE|!CFWe##ItlCXTCwm7Q&AJXj;ZItJ>CkaiJzvIQ>nJSg`eSC9-3&Re zxz#1&Qkz3Y4Vkj5aKF07>(wh^i0;SiY^bd7>i3g*aor3#$qZDr9BO~}WEOOnkWbR_ zmW$Dc#_gH~!?`QRLlM5@Ay#^AeXP57N4HMkUIcyM)&ie(dh4depmG5cQHnzl+~f!+ z{fkG6*U&^PjciPcV{RPERKT{$FjeyU!zlxLvbpzpC&I{HIRj1su64SECDwikl? zJqFXe;05RFzRF3(Q!0^|n~z-rV#%SU3!IK=I!WiNN6mRn|9HSFKXn4_A8v80RPlyO z{0lcvn|hK*<|=EozwA!2We+=T`7NiOzQ*SdS#ChlNZvGqqOK}4flaMcD%13P?Y*ve z$y@HMwvWHM)R&ft-eTLm=wDskwmuY4DZv`qh?fM7C3POZXIG<~RH`iJ|1M3yy7hAD zo@cT7_?JFa4hU_35_;{w74`pZQfC3&@ILqvO>o`rZmo=5;6{;)N#3+eF<}eRfF9I+ zduD;0BFfJ>B!95%=F0$95J{YyGh5#+b+zk_{{o>-a)qMfM?BiTz*D5gtGRJ%Z2z73 zf}MkJsa;j|lJ7|qnO`NBy4f>+y?_1P;U5n-{IiFZa@)YeQ2?TubE~`ciUPJ4s3-jQ z@}ZL=@&WAl$7Hfm;XMzcS!kS-+iAp>wi)#PS1fMP|t~2jPumg7aKfLN~CG=)OxX9`_eYo#p6?g6+ z`QC;Fs6(0G_JRYIO7dnUM-O?IE-cWWdT@Dp*?*x6E<)INJMe`(RsY1Hc}|6r$>X(% zCWb4jH3~bA>Oe}&ApL06=QLQZ98rKUL%<^t*_b2@Qai4#SBqc)0(*s=({xzPq>5Ks zdpol0x#L#?;Z6J2t844$_;z9V2de_jPv(qBt_q$=pTz(lVfF;;)O>CPhrlIsa|3@9 zAB)P;rIFPr!vqO1LXF{Y4vOimylF}BEGNcyHIRdiOo^q45xk5hynfR&QmJ2BR$8+9 zp;1DmM61`Wh<%M^;_v`voU@7LOW0ZIQ{y-1lhFS*ERJ*k;aLCNrOCSc7C>15$I4OT z`Z;-G>F4e4elST{IeC@J>r`8bn_lb5bdhr3tA{p4#{5Zi?f8-hAIzAMnZ3cWc=j45rs{3p0=StkicaY!fmF(`_J;K=mAKzeo3|w>W4Rv`*w1zbd*XhO-kA z@lTZ;nV100Gp(WAzE-d6o1j^|dL4P~aI&nLU^BP)MsD`NZnhJ+5nEN+D}yMZRc16! z)_4p4xSyoP${Uu*eWS^f9Vu-e$sD1R_LJkf{iF3>`_!d7Jw=_`O8!z%tF33Bt^eT5 zs!SJ|P-Z#hQvk z1*jR$F#N5k#FZ2NiMKb)K`gap<73%N(G1yC`I6L5lIb^GwaYhgz$Xa;^_RX;1y^a| zwKxu+A61c<7|q_X2$9<5Wsj+axyWvXN_SshlT>C!e1f4~YK~bsk2(!a5BNWn4raSt z0rJ~;C0Z1c5C<{+eaopSAn2Y~uwdVX#i~SykInMRL{B6VyYS5LQhg^pEG#-;uKT2; zGkLPCvXYcdKVbk*Poedfl+0@hj;hLkVB{h<@lATT- zl*3iR>%l6P!{JewOUD$sCxDmkKP8G4`WqR; z!X`DLt$MO1?x)o8QFpLhA33_n;Zj&MyUbAC>@g)QRT#5G1kC1P^zGLh^9@HHLS9{bZfh}VYs!V zsPk4Q&PK$I{CVf ztg7+b&4Vtfy3Ct9z!Dl!B(YL?d?erQ?B?mxzP%)c>h21WV~+1fKJc7A@HWY)&hESz zVMkh9h~1qGoTP`=xR<ou4getFc_5 zZ^mF^bHnTZWqWYS%AU3yxJmo&{pN(P&9s(mW@}mrdF? zwX3P6XwP58#b538SQ%cZY@NktvFz2IbVCr$mnVgOd&7AO$6Ge-_|jz=Rozv#Yax$| zuPNS7b=BzA2i|M+3Tx(q>qnIXWo!lrBI%JVXUJZOMD(qPvi!$sfT@+^gXl$dhFJUj z7~9@LkgSWwL`w0l64tU7nhcZBBSQ;Z2u%S_?Hnh5Z3EHX+{el1IXhS2)i0pA-hvk}rIIZjKq9Hj3F#5#%I0)NT@BIO)6Nm4WrI?}PmvF}AdT zFSh%$|*+5p>ic7U_)KZs=Ix2Snt*5Z;l&LyozR@Q0dha=m_q>*9|y=FjdtJ9#O%I zqAJRD3Be5ut+DG~w)pQ7!^7e*nD5Sf`1eAsrYF$CAXGoFWYQog^ZnHqAe6cnu%Ky$ zlOHA;-GU3KtHu3Zh<}n1xRKHrkT1pZeYedez0PyA%ItlnC~Ecf>cK6b9G5!T(tQBu zTT0#tvKoZ`M)VDj4c%v@U%9!giTlWd!?4zEC0gzD7Kl{I`P+-u^@sir5M};gkvzvM zE8EnEC@`|~b!qNeeM1JhD>_U-X-Ip>U0kyl*VAYUn2FAn2AP08dQ(pKc>}7ox{SQc28e& z6>=#_R-|?@0E9&EblBRslAr62dW}T!s+a=P^hHk2r#puryIw@YFLr6$zX}T_=7mcr zy%UqVeK|pyUpMQQr1eJ(My!Le+iDbmQZfX&_%Or52Ec z6%0*W9>+MOpo+A!gLIknMJ4gRJ_s$TTk=TP7!o5*c!b|dPrO4ZL(Te#i)F26{r3!) z4{ySn`I5HVo=e08s|_xaQY;}6Ts6)Pf~##>P6akAuu(ly`bWT|GTM7~??0-<+hkNoa zGTc?742mkMm<$?qpl1iD*2q$Odk2t^pjS}&$&;_^LCW3A^2!JS*;qd3p6aG^osiC> zea(-PrmL$&YWI3T-)Za@xF}??Hz<&S|`iS9**ISHBBTIM@ z7Ez{MROF)FM+4_me>?G|SZaQWR4Fi6%nH$lfz0qHig9Ycj2~zV5fjl)B-7Q^&NM9h z&F|YsLTu)vQN}&3>!(S)>PZ6D1qhIE$Ekdc=dAT0nEaW|5u+eSHEFJmM|5@D4k2{q zI&l69&nAyN;=?36APEgGWbd1I(H+`s?kg^{rcGzE1K^5SFfuM%QR79v!wCtMiMGWD zqaVOBMu&&W>ToYyJe@(9V;Zk;m#!hApvYPKD&ge!n~d7sTI!4=#bq<6P#w zDgc9?1?>X>3_Ww!nkNQQ`XB<*;lJ6W+EdnhaP5Lk#Md#S<0%gns=pEZ2fie`7;DCN z-c!b2$RDVRMc)&Ry`CExnculEWbKo=^6YP-=@d2W01rF)F$zwQ{DJ*mXNBGQ^(Wd* z6XgQ6YnpXA9Y`_M$`7^jXWvWf3Nm=bB2f!!BI=Ysk_{kkJhFu-JhzZrO(ITUFW z6=_gBK3r7{>Q_bSN(K8uzRq9gx#s64Y4uP#=)7Va14vov2cx!E7MF;fsdKrd#zq53 z4JK+96E;f2HWS&8e#`DuRCwVoA+ClDsXvKPfxK>I;g=YSh%SVQM+D1)G##S>E~Fi2 zyO=ujK!L_!S?IfxQo&r#66vW4V#~Un9sbjjyQ`TXe`c=f0BEndwM5eTz_1X_Crm7t z`Swh(Uz@x2D){G@jy)gpU1`I5-ItudPURJeBaHy|{oeq1<>61E_^DqmA~j$0HfMUE zbIAp{5+d8@pCDWl{W!Hf!09T=N~@x%@Ddqd8?>Xv{I@6?Knkj%v^T_T)&2{#`5#dA zfAjbm4%;{DJ=E;3QSXXaM%PElHSv_AJXn9f0NXU(xrj{%^c`D{? zNlWEs&Lw87y1c!Do_o-82|(b4lYM-5csO?}g62R>U~$0kecePqYa53?_v6I6KRXd3 zuYDA*B139g8d>Z(^_c$70#&;HCfJMWYbcPY;8BUUG)ay5q?5NgUb)hgD1e^M1ZZhQ zgn0WvZk1X7h*{j7s;Z5JJoaZst6NEmb(ZiYXV>w{qBvWv6--OQh^4r zpy?FfwUB;zKSj$Mp10ymZE|_W?w;;d(>Uj9qDQ5dU(nR@meQy<6&Tr0ACG9xzP*cZ z;iQUFg47sqEuy)#b4)R?n{2x1gY3*7wuR1S>NJWp!Ae?;i~vSe9>He2Y=_D_75C4` zw~|7@jF+~7oSiA$nLb&Av%P!6gKv{-iOI`XQYrxG7ZoSn+b=6JOWt-R*rMvMZsy(w zt#J)IUdv6#c$aE(G}yzxi7fH@ps%vk_d<=WDGS8f z29ivnx2Q%AG|l#B74?@47?$5%+&v7X^m@s?++M`CIz9^if{+C%oC-Hh`-}W=3AuVW zGr!eY1i*oYheN38Z%e~6OpVIr1PTWQ92}UFw#~G%KB>I;Wsq>=(Obqlr@q|(^1szU zNC_99X-=7%vkWnZvXDb*pOED0t(p4u`y$cF%nQxzunW!IT~AVHbkb35mzzhDgwHG9 zzY!V2!>X+Ue(xy03ay`Tj(M{@d($)iRrme-LjJtjB?6 zyRCZ?n(UqoRDD)VIDAJ&B41-7P!i!-*J$|UFmTcdb$US41ffB)oI`14E+U(!6D*rx zC6kIc2CYzTb!NH`Z&`$rFC`~4r=olN69GoJVUd*Qv$I<+s-}24|BIeIbL9-zm9rst zc^-c(Vgb=yz-l=t@%GCk`NsBPSrNu;sY-|W9f&Ap-!jtHPWk{Bc)wVsKM;vu5=;_c zhmLyqBexLGv=LJ>RUew8&1N6r> zXmw|t+4b_lhar~hf!Py7xM_!|^xLK#_C#n2sNv5mJN2{EyosTL58hLp1UQb*>y7^S z=}P*b<5;W?>h|qkqsv$eJ@29eAlB+i_131Z|AL+K%X6QoANJ4K_sU2z6Dpr+!CRY0 zm0Y4#|MDTmP%n|+Qkn0z();zRobjaDpZKhzelz zR5WUU#Gv^{iAE_QD4=Ry+`n#rbW+eH%}6U*WE$F>JobH2Ud!7(=KoTc1(~+pm24$v z@Nv#fQlR(utbP7UD~|EU(eGdO(BR^s)^c`5-L`i_u@uW?h zXR2|v<)Vqe3Q~2DEjf|1{b-Pk z-Zmu-43}dO2xCoc+-A=q`LK`u=-=VSO4o!@d=W2IGP4V8ui_*Fb_BhHTt(ATjS_L7 zxxz}$bALHSOk{cSLH(Hza=za_Nz08HB<7C0Ik@B9YayPrjM(iI(fO^+SJEIj@&wmx|t*peD0ftI*_7ozXvg_EbKs#-pgK7M>Y@ zz(e=WzPit~Lb4zi>a@3+mzfrmx@EM3Hps^G)1iXz-Yd}8P&Z{#oLm?+{`ieR!8QXQBWd{B(8Kh4d0PUfpZ>y|r+42~-I+ z)?(TFt5Jl7j_(~tc2n=@VR$oaNKKAlxweaiVU&9Y&6|YtPHLyRFBk>Ke(!*Y%Fc&3 zhmnKkH#T}v{=4HNRu3x!3sbeq>%VBX{s28hD=FrOSJi1tzpOfohH5>15qwj+>C^L% zj931W_E0+A|K6Xu@Ye-~m^1%-I`*$*uMtO*kFt=IqPiIEIq~M*RaTPe(5htZac6Pb zN7aKE3&G;Xo(9aYpf2R4E`YKoK5r#>^-Q5i=TcY90vp=%K z+Iofx3OwOf=I+F{^^WDW_gQ6Qt^-d5LLRdq+ats?#~*(BXd7RG8*lO>49uli)f{?u z!vYr%+6~B{UT<6uS{;t>wwSOu%w~u6+_AR&+V=CcWa5USSQ<-o^CG<1{Q_|7;Iu39y7hW>*Q;`?UvV)CC3x5=Ol@8^ohi}XshJz+j4b#5-d|x z^AWa`=QqWaX*ODizP5Cr4T{rYkT^!=gRtq%)q9)zdWK(y5#9(PIusgkMIi|}wI)p* z^zZo3r;V$G@!n}itSmb(3>O#_ce%Uz7Qx3|4vB>wu9D@24H!M(xe%i$n9*!wpS@`H-v}essBPG_vNVv_kFNsjkG6NRMymZ;Kun2dW&l)50oc|({wudZ1Pt^ zY5~^LfSTs!-1ez1s>)xfGRrv6sglfWa$6p`oXwZ<-K?0>MLxzxD;$o60ms?+$!}lR zYBLxQV)8pQhqwHd<5*hZKI*+#d#9(c!d`i5wMQs_DFIS`@#@>!j@4e$F6`i!YZckW z>Lj(j;L^0mpL%))#_8V~CsVMi;#I*h%lZYWQ6JIV)j>}yP~$#%Sl=pi&tN&SB0e;S z><>J%6>K6_gm0EY@JS1&#iCDtgZ>MnNSc;+aJVc?wxYVS#0*P&?-UGGI|H_Ejw@>6 zJd9@{Cx&yJcbw*JV_9f8zos=cHin4Q9qA8B@Wz)6yIRki#kW2K6+c|en?GY@Kzj;a z)JltlOYyCHJ=?gDFEx3bv>(vzL)iGS;OS4T>V|jG9$h@Jlmc3>YrPz3%UFlfm=2YY zccvubgpyH`Pj%A*sTUU!nda>^JQ#2f61TJ{4mh3(FD9%bM(yXOmZFQ2 zfq!-;H)7KhR1xC875SFRN!k8b&!#3yNd+Cv!KBhB;u5*@@5=cfv^95IrbO{`Mkq3s zr=cY7n=kwCH1aV~hc*1{gh(N+UR;SkevI3s4Kxjqa%Fv^Ryub0VSm`Zlr z#;nSuq_9YLWS&jn=)HniP&pSlplxF~bAaaT&iQ28u{*A?aFq2rtL;)6T>GLLV4SIV zfH{kbM)6AHCjh^(yyMV7ek<@zT4Li=Qnq{udC$(Q-oh<>>IaFgGUc3K?s5g&?`u*O= zwX2k=h*Gu|Yebgp`@YMN7|NQxEF;T!R-$Czl5E*C3^C2fGQ4CT#*$@XFv@O>$uh(+ ze$QU-*XR2i=E+|kkGb9Vxz9P*b*>B4*w`KJ(W2P-sluTbV)3`N7u-wV77Q2nVm(kq zF%y!lpO;n~D-uw?=M|Ir;5%Dn)kM?6N906^Petf@jAQtprl7dKeo66?8;?G7r@OT` zWsSs7V&!sfRmj)z;dD%qEqZs=7{Z4E8=#-a@laVS4W9*uL*D&JFcg7I^p5L;Kgz`*z@XyNm3Tpj|w?b}%rqzbSmx4EU|p zKzOjIB*lgo&#)A{9>RO<2%@~VKt`q>E47J}*#w25h1|fqm|;p}-yPtoc>xUfytbAY zgU8c7=iJo}0-E<0uT@pr%-1Fmw&pFrR&!?{1r-|_pTL6(DT=UKv_lo4^j@lkt7Sql z2dGB;`nkH3(9*^?;#7UPUzh;qrp^-@^J;#D{jChS9v;xLZh5b6ZpTQA)V=Y|v#yAe zy>hE9!u-0F{xL(a(+lR(fI9em!;%C6lc0Zdpd`rj!9}8Pdg}lPX$SfX zJYRb@D(%WuzR*9rT7D5!FJE$#b9Jq|@`w9Aa_fzO3)2HjLkmvH9*hT`Sft`@PtsR zXHap4XzkfVlnoDzh-?_Ijo6o04yBflyO|Tgo;CRCA935~XzU`dFKon3IRwT#_WOEiw3Ze{GgU&RmmpR7uyKy!{;XgZ(N>#bWNeXkOGe;Elws zS?Ndm16F0a#o|Xb55vekvEQF7_d`eYZ@!UQK891jTro<-l6ZifhGvg!SG=g8Ap*?dQ@P-jM z4pNB2A#^~ZaDK0}j_tE22MONF)j!nIgy2B_=LzrPG`2}=Uf~VnOr1=Aw{+2d6Cr1T zfk1=Fn^~|@k1zojR>2ev+qCt@wDfd|8v?f_q|r;-Y~4sDn*^?U4nk?bZXbLo^dP4{ zyXj9aJj7WpSLv?e-~4}fCD!c9RS6D(QwS$+HkhP<+qr?Pc%y1Rs)U~vG~XvI1n7-| z5BSKBmVxl!M`AtLGa^<#z{T@VN)`ELpKzak8b zHUGvNb=Kzxtl43=`NGzBE=W4420eN9(Fcx~_LSpc=T#XV%|UOR7STST2V!U6w{sei zy%$fI=HYJh(#G;k0m8x^SMlqCL1IpFxk$Vv@2L=rv5MNJ^<8JJp?XBPlj5Z@Ut-e+ zsd-^wCpEjvjk4mh=^2Bvs=%MODIaK$jujL__nccuIbz<$R+B1{MVbw5ZTMb43 zP|N=7L>ZF>w}zmIr*q4@DcVH3X}>9m`Qi;>Btzl1nz>xM;3oOBu9@uWv>cB&hS6N0 zH+qZ^L#HOE{q`0PGQ+n0dagIX62a+(!{;?Y=v-Z&wTQo1_#}T+ky-cc>mq0Hf?Q}z zaYI`NAVz?A)}ZT77R+Zc)MTjZEhuacUU={DH5^VHHT;tPh05E1)||;Z@y&}{RMHf) zL*Cf!gq(n(lx=NJMMavom}qfA6~QI@^p52Wnvjv{tn0ahi^CSdglc0 zY>E?&e8`s|XyM}}h38pYycN@zJBEbvgpDdCBxMNvn4ESOC*>?2ClBHYE_u6*o?9>05-@QP^ z_Mza2U+!uVL|m$!e>X6;Bjy;g@nX0(VS5`FzGELk(a#eKNsf^k$D%xy<=du-O$9UPr2*V`mrwn)+$>JNcQtsjD=>TNIzvICm!tAQ%$m@Zi+3D0sQEcDTCA zp^j>hYx^j=w(mZa9AZggIe+rdA(r!+g4z~0&m1`qImdd)cK8yTmLCB0)9D!1V_L+M z$-FwrrymVu6t{Z|N(Pt^PwH5uMWx+UQMp4fLdf0?{qv9LTHjp!3|vTTTO4Vbd~Vle z(ax586Xv%FoPd$MqFpfcDVjIi_@jE0LZx(J(r~fl|n$A7(w}TN8fzL>c z=DmTjcG1b^gMW&UX|D4d{c5tJV)Z$qHz(mJughGelCp$8rvvkJu8zX8{wCmA-9k=qgl9;o z?>T>R1jA=!z^j%hM;~{QS=)>?+a&Q+H9h|kJON>lBq$h@!Gv+4G78`Xoo)6EBY zOjp>XaBT1TuVTS7<8Fml6>EV6-$-?Lm;WOZD5xqv{c`{A{oe4+?$=Jem?PIykyada z1()rvTv4bGAa>_8ob|n$Nw^4hd&GOvp{~lANMtp)bn2MZq#Vdu_8~oHOg)DUJEH0J$#VTVm?#DUCZ$V?w~I6!I5a_Nw;JyF zPUqCIwrA3Em4*sPaL~)9=DkQw@6^=9Gv)JAWriW|UZr_k%j@dgY@2AG!`Qel>`K(h zU$yN`j4zK-b_27nB+HcBMMam6QwY{XcBglz1nw2&aJAviiSSGVouztgarey*4^X4dK2u-|i$yyO-w# zEgr$jlhvMV|Ac{_8d-ig*N7({`9jOaGOeR(kjh~}NO3SxnSV#*iujGAF;*rMeJBrz zR5lWily<*kPFCE4?$|>=zya-`SXfGwVqwP0A-nPqj?WT%h5$@AW%0ZT>1b^jR&(lVL5zyA<6!wiG3P z)b`z_!?tfezz7hl!m`Pd!BGH3a6^5t0`LFljTKhVV*H)dr8Z`FjCtHdeNc}Hj^19L zVY>dUygVJfV0K6yBnVt*0V~ub{Tyqt;_J~xT?IAbL13%xh*Z*XsI4f{QdS}=sn_ko z3^FB(Kl*x4fz0Ly>^UcnBV|+!%nLpFeuXd@wx68u5r;NR&p3+&Vn)U?-5M@vLcj?` zC0pKfoqP%pR}ZG1&&9P^+)&^~>e72|>bNQKOHERY)LQ{osZ`AY3{Kz}LLd3`5eYtO zA~t)Cq1U-pa%V_X{!$`nGU9DN&lWir{^(8Sm=k$lk3HV~T4DE(krB+WP>6UNM_P!+ zb5>KwrY9IAIAH|zD>okev$kfXb~GgJ?7TB$s7$H$tn#zp`tMvv8{!`=1`(`T4Xm}n z67Xdj1ni?~yRf_gTRtFs3-)~e|8fgV3j4d&{;Y6q>_1gt&%c!m%T{Q1*y$jVAsZ9^ zHa&XRV)yID!sn-_pTDoWkMjP|m%~W3w|4~W931Y}g>{nuWC4?p<*cpmY;^YmdtuEp zL~=x{+5wY~u>m%B9AH^c@eJa{uoHa}{U|vxk^U(EUwH>DY8cY0cSDPtO&D_}bIxta zJLqT2jQp4Vhl)8o-@zj@9IrL-<-R+L5XG0FWds zgyGkQ=jJjiX@M~6;^Ge*-saUMbbmN=uZ~bMD)dsgs|a#NL_cQm)A!ZOsWmA&`ZeMo z;yTCc2fZ&7<;D6P8;4i1mV)j421tuyaWTy_OX)XG@9Z4OtcV4_161>T6*B`Ex*mIT zjun(q0V6mI1d?PmWcW_!aJ4XCHPXeubY>SqzmFnf8y>vldTVjxVwAX~6;z~0TIx8A zXz;R$=0l0*{$f&?8mD{BVBM>Et-NV{lsMTOY&LYpGs?IMWrxTs8m7E<7?Ra|vsL1p zFUMwPm=LTd#p? zV1xaRz+MO79RmMAR&AWw^jsL7yr6clmS=a182xV2zxdmfx0!{tZedxa*Q@-sd9dZP zoI_@U@*)8Nm6zvq(J_&c*G|+XBDS|9I%UfD7loRCzXnGFm*H&^WyFlBXEP=uM}ujT z^zp1joU+>XJ`Ln?A7p`|F?6X9%>zZ z(d%MoaNI%|h&8-lsLUX)Tg`*km(zUgf5R?$YK!9CZ(K z@T-b3&f_R6QOJ?v@|pTT#O*`LkSwOK@Cdz9?vlxDjPmhVT-~F^O|6;Vv*rp&Z!88d zhJ5~^lw>);Zt#wCxxSj@J50h%`W9AnjLO?*s|ESfwC`;GZI2!1KLmmp{AMj!FQ3;M z_yCdEj+yT+GLN|b`BX6*GC#ZJW1B06Pww_Ep(wT9hP)J)oVDdR);d6Wt^MXp4)QX| zhv=4CCeN!DNZYEOa}$#69LI8L@dHPt`Zp0mH(uH2y-Z7~FY^gjlInN0)n&!koYw@$ zI&E_!3I48+!w>~DC6OCY{xb&F32gc1w9$2lwlc7bU-oyc|B=cW)wBevE@xyAqw6t~ z!^`j|2(G?Dy~LC70#VL5C#Eo5gV)An0{X3%sqsC3wSf=x?3=@B4YuZ?!$5-#k$a zeegRN095mgHwfz;lc`EfCV5Bc?6x~TA)l|PiL1VYFcJ?+%`#5?M>!U7E1aN@8IgDCv_Ja?v)d+m&Rj&U z4~Ikqx{riBwBlHYU>Y7+&%#NlCfcTtQ1O(DYC5NeVdUV~^Mb?-8)SiWQ46+`FdtSw z>_yT|U)asR5Nr9?1!^vjT99;1()k;0lE62Z+<0)$3V7C!_Je)yA#?z-Jl#I2UIQS* z*CA|WHXJu%1SMao56OW-1f9aKgnI%+j!Gq_Jk-~?{CN3+!)ysUDyzIWvi;jqc?R4B z<)M@zZ-h`|l>++!9mdva_4%n_%Wrgf(lmMDdbEVWKB(2$b{o_rB7M;WKe{h>D9ljN zAa`#4#}Wype6-BWiPak6h6wNhRQu>K%E(yR-?0xa8uL4I?*~{S3{{WI>Hf7|sbtOM zE_kG`&N|Jc>P<06lX0HEGWf!Ojg@EAK+=Y);frUEqnCcoXzP2deig#im zY`d>yz!RqrMjlpH0Z1gIP_u;9n`i_UoDL{ix^+oLz3HUvhsvOch~>>WqjI`sZ$aAo zzIn|!Hk`nj6c_b(?oMp=*lLvg-{Gum)t%|dZQOQWgX#P|@}GI<@_gwwd{PRe00I4IgNFMOVA{J-51wM9VzyqYWjT(WrcC zI|N4dMy&5F$i;vRd!(*&9LIwhmg2t|#oZQ`1 z8jg~Y*F@( zs6+T}6eTO(v2i1T?naFj%3ItWeXP8m%6BlFny4D&&%oA*diz>SI5bL&8c8;X&;J^` zQyBi+5d>_hyP>XDZcbq{Guu;7DbxSJYtx-T;FL{j=$Lgwyb?PvH^FUHh56R!;wz^j zZUV439t`x``5hcXdx{s0e#Kvn6J=ppe>^#iM}Gf;Dd^htDXcIY2^8$V6NF38D9$K# z2SH1b`8t6Ccuo@!$bPjL3S4hApD!NXQvEZ>cw2D&*o=44;)#&V3;)|d&pG&|t_x^W zD$%ei6Z|(B^JsnyuBklT^&@SVZViy+cAI3cnykPvkUKE7#|@*m**aYFyQI(C#?^4Y zc?IFLb;CU5IIdS$~jy*7d{g<`Cd0pXIC zFPF!Bf}L_nBd8HiXY}N_Z|!;kN3@F^a<)1tbQha`Uh1eIxCkuIpFanm=lEI9gJa-_ z{yvUD&L{WmapeJk#lG3W#=(8&I!(5`-aoy_IY0#}{?_&HDFAw1eu} zX66}6Rx#F8HR3?aU9t-0E7y_w4eRh0R=)Tc&V%mmvT5F}=RQ@H8?gi&=p792(D7~! zYwfA*6%tj@kzRt^%uv7DNa;h|*oU+h|DdJC(P|5*2vB3+T&A+Wcn4ULZ}xgD*8!c+ zP-7$?Y_l`Xs;Ty>KpE|LbPE_)xroFPG-9JWU&yR!0E=p<^;4(|@+QG~acfwaNn%_n zb0lx?A9zCwR~k5zLn?Y8)%Wpkm#yhc76R zw^kW6klL~u2FAR5CM2<%xO!++aEkhy-89xifvpc0rOoni>#cnInOrvVsv*F7+kqJ* zd*3&UH(H}%zzkiF&B*>S$qg70^?>{9abzCoIE#rTxDJpPQH2qGIK0lM?ZjsRD z^)LEY_)m#iia~D~2$+1o2}dh9bk5jPGk4}m8RXr{emL2lSbu3H%T%gzGsN5~eJs#3 zDqYr0H|%IseAPBYb@Z`niQq3o}_J|{lAyG_TLSAp8p#EwIkAprT_kf`1c9? zv85XwP|17;zxg7q9jpW#{36j9B*(D!cpmvLKI`i|exV05LUMrC&m{w~;IZYEvgR#fQ&|dP z3*C^b7FOv2f18cj2d@pa-$U%=+9{vLtq#i8q{EdI$8d&;WbfL{{zDLx7Z-A#S^6GMCeb9agZpt$ zHn1mx0ou+|V#M|S1>K%&X1O`L>A?=c{{Hi0?NK!nbQAWM6>Pop0UDntz3m&|LrIbT zT_yA%%l>oAYcIB^7|C|EzCDT}oSTv6?v~O>FUh9O^ELS%`UbEJY&ou8xVOaF#xYdm z4jae0Lzh@w)OFR5vm_;VcMk^sT5frP6mIkX1$3ZD7v&Rtwoy%9Dk1Ct{G2r>pScMw zTY9j+b19QwU*tlKfV&Q>=BW~>fB|ytM^QyowlVU1Xi(W$WxUX}Z9diS**QuPb8p`t zk2bW>f!gXTbO|7rlf8(QVes`{Z)v$)<5>aFhHi`CU<+MFrVKp<>0pS$3Q>Lzf8JSN z;P%OuK$+x#cWkD)DmBXW&M7sqsh|*)AG0%8HGEMCSl8ptbNCU2n%o&*c~bIExT;M~ z?uXF}3=XS93dxa|$$v&9LpIVS8yGvKQ#&2xC)-RFy30+D;`*~rb)dp|lTSNGPG0U3 zqr*jdXk|;_oj{eGR|7&I64GU1`B6ItIRBR%Zo$tF?mBIjF4pJZo2Bb{97L02>W$i7 zDIX_!Z+YYiqB`w04q)~(%MO-+y%XQz3xl|@Rkg1)5_!j&eKkVxVlhd+>dz)~K{af* z4NdK9xqDgiY=z|Lcn`|mEYFsXgBohu{)tuFPZ)svUX^Iv$M-aCZ5f>fI&D>W7*mPl zpzW3;eBr-e=q2U}TmCG}+iP2%?Tr|^Z#>UCx&Mv1o@rT{>H|)7E`_P?{&B8*`!2Pv zb;fH;WM^M(PlXT1aPC*bQGS-@WnQm$TcAqMwscEJAb}bwDHUC95$b$=geMe0YS| zG5?Qaw07>{pj*L_aPnfkscnX(;rtLt5fMDubTD_TGG z-HpDC=GApz^ZPRp)5>U?-HO+09atL2)mOA-&&jX~2tFRHJT5t9yDJG$XuA|gfK>FR z-gjU@yjY{lfQ;QDVVX#(Cr+Gr9bGxHsWi0I>tDxl_yxzT_~|!qzzNO2Ldk#YX2_w# zU<^9~Mlu#@jf;@IDOw$8^Mu--H_jnP+3ok}%*Y4-^n-(P zLnnd>x|k8q;t!^Xwb^PtGqV-zcw5f6^6&I=8&21sgxV>~L@!G}sZ%M_e-@9M&{}W| zIMuqsKq||j`KKdu71T=qoj(v%$?I56uDU7?VrsO>U|@EA6LbeuPkHS?#LAJ<0Sl<8 zWeP)guy(7#$fnAnI@_#xxJQKnCg&5obn>4d$)>Hhp3>O+y!s-SEN_1>Hlg5ane$b< zVFz^b_DB^l3A#`%ERNn%KN@5!qWNX2vRx2aZprzw$&1r9-z=xpeW62VZbTAcJG6SV z#SL@O$toji0_$|M)L8J9F#9lYxC}kHijwylH!AcHISw}BS@>C4{MGr>qWC{KVVA(9 zZpA%fGm?*I+yOSc>-z-$RG{>umm>Xf#V0WlU4;vp98SZf*XfZKvX=3NS}Q>UgJ+q) ztC;vt+`~FD$PTBz*`mwD8cm)QNJ^z&QFb6gvdBddc~#OqfnBI1=qK>F`gW12dRI4Q z=GqB#S^YzYW9at;O7hMp>v?Z`&YOh~OuO47A}f+!8O!FrH@T>LOcM7w@N@QQoh6>; z^>^ewJAgE>1ve=d6+>hc+h0B$W_vCvQUdH?SRG5Kx)Szt-pI41pUimQl(Fle#I~EZ zspYpADxlp!)n$#E3@rqxmkS5)6RE}dM65_VH^W${3tWPKUywu6hyQLI@JxZibr<$> znlH#@l{7a`Ry8PA23TwsS}cI<|H)vry%@e`MlL(B`+{C+VSO#gHgou%tJKANa%Enw z!kCy5x0$iA80;j;p(3t4x$@^Il?$WgANq7Dw$ls+kRHf7ehs3(jkKV)+sVr|ptu|n zBP$;V&P2ASA7MAktDEp%fumx3(m75;ZOiV&4qDZEu{BsXP`V;5y5!usn*MAC^t2We zoA%y;w^3cAeMsPT?uk6aLzzrlc_p1oP#trdbkNds5VUTbo!N#dB2kqr-wi$N>P|YLW5KEr3mgx+q|-g`@7hc@^!VMK`kFa-u*W{xv{i8X zcA2NNj>TO&zhaMD97mv5vl{1K7QET*^+iL|qTYwac56et<&?NG#IopMhL*lDjenm} zd8=^^AEdYOSb?`3&!0A!bUeu7hg=S!>B6^3i-K73(~i+xt$ z)5b%ovUvOh+1yV;&h%%?)4%mI$7tKT94lK&uF%sX+QedGUTK5AOaJXA7DMo61HYa> zk9!^$_nhTT2H)oWQUL%J_Ve?~k2_tao;_{0O$57~FI|X+UuH%DE9z`5hsWFiEriP?_Qy>RzA-mqrmA5N@5IWbM z;jo6OI!Iwx{Zp;REF@!;mA{|SX!e7ObRi_g-p3;%)_Vz{QTK3tC^hUBbuz1 z$==sP^i`SDz_o*ZK4v~)E`|_l&hfvqr{2d3I`3`j+(wGR_{4qfhu#^~lJ#GAT(kuJ=iub8&$fC~h1d}Xk?aTt378kFni>GdJ?~`oq_?(D z;9e)5LEL5=bF$AOWW3X{&PZPZ+oW54)^&}QreXdaq-EU{lsm;NIu1u4vV_)v&>=S%aGb6q($p!g$KVvb70N_;I@Iu|g8 zBCfH8frkYz+`-Sokw0(-HR$3*_Wc5@s=U^qp?)#x(0@B9jpfj#OG$?g{e35$d$QWt z8L9}YEUxK?{oea|!7-G2rXkfG$*mn(kgfkxnQe<oym?}_m_NYa#MpmdM zmbSI7TGp9v?;_x)a2!=MRw+yE>rO3=09BpJOQS6GcU4KNJTv}9r&`Rl8?s+P>=o)) z8`Q$dL~=-vQuBH}@~x(+6RSTS3F#8nvpg3iZ3wISq&wagt_=8tW;sKNxj$f);`4fL z=qQ=bmlUBE!f!1VE*oh{zZ)4U(_8Q=hb@>frw{01!1~qJG3VwjRP!;XH~RlB3_rh? zJfwgm+4u{bcCGhZ9SSA~RM-DrX;Gm+`?W=-@PEPu~@Y+cFK6)Y-)J#kp%jcbZa>4LkH z#p1p7wT10=^B?Rvv4jMO@l6fV7MO=Exy*)RYG6LzVQ?+$QQVbNt{TfJ4no_wr#EH4fK?BpUE*VwQja`CH=omqki)5jsZ6gBcS(X19A2s zs1+LmDc2l4TaN&o<+4KH@SlH{p{*r@U*erCdD<#yJKeBUqD`dR-iAT za~Aq(#FkTlDS)HD*j+#P1g+elP{qtv|mkS9qFtiNHvPBhd5dN}1Janwr|MkeAhJgFGsI_(tZj=o(poASvNeTrG8&HH$$;8f45~`*mejz~Xst*tx z=COE{kIxGp28Ajp))%~qtfZYe<(?JqVjj$&jNUVzfj zw-ZWhSw2#2n-!M`eL6tJu1++$;_OIl*~*S5pBnMa`hLzf$#JZt?rP&d5{lkWMyz2~ z>A88ip`dK|{&eEOcN=nqorfZr3LtAJ@%17#P1@(ba4Se_d6Afd3 zTcgPi7yEmg4k1(>;_4MU`LNH5Dt8?F=DNYCNR6Pyz6SG8bXn`pw@<6o@`dRfMi{7->e=QWd#iJZ~Z@sQ3m6fjUY**@&4_UYz5 z(xd}d>e5e3@>y&K*G(O(iy9S$UcsyPsloHHTCPQJEi5?d1w4Y4N#|=K_E>N}O7s05V3}5;{slqL`XE;8g>{c5#Wy}j6Vx^+JDQ@$Z&(KpV z>sg5KDb#e0twG4=2PheW11U(Z0XO1S?g4jt;{^4ncaYz7>(N4weV_NQ;?eyE+`bD# z?azjhF-jrR53!rSHyAg2#B!C#k?!fGrC{ygL0(DIImv3t>%A2}=DoT$Q_7o{_YAye z>K)}_dNDcSh zhPxIS8jC5Fm&5iJPbNpyVx}si^3kOJEAvM*)CbPsI3g#u+<@3inZoalOQSim9djwW zeMLxU{@H*E+3vzr_2SEm}gf9AIq zYUKgUOx10NMquY{#k-A*|LvqA)g@;Rt+acV8G~Odi+qJ@L56Ep17o@=R9bcu^^|RS z-$7Q!QsGCQ>b3`(PVfuA2X&Wh3hengQa-h}F3DrE%D^-;Z~ZN##I0O^Ziz{T?X~o) zG=DwXi7rz-KIcEruV)hHhR*bWetj%aBw!~Fxcgr=c5{x>SPouZ8*cKj_Z^kkR`S8) zm05Leuyx-KglA2KTN$)Ilo3sX`VfQhkQ_gG3q1x<79s#7@fu z;)Uw3q^FiCvq_AKjXYl7S*m+&#=A5=yMzp?rf!~;KJ2gi-|ININWzB>OaJXk{%uWy z-wH{5gM}V)lzFk{-}Jz(1z^b=@hBwl-lalQ%c6=3Lj(V6#R~zSeI6*Bse~!jWP^sG z)pKjfdi@e<3W^^RRJ=!l+?>36#7s1(XSOqR0b~Si8{~z#CRm4^oe#(wc_77Ozm>UQ zW;LW0i?k+`V7W3@Cn8!>JNs7}T6}R9ZI8RgAcynK-xZs?FedxHR2rAwfsw~CIdor? zu%VEQo=Y^K`29(k>ty!)Qsx9lW-vjT&z7?n#OawXNWPVePG)$FK#YB!}$^VfyeHY zZ^Ml<-*4YXJqY6DfELFcQ?R3LZTZyjUbb-q0<>hg6U7v?wR&%&VR_i!B0IDkt#}v)#VY&a=qMU&PMEMN97Q2+?Zk*sL(C%cV8Ct zJwAg-iFUBCUY*2=6}3c=6@cc6$0Ub1jg%ln=@^afVIHshc2GaXD)m8(g%=fb zW?=#M&EH@RDK|_gE}??->Hg)lZ&+&4`;nRC88MqHyjSpC{xQIocZ98`^F^1epS08=bOQ%!o&D-=%k)m$}x}{Fh zwLv*52Su4Y3FDq`6{p6jhTJIzFa-p&cWJ4Z7S14t9YpqnnGOga_T}d2mj(MjU7e4& zi>|DllK&`dICBLYP!w%q7M)HowCui4mhkGbyEj73_`}tUl z>AWeSYo9anw`#xJ27&*0^j~}iff1I&|DhuM*Fb25WvM1)e5!FHmg+5MKuoOsx;@7A zwzmj5n`XQKMgoDDy3fAY<@zt=?Zd~5yIW*MI94N=)sG&_7Dj#V3q?y60gL1DJf@PS zSFZAgJcBReTk;zvgJ3hWD|I%0&7XP=(qBHkvUKl})lt_szdqI28@K(!(kB_#4INEX z&Y&t$BOME#XblTpku!3n(W1(B>^)8lA=IZfWaU{kILd6G!ueLXRNQs9QkFM<)|kzr zgI-RYWb9?W7w*KwceIxF16NE>fkH}tAO!%#bwx)pHV!)}=Gp=$&`ZXb6=C=;U7h?l z8bfmH5Dp!WdgZ{tnP?6p61<8h)G?IdQ%*Nk$w4kZn4+pB8cNJMPpRPDC= z?WI&TG3)dFzSR1bcRDXudj-L%?fm|k6Tdif zg6H)%kf+!bF@)l(>>+dnDvz91(E^1NDI>)KH%^vGh;t1lg+AiWR#gl35B0$8m(@;% zwvKHqX!c1+^i>dfNFyCd=m>p~8}sNPdR(;JaMey>Hrs!7@L#Q)zk5dgC>V1aTCGo3pJdYpmNMiJm)!m>5hU<9Mr`-b3Dz^e-J*Yj)7G3DDn}Mt27l()AZ1L- z$9%8c$^hYF`jU zfr=DT$VpsTE#wrwz{)yGTF^yD{8bXnchuC(46*l*F3f14Q1D-w#VQ{K3r?uGmBJy+lhUq_sO3eZpIXjPkjd1y1C@hHU zlk6*w6X^C z7fEyZ7o1EiJV`hnn<^1a*Wi$!b_Xq0f6RdWjH`|ajku`Rxnu*`t<}Vc<-$Z&*}UGB z@hNzN*1H>7lcVujHn3*6&J7aH<|bW#`9WfyGI1-14tFQB?`Ef`#$*?oC&Z*<`2w~4 z{_(DsDKh?7f8>ABMNpmPCQ&!2=c!|{{QYC4 zXzE~FDCS+X26Qx9RX=7DBu9rlQp^k8KoPG>CdhDk*{~->g?eJ@0_S$~3&rFS%=UYU zdAa9aw$9lvZ_Nj}D%dH)P~3@_Bk zjeB^Xx8IT!F2@sk9uwE6na-{XmVGxnhGK@O53Y>7Mb?b1dSk;b34A}3qj~{v2`rze zelzuq;WOj8y1)l`2CYqi-e}O+t%J!1Y2wZkzPN zxqR`zt}d;uQS}mO(78FHiAXP|IjZ4fViki&bgPBKEs8{lfI?22QwBoj{A4LaS}e7Y<%vNt9WmR zbI=>SlZ!p4+e|W2c-Zv|%<-=6_J_1v&c(KVC^@ez0vLJ4-S25Ws#;&~k*o{ZAINZM znA@d#IUx4W)H*8pQ=+&yJ#KSEO;&O`nWtj}ImWRY<2{c4cO5SSCLo_CYy~CR{78|{ zj@Kb5q7Lh4SH@$kcV}a1!bMrG(i1^k`jAu4ds6C0rA>62Kfk~s7U|<`T`XWO1J2`t zsSF5Huz)B9h;R+$eRgozSzgZDLj&LUSI}mJcLDnYcCbo9=N&ELm`|;fg|O43#W2m= zYz9!Pgn6R{z${luO(A1^Do`%@0?DUPxG=WVEFPIWf~0ei4`O^V((%PQwn`4-#=6Cj zmkSh(r(!@|T_AHW#yyd*jPm_;9%6MKLm4M@EDd$8f)iz_?q+fL2T%??@}d*RQLPf{ zaYP>V18yW#XyM@x*|$x#?@dRb9%Q-tN_jhwIS=r&MyC})IIEKweK|^!@B2zYO`omt zk-GZ0(Yc9chWx>JQJmXQbxkG6OwEclg1(s_Dx<;K^g!tVl4xM0K2dtWEsIM3)`kCDyUUI zfN_sF$1V-84T46E8uJgIPXAh|+xK;r$r%dMp_x|39 z)N{wCk{lQT_k9JVF7$H>DAdCzzkc{s{(W$8INkG6tq&pbtj|mrb5Lm9%}XC=Zsio` zZ;Bt(e=|7e=1$xMiOlul!>+eCI8eeU>`T?gpM*|WeqC(c**!K?eyOI0aelg<1K z{=?h2cBj?$jMewIxX!YlH3{%jR@?l&S2sCuS_<#+ZzKXA0zxx_NT=H<-TKOV!_GRg zHGZRC;>}dU_*a$CZ)aveW(t`r092O$BU^4>{{tpm-;!hF=x?okEgf`8LiOj}2Q_~9 z4iR7kx!wYN->=zRJ+p>Gquyn;-msa2gF#5mK1|jqyxvA z#=1Q%P!+mJ>6nxnZjXi{s-2JNmPx7gvz;xI9^`Gs_dHJKoZtZK2UB;|`fcsx2ittg z^11Q$IRB3-A)e$FS*`QedqlzZ2TATr#L&`r1f3IM5RKx?m^&hc z@jv3h8 z!-of>D*gQujn5FSIVlBQvL@P~e%b#h-!=S;bGDWjqZHvTnLTsg{h#Lhy&E_AjpAcs z1Ld|y5}94VI^O}Hl0iZB*ep0GALw3LNw-+lTs8fUsot>SkjLiU2`5h_AY(KjN ziV?aeYWPN0c_t70>IIwV))za!#(zF`2@P;eRWx&GeAmMkeFSC$3VywF-Njzel4Iwv{NxqEV^vYD+&)6N@qL+R(t0tjPpACh#kT2<&7SZ=3GT6}vIYvZVlSRiWZ8T?P@whl)xQumI8Je% zpM{?V5J^gc9Prg2q*B{^HV8I(2ZWN#R`fvkTEDF08nu(2StzX6h=~{Ofs&e<4F{*~ zN8www@jc~U)f9~F+)(pgnGadtHOUDTTQ`EN^+>s&psc2}F(j#4>w#Sk^$H4_dm;l@ z7BMNGZK0BChAGRKRGf-W&Xoi)no1*$OAXljr=`y-7wU!_+K}Qv{xp*6;Bex39!EDl2Wzf#M{) zdv!Y_b(GkEjq=RO$}{Wg#`uC1_u{0Cnwk_%Ut7On7=^^w~%(!TGIvN^hmv)fJkEZbQUIEkKZL+#Z+; z{Iy20Vbb$}n{3d7 zZZSKr;uZEQt1Hi#vplWcRsb*dU8(#3N7H%7Q{DgnzpJ|1rLxM1WD}W3juDwz8OJ`9 zy$;zK$NMTNBZTaby~#Laoa2(c_c?Jw_Bcky!7+a?*XR3tyOF=To!iUn{oK#{!|UQX zqxM)t&ZzVGS?;hmQhj=g_K^4FM6b%N4F2=^Bu`Z7Dg%0@nZ{{(!UE&^O}4xNRtC17 zuJ{fF9_*q@=y#MJ9K=Ljt0?3%(ysl|$4}>o&O*WSiyw-cSc?schO@_<|1-XR7;W>& z4f|`qC9=U$k4|aknZ7u7w!gDaicNs)pzdzXsX~&=9CUh^7E+$3QfHsKj{EXX+ z=Wzh!%b=k*(r;Bi^Wx-rRJ@Lbw|4=zh(SdnrjwBCSZY?U1AUgG`$y_U2DZPj%)W zqjHT#?$sYv;kZX6yGFaoBbZT#nU!fw*p`|GA&T|NX(#P8vAciX+AOacLm~elJAqkl zA%LBkI+Vm3-v=V}CTd(FRJO*T+~atG+Yg1z9zIT5b)ddsAB!=Cx=fgU1Pz~(5B zBx+f}uXYY#;RV9|06PxqE{b9)pb8_-Xe%e^Wknp`al8yv7jNH`>vTswe=xIr8tFbm9kUMe%P?c;e7V z=WHvg;mG?KH;#R90CWB+D_QRT`nN?LX4%)rNYyC4u^hE}FKtoxa~rGb838Tx*ZVz| z8oFJDZ%{}_-_U`dE#&SM-?e>TfmS;&&+I&29umy8R z&#d0x8T^lRb&i!43viYO(s7{4#CJb6yrR#?f>Tac`noY9*!kYQU?gAP6%u*yg{ZIz zpbmHUCKt=3xCvxWw2V+e9n;SYN?_nDj{NPafC{Y+2=V9^vw8&-PLu?md`w! zzYqP>&2}}Nf4P!+Lr@iN0iFd6u?4*JmRv0n!w&|O71dh<(^qXs(`3gO`}|eE-3fHs zC!=lwsD5k0?|2H@@c#9s2 zcg2$c$N8uYRTeb1`x5VH@fmDox76YTFL`l3g}E>-FB|LY$C33@7ry54W{xAFA*^)Q z9EQKk>h9b(AoPhuei?l%G3=#1q|C#vsQ*ME^87!;{h7*V!M^%`jth9L+pK>9?{)d| zZ-Z}*t98|}BmE9_W%kA`FJ9D(h%<%1Yxl)eR=~u*eB92DUq~FVvn5k z_4Tg&CC&78KVWtK+cxDD*+EdG}dwu7B-y+u`yL(t>%NAL-|Zb@U<-7b_Rp znLnx<6aHQ+9|hH)6i5DQIC=kkR?~SxFZOA?V1v+I4d#0j!v-M)5$ZD_MmSYD$PUzA z=pn)o*6FK`fXmbQ42xvct4WB)MOqNl&|LI1_b=T>a)E|n27g~Tm!)Frn@@mc@{Hz< zb6r%MsevG^;+mbUMU9~f+Qr0MQ}Z5xQ*3o`nZJh6;?+1aO04;b=g2EotNN`!%z=$h zw8K3-T@2^l>is=)BD3!N^$UIQ5T@mvPors$_44%EFgflMBjb(yVA3k|xD3*As zNjfk^KZ2j}`)kkTK)}wk_?cK57dqTgF_>cy;Ba>liERCV`U6+?JJ2kR^V;1B_vVT# z4C-;3-*m9Sn7%$}Ocnq_b71xn;%#|uSE+=^w`ZK$P-%BV6AOu&AH(GkJRhE-2{CW0 zTxRcDBbLWBKVlsov0vT15}yzN8=b~G zz&4`@3^y*e&P7ORSEuksDj{q}1OWZ~04yP!cuzjRc42I_)xmSs7qhWK;qxKXxG$uR z*i3<#v(f5>kgUNIY>Ae99AgCM7zM-4 zTX4IbHAJYRs~fVZ6HELUqKbsQRX5Tf!^M4&Pc|%}$L+30er&?T3mR}k(QdKK<4%O-8WT&VsDIydlXot zG~`41F}FF^VquLz8sWqBU%C3EkBe`**$sK>Cx=UQ%{4`(`ETe>O8Kq*o_$}p?$65i zVJFv5pWa|TERjMs6%fh0Qsxrt^QrbdjVM{4?k&w*fdR5Mi{Jh8P33xs*aS(iK`&HL z@K^NB%yNE?Mu(cRiQyfW6%!XnVy(~wBjkH9{vkrs83+Wu+M0czGW8^mw*1p6EKlw> zhqgXVD8J92iE5^Czo)zx#k(F8i{&1FbEr?e^6NEiZPX}s~x`I`Hnw0T0jZ;%z|zh ztrkZV4+po3dmBBttF5m`_i(aXK#Vxnwm#vFmi~PG?N4tdYvBg};!BM{aL?@oTP;ea zCF>YeU*NfW{X*>>z07n0NKH6VdD7oNb$FMxCDLUjB9~Kew2dR~JpQ95jCJRH~R84Si{>YhdNE$m_9)p1PBuI)2colc(1yEn;9;S!1Bdei`Mn8x9vw#urvx1uk{Y_aS+}w?;&1agHYX-ZhFk(uBjUu&dp*&a;VE}wdMunJ?z9VM-P1O* zDd6X>V804sKZ9|@cAc#C>=Jqlns3Fh{hOaDPaHB?{MYN&#{G0T$GYc}G)O~QvQNJm zKm6>YxzeJt;)`A;=To2M;TT%NU8I^6k$hY^pr*)E`u;);vMEKHnELXuUN!c{|E$Vi z0Mye@)*h;?EurQR;=JFb*A#LTNIlfV=sW>Iz-Mn{Htb)OrL2gwc>^l^${pH7DfYfJ z>D}eIt7Rnh+=JABqn|8?$Ll(!>J_t7fz>NFE?RVQU!Wr?2{GC4YpP=#U*&PD)%hLN zwv&e3t&Ohmbl%dT(fus{shl-O|<(Y|@vNl;Gmf zMH%xd8xW}Wy7;uE7uVvDPZcEdxeAr*=-1>>v?_r${*Fs6tS){j20i-n5xuwS^7!>k z`m>o0LK^(B)b>cGGR}V+H0C(r4-km4yWuF9n)Rg%)-RVO*AI2C<=(D+-}%tVtKuOj64`Bn*=)0q?o>jKNlNz{cy*Jd`$yC zUx{w-4OoJaM6)yqS6S>xBr6fg0=>PJJoLKuHKv6Z;9fVJf5K&4U-`Ec6I~>wa8rAG zPXIhb1!SKf49xnZ>V~u$+QDmhVDmkN?p_D*Yi1w)OFTgDlc?-Bfj&8h0Z{zT&0k-+ zod|qDR?~B1KS(g(ICh~gHSYrT7zSM0KRZXTZ6WBHFp7BDI$LX2k*DkJSCOJ;ig8Pp zf`v*|MEw=xAnt99Fo(skcZw8CUgsOuU>-oYF`D0(G3udDZ7|)RTZfb@%sL9c+DjJ7 z7~c(zIk$c|?Y+XZaxhKm3j!bhB9&;F=l2E|@jCHDP0YAHVxBH6R%S;@F~3vfQMa(r zHpE#6-?>4B-WZ8bs&aol^KaO~q}_73!}H5N(FUqX*xVWgT7H=aJVt~n*KFNVcc zNyBXwVWi+2*BQ1K2QuWsE<7~$Sp4*f^{+Fm=T3`+!20}i>a`%%A92%%RA9}w&)fS0 z*-luM)Pr{@`!-%wTn*TYa4D(bY7@vOiY7X&LYM1eTj)p1;h<`xUHO8WQDG|>Y&}5E zO+-1DleSmXhm@>^wr59mWg(yRE+st5l6JIt!p_^t%eBCT@jiPO%2uqdDy46{)~9Q( z%F9z4mUwMNJ=e=?rwGqyE%fQ?V3k-m-^^71D^U;Mok8E4Z}m7~?q_n}CLlZ=F`R!k zX;t3=T+M&7_^$xQ-hJLq`J0s}$47SxY(=VfIB~mS>)ao%O-lS}lRb`-J)CLyqkOVI zDG6_&dAd0Pr>gg-0MXnkQ~u)QR?3n)5VP6=?XXUe;EI*i)wzf=)TKUjN>&>3sx8S5 z2FVrRh=6$TQZrDZg5*o=8H5xME-K%M(6mBW+tyo3j&6|Y&5e8@?gsfAmm|? z1R$R}RH#cJISTd)nBx2k*4>(3&i!tE;{yG8Q^3z(#VA-JfZkXMDh!LqldcP?q6NEv zEo$FVCwgu+{_9^?Rm`X@_&G7b*ofu&BYt7)ukFIXR6$1lnI)NFVL{{AbnmsvvhO(k zYi;F?hKSX?3-BK=iq?EjF@^l|&i8(8&f2CC??$})JesJ9m5|kq3mRwa4^C zaR`>*klzp5X@lm6(vF)8w`z8^TGz%QsVb4Nq3y;|hwvA^kHnHR-$@bLl+s@BF9OSP zGznukt;;`8aRW8{&kC?L>0uYbv%~^!gpWPeEDUY==uQ&Sd~`fzEK&VZVg|3ZPf3_I zfxO8-R2|OGZggoMS260;TtdCi-S>9HOHn;8*L@wkg*%{{d_JG(AR%0r08y3;+stHq zraNF-9q!dG_r}uH^#b338DwQkATYS`r)l?B{qFm^-N|U{8sEAykauIht_p=BSBLrn zECPIZ3wb}Z!4ME>R=w($09xWP~Vw}+0eUKxz8MoZP-QgbJkAe@zc&d(Z61qZxHvi zYi`U52Y{vV7T1jMmy8wuVLD?8Of~D@x52w+1&XPEfiI9^+zhsR6}}LUS)jKST=;O{ z*Yg@OY|$8J{HWyos}?0S8q1FUsPnON0B~5WY61h#1x~4msOc1;l3PJxT3r@wJkOZx zxY%|c-OAKak^1i4HPJh~+GGj8F9`}n4Klmi{?6LFah{o~a+k2E71Lt+O<{Kr|7kdj z^sucQf_BWy5u5Nh4e1DK^wDycZg_eB4P~cvL`e0;8uep}GcJX)#V^#9kgSZJ^pmll zZkNRby)e8MbSKt2Urm)rSnk1BxTG!;e-$V1UgN4}T3;mzm%#X-;}4M4&T{wAf}mB) zzl8>+8eH^uTPf@zSYeR_MVI|t=~7EVScuBaF5Gs=G(-8sEAr&s46R){K*zn?Qy zs^UA2({nT9o1s7!fA!Cz`lHoI4Nl$k@PK2=0=~jA&3_*jmn*2Q4EO3ROFP;YStv|& z5UzxA*SnuQ%rB@ka(={6P~L4}WPnYe0Pz838Uz9(ceE0$$i>4PGulcI!7ppw(%k?^(VNWunRG7swa+qQb9AYqs`J| zu-EY2AI&MIR#*t|aH$(>B>?R2<-NkfoS$r*_Lgj6S!U|UE~LoAVQq9ri&u7UO7Nhu z^!R-f(VKtYu4-a`e)Iu4?xVNYIC@LNn}sPsb9Z%ZjR>z_+J;twN>=$72p0m&1UQY% z@^uG2^CQu}RKypf`gc7R`%6_%&k2N(U^4H?S@3lR1OSr!u4EyD@B8#8o95>84$4BU{d@^-g)Bcm!2sF&;?1UAe@gD%4SK+Ae&bs#6X~ zz}@HWlsAekuYazWjdQW~`7~E=>~u6Cdy)$s4?%m8ht(&uETlr|%np@KBQZvE{~g`F zRGFQ_4r;Wn-^NOfs{Y<=>G6-DHm#q-J2}*7mHDokffuZOSA`T6wLfuhvYt8fgblbf z)-&x-SfaDy>9amrDL#p&;`N+7jZ|dN78tWpK=fT$dkBw-sxZ)^C4afew8s2c3c@Wp znGiAL)?#X^Nni7OZ^>>i%ZwLmFEkzxTqosh?H_)*`Hr9Z;1^}26$qy0IDbaih%$79 zbsis=boAb7d?6ZT9dySJqyj!Gv_?RP%NRwFZyoSp6MS|N=3IBw`@zdu<`H(QY8=aa z+`Y>c{QU83KOAX!C8x&_#AEO-Fw^k>TCGBkMP}{UpT*~v42B5 z2GH74OdDrl=gLYD@xzA;ifb!mpe$8P_HwSN+1Z}cZE|puV(OF!6W|LsBAq3qvA1>K z-r(aOxS!rgXCfN>=LQI=Sx-Zwe?V094~QWDIrBszaCP!qUBx zYED+uj&zkNoz;^8U2QD>K*dS+8?xI8X0qz#=;N9*Uea6=OU7=zUh&0#mKO->_N<7C zggEC5gSJL#jiz2nx-GmQG=6v6dO^ryyDA<1`S#m8fs~OSOQYF7eUry?>punPIpK9T zTqcC1aj00g(o&lUXBHyf5zNn8-22?rnPXo}oEX?B>+0eIAkq1X*aX|o0YgSVPsR>6 zq>S603o??mOWPeHX(xN7BNbPzC*Y%#P_-<>l?-gt10hADORY_1s}6JclmlGAX8ZQ< z=i0IQq?#1_D2qWZ<6*m-BDdLUqi--vdYBKUD_=PS9&T{8PQT8uf}i)#^uH`ict{t6 zZ48&(DVTa*VMb(Lw@b$0)RKC}Cc=|T=%YSSiy*V|9fdf&T_(K7@a4A90&cfyaubh* z9a7Sc^ys1&N;OlmOxD&}xC?)1H5`7#?ff}@s(7y`UM6k4DkDQe?yvJ4aRz zExzdOd_W2RP_Q$`tzSEu&80EF5_$4-%A@bYu8VPRX;22+&gRV`%ShJ0&zG0?x0sDr z?bBQjeKtO<)Kn(JAw-skxPt&!bLnY`2IG*4%YKLX;m;1@`raOW!)n7}=?NcT^K3RS zWQW&I821oTi_-4Q4iKp(#oEH?wdzmS4widbflKruHJ(FZ5!KiXZp^B_*u7<-m;^VX z+ZOuk>}{Y!0QMAFqyF}Z3q$9w$HZGkC?_X>nv()-+GS|H>G-Iu*9FtP4u2$|1N zezQZ-nC!QuDj-~ZtU{NuYBBYymh?e(&t$E^l{m1G&d9|j;Te~O3#GoIWD`;kq zcLbQ!0&c6f@~oWbkDYSa@y(yNg?I~fhQxF(otOXUmMEvaoD^3deO)=U=+T{(0~kcH z>@zp3{eq;dO&+J79H$*x?o2$AmT`m1zQEIZ>Lt;ug=qovxw89Fz?^RCNy@@25=*5I zD3(XQd{isfls0h&9V3OYzN3qlAPTq*0s;_Ep1*${O=x!;!`;#my%*_}JZ9x_8g@qeSQs&lE+=CyK6}`8-^7fm9wN}c-b>vWxDKR- zZLp$uZ(vXh0|se68?$_{9q(1GRx7#t239q7TwLY2*!>F+g<>oo6)0Ws$?1Ii(yT+i zgjZzKs>U86+rzZmF1RdHjxzskNPrwZ9)n$qC4HQWAy#ea5gYXRRC)WKRI z!eG)(hodYJa)qR0pD{>dtO2J_}Up~&uEwAeYJK5s7DuyE1hQ<}>WxjNo` zVu;xN)6%cCLcrC;Z&brcod14uQMtDK`TGhqmm69B4HEqH{o-X;Re?*lZUukilaJ$g zNx*)Tp2=TOe|%JrJ>0Jjc%7QvA6ILn#gto{lKN?OjQe|i-2*Mi0yW<0%iKhcDzNGA zL*gpALZ~BIq($!aeMyTC$KO^H{pSKLuU_7B)bk95AkO}bAmBiO7X{CM>Cag<_Vxiq z@6Xmt$5xLITjOQCSN+9JsI)E044-ARTgg;|y@QTK3|Y*TK`rxLaD5D4*AF+Dc=iy+ zYO|^ebO+?evU<>Pd}!`F6W&*M@;js@1E}1ut%dXLRN*;1tsN_Q1sokoB)YD_DN4;u zn1~Oox^6&-VSBvBt1VgfBxnSazGUIx=s2zwu=&8m(Q)6$0&Urq!bosJIUAc8!BV?v zW<*ruNFH^;l_^TboF?a`eUIn4iO@CAMC< zt-Y2KU);HV@f^(A)ZNFAaG-VLp=K(eMpb#2N=hd0{ciHcdd%ds9Vlz|YL3_VG#xi7 zzsII#d>J*H^zePf>fqo>+%rFJNpoO5JuL9tY>C1aM|HuI2PM2L*UKeTXHy~?q2>3_ zW(Q(E?7KA$6tq}OQ7UYYSJIBa^wB|YJhjG;`QB7n!1(BqrI?>&A81XG4^Ac~^_uy{ zmWGLd-f&%+F~fPKqw$T6YeBJNo9%(KX&rBfh^JbT&EPwQ2O8}|-TQV{{T;KeS;;xI zKFZ^joBVM(QRUZCSJNI#Kc*jnu1+3cU3`2`LN@%1s%ts7FE}KI%Mp?r_7hq6R`}A$ z8@VjWreApIua>DK%~ug%*7goYbT_E9r1xeY%#;rT{pZvRe94Z^&`uSVY)$Eq`WzPL zJ#iQX_g*vB6r4@RhfsG>20_>OCX91N2kIwuxjQm4b{6R4!22djiaR2j6LZ zw=ZXgTN55yK+{sjt(jS6&%QXHDAo73URSn4Mjo%=xL=2N!vTC^?~rdl1(#BcjF|!2 z;kGueMY_F3>`_o593EX2+Zy%ZV%v@02wG54=`twt((M{;-tT;0>yQ$MNjrj|`Kipd z&H6&Z>SG!I`}U5Wx@v=ZLTS{02Oj@hpZAbn%{5x3Lj7~|^v#g57d8AqWt}}_%X)R% z->H8|W!i9PcvBRC$j&IJd{bcB+0VH1c@7M_1x!!Rc0+{8y>iS{e|A@0bjz@tHh0nw zE6H1PH5~(7`r-mZ9mS|p`}v?YstNbGPR|NTP;9IQ3v?Kg+n4&Y#%)CQMD|31@e+vq zPoIDIBaq{3bskI6)f3QU&q#V9!R6<~xbBD)RJJ}HvwQvE9N3-sDHyQtQh(5!91Voz zVgs`5?W!LQb>9unAC1cUnW*$3$vcAA^qj|iMtjr@ zRD{b^#w!cT`{S@BtuoWRzudoS;!WE!SPDT~eA=Ivyd?`P(rF!+jcG1cC@xJkacTCp z(IEmAm>5#zmND_(hudwt;RO#|hehDB?niiOPs9>cZ51A--fFq9VAM z!@E`|nSshi%Ij$>oxH#d`xML5t7UlJCc)zEWgEjodK%g6Cn21tw(H4h3Jw7Q&oiuN z*_z+X9Tu@yQNf>+v4a1vXg^N`*MEd6lx%^3-FxubNIla$K1!8E*4(yf8_`s{xT zj@PYbI~t&hON@<-Hipu$_U@i70|ReHE$+t}b?F?LX+`JIS?8O6F=5$3PhkXW1FV&k z*rz4Lm_GgjHNzzfi(2j!h?%)_u=&NK?T#bwVU(r!LiCaqZ=c)ppoPCcxULTuVRbfx zo37=uHeZCLJyXY)dR(j0QL3m$$nAwKV?p~^#M9e+q}KBMpqoz4&Y_}SF#Yjg6P_m< zQB<-4zcB<{9&FKXP9%+1xjXE~MoUePHeq&J@5?quUdJdV4awXorcq=p`+KO2b`Ej@QVoA!)@`FW2fYkY48Mcmjo$9%uQy(*dV~ta8Mc0Yb6c(Z zk(q6|RVYQv=)H z2Urd^+WNK&9%w}0uK3ayR4#ny+AxFwXRLr$rFnN#G(Ae;mUdyhEl{Y%XTMC%e|nRv z*q%8o<0oaKEWjlX6)4g3MV(V1eEr#Z2&t^#5ftJ&CziDo_SK0~nM{$ha=5FFf5@XOZ*+90m;O+M-P)0BadH*wD zf3Ze;3U^tP=JEfw9UREebIG6qS?cf*r7a|qCMc@N)2F1b1ixWRU)%I^znE~?1Z_w1 zhh_uP|H*83p6s7LP3DY6+X)8K8N)gG<|m}I5aJKh2U;R1VtZ!ll82KudZ?WDO>hPf zn9ng3$Oanc59orRuh)we*n*igb8dA0_+I-bg%Cj8sCbGRVkkz9;@rUQF{lV0zi4@l z`}4c$z)N5Mqf((WvcWL{bG$A~QApxw4GV%-I|E6lbS}Z2lwO+xaXaJaJWQ>7$H;Ne z(NT~T(rzJEz8I$N!2>tM4azg*s{@Y+PaDpEc~> z=CSMLX{S5qYiBA2ZGHrJz+t;{Y-gUl1Jw)Aw>Y&~rv~f1Li>Q+`&(6BTOMe%qa~_5 zVHb`~l?d%#5K(1P{KOt|)7Y_)Z+Y0Lm5=M6FBKVsH5F=3r<4;6jHkAL5dZv2`HUnG%hJ2Tu?m#>pdNaEtv zOsRcLDJh1%t$4!wO$_r)hR3Vd7Ltr6$h(wL^W%Rpj4uHC`*2F9&=IH6Q&zoH(=&Z?^K2|hcAL0W0j6?rCz@tYhO+*SNl3;#kBW$y825!4cU3yl_Jz$#z7EM{K#}3Q+PE};BZrF}O+6Xam+=JvQodx) zgo^|0j}+f9aLgxI489zE_2zQU$+<4sZ22uTL*=E@(*m7l@Ie27ZsDa{XW6n;qB7Ei z$7H2UkEZEmtKmT86oI&^QAi-!%QK33K2Rtw9!I7)Ya&dR$S7x2tpt2$lP_(zlT>;z zr3G=|Bs?wGlXCLwk6xMoGW+D|S^leq5_HD30A_kCLj_@wRQtK5j8{Q^{0bu7wD%o* zRCC$1m6IRn!#8YIANQ+yyYO&{jGNgAF&AQ{*@r|wS0rN9;zd0<=wr_xeY1v^Y|^K_mz9up~ZI2;!E)Sju%XDg@Cj=Kl$;IaRJ zDoqMgi<=vqsPcoYOGrzInd?isDwihPC69Fsl#N2=8^?Yul!?j1bD6QJV8v0k!tTF0 zI&d~@=SwHCHjfrfx^o7Y#^u~5z^(qU~7|vIBTs$IG)>9}&BCW^CWi?4_UIt*&Dpb?+95vKV zBadj&;(-?}9yOJQblb}11zxVcYmik{zsB1P?w%a_f~xdnlOCNEGXpLXcfk)Q?WFFw zd#jNM4ZXi}YmcDGLJ6|AS``@cvb_~u_0%^-?$ z>8Ld-7iQQlF-SM++fqluqD2SvJoVz#(yy=m!p;pewbl9*IP)6C5h11$xXk0|ojSd! zj@LGh=$0mBz@xBlqM95fynlv_8@zPCT-aD7QG=O@rR!FZ64ON#O>%s8*28NAyat^v zinyF34Zu`p0dww3jt^L50vx1K8YJV?T;Flpi*1%e8~Oah`*ZzRX|4FVwbL5qvR+Q^@)NLuL{5IQ953J~gyVn1;icSTPf`n~ zRgi?usu4Zi`y>f-yz{T`tJt)|5EDVP9Q2)+IythBCS5z|tE#YPu$XqJjxFj#741m2 zX7o)4&mjjB@K;ufk_vB5AIL$o$VzW+Y&}T!0ki){xbJg>^+P=uRMQL8&()YDjTnOSxz49 zEIjPvEHRy^^jbkNTe3SDwi6Xi)C#uDjY$j~ z3Xh5pq2^Vu7>Z%Jh-q~vC+Ju;|(Bz$6-F9OMrA+i$mW4e{KFK&Phdso>D7Z5yAn7}0v+zPPNgSrUT;*!L{yqz)r(ewd zHD9zVJFi%;D_;|O0S$=jSBuvlkCcA*T&NmPVfJ31a4R!S=#7sX`Y}+kAR~R((fGeh z#0ENFdn=Es-Hr;nOyC0Y(=W_k&+TY@h}7D?7;<`vEK70wCS#IfX@WgAy7spV3v{^T zwTTJW8w7r*`Rx2cuFUJbGPU@Uq>lhAzl*b_w?tf$XN|Db7Jp@Za|Jc; zC4htos_ynljwY=OxthIP5pA}T<9gM}SNzfwWk+{OgrR<$6!rQTEBv$sYL3 zCj>Jo^vW?1&B0C{RK>~_IRsiWd-(AM9L@K6l9DxRPxH+kZ&8l@WX(~XI9Tjd~tTogGK0SGo*CRNoi4XC$I&y$CA-4yH9_3F{) zMu)nJ4%=7`UQHxyBM4)rC95{)L+IEDG9N!N6f&2Pc}!m1c#tMTH2ClpWg^dB>Aw)} z=NzyWHXKqsPP@A{P8;t|NA23>54Z$c$S)~s<-?VEo)^w>ebDNOk8O)gOZbxdJ|-+X zQugsH$wJH}If&Zu3Z31}oBdyvg51Jy|NZQ9-nqYS-ef&3Z?gY)VE?OgvNfxGVwJOM4C^oX|%=^`|x==Ls$j zjLX7?0*=Xij5}%m7N%U9^CB9|-F0U!s0^%+L?xs!!HPgf?Yyz&+YH)=D$?YD!h?JX!W37pk{)1iF*ttYCnDY|3Hly|y z6r`^$7{ouIP}UZiN|`*S$YNv+V=L?Zk0NFQ7uFgiwq=hZPo%d7DWmC<8b!rq>`z&3 z%zydX6Rr>p>dcd(kjH{REDYp8OBk1ZA~X|O@4p+d(f9y54%?lh*FuxL8wywF{1}bQ5;Y?(5hHaExU|t2;vu6fnuMyz!PL~P@tOM~;fcJQ)VVXdjs_)+ zCC-c2mB%Q9jjx@BQi8`?19vAYOuPBP$s<4wz{uTq`-g{4vS!W%blCGD&a?1(u|z0` zD*LU&+>?&oA}{4>pO==Fx)lj_q1jxKvI89=U32oc6+3fW{UycBz9ef3yt|>TiijJ# zX}>I4FOireK3n1iv+Yx;^C*fk~x-L5H!bAD<|5wU9y-=qQTQhhG zmA(I6wueSbP^Bf;Vx&yq((om~TWkuD?L-VL+qF1Ji7b2ms`u$}^1qKVjvcFa%BDOq zF$m2N6}(ayD3*?zO=-sCYXfJ>#G99M?q5+T9XQE?hg2ETL(pdA#5PyHHG>g8W7G&Pl8l1<1uwjJL(LjWL7p(C z&wNGo_Ei+<>uk@(%P!z!)vBt!(SO!l4p(3<4xx$Whnuk8H0H&u{BcJ@G0JqOw+>pr z3|v2O`N@9q^}eeG#oC0aQNt%+l)MDiYkbL}1asV4>CwcxUzzM~uVBDp8$>BJWy}(I zW+rv~b0W6u0^d2$q0s3B?u_g5Lk{wVBg+cKEGLw-vAb2Fd6wUOG{)mvdRizp{a>BRj%jZbqIxTZB%svEXIxTuFQ z+~3~N)u5>hSQqilL^Nq?**+3Z))4c|=K&77OhU6oHA`f1Y3BmSTRr~#D27)bPSd+2 z(_|~%JS+F8+uge)qR6`{yCO)!xv02=A&mw8SW*Yiaapk8u>9!g!3SmNAWjkFSlmhN z{;Jf*V{zQKEmB$fg1ALBzBSWW@(+Byq%PE&)%M-yNDJWYE2kV1g5_-`#CJMAkO1LoOO1w16FhL zRi%Zcqizzk&`eViQVMM)``+K!+lcZp;pqx3|0d22XS}+fkM9+T+w71j-8SNa&s5 z(D*13*HR{>AduSdXFl>+zS;@>XChf*Vr*Nll+Ly3lB z$C*6`xO@9Raa{G+{*+cg21~BYZcSejy;_DsYF0rxz7kU(6UvrDPoFCLT8&F<6$uKx zetk{m0kgkXqB0lyqK-j>XKwen2MNn^iY`PxU)g& zP`n}IW`AgrWm<|*p)QdSvvM6>p^zYuM8kYX%e!_EducoF*dGyX?S z*JhH0S`&`z_+_j@Zi|h9bngEb3I5CMP7}Oa7R{G}VZK-oZ9*Y*5E-y*!_>m4sQv6I zqjh@d;5+dv(^6uInj;)W6R}hW1(J5lhD_ErEqb<<0xaRpY+W6OFa_K;xzu+za96?A zLCB<&O`iY}w#(J+_`)n+K4Qx2$`(EE7>MIv&np*oXepVOa-{Uo9$C?F{Nk z@wANzp={*y#S8l2PV$exMk;83j@B%?Q5FzKnn!9-Gkwuy*DfY5k#^mzjU1DnO>|&1 z_?pYuBeH$k)?O_pPadJWa>SAagZh(t!E~}W*s{(bu9G}J2t;TdwFp8>I=SU;8-;TljY8Toe2)MP$-iK9k0Uy*Vqyfz$@&q^F$cwx7t!KC|`6&j{gaFfsiiWIJ*2I`lzt4H}r<9k|;lmxS74Rs3Dq_OvUq z(jJsC+DNKiHT6f0qBi#uETf*Ew~=Ui%$X3-e*5pvCr9Yhlm^_Z%b@@A{~tC5;1iX~ z^GGy~=6;lH$EJ~3jA&>~WSUf1<|f;6R^rlYCu{4W%v>#Gx1*|VEf4|Q>KJx1OQ6ec z@tDUD%sda)JQ};faU9b(5u27URH||Q z(bA%q$AGZY;IfRN{IZjXW|zApwrGRYpn<1Fv{cmidp4yI%yuV^c6;KlveZM9EtKZ* zWWqq`*^|w-hV2+xN*eZig596_WS4^_IF;$L4OBAe+j8_lD@A6%8Ax1-d9VEvHmA8K z4ZS?s>(8(Qj`2(xcj&KL+`>p-y;H*c`;_#pt+J7DF+}j;;_(CQbhoYf$wxSN+ehog zN*%26yE}C*LkjyoR=b1k9=)nnXnRQ zync-vIacS{*Tkizu@EcF9uX0drCl__Kt8B-y-6>keY>L;eH5#qJ+}2b^TPyXJ7_EO zfgm(rQd+;`6DYc|^MOTDO3K~G5&_xvEzeig4{@B=rXlUtbz0c_dQGitx3BGRvJF}1 z+W{nt@8)7uCENp$rygEGU1F2F*9PIY+5twH(F-qV-x(sI%AE3L|IfJh_62nOju&>n z#?frQ8z{j~`O!JVyNtVf2@Nn7anp$yaaHisC2>k5s%vQ4-eb`i6Mx6i`+(E%LY$$+ zT|gl#+b^S${iEo{20Vfwt)ZC3HnEBLlM{>G4Od^K#H|JJxbj*5!a^0 za`&3##K|7Ds%}`J5>p$UV!pl!5~;1;TB~YfE%BV*-6)zn2|tusQ;;XBn8}D3Ea+eI zI9l#W8?CE{xYXDx>|aVOn&<^7*3cB_JWeju9?lLM{SltxnM`C9K%w%NjdO`3B+$kx zLcL|ze3!!+3W5)fnU<-j1Fcj^DcNX63 z=L$xh=Kn1I1Qw8AQ;@$Xgn*l6D?M}^TA(`$G$4AMS(f~zcgbaGStYhOBh7@mo^rpCru&qxJ)hI?i zbB(*KniI1y$PdtjtfIvg6(R_xj=Gv!e$$U_crO8;g`zYd9w4mlfi#QIUu7qH@t*kfJf>tCOSlZKB!uD;b&1 z7D056oA}Q0%)AczPkO%Mg?H7He(-Xa|W0i_dq30-C@ zf&v24J1A93=m|myY(#pAbVJ=p4WUTy$v5uvp7T5Jde`@`n3=y=!^}PRbC>JBuHmhQ zqq^NyR%@TVj^3i$o~8Z!UToC82E&-uq6BFnx9^+#<&`M2P5anfMF4}X6>xtf%Q-ng zKwAp;FBt~b-y_*8C%hXnLpO=8&=eYrt|CK7nbtn*`%=)@IQiq1SN8CR&`sKU4{NXW z39w)|wbe6|p|7~NkXWohJ~YhV`?QzboScmGXgm8Wi%c36OPH0pSc-r8nV>oe)P?MILm zJClmKmXK2{_wB6cKhzusn^Fs zwin_DdN6lBRoH2A^MEsT)Vjtp^74CwZBUxaPkU<;9z;SpybhWlK9H-NeYU;8Y|Tc>OnzS;DR;%}#21GTIb}nNQc-Kco4EuZQz!t8*@TzCr$Ke?(e%_6B-AP~WUZP|QyMu4+8J=DCYh&qYrr zhJz1C^&)6fdt(POxf!O*$jhNf@RMW9gvJ&+yFSW};=iRi#PIW*tBeGG*&({5iSK=< zPjOg@^NpS-Os{VQr9FQ|GyKNu`8%!-mKX1dihymzrR{ehzdcySKmX(s_?qr2gZ}aN zx_ehW;@axUTsIxCn~0`t2;^b|_D>tok|9D9GokcuIkV#ZY6IDX4|wLEH6sWqHgKkP zw6uw@x~i_uhV(N6R~$ZjY%v>e#BkQFK{+(as5oq&+yq6q?yMK_<;6q#9{9|M0(kHG z66vh8eu+QyB~!=BUKrJ z{^0%nLrie^w_EnsvudhiT=R<--jWAJ0=;9VCcb6Hs%+F=3&ed)ok?;*2{EM9JW_HM z8EDm2+hBrS@_mF{Y>ugr^Q=V(#dwzz+ z@f!J4l&wn2l%wJ?U4~a4u1UCLR4&MKye)1vHR>C;7r{VNOA~f$q13Cqc0@|xTHr)Y zm#x1-0||$Px*^M~fOYB$D+^}t4f%;dt5unkpVUzWwkAAdB2DGEpvy{y43YW{62=V( zOZ}@xPw7(|h7*CO*$x)`OmLq31<*lG~&=J57+a_gsVJ0~PEMoSPiDnCU?UFPC{YM#IrXHc$dhwv0C?Q;(*+9SMIQYDBgBI;8aHneoI3FgD~-_1L`FTQiO^fy>9Rv8@H}KJOe< zn(h9w{L8LDdPAE8kI}M`xdUR?jUxM(8u%{Sn|~f>1!v};2^VO(DrCY4W>Rc9^sj-M z&vyovXAZxbN|~63zeAvGoC65~qD;w!gT(l-uwtg@_s_1OBi5%4^{eUc-x3gj&$s@i z5B$CI_ei*QDw0&K)g_q_6$rUCUg{1IGeM%iQC922*E`E5Su}C-LBGBaOvkN7#Tzy8iifRqO($(Yu>$Mym_IN(1OwDHwAW2~ z_Y--y3E#H2OBwqI5`xfqH?E}O-O@#t8ZDT=p(B1X?oJ+Xmhm=tP*Ph8%_|>GDegG| ztEb^RKM})u&4@axi89uVn2bk}Jjsnb*VH=S=G7GN84qQ&+d0T&g6`eOE**v|!8Xn< zd$d$4_6ltq&}VJdCE2S2j)f1dNwnWIaeUvyxxee*}e?Wga>8npNE zX+SR9{qw*1he2cecS9F6xVz`SX*^S9M;3erwtXvi3V|KRRkX>797n7Rl+(k-$fY#d zjNuYkTQ5=3XN%0!xF1Le1;m!B20NNZC`RB z_2z*54|xV9i24aXKfm`q4TyaEczflv=u%%SH+N()6q#iheFp8iCh}h`Ra%UF9rV$C>&Qu zoLY3r)9UAOH(T(*#&HIDl{i2iqNW1|_e|Y;qa(FVD;_^#p2Mm!QBYbz3oA7A`8e2UDZ1s;s4GCsW+VBfvaPvJPRZr#$4DkOW>=7%3T~*woKmDUx%j+caHMRF7D8OrB`Qp{)+p9ZLE3Emx4Hjh_vTqe46bmw)?-+ z3os=7=lJ^yT=e&pE?s3%(a^{19b||!?f%qy7qyf>ZB=I!otF$OR^+8U%vZUg%&4kl z#AH)wrkrrNI^MjvzihQ%W_{LU;L;5xuR&caDv!s;n{8gcY&XCz&Yg8$Zc7hBJIG`^ zp)FuB8FRi5G*|Pe#G+lf@IC|^cky&5smY?+5^l!4XOHC8Eno!64cgH=Qs_E_y<2~t zAdOz>`KQV)s~sQ+u2-LI`i`08DIFSGA` ztlusE>w1?tHr6s08)nZkrOyUDUJ}NwDMh0}zrv-Pft6%t>+K^`>-h0Im@(PrW0zU) z`S7wajBsfo(m5-jvDVSwACL7Qzwhok>aBNkMacy0ca{4iWU{|(HKfuOg==P&#_s!0 z3RKK|DKtQpnq&%R;g+^=*eHkSWrNM@?>^7e3d)fo8I zRbqjfpS9U;9=M&9xLkRuJ29v0v!@jxJB5Ee=kMoT)DY59{=TpulWvp}GaA(}Fq9yv z$)m|bwH-1yTtCB<+;q6QTqg@ZlDnxYxE=10@1EA*v^R%QjlX$Kg-WVXeF9(I54fHDUFWqjQIh|vI*lH7mZ z6p}kzoN?M)Jv(8>4CKIPewdZU)@U*qyYO!*LmsN=KZ|<9mw*SBVe1$PZ2=}i-~Kdo zFAjQIta$izFKF7IJXViv)P6AET-kJ-09NjGa~Hy)ia3F5g^Pt1TfU_hWnB)o{jhN- z(IgXFuPiewxQ}nu=EANDtn!+^Xy#=SI-<-}n6!6U52~k|Nn2dZTVdJY5D5CGhar|J zdb!O+uhwX3z{7>6m_y-ZUao!7aJt|($ZEqVy0Or&jk}E07xYtY+Quq=pr~f1dXYLa zL2dMK!HDmgD#umLaw;E9)Dn^0Z1Ak|q9bO2bwQ#fh$Qcl9jlifc!ZYzhKdbqb1O7> zM-`?aWnF`T83z(m29_SzZW+CM4L$H%dD#38O%eh%V(=`z(>m9WP*fSpa-9hggu+U`As_hP;xFHD9{z1&eL}~ za{!Pr4*B*B0bXZC=0neP4P$~j|E{ad>MI|0InK9CvmYtVQMdh3{ilbSDG#OI^G=A)`6Jp6=?xgm;4u1EA&z61CEd} zlaT#xLq)9rXUZY_a!Of`Z$HtO2LVYw0{UE2dZWTs85?%GW0mjL(C7W};@zd5v~s%$ z=dX3oqaGHe&Af=XUGz#Y@5vKzD+SS-H_rbDsPT{0ebb=-bWWXLL%({eVwQ5aHMGuL zA(@hzg1}#=8&-{XkxqGcO*2bH$&TwY&n@S7*?PEj+ zi-UN^?N|pt45zbS>Cce4Uv-YKi?xELmE$8|+^)%Z|3M;H$TdoME|bm2R0u;r9D)`7ehu>QXZ7Zhv~_hNgPcs*h2AXiK$s1 z;?Et0K=IwVv$qPNC-@NHNPG6fVk@3}?8qTE?Ep4Yc$BH)wHO8F6L|EQ!rKK?-)JbX zH*SBW6`2Vb#RVU%%T4-uP9!e2B4k1Bua+0ifx77sH%>Zm*HPzBd%9E8LXYz~uO{{ppF1T974#R44V7*j30MVf83UQxj`9z=p`0zYej%UD zb#)xeCVJs9l6$Axl|O>Wm>QE>mYDS2_N4?pZT%XGFCGWo>|rhpLZgNd!C!!t#9&U+ z*uBw^)tDWTV@}FjidFNw(;eWfdeZz5atu)%~MgZq@|C$pFt~> zOE5@Lg0MsZJ>ggA6vfzL%PT4nQW+cyp+9S}2W)J)cc2c}FWYimym+y;Dr3ZO>OlWu#6X*ADr63bzpxnI0lb~lMq4nVUKCe}? zpAyz!yj@IA7cW#K(Qh*DyxApC+46IBkC`ny zRxaeU&vit)|AD)erO$j}W)!z6Q+U1={`o=4C}M35Z84$U`_pM|mfUVl5ES2RJ~Ca^ zcdo-aj%~_ftGP4Zj|`81B%h9z&HSqs!E@+Lh0uK!H{Wu7mpil(H9+9pP(zs>G%jmW z&Jl#c_=T*kAtt*AC0rcw2tQNfA&ffIU$=KiPK)imgktEj{1tPea(&UAOV&Yq(amSl zR!PP%@-ODi+iN;6_ZBTuAo$2K<61$6yeLy=$D?|C+=4a`Z|dAFQ{Jq2-BPjaBmMMF-uCDjt>2O0J=7Z#D=i^ zo1JIP1!GmfmrcS!G2 zJcUnj`h9ZrA3Aj|+@vwMd_U~c%U!X+R2m<_^X&%@e>Yfx-;n+%=l?Oae;xk(li|b1 z*Vk-#lD5Q&A_`x|Pcvu9K~jQI6P~aF{iHW)`S+Mq`-AvVkUkJz!Fd$ja;Qz0D{uH- z+>23VaVi*WAdWG&ym-VBomixJ+8x|87gDdz036 zQ>%w_c%YmCFL_5dhUdmIwLPCvCQ{!#2=J>a%f47k7&+QW&7ui*pK03IPF~i1kPgzH z_5B@ym&*)38$<2|<#DugD25336v3SH-u-xlT`UAs;ZV%-!tg;%+*^gSU%ITla6E@X zG9BHhOMHkVz5UJn*4VkN=KQvMxidIh0nmp|NqJEnt9Nb-vgnFW2eng=S6H|J^^1Y7 zRcB9%hlhG?dr6t(vlhxL5V@7fp>SwcIJ4i1!(Q*a_afk@fV9WqS7t>==bci@qV?&O zgV68w81xiJ%5|@;aYPJn^*Na&slK?O%o4qO z@oC@r$LE(`aRsd;?|$z*XA8n@X`(j`?}8@wPlo!t_V&;Er~XC{4k;H z@u|970=NxyCO-Jr;FZwBO|s&ZVCc);nNC=CY&~$4Vv^4tvm~=liyBA}2_;6y`undR z@WKcx{?6^k1f)Ml$mgMVebHSZDH&}0G_~nOn->an?utPFz(9`U6?{1wJ2oLuGxwus zJF2`33?hTi;@k3VUDg}-hZ6R;YoPUUl0!fjYJ5iYHuRa? zTYEaVWmu-!u2ohs>BbsYwEg9$Z@}u*QVM#nqQ(kI8I;JbTN)4D39eA^@9x&0$n^dH2bJojRP&L;PQ{l8-;QL@3^~do_e%v2wER>r? ziuMtYuO(4|+bH*M3;SQb?cASW0s)#Dm8Slio`JAVR4U*xJ0+M<=R=vZb#8cEZf>>jlLcl_v{ac6#x z)`Tc~%)_v|ERGW95HMpf8qTQUD@?woZ>NA~atBv!RWQR3*mF zrEX;*dgT`*vid3E>+ACEb`KULx|=?9w05LR?F1GnrcZFvj9Ad_sSRrh@F^3IGAjvR zymfV7WZCDq<_0wSJkO#2Y^BI1l3-xRW=qU0P=a zZ~CD4BxQUcz)$9b32c8OL0(-c0bUy%z)}MUnnnrsh|<}we2TlVB&G`XoV>zAyU$&q84zWY z__|WuSM}ruUkmhKp&4jT|D6i_ZdrlNR_-U32?J4|(;apSwWTXZ{QYx`nYf^(UiV9j z(4T4kD9p1<5iuI(*S9n2P(~q;FA1nr_rTL%ks#CO5y0&3REJPYOka%oUED`$wUIYI zX&Pj_{nqrZZ^s~yJLab5eUp#xxCtReqwZJrN4-%$r^X(arB)J}_M6t*E(BscH-}|2 z_A=D+Uj!edGg}9$=9^22ye2#sjJcP&JRsvwek?$8EO&P;sUJICItU%FZ#h9aLMo3J zyZ?)*1eJNI{-d=WlzPiTV>%kZLgLDlvBUk+JUxJronJcVo zn~_$VhuZS-g5M z4 z2_%cLy4|-tLq(bI)+a_~XN6oD1sUJE`g}!}&-belxDviFHPq_DAvo_`73$E>%Ne=? ztj8%-gY5kD%Jk8ZuL~u&wh2PkCq1mq$KjPMdwNa5l-SNIC!xnnna6K~6CUmLZ;~s@ zq$?f|R}e~*JI<;T^Ir~ke?RVM>={b1Ca=U{39n|0%K(R^3+6BrYnA*ysw z?aVHE+ojnUiT?%KRws?vSH|1kNwdYkKP`I@i$wpM#^=A53OE(VtwKfhPG98BYJR@$ z?D5oc-u^Mdh4QOFKPpcRedkuYrJ%t=Aq@8*>K>QgH*^LJ=YVV=4TbksxMtVmZ~{pU z>QGMES~PL1?Mmru_uBcs2BCuu1$zFHK+H3(KJBQcXKw(@iO(4hwrH5Kkgi*K9da_W zV*1O*Kv*z_4!X9v-qT?_>{>Lr5tTpHbDS|VSp69`Y&Koh*tm4~9PjO~NmX865x8-B zU!crlqQ6Kj-`3Wp4a*7SL2{i0rTCaTxX{vUj~*$QXqK(+Wf1LFb`QIbmo81JcgnBan7;N&D&Wm`+Y@qGX_6T z7hR5rs|)p}2U?ql^PhUnL>Q%nT4-aMCN zd-(Jr+)gi6&(hk;e`%YVDfx%u89+{~pFQca06f;sKq3i0FtM)p9j;i}HA}(Ev+P=0 zTKFC9fieb)j(cl99BT*fu4N;59$tO*Ar<5`&QH9+dxB-k&-t)?M-%Ly^hDpa7TkUN z6c;AX+u1n-90(n7D2NM%i9b`mt0uLys?{mo{HtcN-o3I<^?;9J`WJAEVz7j&xOSNzQd3%*FAXKZq|-Vr-z#p>S)-? z^0bfJyHBkBqTzedzdp7-A2@gKy%=p@3;z72-+}x;0oMQO0Q_#RgDBl|4-ua~22iHy z_-9Z0Ju3TZRD(kR@2rAb`c&aTs0Ug$`bkdy6Q#*U8AVH~u97Sb$g_xOe0Keav&_u2 z*I790_3H;AbE9|{9;s;JvvN@m+L)S8stq4T_?bRcnK344sea~hP<_B3_Dt~oaf3(b zymshrnRNiDLi=o~M8DDl6k#hKaC0};ImrRYm-Jz^Nb+l-PTxNy#5FLG5F*2@dh4fA zLP6tRMqP#(d>t%oV)Zy)mQJrC9B<-hLuR@IY|@su-+`gNI? znC561*bmR5S#oHfqLy}t5rwq{3R@0NT8gnXb|FLciYx?}hl@Y9=UJ(7>Bc%|Nk>B) zP9C2l2QV%A40{zZ8Tai(E^4XY?tk;_R(E?$%4a50-JMm<{vBo!Gb>`L6k>I>v0$(+ zZCQ^_Zx?#v7bNe$(L8?zI1&KO(40fAerk8yr4lhps_@9U^}ukL9QjDMTmDefhGNkG8oI@*+Q5k^HML&z+ zy3BH~?Yz%>G0n7#9W2j99slI&NaH?Hpk}0^|Ml`;u%iEA-T9A;x^WI!`wjj1hsvJh;>q_FomPt zn_Q(tj0M0nTtXoNo=InKbvMN>Cf#Dj1y&ExOW zaKbb*2+rW`SuELq8g^=^4}N~{dJ06^zE+3fb*P8akgSb(f+O|L zph_`(ykx9TFG$$>%g;kQ=+(zw3?r<_e1Z{b$cUPnc^vOF?!s@sw$=LAyyFQt!VetY zgdQB|7N-|VZcol0VXP^89t|%^uN{&CPR{%-rt#D;Nkch048$X4m{2)6C zYH@$M_;I-O3kFR*MYP4Fx;s}2vI6fT#C;)<_L$fp6tT{q|5^imGUmWTKXcMd06~W?22vFW2Q8l_g>GVZd_)0 z{^y|Li(^9vupbE;PYCBf76W>q|GmGRdjeLr#P|V?bAQ|)^3t!XtiY@;3%g1kT))10 zMmA!!Va$jr3RGY&E-{CUB8+aC6Z7#KKPKgW4NSIdi%=Huw0=21RE7a1mN@kepDhrCFzkK)l!i6;owHlY{S z!l~85`t&!uY#<{QW0IxSi+a{KSJzL3n+${Qm3Za~SqimN7#DR@6A7r^c9S;@5e!D7B)*zl{p!uw}4e;xN^6c)yk z#)Z@E!^tZ~_fZ*)jEl;sY8wL;4t8Cg%kqw<(sEPsd%TKAF3^o;(%f9Lx3jjq_2Ju= z6V}j!7BbcZpM%CUyZX4b8x1?2oQyr?)(RW94xaXu8&wEa3Z8#oD6z~&BM}VNpJn`y z8XsLe!JhP~FYPp#LsFNOU`s01A@Kse2F+bUOzC{FZ~o-tj&<`;+{w>9n;Lx16KiXK zo9BkUNzGQ7BkEljK{%M;2hvbf=B2C`XPQ|;le>A2P_7M<~U$&8Y8{?@7nZ~~dR3|i<# z@CV#F|FPBocPQxk-Ue>2Rbelu5@>S(0lG@cKIhqfJx8B|wBp&JfckuMYe6Lf@wT&b zpi-~Rw~kdUEWW*nzV?+3`n&dPNDb&He)L*S2fO+=dUy&Q#5Ett#`>R3NctGNo)Y2! zR|qg0M5z^#SIBM1>VK!t!1Cr>FLXAk9hOkAv=h$j4o`I`QLP@^JYXbAA&KFpGb6re z(s-`-S$eA6&S`Ik8EN8jNob0|7mdEz^V7N0{@I7JC|{*mea?1ty~n z16xEKE`&8L&xBQ;?p6Xz2>4Y7`1n<4ehf-eaSL7Sanv?@CXahzV@%pD^rs7&xIR=oK!|C)Rdf*em?LmeJ?$+~?0-{8toz?l<4ge=l&3{N1}h z86ztqmvx6(!9(j3r!AeGu&?ZX?M^|DN@vO#o=5@6S0iNM0l z>-YVyGs4$hW>1L5JCQB#VJa^bIF}7T>N=RS=R+*}qp!4qA2d4}` zZ)OwJ=#M%jS>7u&S#i#?NhhLs^^@ zVX;GU5-SI84iY#VoY>kt{Q|$|B}}`3mCnktlEJ|m{6pPMj5nCWgC{@USa2>{H8Az| z$BUrtKWP^|z+#!;tKB3+U>hGg3v5za6@7LZ9M5`ODqY4c-pXPjW#~K?jRweX}KW`2OWx<@9T2n4^ zwe{{Mp+dT2m|b_gWRkC6JYgiLdStASHz#x~5ijR~E1^5lJ%|O71{AMJ>G~mAf8^f zl4Ba=P6}-G8_w9jTqB5rcgYzHWG#}kqzjh3 zehsMS@|BGZ>Uo9)th{a6x&WNi9!$yOjK2L)jbfR<<5RBxQG<_LwE+0*GIhCHIl{!u z=ERVH(&sQ2wQ&0mj__t0({(4gHM|cU5BI^w`>BGfsYPfTBmqlZEZ0C5VP9Ggmgg-Jp{RM1DJ>T6FcG>DSjyL4w(-N21RleBJ7?~GgB$RV(yO~AMG|*SBsJ_!*&z?KCaq4 za*;m8g6Yd{hqg%L>Gn;!jqKyUr)8HWm1j7ya`NaV7+<}`BFN1PBe;*Hlr@a{**8}d zAOaIUN5RY?4z=OZfK_0d2RU(eZ$m`kV30T09D*#j6|`ke<$_%^;d}P!J>w6XFpxxP zys!GNYpftMSH9|-fBTL<&;7~x@9Te`|9B{Fr}2U7DT6bI;5gxQ5ZAVB6=Z+9GN){bPH5lk(kHu3DO%P`Ho@yO@MH;Vo{9`s5Z0LEguR-5mY3L3>G)W+Rzc^C<{xLY$95yZQ>@+RgAi@fr z%0?NLb?k4wbgQmO9S;KDO4Il~2ntre?jg@L{n&tIWph1!WAk=Q(e=1Ed*@Y~<|>$# z<^+l*pNB_TW5L{--ZfLp)kW7(8^lQ%yuu7iC4)o(eA0R%_@;y2IQhdgtTD7)&?Tg{ToXyKWx6-H2Ugl?mTt?a|_7)ayV}2dj1Rkku9aj>p zOI-8rO?b973)F8{%~ni2SEz4^8Y+L1l~1Z)V}tK3<~Qt!54zrIlib?4!a31p)Zc@~ zm5>AMJY=eeS?}zLw<$gNW|Hc+)O!gopnbT#P~EwlY6a{8_d$4JBjomHY{$mk`rrVa z1VW}B$Z55cV6{Qytqfk=mzoV;zkf3PX{)M|=A{^k1dUr`S8R2HHU{%>ZfXtX3OvACUyk=TG)t%kQ&HqnO27#^=^qHskzOY z$9paV!cb$Ry}UKTlsa(5$t81f!c&wUeZ6wJ%E|*I@Wf>WlVm*tDLClq>864wq1{Z? znC3;yr56t-J}QM>Q?-k^m2zQ;R-&(^_4Li?tUmDZ$r*%J=6C!G?mB<|b|e4CsnFA( zW0!gIn&#noW!}1INJoEr`>%FWYnCj9fDcH`oa@E&-=#pQK+T&&=Q4_hecwn*X-F*k zmAwl`SbVQbSvL{dBA(=aDB=hq$1~>ye*KaQ6Ir@`olgGjXRR`jW>Idcc4ler`y@_S z#f@3MMFNtwPoq}S-u`u_wV7jM`pBSqTH{zA`~bvngIUN31XbkDzP3(0I7wg`(an!V zk<_mY=;<-q>w+A(Q#Q592NHof+ClPMnrL0pz63O2E7Ilqbw74?_`y$-$HXN23iNsm z$i8Idu3$Ye0+e8^dTRB68s2xY9`bWP*Q$w5o!x6g-e}AO(@<;dk;7s`el>4SP=_H@ z-r4`)dkpKi+|j8|hM+W?&NoPD6iQdW^b*lYon@V6W1}bNg7LUkjU@v^Vj1Z!1SKh!2+ z2J3`0A7D^?ujRHYDOk!_;&_~W^&WaNwA15kMLj2UQMD|Ba+n+Xa}$)1@5ggC0N%3! za{GVpKo`Yepz!XMhJHk$V%jz5A{XtpxgYcDaVXQmI+u{GU$5v|nmh)-nIZ3Jn%%_T ze^CTP|K3y{FvjbGx$)Q17m=5kcm=ClnWSV?{*}}G4qCzA{~L##W50V>DeB^lcU_6b zhZ9gkI4qm^ zs;GhuE(?fi7`7Z`Dn4^F0jGzI=Sk3$Vah!8tQR0(;ZTsNmzY8x^r~y@Ue5lcr}0|O z*$BQ7QoH|!<8XCB%fNU$Nw9luon2$74{ZTuiMvuGsdX`qBU@wJ=%z(r20uwFfd@h= z>;-}NZY8P3LxOwKo4`s{Zl;c(FVa>r{YOe6@SW?ju8x$hkljnM?ku;w9dj;Ly=-^! z)ccwI8tS%Sp|MQ$g@^diB*BhmRskgvLOyDdlt-AP$%wj3QB=U9#`mBwcczlQL3}@EE#g z3e=+;97Lw>gx8eNzP+$h=7S@D1B!D)EBbxnghl4tYg|}AMRB=S^H^Rr$-7L;&lrE6 z)WtvzMjqz{T&q;WFN-nEJ^;}|zn#QCtKi=k|31G1(cj>@e&b<8o%xzkZH<#Z*1>a~ zSbSWz_h6Dym0L3@GbVI``GOLCnF-S+xZ4Ndeh>_Yfw0h&n`j573||D*9*#_#k546_ ziawLr&1MpmQkfgD)4&@-sRtHFAa1|gcl@k!V{-cT^hKyH#>0-7{Q zg(}PYF{F+}I5x2wGc{43QX{BeZaPt;Z<-BZ)f{?d1&kNDc3p9(F77|Z7?T<%q1R-k z<&UOZwr562vy@7>aSYjR4doF!-nhy(6*6ISb0Ki)S4ScSE?Q|YuLOmU_B4)meBOAC ziHtDMnV?rl?s&C{RrX` zIj7kAX%2@ch@fwM}(X|uKi1rGDfpW$=eB2g-Vr{pC#oD%WYmU;+ z-_YozV zuVg*4TI~F}M_kg_KI#5`$5YKaYwI!KtaWVmr~^raJgZob&6G9&O%jFA{o>`hvbTAb zk=cm_`*AMg?#D~@Epxq4g=#`l#C-DuJLQbP5Ht^MPmz9oOvU)lk^RGglnJwm%=#{v0>am7tPf;GvD<(eRDkr}IVTm+<4P@>~SW zHAZy>3QFAIq_~c#(&{P3A;HnhOJ&JF#)8~Xo|fn8x5MSUrQ^JPG3YGk15cyIq+~{ELA1@}=jb6stpOUnj`@{KUR^fHRDLVW zttP7Z+A;R}-pPfX_QJW1zdS%~r@c<#G`N{8F#BtbbyhBzxw0f!iH1hD!;3u2?Cp{Pt0u;Z5i7jI7uzZvns9SbN;3w(jpA6`7t^)nez@ zwsoqfk55}8Lq#Nr%SG6el(I{jjLJ5TSTu%=m>Gu9rj1KzsPGtVX2Yb2T;;}{m--rcCU;ek40dp#-M4vTMYInB zx$Wdldx3OhwQ+s6mB;gHGb%29#u&NHvL3BTzvHmxcAHNGcg9IrH02W6-AnLX{W2;IG+D1KWHw?8%x&&hRxSg4Oz z28MVoc~}1$c)LmEZ1V%p2Fkz*SH6FHk7VOk3rydkQ+tpI#@vP}5rGeM;|pde3(Y&a z`D@>V-$Yc!v|5Ue6F#cEWlDC+tcfa@fUpbniFTeQ+`{lZ%TtTK4!-H%S;pOeoejX# z|6WfnKKUndJbyQjd++Z-!ru)R(zTy^ZH65*Gv4UxhXaE6LawWgGQPUbX^v6-S}n7+ zC=lggX`IT_y5eb_;4t)|>#68UF%#&btY0qHp3uDv+^nGN0h9yrl5tSB(58BKFzE^%~B;}3S5x7_wb-X z`88)7e@6ro$wjLK$cbgqL}s^z$vdl!vBCx_bdDQXr7Kw9zYWqXMF~vieMe>!`~}$uzBoOjWUT@hOW33F{I9i5V3hKti zO~V-#0+&53v7ysp*aP{)Rf*vF$mzkq?$VcO4IvSOm>-{eCr-C@3|;NPIw)XYqqG#= zDUr!t`sRm<@%yp(`(DBmA63Gbkjgg*Dkf$~L2&yAV*uq>478x9XFd1d1*!j6$NbM* zzsr5@E;l!*RZbu8OUIcTOe9R6<++@|*@r(Ac6-;RbPDt6-ty~s+Ii(|V^PgC;Hs*W zvA?#V>xN+c+_zk)RT_0z$Y<9oBg zJH|V`$|9^~(Xa`XRV~*1*1Prmh-f5NBv`sli1|GXC?d?%eEL%&40jg1;&KM?z|3GTFuBtKTxiz4FFg5Z}y>dVsxnhFCns>l3vrM}`2o-ED$j6+F*pvW^um9P$O9w%}xFl>~Xl^BJz0ZHn;&bQ^Gcbcd&}Trmast z5w~99^@Mrgzg7?%Eos~Q-2cWBoVJOuL&ZB2<*h@>k^aDz4}6#~`xxxYNx_%5SCyFz zlo>Nk_|?(%{!WIj-QIBn10hJO2|qCi+*O&%rS;O5R-ID#b)nx;AZxj3=Y0n=g?8^& zHrAy0B{$f&`pExzz(x5y4{8fowU`-M^w?if^X(}?06d2PJQ!sTq>MC?@4F9_hnVSpQAv{Y8VISqX2Jj#|vqa zGP%Xxbi%|zf8X;Pfq@?7OTC&T9*ES}t})?&%f%tX+& zXTIjX8~P?FiWWqkuNrw&5lhNvqN<%ge4?2Xk`&V~Ic7MYbSSjdaVX^A?4D`MCr9oS zWD{u4EoH20_F=($b$;A?_OzabSH=F~;#>9jRJ7>Eg;A3akoie2b6f1;|MUmluJu0}#$(jn70nH@-< zRrk$$P&bS+7H>$SiKPpTalpJcP2vsnkcNT(&4L3>B5UG2(Bn^Rw8R{P0HRT@;(}da zJPJXrh(QQPg^36F5Hka82kDBPZ*5!fPmHgcHR{1f$TLlJ>7;`U?D+eJ%1kObM@F5T z-3pe|s)7^BpWana5l`hJ`!X&8Z7_G~He?&7!cuX{wbU-MP*r8Vi)9lBcBRM16xQwh zcwJF@(AU3_ELhCI82rnjI@&3TQ=;!>-6(hcHv%~Nvy{nNyGosGb?wmkq3xKKIGZdz z9W6xcBj>$9HQWu?KW%03pc@tP9&HNTdQ;l zb|t<4Vc>|=Xwa3>&}gCN_$VOZ^}cJ`4c%Q^w&HrnGBo;ix}(%)geVcu$f^qddu>G) zD?76Q`_}#RnV^x|X;l*|X7T*%<9S@7am)J>AvrIIGw=w)BZQL=e#J3{&i_bK5K^@P zt2KdR<%QF$ZHD=2X@0Z+x5gCh<(4 z1us`vcr}StROdk~Bw*G@>V8qVI3PFUP*ze*MWp?v(3=33jsEwu#N}!^kUgENjiIolZYYwkWibjvt zjPG_7pI_d78>7+D*ZBC?G`y>Fx7yB|16OylbHfzZI$Jtq!1#GFt(746z5p)jT^quCW+Nh=k-m_u_!eG0d_dRCiwuTlG5Hx^#|;+ z#bH&_X(?!BFd1cPwAIWfmE0A2ofPn-q-t)y7=0ZLd5Ih*jRMm+5;MBlBIlt#qF5^U z$@i8NF9UbZzV&^kkoJWI#eR18q=*rA(YQ*-Al+o1{)!G7eiwL*bbv@w}|> zoop)G1^7G{c3B14c!jq2+U^Ik%9k2Fzy=FK+VeM;_D&O`f}EJMt*WK>VrvBo>l`}2 zmgEmwj<35+y3I#SUxLU*xfKOgb{nTV%b0fXbvdwOr-U@=ZVGUw0oI6Ot)z1^{JS^2 zO`Z1?rC#)pDo+l$C&hJoD|CnU2k$#9?0H(gIuISZ%aGgG>^ir+{KJ8Al{cWq;0+s{ z-%Sh=qCv0&(fkf2XX)GMv$oY;8vq&oGoacpuhkW&?s|g`3>6pHG@5;xj zEP9@&KM^y0^z&yG6P)8sS{_GqfBK8u91xpteKg%Hp!N-3`uZd#@K*R$kM*N&Sl*6# zkq&9(&vp>On#m7>t+}!sdY`^KCHPqM{Rd{#oty!iN17fm?1q`%B3oSs#suN`Zrb(o zG)p2Uak4w&*j~^*df5UxKzFq!~c5Z*ds_K?c z`1X-RXc|G{r*OQqr0|H(1=u;ySzPyDb`R^1+n>&>uj!8;)NY>NV6EM*s;Jur?#~Yr zYGiA67PJMqDNeVtgueD#vL8RMPU7Jaz^BnxZhx-d^Y1dlSAB@E$|mqsHIiuZ$vuvb(u$Wkf%i27ysX=Kc zt=Zd$3mVjt_}NogqQ1z9TM!-NA9ejoa1+5{G^jv7N2LK=pEFNEp?g)NaGcWG)^T<4 zi7wGQIvEq`N0_wK0rFYoIcWr`4`JebrzF9-5`zG7S_^=s38$Z?Jm1cGFYA=MFNGrw$^PT~|)JdaR4T)>d0pb-^D< z)7U&%c@#n&jmV&t{+Jv|ka{*pXU>47kXCz_9YXPVe@51aPn1 zZ<(8`%sfVhlfR=wNuE2XOeAMYhzq|bv^Uy9+pWIcLQj|Mj@l$s+q}m|4&Bm@)2vWpic2dUTBHgTP5o;rWo=$=TF>KF#sz^9;Dm1{Gzzr?Y}aSge~0 zeYO^@SjiLhmN7?fYUsU43B9xZ$g+2FJ?kS&PL5-`wesUbU5eF%#P7tQBC-U{?gme- zr2Bt;ijfWwke0gRWMkA**1F`vyP{@4zk;n$5unHKo`*ow{4_b~;CMD7B9)!4s^xaH z7cauM|FXzFdbl0#nVo2&ob9ChFt@BKN9^;%b=pB<4*VpQ81%_J<+8L)*$k&Y^+&9i zgz3B4DPY2!-|M24ys&;5;k}`Kv3z+ZX*=O6Z8zew8jIksV!$FXf;+kXnVXZb)2;t` zz}S^sAC+N4-(S=mMaBJ7XBK_d*f z?DdMv-)H3P_;Z>1+ncfM!x{X6YzDls}REJ(7m#)hD z_4Mo_2@Dp}^u^lJiIAh@hoNBfgJ21~doi@ZQO585zd?|u%Je;(5}Ix#?G7603s zH};@9qJ?n3YU|9?dQ7a-ojIWC>`cch7fiDd^+)%nDRU_$JjPI(WKWY^4=WL+hxO+2LO*KRG)3YPG#CvBGYAs@mH5+kS*?*O zOYOyaq5Ju~i%zAtoSDZ`zQKb2nf~-J*vhN!eX!b2x4pGZ*x#02%H+h!DZ5(~+B*_k zd!xU%b?<0E{9UEFa*Fp^_N=5r=>xjl;9=YPh0${ZoOT%tr|*6gg7>)z>YCUcuw*AP_{plq6pX*iaLXJfC*3>8B?r5S5&qoP#E*Vc{_)gtb$djOqoN`HYi!8D%B;ENbn= zMILU$m*?sAPFZCKZdw~HK!cR{oYxny(Yj^32#Fz!+s_2XR=+ZEW z_DpIyVRN#gu57E^d5Y{J7;W&#fGGES+F)J@L+qv?sHhaJ#R`Qgp?@!!yLNj<2z21L zDw@NnqR@9zA$U^k#iTu7Xq-MXJa;0ru{}Hkp-T!j&l{**Ex>NavJQkSu}mY=e*HNs z+}LdP-EiGW`NgO8y}cj4W@ZJGu7g8eCN7%-v01U&!v(H~xx=4XHxt7p1uypMLXSr_ zoTrUFQ#~(KtgOByny9%I43aN7z9^dP+r;(LTM2iWa@f3B>}wwIrj1htr~A6C3+a$Ji%rF#s)2`< zBmqH^t-3BrRgz#)uZq9g5b$i}JTzo$qO~58#`GY+JnHifh~#Q!Y(q_Z;+sm_K|xjb zb#n9h7_&mMkc+ni(|dory3?lz6&^U8E;Z*H9__{Oo!n_x8KLk#2NSr__{NZ`TwPSN zD7_8-Z8`BEQ38{P(qVn1{v%S+58~N7{b=zM8DL*Hil}L%gRsG1UBcQ@E)2>ZF7e*~ zJ*`wfh(nwW!wxS0Wo!2-#);NKkt@R>Ze$tlR<+Hz_6-oQwmz%h@-%SzH1cfma#`q| zsf`f)bZR&sM6Ha|W!&&4Q&MWj@h z*IPYaVia95cQ8<5HwlaL3vQ}3r)gJ8$A3J?5OrTcb4ZrWmb(S|0{FoFQ*W?MlBf7d z6pTn{t}rEhjWBQoIxB+O9D@WdEF41YZchElmpWkN2XXn=U~1}WXw1f-441Y^(ep$GtP`)saBR^iIwcxx(5WoQXe~0ct=#ma#+kL^qsmNb>*g(4 zWR&yOOyd_h(VwkP1(XK&<@Bw825#Dlza;60<;VGF{>fLjbDQrh{D6R$HE#=mnR!;S zaLHtTKF)_}PK0^HFLr0|OVVe_XFYX$!8m-!$%G?CGtWwzmi@hjVhfD*;j{N#N?{_8 zp7;2PrQ?&ek3b+kY6%Rh67T2&q;n7%Rp+v*z*(slA02OF>gRqnBCGXqYy`{t(mwh| z&Dovl86UkSS zAtGbU`}%`|Fzi)br|~Ze8K$pI7*>E`-v3*vL81>S2|+?)j}(sf*_`@W2#)*6ck}>K zL-Ny+=D5#g`420q^Bp%6?eyzQ`T3^Zk24U};{By3TDq}0U6^(=NPT-OwYg$z&u^UTO|Si#=;|uC7|J9Glx#QI*g1%kuUOpM8#&mh zi|Kto5*P3?O0^Dtx(Qbwl=eJD)EkxQ@Q`Ai_Y0leR|l)-RgU{(*eURfo};bGTiq!# z#pR>cwowWnKYqMBEVG#Pbn+lV#L8BaOU=!u>Jx`KkETkMW?CD1c}#4nbY92UXiik7 z7B16(xnH(Nm{xmj#m;1vJtj=hbQXO z1lr83lQqoPOkMQJ0$yuf>UvK5C(K1ms{Pqr2R$XbMV`7))r~1h_-t*VSEqu|#Xv*Z zD$@JT_!QX~1&$+McC+LB+}T98_bz#tJgDxyRp7u+vn90gsToPjfpY~DiA=t&HnFlM zbZBtwSY=d2P}AdRDY&um8A*S;gRV7w(y0<(IdE&93i0*u$eICw1tYH}J zmgv?%x=3meaZ{~T>62JE88)zt|JybmiPNiOj1+|=@Sra!*iRtBVq(~>QJ;F>-`S}N zTLoJZVos70J(_!GMootlPE~cwb4g?RLxaOb2v63Xt=lu4a;Bs(cES$CI&x3fv_w{gX1V`*dZP zBAM&mXuLM-bnzGRmURDK^M$_RxPS@6q(lWW3#rMe&C02@u`%oM@#&oy)_X_uDISe3 z-rFP-r{m8Mn>sHJw1(3C$+`3$>>slil8v9j5nemZy7f-G)noYuvi4s+gspYzoCiVB z$_@m}_>|z*a0+~7$Z&1cH+IyJ#iC-;e7f(s#aM%6%2dgq&GD9RJ?8|)nB~n1{i>O* zqk)-oBNtnJ7dG-$Ecc7O>2toq$-49!(n`M>oYatzkNZ0(`Uq_F(`c9S zsoi>+%c(~-pIpVbfPmmDFEb&m@%7J>mVxZy?=pwv301$?Z0hVR&D8d6+I%anXQeG2 zqokI|-PfrrV3&LUnX*r%upelePO;i8I+_ESZZoUX7Y|Oy6EA!>&s%JD;iH#F_3#Us z^;t>p*$VIe|JQj7SHQls!SidyDgPlF%x-tEOe+3qLhD^q!Mu09m6gHJ7O1@ zP44WW+f2h9axS+{|_xBrB*uur@T5H{RtFpT59M`+lf5l;j4vy_@yKs$-?HPKMYp>~ zQljRxt4?>+#7&fl41v1nml;jx^v!!eE|VdHdTeTp0CjRIQ&m%gC5yBC5UWbpsS+u{ zK=9JC&n6ad4+W)xzOL^c`j<_3OuF>kaah@Lw$%y>10vi+Yt_ zoeKv&4jf&#Dey_IK?IsN=GnHeMdm zmoJ!k&sV@39aWe7BHG~1*|m(r#_PY#+0{70-ITPNn*#i;xNL9F_s!BPPzu5q7+Guc z7=}z|F;xd$PtHafVmkyc*No(31^5KG$iq#<^Eu4hw6X_X4ZaoGe57Q|l4-vAn-i70# z-~l|ND5i@AlcBuPNY6{>XI-TU_~ltCuO=SdsV2^w%*?c6UaqlJTHVLgYg6%~H#Bf; zG6DpTrx2=Oqex&e6-{V;_j`X>9~j(=xIB9&=A;>2sv`b?@wxQS!B4I_11qb3p<}yC zzFVR9J-GC?W9rYu`ei-$mIHH|`{2F`bpy7yfGhMeuVZ1&uFlAAe)v{TTCm{hw!+7x zr1%sHkIhv(kFBlj-I%A6feNujtNn|MyhVKbfx4i}Q@R9bT6P$VV09p?_84@ySX9<3GV#k%q*e|vQr@Mz$@&gA4%vK08(c>UZ( zEo+VEX=b>$y36aOqq8Q7to5;mH)%S2yaK&c)~+XWz_-sMIp1Sz!*Z?hsR<_s&$Jxi zVXuo-rbSLujvt8o$JvEuJ@i%Ovy9) z-Qt2iCIyf6ZZWfX7E--!zA&0;;iI*u+DI70xv2Q-I&Wm-j)~lOqh-uNvSJ7h` zEK>7dvVKD7LGFFI2_K%@lgf3GR^@kb;O9(~E$b_<(bFbk)P`%{2+UHLgnO>p!H>9- z`7b9->zRodhgsHhL;5~(9Qq2KwhkTi6rPP0epr+_H`rUSn%)_m$>#ImoARzGoUWRY zq&jPLsXJv%cvN+Hya*z7hJZ-n`-PWt&q|tA=uSeZyq1njsyRiM+qGFwQ!d)5+%L9X zz!$Zro%dfVB)|*z&~5tsQ@mE`!N%sgy9AC)IFetS0 zd}V26rCvSE7SC+GzHwYZHMPGri+k3Yb@*p_#-c=0htcCyJ6Dy`EVRv)tiwHoX9$VU zH-Njg7JbKh`irgMCfx^vfSYO>pgXR3S&IF)7yd6Y$>I2TO6ejHU^FAO`d&P-cNZ=`1B=b=0v0>)mdUYwhx&KzmJ16UP zqy)WTMnZ@v&^c(HOd+$yVU{pj-5*mG13iUH*}BIeyu#@45Az>T*=y{bHU31b{9mX{_X$_G;wi6g--{pQ`m- zlqR6OJ2|=1VfXvE%f`{X{so@|$qUt>xK(8=cy^!y@NPNwTh@Y8)LjDb1$o;`!4)rGQ zl|+;Q&NYaP!q}R@)PVQ*Ke%o8=TB9lk*K@sgjWY7AN`w`g7Y;uB?l8cFjN{cAQlxr zi3MZad6d_zk(MAI=T!G7r&C@iZZ+1K4?D3@jwH)$W-L5WEmxYmp8JkyNAt2jd#Q2$ zK()}}?uLM;aV&7L=xM@#Cx7(uAxBbBq)YwR+p~u(NhFJw{ z-gp;%cw?hvWDL|IWU2!Xi@LiNz6fURQv@?qU6d_sIgqNYV% z%}lLY!D$+r1;fR8tDcS<3-dN$YY<__&)(hpLMLtdk5T-$$CWUwmO~q9_NF{=Pe5KyR)I$KPh-D2f${_CNf4a zkNWm91;)K>Jh;Y>hk90HcJ$N3ZZeflJvPw6EhMSImLo}6v0?yIk+7Fs<9i%4!DWM0 z6WG(PK|_s4piC>KwT#zCNne!Iw5#!Y@;I^kxNED9Kk^PS=(k|2xM4U)PJODxDGTL^ z%kqueNDByJ6bGdEB!|<2AxtC=C0IxANfW;nw1kgOt2^w{F_@E6K&i(;Ml|!gT~F$v z@wzji=*o}LJkGJZ(Xm~Nu^s&_hKRemJW$+Z{%Ddg^o;cMXEw4C-3r*D!Q~dsbp$Jw zB`t?G#F)ABA2Xlgu;*e9r&P0)l{F@18xYTFt`0WpUan1Fh`}c#&!!{m$_2cwYjbM$ z$84tEPTd-NQ>SY$qmeu0_;>qiNhY{?pV+-qvp@IeGc0jB+rmuz#`ZC+bbdt0{Z-5A z^l1bl8Lotn;Za>lb$(=HxO|aCwUm?JF+Z`txS`Q$M%S3?saVA?z!ua7w(7KGWfhCq zmUG8&Fb4J)!EvWA^UdfLJkO8K4u0Nuv&Q;)19%`9nsKzO)^J@^nA*<8opKSZkJ=G! z4X6VV$-)yWD1-!h{Y8PVI7g(+xRB|Xr%6gmp)W4z4z*!w-}fy4C{S~0Pn_r+j7_!| zwDeUZocL;Zc{A=?(_I!YWzLva)WF$WCxZyuq$G$2OChko|B>wc-vmP_c|s}S!lGi= zC;|ozw<+Dl`iK+t%)5zYNJ35A&(@e&)K%Y^SZub-yRVla-j?G!t?;`!nsO(d{3$s# zP{c_Rbo>2t|GwR2TQ1JQ&lNcv7qb@i?ubTno%R>AV>79v%SF8VrmK}SbH#P)miu1w z$KzZ&e56NHeBD-vcwiI;H_YxVw_V$`Tn!KI+gnLZT6Th8CQfq;3H9EoRiAd%1qMs* zr^zYjYgu)tlU)4n4u2NwPcjNN_Xdly5c#!jJ(KA-I_Aep=p((hmc4KVPX?yX|4?Ct ze$wx(*0Ly=X0h9!RA}jvm%Y3R5EnG8z>8iDUws=@!C^_D-G*;9GmnveCM;f zRJ2Y%o%Ws?D@)|{-`{?EtDmx@gfQ2#;G?{?(ZZa={KEb!@hY!P^;BE4e?5HDCHdpW z3?^q?M2NHJSM5k#XHI(h#oU4dlI&Fyz%oPc3AkGqiTE?CfmNypaT+fp?h3oDh^wtd`~ zYw!b0#~>-GB_*I$VpxILnqZ=>sENSJ`m2OLvzFshFa4it+G~B180eJ$t5zaq8UrF# z4@v=#ih|s}jW3`zNBZfRsBj?uBkRZFp$yNPnAH+ZtF?)bFLHwSAKh6$UMx`}>3*%* zs+6}Xu0-5uU6TDHeDX&kYu%p}`5v{`a@8Dzt%mP&!XiD@&X!-OXYwiYWMu28 zS)I-+s$tDH20OiARL-({XR7#t*vKWNenW)B3%n-HN@0G)AU41xJ&G!C}3k4Hn(<{DR!@7tBi z)U7UTfStsIz!Am%e#K!%x%zYB!J+L@|D@#t+q$hT+^JV5zh9@fwJKb6*6#!s-gCR? zl7kOgtK)mP)F0kYPYOPSU-GefEqVaQMK5$qcJ^joz|VGMROxX78wH2tJZA^hPf1TM zdgo_Ni@8QUw=Ooh-rad5a(@{w8X}-I@a3zBKL&Z;*Y7|hP(iK_`4a;^B-RA1D*Sx> z(4>5>|NVT>{_P}E$m>?5icbkJfftR3-+P}1MxFL7@E-ncNRPq&Ox~X(P7iIX%cmV5 z<}0^yNn84TT7RKdp<8EZ>ti=detq78i<*Bzj zm^;0)Hhc1fNyfK^C{b*b5!i4w6pR-4wtAiPW+hZ{wp;brrdHHn##O^vYpu=rw_o=2 zkd`i}nhbJOF}>bj!7fs8cA+bfJ7nUNq26j(Oc|G}6}nu!9573n;-XyVsnZ#K=&M95 z8#>{-*|Tn?j_u;&-xkrZ7b2Qz<({5b_MxyT%42IOT7+gOHfcGC$)cj{%hvDFqS5AG zU5>+vb~PJq>9>-TlTJ>oW}aq|(0lK9==0Ur^c<#rsA5zf(kWoc z8QpOZz-_?LE)81h{Ujd947kx7BufhB0ZZt?;L6Y+n+!6b)|Nil_L}2Va8Jz=th!r1_rn<7PY_x{($ZiDGM}jOh27BiL?&*wiUa z1K2xxtxtBMl)bsh7LV;e=>B3UPUo-O{=>mK$*sH~(u&7tM&E)H86ms#tL*%~&_!sy z<7yd6&EYC8n4az*NLrps=AL?5oyUK4^h{En?&6FUzP1Km8#ps8=zM;F!yq{(_n`ar ztWvh7s;D44DPo7|o1l48p=FBKLHI3w&)iLINv=Y7_qw>1aK*SErbhg&6jR@p^DF8W z6)sok<*SxP%~CY=e=%_}?uG_}MYaaR{%Cqup~H`9R``SKT1q(l?v86zAUeCXlE+LJ z-R5|Z&ig|3{u)|G-~!0A6pilI7w z>7_9Yy`u)0KT_%a`kf5hQsql8;2WZ1s1T?WR0^pr5u;quGZj1v>;}TeM-d=%g!tfC zsVqf9@RQ#2I*x$YnVF=+PZDXZl|z^x+MEiibaF_#JskD%-)h7q z4BW*E+z}>u*S3+|9~#d}#sB0zmcv*#`&zr;PtnE24-<;4E{B4pe>N5()^Hq?&)&*)+v#XMNtYF4-*JX}TF{ zhY2ij#RJhfEUmvbpj+t}Mm!(}1bkO*#4r?tnTCdj0O=GSNwQalb|}IKl=n~=+{ec+ z2nbMScUoF7=IEiJp-z(w#Gxb`7)gt^ZvGZ)Vk4E>z0-3$HC!Z=C7{PHgI$|*dCv82 zjuYk27)rNR6>9F9I=iaZOG^io`g%jeDQ8`ploS-Y8PbAvm*Ew*`dp;zTFk@k8m==7 z*d@EK1G#K5+=mPA@d)s7{c`Vz1OGa(y>R{~3>dg|7Zc`B92Tc^sRX#oM{JusX{p}x zzLA1fRv&KUaK(y1aU@>sd$M3k2WWF`YIKrx$#fz(;P-l0 z=WYLS=lyrkij*>%H$-L;dgg5W0fs?gi|F0(Y1lr z5X#Is@)AsceJ~2(0V@&U>Pt_mh%exjw{QQqhr|B0pF!UKgkXb1so)S=F=63QKVlx5 zPvZX60UthrTsi1IybNQL2nrgZ=|A*kkWHk+_KUh@@r5B%Gdc1!kD^Rh2xF(WG1RH( zOWmtkdrN!oN7MD|>GYS~B^p&_0*B|r)5V&ZR&;O71gu>8dR{G^iW z(Z`SaWawQHRO5GJL*UKAY!uNZ0dCoPOcP$q1%sA0PVNhPGl+n|;V@@h*#Kao@O^nS zJ~8n01i9-J0fMQtBtOLyO&-dPy*2GUUw<}ySukn+{-$b5cEXhXhd`SBgo0i_qCnp~ z8`0?v9UjZEAI{FNv}_E&g>C33$CuV-mCQH~EEm6Mxj!b801 zP5kkm^!u)k_1}{47!Er)Jlnk7eE~nME}W=!>0Zx0<=m~beDSb7ReQKFk#%ulwcV2A zbB0MLlKPzuRpqV$0IgCZ;YI#us)RCV!TX zV?1gjX6B`(6^ddt&JWjMeHip zZ7*~j*ADBK$WPDKQ`Q5 zS}r;H)6h(ugqQXna3~u0(j~ys_k3`)t(8(mLeaGcMqc`2KT-j}!NkDUqTMqG!WV_$ zO1T6K4B7Rr1+6edH~{s*bF9Zd@ot1YZXgBjOo5Zru*VX&86G!49y}2aeh8w4`T;MM zup2~;G~^MxH4OH<{(PcQx)eejWb05(Vq&LX2?Jy0iHd`4ShzoD!q2U|x6;)=CfUBt zynQ*>0w=y0R)DYUS4>G??k)-`RP54Z)NIYIjWpNDoEU%51vKp*(4ivH zDcwtfZYLUg51Vu3(+_lVz=S3I$(Y@R#RBg|A)9*-IdgCqp{NPPLhhBpc+bEFya9t2 zLwL}E`$YVor0J0Nq())*7@)-gt)NE{pr9zC1-zl5j!qRuZxwCrh%(VsGp6pJujb=x zuD`^+WI4+Mo&ai($7-2|#{a|=QkmLK)Xv8u^dr31s`W2UxL!><#;tM&S2fPS^y;0L zwpP5)e#aD6n{<{hqk7>Ne+bm+%Zf70BlH16M2vQiI_Tjt9zKxAl)R-&_`T`kfjHP? zV3s9S!WW=b(ZCmjoPDX+AQTf?iY6N3o2hs1ww zO#0FfwALVq;4V67FB^L6k2tOpKgz`MJNcq)`_oIEl_ zb<(5)7w5C(o$!#0Vv9eXWp}EHq`jb;DJ1bMEBjswD?QYx1T+M&G)XiuFx>umzu$o+0?@%>$X48hqX6Te zyQmIWim+$F_|NA^UxuK7p8L`dL~}6+!oO|?RuqcEdj`Cy`;q}zK+n1BU<`dD97Wr@ zgC{C0`YueuWUSnV25};YuN-fd9m@9Lp+Aw~I|2d%7&Q$FSXfJYhPnqPDg?BUbr%l> z8UawGU}+-Z%w*OaMIydI=;Z8DV0aef`;>({93nK`V5&0+ zN8nQnG36&oU!?49CdLNSa9_nkgNU_}Rh9_!!vRV-vThebBKAJNxiM})WI1V<&n^pZ zR@gvJX%P*+f2r8l{XrNG#Wi>%42zbM#iFHSk;T$+-TM6_oE%rs)qbYo7M15?2#Mea zpI~xAQ27raV_`!Wu*~uo1qTdr5HpxtgWD$@KH?J&{675&r1C!c(~OJBO037kWNpo4 zO+kcl>sGh~(oz<71HAkfI5eTRU&8R9w5Y*vn#2rW{%P=k13U+N+Ry&*y+y_UE$Z8L z;O!4bF9C@YkPtxdq-Y61apvq~{^$@2Cg6AJwa9BIM{1{0dlTUWvod39SG4F)npM}6}qI5-%SVrs(<#G?oOkbL40SLVPg;TIgD&qyd`Bss~zV%|t}z|3f6T7h-e?lHs2pw{AS%{{5pVT!`P*o|%7|KFBjDhh+We^6R< zg2&r0QPJ<|NKG95mM}yD76QSVAT7}B&aAzfcd;3 zzwsA|7^I^>$XRhv{Yh>?dd!*58qq1vzA7>haT4Qvvj3`N4(I?$5Xju2*JD0p?&8SY z@t|m^!4Ncp8(ee*C?Ad*{l$=AdJ_yvg%A(|eUibN2m*k_%?%Lr34q8Dh0I@c=6AD1 zDhfb5U>Mf~4%j@(%YR55?}`udf`IMe!f8qnsBqe22!s%mFc?4`_R0W)3W*{`()P?J z2m~7-K==lP%-^4c9MZ!;QNs;L?;nt3T@w?sz8s)yqT-Q4(O^-e;E0OiBL<5GG>rnK zg#h)o$43I-3ec>?jZaFT)}K(qMbmrCuZ9q)P<${N2jX*`H!{a7KF0`hf(nD) zfjpz3MoFO&p!k3cA?%<|5~-j{>|~H|&|GYD_UpzXUj=pfOWi?S=cEZmXGMYdfME+N zo(}|cASk$;dY0V+D!nQ#CZYm?kU>BlL54`Mks&K`)nopy2-?3bMIs904jKemDNqb3 z3j3-%V*d@8e~SFycd)R9!LtCmkREWl%Abq{%8nW?e81=ao&Y5NO+Lc+A#ZI_u_1r) z&#V0Ze}}JnP;8{jzQ5$e|L>8%@8P1*{s+>3-^D|GH-+M0f4{uh0OSj(B;L6YB2@~5 z`{3axVUXErHQ-=2o8KC+N=b@#Vto^Iq_Tb(3=Ez zD1ZJjEdsZw9mO>q?JO+pc%Ru>+c~_jH!w1RNE+DK7(BCca4<1)G%G&LKwwynus;{|m7+ib{s*U5O-4?x-24G@haleAV^IA=EKtf%PYl9Xu8@WN z_1`26f#Ly!K&0}7%mK&&2nr1Ok4$LDb-2HU9O!d*u5JT_BY*P&dtgw(>wgPzKty+8 z5Hu*BC=^B12M^{4E~KH8UYOSBA>rW1IcUdi-H=#gnadjDt!GF z{PqupnwWpp#TlQ`s!)Fe=2@mJhJ0Jt{`xA@%I6C zb@A6^96+j&&(%W!Xy5`B<^zrZI^ghc5(Wm_$TnTk!{0f=gs&e!5)UEz)tA2@gzR(b zSEZw%0ffE<^+LUZz;%tTUxUDqXK+9Rjr`vPZvNkdEEymdN!Q3pL}UpDNZJ&`qYeV# z5e9kOL;~S0z$JJW6-kE>RN=os2Ll&>R~!6#T{Q9nU>gtucnY*0iucI}`4oWbH4(tB zu)+%}h-^EEXpcOgF~EW#G(j*_KU7f^5hTcA!r->g6+*6R3BDsU1&1puAVOrLugDOb zuhVtLSJGDxp=- z`{3RC=N7m?B@!V86osrbfFQE+C;%o%(M1S=2tk1%icF!D*jI&uN07x|-+K6O6+n0% z7zQZR=dTCA2?oAiRRiR9%~6nO`lqYlJwi6)pB#MB{%$l3c@zICpTFz>7j=Sh!M`F0 zh%sT(tEV78Ai@yHGaoq`ED4km&OvY!6!{oJ3?!mI3PhM4-RCj#VHg(P^-dpy>({Q2 zf+F^)#*1Ef=x2wQQ-=kUhX+H?#|AgrdGk6XDI#Y_UTyd;!0@sj$o0p^p)$v#KhIkJ zwqBa?FbV7FV=T%9BB?CE)6DFp$>5rzao@$QQW)8gR;zk!GugEn8m>^dV7+UwWHF&j0sE{mg&C=-PnJ#|MdO3Id;hstlOU71XY44cf~FLxn;B z2=PSF{7{RYlWx0E-QzhAcfh|VSfY6}o7EjDOO?R1k-Ie)!%D>V7GH(!t)=LG*K$#G z_I8_L-0f~X?Tv$~)S-4VrvW8N%5`meM$Mt|^*NkrRaR`1q*}EBvn<{W7x`iMhPuMw zWw_8tGt0^nD%u-ZNE(H380gZ`q)&_ql+aLVt}A~9RDif^_Kg(2xYr2&yA5avY7-1H z#3w%}I@~7+4IdIMQkFw6BBwLi& z-gx=kf$Uhj@cjlYCzr*+T)q)et4r3+!(P@icjxIBzEi^&(<%E|xOHQv3h?~heHTlw zlYU<6B}sSc6(d+s5I#yPn%Ms}R|XJ4au6KY-*7;l|ANKU`VX40m@t+wvu{EQ9X{yX7pZ$ZpszpP+80LB zRmZ7OQ#qiotG}*W`E3Lk$*7Y9C}J{y829+{VgqM|&`^NuMGh;+5NCnTsNT*!^7{RF zm!Zp!bD_N3D@zjZgoD^HjNjJbJ%L06diU`m#X|wK11KMP47w&9~cW!??q)n#D#tDxOy>Bdr5x zI%V|CYf0mq?PJf`5OnuF0s>^tP5EkzT_0fWJj)q0V6AnSQmHie-te)_&3|t?3O^On z4;_;e+O5NlXNX>1&k2jnS&N6?MzFBD?f>e)SsSE6W0d|bPv+f+g!rfY%CSFbBNW1%4HJg!YzKK`Kf^j4)z!+ax-X9CtIgzv z^z{qYCq5>PS35en8#5OSaaK5x3=O&rO?gPKS3CBKlT4ECqk4&mp}{0DMg0Jfko@49 z8-O`*$bT3q5JX5W`X8eD$9fvv1F!@3wg7;5sM0T^P^1ZrHEAE+{`q)6SV4B}^uj0+ zlW{y^lZq_iv>ASeNl0~`MMcFNE~`FFu03yR^i+t0H$maGbX8qhyh@Hya=jy4Mb#_# z)Acp>{zdPz^-|?{%*qMj>CvD;mfL3qyh*6(FUdi7i!^XR)DDGe9uJmz^~+_S#obeegv z;o^0S-c%{zfnMoQG<|okr0BV-)0cOYqWlhd>SR>p?|1w~a)(yD7Zax~1>hT==X<+Z zb_b`OcXS?x#}-snjCWk*?jOZ}+h;a7^xf;Zf50Xz7C`Dx`u1-ULsA#e;jWUfFd8zf z0_db*kV*!JK}2Ebh5%y{JnX$ zu}L9h?`mLba=Or((cJu_Y?YB%y&%xK$9eh8?esu4NLib&y1mhju)iepU`=kUTDwi? z+u@tX@R#+Ub>0J?&FeO7XdZ{1V@HSh``2GCh+mV92 zU{P*b=+*T3CS!_#hr6pvJ(=&$>qUJzs>^M{Hs;;H&b1`0jL&vP9xpgaKcvLJxLd&M z?AkDCSEryR<+VQ(*y!ohchQD#=h>odv&ODd<=PDI>51Cc(!C2d#NA)O`31tgP0=yq zj!qOvJH)3;%HO`-IhnxJ)<)8yMpD>r<|UnN?q((V5NofB@>%*U`uUsO;ezo|n|6O$ z7O}=brRs2bok@+SY+4+xPa5Y#e16(K&0}HK*3&Fj9p`u-Ln-L_8NSpMEpPF;kBl)^ zn{YOkc?dz}m3I+df0UavHrO1i+*ds|X``<@|0u2~f{sR5%*WiP?j`7>kf2uBztFr5 z=x+E$*mZRv&%DIwyalxs7|~x16=H^POc%dV9?G!y+PDi@$KSs_Z^cCn3Q` z?AQAo%saM}9>{_Ycq!Ih8nE^6ADtTQdWGm791rgel4h^}(0oX5zX|dqMY~Z1 z%L%Bcw^=bS^Y~rXa^a0$@t>lfch$4N(^2K2YLUxKWm)j!3PU|0oYT}e$4KZQgd_3%WfeVQPfpLz zkHuS5*{%L5Rd4MY?7y$y;9+>Lt#Ko5$~wQv`TGVp2W^Bc`0JYVN3fNn)io}oFb!?3 z^_uAb61Nd=&+?uXy-RVa6Qnv!r|HS?I^FW=U2D4;;OSZ3P*pbDh?#K3c}w(HXlG#jv6G2oup^QIZ*;ubEUQ;b z3NL)5sN1Gwy;!eSCTCT9^qn>cob@-bbOZQtj!kRShqGx8uwg@@IM)`+a zK%)A)M@?oA=q|kFL3?Le(i<=tUTq>O%WJ-syPOxl}5T&QTNu>F-^G5jN)}u16 z3~jpMXJQ#@R$4MkHgyWzbh+2B^RzxLr=g19MSQ#-tDikB0+GlXa=VdsL&%{9{6mja zIO*hr42MART@d$O!rni8L_ZvV~Mbb`Vq>n(l#+MS3?Z{)ya z(w2gr?*ICF5L!D+S%3fa)>-@bKZ%vx`P=8@KZNttG#&#pp7q3dQ9kLQtr1iDD>qNN zI$2YXzP`@jKA<4(t{nC6`c^y~iP+k$7;JXP9}=oteP?+*YFYE;%XlnsT4YMi=GlAl z-fc`sT-wzwxW&E9=EG3;g*J_bX#~FEZlOWDr$NKGp+@MEy&X`g+MQ0Os zaZIwoGq*guLdYV3$k~85pPhX>yXDGkYFfCgU!becOVu48USio?BDprzV4qPoboCEf zb=z4x^W+PpM{!HnM%5HGUb{7OWvF+*vMb$K*jNQwuaTFjokvX(G(H!CRIkzQ`LpY) z=@CDmafN{I-T|g|hDy-l3~2+E^=FB(IcprlP#tO>uRzd>5mi&OP;6?1_i; z7j(GgyKho)aWx&bpH}@m+E51x23|wAFXv+o8|Iotq!!|*;?$vyHrV_bg`2bI&g*E= z#IWB!^L@0yzxmqV*7-k){8=LUkBJ7~`F{=gZ&%-)e|SwEOU-!70mtm@K_^bh(WJ33 z+0zAvZPM2URxzTw>}ktnS_*QMS#&IDi`jCV%6}SP{5_G=>v$#TXG=8vfOPPELJ$zt z-I>bm?I_fHzD>q{->z9!w`FJFustHZbdwj@`0K*1W8pN`(Fe}cYTK`+EZCI_UoN6t z9h?@DcWBlOdx^L>C$9dV=5gfC(|VJq$90};W(4BL7XKfB7~+lhl% z{6#C^lNk%5H@|*1YHA>=qBIrlRJEDHlt^iQr#1I5zVxI{nbp6|uVA6#bgzbP7?GbI zc>Apz0_91_{g^w{m-%PDo1|^c(5A@x)=>=`3CTRzxZhJ(77|8@tQu1kHD!#D*?g$&@zyD8=eD(%thiE{J`Sl=2V|`hkcEXYl zCnG2dQ=T!A#8U&yqHe^c$EQK{3Bn!eM=f)43<9a@gO-h-#)?0himf%lqeF=#v}&%z z%0!GQ-P@je(#zm{WGvNt!~2Gd_9;RJJf@cW=VbENnKt;z|H5T{x02&HGg1G7H2+-x zeMzGrckcFw3uS$5h9|q&9as@0DjmLVdVpGe37`8JW_f5|gE_5+X_OXWG@5@d3oMtE z7AGZR?CqSsrNQQ00|s-jJ09^?;`{ZeFHqbIZZy^hA7G9Gc$t`)(K!1|v@g2i{Aa$^b{vB7lmD8B&{n^Pgcr4dzwNGQvA8m?5yKVNYQjR%IgMDyo zLEC|)vmHRm>pjZ)*^>Lcy*aeQ`ZC@3;(CfAzyn&RjL9)DJu=MNb+l(uY_ZdVThCi-h@jkwpZ}tA6xPJg2oy82UA06}5L6-LF^EYzx~?r%)|R2#6pq-=ix=-N{dP`J?!)Ne_ri!y>V^Qku@o5u z+W^AP!IN(c35kh=W2b8eK+WL-9G0ambs8vE)p#o=StEZydbc*9B3FkSVf*|+5>I?Y zM=ZPJZG}f1^zCJ{uOEkoUQD33qwS@e^)(7kHW91fZ;w216PrYpN}%1n0OxT_(qu+K z{BBe0gQv_ek~H!KlT2f5F&lN9B4&~|a|fIW2fI>~p?CA&mMHe0^{TQl8}{Ssg0ldWnM z_x{gHCm+v1BKgT3us! zpL1f9eVN%8kAT@+Q32!_v&fiHn9X=8YU6OJ%R#KN-q(=UYAd_iXznOx=hNcJ5f*!b zt$I`n3*0?A;NNQAUpIvzJOjlG-@-)U%AzjQ^2&A`T_1kSyK(2&fzTBYWcYh`er?b% zBpjS>a^ZZ^rAN0OpHmC8O_-bfddF{pjnq*peOxd|8mS9qg?p2C<7;|Pr`bp`PSy`k z?3>9*twFwrj0LpFHxu7>5fD{HW1e0?^as_2r*g@huWqrmQ+U__2VXIm%n%bz7Tw56 zVOvr!f=&UEB#f%^0B9)TP4_q|J9;Ptn2jA!occN@V+ zUyTfrY-H3bT!4T%*l0eyKS(CX5|!=YixwMGD_c_s0zu90L{#zNAKFq2C)c$@ypZ{P ze5Lo6DSL=npP$6_UQ`W-#MtVw+X!CO8GxuOdH^)JNrAK*2c5efEtWxx%*o5)Ee^MM z5(8I{=c?-)d1II~xGc!?y-^1QgC6n7B>!xV3gC;qk7EnS^PaQc83s`orV!73A`)hG ze6Y>r(?HLVSd{MHWg}tOpKq7EM-gdUCqIChf9cue0N?nnwP44OBV4FB>CevDbf@Cy zwt)Ym1iOw`x^+dcN@QGVvblxFu;lK3E5l4POj|Z7Ij`m0Nh)eqI)l__PZuuk9~0AP zCSxzQo>V$YHQaV7L~1LIuVxNq_q-%`f>#~UHGoMc8n%K}i!HA;_4JmN9+ys6)igNU z`5WYlZ1gO{wlK|HY@L&OgE9$M?vi2xIm`Bra@8*aJN=0@)Dm1qsuth)ybt9&smagB zm1P7K!tZr}fq3Fo9|{&g?((nQINKT;@azA#e!F^J?i~A_6M7=U=cXSa{;9#_JxXo1 zX3yN zCg(5*3(lo=sH$Z@sHq5(I(o!UjOOn3V^dSDs4I#(JSiOE9x;&kh*uEJ9P|iotRxa| zK*Ffxj+LWO%MPWkQmJB6*m~GT0;%}8+@=uYknAXYvxd4`Fv4qZ3V?@(d$i0G(k*H> z$f$-ZzJ$tYu5xbfj+pkkyin~l-@w{@eI6dVh%rM^sflS}kjA?@*|R;%F1zqapCjyO zxLd{9ElSs-*kW{p%3G34jrhvMSt;(m%H8YATX#Iz?Gc*sy}~+idWHH@frLhz)Elb8 z>ptD?S?KMM0}P5@0DqAbSoNexns{g(X;?9&7Mi_|X?fHb99$q4Suvc`%sfL%3zJ10 zNua#hSoN@lo-rQ>YbJA}C_p!)_UeFkrW{guI3r=SOA9t~v4XcF8YE z&XJsJO3c9xT+aH`&|Dg46HaUtTWUAvN!CzweA2hPqBACnAw=RKzTj}K<*;2GquZ{H9! ze|kJ~hIdl)n+u9c+ElUKh|Ir)T|5xG8^zHAjGkbWpz{g)I_}jf9Kwakh$DAq^Y#ZAV2 zuY)QryIQ_ybMt-3C?`lY?p6KV(Q!xv$)0wZPX4Y+KW|^pvem&{L&?NP9d3q5bXY4P z)2<@Vun@l2W6@l^>ahUe!{xQ-hta)RU!4fd!PB2gtw>KQ5@tg{s_N~UPY2PU((sgcCb8A%EnIsE& zfz&yHCATd3BeI`LBuz}sc$1DA5)u+}Vigb?k$10eEmqq+povu8eK^VSZa3yNE^Oz) zLq;z8b;VspN0x3ukf_u_qN=`;C(>GnKOfX1TI3)kj^|I3*7)!+0_e~{@9dP#PNyjS zMag_WJ(wWAM;S4u4XuR(of)Tin0_zaedqff*_lqoE{h|Ki}PJ|@rt=(4mHyyv$b|U zLB^;_{SuMLhc~@h*jRZI!;`%#n5qg>L`!=aC<0<{B`&wMzsg>$et!I&@LIDKJJK`U;?e545U%9xf)UB}B@SD}e01*+fg(!vV_^{FrJD-1@_1O!ZpcD?ZVxp!T-y z8{O~ETXU#P!rHaxj6! z(2~=&@X&z_!qhSwmP-$>_Sn9eZzG!Hst1dAJ=cIm;Eb}&vA<*KmNT#mwPko z)NgUDBB*(jEyH18ppGzLTNQwwN)n={U)4P79Dd$;a+12^ZX=;OlHyZA*_)@cgqfXQ zpxI=*nVgd5Lt1eil-+y3{U#eLlQ&%E@Z{J$fTTHn;1;%+D*v!lzu3N2 zCwaEXa}*_6qj^^^8`~{SMAy;wny;c81%ldj*3uD`U2pBM^macZno&?Vwtyuc)ZNV-pn`3RBK~lrBRqCG7Eb}O_ z--y0j4l(FjzVt{CM`@fTt+7O@m}})yZLIfh&o??c)w^LJ9rGaV0f6Pot&1#H?~pssd=oyn-9Sp z9JI9t>$ak9Gf!Ok?EH^*xbVj}xwu^G#5}#dbA}ukVHa`RuDx#`FLrmW4>xiQOuA;= z@C}_hhWoO)NJxpPWx&Z;)iQn7lVfP$#!{N|xNjbDE$TrKEC3QX>j;x2G@SN#!({ig zCD*LpfZ^-CYyV8p`%kX%kJkR9y?<}{tvlzzu9|ZSpPye{-RWaEB{0k#FgNdK$TZiN zHCFq3-yk(WPnw_SneELS%eq)w8&^H?b+Ue(4_iQ<66PdNhLFMY_Q1f=RJc_!?hATI z+J%|=B0>Ag7Te99MWTJWPz4~i-9kvXzime7$yFbo|DF^n{2KF>jA=?D{weFXB^=st zam7A4A#wb2eiCunHr7MCN_QVq3_~3r(Q&0rC$poq1((gVWYZ)n>aC!sa=H2my{k(- zwsoEc{27T6o(Swyp3md=!|k~CyXU*Z2~umNdhOztTWAv zl5@u|v0`Xx$CRXuvidKd;GUc0*KmSJ4d_z3+p}oG5Pck~IU$Ymw8*7vkL;wP-VZCJ z=7!g$7U)|Cw_J~wzQeZHc3peTJ8G$y&Nx-bsMO#6IPX66w5vT-K!qL>K364984?@cX}+dfLY1g%C?q-LH*a}m0d8X z;-HzTrs^!S;;E@gkApG3#TJ!hB@ln*Rx2t=GjtSgIBne~lYL7j8=HXDF=zD9T6pvo zT%f1Z>hzrNd-hxHw2a_4NU#IWGCfo5e|P&|6+gQNuCqvrW}ZdHVBwEuqGj;%0&oHg z_O~uDOqrd-@SgtI63vQWV51^_fX&A!(=NQyEy%J!PPuN^1>=+DgS7aVlbuEOFZ>aT zddYo$`5pJ&B?^hH64M&D2rH0_tVW=@7>xrYW-wO~net|a1FJWw0!pB6Jn=mIQh_b) zoox7l(Uj!KdQpp`rtD);SLikq{oaD-V=0NTZLQH=apqMmW@^1+CA7Pk_xcQDwvCfm zYS*f#-KyP|+x9!JGT!jYW3Dm!RTo}<@#8h2-AKli8n>R@0u0CK%}5(`dXm)xsu&~TKRR$YxQk&__5z{3oMO* z<2oIMvH{1PBgF-rVU>L)~P+eJR4k_2>Q`;=F_X;mfoXoQ}zi_>18> zEmI5O!EohkoPq^A&u+0P%EvM0hjlv?nei7wmcTM)x5r0KQ^g4}}TOJS3 zG3@%Yk$2c?8fr>)3zAGtD!()qnG{p#e5tJD=5M1U?B0kSp;MhphSBbe8&@$xM_>xl24C49)K7Wv30`~l?2)#V7f4Qgo{U&o8uJ)FC zxaGaHs9zR$y)y>YS`Aixq@m0sSKh03SVvoa2R4tdmo=#zBj9 zG96-hybD-hFE>OEL3%U1k6P>0*x^6(Eva9Nx6IM||8)lSo&m4_U5VPxmni-g0=aW? z|Gj_q>1?qh3$_>32=L zu+s#5Zu}Q7Zl1xO;ssGC`^MZZ8NK<>>Pk zj&3;N>kUzPLr(YT)#R0`%yglBUGjIaH>Vo`ptJjvGXNW(I(ZcxbYiU(+cz|nsUwIG zpo`=R3keaoA50Uf`SSUp=pCbbYIi7d5yad-+0U!*?HMK}^6~NaAU+98u6_$qE-EPs zFIVAD)cZ^y`5>7?p$tq6a$>-|)*jYLN)h#mx}w6>fqh!`)VH>(zyLZC_+{hAlEOVe zy-PP&3EeMwAYJR#JBB(&U=@nZbW7s&k;2B`cBhg_i`7YW3GxbpX--uph|dmCdp)n} z+{t9G5x46fjm-o_o0m{<$&%(1-Ti_=fL~Np)-rG_x3^fVXEdO*6Fo{CTk9MM4)ERz z9nb4xmw!e3ze=Cj3>Mn|32rx7Y6e0fAQ#KIt{33~b`kTIq4qmy%cGt|%xQOYkc%s@ zswF-C^gvYRz#qN%IKr879*^82*9ibZMbP&MPo`ndToi!JA!{C>!8PYCG zHWBgA+MOfj5=`y7K&csM1U*E7!=S*YgwLe3| zYJ<0uoojI7m}wuU>bp@9S{H(5gDpSPhxM!!@=Z&c%ACYR*B-VhQbr)1@X1K1W%UC| z=m_&Q+qdYlv6=UEMDccA)wm9j0^D};X|AqN^7~5#W|_Aw`8Nmw;8CXTJ*Z$BllO(Y zi+y4#Q!+F0_uDSKjvBy(@zQz&+E+k8ieed|x3QsCRjAcm>NR56L)X@xs#0WJ@bUdy z0(JBoGmAL8x36PTU~cNMVQA)vsnAXf|7EIBu8RwDaRQ7Q*Pl!1_OyH6ZvXJq+_RfJLUS2EU$}lXfW+7Z8z(gNc z=~6NbWKepf3Nhgo9B&UOW(D%9gn9Ce^2BC(-V?bI8Fa8L8b}&!Uf$I0o$7h}sK62G ztPM%Karr`t8EQV#$g;|3ql6hSDy{Rv^Bt5}iX>g}QMz7C^w(*d-zlp#!GqzFlZfen z%jrX z3Oz%b_pwAL2+}>vo7C;5+m|pe=;KH#jN?(u&9agy#kiQrR6K7+S5?$xGb$&nnuv&K z85^64+_=&n(x_Hdq{F=iQ(mxAP1fMdE=xm6E2EmYdl;_-ECgCKnFuK&O-9A1YRbz> zFfNRmuVdXhr*;uoZ*z`tt9C1`V~06;uL0bA87ceDveiKCTv>gi6QtW^uHH4z;CeiA zcR3ur=Ow`v>J(qNMfiR|UPu|LLp#?+2d`U)sLKYTBzWkD z`HK>Q9z;{Xv>dEkINNEt7jpqG<>;7af|VeoeJGj1GWb-0%w;JRpQl=(&(}^#8Ift| z{DzohsN%(b0wiMolHIXp3%9w2BNc2sIlTUVm$&R%S7p zYFbfSnKkARu#e5}FX4snhDDeN@uB7?h(fDWZ|_v>?OmDT8V+pPUC#>SH!Kw?g1T@U z^ze)#(CTIASnEnZ>VzBJFy; zAv*&Nm-iy7o*<3BZNW-Akrk0Adu${Xf9DPE<_3S+l;XH=gzjqWtG4$e zF_%BEKfZ8QLH&Oh8F=*r(pA2Hi)Mp}BVdA@amMim#->IBx-bA~Bz(#BJ0HlL_OSQz zg*L&*evNHnE~jO8PV(aJNd-9G>Om`~t0zuhokXOIjKy-w!^ z$lvOGD<p_kZ%=(QgrmDUYRjUnbVtZMl15OFPf%g?X-2QybVBFf8Tb7c#iU} z-NX@F2ZP3@p(yN0k}w=D={8gAD7bb^5N*QZNam$Y9`WQdYGCa(Q-1>H*)sq-jazYD z%r?*7`FgURT&ZJ}5Ym|u0Cco_G4$WH?hmmQ2t2gb%8<;TbQG7t8B132#0mBG-d{;H z)W{Ec5|7}}MUHQ6x}`*Q4x8kKUu&J8u$d5Dr#5T!YjH8@*{d(-rB%e{%*EO!c}k5+ z;+%aXoE&+3b^CpdbZ8XI?4*sR9AkYg9{L4zEVXolKhtEX-6FB)rTIMA#-Uv)8rr$?NKt32iaCA&OjF()h-CTt`BD zyk32ARHLES@c^H?Nkjz5@UEE`g7qu1POjuNOC6e2CnWi&eZwYM`WD)Ojjgp&|27zuQS}vR4#;(;=IB;nkQ!t z<@(zw5S}|4*eIE+e=fCxn}s{|Cxi}|y9fA>zIGNRO|Fu`iQG-t4m^^u?eebU z`s}ivoh`5Gbe_j7*jFzvUFuw!lJ0k;y2{p6R7kPxvNGSB=woVbOQ(^i=ZN^I(Q*Dt zbim5$lwE9D018CaC%^T)@(`|QZoVHEpS^g!*bp3S+qNKfLt7clyA5mZP?WjZ4}4o_ zC83}L*@=aD&kaTivu(-Q{s>-gnE?!7WD@u5Grrm2Jxj(Ncy}{$SB!1a8 zaeNSvfca{sa=cx<=TTI2d)dWGjAf!07{tw&jONDW4d+oQ%#O4!O;C}GYJmq{H zwUo6RIj)=60am{&C7O0Q&X%3$wLlQDSA=y&C?(<9MoSZDOsxdJI|)lo)UHZG8w;)} zs4jHM;_pSe^?n0}5tOR~({r->H2{fj$L146IHm9X+sC1=za6s$_Yu{p{nratQ>7b9 zghaPnFij9mkP9B4bGLLaM)aT_h0NZR;?{^sDyjHYQTeYF+ICIJc2i_Y~5sWur095E=jO8 z!JAnilj1{svmGVU{k}9q%@UZl^6dEZN^|Qe&7-9WpRqaaf-K2VZ|xKv%@T%r#jt4; zwO;D_ia`CWxUGRiL-1G?vnU>hGm(T3pxFXj=7Y80C8cajNJ&&yesO@XI#x|bMMr5; zbSU0~LT+y1R32j&TB9j+Hpe1U_+`AiCC4#e0JFo5L6Yizfi_7+m(IXp!Du&=Vn*R$noS_V7-=ImL;c0w-zxGw4N66i= zoy!(S*|Owsd$Rkl1=2}rbEg`|Lcmet&>(3dI;1L|@)2E82|qJcXPzy4w=+n)X(b|D zqNXiFeA6ix{Y)l+NsRB}x^U^qtY{!v zTXwsc8Oj~s1BtN-YkBsGTU|W@X>s^nS&Fb9o9?&!SG3g87sGsOf5#zowCsFLDC@(d zK5vOV`Oj^tppREH)<~0t8zM#_k~e#MBMh~R3q_fx_9*ESR{LS5<&}0#lcO#W19p`P z1)X>Vug=>~tfC=%$l>FDC|C@UCKEK(us!=AIqJ=m zB17S5{2P%{ z-fpw*Qu?L&3u3n;h4*FxYg|htp%Uqr405Z!JoE4|0Q3!pISipod9g9rqFaSIIxd1N zdVQ&vwPpejN-!RC>+6j$sD+mwI_kKh#^ zckDse$CAGiR-$}sT(f9b>$;zP7Q`P~M>8g}HxibO7A%kAEmf$a2)nJ1VhGW2Mezt^ zZ1zP8^yIAZZ!bXd2mN2eApkIXkUJBB|17y*ufNeXzE8Yw(Io$wr^L*-lk2v{QS00( zkWLz6BQH%3o~$(Yl|pd}r~SZAhDo|4o&3AUV~)bht`bly@f=@tLe~kINmO?Er*N( zX_ntzt2o&a90ipzDe-!w?8mV?Pm!}%Im4bVfh4_HG!l$X<8!t0@4uOF5G<>#%t1Rc zU%4>MTk)V7L>D0HZK}M;+=cKgo~8c0ZU^3QYcDUaaO_h|A75$lyM<44k_n?J3moOX zV5YQ?WyK`r_r=v2Y6L)hSN4rP-U09521N##8_*6zVigKJMfBo18M6!B0|Q-Pi`Csf zCZ--o!#D6X{Z&k0w%6|1k0UotI{a_|ECDe{vIZoD3Ykw|K(R;;>-Mudcs7V5XLj4z zIX)k9H(WcvlE8rHiV3jTGs+-=Bn+0M<)y<N zKFPnlb{0U;0#^Ts!i)dbU4VDwUflO1QaDHf%S55(jf%ksq&5(JmfbrM2s~mK3|_G$ z?Gf;^kM{3pkm<0WhgBACg}2&3Jhw5@2cjaCPGL&-$G7pWm^ppJ++$|ufY#rh+ika0 zgV?WQ^@>@eyOzG^DK2j{0~i2M@S2$>m}!@ut&ZxVigX`~E1Q$g6xcWcDfHj5mR*|6 zw{!>KdRII7QyZT72kXSybyUa$5@lZA9B!j&5GDa9bHG5Jz`UVgia;d7E=6jSg zn-t5D#M`TK8*iwbJ*2O$m%a0p?iJcz+tk=t_(pVJO#@TE*;gBhKO!4TEJ`zJmE-NC zMbk7#OkEvKgwn6@^7&MnP=QTQr%MWEf1-`&Kf#_sSi~g6bmQW4EUxE==>Se%*6PT~ z@?cylMEi|rUP4~aR|pUuN6|X3@lIu%pzKjm#}SSP>Phr7bt zGfl;lPDz#@YpNQMsr~!W+VAuA@OHi5dKyuro5hC8^tpW$v5)3jcETEkw@0QBTOj5c zQulKeILzP42bNdS+?snE2M3DxFmOG5auaL+*e>ET!ec6X8Y;R_$j_3<8X<(2%J+k3#4poEv#jnC^zTnKm)#@ zkfJOh>KhE-)&s}KI;2nMR>>1PKc3d0M+#SQt}eCB4bIQq1{@?rSO~5&sN&fqJq>#i zQ9xwIe>)Ex0BG{`<3W#T(*kDeU~_wGYGPLO-raR$j^30Wj`;QhHou+Fz|+p)?{HD* zx~6^bNhk1aQfT8sYnWYjriFHYUdUqhS zS}Lc>#m!7tqH64yM_#or+ZrdEd`!8cwI6kCw^)#MTQK&op2FRBBTFCe%8f~Cne8O| z477s?A8#M=XamZ$50~hFtCYQUGAWc`Xn2!#zY)HX(4Gs{JQ#mWF@lPW47dGsuuK+p z-Np&BO2XaD8Qbs1h6#X<8OUOgIn@CltN-n}hZr zJMs4gv>M=;f&T+)fOXJr^78O3}fwuYux5M{Jeks_$gPBjulBsnBGgSQb^?hDHsKt#a0gwpWKIj z9(Cq7tF;LZew1w}I*$8nFYGldP6-AXD~WLiIfjGFRT{?EvToT3=0rJc?Dvs zqZ?qwyPaX*$nd+#5pR(gj-aDO zd6pcKf@M&{CH9^siPlHc7F!jeq!kS@qIoH zgF>Pmu$9Rji!a3r+f=O}>9xl=K1YO@&w8a{_VeIitzrv?_A+@JNXn(F2G_!})xd+! zt!ZlBQeOBbDZ1{6U zU=6Gp8*+neZW4I=1PblTTE1+LVD;wLkF#_;wpaLN3%aj05(e5d!Djo&qXi(n2&dB7#rCmb=^+17YZyNv;Of>s7W z6gcpiJ8s!7Yao7Y!K51-)Dm%g;8|5YSV9iP9Drm+^O2&Z5^HSJv(p9!1+ye;gU{Ym zR9av#imyMv#Ux?akxk;*z4CvQ& zo~Y{yJ%T>??oV|U~YqGSj(9`dS z-tkBd&weJw*lWs%E-bGUvtJ}o`J?8Cm(}gE%QnW{#H1u1$~J#$n24|OG%n8Ly|0rX z&Z^z_J7BCqpYJ9+vC}aPbsk@@#zEIBS6%0tRu5~T^ZWOV`L4?s0q#Hcu?AIA4EDn4 z$-bPAj8sP^{^*^dFdE&BRe^v5jJYu_q@K^fup*d@C?zjjhG>(2Ms$R60|IaTjkaAnS1a#F40jI^ z84yXZ^s^J3@WUc4Pf}Ka&3wR$bTnP++jO*L1a>z04anO+0=|z+N(}dHB-HN>bLi5B z;^lMdX>V8@t-yRk_XtAnP=U|?b2=^*hF29ySB#*Hjh)g!?QfvxT4`2k7M(TZf# z6w|D52+~nl(5pCad6_Qba6aSbos1(71_5(j+FWPR(v*R`Wc=G3j&Wc{muwia9MAcs zzB0#RaM|BHVI0(OS(ct*jRy3P17y_6$Jp??Jg=snYHH!aQ(CZkA>vL?VHU3ekD@Vf zDN{E-9y~hZ0W%3iTg+$fzK-h`FNSu+mN^<1X5CV~o-1!aUt*3bya76c=sr6=u&@pg zLyQW|)D`C|8)FvJTb_MJ zZ>{-CtTdSW^Igx68OnJQas74oSIGHDJKTmP5svk95==KSNv>(EeFlD@11o>jKsHfs3Inm~mgWBT=pRd8 zbCUmhn6F(b1|z@1qmisA@5yNJCy$!8kG~Wbn~%FStr8kUNt@cFoZNQKDwElQc(e$t z8h;!FMx%gx)~FMp7uV7HGAF%YbR&zqys?}YDw5+EN%Q6%cT_w3=N`3GJ2``}!r`Ki z_u}&?9GTP+x1wJ2Jh)HE9-gD){-wrVBI#XLUnMWyD={iJ3vEo(tSngIW`>y5jObd%J9!(C6h>_> z5OBNoZsDmu9pXt+q`I-;ohxr+W0X)O@iqP7!$sUKu9zwmNsfhcSjs32l3WLyYrytl zg|sqEgi{7sSXkAale942zODw@=}x02dFWws%S$QkkVyqy&o6b>kabB^6K?Z}3C(Dm zE8P6d%@ODx-bD~YO2nd;{Q0$XZB?bAm)M6leW^gql{?-R>kjK27)w~rK3 z;9k{~&bl9sBrDZ$ww38Q=eMca_Mfq#$St<|HK3;yS^g2eB`;oNf%w)iiisl1JH?yEloZH+A zAqXf%9VO3^(oUzLr-akxDrnI79Drx8uCAu7NCGKhL5vqRi}Ets{_*|wMboCewDCsL z*hZnp;CK_6F7{F8EcQmc^{@)YrO=kqz{b%-C%NNpMN;GFwRkYD&K}k8>##!?6s3b= z!K+Re8^*1$kYfi)x`+Hm-g&8KuO$h<=3i;_t3n+FZ>lS>)(3XCbZ5qoqQOWBF?Mr5 zDpE_UD9xlIV5KrP_NAEW&1m}`V|L9u#zI~X?zx&ZV@I$;Q?m&H=_!47O08w4HBkS( z{&6~VL1T=%d=@taI%{Nuy8o`80Ub-me!sA3lrN!wP(ZC>Md7uOpH;R^+d)(^`xO~v5VkvNCc(B(Ynpd9h(iz#S^T2x=XhaxZh3DAQ}RY7 zkmgj=ZfqyW$C7&aeY`IYwK^|kKZ}BOj*d4ks#~5Q@?{QFjm5nd(^BXY2cF7!_2AN| z<_?d>8+T^MAt`kh1`}d3Wg|Vs0{p}};3u_N{r(4K*5HgmQnx)7a`<98@zZj=(26Oa zZTJ1s;7+jAf?8?^gjvWhc(q(+n{$EDt&bY^D-t)USzVkUDTdl<2+pKJ8$*p;d>?3Z z?(@W}&=}-eNrBxYx6dnn`lyLN?&N6!!&GA)Kc`^L%Tvtb``{#JfAknG zrrXZ}!oqYpKq9UB1IM~?YxhoAEV-=Pfm`*CZJbJ$feqE>uX9QC&wP>n z&UVEXpOB4tBF+p3xXxMu(qI(EDZHo(9>wr&`J!<{nT<)#t9&TTS1j83h^v!OU41!# zEBr~o5{deFfuVV`O0*OZ7sp|9a*RJH)Hya+Hq~$b!4^1n5VZdo=Qa~NCRnA^kAyaE zjVz?%EA06O1i}`crgGTb##iReVkIQRbu=g!$=|_J{q|*X66U2{Hg?VCDQU|xXcA0g z3p2>e85yXCGXIm(U=q+U=T=qXw(Z*dYQsXTVwIU$`D}1DkjD-3%Ka-opf7s@8l_uj zvUFY_ED`zJ;ej{7>67Qq%PGFUoVYVAOKLyeywgmuBrP&D{j50+<}(hOpqAcy-%U;j zTW+5}9mtY*^6^mR3)8e0>TGQ)o()2Gw~dZBEe~UT(8hD)WU{kUWL|gC2fFvb+uVSL zVwmR|=yn^AdPHwh!|!J5k8Vu)qvb2GY~)SZ{k6voX~vRUAT96P=W!Mq-CerpTHaAoGPfszzWwSJS?Z-GXD6o{xQdgSm>6w2!ugv%vx z6c%19)cu&ClpRLHmGx%G!2$5HZjE$?9yJ(Q2;al95&DFar@S;pF+t-iuU#VpKw$65 z+aC_!$Ge2ml$2@ov^b4#Lu*n~S;W`zmoNS?S_B>dPTJT#U`-jY1Ivl~^AKV;BH!k* zzbhQ}bHCm1JT@-y)Wm$REIM!`smhi;f=__|qq9I=&_PL6l`y&xau48PhKV#D;NbKO z^wP&8$MFVO_XqAsy>%rdWc0PI{VhaUv^hPT z1R2ExzgTbWgYAqMksIkBw|#H2+$0i2o0mZ<^4#|v$nL$8iw7do0b~Rl5t|WL<)l^2 zpP~^8o}0O1_l*yL?YWxo*xEpBqi>BhB#-wMP5aSnYn^wH4cBS7Bm#1ER2R=ZG1X)g zzxb`@lq`vBBEGde9z5;dmxQ85Pc6y)&{{4BL#11{-d+T3EH>|@MDgM`Dox24J z73da!0}p`C>;Iji(fxY<0-*5t^tr9Dur3(a?WLXW7Pz(y5C<)4kJ5}7^3XpnX29ij z=~o7e>IfLkK^ao2u`vZF8moVm$AigPWaF;RayA?3OEYoTh=m2`!14bv_22PS|Ns9u z-m_hjmJ~^%$VfOwX2}*Z4i2I0<5(QYdXx+Z!cSjDi#x+b~)_NWanm4 zWGAVbj@D||>Ufv0e#xprNG$bnzhkH-cbLGJ)0lIHa1|A}(bn!4-a;Sx50d2K*vfdn z*8=rA3g-A5mW5sY-cieNahQ&AM^XHz8o1)7tK^7<1qDMxqkWDLn7rIyj5f5*vmjoA zXF)GP6;u^CFOS54$%(tS+l{t4Y;KRv{BQo!&1b#+`GaRvANi3u!Vq_&^|!aTJ^hY& z(OhLKHWQkstNa!Cf&aLm1y^aQ=JQD4LC>vjDoQ%f%FzQM{VR@C|S1PR^ zB=hCA<^>dL{&%U{%a=Fx5#~=zOYjHF7+IVcADAjafwMKz9|9>-3b8xip`A3C;`*{# zxaD3lLB=eqnNK3(AFx<_l71k}{=eHltOt)b{+Is#=0NcBf2Y>x!w()b9ljeIxI>4Q zhb_JLA0?#iv?UOn*7}m@6e2bZbeTk#j5>>!5!TY8TR^+`z4c;(11#0YZOGU)`|eX|``yuFTwCMO z-sEjA333XfiU^H^(ZOuT)4`qZVKu{^dp);U6gNL~XWo;O>q(sV{j>6D#@Kj)N;_?v zMRIKWZOB8^z6}}J-q5+wJNp>X$&2KTw1UGE;~wZ;{;_+JK^tG|FW!qZw%D%p{hTaW zL5YXW%uIET?sb2ucd(M-*c_*%u7Q(<5Z8Yz<01LkJ+W)L*RC(LVwA;;ub$<@o&&vj zXq)%XgaJq2hB`4F7(M$*oYFPWI3DKFyTj_9OGa}HJ)dpyN7|D7yg-l4GsKw+)T&qAbyRY z+|@-{+E6uGO>|nKKi|v7Y$Ij}URH%!#OMo2joQVkU;mu4(WGPg*Fp68T5%^zKZjVrp>z8zL-+CNl^VOc*!<~GSsZPCO=m%FsC>vpT~>IyU5%+SBXXEZc=pQxOE*CWu$rJbRQy_BaXZ?2r78Ts~7 zp7v=+K76@#SUQ|oloGHbPFP3n&-afN76!4nl251YP7s6eUJ7S35Z4C=iEp!lHs5P@ z&V663FY?R}x}jx2Vkmfe_&eA`M3k$)E^e&9MW#ADKi>N)l=@~|0BsFt<7lf;g7zX&lNtW2i^)B_((bdbUGlAA ziQdy|v_D>E@oa3JjO`?ZLA(tH1`o--e2d#rf_=^;Z=V0hh>f%)=*JehHkN*b?5z?B zzgZv}i~njpbArgzm!9-bh?rym-2PS${a&59qqsAx>oakY=(o2?Niik=bg1k{7Ye-8 z$hec4*lNQYrj+zP(`w|sgaNm*28Msm)FHdnNUL}-?slkvQEpabqXX=vm~`n^X-dbY z`1OF_r$qecVvEeHfKD0E15MJw6@S#0NM?4Y2Y~fy3~y+%nVCYh56O(Y8T=8_o$gIE zil3FbNLV9TuKd~t(jXJuKB>uRG)Smr3C`#|CaR~Jc{ftB zsoD?=Gj$Gm^QtPS&Zz8;20Iu@q5`ZNSoW84sEcPiupQ6tdB8Y1jK%RRmF9JB-4}@p z&VkRz{fkj0y?QfQUbN8)Dd@_b9Ptz#M>jFhd@t^G9hsa}Zyfzy6B`>t&mp$t@ZMC265qqzoaq&7~du|??B;%r?la%6^L;>y~dKs#r?C1VZ>kz~bxal8U z4hXXU9z6MbJ9-rMvw7_;aesmqI6FN24EnaWC0ksvm5=IjDwy~18|h5lT&%(7@*p{8nyxoX_G#B7S`dJ)bW)1*bcgj6i>4PK{Pz{ zOT2ApRaL4>G2omvdx%xkK&3a^^;Il#+w>7}juluen&jNcE0GeF_1dtog9&XOE}9D> z{xY@{$R0R3JNMhjck>p4j5Jp&c|7a5^3(YJD0AO8re@F{AwmuXaEr^1`YA(;+Xukk>EZ#Dgt%bE; zUqKyJ3u!hoN?5qIn3!yKk3H(`Te}QrG#Z}K4^y}=nxYf=gAZ#W*w(hqHNLvYK^qz# zF0J{-|JHECv6_Il4Sa4vAP;JqZPDFLQ{wG#DoN_G9l&$F?{Y%Ckg&-8aYb0WyV_)o zkoKkC#BQkjM!-aGnv*M)>xV2(L7|A_IgE4gV#kvV)yUJg93MRRU)cO_5c*er>=57y z9J&Dn$AFsVVW8RyUY)a=YGPYcXifB!+ifQ-NhvbiEjRM!MF{KQKff#6$`dVLFy=BV z=~v3zzgV6{&GzFWdn~SITi_|spN+;4DTP%vXcb?Lc=X3J!am64gnR9MWX|kpP}$<> zw~0<#;NbH3D{4L1mb)!>+(`@E^NChi&J?F~$p$z!EG_*vxWAL1-DHTlbvDErT@X|a zOYT}&pv|t%MBFxDk@wKc==NA1RiSj5KS{_+=g%yRzw-I=oc_sI??Ypt+S&l%;kmra z7+>zB)lB_pmg@v> z&CO?ZRj)5Be0G~#P=U7DAU%Y!3%PFMca!^yiS!UjYJ3=|ofL}`GEaw|yTFk{Y-=~o z8_+a>Tij^_iQ$Vy4odpEBbcQ61#pq8Z)q8TIkIHCR;LcsyKGYcL_d-fU&8cNFi9D2 z9?5zwf_0_XwX?OGwNgUDcZZ%1e=V;mI$f_s(9K<=Y#YTJXK6H8fm4hGq`o9b&UAV} zv)YN*mcvyB;O~ZHZ{ufo? z3LW|fT!Hw>|Nrg5p+h|)b-BwoIT+qyt3mto`+Jf0sI{5(Zi|39g+eSw9w7k~80Sb1hc0xOb6lT*l>1FZTg5tX<_A6g2omfj`17~ns+JQ1^2 zp$+X)0>^>>#4C{)aqa9`!;<*SL|%Iq*2am6FD_-=&TD;e=NHfGmo|Q83cP)P<&t=D-E#1@l_@AqohRq2r~&sUsAfk3(Zg{)4h4r6AatVzBhhmzPtCor0`o$ zcS?2XZpEM!d}$fjh!=fMlHrc9uw1=#NPFx-p$HWh z`OdUb8eu0-SwV%vEwFihribSR(T{Jzm%7!sHrgzA5~*XHwi4pWI!-Pw8_E02?88?Zny@@6t!Vr0hyh*3faIN0Q z;_aED`f*q>HjHw-WFz(-M|6Z5PZ{Dl>^dqZG0;^90U5QGJ~7O~MgeG)Y8khNINBT~ zVG8y(nQ?j8cMjIh04FgIP7O3CAk_j80n(0H6yOw7u5o<}pu}hOOHd?rtDyPdvBCg` zmnUyZ@Z_6EB}E^&4UD_1A`PNgSR_co6}f|&op$0ml0@li*VrS1!9=#A0^aFj$tsuv z*%|P(mXB~2x{wPBSU17O>H_vDJR$uCZ~apo@{3e)|6)?d4>7%BGVaAz#5u8$knJAT zM}h#*{-}4judNMZXe*O4GDb2s>Rz6Bd-iyy@fm@BSy0ZX0smg=I-^ml47D|v{udc1EE_$4EkqcU?-1frNtknyb zr9YVxr>E2!W4|*gt{y3Z%zavh%k0g+`49j2aT`r- zx7=g6xVq+9&)LvS1f5M}E3lUuVKL465#3MAW&tCoXSVbFMHa=aTu+>>949I>v0A8K z)Uli-&gUb!SPD!hM6Rw*NedS?=znhU+Lu7x;(eY8AH4I-_*EJYovBx7-sb)g;&R}YOMB=O5(f(M`PPG%6M(&G8!@! zc2B8v$+4Cc43gPe)FQu}?zsg=$X>n1&fM(l?!JC@U07I16Qiux7lu7u*7|MJT5f|Lk`jkSBI+IWxH1L>L*?Vo&Qn0W?>N#c9_*s8EkcU4kF`k|Nj6y zfI|qJLH`SvgA)im&sb_=lla;EXk&uBw@VIKq$uofGRev^W;{c-xnZRE8Mbl`XT(6C zlavRZbJ8E%?<6})N+8+=f>&NMv^sd)xP0F3ugtKC*S6cbf z)?2E=*{PN1&qhTbt9RFxdk&hC5vM!zpTjC(g|+J|xLvyCK3cOTxFf8`K_-SGZi`6NvHy_~8knCk=8VG0Vg*LX~D4R5=-%BH+JZ1XgR5{J%%4SCswabtb z&mg%HKabqO1!*r&gZ%z-JZ|3GJM-?3sHhObs`&&F%~(wfWxkB3>iTFsGjoLJ%a`dt zJS2N(JknYaD1y^5%QQo0gABHRSg@&CL1U-tU@#$WEuze`ObE5E}_h~f529g16O z`)ic_b|A?jU*+{x)^d7s^_kn$uzjlg%X>eaDp#SIt>DQL7BWN}jzq_{Hr6ly#MP}C zpN;lBqZ{S#HXjU_6h4!kQqDz%{C3vG0Tldr07IV7XL{!cra5)%Es90a&d1$6gM{8& zz3Lv>*GVJH#wG0cd>;w3!xi66uWqT3Vb)^eL`1wE=_Sg|&uxYWpE$9%z+vgNKklr> z1ZnLJkav!;nER*?EL@3D1Dj&?1cz{$VMc#^cA`mK zI)5-|_As#6tUMuYTMbosI9mGxuZE^NAn#~k+QPq2{AzTNLwk7G7+v~NmWVBAEHxaA z!wNK&UdlJ+%xHB|jleuGA52%y>4x+Zf^K|#YzNXEOye!Dion~?!!1*`S!YA7;`8(M z5g%64Z|EC?u8~y*X*8v*Q~<_B{nM<7k@!sKSTRP|HcfU^_Uk~J)F2Z7^+nq>Qv$$U z+tZeYy6Wo^>UM>VuUBW1bUvAy8zvY?(VVyE681YnT2@Ms?xC<2g5eBg9xT#yQR zr+xodC$7$3QXs_?QSowuJ6e%(Dr0ttKW(F%YvZ97oeA6eGYy*74cK``TIs^whr!KRxrN~1M2OLQEud0)rNep0ZME&MDi^*zIA^T8S zCmYO5K34h9roWerq-#PiTD>u-%)BcZysej1xS2wiy{EkQ{}W1^>s;gH~E+Y z{i&2y2;2vG`sZw!{h4*IfYn8OaP0TRiO@2(yIb`T*ZvFHH?IQosX2iQbe+OtP&2*t-$=?n&y*)!W4VEXQfe2UV10mDnSj6D3%IGf~%v>L3FPX8GklaWHEA*6n>035$_YV0Vxd*El&68Qjot zWXwgEKo)P$i8`+4Tbt@H_QKmgmpnfwF_O*K96vA+8VdSDw0ZjobD757J1wT#(Bw{| z4Xpg0qP?y2n{uj~n*)8}s=co3h_w5UloR-~CytD%&Mo{1u2}2!^jZg5=qj7|{5(gG zDv_GZb&IW7p^yEHCw1X^WK4$AF^daeI1u#zYVm_OI%ETE=79GKP=P-p3XU(}tOkm5 z?hCIySAVZO-6t07KtzT0A!5L~cmiR?-f~gouKCvybJ0SUOHF-L7FTJ!e_MHO5N}0I z%^x?{=B>GE#K0;WIk0u2yQm;Vrq*-hnTHj}le_xc;DaLzmCT#}!Flps0C28{b#N@|W z!SlnFaQ&C6InnUE`6OQcHq9p>mX3n83|kyFtQ3|NW(9Jju+lp#o{Q(LF3l;umLc9k zI2H{WL#%PUsCS5a$=X?9k#jo?i;<`{MW{vyUV#9b zweh|BO(aJBg0hvS`o;6y$2A^ja>GAV4GRrAN@j7ZEA=JQ=3pF3pxGE58++7F4@hng z51fik`+2H+AmvY{K)@2!)o&wIE#*vfpUP|@L?cZ9dS>%{_CqAynE8^V)F9^~H8(c5 z;C@Bb?A{oDCEaj9s6+UQE}zRdeiD3EZ!)ZzQtBq_Uv2)kk|&XJVm=tpfGK55Nr^;h zk@uH^!&xi`Q8;<@+IbvqeTv!vcue^$minz$4BDP*?-w@0SK1fF_8NX^5268NB^&2 z2O;&hSpS;_H>{45a?d#wfK9+jvgCrsns^ynAl5cOsa@u zZEik7wP+SfgHFS#9f`eX87u$|>C33aak4}Uud-2ToO6uoEo!i<|C;WYH{(dgi_o5l zy)TwKah5NZx8QVoxXf5xb<7_R+2d;4>{kmt8}eQK$v{#2O|3ACWgUN7|8X@QBz&&8 zs4Z6c6X!?PinQ$@%XL9$pUa_~q~N>FyuS)<@>N37!2?DKa@(uoZ8aXVU)l$BTul&& z^Yf+!r>(SkV(s$YXJU9ymRx?)#IITk1Ix2gAzq}?8J%D-elf(@DPv#~o%Y#2cc~t4 z-}A2|K2bxSJURD7a3#^sRYz8vbCJfOqdJljHS1yLE%p`i&Xgkjn&iL%E52C|8LNz0 z8|a<~W1YEBM{8tuWW*N`B>vkO{Up?GC?R_D5Hdd3T9`TXieO36(TDK3(sO-2ciZ(v z0o7Gp@N}~u{`mIxii+Vui@-OP{d`tA~5?RgquTSq8I<(9;yPSEJ-L7$bB zm4W%_p?^Urf$x?>hi=>icUAE6#&PAp1}{f7ZZw$Yh%;74%A)1yK)6&qnTzaC=%ucs zleE1S$K2_Y&Peu81drA>ATi?btf+SY$%qKK*jv4{n@q!lgwO0`dx?v_*vWGdubaR>&}Bk=4c4jJ}qdR zazCK{PiEhc`ZX#It8-i@4N(Cn`fpV=@7fbqwSKK75N0j+xb`2b{RZ9%lf#r$ddpgK z&2pF7fUdL2C(CnIm*zDQQy5;>c2h%?Bztz*RrCkjtK87P=PqFRMKr@cV^Lsl0^Fb+ zC8kyGYFA+k8*&=Uav8Fk_-BhoLkfYG3I{0M%f(e>eX8+>~Sj(TAXj%5Q zdyZ6z(ak(%=GP2%ahadAKTLjEY{PB_>h>VFaD+Wsuo%9R)8*njJ#D<(Vh=qv*E{z1 za}k6JRmZfnn_fj}DCrxERg{MPP`O(<(jydB0&wxw1(Dg}UlI{1W>W0Ykzq>tz4{8d z0n@}fJ7gB6V+I?-Rkzr0Y*{HY=*}2$M#D*E(;ZFjU5XyvYl8N>O_qCkYS;agFcPQo zEL?RYuA}VpCfqW|Iu>XtLnFfyic&c#kR)>m&)U?`)|L#iVR@n`Zu6KHJs@Xbkds*l zW;ipFc*1LOb7h~g{o&!*uRMz4^u#>NeFY2A)ET9mTglo&jIGK_T&IZe@bIvExz}f~ zF}*G~q|!I*A$+&ML|Ph_dL6buUcB?WO>wsZ5;Yo*wY9cI%q6oYr3YOOQ|EjK{mXt6 ze4b#2elQo+|9@fl@1cJ{ES~(A?bOMoo6H>(6NX!{gtg>-nz)9zkY`e7L5xHMpS7Ui z{7SXzmthAcxXL>~E0r_@?6jTMG=Bu1^pdeBANlc$PRPs*<#EU(sc}E@`g+uJ#Fd0@ z3N*(jzdM>U7Vwoa0}TX3o7bk_QNJYvc524#%;Wx(a2AE}%Bsr6(44d$+TD$DRPhxZ zU6>!|*jpp7F5O)|!W3n{mtgJkqKQFZV4xlHzI9T7Ju!_guDDGvdKzfL4(PmtGc#AY z4=V3@&7>^eP?JH-xki%%iSwZM?=%i$9w;QY(nni=LCP^~cD;#JE`v`Ad?%w$G|SW$ z*@0z#QjhBGMhBNV+K)&Mm(iX7*5BaIGQ0xjN#yb}Tu#N;Ox#xo>8qh7J?0Yqd_S-;0t>&?%;KhE9nh&`meCIsoEl{Y&wMCL%xHKuYlFoB zG{sD|KW4sD?VB9k=Kho12>le?v$KRY7FgA|lv-V+4k*RnNlaU-H zv*;?Wd0RuYp=QP+Yo`m!XnHzk^pL?+?vq+|<)aUdf~W#t;Bp4U++pBf1>ID7z^lZ2 z5PUZeao;=?@bm`{VR?UNrpdG1D9UbFKj*nCWIW(>Uv8wwv7%$8C$9;JTby9ujW6#m zufIG;Th9eMi2Au_O^A&wkpsoCPRJYt_X}a^7y3mI8^HLbFP@G@k zN#LYj+d^4x9AiuK9?*yC344PCz{1#)GBP%j-x-<=T;U7s8m1?#nQ9~0*K}lhV7WXc zLbs3r9$It@nO@`w2VH#&{V5_Li5m4pO(nw4_Der9_Ps7-*P~->91wsL&HWA|2JA&_W`W=J`Pdt8`wBj4U~Xu_V)@@{4z&31qR302 zo14c~Lpsht7{=1GoG?F~V6if|H$ryv41nuL7ci2KtDVsCWZC`05}=B5>B?*~_t^mS zUee{k0pTuU6}`K0d@m*_%N7`OO@3)@9g-q!Vx}V{CMUj3EI%N~(pv2;-CXDE%or|n zUKC!$%^!w1@toe-JJ>u`_75fHfp!fO%P~;*Vx=l((|h~X{9w@^&*Zx)vh%wPwX?d% z?a<{_l~YtRMvLQoK8Kx;vrN8|gZT$+KbxZ%G)3E$Y z9Y3gd*`L;LEVud-=y)e!sIsI;3&BJdZdn6ez6PD<_|V-`7azxD{I{=r&i^*&IZ-c~ zcq&Tk-ukoNw+~7me7(UP8ds@KA`KhV(bv}3bH=KQPT!hS=Tv`kLRlFUjLLs2MjO!H zoW4DIJ?IZ@Dv}j8B5t~F|OONjr{4k+;KH+?+fvp=Vl=K zbM9&GqsW0Lad8NX)9L;&Zf124KY3)lKz0zXcH>(CkxUIW;g3WBnId)9*U6|hH^lS@ z*)~jC&jpBPMb$fqU4*PXXzRlCVZ-?tj>Veoct<0Lgh$ANzQawSZ>ZKMNVo@K?C(!w zc*8ERUg*aPXj+tLjOgN|eDnj=rp82uu< z)ysQDI>oMED+Rc8uh9TABMUShb>Vf497|kzX(oA|1kMi#u&vmI%6U^NvmP23q|dgN zbWhan7BWU_Hj7H%8O57*SybCl#-pn50*x4rB+b%B6s;DyzoC3Vpf*bd0J98L+-BR* z2p(2mOu6&(7Y}pDqRB+V69!su>P(Kuri0Otwe5>%K3`~{iIr*=N6SccFop1i*omZh z&lo6LL7O|(+ai`Yd~HUoZE1^#VR6>&MR@t{VuQU6jizoFkP6g2tD0j_JJ6~qjL4+$#Z%CfFl(Ykl=pg z(1Gpv`9uF6xD12Kp@;8c=2Pb=nKo$hF)l!4`DTSCAj!N2JxfwHpJEVsSDcP8ElR?S?3{h;z3 z_9^eChH6It4OP0Fy4ATJWkmdqVD*BxSJ2g*qN?Ytsovhd*T+cl)kn~*VWJkFAwK;$8rS@d2iq#b$t(VMknac!Dj&n%AT#3l+10A%{V=YrJJ<9Yvict-Dn zM(JbWlAjh!iw?xu<(RcdZCi70eo9vQ$2@G?tb+~OC#DpHfC|^%kXp@ZiYpe&pUI5y zd$!x5Le*)!ixt4!_)7xy3fnb!En&EaT!}(Kw&v8#_UF+G2^Lhd>HjS8r6cMKZ|6KwLE=w!|erYmkO8H^ceE#IB~a@m8l4HMI5>@BW}|P3S_S zs~*2ctC*tB>hePA=lJt;yB!>*%{x~MKO!(a3{%*0)c8aX2=(jQ)r7Ugx)3X0!N{Szl zWC;A;Hc~1x;8|I@KwGSSx%?@zQ=C0A%0xwq>;o5-jlZpJPkid>>C?MDhELu3)x7gZ zcOTNupHJSKLhUyJCmrKVY7tmy{OL{GixB5vyLSDW&t@ELc$}nXoP{lFg2hR4v|$bJ zpk+9b@krcA&p8{!Z6gWpmeLP0>al%J3gU@63ky^MVByXnvsu}Sap3_N=>l`eqq1S; z{Na14+F5{iBz`4Y?f7mgGLhp}eP%cGM1}V)=>ODXj`FIjD{EZnPnY2i>v@pTdtT}1 ztjCn?ol_4lIKT`dg$yoNt$+XT@ss{If3cFv>U0vvpGvbR2IB+0XMFD!-puO*+V;6m z!}x5=;`%EyTCKCfsMq>v_L{hTmMFV!l*YHsb<)}ObwK3S$``C;(Scd_hA0L?!*Th> zuoI~D;5ZU)ysWPLSMg33u_}HRly$BiyB7{fqV*BNFdM-ANZZ$1V*zw2Ty=C`oDH3pRZ{(1&P1u)IzDi&(>{Z ziAWA442(kSHU45iZ^Muq-XE9VA-ujl_fcBzenoBVe9xx#F7%K%+nUD!NYq+0sWsrh zkSut;<^=(G2mBL@eWJEVaO-SN+kF_GAAa|fBA7p6@i-U1wTc8*dYTu(7uNKjtQ466?SCiS`@_(-rpB-Y3_S~IXm_of z-lPSRMpmHo{^?st3=+_eIsqpKBD5uT{UZ4 z9G7L~QCj&c>FF~k0MwGDjkvl+~l z4s<3-#%U}B<=@noLLq7Xk1dYUeTEZxJFLxlVH=D^6v0>}-%X{qCmSw}1I^!E(13$|jUgtk?Pl{&}N|r_CLSVpK|S zbVu*~iJr^ME6|*RLwQ)#jC&;SNibw#RpD0cfn8KOj1fAIYQrk2oEf23hAiUmsxvoR zlR{2-E{?BE*ehhWX>I55ATLM!ZuCzLM_4(dAM!A(W+Zn1F+p@Z5YnU^&zp{m0!o^B z1u3T`R1oU$BxJjj4BtQ!(k@lE)A~;FP0?@uyAP8oBEu$-nbAy@$sm|yTfwd|H$BK1 z)9<2KnQLGgLiGO9{j}``dr&uHss(I1+jVqwgc#LILY?h-SJ>@rxi43w3$0yd zgY{+)(dH`f;jiP`CYiP`hme5$9=sR8t;VXqO1hhzo|`w>yn8Y?Bgh$Ch+^%)JCy z2&93rozESjV2X=CUz`Pgo=Wo4rnpPtT!zOLm%3TTi&H%OX>kcaH5j@llJSC7es?JL zdcd5XiqyB4%L;GS{~KSdyGax-a>Cwh=)LGS7Nr4ik9`*K{Dw21FO$~YLd%slyqUtv zEMZ~TUg6~4wBjZidAtnqdopdm28<}}4Q(~<(;Fj0m@i+xRHlUJ$6`N7>T@53BTgf4 zifAH|^!qWqpiD;N%^`T4R*&){tdJJ+z)sOiPC`cB=vY@#(UmmG1uCcJ2&a#^LEj4E zxfg1%s*Iy2=(~rhjP%gO-%pe5=ESz9)Y6uJR-nVfg#iLs$F9xfl)hCS5ZOB$0wmX* zU_e4tR2yc>-1%O;Cw^}w*lW=#x$C8x8eh_zW1XsIC%eBx-!XQwvBZ~Z%|WpCa+17{ zUNsQ9!lL+^bGF8!d_LY;{w`RIFT>HMrj%Q%d&(z%Z=yvb*;AsLEQrhPB4(yf8H;8# zpQ)`|9P|05<=o^ETP4?@{mysq%g8Jz68Ao5jsLgOmPC^Es$Jcsy%MC{-P-F$brm_! z;mlOusH8xu*f4Xo5H-mGAe*#!RoBi}OSm?usA2a=Z|l=UHlUJJ--BVe)E0+5t@a)s z7%&&LR!H`xQj_;4i+8YG`>lkz(L{86*$4{IguBK#eMC#XmVeGg6?zV~uA1bKduX09 zx!7M0FfrkomF1EO)F5Z76OW`-`M+6jA1V=Spr}(L4!gp31og`;PmTz@J7^T%fd--F z(2c`~ln>vuI(iU`U?P3^=3%Q}gp5dcHXsPQlcPW%?pmiZ-XhX<%!H_MkI3ypW;$YM1(+5jFWaWT885mu9eACDJ=!m{JArugKEfs>`2kZ4a1N9rLjkPJ9WmjtU_k4@1i+;|^{ z&;`L>e@DsG{Qh`JqX;YN!d7)LMCX|MkGMBRcrGoFN!NFX0LoTi>-Ja-G4TF&2SvQo zv$@a=C*);%*RnRdAE}Y7ts-$z34oDsE@LmfXv%Ok!hV0T?|LkxSb#5gsv3MjACMKO z$WJJqEiU-jIdiyjaeUbiT9SYt$S#N`JD^E`@^MtwZ+oTmLw1FitM*fZrw$;5+<94+ zQ3W&&N2C3J)Q^$I{b|njMCTE*tfU<0)#x8#R*q{ster*;prCm;R*r;;z(~$2<|xUL zq_I@N!Rv0&c9(qnSY6~pV@~nx=F68aQx|FTo+Gb+c|&A3$+*VcUKiQK&V@xTb&_^j zb>--+sfh(^ejfFW{KHF*fef!eQnTWEW>Zj+QI8l0=WufWNaV=eN_u*SL{D}g&RGU< ztt`ZnX6)b|9$#}vG;of`E)V@4!RBuY6+X(L4?vxTfr46FXm(#)bL~qb;pMsx`#0S` z9E$Pzta|2eEFL(ktN(KY%=`~9y5Lj<*I_mX*O$WcA`08a&OUGRd-X(rz->*rT(JE+_P> zOqYakNhDLwHa}947}V6C_P!mTm0kd>D86~mMwE8!&Ov){Xsgh5d&V7_D>Sxn2ZSTM z8E%0#Dt_&3BwtYaJ3vhU2%um-zOeLCcWG7%APWF=xQ&iZ^c2+eRPR_$L*j&6E>`fw zw%@o9MLwsQZ*jDW%0k#<28E0%^=x@*hZ4@!S8PROZ*xEIE)(-Z1>$)djdXrW&)Zff zfktIGJWOCjR@&_wo(Ea}*xo&vgJU4!grub3@!BX_0PR*th&4PeZ%$LTy|E>3e(-6H zM?KKI^;eL(3SAeZ_W)5npM_=Ms8KxUQLUr)2>ksj<)UTew@-w~q@=>$^XA#*+bR%k zkvCiQb27fPI?a6#a^ETpUVNre7I$^E8Zcqk!vl6F9UuIwooI^t5qT3YcAQ+HCDGiOl#Q z(qJ-?8u#l& zX_;krXMcmvf`Z93ImKtD$2DdBbf^F<8Wav}M?A9-T6%pwMuWi6$I+e^{}9N%L=KXd zPLMaO?YmOF))%sice-3jq%jGOR2jbs3~{H4Ys~AD?~{dAAPeTec3PqPO}ix58&K9swztT}u;-LBv(> z-`y1R5UcjZ4f6>a@z=N5)RMfch^t{pr=mzna!sKs5t%sJ&UQ8^m9D6 zdNMLYQi&03TTG^r*;Ym-mKH!+q3=s64ws+UCrNbaX%TXAGMz61&Z&ksJe%IwF(;pCyvWe-*Z|F= z@wDxodVdABc74n(EH*o$gNfS^m?YMY`HlNgB9cMN;qeTwin^a4C{?=SBTgx`%L;Cwv!?)BW>Tm|5{x#kxw)=dkQOli9&IhjumNoh_x1aL2OehU+&r` zMfQQ2qVu*HkbEe6Y1g_*Pu4lh2%t34kP@V>yG28CUK(CsXzkD{tFAo#1B=4WTS5CS zyq7B(CNf%sqm0CbW7F>?Kd!Kv?%2xyDAB2JRAkv#=ciU$H%r+IA@CtH1F2GV4*NG4 zi7fIhpNsKBUY_pS;ye)5L&D5iRM=4E3s%!Mq6emT!mg~Uv?vaKEA*kLNXPAqg*v)8 zMK>|o9;8=<+C{$RW*uFff@0TqDuq$yGQtQRcbJ@~J*s`_*HF)A!2vz5JdwUQSHjk7 zk==RA)$e9r%Q5T~M#Wq%16c-o0nUxz%XQp+yT{g^Sb#Ej*5Ih;(Un_R zPf4!yT8Ak)vd^*{j|iRF;x`{xLdgj7OmJE2&1&YPW1R-34jG$_#NCUBm2Ny_2KXw_qJXCO zDj3fw9|d>i2S>rzp&O0-n+YEKQTyMjoP0pFT1CXgRaIL7jcq3x(2Exo7Pe8`p`3;< zi_acfT;574k}EC{V$Ky13EY+~l6M<>GgypRKrgtmq#(xJK2o-lQ3}i5(LR)}?XV}_ zzw4U|3th4ExgUwZPshv;f7e{DI4<*U>izlEjsI$LTLgWiMKxxQ&(H4xDOwhoX?<&# zJYg>_upxRkh%gn2vt%s9`Jb2q`hWie6HxYRfFsd;{HRn4TUe=4zX7@+&h|@;ZCm<1 zA_@`jP@V*6a6t8{$Pq}ZIvBRti_M<4=kdd1-`0WGl8fu)ouf$A{DQRI~-zV|hoVK?9lqHKy37v$r(nWJPKV z2Gz?=h1s<$_+ObIEBxldutldH&jg7P?@*F7=DzZy*}GZfHa}<$USC~d)KSLQ<>|vu z{y(1H1RCo0{U2|8N{>P+l&p!$_9#pCl0vq}GGnJ?UkgLlcO?lSdk95Lj3vvMX2$Ty z7K5=*OhdAp##qKS4F9{&?|lEKx2e-Pbu`^`U)S}zUJIXB$V8Lp&a5wI!eN#C2%Ql> zTU(zvgPBJlU)fdE*aGMh9L{#t3>aSzO_5Hpmwm;X*vFUJ`sBtCL*_VSU{Q4a(UXYj z^-aI9O)7yXJJmK3HhQqM;olWr4ud`Kzy^`T!gtwuzW5nd0j*erg*3tnBU}Q;)H5PjT|y+Wct18&bStr-Rrq~+ri4&#$dqcqM^}Uy(qR})9fa+roBy& zj~pJMV2nGk5{eGk{W4B|a=Dz$mndlAU59X_zIiPatBddaSW%B z3wBoY*sW-O$@G zjK~SvI9JB_vj(rl^<%tofX?e#(G?4_UnUp0HN1 z8ah^NAZu{GF6U?hXJOZ`_h7`}^ep-G-P%dXTEN=g{-3&?RebMGE=1CGUOi@{+7G79n~&JGJo z>cGTwG{R5g9AGZFO?^;t+Gz~F-U{>~F?4El!|S9p3BlnzntF{lRi*YN)^g7{z1Ly? z<)!=dz=1!{nLl^T|3(*4@TIqoFRsn){Xd;3_; zPL(~>?^i#ZBCsI8F|!sYzu)f9GHqhfqIQvcf==60{$Z@_WZU1H<#Jpv1YipHbgstT zDoQEq(kV)bOHu5R5Ho|JgHe}GHurbN0ab+!ia5~KRaSGg*rwzi$<;>kBe2K5(;Xvo z$-8qd(7%yY7UC4%mIdvoM9{bkYVozjU65XU%^Pwc`<9i$xlmTNdtF!N%tA_W&q;%U z>us&8{ZcmtQqFF(7l=Y&fPyCayoA3W=}z-7h7a zRqWdXr)*2}U$U8Hp{37LGu7_aPTgMX>_agcY3o)_Aye%wl@m|CtxQ&@^;^S6Ag_$( zum3GGEnyj{fEHcCWtK-;rwAz=e~#S&T;RwMqL1*$iu}Uz^_-J1p|+3pI2>@|>_ZMA zDu=ytO=bZ?3P(=up{z95hSKVjxs}v~$Z}329?Ix3-wMB$fv?XyJ&g2Ez~M}m1Imz? zDl@nQ2Bh2U=9?UGlaI>uA>Il&fUwO*(2Bvr1?_blvmeC)pvoAfh(u!rcSY?I014gO^L@BBKopu$WeBrLt%P7t{ zk`HSP+Kyy2My54vtR~3Yj%i4hOYW^Y?FLplVtua36ZX0cb6}o`$NgQ4FP-7pvldn= zR=(xhg;1q*LiD8_ih5W@X5DCCw>j9=wTMJaaci!uh-^^joL0WIs05vt)qXVfpryZb zTZ6pBZ2dUkqugdqOy~mXqQhSI1}(?FSyo@mF`aR}RlbhbOjK0L>osz}ZgXAWWXA@B zoNdWA{L!(?qYtqV4G_VwX=&oRm>RBZU*Vo;fk^hCsxot(V} zMEkLxkf}l@u)2t|u8Y&tmiSQ~9iH38-E$vrl^fXg--Fs#ohJrOHGLzl1-xTXLLi8N5v-5^F|2I4i1T142-_^y)h|%GX~t zEzZf$rz$k@AtA-Ci>fC$jN1X=*-o)IK{)vdF^VdTm49Oik_{{W7E zaPB{lBS0C&|GWYm{D9Y?R361-=L>q|QGp%IN=i8?ql1cd?K^ltL)Ab=C_K`p1>oVeMOGjm_S_c+apATm! z?G#zW9s?i>h%Bv-+*lK-?OPaac+@$ZFqZ+WM~-|L&g74gh;!REI&sS;V^P30(TL+# zKB>*xQ}LQjt*3JKJ;9S};$$aBu+M8DT!g_E<>engnuhG4-FN8PxjJ0r&d#ymka_}Z zQLu4yMDTot?#PLaBvY3s%X>RA6*A$=A3A(Qd<;^5h>pm~%Gpr9{0!1CV=ox;*#WPu z*EIVoe#IPzn9If%iHaGLKpobFOMRj1a0lr5m9L8_GWjxNZn*|T%*Sf480du~Sws|9 z@W#8>kg4n@zAM!COUTC?H-h)NZ3@`Ca~J#=Pqt^sbRT~_K9J-Qw)jDi8@tkavZ{fZ z>Nt?vDynS0m@aW|P&a$1Ozj>o-?0SAqBy)dX2_uURP;4YF7A+Zyx}ZTPfhHxn#Rg_ zp08^PZ8K9TSC*Ul(Z^4Nq>hwb4z`j z*uIzpd?R(z$;I%IGtOR&@%+w5pR&;(Jr|iw%c7JkDErLfRcnLvYxb()z4)r8rG%zE z@2J_iy^?=n=RM0Rfw%RI@L-Gltdha(DYoxgb6=2FKiF2kJRKXlM6kmE0>$X4G(SY8 zj@E<(y(vtH>iSfu@*%nN&RwU&1N!In#l?6IDTx0$iw6!|14H&Jz?=cEf9C8Q;4tA) z@gf$k`h9B>WEBM{6)*>b$*aF=s4a&?mFT%SWF@CLY^F}+x8A4t2O2$#hor?RA}M*=y+yHTv5?s9r1#t zFa{OlJAs{AUFi16+#xsZ5=YKkY-+FE!Z4_{BY-I-dqaSMee`%ZT17aM<2>ORTpO_f z^e;ri8pVsoiL-&B3JSu;-MVR>SK2>Sx*u8;xbs5b8Gs}tj+^oP<;fveA-fp7W1Dbz zGik$~u%B87Ri3T=flV~#G}Txt=FcZDoOJoH(3P>Hu`x7Q5A>216D--5slyXdOQB>D z?2<(R>$N|-ncVgfYr$Cv%JtLTcX2Z)<)Y`Z|nLIvB&aLK|bv;ubVQ7FJ=H@o*~;l<>D&MG21=+mAFt zr<67DqPogIlKrufUoO(>8#a2?{Tf3C$5so0q_M}()T|00xS0=hrvJG(zU?tJlDw`2 zxxr4s;mS;;1-1Au|Aw`i1owTA=_oy0&-~{EjTNlU-X%~S-IfRzH?B)uGUIjaQm#0X z$QO zfG)2DM`3H#8jTHoVQn@xK`Ob>^1uX(v^T={PV7aMVUhMTP8Uet0iPi1fo(q#=3HGFOS#JL4iCU;=5k7OQ6$;l{xM^ZI2Qe(ZV*-+x7Ppti@n+nd>s_vRsHFOz$sm`*JiJE zb#J}k(bZM-5LdYCsV_n7a$*%btrT5AUmS5)w3h(c52Zda5AvrfrZf+cJxCjDUys7zg(|eMY-?x z9MrVJpqDeLVSDwsxFjyFAa!5YTJTriE2aPsMO=Gr>2^ff1np{kcYp%FQhdWd1+P!O zjI0p1%E}-TIjJV3C(0@)FFR>kFr56`*Y^|cE^IgxQGu!PGS4*O;_e~FBqXF{O!ke= zU~7q-wJWVFGuT0*MJ_5*rPBWN!`D#J$|qGVL3xF*pWL2rUtNF4^8dGybO`ZrI~*`) zIl%n%6d+0B2S7g{4xWPtkMrKTxg4@*LfQsKR{L4|gLZa;;e=$Z2q%Bn`Q6_`;~Vv+ z+L0cC5A9M*oZnxaiOe@|QHyQ$GD3%~W0WaR`* z)5*~EGSfN@$&!{9)_8LNp|3I8`fVm>+P0;B^mag{U#6VAoMzPS&>Xi2UPC=Awsq_g zEM-m;v_qiX~@D4`AS_r$DvD+j$ z^Fb|cJbY6qGH!=Nt-)Xyy`9*q>bVrHCvy&L6Jiz^t9rn`5moGos%}vJ$QDeJBeVbl%ynPk9 zU8gCJ#>b?TT9chst&(~_&BbfM(O#u8 znlARJIfg+is{3mbY?0kwk^N_b?(T~-=4N#nh4egQgvGtjcyy_w+((;2hq}5|BdBlC z55rWKwK*?SW}7qPHq+hSUgn2-^HS81xAeY-4QqVUX){`+$?r?G7`^U{&20Z1wqu3ypQsyI9Q|QUmWb(mvP9+9hAUyV0t6n5n8|U$o}sn-s3|yPu10u8MmkvNd7}EP`@Jw{#4de)OKJo9^E?wnm{O|D zuxH3H@g9;422Mx(CFMlOi8ZrtZRhvUddq#ExzCi}Yulfkne)qmT{ksF;=JwTBu~?F zbB~fY^?7Ml!Nm$>2KrkdBGIuj4LR^%gjQgvYJGj<1J*3%6%g3y>vFUT9K3l`_xaIN zJa-Oxdu!6+54;gQ6@np=%j0@cYbp?t^`0Ih-{34J;Lw}caS?(I>L=L4?uclIE%uI= zgl{^&dGYm_KY_kA-wI}i%?8#CIbzbV>Ip5j%5dOEP3duT-MoH{rEOMgOhzJt4mVYi z@4kJNbp1}X*Z!ot^DxI9Vnf*lP4%FuE?5Pe5~POEl6P%^?I3p=huEnr+i}ziA!xmd zT{E%MqP@BfHLY?Ujeb_!|7|Z#>Q_zusEGc?fJO)(nmY8*54;Re)=H6pwlDv(M^{0 z^e1t|`@jG1pnU_!@Bbf+{-D(-YI+iPq*WX**iT&G15EvhA#6CUa(nt~gvNS##3D8q zlh{j|W#RBn&k|9L4{o821Czm%JCU7ALNldaypD>%&)z3n6SErU3}&vM`Y zQCPOFY(>~uOU4Ne;q&ZOOKq5}U7&YJGAuJ{`TJ5u{Q+8YGMZi@6ReRbo) zLh}b|j}lGYVH3R3@SL6HmQBR5+aU1B!SNF%#sqUw*4C?4;<^Jcbv||K)FCqoK+`*T z60ikyILgY*l+1k2PbCCeRnpb)H?EzHTwX!K;a1&qfYb|>SDsjpuM8zTa`mrJ86 zI8)(q9*7n%fv#@!3`BVB|Lp5*D~5-NwtFa^2i|QQbqPsj@j4dXA=mOuC_Wm9uqTBV z5{Re49>Vu&39X7dr0*&n*RxhteG6K?PJ4 zI>+1*){45?6EN_;v~ZzKS5-t^Rn=UUKVA{BJZ(X)avHR=S=op!pee^>6wW{(7T`C{ zX$N-;eOFGf6(y9He5KDd^cZH{ZUw0;kzE#%vWbEmF#Yr zvf_a1e={#3EakIua06EZpgTFXnVf5`vIf@>s%yQbj+^+2t$hguo%y@9Lqt0htyc5K z;P#`Lb|uWxxEVY#)>Jq*NpB$7&o#2m=US%Zt$Ybv&oaj$wTdLmsfE3VHmUc3f!B+h zJUll!jsX6s?#&Z7Uw^zq393Fb7US5&`1RYU`^`}sRE51v#>~LX0#uq%dwsA5M2O}! zmjS&h8jYaPXnxd&Su8%}DUzNLHHmC=+h0f#uqdjn z&O^gO&)dJgdlZtER>r6Riu&4}E50)$U{hXjAv|cgyP*ZXrBO~xSb?kS=cK5k48@GzB@kz1GAqk`?o~OQ^hyp zx_{oc12+N58xU>(K$U;M%2V^Z7>EvG!*E;EEUTzRX;jv+V--~m8x{*LY8F;#%tRz< zdnU#cJtT4>4(+NG_$0z5NO_eqvE^H(@ukW>Gd{{R%`$4m+i5+Iu@`5O;^mg{AOyN> zd=23-P1QZ?OKVbT~~=XJ`>!6Rz{lL3m#vW9CjI)l1Y6GPPHrzK+l z%JHX4oF1rmEtloHJ~d?l^!IE%98{56m~k$#-GrnkS({B4BokKKkczm(WyawTy^Ozvq8CZrs3zWw?I2bk1Am;6-M!77*x zABNF^K5VlGC}WfJH3AUfE#vKF=*fRSWt)~LD=U}#`7Ln8z7!N3BS2ze!(N*~xWj~o zsrK>ws)+Tuv(ZVON|=3*iLOT;{^5h4^E_SqXJ>O1JBNU4AmH?QAC1nJv}Cp92Wa&x zqD6LN8BeA}^!b2m0_yun){cj;LUm ztjMYU){Vu#5uWC9k;}ceYq!6)xSKYtZRGZHZLWt4d3#g3a>^>1aJZ3MaT+mYu+uUP zGn~-==<`)ZurI?$fEnP#`YOG^w!^3+YUe*BI-B$t$BaOnXTBXeo~r+x2OKuA$v*zS zqX$kO`0O4zumy{rT$$s}H00g`->DNL|lEBr0O!P2<(ZoJ&Y|*JER28wHG&p!# z7R+dUZ9cz{O}nmoNMwB#bz`Xrtgo<_Mly<`-Qg@D*r#F7#SOapIBVVk1{)o-x9YeH z>5j+^rEEu(P`ff}OM5^^vv*Vfy76mgBTIy@a&EQ}vXLzXdF^!N%SWy#*$L*3kl|

    z(!IJ`-ONi8r6Jl|eUp2Q8V?lleKd$WXtlD3E)=q)J=aSJ2XjoB#66rZiY8cSn{yO) z8WDat=Tkhoh*&MrL)ab>++#sZtA?$gjc~pffBL=G2XqgDckAf^p1+y{%+<6ttL@X> z(l`ZCw=p3b(*_`)X@Q9wBh(A)- zNvzF58xA56$b?FS*?D_cQos0~dcG1gz5Clb^T-@h-&WK8|F{J1scm21t1M5?e}8h# zf{ga7a`%oLByKvIneuz$zu`_EK5-4Fk38~`k;;bVT=Y*J0t4>pCZe_@n_0- z_39PJRu!~>R2%N+uF`;}ilvRa$3msEKE|~vB*tKGytspsn2=S1d&98lD=R+ST<16}Q^C@C{>4a4Fe?+%uRI-s2E>_=Yc ze)}5;k%*n?66d+X9ob(ES#3A{zo%`Q8{a-~^UT2%eU6(a4z#|~=ZTT1#uDh;;Uvlr z#}MVlfAU|yD{%Zy2pgVVO4=L2EiIM>W8{xxE9kOTRgNn^nww5ST-8<9y3!mMmhzq2DCd86 zL|w>+IzJr~)n7BPaQ=*JOLM%bu;#j8)3%`2_D{`%sO1m+E7j$;i|*NQ^)HX-aLud| zQ||ouP`_*PuJlYQ!9g2h4@fJs1mh*omK8f( zfN+mT^blS;q$Zhbd_l_Fo6RkvWwO>QDtDWgh~xVhHR~SLySBMhN^4(S{1-mmrN$ym z>>RFY+`Z=c#wEsoj{?o{H*FyJkIn6EZ8p-^l7(~R`4szS7jfuBU+tZYf{fxA`1pv( ziI0H02+_s#2j1Ju0H5P?4zDAYN97yt*)+4ejy5G zR<{gAPgU)vAXPcd$lY{L&;8ERlw7>qRJBOtK7!s{FR6Pykj@cIL{VwPi*eRGQye5P~h6= zj|P+BP}2~^VDETko;1Gl$Cn2hC}X}vHE9?2Nd=)Bngr$^UIYkstO_8Lrtizsqm3XL zk6!Lue0_Or1@HsxazcE3>0iRu9-%xE*w6-~g8k^tMF@x%S{QXh1v5i>}ii1cfQ@CO%m34Xw*MIIrjEsd;b^|3a zN}&eED<0fDwjpg#lmi2T#g*g!O_2u#e)#TgR@8`X$nXd& zCm|salBVVA^!NLPz=q9Fm|+Hk!y=}~#w#`C>uh~1;D#wusb#BMX?l%pI%6>epD&~l zxV`~;ja)SYKjmy&C%a*K(D7T;q1K>4Oj6%~~p81+<% z{+k@_#4#5$FTOzS-92cTdvAP#KQm*k6DqzZ>#gLc^<{w-i1~pFBHA&it-aB@+TmO~@A~>+!saYxe5X@=#ayor`~8@yr)A?LA?2?4#vetb( ziY5z*L@ehI_aLk)sgLG**ZioB74eBudL$zgz(ZI+p%zm%yheeRI~rGFo933N>W!>5 zAQ0X@*4x!pOAOp8;!N`@oe;sjH4-X#m*ePo&lxzV?|K@f=8z=E^7ueUJbqQtE7$ur zE&4-IbmWJmt_6FJQus&>8tWQ97cXEADIBj43HG7?p06sm1{SlOy7>}(3D{1bN~)J< zYHR0ccDaXV>P>z73k8=4TA8au&T8wwR~oG|arAl{)sV0-ANR)J-w( zh9(~5kwjI=w%#qzYPHR|RHG3R8udUU?^9WEpJK^WTy)E61gx{hNXXkD)uYSo= zWW@_G9BOaUo3@g~ji<%FKx>tA3@!Oiyh*PdsP~>B;RF9c+Y6 zCVmXjgDq>ZUt}sOs=|UEP5<(l{yEw>!ivvGR9dyX$)js_1R(J@U+4p`fmdb@vg>0p z$eo?l!iv0*y7>BvVI>sdnKj5o(9qIaX3pOn@mt^yhmZN@HC!TbQtT)aw@#cg6r>4` zg%W4SUP9=KlOawK2IEVox0!<^%eAqQaok3GJgLN@gTw`J7zX&;^Tz?Y&azFzH&%l+*&K5f&rIi!?kgmmKbjZxh!RScD z?abv_TGh@<^7!)nl<9gxH(ENpUIn88t<^)p(&QyX`gw#y%D=-(Jp&oE@ci)Yd>XlG zbab5WcA>%Z1~5nBMb4Yv1FfaxKlToR!C`Lu^L-xGpK;X-ySw(7;SpL$Mb(L6*O{NA z&sJt)7MKGwLE`efHkq_db%XaYCiki(^b`scM^I6 z6Xmc%i*j48+F$4P+n=T@ZaWmO9_^ z@*G}?m1PSQ@Q0x(|2^Zi(eEzGD;C=9v)Qe41)6ne z>`YLQ=XZvIbJ4J0f&u`~A)8E4SL02r+!3HquTI8_Y>#t0sgz1%{3fa~wbBOBeju`I zEU&Vx(vnzQQrRPA0hBLta`G|XYHV#~fR^-+r1Wn(TyW?rA~jyALUHXk^Lqx(N|U{H z7}{j)nR3ZX>7^%w%4ZK{!lp4eSF+)($b znY?>V;Xm0~C24WiR$L~gnxVnJJHaAJ^9J8xF>!$Fo#HtRoGlKCg3$-ph@p*DP{2MW zBjcI9&ByN4C|M=RT<}|Bc(calBC=-YgON78g|4YpMM=4O)=fzCag4f z0A{gNQohhDu-K``7CY4i#iuJO*~y(esyWpOyzFOpw4*xE1P2t#fet6SINsBxNqg() z8)YWasSX`d$W=JeS=pk;5H`%=$@4IM4vIYshZ^QWmh4&(thbq@e>0D$+Nif*I9DT97Zs_fOJ z^{L*_@a@rClQ2FUI`qkR$p>qnUM3N!ksmJx%ixrs2=A?t$$OV^U=eAs-}o8 zDOEC-<-BEf=7p~CHG{#+#F&z}dW>@9Mt|%c2HH)IU`_wqsQ;oSn6U(;qkRT-$ABfW z-#MI+FJ9ezeT3u4Q+*5ANSJ15>UPD%wu4C22KJ5HY(k6|c1VPILS=-B z7fPs6#9avAoi1JLFP1zx04GjPR?855{CpQSj{+9IhVihmY)R?(=PK$|#Tk3vqRsIr zqAk=0%%XnJj>8~tl#l`Z%7AWDlULu8LCHf@9+*oJPV6x&!V^ZN(=N8^OAX%r%h=}h znkiGw7e&qdWTuo@^Nu+1KBqT5>mobYRGPaGXj;OWIpqoWH^*QJxRu{OZ`#&1tS+MR zwWwAwC1d9hf70kEmMyg-nRS|8UhJrhqvqGH8Hyc+U=B9$jLv`u=m~V7Z$}RvL;XSd zj3;<%INCamn#=P^&ha0OKI>kTVuF+{xo|-UNWRY8{@jRLnC^^oM9Gr^#0*jeT)$Za zOmo&KkDfbc?$V_5oQEUjz$q~>LA(Jt9#EzHF{S~B?$z#?c6?1@V)=tdGc0toAOm^} zRdC00B_~}dD6o?QH$muX(8PV$;ZERMK9a*G6$o%yS+0LAwC%cW#dl5NuJLKQ1J=#e zwdef=BJ9!6U%U3aya)$7<-|KMioM{yOCe# zafKgXY;w3eQeDN|4CfQzljPTg9K71?ZjlGKvsJ-Wd=>Y7XCi0Zei3iAA!DX; z#^4`;@^83EguY@myw~kljWX^FbAILau~-t|Ukc^)%xY~UCTwSUr`2i zS$53p7WR{6p$Q~P4^kBCTKnoe`ib_5>Pf+ZzRZ8y+i4%w$jT@fVK5a>9xyv|M1dCq zzT5}Rj__PmP!@H*mP_MSi<+E^>f+?ix3WUR9X)dHA}NTVCm$<|(0RUit13XkMq7LF z%ihT>Ma67K%+~4^WXl_(Uus;plhFuc>6+F32Em^xSNRh|VcXFF?%|Hwy68DDK z@@2~h5T-LWYA%-vhKY>f#=WjGMdP}``}NkWUXdsgUL@ju6K)op#ejB-ME3Rh__f%~ z4})oj{I%HaCtmCOQXIWuXb0{VQKwDzYsQxnkS_MwJzV|q51awzMZE#4%+i@h=PU;g z^T;!v*iSm|9&;=zNS%eAnv2~yU|Z}7Q!0&~k}&!GB)lVhZ&s-)B&uLx7Uy=XWU5q+ zc!9*N8M^VknR?qPuL(kgZfh8EC+jGkkGVX3rTEaLzt5aiU7d4jy0_)e@#@)I-Zuvh z9zURZK;no5cy1m7KZ!~>zu(K+2l3BrR)2Wx#Liyc)mJOb-nhXc{Nx%+{`mu7QZ+70 z3e08qMt39!wPX~4ZMSEhx|(L4?}lSR(}wiK{@JR%-9ULqh>$tcT(l!K8(W+}`O!RS znRPUFu$t{w_3iItwb*qpS=2pp7Qb_M8&4}P;L$&U0YQ4dQ%O;K*8z2Zr^AsDTKwrA zDZlYyz&~lo_cYrpZb$1{-giAOtZaM3DRyP?$3GIVOuNRgOQb?KJVs7AY3W@T8c@S@|yoY!{3Y(oiddHzu^7Q(yHTmQ~-(X0*Kw=lr|D*Bk3oF&^Cxx_5^O`TXkvi`y z5(;=1^XZ+#L&Yh!Eta6*>TRvXdji=#ZX z(l4>Adu2t)9V{Z{Uvrr>M1;Ey`XrXcQ5)A*s&@aXHuWQsV#KY^oD=KPd1FxaCfBmq zok3tg7-+6QaB@$b`*?I=mvKp8ZW|mQ_tNk4xN=ZM5nd`^D||Y*7XI3>4fk)mQKp59 z*|~eJFp$ApOFbSo{Drx$;my|f{a;L;SjL}5VpKN(^i z{MSeM^P`sYF}axW&}}@&H49nU;2XpVYJ^ zBu=DwPlWAfPocM|WCJ{I2l#Z~Jfk*I0A^k582`GUO8d_!l$jSUCTXM<N< z5aoD&gy#*1zCOnrp6EBOFYZ&6m2(L*J?7+~)tWkricYsITzabiJG4Gi%=VfZCd)VM z&c+OJSNi)=%SUpe-pph#1o1nskFc+=K2a&Nn7%gS5@nBDu;rnqOLXwqxj zuVn%WwxfbCu7*5`_`SQ^?V>T_bDoyqolA)k=My7AHTJ38x~=anY`^^V_QI&PsMC>i zHM;swUmVbXdg0IK7d!{SG5qs<-9O=eM#KY?N27VCMPIZ^knVAto8GdnrFPYR9Ujei z3&JkSebwb18&)T4L)cUMQ&0$_*I_XFqN~jA9%KJM3dY@B`&0an;bAQ6(IO*i-%1k- z-_%s$pHoKJ4L)|Q_3SBmxYJfal_UGuP4(;AoJj@NQ@Af0Qqy6C(dMDg#^a5V^l`#Y zWv_f|<>vgPW+eG)LQ09Ry;H%dC(Az@Wn8#sW5*mG;vLSDA7Y3xD*Ra+#Nt?P5w#mP z27(B#lzEG(Rl1=zYfyW+he9^*)`twP2kE4s+#lYSSdTWc9LY#O8kuQt|Bm=@dAeU+ z=NsCW;Rc~ZQYF_j6N(>aY>%YHc5P}uigjpp)(@;qN7$JJpIh~~o|0IR&@smo(?u0xfN}BW1 zF1o^O%K4JqF5-K7-DaN7mWl9 zi!HL%%CWA3n|I`?Z$>b7p#C7`YO3EEn}4oeMVRF#cZ@qab}fFrOp1x(sk!{(qm1EB zdRihfc^utDsIivo;eylZ;H)t+PUU$&-jD4w!42NE<*9~qX-{@b!Y7lkErPd z^`lQ1!C z-UoiCs0a8T_f+pV2qa&1AcwJgIPt?>Un-4J=0*lLFC2xi(^Ngu>)IdmVKiorUm0Jq z9_*@|7q+ogowo8}YT?7<6pD)72ab)%xc~xl28F=||8pYl&4HUbPeD;Q2qxrP9JgLK zuRL+_P(P;E5$szuh@$BTM_(hsiflzrA8q@TdbT)NAjkn|drv0|Yd!i$oylCVVE3Ij z=dHPaEf4ZAXY^0$X|a}XqY&(PS07q_7?=Z)^Z_K#z z{U4bCb6O%aAFD=r@@O-T&Kkkl*oB1qSIXH_#|2o^OYHFR$T`iXEoR_O+dZS`GtmKx zyw0<;tT9@xN`0g^*5T!wHh~vDqBoQHE{aBM>uw0Ta2)3VGVXZLGWZlNEo9>VLt7rFC zs9=I=#Rf3EY7W||d zk0eC|zaL$)yi-gIH^yfTh?cl0=j51jy+(~KEPx;^pIUq924KlO=;J1YX=R)(KJ$gp zID|<|i>{V3&9|-E?Dh9MbFSr&g8TRj-M?R?f4r%4eYB1#Ozf5EJO7v)}8)khgZ*zAT zd}^m}X)8ip$tGuPCWle}8j<@BrcLXok>l%`f}^{R;M_ zAk0&;ldg(1?N@S-hjy&2h&_L+m)p}GKuDd*HcP=@FDM&JbVJ{tcNP04!S1v3hqteP zTW>4QMH#xDa7&BZ*<2zfd=177|F$a%D|e`(s%k+&H*y#7j$)@Dy8Ql?tdEs2*ej+{i!}en$5Ej(GbsMq+PJ}~(-Z_KJZmUU5D3{500L+oU`rQzB3Nzm z4Vz1+r$)cKp|6!n^-knV*XTGT55q34=iOj}3xpp0u-0*`BCCc+1`|$Bh*7C>9Al_O zizf6hbbfH!-g;P66C56hqWZFbcRPx;l(1Rft{WGrLD{ zn-EManXN6YskC==$}#ESN=|lFumIe-%HKg7YLOoWjAs-A!-Hq{@=ha>kX}iLp3WGE-Ffv$ew*m zB9gsiXH2%Sj;E5PBwGj}dqzf||dCV@%oi$ubxWzq`-(_?ZKLIXK4s+}CxT z*STzH9~)h(L14>f9d%;PFUNIzm-5HG4|c~`)0Q#;GiW`oUeZh6CU&^hqarC5rD7S= z`Qf$BTn7^+bay7b93SGm5E87ou|Z9jEPcE5n#T|L?oQ1OAdvZ2jL1+!2zrqTwh*Ay zxVs`t!rvQ7xOg7rEW1!tyA~znat=6)s$Jf&T9g}XQ=dCWkV(0`s!sZg2d*+)@1I{@5X&N zNm-@O>!Og$Qsw=$lxxs=v!%$79Lc6uU7BJn{Zrem)TvHoN`u5H#~eov7B0uP3HgG8 zlL@L~{~fV0ztRS0>m=Yu{qJNY{5@UIIhggkUBvb7txcY*(&U$2?KAqPLNX=b#X=giD7669>ndJ-_2Gi(^cYu1NS#kW zun>F4=Nqh7-HG>z!0=R2+CMJWb4JITd<&(LY$lU^_r1k$T31?jWBBTN)BcZ}qv+bD zJh`iW-7YY5g1tKQdt+n515+{Xb={lWk-Rs;L{X{>B!ImU-n~$66jr0QzuCLBpGARo zLUk?5P*58xue!c&d$_B-tlpj|jwDO`c${E`PBjypizLj$C+t6F#_ORxW@cuF++={M zfM^7Ehmyhn(>VYpmkAum`vQOTjjz^j8;eVvf|18ywTRfl?%_hE*b@;S{yi!9_X#|E z9C+pliN@-9;>PxSq>hq0oTj$tMrK=5p6EjxmG>m^%0yv{>i*+P2Ok~=CtUt!Vo z^_{*8|#z0?yHrZLjujKOcmi+0wS$YyCz%N-hOD9Q%jZYN4JJuSIilRojD2sYf_ zk85$6UM_Duk(TC~Jpl<~!VaejbHcXMa}HO;JB4Lg%Tz!B`K2D0O34Sqg(0??0^O<* zgq$-8Kdd7T-;w;Y9F5r4QZJ-S!Gw2>Rnjk`-xU@6h1@4@{~?Z)y)VX@Skm9y-v^ z?>d`7LZls5;&@9R8`#(Po%J+)4@t%Rp@0Ht_IFAbJkD?jAROQmfEJzc?sgF=>xR8+Z#mbdx2Hc??ZV_IE-wCV-Y?CS+sV}ap(rX30z8vK9vE>X2RbaQ zs&$Rx;^X7%>N4bx2$MPMh$bmS;Vrw{@SAi>@Yb5hyyZMTczt4QEb^LE_q?C8#bW*B zEHzS{PBZCd2MJSV*^|eG5|0ZeG8_X6>8qEe@1IKvRz=**zWt$>gx&w|Gk=|5SRTr7wJ-GG z&kF;)jCc=sx4XJ29sZ6B%KN0Au<&17Jr$Mct)v?=iXWln{Yme}2bL)x($-W%C5IwE z5IRE&JbCwBKm}@#O&nXe(+C?5zTWjRHdCT;=ZN0tB)_?`uGOaJr<1O1Gl7b~*CJz? zT9`b|X^|>Nj5M{n7+19S1aJuwGwmdt(nI8>QEl}#wbpR2K;;sOL5CyG7a8hVVf(HA zTfYJh0g*fR?4!Cp+=KnfvQ5~exgE`2(pjbKZBeb!MNG2XmT<3392Mb-u~t-3y2)n} zcCbo$gub{j;9KPz9PVCan>oVi9)o~A#o9!6_+LsC>I%8A@iI*B-3tGON=W~F%xeZA z@C-62{ykLx2cg~36ciLBR_D0Hw-#4GHn)E707e?UjC{~N#JW-&YDJDN-l1HaPw8+g zxZ+#dZTPm10H3@V--cMm)Ji$@v)ea@lzd^SEiD{&aYqD!8KAeid~&a&SAE^`aIbuD zrw5UxG8grMcjL#(SBW*CpBRBvV615>=|Eg3`R zh*+X$BVGCEM{!P=hyF=0ph=v%D%vIny0u%DV3J8#z_}>39{~zq? z=tvv@XXF#lwf zVdpBJWe6)qNhl~-M)9m*brnkrRIce3=0_+>D`D$=wsv#liIh4>1&cuX!Ri_YFrip_ z&-eAjruB(gw8b!HdG?2g&om)?x?Dm`7Q1R)LsnD|^)%44xW3s zq4hr`ac{VH!|oKzK0dAGXL6f~*S6ia27FwJQLtXRY3+Mv&W6i+>+Dw&m@-~H|KICx zsXTV_SONp6mdvmJxJ!^{OP6x!e{xcxBlRN_Xd26&Q?y)b>0b5CfJ`4@x(bs=aeXQG zws3Z?A~Q>md)K-Q*73Z|Y%!}Mx^F8JXOrlY_%UUylHcAIzHy5XKHMgNgJZ`}35kCt zd3{M`QRqt9j5W&a?zy?;Siqm6d9ivw%fKStB64{3hdQnC&?Mhytx8J0mgqIAuvY__ z&ZQGeBZ*x`fZkAO#D7U3G>n3d4m9EW$v%NSy7LA{9M(LgaqHq(Z5cwpvOZxxJ$Bhh zD0Um>sekgnF!Riz6uGZtIr**>pIc@lDd9XnU1jt8^|NR9@FJpE7pYQ@%%YUp^i_ms z73eU|vav=e7w^1JPDi06&3vg#ED%J69~k!wMv6v?9!p|8&Tv*!Q}FVg;~SEvgbduj zlDsb)+^Da^r=}GShfIUaEiV~gpWq_?IDf4H@i&zmm%GEuSFKmU!*MEb?UItBT7ph} zk!gy^)w#Lo=$iekHujv5josHosx{%(RG)ITfOUCoMh$o6gfA}fiPFX3J!mHVZ&wbm z!AxG`IsD<2C)@#-wAEQ@mQq;oAkH-^ZzEcr_LD+C6rfd^sHK=~^#C}@VwA!QBO2Pd z+MYKfbZT-b*L1~^LY~%=+_3iK>J8xs59^rN*LdT_!0)QRXF8K~rTNpf2zrg_ykuaU z%H@o#;n@@!m--robclc4tEQ$jB_hNrrauk97A6s`g0KF&gQa+l@CIi`1Gddb^1KtX z=MU+ArYW+BFu*KC?`YmRuFU|RL;#ZkWf(KVtNGs9Qlu>QE_Mt~CmwmLsjA7B7y>-i z!zZ-V2v@r7Ic<75eyd5a>t#cG^*%0knKxIGP0M#@4MH|?tSa!*IN|`9ez+G&>nNdw z?}YB*6|PFKuaPX9-OS_O7IXfE4}d_XB%(=6dVs)fiw79PywcGS&NF+yDS_@Mkwqg6chAaj25quu8>)^=QC$#s$vTQKo*!(`fB z=oY%5#=<2X^;08pRxrxRJk_P@A0a8Koo}#@jv+8x+z!P#k^RpTSh`v?iBxpCw|}>N z>bX6k64aaUgmHVT5l8!RSm60IZvMBP&<^>CeV9q_hIemdbHZ7Mm(Ll&o0RbUIfs7J z9YfK|4_!~eejs39cd&X7pXOSJcej9ofxxI!^JamlQ@ZGD(3uHG{`9D=C9Rd6HxlX# zz{RMsY5rWPQPv`km(`-nE!QR*rBYJB2*49hQVbSkHziiTsqB+4lkpAlmo)l#iO)R~ z2L>MOw|aj{zg8@fH&|Lzl%@GsDWUw}Pcbx=S(}zxnu0A3%(|4bu>VjB=+Bahq*rVL z?1*0!9M5<7S($!bvR2Lh(BtaJe_g>7OSf;&xBvRh?uwSin@XOU7ax*}o?=KPMNb3l z6mfonT~{`3W4?!zLw3fL>+zP&6LWI|QsLXKZ{EKTE{aJPy?FfO)h7%}=FcU<{#-a> zWPTxd=5IMXBgk+T_=+Dp3keFH;W#VAK>Pf`n1b71U0hrzH4rJU-sbU3pej}qhL|{8 z!seEiT06ccuDXcy8o_T!aZIQxn$D(3sX^Xy>U}PzrzTXxe{F&G>80Lov0G>LuO=qFXHH;#@t*k@00e~+c+TpW#^^lJH;DOu z@Yq`^XSp6H%s!4DmM?3HP}C}q>HqGJM(b5do(dLospIeynv>7Wy4#0gD0nw{m; z8oU^#oec&HkE$9#M{nHg^gl}nS=IrY9op&6Zz_egol{w^yfGxO0l+FD3BQ~|ZQnyI zZ*O!GH~p58r2;1iwF;H>{z11b-WRTVo8l5|4f=5Wf6$p1@+PuzOG?#VRyP zkvAh;h2H#htg4}erlk>TG69mrA|zXl?(!M@Dd^qt%Hy=QripSu+kn zp*w&l36MW<2Qe`I6=_{cCV%lRI$9^wln2qCo3PqIq@S}&#scvne?&t&)y^ojqbm`= zID>?L$SUTgLC?N7z_o(rCvTz{QUdodO? z^9)dXZ*p(kJs+_cG&7dmR#f#5fNBT{vjBcEu&RT0&@xhTSln_;8Imx%x+4q~Fm|di zUw!=|Aql+-;)GbfKhLNA?DqmrV51$2ult=GWiE78J?1$f#Ij`Sta2gqXHloA!Nnox ztGz6CrwW{Kk4CSj-J?umY$-F+G0Z|7%=$0Dt$gwrLqd}1g|o&4{UnWnfH(uy?LDf5 z!N7J_h>Dml);J$^%F0w<=+PG_)!Q3x5nO~avamySnkCMfU2Nugt1F^ob>YXS1U<0t$i%MG&DqY5UPqox}dRyOca6!_{FA{hVHt}nu z&BIX22lEu4)Z`O=Y~TGK?jE>2efSXIi@BuGKf4t}J4yyzGt!pvhQa)7?qBV%J1cI| z?wY1Vo2s6C&H&y4QdAl1Zv>EkNHzb$$;5R{x`G2z)So98qV+G?JMTA5J5lUc1zO zjeoMSnCz9J;~x-u^;PTipvdM}a}!g%9CoA+^KQZ}**aUa0k zDL#^k!}B>w#|R~yfYmBo9KQGNU3alx^13z$#;#bB1z@0{(tMJYBgZ25P$E)<5rM^3eko}9>W(-ZZ=`x6makhm%c&=TLC^fasgbyV#A{$Rn)ze zxT?}ZA1lR=-NtPXw8)`;;cLD=o)y+C!9p(I*TYum;_)hB&j?{kg>co7XT1rxd3wES zY`AL`P?FMHd5=HNM@0qmm&x-60%*!2cTB;t0M6SM_zo7RT$`q_of!v*psmCNXP3=7 zZ#PK-ixq1|QR1vK>s9Sn%y+b-Rx~7KOyZr)7*pc5I6+k=WY}&rTn!sFe=MD7T7c1ZF6#fhVCriX0fDLbT zfW@^!){uC9vnn_GM*j0Zp56$25!kt&28+>?cZCx3Q-18`+0ZrLz( zkljG@_(^7lJIo9W26tjKVocAoT)k`+^Xe1KM(6~RproYo{^nK|dbybg?4IPdz{vJQ zzrN@eba5E;y78?UHG^yh_Nm+ZIJ&nU`9hQv&a>c2ADi;vVl$Xi+fs>O$H&jp>moK- z5=e%~`K~6&0}1kjx1hsKZo6w`>5WGF!{%FJ2^m!D)PJo^ZM-iMma`mGj>ef954e$s zdxh%sE!WBHtWd;Jdx%e2yX@5fP;lxY^iOsd#;7OvQ!o)B1#dKBwqA(d#x`utkX-Gv zvuImYQi-fOVqB(4ujEG8l%?0(pxu9riSB0A%ht=ot^O*>^L1aq0tolC7B-YzQ9AsC zMoTY(1)SikC+RMHV);tu0q0PaGFe082spvNQ}XYwH&8%jYq(26jXoycY9)r~z)gca zaL=WmbG~(y@OjJX?oa%^Kj&nn9PnIbUnjimq|$1Pr`PkD-ko;kR}FJg%0BfPCE3iQ zkHb^iWppf*>OyB)2vE7X&f@MLK%_rQ#r7=2vpoajBz2L5<@%nGs>*TiFPT}&ZF*~2 zlf!`>IrI(_T=@D#n3Bag5xc>$FC&u;$m_lNtKsp2u^Lg=dLucuv`W#}0@o(aRK4VI z*726lJEv70A#>-|-@A33u$>pDcFR zWam1(7PBCbf@%JJF#v}DUicj|i_6Deygy;}wuYGHP5v+>vKjHu8B%z;`*!D-zLkqi zOiUXMee$?&#Jo#g--Y)&SEGLYdgc=Df2G&gom?O2|5%=vw$jy0)tc^a(tE?V#O%l6zKVYrTrF zZ$RdIDg~%MOidR~5UqttFe2!`7PfN7yijO~BXtev&lx|@5S}Pna3cc$;Lz{TcON&X zC_8gsEAhQ#hncyT*1IQ{qgHj!zkb5lE_UprS5>DlRxnnyU2Ok9eaz$Lni*kkD`96F zuIm-7ins~o+QZeYO{zk#Ur30fylUmx3UY73C^ngM-qOgJNZX2)3Y%RmFBxy`_bO_S z?Q0W)hAhq%B^%sq7G(ZM=(1q7=;e;2=C-6p-4DsyFM(75@Mcf^jjsLs0^(5S7hGfV zBL;6lYc+(`wG-gE@}{Du?29F@=G+>NxEC_Ny`Fw3S!Gogw&A|IN9)W|u8rh)+xFB- zEj5l8K%8~;?gzh^AdfJ)&EddF%$PTnlAkynvg{@^_z>g8(=4MuU`sL|&=QLhWD^xK zn;Fjy-2bjxHT^U#%>;%{)8uB=dWLD(-jgU-x`bHD{?b0HlS|078nt9H$gq-pcYTKm ziw->6=Bx5uiYv!oW^D-axzV+dG4ceL=v*RtnlVW~QB+gyJX4Q@ZF|>*2UZs1;mUtV z+GS&FiO^r0ao-x(mi!;_f$_J|CX_9EeV*@@|#&@Eba?-`C8!4 zYJRnY&*;qc;FNV|+kZbxcm=uDPA(C313$0SkC;FQB826#aLf>HgoqB@tCznn-a430 zb#Z;qU2p2n0_BJrA6lPEI!TiWP&}gae#Z>NRvw$`y!X~ z)7B0Kc51;s>$YcQ2iG+PK1a9G$6f)fyY*10zRsOH3}Wzg?-jCy=_G zD;cGpEiup2=jn|<__Yr$P13PTdygIXwvh1}*^sMd>LbbXpgWfotuMk5SK_(`)*YW9 z{GCGlMa5os_^(YJjF+;nVZ#rHe1qLBSDmyHwjyRd@+l$OTB5xy$U&uyZXmFxxfQg_ zD)gN9&d$CtU&xd1qbQSUoDzIPN(Lyv9OVCXFCR;* zn+aT-b#sD7l`~9Q(3sm97t#u=2XR6#r4ytpH_H`D6Yx;(9FfT$vudN>S5yzA&3*M+vqGhmZAv`>6_K=rE&5?TT(;y{nq~t>*7z zi$A({)(k`(m$#gXuJ~qBfsHb-&;#}s9@k=%BWuvna%@`KnhPiOt$)NY{yy_N&45D~ z__H0?J}!8S83^ite)Dhs$(>zi&8Y?()lfWgIu7{t5)f^JB`raY0l|xhWi~Zw1Qgvq zsj&IiF0>UDFQB&3q`sd^UlTkX0o=Ow7uhHMHdo&D=>Xckw8W{Z^`WLxzmuA8TXk|h zd3Cattt4%;92C`*WL~-PgzR0pFiP>5mb;aH*E#q`>y<7U3)vuwo_fl5#OAz7TwCGN z{gcwx_O^BSZv%X%-^l3?XrDbhoLdy16y8Tjk%4-<rj=&a6J4WzL5(met=XVG@r}uHt zdXTWuS=fX0pRK4OQ!WwrMCG9}UpdfWiW>NXTRNq7^6PEolvm9mRi+kk`HOc6fv>*% zt4POWp#4-FVwxT^f2YkB_NvjFfmNksIl2&p-LuyhB^K8aYrQ3OBjeR*&5egm&}y=Y zdJW#XJ~X6Bzt6Jlu8a9wRV2b215I8X{Mp2=UNg3)dazMpYI-~CEhb=fck5@|pzO}t zgbc6AN6CAax{DlHAC{)nxXT5=-k(F!C&O#0D`T?GYG%V_q;OYeQ`V9j+L`o`C)fbF z3yK-NPC{q)-KrE9h;9LOTPy3bI;M|ql;1*%oGwFRxc|}HtgAly!VgjJ?f*W)9&1w9yqIvZr2-W zgm>}tJ?CYseD3kHUZ|x^0)u^r4+7-A=AKoe>r#!yJr~rd^~7y6zH2(a=Dbj20u#U@ z{XZvj;Q6t`KT%6ugKW#uY)DU~^o3}_nldW2GaOS%ruZY_Zl2`5If8L#Vsgvt7B3Vq zMmL%B&L$-}*V$nL@eMVl*I)pGY zj1`pC8fB{=E&;G$WTE7#O`5sgtv6p1S|&RdOIj8yx91$I1 zXVn*{nedmF=1UupqmB^pOHJ{>xH_ky7?xN0ktbekqknYiD`(RuN#AI?&{|D&_`;sh zSs{)1OJ5bIj{Sln^zX20-(mP)#rvxa`P)A+c*ZM5th(leH(Y;{r`)We1YNV0vV7C8 zKWsUml2V|NU8%luxAiF;e;769{{`l0Y~h}9sz1CjCHm8)G*pv@SAONky_s0O9;xyn zW0BMS9#y97Sw(QZ?xIS$TH-3JkO#G>O;$%SX)VrUr|7+}CywN^;e8zABndI{fvOoY5oJ+41PEnX}?Uu1KNNs2Vc@llqaL zx@VH>M#4p53kyYiN#+Q-E>SDts84!o*WNq-URnA1`4T{zD@m)M3eJ9eKOfoBQSqhS ze7Gk_Wu!XgyP#7f)w`UBJ4*inA3*+rsyashcnm`#sB|$LubH9eF&r^kLsT5kN$EFQ za+&W8@`McH#2=I{r=Y!GN4P-u6;d`!C5#C?Car&2$s$N1@3}gfql*$B*8ax1{4+xR z)i_Z`twDpq$39^zeOqf24JB|7JM!&1AD3Vpms367;(Xm`03!2N#m;snye^cIZHL+1 z9ZQ=$+7&V3ht&JQ8wk53(EWDf)2hdEQJ_zNbFG!pajR4%Xj>ckIcpNPJXXb>t={;R zL}_l%Me&?9NX^X2y4qE7<@0!J?53Y3VZKtdQ%~_FkBHARbFf}0$vN7tJ^0ZJHC122 zHrS8zBT)3t;TBow07t2tENh@{6YWD5o#{ZLKLLRv!DrkykRYg^{1_ppE6i}B!0nhG zFP`!FUuDr>UzWeJqQ4$!3}^l*--%w0&Ozc=s|t93{2Iv$wblSa0>_!L;X0H@a}76k zlD6rG1QJcX)BBx4G8i)2ST`~`pA#uC z`a3swGKX*53~)y!gbb;pL--5G*(4jcuYEB%R- z@mUZn*38mmT6u6Z-^o6q zlhIyvcd$ANuaIeCZgIKS*XI)@pNHpMVXjD&_F%w(sE(ZBgMdLLXy{hn;B=ig^yz}= z%e+h2&?9vI*iX0jSZj0vtv%tKWA?a0ija|{OPlw{iT5)l$u{DX^bv(HdRDmyw$-C< zd!egMEp)dp#IF#(jX#{ryf@#bw!gqRjDWjYBMBMT=dxARE!iUaxAdj2ap`y{T~JoV zJqf^7G<@6o^ZO|k%9ZVE0~F5XHFBM})G6c&RT{{T-u|rAv`{G8Ocy@s+h5jFLF=Db zT;;U~2-n6zNoH&$!6Dcpk=s#U)L?2R$h&d!T4iEA%z3t*BXsPFzF89ELgGL2K@7X) ze=nUgVDk&=7$YcU;LCsTW2>f!YOr9ZuWv6be1|%tQnrmjXyp}BgO7*)x6t_- zz=SIgl}2=SjB+pmM^*2tfYDVTLwoJkNP3OjS}K*IDUfOJ%JH?b`BD4g)Il8PD&}o zC95vW9)7be!+!gu@qV`gxXl1G}FRXyV~x5Eolx)*Nwmry2_-tZ`ck7E)|{EeEG@y zV$*-?EBcm!C-gZ_erjRbIcv(VfFx^4|Q>ZXkVIeHRwpjS;QcTY`QS+9-7E)=7%J{M8yKtKgj-;)6tg zv3L^AhEFmpUTWz8n{{clRZanO-dCe(vCQToDO7{$&*v;bZzCg;Pu6GpaL4 z&iAQwz|lyB*ZbfK(g%TV+);!;(DuxOeQ(#k*nq;fGeV|ZbsR5eL&{Lsu-%4mE zdgviRVGnKbPImz07qC`vPJJ4uc-3J1<&uC7w_pStQI#*U1E0Jpkm8;FQBfKDdom)l zllF7(*&kYdFKk3&$-YXN*`ROdyGvjnyD4dFAZ(^}YG|?Jb;60o&s>#5v74^jc9hvP z2bm7N<|_urV}zdr2Z3Y2MLO|$f@t0qXd5Rg)cV~?{^4ASicx`;VRmvM=#s`3OMspU zD4SF2z$AH9&+K~$wo=*aoQ~L;x4MNbi|Lh@N>9g0<)~rEYuD%WYNE^LyNqVPJlmXu z4dzvUxMU!Goh5TNQZBdr+H!1Rk%wyVUUTj^ZM*jHqe@OmMso|zO#b5Qpra;;UA6I> ze=r`<(9XFpeYN4;(;!j7AK))f{oN)I8jc&%K{ee=6m7L~2|zARwLHMCc5Z)_W{snD z+)XcT)mfXF0hDIW`iDH9_w4mQh(%bwqwN2V&Po56l|fdKRZf?ve5}TwdGFm7@yY#N zE%MP}PLNOV@2|vb8+S8Ay(gi1=UThy{wr+Kr%_1NYEqxb64O7@mo<$)a{i8wVc<9e z8m9!{C=HI+-%keNDXGDy|K0bhm5%L?t9mM+22IW3ut`l1-TzPyXX3-CS+#{8$tqRd zXT^()vvJ?dYs-M-NG5X^r@o6+->f2U{5F{+j9_@oEV(W5yEBlV6toI6$yT@QzPL~A zEF;#Ip)KVzfjiRc@|=(LNW@B)RL(-?c#y4Ok~x7D0I3Uo<~0P%H+?6Omt(W6_`NLC z-nEwS-ztr#>HF`6#?ub@g`N)^E(D}p3eDp?n_ne<|B4r@v#)ca7#WUE|RGyUS ziUSw1E~7L{qs*mGA$t>L(@(ieG4SyH`2d(ikp_Vp1;h}*fAsC&lv?fQ%%*3Rtzrg5 zrCB5D72A_Oq1o3aar5^r>qQAv96mlOC}CD3dmj41VfQhI=w+!((^tDjsz>Tcjl(QA zBrB}ol4+il@KxB+oWsEb%U-lOY%30a_?AEpZ)<1=aVD}+-{YpA4o(^Gc$02kGjz`m z-ko_ZZX%G$EfPzsK)y|KoZ4GT6lJ6p$X$r1+V#n2;VJL)@2*&P&6??-NH$&iN*YBI zAm&b=tIZneMdLMQ@bWSQQ?fyBJf?wJEcpj@Nt3xhxy>O6h~QL?8u|lplHKp~KPgoo zVvi0fyVC;5x%_ywKN8Sysf$^Biv(pW_0cZ`unR>5AC4}rW=7pus<$R!9(GwfSZMyB zr`d1x>*cf!dlOnT(u$tMIBGXPKh^|g?8-E0O;K(#3Ntb{>)&B?0=kI5RrBxHGcRIx zPm#EX$VUf0B;6(&jm4PIzByFN&cB-`aL`vaI6yu$IpU1aNKKm4Ajzc?%htnO)UtOE z2HEMIAfDaQA+)KH-V+G3wCpL3j!J{_N`fV9HbwKjL zOghI)5?=nInBi+$kT69#TF%s|PN=46utFu*-Nqn;C+cDLd{Tm8>;y@<7A6&##DlRL zV*Tzy4x*+!B}ipMpNS*0gW^kQQ@+zt;m_ofzxZg(on(cOobj+n7HWotSZ?+ z3VHKj%rBq{Llm&xHWlE^<&}d?qtI+;o-;ErzuWZ^8pDU?Y2I1^!uGJ-;Z8)V>-_RdQYU!gUAR{XfaQTvc_V zj245-A3qHn&LXL- zW6F`kdmBF*j}CVZ@*9tiE~e?BN0ea&N-JA1SR*;T*A?UvN}j|YQUe>-H&|bTe5zz z8X5klGa|I-o=H~u!zBNL#S=$^M;q$5aeiGSWp;2(+nj9QNMB5g6lBg@4S5=jyl(Ik z?>=kwgqamt47ZU!U9%sDro7dQbd47%L5+iFEue0qJz9e}^3KFN=qNwl&cR+OqxTX* zxvi}YEL#baL4(T^wWQT3nzn-;tgzI8F} zw6TaWr_f^7N6DEB41&50AeIRXMBo86$k0FTp30k0oL=L-rBzM|4bEl};)yd17>v=1 zcaz}-{}0fM#%0!mDVR7JzIojs$skF4d}peU*Vx6;smjXcF66pbw6oAP|E5Dz=^cJ! zZ~2W1W)cl6CpwMW&1!qRC)i8UEF_eAd8aLD`PX z%h$~&v_3QTfaWIIEz52nuESh%f5w~i?Rv9Y;Ap5%K#8}fWvQo?^-a-9e*|AxntH9#Tw zpEbq*?lgwK2FE;W_(Sh1D|`9DpEvp93L!Igf$%kP_1(ZVQvGEZi;&AZ?zSX3fWr%I z&rO%$-T4qq(M1?*2ckE@KK##}4Cev;OP@@{& z+)8FwH^*f0)_N~2Pd4@PUmKYCEExcMYRhFGPRo`vQ3>{OM^yg#HJdh}s%q*2y?!)2 zAe8aG5YJoSjvA-1X?ezEZEkYc=Wfm{ritn4Wz-ChVDJKO#Wv^9ZUJuo%+ zs3<2DmehNK82Tr z$+$R4^n>yIs|mfFur*pNH&pL^KQ(g9>&7X26{IjCt6qtR;g}{c#}fX#^x_cGH8@*f zAbdK4he?_dM!Yba&J&tE*6buBoq6x$$1JO#+`41!>j$I$Di%(4HH$H?%ufaP zdA`*xAs1oD8yi zq0?HE)5Ux3c}_$XDO}UrhAq!*71gimKY-)t&@IOp z)b}TMNJ`jQ56s4HzsTU?1TP#9vr;&(;9Z*8O7$&_jactb{2+eX;;B!VBmPkW<9wRL zaNmWvqDo0ZAWpcKYS3q-1LCZ28DBp6wsXP-E1$*p!jAa4zGt|lZq~PqqI|S`w5ty7 zS5Y7`AfBq|!W;IkX>mnA6w8ph_ft%EpL&n1S2}A(9=YejSplDDKpMesva04<3T!9g zEk$3b0YEJ(;SqWy3Y}J5LJGNTa9o^MU<#~yJMzMzJ<*NuN`u-)H^Fkv-zRZ|ug+d~hJ zqzs3Ypx8SlEx00?%JHb5GJ`6Xq9sTRu~@_FoEow>G1)xow%bzY&8-2+fRHdR z$ok%;UXyB{K9MfjHidg}t%XJ7!K<@Ox-E~$Y)h!bB8}9`o&D|KB>8&hkAsI!^A4jR zgP^81Yf{2P%dR98A== zWftBRKdpt6e33{HLSRkU%A5S$?({;%xFwfxt1NeQrB+$T>eLI4mrZwm`nD8oO>GR& zV*Ru%Jhw63zE92WHQ#*nu_sb=y?;Ij*hMccvhCORvzZRE*1srPXgIU@6dG5UL5ln%=NEz8RHDk`5Ki2=qQXq`pU90l#D2bjcBqW*z z_DdN(?_PZvh1Y5&@zi_A0P^2|r^=k4DK8yqvi|HX-d_#BR7Bqo6a2OF=$ zU+hq08L@}@Wd5+5(*X)Ud_nUG8zKrOCc^<+Ez`w_(n2(vREH$09~Cz) zhu}80EhlgC#f!Ro#C&&B3OJgCSq%{FRR;y+vmI1-27wDS^t)K#OlZEa>@{Dz2S$~@ zK#JhnL}-UEPBtd$y^z7%&e!xOl%1nL?DQV^QB8dK!Be3>3saq|#GS~d@6~rzgZ}*2 ze=zETt-|5ozZXf19&uHt=PK9-k2%Sh63XlX{`Bh!JaVuzIANxtytPz=7^SEpw%* z-i}miiX>ZQ0;*J(j5&?Xs!_UqX&aEXt_XF#l00|ZK>dn{bH?sg1aSX26gg@;I)ps7 znXujCCeWU1HniRs-ni)r=C$;=;yqH2sUqh-r18K4>?g(?bH^!#c_EFps^%kDT>a{$ zjMiKafBIu3<$*T0ireQaf5vwC1!pXckB3*)Di5L1en;PtvtY8%xnSZeg}&jntebRV z)@kKnDv~zU9v1FYR}Y*~JChzO@hhrjEJkU_vZn6G-Dcgpp>)amPd6MIY?)=zNpy!Y zTC2FF-scb4fJp5^LgN(OM18#}r(wQLomP^wKd0btoWG`2y8W1dLF{McQtTWYP(&BE z={`2C6%L_)tFJuy&i$M$tSjs&cme>dfZYIu^`Omq9>eq6?JFMGXxbfR9c?!*;y1G> zyKxRj7E2vp&!C0KV?NN#f)yzXnkZD!wRN$?U?kl&sM}%KAQ$ucR5AHNC%tMQ52djApYd!+N=I_>!_0`5gLVZx^*TgVKP+|GETMG(uOLlaxpqI~_Ayts(=574!``WA zQv|R;h(oCDPfMr6=SbyyMvaHD;nND?!}LrAyRf}Fy{CbS)&HMNAP`m{X;_ZmtZ5nh zA-6S9f2)%-8ejEgM{M&oSg9juvriRFyl*QiZgxtP?{7Bl#)9!eIta1;!%HURM5oH; zuSrz}Z-`Vq27_%YTXq%ZQpyOPX_f@XyNvx$0{cc(89>Y`10Y_;2r?*2p&u4Rw!}Ti zY#JF`e_cyHtPj_3#=9;Ui*pV?fnyrP7^~K`(?#C^iovO6(g@z$94TJZZ%IZH$p_0I zWT=sD3=C%Ien(R|bhJ#z$E<9ny5K2SJhYCUeX`s?%(58d7~YWJoUS4;=DjnZ@<1Ug zOhq~)WsTJMwC2NYT(Avi#Cas4Bk5H_(C*5QVRU8b_PzLcJ77O6eFi((i`<`Q^$|3f z2wyyBw_q!9I(+MJf5~okyUZqA6>>qyaVGtuZMu#u$AQpFV~lKdSzA25+TJ?`GQA|+ zBsjIUETyQVe0X&7<>sjIW|QDb&U^@EI`C*Ndn}zq?O6*6gu$nt!o+KyX5L1anVP=S zG<83A&bs8>zZRM?2v_5ZR(F@xmZN6aB`4P*aIV2H zyRyV6-Heng*9o9nF6;??H6 z+132le`GvNMZKxXV?`M}D1G>#*9>rRq_dRy;*igl{|P>$5=i%<&9Zot$!277!0dV# zN;2SUEga@PHZXt!O5b2pMS_FOZAJMmKT|VHxcuq_AMit^3*6>W-EufgIkGPuzIFQ| z4;RZ5kOf?GX+apXayJ!eVb5iHCn}24g%RL{JDc`s8x)6~lFzN5_|7(dR3y{Ks zvE|^Y_0kZW^L{kb8=c=5`(ayc7@diNr&5%!)>(dL(8p)*q)DL3B7)85if4v8$Gu*0|KE98tO4p0l zd-;jrjeUj~eB=zNq++Z?Nbg8`>~CA^Jm=9F_o7BdMl6ILnHPe{R;%l#ugom|1s+CK zeChZ6%5)!C!!y{#xinO}W-JO&w_b%6jktfF(r1P)T@oj~mB|0-^X z#d4m1bRZUc=fau1J25dFLV}tg7zE5J$AMggK@*_IcV3K*RS}9p1HJFTNqf%@_dLtf z*aaXGJ8eqzBlcM<5q>b#gu7n6PXxkpS@4+JC@Y_iKh39JU(El~Em5}XdZ5z1_|vn= zCCOpl+3!266AD#!e(J%tMp`yUWeNO&)XrcbLsCPq314ZK(Rf^qqkT;B(8fSgQ-qd5 znHc)k5HFiVm(d78o|+oklihf&RG4XhAG&7((u<5eOS>v{2V0EdY5Nd`viF-E50}o- zuWa^hgx3w4b6EZ;t>!bH*5`8yu^Oc+PLewHi?CmG_LSAZnN>u_biux zvGyMN`Hr2w8%kE-k2g5A88$UmoV_(l18MAVqkrc2jL>!s1@`cT8e%=}-Ir`gQB^g? zIlxGwt0=Za&gh&);jqWmE;EkzFNS9WICQibfFUS2kKh^>6ijeblTtlekq!Sdod%j5 zOKd+^O3H1~sVn^`g`uj9yepU3Tkn~eT>f;n@U>Y1&>NO9c{l7mXxv$)xDSti%3xb1 zHx?5Xm9u^}W9o;8Ey%k|0?@`j`S6`yt@o+qk`A{ok}TBfBFR%e89Y6H2A8^$v@?e8 zo=;iNdlnY9@@L_{ymsS_I#ab|?m7(SoQZ9yZR!w?I!E*-)rq_jneTk}n20SotqyL$v*^Ynq+zCA~UD4rx!^k74+8aVX)#5m5arv5& z&)LwRqg+6aH%R&xMtw6Dw6YVvd9>L`?{55ErZ9OQUSn=i@cHH8Mr9nvLOeO~_v6Q& z`}kSR<<)ztwo1@duP-?#DWnFw7W2=JsH9WQalVGHmx8aEpRo{(dBqHx0%-usGXQoU z_;^k;sMuW(B>z9AzB(%E?Ta280R@#%DMb_{m6jF>>5u`26r@4A>+=kh5O~xeEe$ga z2*c1Y4=L$KOAJUe#LzLs@Vmb6TEE|KSh`rtf8cuVJ?HGR&)%#)(5T?`v)^du);@D+ zaKGo^WB_QO*5M9JYSESWW;3QfQ{YIiKnapCIXNB83QxGR6lz>$Cy{bD{W@AeP<5`w z?Z%K}(T8*yV8D`MUgac~8MxYZ?BjD_TI<);wh~bX^mEdBmEf9~exb~6`c{R4QPK2X zPIt$e3Gan&I0VhdoVt&i`?WQ7#2%Z_R!C{~xENx&TOC%cB@`E0ndC}FOPH^z*v=)- zbc6@V4%>_5!h3)c#m?{8nf@})@CvE7Qgu?YJINNiLwk1E@>);3-lM@Y0yI0hpl%yq zL-?)#EPZ^c)^3%^s=i)nfbd@#7u7Zk9PmO&c`nvNY8+@$8s!HLabY<|al;FdKfv01 z^6J8Nb!i-|&6!%sA*0U*t3erxG?l=FXd$pH z8!W$qt8+$I{7IkXwoj+Y;zZzFoM_(eCDiZWJwKP+-%(a>^wOzF%EXs-oyZ*Zsay-c zk}QnW>0qikuXF$0{9mH==P1GA3cyP5UHX%x>F!fda9otXr+D$OzOSyo_7x2Jyd9}+ z+Tk0+4(n?5?%~SZU7seilB}E|yS@eW(V#hIi=Dc&Mc%tj|~u<1FJ^w@3apMJ_Wg zaIO97;63puCwb;IpXx1jGy>}1Y#G~0a+VwSkd_cd`L3@^m;006D}@0m%5}OMYM<*S zI+X~-^kdnhAJpUc>$=v)^NMBM&t(kqf&4RJ1%#~3`$k`9Wm$L3ovaB~FUY9fYtkIeXcTZ7NtXhy&tFr&rRH`bA^BP2DgP=8C14@p z&5K&I^_1;GD3;9#{caK?*t=0IwA1KsyOqN(K7+6#7(U<$Mh!;x!9W zr{K}hPNqoaLZ?ph^()!sBB>g~DWbfnV7!mIF$$iLsLyvbam(IWC~et$;wW`B!_0W^ zO6lp()zY(}nGp!VaZwO=@@BQ+Ve{C(r9lf$pPFwuCfz+o4Z5Vd>@f|+8j<@UBFCGDYkXQ^#`w)jx zY@OSFn*LgU!xgQzTe@iCRL)y**WhndSvM1&W+{Xx=;%~Frls7}RFtRuNC{%_-sQh2 z!6p@mN(zXMgCc190DZ2L@M}qK&ml_Ld8z+`T=1MI`1!M$GJ;2HrsAqXwj(}#;72j@ zI>Hxws?4!pqlOe5&=aGsL#%6Wk6Y9;y|-qSdN^alCPOwZ+qgWrZDd9?Az&Y7-Mk{Z zHQNsSIEFtoyyYt3iqlEadbAStX~EnA%dN3f(*Zd@QoUKV;d+NP%`fO}4?d7~U2d|h zv4(hHei~lKUZ0cErp0yPbm1CMx%Fk(snO|WP`ZzNIoRSSQsHmgygiQG!(JnKA#wHD zCawWz>EfaCFr`0Q%oazpNyP%*{H4465#j!_Rg-4kK|!+xuJ!k$t-wZ2uX!zJ#GB@R z=%=$t<>YF|6SnI#Di`Dq!kPAtgQIM_{KUT34)}^l4BKP*JAZfyy;{6f2uhiY_s&x) z(%m>uL8r(_U3*%|#da1}Y<{byQ%8@{(SZjwdNt9f;DOdF|HdbG`_@?5#-=B3MBGeE zyUw~sOt~H%ycI8aM2jO|em?EoS$`R?&rj9s6juVfr2tkkB&yk>DAPuFU7Pi!9=C;&?D4ZHt+cm58>R9QFD98*LI6A78h)!dnm7W|ofF*h^iJ|%Up$Zud~F0_hV8pY$G35pl;^nDs`o-t>pMDj23ltKc!Z zz|kR_N3DRX-8TOIQw(WxB%QxbDyF5Ahl+wUGb+cPBvKzBluAWDs@$qH8Q_yJ62iB~?1Ti7BGO+5| zD?J;=RW<}Jcg_JXLf?te#w}hpoLB3xx*>zE^VF9$jRG?Mpm8ZGvwo%N!{;LuY6|Dx z+)s>U$8EoY3kzplZ>3tKZm?B}?dvJHrKh1%p%kl(c99e?^X%tr15q zY)pkrHxbGtw1)3`ldSHm3hgQ5bDAH-5M^#^=J)cIeiiU=;C-cj%N4hU=!wFV8*6eJ zln#H{so_=?G4Y;|f}|W(U&x>)LUw;zOMb5`yI(S_uk;<~`MPE_=}~L|<~o=leUt}h zc<%fS`HL;?7vr)k5=OpU*KPq-fS4g_xYd5hsq-HW!MDyXD|<;I%-7OwRWM_*!z*{u zmFBMSl#$R@)2~`ylKfbMW`f(jp<9M>+qp~-F@CC!^bQ>e9Sp@O!uVS5d${a;QO+qb zcQP_D!8SJDFB-Lpss+x8HvXFQ9Drgl^48ZY)w_pNIQdIa!I4wf`)|XJ)n25C!fZII z&TAnepl*)X1gu9NM&)kDwwF2$8~371lb2rX8ECo|l@{{s6=%Vmehw(+AmAp(!w#Z( zJ>3;QHSM4polEYDH&u|x%~CQ+&Ns+!WtQX_m+LXJ{i(phPx-<6S8ZG1Uzv_q2{?@w zLBm%BZ}gk4tf2YB3xFNOhI&ZUVRO)lE%G#fu-q=|kuZJ|Th0qR(~bxE5Pz zBq1ZaU!>h=ZQim76n!Sj8p|FDE{gRz*ZOT`^Vy1}BE^}tqObEGNbX+;J>shvv)Wu^ z{mLrep2*3Lj-vG|QebIs9ohqiQoQQwAa`TN=oD3H0Q5)?nhg&5i(&71^uOI`MI6b1 zX?(AQMDk2HtHNgsR$nSS1R7hnP3Ylxb+^xjY z{rB)ynhM|D7r!K#2XxF#MF)v_1o?e4qW_dr#@UtNUo!ZX-~~yQS3J6h8dY@9#XBO0 zfw%2Dt`eF1NGptki*))|aL|LvN-($-hHxa@cU#cI_u%@P^TyGMx?l}ZJ5aq@JbxsNWt3rkZRdatoDQ3 zi^7?QzuHAs`AHn3s|Q1?;hAT@b~^p@7z$>E{8kG}9SuTv8uAIhhmOUkJ(os4hwQhd z5?y6>o0BXIl)Vsv$lLJzuv`9c9!6?-g7L?fu5WwL6DD!SD`;ldTG9;vhvrxDZ~+LR z_F`pb{g|hWI>zjP&_~X0^0JanE>dvZ>4wv?%RFJrw67FOWnL{Ytu3B*=HaR#xoLzY zC^<-{aWgfIhLD`VKg`=#Jh`n&L%Tm2vLu7qYMI%32jskaLi)%ZW#rDdT%HO{_x5(V zdW?+i&g7@DARgpL^mZnVGE8BN4uzC@UcV83Jke$1=H~OuiRp{uW2s6$r*cD zIw~y4NdApATwhy5b^a6#p5YCMiXM!A^P%bA@kMw}|3~D&hBxeeIb{TtEs~;<>!2xv zQsr!$3s1x{tfsC$8VpDB(6qk@yb>6#txXf7ozBAIq*T_7H}kFZP5;6u>v0NauQ{qd za6Rc(#-P&mWe+#aJPTuJF=p^gAIvp%;kx14IY5WuWJX?O14IY0*j zL@My-{_|_sg4GwJqBh9K;s&ee@4CI)M5`1PITC?4`noSu8ztCgb z@%73MKWKifEuSkRNDVVZf4;}ZBx9+PO`0yWb9ocNO#+|+^MfAQF z9pw;4L;sStX-)p1%Sx&1a%psdZCB);Kyx+kt_TZ80L3d;_o3fAk<`@ePkA&x;d3+f>3qVOz+zL=5XubbX2Ko%Vc2U>G<_$jmU`k9^g#F!C)FZr^Dg{9e|PWn01C zmF$T&hlXn~Oz6^L^?{VUJ=nUrN*u`2dN=bJl>|78#{BXT`Q(W+q9AqF?xtJ&LF3tl zjrxNO_S3^@W;WJeptfj@x`ySv0gF{O_FV5&+ADU^P3Vk(jQKI%XN~^41a!$Nx@0-i z#CN|a=8&Wf#UbgD@5BDO2d?mW4n+#O=ZY*Q`ib@5rd|Cj8uDU?a&;Yr?j|pK&Sleu zCq#zMxZOkN`OqHFzf*##If)hwmQ7T-q9T=G3-)%SXGf!CBzwq4yX@YU_VKtOq$Gnn zCP=w<-GxM(3Rj1Iq)> z@Uid4_(bh}cH;4ZV6bZGh)&E0AAX^(_O_jx!U+1v&@Jo2DTiMYo>~R?r+1@&_+=R0 zQ0mO4$tvW2!=rx*7Il*WDWzX{-bOJL93NoGygc^@c%h&G*#*#Mx;MGazp&%|P7}e% zE`)&cVV4m}W$1NIJ7}ugcos;?ZWpk4Dm^Kl8T~fn+1&5Vmy#>v5_QV(<%)?}WJMLu zRfJ7SLc;yDW;Nt&!7w-KlS8AMSJ3j|uD+bQ>6rA=)Q2m*X*g>)q3`vRo_pI$pr=S^ ziE6Qy#fVEhO;77oSXis^>GEgaJ;5hagiaS*gZFMCg^@Q*#6}UZv?{ zqA!2k?e8J@r8mwg5033&;{JZg>C&WXo;0 zlRt8Dvf=CUQfSt+q38unnets~U9+0PZYE*ar3zzy)s(Q+Wa9>bs5d>fT_jJ|IV-KS z+gf%hgGJOyf)V8!H;|i#cT>xSSDZ z3F*n4!lBh`JwEDRyZH_RW#E41O+!_CZHWCu6uxi&b9} za?>=~Tkx#Tb*y^GbG@cOrWP~zA+@TwMDQ7=jJSFDEBmek(5P7~mrzeji!P$V^y?H0 zrSc)=&7Z`4y|f*{^E{k|Ut?3kh2#811;syeq;qr^K-B&D$Y0d|`Lu;>EjocDI;k(zBRIMeF=~@>-lF}7tp-E3$iN35nhzNk0mn=Xt54R z=ylsw67imX-&fZ<%M;B<-!KW@W?}O`YnDLZ{-KQ7q-vdQohtI&PMMG(M5Co8%6!coVK0{QQO}g2Q`&H`hEFqB)mfh!S$2b;6y%`b_Hz zGcL79hC7UGxdl#uF{N%sDq|klv#jLaty7mwM+{?a;5n8eX>c>Rrz9JpRA6FEN*|`C z@$@R66&3wMCAD`R3i8#eq@~9<&U1j`8T7nX|K-~o6aY2-_77dVgt^=9)D_?8>4vST z?`cet6L6_63W(w!g{tCneFM{-ExU}JywcN%rq?Sgc}|?Mxf#!%O)(|rQ5y=Zz6F@$ zR{0K-pqit1ZYK|dGugauA=HkIsZ;G~vc1TJSYH|g^5@3cVSDuTDpAKT`44(*&5ZOH zNnr15XtlCuNf;lH|8?m)E$tp6$t#5w-y65EcP*aO0=XOcEpP!}`DjI@l2}FKbwnU7 zJ5P?$o%aOkQO7E;q~nOfn@BavM1Odgl>&_8XIv$>8a<3ILa*?>e{5vA;&`!xS4xQ- zDFJtAaVk!3$vleBI9v8qV3A_G7JMu-Cg;&H+4oAWJAz0nHS}#JFN<+2_ewFOok|;UEX@W;%1zJR=uHh=&;NDxS!Unkz6czHY4XK z(%En{-nH*jsnK45)KOjajtVf-rO%dt!e;M9ykT}?9!FP-sD{#Y4QQn0FGfyUOByid zd8RIj41U56GdM9bmm8a5`sot$Je^j}{YmYeJlI?yZ$CoyqFsMw(m1oT zIf^)KkF~hDIZLLhm!~LYsK*caiNxA?+b}o`GY2%3a3nmkDbfj_Yssb>R}Y2;9c||Z zl(4q>BdZYs!8v1-hnxS5cgCsZ6;kyWOoZ~r_^_8_!z>G33BCU_P;|5GQA|(z6wxL1)M%~Nbo;sTLnX{q_A76^w#c< z(p~ErY4(*Xw(+sY;v2j#{?30M=Rp|oU*~i85Tcv?m5f>1JvLh^G2L98a7DEy6Rd4L zy?d->v5n;%33*f7F{RahZO_*Q4mbDRgUZyAR%#60Traxt8U7h4 z@$p5Qyt?w@h*!GzB7T{g3E#P%3rFgKx2~>=BU<=kkMXO*_WC?k5yDY5hzcRnPEp}Bqf93OMt!V8~`G=1p z5@C5G_DHpC?x(lYkX*@4_V!|#H-(cKB9IE!x(~sReZ|+c&Tj$PE?~BOGALNRwFvc@ zRtL29PE|TSO{vEtC z*UD6=&F{x@7mcg%HTvn?lSd2yV+OodKpO`)mx2O>+yy<6{&o)`lU-n44%yg9GGkQ= zRN{a=E8$&KB7-hV>X$Y~h8(DWsO>1( zXwIZm?dkU_eATx*9^3<})~EdM4>qO-oT{RfU&P3fZ=eIr3WmkfyTNZiZQ|n>G;jSx z-*u?MF+6G*mTK1*a1>rJG@J6rY0z)&2mF4x_g#L>+$~^;BmT7)8mfDX&tm|>9`vo{ zoHvl)GV-HiX!*A%XZqjy6gYYBybnNI%BHGiUyPMdosX;m%l{7erlt%7bP29vzKl0% zeVuqG=8>c7ioI_ip}%pazsSRFrRns_tgU9DTF#aZECD3la|>4Y0huMkDL;Gz+L+is zp#3l408ax_x(MD?rIt|~SyU>9jWk4^sSk@?AjfT4Te+^5s2sSUtQbj?=~Yu0TtmU& z`Z!RlI0!lOtv{PtMcxr?+@&T@W}Z=tiT4#{zf5WKVRsobBKRFH-{*keRF5+%sInI8 z!`8_}DXXVgE4((C&)+EuKsbsr$BDdRe4aD-3PLt2$mt@ zs$No!H4=0~QYEtcUp-S( zZ6j+)6}uSU4Yk#4Hi$cmHMtpwN287TgJ#>md!zAJz~mrD?#b=+72lNFsFE>0LzMWC zQ}W#p5V#*#Jp?Mr{n`5{TZ|Gqbjt4J17wer%{F;z-0!VyhR2; zeUgw>0eNKCR9HK_#gFY6@<+T(W*QK|R16vFQ#Sy#O_wRMXEDz~SItRtu48i9ivxKR zw>e-Z?N7R?+M<_g+q1R#Z~x{{zkS~Zv}zKvKaMhoNbSIh#ZfjkCR)aOq1>QTt(35q z3{&OKdkXGqHsxOs_xWsjc?LR47=`NVr?-D9{97zu>?5W1nQK4Bx8D2MOzK!_%74dh zDrn9d8^Gg)4ceF{o8U--6Nz3fqS}3-%Q6l+X74A28$Yfx%vG$Ferqat`?*3s3s9D=CY3tQ=mb z-MvVe_>r^4$C*WH>(`qYJAVuSVD^0v0{cRGT{jLyMVXyVtJgLUyU`|97uSDAW|HdD z)77KdiK$WT24V(jENtPkDLlDT_Ij6XBZs`6RYA2_*reZnvQi3TSHyXkDqCERVsdPi zs!HxpvZtCp_k~U>3Wjgz<^R{ffKiIhIgX)z`5dLwj*vHQ8i-Cbn6`>Fo*qvScr`dSAxH8KR4r9L;7th)VPdJ5uv@!=j{a_d8L;Sg@EyLZsmtOt z;0aoiKyZbtskB@7hD!u}SYK6kw_bws+B=v@k^H zjb9V4A=+`DWJxbFw+tJhU8d6y7G#?O6_v{q6WKl{{4USZ)8G^4zU$%4j9rSiM=MhJ zu@VN4VKxux9fq9BrK{2e)6>#A%D-^yA$J31pnbu!q~5osshWMx7L7bEK5O{E<(WWN zcv|#Hhuj&L=2B5Rc)SKen_j2;bdA|Bx}C`jM^DyyPA?wi3qsIB71pF@et07U3RC^( zrs~gn>vuNY#q)e`J`$+AaT@P)Is8M{66NnuoRh*Jo)&lVjM-%3E*3FkJ$vZ2 z+_tw$oFYLwDS0EKRYB`c7G*UJ`NQmVpE`?&9DFbB)fzMSAB}NcQz;XfpM5JI99I)yO7#59SLWI@E;y-&6>VyV4D%n%5(qG4uZG!Td#5tljp(VpP{P6y72 zT95Usqa`wy!FCg&)JzS5s~1$`j0M^eUE$Wx4w{bHQ?%Q+ zc?{{VEY>=CZtxZ$u!^O07VE=q z{Or_V`OMf{Mmq&qY1S{R=Agp`=uForp>gjs5OyB_o3{m>AJr7Gj%KyI4Sa75tdsfr z795mgQ+pN_MX?e$FTY!GUfG@R9vgdU)L$YV6`#i=aMIFulFL>4b|NsXroyvnWHI8N zi3FIY<7r(3mwJ4QX(WfNfPXq)5+Erq_2$H{yy=s1_48R-uW}7or^P`9gKrJ?0=`R2 z-^o;dui7DG4KM#k$O`_X)h*Qh$L?R3;vzWjDS;_Gz_2OgFa0n0KibpELL-NsuU+-fadQed;oFT}BtDbR)JSdKh{%peR2!Eb0&E7@Nr54#Sxw)&Mt3Mm?0`>Z-OeG{~)bEUa=)fUx;hh@)H$G|y z)jIr$vzVsJtvw$LQ-+UOOtMGr&6qdfK1~H4XuxbEE-6jw2o!wUXqbbG*NaQ`6TOD+ z$`CvVCpB-Y*x7k`|Ds5wdL9aZew}mjbUK&H>u-uv#l&dUAGK-99k+*!2UKnBqbJOR zm+D+_XHd!D+=b??3@=l^qt5scqTp$^lVFgkX{l;l%jUd(3Lpzf!Z~`Vfs%bq8t(^r z{nGH9m&OT5ZJNGC-SIummgR$^47uxe0uF zmMjsg*Aic%b*sMi=5{F}0L?ZoH+h_6@T!8gMa|0Q)B|+k>c&a>+4xjWdxVmUG)szg z&1#?YV;u>ZXTqu7GE;%ekk7m2%%p14Jv_kK4t+SwV zK2=@igiDVRZ{uz}9+1;KDpkGUk#LUZVji8}lf!2=y9r}uv_J@Y<}-V>&w2!(V9=S=G?pdiAtuz= zbks%ES`|6vctaPFsBE;;#_YQ69hecg|3En>YZSK=>`p)4==R(k(TThXeSBy7ZNlO{ z4S#%#yoTAbX@=4Y1!k_=jh_lzZB~)B%U5U8Mt)qfGFd$7jEbL z)_HmNsBx>uwH9)txkpF$U-f-np6=r;w*exQ{pgSy3>egW@k{0bW8@E?$;9bX*PghR zbzc`ppUVQK!2{YSYkko1EoiZCqTUZaMBt79&R*d&gd$G38iLyWc6d$-k~>PdeKw4{ z_#zM_a}d9q(t~*N1;${b^KyIABRQqu>hs^5zkiYTuK6Rld9w}F^-)(7Iv4aF{FWn+ zKq8$lk}|7-HTf`Z@pw99*w_5@#k-fcF$08WlFx+FXv`V{lpxmzL3(@fx?bfsFgmqC zMf&0HCC@zx#?V+5T6U9ert)l^QkD1jfLPX6?(R@z=4L?%QTx}JsizPdb5y~U|0;i~ z6EE@!-N@=x@bO!_<_DuCax;g^LrqiRJ5o!2j568B1;plbGlF90sW&7nBa+WcwXc$S@tIcR|Z?={YVa>Q(e60l=%^q|h zDp0A3O0g=u-=c%%?II{b zA@62eS$(m-QWj(Dio4luW#qTG`B3g?5hqcwMpfzW(uL`hT`GzRn#6KtcrEqH#1o7j z@X%a#TEQ~}aup!GvL>95kHi~^){?If6z9&Lm;ZBcf63?F7`C<{u7pzil$s*)k^^oZ zSDnqA#fu6Lc66&``1i&HZ*iTpKz%1y!Cv2cB%^wynlWRi^^Diqzx^HI0T?X?%8!z# z43_j?wUujoK5=w$Mkd$)yc(8WTWub1r@k}x!z#J({Cwy_(4&&!Yuddcsr)}E^K5GM z84@EWCK}1Zf`M)oc2FEJ=h@h}Bf?Ccwm4m~oy$`$T?f-9(@9xZJ11BXB&6+`H()P) z(*RI}&;~DJmpbFdJnpOCoa_HN4;*cT;BcxRdMq~(_uc0~8~Ii4jES7qYMtFJJlLv$ z=#^>oZ3nG}m!w&g!E5aF@VXD+!eCZ6mw(yG?!bX@D6{K{Jo*mP6_tXWem7YZ&n;vw zhl=sj_KLO&>q)zWC(ziNh==8d+&mG6+!y5k&}BgI{jb@O|BHg*{1Dv(WfXUW4+EUE zj4|}NY?5?L%f{M)G&Qm|_nRU8?j%OtbM$I;f8qNEKjxQh^ysLeWUxcAq5p4w#sQ&z zXYmCG$GpLv%tkUO-~XL9_C9FJqMfdJnBIqWE)HMuhE`KeW|ebCR|$JZch^gd>x#^& zbKwFs3h{()?5cJl@*l5^YBvYNi+NGK1&--k0KAVSG&;c`!V14#a0kr&zC=>G9 z=IyuPw;f%2lP=UhBWGWxaDp7cONo7}zFyJ7mhELaOS!AKw4YUSYV)IK#Z;DNLxa}kdM-8YW^&Px8FPN6<*feW{JNgLX|bT(sg8X@J&E+H$kJs&TA@~eN($%vAIg-l0@(Z-BHhkW=;a#x?t8@T&#Dlpl4R}KKlfUzeAZblL zMEE@#O-5?>hI}60E3~v}nr+$N^e)l=98l0f)b`XS?!C1^6W4bCZELHo*I1YFo1Z1I z=4=(A_e6b(IM+bm(Wbc=or(noHPV=qy&jm!;>bb4{ch&H|Ma-Cppyma}mkI+B zN-Y&u#zL)}mO&pn9`8KunC5yxhNvF$fKuf@t_--hfS(G2@CJwCN57l~X6Is{ZB=D~ zI~s@~cOTVl;LC2OAN`04Hm}rpFVgW|3p3Xs#cnkHtaN&nx=W2eLUSoxT6H0^$fxRU zER&)`KJXIl?w_lYQ#cZofqDyEv3-D;N0<>NgiM@VbqNt-XAoPI_0h}*&bAKYmh zSz*eD&DO!;8HQJnP)_-F51Qj2C}pH{+g&~_aZbLiRZuQefoVYFogO=tk-TOn+Ymr! zcG~O)ecqEV);9TgMV7aNmIEH&?vcqrLPXv~Y zq@=re5s=%!NB1@gIne5vDqta98pbR@TszFtZd_I|CqHc`e=ckD_;RZPmqpd9IkfW>lU7^K* zKM2;K8qAaILJ3|-Zne2q4R~U0I$~#HqO*K^rRwaTQ=kGh#AUuaeS*dW@~I<8O`oKU+1qwu+mZK@oCIBfwZ_0+|w?*UmxEbJUC{A zs>(7zt@<7h(X}lK(Ug`WOY_2wY!lg`GttN)+1jGKx35S^)lNKj!)uaEAoXfp!(dn8N$NDBS77ke#%+-MGH` z6ZpE;XuIr|gLsDj0Ab9CL2mp+w0i6_?|Iq_CXT0-A8?>pnwY_&K6 z80?$5>&x;y9`36gADU{Tu-EKz!s~gklB_*iU4*e;(54r6hh76YLhl=~lSiRV+@0v&poIyGTZv^}lETZSx1CF*p2_%BKo&Z!E9s3k zu@TuXQF!-ih_lbrL08Wpzd5V9;Q~P@(J(mxV_BwQt@OA@2=)B+_ko>RTHHLf+@6w+ zk)sk+W~`4XFJC!5m=ZQxRgcRvsgm1lTBqG*MzKvp_TJujj~Xut>Fb|-ufeGQJN*=u@h7hfh3ed&2FH?KqacMKLiL6DGQJ!(pIm1L$>+RJ}Z z%$xl)r|!U8ihnfIzwN_k+MdCdk$r@SIt|w=ht|P9X&VUAZkRyK*BH}7&zPfFSu=kD z!W<|qnfT-M>GdBKTtNy|y}YTE!5s7X$2a}N8Ub-Z`wf-VbnvwV44s+LMhI>Wk_1q_jW@8<9d+f?1$Ru0b;nt0R zCnekBz>bgQZAX!mMOE9U7GW^uoU(u%Vt;dBr-&|RxCpPab9(%v@G)y{8bEnhr~A0r zrC&DLl5hhPt`rzT_=N9 zMIt|N5-U))C=0Z!4LD zDgWBq(AK!M%nnc!Y9{V-Y8!drUWdv>%GizRJ%+p5*p2FSZ z3kO8G-QJ#5FiOhD^e4O2p-r6ZM;(9E$JrFMT9sf1JW1mW4ZZS>#To^#+#4Kho;=C; zlB*;jNclq^91-`8ix+isp@~9J9B`B-C_NN>jO?89%6)3jELh-EDQ;F%ku&Je%#Vb*pc#M02<-)hX%r3u2(STK^(aBoZjE}K^ad13>K$DEBG z6&2o)l9m-?$+)B4)|QiHkYoAAyC;!%lrMfr+Kju?G>%cgqSg`$@K_Ni<4dK|dr$Uo zr{ZWd`uKFT@vUsy7;%^3MtT&id7*`rt{GJ=zT9W|pQ3~Y-6edRU@+96-8 zh!3=Qnwfrn*#$Eb1a{!FAvQv-|G8H89iu!>K zg4D|%GPvLSY$3?r!^3%QvX(q9pUl*oIe~z3i=IS;@^lF8k&k_Mk5K~)ldbElc&#og zvB5$ZVy8^1O3rO_IjhxU<_F1)AXL>*_SlS%g}8pzDfTocIEHP~P}^?6%Ry4|mcGbp znXOUBj=li`q`ay+tH9tFYR+3wl)nrB}vAS;&({mq|LdD%(X4ze2& zAECE=Esb%R$jC8_+cp7WQR zcK0m3+8GZXMEM-%C5G|cz79g!QZ@d`v-yWFCZR|SzAk{ zuI?Wj_aL^sv=~-OuIs!1cJ^D@{Qb|$Q3@X~D|@<8_hKi<&L&yLzf#1a+q?FHCB0MS zH~=I`9{0bzap&LPM<19~SFaL3vmfn2JF9H#?1x2}Cy(V$h2_xPdJrv}%#eeKK8!f^ zp`9ol^!q4u=X_}WPp}Wt@7#&$wiX(7^vN4cZgnmiBrI2qJ6dw~cs!>o)K?xfjWtZc z8a*ftA}}@1w}))+d};^s$2O1fZoZQb<_RMV)#1W(behWj8s<~p$eL- zYB*lh93-?P0!4+ zr}&FX2arhrU$}h)eS*Rl##&XxHJ{P(B|(c{>q}ijXy2*pM;{V@3um6CMR_uv{7z4e zxL08+KzY8Q37OLn44Bl&?{SPpky1;0b*m$gpmOK!>+4#r=53S_H&4e2fp@QtpCFgUnuG+n4; z5*%x+U-c3jAYf_ik^^0Xf2%+z54kYmtwC0AgI}4Vl6%|4#KpdFy@JOPDokdp^L00% zWv>99M1XdrXaa)yw#cZ%NRisQfjV42n_JISlpjGI*=icg@Z*WjB4|VJ>xAdXqXs!& zmuY-axit-~d&A@I_7(7eRQlHwsy*W@i=$KsA5(u4hmTAOnkU(L*Yaoj%_!9+30y_~ z3`(x?I8C8W66nNeJaltkdf)2h2<1%(YrmQ!#UVw~wbP@x!1~_BEQ1CYS(C4twm*>i zv=?AHV|cu`j~^c;uWE*BykdqOlE?5;#e~^jA>iP92RKPKl!$bDU1rVs@M2WJ?5VW$ z4lo8Rt${?!Yl553$h2p%{WCuear;uh=7kH@4v6u5R1vK|z6}al@M%I!o;$!=8*hMY zamQOV{%sS=?GiSZ!b78PV<~+HH1xM)^Fv=gzW#>EN6>%2hD)(YPp=|~xWMkacO;tX zglgOY_@l>Zg!ojzAc=a(?ANmmi<9wEzqvi}v^u|Gdx=B=p}?2})5d_FW|bH~UX;9} zJz$QLB5e}qRCQ8rL65R{&_=Hfgjyx+>O1^;ceOFq9pxOsp(hM#`u}_4{{Nu+uQ`1ST%2xWgaP- zqS-La00z-QM$ASg%+(?5<>~95V&agmbin4X-j#?2p)y||TUoPOH%k>LSd*m{2&lXk z%M4$+_95||0mcSSFL~OiT=!NsHJRTwBDmru7ljl1fG6?XtH{MR_x;pxb&w=0x^+&+EtLMI?00Uyy`Z>Czg{|cxH&n{{ z{br>~LsaNLJ&G(sf_o`XcX8$U@`>X_A9*X2>C!vE@|vI5hsW{@qYccA!GjU1z9d+? zM-0r4E9~c_)OaKe1Nhgd)5UiSR+iXl@$^3II6ooiezG7vPb5i0*5YJA1*x$0QsZwA!Ej^3lC<`@>iAksmjZKFm{f$-Tb zVA=Cio^}DyaVmHNF>^S?0q6*Wz289N>v^`7v0#;jaTcYy4 zlE3!Zt?bq2!axLd+2f)Z>f8_@8DR&qrRU6S$&A~4KfZ2p zr;OHh+Go88br+km(Xe%)wDAbp(O(8sw5y0g_TS50f&z;9)RoMuPiI*D@A=pJdgY50 zeSO8x11;W&jL2=Pw+@?0yJ{;A2h&y>e zD_Yw9beaMrPo?Kpgm&=$XHy6w=S=x~-HTjVd_JEJh`B(VD>*Gi(5{nb04Ywt6KXA% z$W=5Ke`_z`#nAsD>pXy(T)TGdRuL5um8NtN0jY{~5ELmQy@Xz*hK|(G-;D?e2#7Q( z3DO}nA%xHp1VlPWuL0@36FSLx-TQp=fB!kJGocJKjG2e^ta7jGc4}+x*x4yJ-m2$9 zUJU+Q`Y8()VOWngI%%iz0VAIF1>{;}%|gKZ#B_u5;I5ABu5THRfK$Ru<=p7XSJ9%e z$D~@83-eRzjW8pajRlroKYU>$3@~d^IB%JWB6`*Gb+q{PTn8bLhlT{d)1ja|q-rhoOL)jsjv$*m%{38!m8TSg)l! zud(C#)9ZuH&mmWEhkrI#P7z=iWqfKX$>tspQaf7<1AAN0S5VY1S2qM`UrE%?8;;B| zoLyd5g?(d3w%WG$zX4gI4P`7t3BH9Lyf&$wC{?W}Qy)wH(d(1GXRjnXr2`kjJgYz+ zco3euebRS-RQ7m@)bzS&1ru~QvY|nR9vLBk7?M^l7u-(m&QaIv27VQtSk^6xXA*tL zp>$?uDG6~eKherp+5pPQ9svrlUhd6|TFO8mi9-CIb9sD%rlZ(dll)wIJ+pwtIRvm9 zwuJEOSRo?f&!2&G&}Uoqfbr)%BZ~sOi-hEOKGNPxudf-|`7c8uE z_`q9Y)TmqK4oBO|>+@vyDn1q~gq>ZvS24|@q^0%sM!|)P0C=y0#p<6r;@{`1d;}BO z>-jI&ndch6)>W}$QajfKrI)12aGWYC+14vNA>?_jtt=ZGz67*BGt+w7O(pisF<~t# zcCOQKBMUy`yz3&JmAkU%&A{qVSpdFg!St7dXQiYm!Mk~gtJKhxvD(v3zX;#wQdL}5 z;sA&k_j^8S^WfsjXOSL7Juw(r5q5@8{QBT)rFOgHFN;kisE*WYc#a(Mw=NM2$T! zWKrngq5o%Tg`2knIru>it3F~^p-Evyc&tsAyW;eSm&XQ?rorW~ktZEF>2p#$6f}J_ zulg*KpFTp9?K(T;xnUxm@@(G}F5Ex%BNsKOG2H?)!L4%@&-dAmrj9R2Rn2i58E?V8@+>!h<*(rC?ITF}BsP|HMF z!^ZAO7y(UdQ8KeV|7+D~T1e%i;)5~w(lI9o;k4TG(mP<23PLvP_mzhN!e8Yzlf`yD z6jG=gnd;T4a9wZQ+1PO{3<^-o5|n_LbaBf-k2ksaihh^Q_%0`z#2k_LiEo8>|Q+aWHzPO$^sB_%j{+N=-kV#$wdFPfE`-_UN?~VV?$dkXV znRNpcD)C&<{YNtLpQCk)?fC~VXA7nCn?4?P+=#_(uXg}%J;!g(`MsTKY5{xr_(o!! zw|@)N+;0ptU0Frft)j!~+t5ZJAL`OOO|WHMoj2uR=Updr7!fNeF1@=&>TZAt3K968 z8ucs?Qjd318ppryjOk*gsV@g>f1PpySGumxX_kzE-igHrdI8(SQx@4tlyA_)YK@wk zfmoV4P_loT#g_Nc^YoITVYSy!h4WKKR(7PxFtFyw%2$pmGz z5*e$6afXtl1@}ic*_-=D$L!|uuxa!cfvy1{m+k6h+IQd|VS!TcUfMH|g(8tX)-+~q zQDb5-UudHZ$~ub%+}s0}PY8~?(ikk-{;=O>ZXj;ViSwgeC#VL>r;GZr`bNQ!CdQl0{@BQK-{v{76SANV*D(8%8G~mBc z8-BQTng|>KuPVO7rTqW63nZV%2@(rNaHncz(*YBk<2GYH7B#Ob$DQY9QiRMIie0LM z&cnh_m3GtFzP72jp&qF{jrJ=x1gTo%O>FMp06Wt5cgvKk539?D+4`D3p$BQJ5Tj^JflkQ#tEQmesz4)z( z(0s$h#i{W59ji{_*()vUM?8s0afOzgi;X|Nv{2AhSkI_++6gldJT8=MkJ29KkX;czA+b8{GR_NgQs zVT8S3Ix-JHz_Rg{Vnx>DP9YmDo+Xbm+0!n42Aq6+WE``2&V4q6)v&S?@5#pGt7wqT%;z4PR zJK=LP>Qb_xNq@weOug5{7O7|Jbe~H$cg*Ev69Y_%!Mpg1oqgPW<`<(`Ykg+kiCS-}RRziZ7GYX%tF_9PBG66r1BLWy&ime_OxhjIdOu zDT?fPEB>t(ha7W2cD&ZrvMyxr?d~^8;CLsV@FVlvZ2zJHxL9S{zflVuf-~n%lCE=7 z5hSAF97d9I1s0X+NkmxS8Wqke6Qv4duN+y=A2f#}Tx1`@JMs$6V11sc_f+$0;fSo_ z%iwZaR-2dPv*?^mmXUNs`f3KeElN(y%_VcrBO^%Z=?&G+8tEG*xTBAx{oZq5G@IvR z@$$L`!J8BoCVL=ylbM`L>1ON!W!_U({F!Dt)C`!5#~n5vK2(0$061)%r2;}%RiPeG zXo%C{_FLVgD|g=*#f5e8Y=VBUv z)~WbCZnY5W(uH7zn8>#q^#ySY-7%AjMM0yYs|9?Dwjxazaxren*d( zWnXuG<~zGdE(Vu^H5$wAKC(}ex_84%N-bFo5HxbC%vn)o(=8hjVW7;_z8f|xF4U`I zap#qT*MPl)P+CVPxDe|-E(>Z|R;)QYb((iR@MyXU+su_CdBAmy>f;^$xfKJ+G_Z~5 z&D)3MqD!UhwvA%DMIJX6u&H8x@>wz4{;jBPQep)km}0(QGBP#>8~#p9D>`NM2Uma> zcG64~S+Dr*K|V#{MH`3%hEbBj`Phk5O(%+%_sU$HUUs2b*@UckWmRqP>y*5HLkF|O z$iI!4qKcj~U3Ne}zf1n^Yu?nWvlG`dM$&FFF-2&hWyy?Ses%`T!F$g>NFBPKf_xmu z!Ws_cJEy0oH^ZTvD+bwyVob3)s1zVO{;5)UxXgJEC^+|M@ey|uy;~5e&0iex%K@W` zN(sq+;EU+&yi@PFP~q4AnJm;d^`u-7R0R^dKnjt+B)+x;&u>9<+z6Y-R9DV6EqEZL zt8KRIdWjb1Pe1S-(4|xU1nCG;AlB5-=wN92h+pfjp5eWDLx}3n=63t% zZFV7@qJUY=?-oGcoG=p|OJn08lh&~mdW)bpkPAhCgUR~Fl|mJI0i-S+oqmE=F%PeC zEXzH3x`ClVCGfUj%<1(&*U3+bJ>Nnt6+Zs5yK34tn!ab-IB$cRirUf?`EiP8E0y~@ z=iyZtgoB8&ng6*Bn!CRQ?KR;HchSGA#L)c%gs?RF00n(6)R&tcXYmZpzA~iE5|8WQ z1V`{=(jGy3^(f-=5;|(#9%sZ;H4h4`!m%{<<;;PZU){!-{aB5zPPsc_0%oJzTt>{k@dee4-({}6?N`DxfiSU^Ci|yBW|I8WiSBoDCD^wje|1# zHLIb3QXUE|8j8zJM%@iZ3#1X(^V8{yVY}l(Sz`VfI^$GIRM31MU3TtIep+W4TutY9 zwj4~Z!SagX+KY!DFXqRWbAPO4@B%R#;IfSxp!gs^KVPxAyy6SR<=2=0;^GQd%#J{^ zbMxkQIOrv7V8l&e?U>$taMMdI?`0#Xc^Od~=--)%D+4x)ve;?$%6IrY zEUdbR6!ncm1uDNTjn|2~C@4#+H@eHH0WFn2P1h^S z29xSR#=N~I4mjwjR}Os3Z~OU97=^3iyulm4@?*ATFS4Kl_HBu{;qTX-=O}14U~H10 zuI%Xn2agb1+kcJg*yaU(04BVn{2jwH`}2 z7wiIX#!3ukJ>Ds^+oua8$Obe|4UmT^LBX(39=n-Bp3B$GFUW7OPWTvhY0R3laA<#= z`Q39-!E^)x4yRmD5cqg;Oj_q!wBm#C)>ELVLR&X6>-vw^D)(Kn$JZ*g4L%Mw(KN*ODT7)*IWdCgP*@7)mjH- zxcZh*8^8pH&wCtMq3y~E0>kw3*LU zGt&wzI#;)Pe-aW^q*CF@nE~Y-h|8f{iw%pRq8f4#=`1Sx%%Rn-!_^x86J>HMY?Z+9 z7ivY9KZa82<(_c7T7JJFa%gRpkB@t)274Z8n7Zm!+w@onxO=m>r1T!;Nu+S%;9Ad> z2U~%MQdhEZSp_B%Kwqdw+D)nhus02QR)!rr$r(yWFpkQM5{_9<>*-5n9Np~kYp%G3 zRf=B!mE7d|qg@pt{_{b@>6CvALRxfkTBqx2yzge;K~lj7)v!wzknxF$cy-QH^pB?5&%$XG@4ov8 z(}l@v6%_D<%(U^r+w-YW?SpTn^=NXlz&^eklOf>f4PKd8VwOhG=3bM!es-~ED*sr$ zC#lbhHSj2~yTEe;t&cxFLg3>s8A6PV4R@P7dhbPZd1EmAt}b_bp;cAh$N^$OI$53} zB12cfOYw0@+b6xQ$I*8o>9pw<;x>Obs{QbvC!LT^7fy z=UN0hl#Fqy*Ac@A@@po8j^tCihvE(H>iMat=;`Yx`sN~pyHGVQ7~alB27>2@gX=A-4T;Mo%C{ppm62(_RbKPn-;7*f5?F%+n@}?RvMbc{V6$7 zTF}!t0(3MTa$4J$Od8Qs%Ln1dZlVnLVwG0A^Ee7u_)EDvzcBx2>q*-d&lY21MNsm3E(r4~(gBv~phqxIZYu&}L z_;NSW;E~gtB(%9pe?9f+mL%vipw+-b&g<5@W!aPAWx~iRPjVj!<5IwX3s>cu+NY|#Vau4iUH9JXL+?$$ z0V5qzV5m;_pQP>bf6MCroHsf7tA9OVD0q-}W5O*vQvC{AkTeKrl(JBg&8R{Q}jdU;;rJdgb^RT9Ll3T zmQ3or@ms(gtP4tQai{Iwb3hcNI+)aW_8m0FEuckqmlf%M#Yg_YSWqCOg@6uUOlk1|784;mkKV)_F-`x&Y z(HB@b@Z+3|SU^J{_dtQY8C@;Dl=}wdl}lVoUdFDB`?{Tko!>(gPDbnCIyDYFn4U8W1>VrYhk;4nNIk^M!3VP?lsZ9Jg zkwv`?9O_29(qf=SMjDToek6{QrtqS6uPBCZJbv}Nzq+Rmt2c$FK#VP8qv`Z5;Sn)a9r z+3L&(&7e+FGfq=T9Z`a~SrB03GFf9$GC>W=1-tJIBJtpy(aUBp!Lk(ZTr`sAfDY@k zW=FO(J=Uh+fhas;E6%aEMdYQrsgag{toX3;UPr!W`{nHI#K&i}&TlttU^cN2BTY^3 z&GL?LC^w6DGcm7&5IS-kuvap@W4#uUI|Tmcr-o%^D!*0QNh2QhH#N6vT;3bpX~c!h zy$l%$o-4r?*ZsPeuC|oFS1;Ynms7ya>z;FaF7mIQ#dM1geUw67aSbZLLSSDWJa^#p zN5uZ0hwb^*zpsk?_;9QA2ZhVQAp<0}tbTV`1+GyK9JucnHSCr(wQ8_P!HAZ>OibSH zbl51>`7atGM_vgt-Uny%h*eSJ#XViD*@!c&M4%)^RVfu+yD(&9XmIkonaUcKsrSIb zEM+MaHGtDYWeycgJR5zAPiW;Jo7qQSqeXDe`vT9C@>K&aLBSe$7SwFTGMiWG|N)$EiMb`Rv zH1D)@)C;HdCO|9#ZCbEWFnrBkdEeXL$7_POF3+-k&h^Od`?c*i(HaA*=x!dh;NP*4h`z zz1Y7ZUxFw=_JeH2eT`m@Xb@&nSy9dY!K!&hH>sy`!r3E~PmLBt!k8t~)$A0M!3Q}u z^0GQw+zJMqjZKZ8t{(=T8c(~=Ew;K$owfN0xos@apQp$kCI=pP00vrQigQ3*_{1Tl zl2tq(x(?;|IqxR96{_#KVH~{&s{K8iFg$NJ>)WplO#)S*uybL4~fUIQ} z+JU>>jId45)V)fap9OYjH_esf)L#jt+}*egDrSN6JnTj*U9vt1gob7ZTSyML2=fUZ zcp5u{DQmCSxbwRXC&|4XD%X=-bK(-X3QBe!V!EhirWl**DwQz)XHk_V})Wg=oh>hh@MUFwU zTsTl(xkC$|`s|%Ow>Eud3S*t}0?DJr%e_KqZZ-67stzwTDd)=`W3Sp&Xyr@Te6wPQCD(5thtaqF`d?YDclN=Q=t?6U;d7{{G| zZ?2;noHfB1Qj>9PR1xji_;?znlXI!}_>w7FHezhEXUJItzP^6i&GCdm-Pxu1QKahU z!L#jb#`kelGC1e0ZTT{clZCGuYD{#QilEVx4&S%2=TuG|*3;+X6EHF`^&p&3IJk8K zWkG}@7vk^mR6HUy_o2eQSE(RKTB>44(;#8?D`)9Ly(BvLgmnIw*riyR%l}>@qI&nQ4%~eb%`7|Ghf@S3d-t(}Jh% z7a{TcPNgoyzVPkRqEeLkSr>F1Z}tGUw{3B@$e5wasphLd^3mXzhloqc?0`(_`h$Mn zS&q1#CEI}rqY_)Qq$chv3^tqPvZ#R5b)dN|9&Ua58#SzP$ zW$+-<%h;=km$%f+_h(;YMCbyU#-Vq?>vI&Y-R>)5&`atWh|^>&!)Eq5fb@k2*Fj?e zbuHZUkXfUg-ssA1Ex9WXevc#1DTW7biRxugxtpigPx9*=OshjIKmwq(i)+~YwF+$PIJ@=;#NXMmUbY8AFb_-TtVt9$yX z&5fxhE!E<0zF_NJ`Wasy-)se(Dv{6Xz5JtU88X4`r~8`Fw`LwTkb+&$HpM8_mHLSh ztiA+(**y%<1C=F_Nf~PdZtw83PS%126L&>Q4&7@v(UkFNe`MkyW!Ot_J|=azDJdx_ znr4IaotfYMWi9FE>6gXBql~q+w{LIUi9-)T=4M9wX3Eb)F1^qMK#?q%6l0{ozTsnT zc#Puf;7)qM;|_h?ddbLi|0Z8so)uR<6nBh21TCN*wD>H~Y#46>`*Dg)yjj17dvqXo z?J!dBjOKHb&61!s(?tdYOxU5PQf(2|u z(Bg9iKwdt|%Gd3W=EQJs?3IZlxY7kT8=2}0Hp_<=*0Ei^WGG44CYqMmHlO5DtVSbR zrKEU5zjhIf_*jSrI=Y=u7ME?ZZ^Q4X|^E{-FKV~=byrwZ#x^X1(XOV99lk9xqaW`tTlbL@?^TjA39p8i>c zEU~p%RFb$uItFU?nvGY{KWZrGIp8q`0~OVk#b2PQ%EfIIdw^vr#C7%X)b`j!i^h)- zW|qGeF6KIhm%ZH*2ZGo9=DNke+ByU1RgWo$yK65TL&fR}O!@Eoucj?8+@(Ld38^0E^mypg{MLMyXMW3@C9HRI_Jnvle6@75 zxv#4?@!Zu5_SNe6Q=HoW$g%tzmHyWi!N<}T0m&<}>?Pb&xjxBvAb+k>@cHWk8*t^H z&;IkG%l%j>^1?$)KDKU^)9G4YtDPp5UIBsPQZJXlfX-DoZCSl%G~2M5!Oj#0X9GPA z79{=9-zV4c{mutp5gxyJGvGPX zza$Kol37uC_geO97qI9g>$@IHESFs+p8L!AkfertoeR*l^T7)(WWFhBYOSD;b>@vr z1HKMkZY_O1h-PA@lgx(PW1VR6adn+dVk?zk1QWH(9^$Z$V`C2yR!0RsAo%GhG z<*g6WEUKhbFl{L`BqWe(Q&zKVWP_P`Yz#kaC&DLK=6k%5Y&u?_Gq7=6_n_)CjTwt=?a*rsNj6!n_G`RwDBh1 z;f_mEea!#mP5&E7t9L7=d0(*4!=%}ig0F)@6mXZ7?Kv5k$^Ccp4NU8R3(x<)^%u|J zFF80*dXj=OX+?c&)gzf98G&W!fhv5_HJO~;-)>KG#gYOWwqr>VMQcm-KIgSrA3>In zGDA5UZR1Z)?x2kS2ILLdMZOz-BdrqNo3)dA zvFAT0z{Qv%J*vy@K(C7;Nfhwtt5-YsQ;=*#xamZXi*X2cp@8H>vP-K=L;scs}kNf4IKkG~rueBhKV^G#~Nx z`ui6-L#qzLMp@!QY3et6PWybJ4<0Ef}iS)ca z0jmZxs883`fyjN+MQ$D>3^XG6Qaxybmb^fQsw41=+Np9k5ktIFJFrd7YzQhO*mI;_RD zf5x%hc(0ihbdnE@51e1J(7YZ}qnw(i#>E~yH%E;s-uEE{+dl1ca5XS8!l3FLm)dny zR7@S0^i)}GdqUTUzk$OBXOo0fi{dVKaO^0VRv4P;2^vNJ#x0eZJz=;ZjYB!^%_?+a zA7Wgm^+MxzICR2Zc0zKJF89EvKQU1{;cM2WTE)(4WC>i(Tdc=N*=at;AsHs=~1{CpQ{ste(*V$#(olA z!0eu^?OVT`8`r~I15xcUdfFq)0;$P0LWPFwo?!VZ33GYL#3}IX@Ex~$g8k|n*hF{Q z;rSE{_&tn0jciY`#bzQe^75|X_Qy1iCzoV4Qr5~0jZ6ldV1tZab;c7iwS+j38u)9d zv-h#uGeBBW_+Bg?*!|Hjr(Z%>cQA?K%#Pr&CM}Ql_gC0{egzFZhXT-N*3v`qe0pRfXK$El`F=oxOWbH-{lkp2ZQCdEd2UUz3k9Ii?%&8p`v*At zKhK|N_t3rT_Jih6iJ#_PXR?T{MKv4~rd@-MdCl#&a>=7TqN4f$DwpZ&J+iQ&6U7mL zbV$NY6HBJ|tl%-je!VAl&3#jdXi#E!H?qkDGvY>?VOGwzvT`2s6r!V8XqlWo8Ozvd z^xrz&KHriAN^O2M6eV50l5J9luOwI-L(6&LkR-Zf6P$bdK)(OM!Oi*;#pcGwQuGjI zC*Gz=8MJ_71K@f6V}rBq8mYD&)xwX2!q0W^-b&e1-vUX&1E8c|MSsvCE+o52vED^8 zMVm9p*ff6oBX`2^oiPp%m%_E(SYVj-w4XlxCg+vx!j165dXg)kGy2L?>KQn}%?dw_ zttXsJ2$)yT@1l|uZDv>ZdgJ8v{GKToA|LX{kLi{H1MZ%F#XL)r(RraRy`a+`>y1Q( z%~@+FX(pbira3Mtm#O->zJr)U9EfxjFR!ZI++KcVHJ9EwVpdf%>EUJ7e2iAhI2z2C zCQaHj$5R)jEm3lU!E75Lt+FBQH@p4&Z#E2JJFd~r>3A}AV?#-?Idcx5FGDDVt+O(x zrUM{@TPe@b#okRz>ocUL-N)9#qR~$HGqh#}#OZ5vaXxKsG(hA_;t{BUm(42)Y%~d> zzFLvZ&$Gw&7kSH0vdxJPVq#;8OFhr#GmexSr4Oy4otsm^=un0H{7dkb7$bgB<@_u* zy3kBg2AlY`VUcGyLe2u3Wl2!nT+Pc~z@t-JB_g-#p-QCl=TC1wM^YDDUcaHsLqkUK zrsZAM;df5jw(FufLJ4ljtF)G5Nu6%%uaX|3{Wo!k2r0yII>3TEUhpOUo+f6ljT{O? zO5jy+<_w8iaj`mSF$t;4FBvU*v|GOFn(n7So>Vzzmo^0?lB$~5r+c9uapVg;RlG{ckFjSWBY-Y>I% z=Y*~BAk=b329W$47C=H*L_ZfWU)xBWKE_TTp8v^PN$dIvHWpPTQW8=ipUuWBS+6s9 zE`z1L!vtq!SoU-e)X9%LEflC6FJv=-rVt$X-z#D!yo20IAMxH7?m%iM)YO_4b#@F7 zf8TevmdHj#aFfbJ#y@LD7 zC(J8u4dyS`ZYcvhUsPLy_S*5()%izCKlmYMcpB;&IG{l~YL&z$nV;ouoe*6~rJHZL zBiNB0mXhUw3G@mhW7tHRQAtd30h5f+dSb@d?T2wWBW^Y@71wN6QDZxpKWF?st%uhd zcW0ZXhMtA!seJfCU!$k>Mg3=wfcl2ZO*jkl3Z*Dtl80c!ZX_h`Ufv_f-2S!+uYFD6 zTG$Jyop`aDA~dgc3Ad9gSUBwh5{}dgXw^O?HtwJRB_rPj0_O0U)U(6*jG(V=yhRmy z#n4@XQT_l5dEG{9Y@*J_m6X~%V3p^$g3d)WGM)iX8G9#38x}%KDC65X*6S_hJ>`t?a1Hr>yv!Eg9{xcj$*I0?U{_#IYm!i%2}h0s-(dCa=L4yWmU-5da<#{~wC^W2LXAki#a8-~P zYEGy0qG81Q31ay$93AdN zu_tWIa~7o`GcrBCGr7TN=CfJV*={lkOeB=h4aXNwoMJXiCkC#5?s=Z-y}o6BxWDpr zqjHXP#6=oZj9dFruDWh1;_mHcFT%X?BieDqr9Er#t>XZSi)x{>V+ha81?3X;W3>CI zM8CL3=Ef1BKO7|w%*k%s^=$e`b zokCQs)0i$5t@MI5MFt&_7lMn>>GM1(aPMVt^OyPA!qy4O{PbyFXOmJ!05bBOknkp0 zt#o^L`bfj15$zqL6oRGtG*7LY=RX>Gvg}PWX`$fnO?h@Hgx4(tiych*;^NfWXs(}CMu zK-R!&o%=>Ar@UlI6}K>5rz(WZ2Em&|k%{~W(5vk6?H%Y(Rh5syJbhN9G&YMW(3&>8 z6;;R(a1F^!-7~A|-1zh)q?B9vqW~A@UWzww;v3O>j4qTWV-t|X8kc;oO>d_S)40UY ziQZ{+Im*hz(YRp%V#^z0Fz#Sn%u}!c2G@VU1hzHBd9v#Vk=wFiw0H_CD-khM29w>S7Qq zwO)Hk+3{euI5LDa<&VfJNc6RVd31V~(_|SGP#7lpZf}3bo>ECmS8v4#se%eh z^<++#HKI9niiRea&$|3XP(Zpmjjx4}*&R#&x(U$M`0MnF-|kWQnpo+*eLvfx&>g?b ziLKNgXi^k92;=x`<8+3KD9`XtsLbReC+A)b$hB<~>O9sqr0Lfy9&l+NPKnQcfI8Mq zN(L#%!qIHEM%Q3i;wmF?c$y?Nb-bH~s4L%E95UX-okJk#iZ(hxpjRENQtdHnP!)(8 z;4$DKSkLhxaA!NNeO^0%#6u!=l*Ppms-mP6&KY0WN(I^++h%e{aneFJa-NzBB%x~g zlAb7hRixFqT=CxU&A5fp)5atI#U<;EZ$Bk9aY`Yae~9eh7~$V>{Qq~RfamWoKhpm3 z>J$5;4}C#r`+Yyngw|QiSiGmsLtQaHv*S)Pg63hsmVeNRlI$)(ikcpLUG28#OIkEP zZ`hoyu{!JkHz@^#qd7s)kk_fHjp?IZIckNRa$$#Ju)|+}R^bnv#DxqzICtSuH_nnA zUOk|J+%ILciSzY7Q?0`T?w;;Bc$Ye+=$4H^KlCu;jmi3;?r2{BN^OM!?oMsqNauAY zFod;4GoDWQY>3d$#UTqn=2^MjQ89LAY|dMer`gi_lZgNO$p3@*|Ib(de!R{8rm~hsUlvZ!LQp z+eRhk;B^*4`+OX5=_>?DQBkoWUt8}dpUd3;B(oZ_$CC~rKLtbr@(#Vh5pcBsVTn7h|kNoaPwyv9Bb+;qd%0Jli1PG)!2L~{#fpw zgJF5nQcYHuD%XP+KWCVK?5#o&<@VzTzgAuD#F~_h3@R1Spk13hNMtrlVchp;krscP z(F>+$Sn<9M&lW8wt8W&h9%sY2&fWe1?BI{`WA{QAhH^zFH^NVdZ=#fhOoc%y+2z6e z1((!xlwW=uTRrN*;1=j{dwZLcSO?eBq$St&x;g+tO=f5)<>#JL%FwD5-p@ITpYrmR zsYvauGy)1aoF$~OpA;j+%m9UkiN2KslXQ5UxYSO3#@UZrgU}pivG`+lM=!}J7mOIA zi*pa>oEx27f!6(~_KUn-Pa0_k(z@vQzSSxnP(9KlOFg`L6*PPOqo)OpU;kWScmDTr zx$yk`)n9BEEOShhBd8;9836PULo<_)>n*z z8}XW8P967=@sdDP!?wRKk;i`I)QLaV)*DK#)ul<%V3pNwDbJ`U1^3xmSEH6%WzWkA z4)#yXzmz>)iZAa4Ht~D=?GGRY(mn_BkRik~e@jC;+cglGsFS_ZwsKsv<74glq{_(l zz-4pI^UCgm(SWch`6V}|iSfyAH8nQ1Ce_vT31!1{@#R4c`2~z2K~!-S#r#PsQvUv+ z?6Sp@^E$e|&Dr?|8Vr|=FR?DhQfkuv2VI~pc2zOAPZ)^4szoiISq0B?*&ipSk%+){ z$C@Bx^iAyc83plY8Hw2#TLrS?yP_TSot(D}RP$xde!m0*33yz(-+H8pmw(Y9TzQ6V z3=7HE=+>{vv;R@>^47z+5GC?W*`VcFcimo;^p>+LUu1FhD9+u+d+m5BDn33tue6Ab zyZj~}@VK?Ix!5-5_#GLY!TC#}1iPsRU;jyb{vCba{(pM_7oImG$z!rJ?yyqR#iR_Von0{GhZ$|n<@C`7Ym?G{bpKp@`%fEj|9D=aiy+3K%>Iz!N z>kfFOGQ$7T$_9p%)6+8yl2aHl2k`VMy^%O@Ve0IhbkeZj7`}Bn#zp02d?_RFtZhYnq5`$_}T(6!aYf0RLh&?xYH7scN1)d8!nt+ zV~R~8<+C{NnySmIso_7Q8ohUc=|HVItwsCRZsMf^7CT+BGwb`RQfd)3=Vu;t;g0r9 z)=@w%QlOo4}oQM2iIgXziazLZ|2R(%_CS@XCC54Uf0`(qxMvaj+<(`5*1uz zGI&QQ6q1z33ym(|gEW$$y8*cdWx`%1iIorCtkLPle6}4tV)vrc%{~?nr^stkL?Y=z z+t^|@K=9NA*1`YrCy~%f`r{O_Y3=aww@bCIfrrWU=flY$?5A~p`G-c(NoFi?bF(fz zT_WJ1tARAfT6_2#+&AfWgq?vU&HV31`dMxvxB#3bV`BMc;7X?}`1d0oa56f;6$@u# zNfAsQsue&*m&~vm7jxOf^}e?qD(I{&WPB0f^(K^-j#B62lb@bFOe)q}T3K>?EPqk{ zUxgr;#(+(r%l}+V$y|2VDFM){Er;eBom%v-rK+vl!uUV*B+U(F%QOXbBg$N`hsuzW}Ip7l5%6NTK3{~mNzmAVXhZf{b605>Y*QE6aqw|o1_YI2OkDV+`=>*h!fCa-%dSGW_b6QGs z3GI+r6GW(8@tiqZpB!sR5s##WJalmIP0|sQR4yLaSaEeRpsmTVz@-OfQu3BkLIM;rmrvmn$Z-&Hd0gVkqY$Vlbsvxrf@8a)U)uXJH8v7%7k-qOnBjcCfN z{v@MsZBMFy-rhzCHG*qH*emLYB(Al#|c?ygis&P_>l;Eb`{Ei|gC+>%2 zq^i=(*@2}1o{%OMNE}=0=@m@RK#Wd|mP<{7PIoIU;(Q~H`CJ;(fj-ZrD3_Ayy^@lT z4~B}O*i!kSd-wFX$-I~bgPDrn+q?-SwSOw!oA*mKmYum=X-qixO3j+oSmK7 z-Pzfh*$*cyHccwAx3rs-q#qNa&?C74$SL50kSACD??p(6VkHkWg&J5pFHe5=#rvAh zU9iOJoabx1qBaNb>F;p7`k>()j-X*q7Lxk$w5T7fQHm^XMV+RD^4Z$avx;vgJUsY3 zL9DCx_NOgnE@mTRW49WpuU7_bOg7B#c{Ax%fhc#ZQKnGrVxjaiCdUqgl#1Cqv#noU z#CLwf(MlUmq6V#QI#Mp$TYHoi|aV>Vrel-mxnf84g$RYv78~j0P6tCrqT%cukC4+|TSu&O@}Sdw%-ly0Ck^WbafZX2ED^l!54@ZrJK`T&Xf9 zRT5pV)*dw24P%XxS7H2#r_aV;)jh3E*_v8cZeCivTgB=cnXSw;@@rD?x`swl3O{q~ z4F#H?5jRjL{f}>&tjE$pdu1Nx$2btY_qZ2Y-(2y9f(n6OxX%;^&o3WD1ty3SwfOsY zhEi_^Yno~UyKO~S$5H>AfwE*SpfV^g^v)Scb8oomco=*%-JZW1HoJQ#j#grCZuy3m zR!>^bf`R5I>dbVlq3Bjz4pIkgOl%uNj6_4rhmIYj0~U53pHGB3wBJ04!@vU+mqri8 zg26D6qADYdDM`iviv)^59w1MsP2W;5H)r$8E~#Q@>Kqf|X%H5TkbrdF;;m1}jx!WUG1W6Ir)-aGz4;uO{RU*JN;U z?*4+d=tAz+PwlrQHOhCd0EryiXu^Rpl~7N^)o3BnR%TQi8aBR~v#k1dYG}2RU!&OV zT^hY2wNli+v3Vk8OgXEIyZf?lok3B;dbcak*$Ger-`N7kN96@i2(jjDEfeNb>k@Oh znq#u!D{jdCKu;|sz9RdJ!p+4YRdM2ns)_NsUZU+#fLo(!axq!?pei*BzYHZysO1M1 z=_Uj|&iHbWAJSA*;AGEYpSb#(@Cl3`C1T6sET(CtczE*Q==Yrg{SA)IPs>dw?g+8o ziQt}2o(3!X!_+h&qRtlVMw0;LMrvXCgnQ6@7`clrUN|t1;Bjn49xdRHcuatYiI(o$ z%h>BJTHup%oy&fOY5Vt=;6;{2%gSV-Y^G?F28C-W`lC+a*Rb{YeBQ{%>VIYY@c9#v zD#O|GF*#r4NJmm?d=5e?LH=CNk)$St-YBBMaF^R&6k=!Tpl3;@JsaPBt5j@pyb3k$ z!{5gByS-hXry9gL0`PHhv z)>>hemh=+#-l}Zn#~4H}`N^Q0W!)1r4d!&Dt5wGj+-i+Ssoj?L>kmpSYE0)r6hBRC z@SsmVMdrLnbH1?yfFgp;wy~^N#dj6zo zuiO1tt!a=Brkz&&(_#&TIJFz7jgvZ&Wr;Cu2y7kdDQS-OnlMl`3jn(ak9#+2#l`N}8j-x@ z*BW1M?YZaAM-{`&z|Zjt+0*B~eZc4BZGC6=NMr#@TR!E~$;Q^(?E4&q?By34FvbfO zV7g?4BqakZJY;_dXY)KNloiq*#Io9+KDOOC>hoA#l{y@({4RGkH{Ed5YQj@j4|TU4 zBre;`6Ck#p!sp%LUc;ppLbb0?wjO5&?j{U>I{L2Gwi{O5%>~p_ZlyO(iudAUwfQlc z8$0G?@4SMyBbK3|jMvBDyruyDgVL$31uA!km)|`hU&}^rCY9XyYJMVxcU;k5Pw7Ie zs=mE*@|pNnkaEXObW{;ljO-)7({d$k{ z!qErJo!BZxH;LqlI(_mv)kd8dqV7DFvFLYHiT`) zD&a^;a;4Z!sb96SU;gdj%lv{{JV0L=dHmq!6Z%q0{Q(DA!XKI>u93p%ei%XUBxtWG z(EGj?2`04bj;L!oqeEP~Te?PdP(v;5|GPO34*m3lmdO=VTtqT!4_lQ^#?ch+1RO2f zhiuK#ojg8-SeL6B&KHtg_MXm&jx_mnF7%XennY4@_wq6e zkK~R2RaAhVfv$qcN;-xT_RcDo{+o_jZ2P*i7*+9I^TzR$Gl%{*wf;_HVzJ_i2Dd0*Hagq};EUSRB)KW480f z-~-M=_Vp00`tdJGDJ@H)N=-DmcwV z4zhg_^Z=2iMf+=aDLP0JewM*#AtouhwY4p$l_7DBv2kaxbm{Q4y85v4W%YxU(UEZ? z7Otcmoc7*~=48O|l+?H&8j8TMR@J;7R;o&a}!{oNnDVJm*vRsp)DknIG?{;>tiG;*7U*fy(|7nc77Rf1|O%3$QgMcT4rjW zSdmi4iF*>PLfugjB~8q-Qr91A&7g@KK97$JG+!@ypBk*HvuMmKFl*>4WE8C$mkv~z z14H zHxKMN9xc;el)Yp0{&svvOJJ?9ub{6;s$mJX&p<@B`~bhMw{av>Y%ZS#wAcwBvN-1e z!tUxuC(jr-m@N$$O=Jciu7Z%wX2tLl182FPs=)_ypTC^PQCqw|vPYZ=oewn~bMZ7m zd#}MR+mzIn6126czp8%6fOaB?3I7FR6LFj|>b)_y*450SMV*nMEVusq_rr=#oQnCv zl=q1UDVeQfPNNWt@cmywVu!06NmIE(0d`(3sPr;uuaZ@C9<{*kBpS`r*Pne6G~+BV zE%dB)LSSJg>?@pDMd#m)=H+_9FU@(y*z=(o>IiTB?fQy%d-IU=T|B8w;6$IJ&@lMg z#z^qB*5di7gLs42=`Lfg5z!-DHBQvqUA&5=ib6S08QPLx^R`mseZdX>Af4Y|e`8ZyOUq+9DE?+|atSyS|%5px(*ekUc)FBsgaI zX6bp?)YcZ<`e_{9N00e(yNdOtBlKF&0?y7y)BY~b)^es%dMg4-m_g>j^Vgc=8#hB1 zwH_RElpcjyocjzanl+l%J=l-BJLx~sy1U4!Xx1GFDP-{MKfSXq?lAn_K*+dIW$x@C z)syqqXF^&$KY$cWSCLcGYP;WeLH*tQ00Eo%d#i?^qoLiW<-IguI7p@U((r=_ItBi%+ydHk%H1oZUZu z@G`IJ*Ja{>&!umk{+`%0;Uf8RqHf4@zzfprrw~4RTftj_I zDw8dc)GY4uBs9YZ-uAo(wiuD81es1%#(|F;5 zP?-nL>!%wi@nr@DdS}11wTp*RDwVI?NjJFj?a?RJmaE_p9II?5GFg|5x1M3!{!W4x zW0R9*heu_=-E)1NYds;+pdkw@jNi;Sw;-_CO(YYC$S9-0fI~h^+@3F;ErG=Hx}K_j z&bBh~ZK`h8M;~V2D|XzIov;< zjs`>U=0o*F>wWREa_4@%(!q(~y>Hu&T0ySe{=)ogJ`<4t@aTkBR<;d4EtN*w$zv5^ zn!Vi+NVw_#@s5q81ujeTHsPJzZ!fF?$?cNwnc8XpkRw2Q#ye^M=sKD56tf&H>m>7~ zV&RhBL`c`vi(Y>X!h&Ii0_um#5+%;Cu4ejj07LmiG3WH1%`3=Gq*Sp_KX&K=PmarNe)fcyOl(9i@(L0X!U-R-#!~y#Q+9*c zF};S+xFL&tVRyc*IqO|3FuuHI3g0bgun*e!)i~QRV1LqZ$1&B|E`=#JOdCs?7=4D7 zOsUM2Fo}53X{{EgzOFaJ-(P&|BxcviwsF56nsN_b_4~AQvRcw`ROl>}QBzh{FzQq^ zbQc`Eb}BRl9}aA1DQ6W9g1>iauyS?nyvGaubQ?64^c(UP)n`k3_Eb*ksnS?_>_A8o zQ=iKa4c>{a=gXcbqQ94T9oTP54g#67iEfk&vXtWWt9j$X&FV!yFHkXvx(coQzb%1g!BRH}0wv4v? zi*0Y0&0H3x=5Y7yZPA*wiaW|D!vZy%~M));8jYtSKAkV(yJiDXrYV06qd;!Ns?`1f5lQ$QGnx!ld)zkmF$biPGx z#C@AF>e2iylB=qG^TIl$S9IR9J`#?dvr?fxU3U-ebcdfKMx1#X^C#R+7KEUQZJRmh z!~&7BYwzdk<{kh)PD?bh3_5>*IEirXd@dp`dOvVWkL&wSCyopW3GEWSiQ}`9G$9@} zM(zwL=OXih6=W&OPDK#M#u_uKnHJxl&+ri-xgT&VZeLZJRaLiOpg*W1Y;T>-a_p6T?1yVKN z$wx6_J<^_wB8c*w%)4_vp@crncdS5EFixmSo+0QpomV17eb3KQ8us3Oci2P*@p@agN2uKaVDm z+{)v)yVm+bDJV#@j>TY{<9k)Am1jZrt5>gbUOq?(I`GyK%@79L4b7N`gT_7;$Dc+< zCe2BAm;HUcJfr83fdZgcr)gSGEiUS6&J~ak$>16|0p!*&&mRf6}KIBq1s+90?47 zhsAVFjC9; zUi@^NxAJqXmP`gF za52wMIrg>_zn=C?iL4?F>{8Sw10_p%P8kT)US`N1MbFKspo5k5Gj@|C&o(dynL^FsrT?r8y*afjn!FCRM^isF4!P``14mo-oHC$+hb$nu3_(T zawHn1y1BS@m9t)_5f2vaT39B$V*@;JVvNx39Nd(+7hr zIf=_(Quk7ByR>GwBs4lq8u!}^G#FzT1&UV}OT1CpYmF$N1;E?Sr6gz2JgHDQ+nxwA z{}=*f3Z_UJnsoo=FmeHBjmO*HTyEXB^XmKnt!Oo!D*=0^eDMTM-{$_;uua02KZR57+UlxE=(e3-pxQM+*D zZId@hOom34=1iIJE$_BikDJ@d&qAkp5c;x2PxIU3D&q;&+FVi=RUO9INQD`~Tm|je z2nIsTZ0!hC9V}V-)GLk#5$HNE2^C(czRb<0exxW;He}dWSfc#0oY7`wUo;?JrxY9l zy`w81vsh~C1I>0_nL0WdKC5Xuobm@D=^9RUoGI7q7E7C?b-|%H*P54qO=xX`xIUFZ z)1Ph`7zpX9+NQ0h0Xfe`obq^EOY%84dB&PVHRL~cwvdQeB|!L{o<7ZA?vF{b`1x+= zm7FZK$WrD<&+ShMZBg}ybk}`Ovl$0y4kUt3e&#$SP=97`tt0TF{lz4}N2- zc$!+L3_Oa4+0xRnH_0A~Z&9krvmGtA1hvMUefOh=DF_h^ zEv7-en+UknPF~Gqc|%1`ZNI0#_tJcl#VuNO1*5sz%gtI+gAO%7W>{LMIX!BQd+%d> zKoCp)3$m%G0P%bMcaB~F`7c9*mXY6 zXk1U{LM+mqsnsvmoP94nPn{PZelMhMhnAOX<+b=M*VrrYgL`nXwe{lb1=V&Cqjtal z=JBVky)EgW9M{^{P`y7qn*}JT1}%;P;yVnRhVK>(cQN1T{+KJ2DN1|Lt!O=UJ}CxY zvp_ub>Q3Eua3i`|cW%A>z{xgGRX3igEU?N(l9FS1OfsmPrRDXMF+&S>nL=GI)4}YWJ|Ki&E&^e%xmO+w7J(!)1q3{T zl%KzO#_nV&gUR*&O^kr|he!LmY?AS|mZ#t6i%hEQ3KBHQ5^j&%tNPK2tCW}vQe4vVRRwx%xHxT{Xr?56G#uO9Js# zBSCf0o1ZVa+tt-wH3?^5SD}jZ4y36^>CIGd2FrI({@n(G;YJupa^~}bvpH6 z_il(nRpQ6U9e3eGvOV~u`){W8TEQpa^=0K>&z6^Pf&pL{EUw|+43Rjb^MA_?uF5AHgBg-eN!_wuDGO9UoC9o z0TWMxi@TeMh@?R*u}9VP(cH*1d5uH^uowbf^N0P;nz1Lbng=)YTIO-cCu)O+d*NSs zRK2p_%~S^E8n7KtKwI_son2!K*QFZwNkDj%ynzCD=#=2RXA_Q=2k9ylH561-%MiU% z$bP-d7|(puc^zA%)rHx-fGXDRKr>MC^tY1R#ztySxTwi0eCJf^1GM$?WGuCTg#d(A zOZv1s88@hQt$Dk}Mc8}2{~ENvaVQ|hl~nSJ|9T7!HFYvUAo2`}!RA?Osk2TxWA*&3 zK?i?$>!L)!nLJ|dZp-9!R-X&wlP(ugj>18w>Y(kF_d-iCnp$yfyQ5Z&$(E7S&n+L` z)aCr}8TStEkJfuJI&nmb$@jvq=-PbKrbiCJKrlx7SRt>!yDsr1aixJjG&(vdDe|ca`>kq8St4gAUx0DWu~Cnk<>ix{ z_>!0eef!>wK^Fli`0SWQrQm&^lL&NN-g?WcpC-j7ETKxEO1EQdrEuHE&dYgxVJKWJ ziD#8SDFnnVO9aj)CqR#C8#5T&1WuiH_3;@PTm^GQ!`#?DRsU$q-KIVL^aTC-MZa{B zphQmA1utO2byT?-hsbmvpJ-SqvN&Z+aMBml&}hF=3yp~L0N22A6IZ%PxNNPtm;Zxz zeh&&w**NXwYTPDX{w#v81#JT3iG!pmM2Wfk%98i*uCU!Y7BfdtuhZ$QwWCm7mA8XL zwqd^ZgQ`W-6Ml`03*F9j=MOOt>BdHl@09AhxM%vz9+OLi9JS20AExiswe6;OOA;s$ z?KlgSs&P`T_skvb`Fs1{=fw(;#0_Ix`1brpJ24Khp0UUce*gd40P# z$+yRxFsUf9^XDma-l$8Ty0>QDkfmFKr8BcVdFMQ&SEXjPt-A=H0KeE4DSwhYiH|XDdCRXDl zwtL7IPH`_(GF(j&XrtNk4KFB&{l^*`*&+WCewmUySgwG2Uc#aIVjF{5n~pXJl#~1>g)YMU{-eIqVq&llA|WPd+l@4$YN)-v5<8*6K` zM7tr`N{z^<;dWyzguFq-OzNxG0bDOSCt8mB4qS)gG!8@DKsz?2O4#&Ttrfq;}lb? zQg_LHgV#Bv=I6FrK)kPK_BT#}4bzUPJ3o6rW2b?T5LptBdFtfJ+`)bRHG*ARz7}*K z#0tH*(Mr6V9B_{|`Q8&EMGEgFo+WD#gFo4l7O74SN4*?J|3$Y8DgtXIBP>dwQI2>{ z4-VeEax0gW@P;h9_7hkwA=hccm&%GU)f`W@TAxE-$BL@NSE}mbxpMKtG^}^4P)G5+a*bkrfUR!HR)U2>g zcWZ96arA-Zt+mxk1Jh6beI478P&7Grk&qbv!C_bZ+l6KI0v(U7wE|1XVRNfs`OPAH zqF&Iq=V-U-C<7;r%0SFDzSZ`k;Q1vl#q0*e8rJ9xRTN{9yWQ zqA|Fg06KeUVBK0A7h>fZ_w}*BrYP^Z)mbl zz6lTW&3ixkt{(mi$1QlPVAP*pjXY#4zG=v4eDC)*$#_xG!N%0?-j^Gg16f*b6TX|# zL5dA8z=3Jq=k14_?P#kUT+z$Fw)?U`@Rl$2QvOcM+Canu`hYV2Ru#WKIi*_9iT zHg9uEcujwuTYijr-cCU0BSXGx)buTykL(+fHhnYk9d$lDur{HPd&c+0L55rcm-oxX zJ|KhK!wdbvzkA;W6@k%NmN^zR6hR2aQ0Z7|6e3h?QY_ZzWLe4;;uiQpIcvX{KE4xD zYhCUuz#;Dyn;hrKA5dUz&vOt>Q;eSe1}x#0EzUX-aut2_G0)oNfEPJmT301Ip4LI; zRX(7);WHCn$zWId;v!gGbJ+Fe%k6#RZa_E1imZ$l_<9W@-4a^b{sJ|gs7|aXw%Z5_ zP&|780*##>ZaOBY(r&I74X?~FjzD$xUak`s4X1Y-cTSStySvmLj!Hz2{wl8bi;Tz~ zQQ6cxocopub{)IPZg-B3*w?tFXxZZjDRH}$u(eq?!@EF(4!7bYxmb+s_tZ;$FfK?t zz}OIPbSGvx(9{G0t-QP1B(!KH1%zo&`Y<;G=8J_Moc1=|FynS{S^pSvF4FM$M#Dxy zVAag_Ii{+|OoEWb9rtRN^|h1jr*vs=Z!nnE?GMwX;)eV3nBQMzsd@jtn3XhjJ^a{n zdGh?!l9zT-M!DCtuF}Eny#~SIVSB~212|d55CjLpWm^CvC3KaUVjDq%PS+in@zhef z7kHeVwkkY@MKQ{&yi(|>R3-DUvl5F>Q7`YH>o1LDiEfEkc&RU5#!~K}lFJ&89wGb6 z#N%{$>O@?mos>kKw-xt}sde}j)k=pS*>ck8e_I*a>vpoxApb#?GxT#z&NsX;O=O8kYE4ud~L@AyHC~3 zn{f@n^*pY|adc2}ZbMm)-`m99f~syG+p6+p4H`P?fa7%`LB(K&rssITRrOf$Zi#rv z*~7QJ8K-mPO}rFw>uWB7$1_mv>T*l`FeY%~)slpN8*n!d+_#%be;UWnP-SXR&R-R5 z-OB>O$z$=gOldRgK8kPebUQnCHTWNVpPx^uEc)54OO1=$Zv9kADKMafRd?5Od4Dyj z@o4rge5VwyXjbatUQ(aY{a~{707-R7%OSP|?T69LvkyWv)=B|ZrO;bnTxkBZ)*`pat@K%Y(LaS)r6G;-R2#2z-s5o6^pHaQk z??<%KtWxK;mzG8j!DfD-w~eU9O$(`D zw;;dq@#f&T$)KrB$y0TGec3yw8_lOGCWGJ{N*|5YDH z4|Lq(fzT#{ikp}9+VAd~jF97micYm-f3ubv9*g?MRIu}LIGcIiG6kPNY^^M-NgZ_% zaQ+NAJf`DJ5-@wUP{0GiuA|`{Iy9MGv z?1F^`%zW~s4G zICwZa2XTxB-Jd#`q|vfyD6g%^ax_tCgD;EK{=6p+bl%-nuJN4(Qz0i*(Be}}!J#1m zzN#8OlK>wsjXUM?A{GUOc`RC)l(DBnm}rReO?X=8E>1K2`SZg1gwcKZm$@Z9y$|-9 z31~hATGtt>&M#DiwHA8%ZB};{alEx>!Hx{LhO6Y<6Bk#^e5bhO!6<7|LcNeX=vNa# z{=-v51hoF!GgbEPlOGYkt9PTl zDlX={$2FycW;vWDe3jk|E^hCuRCM%4?^QnI>&d@+cepe|q8>jh1)B_vO7x7`3Srj_ z46VXMn3H|Mn&BE)!f)fe2rhfu;(8ng2pl}>TT@b zwC(4Q$HH*jn8w^ZUSDkT3zj&Hwg{eCnvt(EcD!4~zbYajn#eDsoPAp3j?L%eA>t#E zvT{wLJsRT_2D|R3A}^ztrA*x@w)J!hZjiB1sNh;zYwha;O?QtcRaXl(98O!;b(Mx3 zd-Y~W?4As&WkM%n!{qk2()DY%7S>IMcWVRr;yUNWZ5l#`E$9RuTNzF@20IJTmKMiq z#gPx}7Ac5WbfuN2w%%i4*U6EI4#gKR02(wAvSjP+QEUr_+43qV~ zRitg>zv*&8Ae$sU2#Xeqh=>541S|m@`WWa@q*0f&Efd}@v$vGsYBY$R9gOR{)H(Hc z)zxvw&ljq1PSj_vZEP^l&zrvO`2+xL8R^$wY0y06h=x zPR48w2?)6V!hWHmR(!K_=a;{@pjm<hyK73%kF}tg?b*!}9uP0^d?l%g-;DDK^9Xeu4K>|W z24n8U45{FSy@^`e0V7Uw=C}44Qs-^=iZ{g$>5Sfso`3n)*B4pTdE3av6+|L`+Y48? z>#ND5nNCZ)QU{H>_|DJozFjHgH|bW+9vJW|a~}6SY||XD7=Je;SWR|(@BVrBz}sP9 zDln`u+9ikENoW;GjE5@v^Iczd3+^2-*OLONZ*->4ChGcv;hSggLo{OWX^a84|J@Ii zK?Z5_^UrnbPc}&u0vp8AVAhApqkAv?$dW^s2cuP%OeA}YVJk(E@?gaN15rojfq?PW zT*vVr;hOagRV13RQ?2giAvAP|-*P$oGU8&wD%{*X@zu+74UHWSEUm3ICWdxoRs!pO zbe@)!aPNnsCG8eWq`Nv(t!ira&Vc||XL|irsU-p;^}dTk8Bm?0dSM=?_hir!4Ua{G zu1|4k(^3D%P-5p}w46`wi*ShnL4QBbmAU8HZ0mkPQM6hq z!Qn)MSMRBmzj~@sS7NzL$s zR;Pocqe!po<|^yl3q?_+utr0hqqv9WY}ia8hs)POnDfkB`6YkvuDO&(xGTv}?(*14 zH`QarSteW#o;C%UgYZp;ba?&xgCn1UJBuFIglsK61VXZ?s6<(Xhg`;l&0)rllSfpM`{hLYW6|M^baD%`p2 z!!J9ZR-hcxVR-We8*n{((!+3UDwI&eUsCjPL`gjjq%Ab(w&xjy!S%_*_P+WO3K;Q6efi>4jV*-Z>4L7RYyC| zda$OIjE@>`_KQ2#=~dL$n$_4ENt~Z_7OK4;qr9fd9~w%ALfDt35Qc#wp!!}ro0FAl z;p10awfEXqVOJ>SD_@9aT>*mQUmaihay5AM!Z7g9VDJ~8!k9wQL8Hc^2JiJL5uoAn zwozC=VB+zy+RfV4%w&)>Mc?6Ok**0Blj93?9b+a* z_%y-!bj4Hwl&b0A*xzVZ#oKiv=;!w<*n8Nsu2PViqSQUvTm$$W<%{T_1E>0{r&<;cG^op8gI-HPu5x0zNrHtd*jjqwM(sB@}yBV^mmXSbR?ct%K@+ znVOiGcLPbUHTRQbtqUQL2;Rs>Bj=$d?JUJ;O3|CDoMkIz?~N=YuPhkeizF6c*K=Sr zla-E+Ku%Q1>p49tFxdaQF)yEi`-PF+^(1X0tgDbRj16d`f%6Z694_xyLOGz>#6sR+ zS57FhrNhxZ18JyUREev#DfH1vehLoy;B{!Qxi=#oytftN>lu=9O(Tu_?EpWs_(G_;DOz6oTs$ZH1ge!P*1CPP61av5kZCeVJN=oi~8 z*OFvjVqdfsHbgJ;2>t3UQq~`GbT@E+G{dZs+pafoweN*8oGjhIw4u0{%=>+r{3YjR zom`QHU{IwRZWrop?iuf(>wn(zAF zL_c{FK>%3qf`=~H3Pzm7V2e$H!gMidB)xfpg#nR@c+M?l#YqMNw+%3=Sw2BIS+b5G z3jc<39b`gLuVdpf1*)j;u#&NA<34?CJ}xlYi}*JM!4u3^+(UvoG!td-#dSjcfekHR+WT*&=veNl9Nq;X|78D8oW zQ6TeisaA$YM37x`;=gW&SqWtJYwY~2Wi7;DP|8+}!R7$X^G4y)RP|3ELh{Eyz(wwA zlI%-t3S_s!MY0MmP&F=DhSKWpfqrF;`=cEOCQx}4R$f^;Hqby%Nv~jhd%@VPeCH*` zw?Ly?gf<$_qBvjJr2Oz*21g9Bg$q^p8@%kX+jVgr>D|p%wto4pP|(%DmbSIhOuw)s z7DxO2COw$#`lAa9M3Kw`oj1av;oW>@=Wsb7i{&M9_jpW9az35l^J2tBUuUy0=CrjGO?1LOyBsVAEJwZ+Qp%SQ&>gN z>XK3bHuIDYNAZ-7LcI>mixt92!Hr%f3LWe#5`nttqBDxhhmxX%;^T<|g#pbQg~+-$ zPVaQ~3pku!v6jh(E#OZl18L@!16cc4hT?OH0;+>Rs2>&T*4W>`>JCH>wI+rwWYG1K z$xtG{W)b4TzVPc_m-c2CMN_t=B*KL~{F?QgurHil{!QJ~xky?S>%TjPwD!NDi@fyZ zuyHX5$q=HWQ87QlBXCI`*=mW!^j-6R%Hq2=vW@RfB!x00hje@2Bxg?$BgGVWh!I56Ii6F#o_sM|92R<=4)Y( znU+Wr7B@~#(~nv2KWLL))Zr28BQQV0KqJw!UNATc{bj9wKg7a@U>J`cK71G%8Hpz* zs4o7&x}8Lfb_8nMg+4V?`QnOiwS+&!({iD}g5CSgcU|b-3BytoF*|BzW@6(4rY(keRvoZ3;t`vj~=savSr$&S4crk=>N1C zvRX+@!2RWd4U(iGEJ6r|^@twp-aRX;=9X|gG0-}^AEs%1#mit|Fj5}^+tene97dY}nua>7PFa^st_a(}vSIo*PTiBG*55d2#nYCa|aRhs!4 zhC}W~%H?OsYE1bC*)lTVCCH2LvYn9GBvm6Ud=$bzRKszR1|RzT`E$$X7Bm8J#J98C zyxT3Ycv_z9eoR5>=6%Ld-gc;AqrO8eBezuI9EtCa(dS2DfMzbR3(YJR$p#!Wqs{o%fK7A!Oy*#Lii83^!y zBmco13r`;)4sdxb8@6T|5{Tdne#*h{E=Ay;_`W8~zec9`gAF>6^36tR^lqPhUClUl$ zZ3DK0ect>wMKSWh^7G=H62=ZK9TqbN?2H(J5p^nY4kN`0v#5Y~gn@R3kqVW#3pXyH zk`|dxf7PeNW+jUv%hE;2L@A> z(*YV2a4gj2b(zD$zOZmWnzArlu(m3w20hjz6f9lEWWeO1^r83e(SP%sQ$xkVK(+WC z^qKr9BYR2cC^g%VHABkvAA?RAM+PHY;}474$2hvdG*24qE6*L{8Xb zfAimEI~ieN2-35nz|d7urK4anFhX=0LRQduNfr7SNwrD2P+9R{S3o>w@CZ4`fZN50 z1OB`0*BVG5wmFjAB^4vsLG1CU{noO0PaFN$1b|7OyQ zD*d_L17%Ucj`d#`r~xp^&PA6|B}8YFA-s4Rdifju<$r(QLt&^`^ncy{{{Q01-v#Kg zP#HiKFMGzHc3=gZdimPF%AvzRyIkf$y^*<#pD+6_CIG?H|GdNi>k8LJHIWq$y{tVw zC zCt6L7+S8A0s34(%gbvabkT5{P1PKeIs~};6gaZ;TNO&OOgG5mCk&SR}8#Nz4>7gzW zb5aZ!kz9N1R!)Y66B9ax*>l=$3<3*IH{SQNM8#T z&<_n=)6&(Ji3}A+c*nv0zJ|Mxm#v)TeQzI6+mv$wZ2#Rk+jZ8gaaY1kCA_iWCj=#y^D(p=R4wxoQt~`^3}*9Vj%r_ zHTMOugFrD%ITut$0ysYqS9Bfi9Y8w^>LDLswIeYDRJeZu%^^_vZm}W+gOCvRGy+}L z-Nl9xAs7klJYYTQ_f8Pw?ky;K^V022v3MUGN8ZfNWd=P0>H0E)h|weM}rAm0|k(6iIxxk9GRg63H<^>{w;tY(9THu0734uB$5Qk zQkNx>5R#AnfvEojfid}CzaicC|0zlLABg^M=z^>_0CZ6?Xb}!$qNqX;^QgGm^T^8S zTiAQr+PZPyce9^?3nD-Er`3@JWx{N}r0xZ&k&P?>xL;5o`4d*(U(h`Op`$$lRY$TF z@-tk>dF~H!>2T0tkIpaI31T7ux_C857Z)#YTYqmrZRFq3gY@USw=V$jU1XC>BLUnW z|Du=n#glLUdg6+Fg8k|bkt2{WRuW(Ve!v2$076FtXbUid9E7YM6Im64@J|DH+S>dt z`p7Q}A`AYFz8n(xgZ`Zh=x_AR0d$Ez3&>rdj}9__&}Sko?t+hz6ZtDS)s1g)M|E zMi0^jy2wx6x&Z#-Vkso>AA)LKJoz_4U64=yMbM{6_zyu-0CY)E@P z(GvQ9%gF)GG@yIg6zC3fkTI~V>jE|tR&s@ad9bV-59C3-3<@Q%mw{C>nwMQN6LX+m z2B}g2Vz7_vK~~Ys%b;LKO~b&t23P|l{96xkh8fTm@SH?^8a9KPuM29)AmSKOR)H*n zdKsin0f@m~2H6Eq)AgWi>j;uUiDk0NDi%{voCyOliz%qy0kv3IOf7*VsO7|BY6T=g ziIK(B8c2d_7bZo*^N@tg=8Vfo04zEkPY_P`wT^5vXf= zu9l#L7$`p(gIXe>qycJD0mlu1!>NW^f-=$|Cb-3D1ZqT@fpRg6tUeEx{s2sp$(;1Vx2Z_)q=k3`wlW49P6X0X3PVrcclYN=r|l zuOlcnT~bF-5Xjcn5d^OP0ND;Qh;{l39YIA#ndzs1!t$Vo1SF6_jR;5}D*#!LKvvuy Jqbrzd4*;1vrEdTL delta 1813 zcmaJ?eQXnD7=Q2HYqxeATgN`jw%&FJ0_)l`xeLY!jBSzqGZ$7+Au_M+(OtOqy7snp zi%BE?F%2lVGr5cyBMFL8B1R-ljGCbFi)iqB(Laq5)TmJjCdBQ0o^FFUjqmk$?|aYt zywBJBJWrk9pI|P2-GAa#!AF+HP){HJq!;c!`bx2}==Ti0{@`aFZ=O1S{hfLt_~Dla zTRysR^v5sQH$MLJy8{zUgx_8k`SohmAI1mu2m9LE*1UJ5bN2)O%#fc>ZwHC{Swdz2 zM_~OdL&!XU0%X7epdE&}9_Gk;V0sA_ufog%aC`#@aD>z-Bm+-~#E3#tM8`erK6V2= zM~U??>!(_Tv7TW?`tvkny$kfG=Nao4Hc06W#@bFd(C5~(R+2_2bDp(M(r)_5tk=2> z^WM+B7RPO+4>kI%JGqV2-|n*xaXjtcD07 z7zswe!eOAfy%zYxI50%-afiD%t7PtSR1A*tDp`6*k#+wgQml57f(H$V8F{|@ z=DE`jk+8%3mnrMe6rY;_k9Q!~pU_MtrmJqZ8^aT*DXr^X)43t2BVJiOj6YG29=ZH&+U sAur^ZTKi&NXs~lrLLIChof2{Z%*myAp=(R=!h2YXS5whHEvP&G1}F^ZdjJ3c diff --git a/Example/obj/Debug/Example.pdb b/Example/obj/Debug/Example.pdb index 4b007f3b0a0b6763ea429ab29742133944a9433e..1825ed3346fdd96a066d7804d06b044a9ee47ef2 100644 GIT binary patch delta 61440 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 delta 51789 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 //------------------------------------------------------------------------------ -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("chrome_100_percent.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("chrome_200_percent.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("chrome_elf.dll")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("d3dcompiler_47.dll")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("icudtl.dat")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("libcef.dll")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("libegl.dll")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("libglesv2.dll")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("license.txt")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("af.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("am.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("ar.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("bg.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("bn.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("ca.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("cs.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("da.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("de.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("el.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("en-gb.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("en-us.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("es-419.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("es.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("et.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("fa.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("fi.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("fil.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("fr.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("gu.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("he.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("hi.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("hr.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("hu.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("id.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("it.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("ja.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("kn.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("ko.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("lt.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("lv.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("ml.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("mr.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("ms.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("nb.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("nl.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("pl.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("pt-br.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("pt-pt.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("ro.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("ru.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("sk.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("sl.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("sr.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("sv.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("sw.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("ta.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("te.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("th.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("tr.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("uk.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("ur.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("vi.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("zh-cn.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("zh-tw.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("readme.txt")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("resources.pak")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("snapshot_blob.bin")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("v8_context_snapshot.bin")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("vk_swiftshader.dll")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("vk_swiftshader_icd.json")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("vulkan-1.dll")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("cefsharp.browsersubprocess.core.dll")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("cefsharp.browsersubprocess.core.pdb")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("cefsharp.browsersubprocess.exe")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("cefsharp.browsersubprocess.pdb")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("cefsharp.core.runtime.dll")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("cefsharp.core.runtime.pdb")] -[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("cefsharp.core.runtime.xml")] +[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("img/advance.png")] +[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("img/bcu_green.png")] +[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("img/bcu_red.png")] +[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("img/defuse.png")] +[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("img/diallock.png")] +[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("img/easy.png")] +[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("img/medium.png")] diff --git a/Example/obj/Debug/Example_MarkupCompile.cache b/Example/obj/Debug/Example_MarkupCompile.cache new file mode 100644 index 0000000..a0ce5b8 --- /dev/null +++ b/Example/obj/Debug/Example_MarkupCompile.cache @@ -0,0 +1,20 @@ +Example + + +winexe +C# +.cs +C:\Users\vitor\source\repos\scumoverlay\Example\obj\Debug\ +Example +none +false +DEBUG;TRACE +C:\Users\vitor\source\repos\scumoverlay\Example\App.xaml +7-2106300591 + +42-1827794375 +23-1214974961 +Ingame\IngameControl.xaml;Ingame\overlay.xaml;MainWindow.xaml;Styles\ButtonStyles.xaml;Styles\UIColors.xaml;Views\HomeView.xaml;Views\ProfileView.xaml; + +True + diff --git a/Example/obj/Debug/Example_MarkupCompile.i.cache b/Example/obj/Debug/Example_MarkupCompile.i.cache new file mode 100644 index 0000000..f75c639 --- /dev/null +++ b/Example/obj/Debug/Example_MarkupCompile.i.cache @@ -0,0 +1,20 @@ +Example + + +winexe +C# +.cs +C:\Users\vitor\source\repos\scumoverlay\Example\obj\Debug\ +Example +none +false +DEBUG;TRACE +C:\Users\vitor\source\repos\scumoverlay\Example\App.xaml +7-2106300591 + +42-1827794375 +23-1214974961 +Ingame\IngameControl.xaml;Ingame\overlay.xaml;MainWindow.xaml;Styles\ButtonStyles.xaml;Styles\UIColors.xaml;Views\HomeView.xaml;Views\ProfileView.xaml; + +False + diff --git a/Example/obj/Debug/Example_MarkupCompile.lref b/Example/obj/Debug/Example_MarkupCompile.lref new file mode 100644 index 0000000..846d386 --- /dev/null +++ b/Example/obj/Debug/Example_MarkupCompile.lref @@ -0,0 +1,8 @@ + +FC:\Users\vitor\source\repos\scumoverlay\Example\App.xaml;; +FC:\Users\vitor\source\repos\scumoverlay\Example\Ingame\IngameControl.xaml;; +FC:\Users\vitor\source\repos\scumoverlay\Example\Ingame\overlay.xaml;; +FC:\Users\vitor\source\repos\scumoverlay\Example\MainWindow.xaml;; +FC:\Users\vitor\source\repos\scumoverlay\Example\Views\HomeView.xaml;; +FC:\Users\vitor\source\repos\scumoverlay\Example\Views\ProfileView.xaml;; + diff --git a/Example/obj/Debug/Ingame/IngameControl.g.cs b/Example/obj/Debug/Ingame/IngameControl.g.cs new file mode 100644 index 0000000..330cfbe --- /dev/null +++ b/Example/obj/Debug/Ingame/IngameControl.g.cs @@ -0,0 +1,190 @@ +#pragma checksum "..\..\..\Ingame\IngameControl.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "3F903E50853E7E8C21175E2FF054BBD24BB5BFF74BD2178775C0EEC942889A53" +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using DamnOverSharp.WPF.UiLibrary; +using Example; +using System; +using System.Diagnostics; +using System.Windows; +using System.Windows.Automation; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Markup; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Media.Effects; +using System.Windows.Media.Imaging; +using System.Windows.Media.Media3D; +using System.Windows.Media.TextFormatting; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Shell; + + +namespace Example { + + + ///

    + /// IngameControl + /// + public partial class IngameControl : DamnOverSharp.WPF.UiLibrary.VirtualControlBase, System.Windows.Markup.IComponentConnector { + + + #line 18 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal DamnOverSharp.WPF.UiLibrary.VirtualMouseCaptureArea ShopMouseCapture; + + #line default + #line hidden + + + #line 19 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal DamnOverSharp.WPF.UiLibrary.VirtualButton Close; + + #line default + #line hidden + + + #line 36 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Killstext; + + #line default + #line hidden + + + #line 39 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Deathstext; + + #line default + #line hidden + + + #line 42 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Advancetext; + + #line default + #line hidden + + + #line 45 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Mediumtext; + + #line default + #line hidden + + + #line 48 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Easytext; + + #line default + #line hidden + + + #line 51 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Dialtext; + + #line default + #line hidden + + + #line 54 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Defusetext; + + #line default + #line hidden + + private bool _contentLoaded; + + /// + /// InitializeComponent + /// + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")] + public void InitializeComponent() { + if (_contentLoaded) { + return; + } + _contentLoaded = true; + System.Uri resourceLocater = new System.Uri("/Example;component/ingame/ingamecontrol.xaml", System.UriKind.Relative); + + #line 1 "..\..\..\Ingame\IngameControl.xaml" + System.Windows.Application.LoadComponent(this, resourceLocater); + + #line default + #line hidden + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")] + void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { + switch (connectionId) + { + case 1: + this.ShopMouseCapture = ((DamnOverSharp.WPF.UiLibrary.VirtualMouseCaptureArea)(target)); + + #line 18 "..\..\..\Ingame\IngameControl.xaml" + this.ShopMouseCapture.VirtualMouseDrag += new System.EventHandler(this.mouseCapture_VirtualMouseDrag); + + #line default + #line hidden + return; + case 2: + this.Close = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); + + #line 19 "..\..\..\Ingame\IngameControl.xaml" + this.Close.Clicked += new System.EventHandler(this.Close_Clicked); + + #line default + #line hidden + return; + case 3: + this.Killstext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 4: + this.Deathstext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 5: + this.Advancetext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 6: + this.Mediumtext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 7: + this.Easytext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 8: + this.Dialtext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 9: + this.Defusetext = ((System.Windows.Controls.TextBlock)(target)); + return; + } + this._contentLoaded = true; + } + } +} + diff --git a/Example/obj/Debug/Ingame/IngameControl.g.i.cs b/Example/obj/Debug/Ingame/IngameControl.g.i.cs index 796e366..330cfbe 100644 --- a/Example/obj/Debug/Ingame/IngameControl.g.i.cs +++ b/Example/obj/Debug/Ingame/IngameControl.g.i.cs @@ -1,4 +1,4 @@ -#pragma checksum "..\..\..\Ingame\IngameControl.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "7097A8A122C565177707B7DD4A36C56CC2890FF8B40D419B8929B7B09760826C" +#pragma checksum "..\..\..\Ingame\IngameControl.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "3F903E50853E7E8C21175E2FF054BBD24BB5BFF74BD2178775C0EEC942889A53" //------------------------------------------------------------------------------ // // This code was generated by a tool. @@ -42,25 +42,73 @@ namespace Example { public partial class IngameControl : DamnOverSharp.WPF.UiLibrary.VirtualControlBase, System.Windows.Markup.IComponentConnector { - #line 13 "..\..\..\Ingame\IngameControl.xaml" + #line 18 "..\..\..\Ingame\IngameControl.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] - internal DamnOverSharp.WPF.UiLibrary.VirtualMouseCaptureArea mouseCapture; + internal DamnOverSharp.WPF.UiLibrary.VirtualMouseCaptureArea ShopMouseCapture; #line default #line hidden - #line 18 "..\..\..\Ingame\IngameControl.xaml" + #line 19 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal DamnOverSharp.WPF.UiLibrary.VirtualButton Close; + + #line default + #line hidden + + + #line 36 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Killstext; + + #line default + #line hidden + + + #line 39 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Deathstext; + + #line default + #line hidden + + + #line 42 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Advancetext; + + #line default + #line hidden + + + #line 45 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Mediumtext; + + #line default + #line hidden + + + #line 48 "..\..\..\Ingame\IngameControl.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] - internal DamnOverSharp.WPF.UiLibrary.VirtualButton button; + internal System.Windows.Controls.TextBlock Easytext; #line default #line hidden - #line 22 "..\..\..\Ingame\IngameControl.xaml" + #line 51 "..\..\..\Ingame\IngameControl.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] - internal System.Windows.Controls.Image image; + internal System.Windows.Controls.TextBlock Dialtext; + + #line default + #line hidden + + + #line 54 "..\..\..\Ingame\IngameControl.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.TextBlock Defusetext; #line default #line hidden @@ -96,25 +144,43 @@ namespace Example { switch (connectionId) { case 1: - this.mouseCapture = ((DamnOverSharp.WPF.UiLibrary.VirtualMouseCaptureArea)(target)); + this.ShopMouseCapture = ((DamnOverSharp.WPF.UiLibrary.VirtualMouseCaptureArea)(target)); - #line 13 "..\..\..\Ingame\IngameControl.xaml" - this.mouseCapture.VirtualMouseDrag += new System.EventHandler(this.mouseCapture_VirtualMouseDrag); + #line 18 "..\..\..\Ingame\IngameControl.xaml" + this.ShopMouseCapture.VirtualMouseDrag += new System.EventHandler(this.mouseCapture_VirtualMouseDrag); #line default #line hidden return; case 2: - this.button = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); + this.Close = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); - #line 18 "..\..\..\Ingame\IngameControl.xaml" - this.button.Clicked += new System.EventHandler(this.VirtualButton_Clicked); + #line 19 "..\..\..\Ingame\IngameControl.xaml" + this.Close.Clicked += new System.EventHandler(this.Close_Clicked); #line default #line hidden return; case 3: - this.image = ((System.Windows.Controls.Image)(target)); + this.Killstext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 4: + this.Deathstext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 5: + this.Advancetext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 6: + this.Mediumtext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 7: + this.Easytext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 8: + this.Dialtext = ((System.Windows.Controls.TextBlock)(target)); + return; + case 9: + this.Defusetext = ((System.Windows.Controls.TextBlock)(target)); return; } this._contentLoaded = true; diff --git a/Example/obj/Debug/Ingame/overlay.g.cs b/Example/obj/Debug/Ingame/overlay.g.cs new file mode 100644 index 0000000..961e5ef --- /dev/null +++ b/Example/obj/Debug/Ingame/overlay.g.cs @@ -0,0 +1,158 @@ +#pragma checksum "..\..\..\Ingame\overlay.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "2FBEFF2595BB8FEBB35EE0FB94BE8B55CD8FF0ADC34DDA52735DEDAA2F14E5FD" +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using DamnOverSharp.WPF.UiLibrary; +using Example.Ingame; +using System; +using System.Diagnostics; +using System.Windows; +using System.Windows.Automation; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Ink; +using System.Windows.Input; +using System.Windows.Markup; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Media.Effects; +using System.Windows.Media.Imaging; +using System.Windows.Media.Media3D; +using System.Windows.Media.TextFormatting; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Shell; + + +namespace Example.Ingame { + + + /// + /// overlay + /// + public partial class overlay : DamnOverSharp.WPF.UiLibrary.VirtualControlBase, System.Windows.Markup.IComponentConnector { + + + #line 21 "..\..\..\Ingame\overlay.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.StackPanel SHOWMENU; + + #line default + #line hidden + + + #line 25 "..\..\..\Ingame\overlay.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal DamnOverSharp.WPF.UiLibrary.VirtualButton ShopTitle; + + #line default + #line hidden + + + #line 26 "..\..\..\Ingame\overlay.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal DamnOverSharp.WPF.UiLibrary.VirtualButton TaxiTitle; + + #line default + #line hidden + + + #line 27 "..\..\..\Ingame\overlay.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal DamnOverSharp.WPF.UiLibrary.VirtualButton SquadTitle; + + #line default + #line hidden + + + #line 28 "..\..\..\Ingame\overlay.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal DamnOverSharp.WPF.UiLibrary.VirtualButton SettingsTitle; + + #line default + #line hidden + + private bool _contentLoaded; + + /// + /// InitializeComponent + /// + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")] + public void InitializeComponent() { + if (_contentLoaded) { + return; + } + _contentLoaded = true; + System.Uri resourceLocater = new System.Uri("/Example;component/ingame/overlay.xaml", System.UriKind.Relative); + + #line 1 "..\..\..\Ingame\overlay.xaml" + System.Windows.Application.LoadComponent(this, resourceLocater); + + #line default + #line hidden + } + + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")] + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")] + void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { + switch (connectionId) + { + case 1: + this.SHOWMENU = ((System.Windows.Controls.StackPanel)(target)); + return; + case 2: + this.ShopTitle = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); + + #line 25 "..\..\..\Ingame\overlay.xaml" + this.ShopTitle.Clicked += new System.EventHandler(this.ShopTitle_Click); + + #line default + #line hidden + return; + case 3: + this.TaxiTitle = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); + + #line 26 "..\..\..\Ingame\overlay.xaml" + this.TaxiTitle.Clicked += new System.EventHandler(this.TaxiTitle_Click); + + #line default + #line hidden + return; + case 4: + this.SquadTitle = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); + + #line 27 "..\..\..\Ingame\overlay.xaml" + this.SquadTitle.Clicked += new System.EventHandler(this.SquadTitle_Click); + + #line default + #line hidden + return; + case 5: + this.SettingsTitle = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); + + #line 28 "..\..\..\Ingame\overlay.xaml" + this.SettingsTitle.Clicked += new System.EventHandler(this.SettingsTitle_Click); + + #line default + #line hidden + return; + } + this._contentLoaded = true; + } + } +} + diff --git a/Example/obj/Debug/Ingame/overlay.g.i.cs b/Example/obj/Debug/Ingame/overlay.g.i.cs index cae3933..961e5ef 100644 --- a/Example/obj/Debug/Ingame/overlay.g.i.cs +++ b/Example/obj/Debug/Ingame/overlay.g.i.cs @@ -1,4 +1,4 @@ -#pragma checksum "..\..\..\Ingame\overlay.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "9DFB5CF8EC2D00071F2DC6BBCC69BD5806743A156BEAABF6C50D9D6E9FB6B17C" +#pragma checksum "..\..\..\Ingame\overlay.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "2FBEFF2595BB8FEBB35EE0FB94BE8B55CD8FF0ADC34DDA52735DEDAA2F14E5FD" //------------------------------------------------------------------------------ // // This code was generated by a tool. @@ -42,7 +42,15 @@ namespace Example.Ingame { public partial class overlay : DamnOverSharp.WPF.UiLibrary.VirtualControlBase, System.Windows.Markup.IComponentConnector { - #line 15 "..\..\..\Ingame\overlay.xaml" + #line 21 "..\..\..\Ingame\overlay.xaml" + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] + internal System.Windows.Controls.StackPanel SHOWMENU; + + #line default + #line hidden + + + #line 25 "..\..\..\Ingame\overlay.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal DamnOverSharp.WPF.UiLibrary.VirtualButton ShopTitle; @@ -50,7 +58,7 @@ namespace Example.Ingame { #line hidden - #line 16 "..\..\..\Ingame\overlay.xaml" + #line 26 "..\..\..\Ingame\overlay.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal DamnOverSharp.WPF.UiLibrary.VirtualButton TaxiTitle; @@ -58,7 +66,7 @@ namespace Example.Ingame { #line hidden - #line 17 "..\..\..\Ingame\overlay.xaml" + #line 27 "..\..\..\Ingame\overlay.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal DamnOverSharp.WPF.UiLibrary.VirtualButton SquadTitle; @@ -66,7 +74,7 @@ namespace Example.Ingame { #line hidden - #line 18 "..\..\..\Ingame\overlay.xaml" + #line 28 "..\..\..\Ingame\overlay.xaml" [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")] internal DamnOverSharp.WPF.UiLibrary.VirtualButton SettingsTitle; @@ -104,36 +112,39 @@ namespace Example.Ingame { switch (connectionId) { case 1: + this.SHOWMENU = ((System.Windows.Controls.StackPanel)(target)); + return; + case 2: this.ShopTitle = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); - #line 15 "..\..\..\Ingame\overlay.xaml" + #line 25 "..\..\..\Ingame\overlay.xaml" this.ShopTitle.Clicked += new System.EventHandler(this.ShopTitle_Click); #line default #line hidden return; - case 2: + case 3: this.TaxiTitle = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); - #line 16 "..\..\..\Ingame\overlay.xaml" + #line 26 "..\..\..\Ingame\overlay.xaml" this.TaxiTitle.Clicked += new System.EventHandler(this.TaxiTitle_Click); #line default #line hidden return; - case 3: + case 4: this.SquadTitle = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); - #line 17 "..\..\..\Ingame\overlay.xaml" + #line 27 "..\..\..\Ingame\overlay.xaml" this.SquadTitle.Clicked += new System.EventHandler(this.SquadTitle_Click); #line default #line hidden return; - case 4: + case 5: this.SettingsTitle = ((DamnOverSharp.WPF.UiLibrary.VirtualButton)(target)); - #line 18 "..\..\..\Ingame\overlay.xaml" + #line 28 "..\..\..\Ingame\overlay.xaml" this.SettingsTitle.Clicked += new System.EventHandler(this.SettingsTitle_Click); #line default diff --git a/Example/obj/Debug/MainWindow.g.cs b/Example/obj/Debug/MainWindow.g.cs index 8e72103..1380ebc 100644 --- a/Example/obj/Debug/MainWindow.g.cs +++ b/Example/obj/Debug/MainWindow.g.cs @@ -9,9 +9,6 @@ // //------------------------------------------------------------------------------ -using DamnOverSharp.WPF.UiLibrary; -using Example; -using Example.Ingame; using Example.ViewModels; using Example.Views; using System; diff --git a/Example/obj/Debug/MainWindow.g.i.cs b/Example/obj/Debug/MainWindow.g.i.cs index 8e72103..1380ebc 100644 --- a/Example/obj/Debug/MainWindow.g.i.cs +++ b/Example/obj/Debug/MainWindow.g.i.cs @@ -9,9 +9,6 @@ // //------------------------------------------------------------------------------ -using DamnOverSharp.WPF.UiLibrary; -using Example; -using Example.Ingame; using Example.ViewModels; using Example.Views; using System; diff --git a/MouseKeyHook/obj/Debug/net462/Gma.System.MouseKeyHook.dll b/MouseKeyHook/obj/Debug/net462/Gma.System.MouseKeyHook.dll index 1420d3bffa0d7411df9d182f77f95671142a3a9c..df60411c87e7fdb260c8e39633ed96f60ec2a52c 100644 GIT binary patch delta 207 zcmZp8z})bFc|r%vRE;OIH}+&~7vOppHoN^-yJAyf}Hs zX%m5&K4M~*4s!T4ihiwHlRM0HioP_5c6? delta 207 zcmZp8z})bFc|r%v9fS8bH}+&~7szVKzRmn)w!@ygGVl05u5sARvSY50ZiHf{o;uGWb)E6U z-LfxU%Ss4x|>*Dm25iu z$;H^S>-*QvIx$?4(;Szbmy~%ZX#f7q_MY1bCzjp~dfrxtH z4Jq?c%XXS`@Kw6i(JBdUu2dUjvzuGB3UW)ZgtNu$;Vk8sTo3P2m7;sNL)A-qKDU|H z(np$96?2xf)N;Js%;zPlNsP#881_Hl3tDp*2|f46neqPStzYuj*{&aoTFYg zvPT@h7>;U5^>Vk$lVLBaHcEOW!fIrw601TFPH$e4I) z*(-^D&M~ct3_ zrV}jzU9m(NU=aV6xnP@_Xdd|GH0q>Tcvysh<={GONCrPgKo+kz{6!sk_fJ{ z5IqH^!Z0N5MkARZ;>Zw)u{ffo;5cvyru^ZkV z*gn{suwEE6mEI85uQ|9@$&7yO!jwMlVeV5>ept)0yoGJ|>*NoyAHzEey967H=;T!e KvAha(PWcC(o=pe< delta 2900 zcmeH|drZ?;6vyv9EznW{5u8s%nVU+L@=~BUptN8Cc|YbxrrWv{Q)!E{#fGQv&qTl-t)WX zoO^D6zwh;&4fLE1>{+e7?<=N$UwX$+QMl|aID3d9<-~9dU6zN_$X6%sPb$B5AyRrx zAptihbyz>;nhY9VOjqS8-&yT#5tS}SOTDw9*&ShQi!d8)woDFRaMhm-BQtlc!#T@89AdI zu6jeR9SQ2{%3QUz28+GEAs^wz)%K=FLq(-NHqMc_c5QrR4CBJ!5Uf&Yi*M|M2^rn&Z_pNsec;XWb9C% z@v6^A%~5TGSaQH6CR!VLZVKhfE$m1kmujO(%2G~Fr8b$z-c)LpFR~$x z-0Dr@GZp7qD3gt6?PXCo3@u#Vz z=acE=$Khs5mNqUoBkU!}B)-8OM# zCgmd@%pxPVZlGjcp}0NcUCq7uD6}=3g7~)$lpxF4U_}SzeA$50H zRw>zM9KR@z0@i0!hfL#vY*c-P4LJxa;{F`WGFZP6*ueb?YFM9(O>gBBfUZ(_X0|YE zW(&C#$Ypu7UY#SBOTJ!&V;jk%6!|Lqee~M?dfw9 zBWx<9jl7_UlGMdBc}lszhzzoXzb~SFx>RvxW^KvzA@`U`$3Yexz)&$o>*^k#&5`L7 zTTy~z$>uF3*n~gdNLQ81d~b3oS)!$mJ)P8t%wb&=_$@xrHQ+ML=Yv0BwUWm}LWF=5 zvxP_o_skN)07eD~5d)t06CwiKtr225c*jSyi!co05s(B{V!<+S9076QUQ}NU>S0=# z2G5s*w~*jDP>+Ihz=bfl#IM275O56t9fqO>8-E5|h=$o`e(gcrXelp~RR`Xg&Bo@~i;Q zASfIR!^tVlG=ZzZDjPDc!oY*T1TY>QF9N@YA*aYh;1cjKPRIz3qN91>Ds+et@f~&- z4I02GP`e>9#kI_os zJS0#Fet3)y_?R(P^Zw&h4gtAyoUX|f@5d)-fV5Is1tWf~N9B^?inPy@0r_whzzShS zf64uop(R%9lL%Z$Z-K_EQLFCzPbr;O9i-AMdLo(gdiAPSda85(2c3%v_tsUYLV~B& zZtsGH*W?6VKjE2u;f27k$ejN3o$o$OsQTuq3O-fAyHL~rR>6^fY8YSbR_V2$<9&ke ziZ@yNhN|1=9HvvUm=m=Z!%kQiY#;1(m~v4m_e2NA%I&G#7s?%>5gfQ*b&mE(?}Zbz eo7mc;iq;;*Du(@CNp&*dB3zeXBd{+XE9sx#9H0dN diff --git a/MouseKeyHook/obj/Debug/net462/MouseKeyHook.AssemblyInfo.cs b/MouseKeyHook/obj/Debug/net462/MouseKeyHook.AssemblyInfo.cs index d739240..717bb4b 100644 --- a/MouseKeyHook/obj/Debug/net462/MouseKeyHook.AssemblyInfo.cs +++ b/MouseKeyHook/obj/Debug/net462/MouseKeyHook.AssemblyInfo.cs @@ -27,7 +27,7 @@ using System.Reflection; Additionally, there is a possibility to supress certain keyboard or mouse clicks, or detect special key combinations. ")] [assembly: System.Reflection.AssemblyFileVersionAttribute("5.6.1.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("5.6.1-alpha+3284976fe8632226ffd8878c61a30e43c4c313cd")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("5.6.1-alpha+b79ac874181d9d56e6669885181d3888c6561822")] [assembly: System.Reflection.AssemblyProductAttribute("Gma.System.MouseKeyHook")] [assembly: System.Reflection.AssemblyTitleAttribute("MouseKeyHook")] [assembly: System.Reflection.AssemblyVersionAttribute("5.6.1.0")] diff --git a/MouseKeyHook/obj/Debug/net462/MouseKeyHook.AssemblyInfoInputs.cache b/MouseKeyHook/obj/Debug/net462/MouseKeyHook.AssemblyInfoInputs.cache index f871d09..ed7dbe2 100644 --- a/MouseKeyHook/obj/Debug/net462/MouseKeyHook.AssemblyInfoInputs.cache +++ b/MouseKeyHook/obj/Debug/net462/MouseKeyHook.AssemblyInfoInputs.cache @@ -1 +1 @@ -34c40aeaa5ecb8948ca4743b7a8a347d5ccb39a5a7f23cf2c0d1035226e301a3 +70c9f1e9e2d2fd0a1214b52373a3abe55e61b4226a1e787d0372dbeecb7c05a3 diff --git a/MouseKeyHook/obj/Debug/net462/MouseKeyHook.csproj.FileListAbsolute.txt b/MouseKeyHook/obj/Debug/net462/MouseKeyHook.csproj.FileListAbsolute.txt index 20a469a..1efdf3a 100644 --- a/MouseKeyHook/obj/Debug/net462/MouseKeyHook.csproj.FileListAbsolute.txt +++ b/MouseKeyHook/obj/Debug/net462/MouseKeyHook.csproj.FileListAbsolute.txt @@ -24,6 +24,5 @@ C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net462\MouseKeyHo C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net462\MouseKeyHook.AssemblyInfoInputs.cache C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net462\MouseKeyHook.AssemblyInfo.cs C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net462\MouseKeyHook.csproj.CoreCompileInputs.cache -C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net462\MouseKeyHook.sourcelink.json C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net462\Gma.System.MouseKeyHook.dll C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net462\Gma.System.MouseKeyHook.pdb diff --git a/MouseKeyHook/obj/Debug/net462/MouseKeyHook.sourcelink.json b/MouseKeyHook/obj/Debug/net462/MouseKeyHook.sourcelink.json deleted file mode 100644 index 42d200f..0000000 --- a/MouseKeyHook/obj/Debug/net462/MouseKeyHook.sourcelink.json +++ /dev/null @@ -1 +0,0 @@ -{"documents":{"C:\\Users\\vitor\\source\\repos\\scumoverlay\\*":"https://raw.githubusercontent.com/MarcellVokk/DamnOverSharp/bd23c8554ddfc6849e872b9bac200da8c8393f1b/*"}} \ No newline at end of file diff --git a/MouseKeyHook/obj/Debug/net472/Gma.System.MouseKeyHook.dll b/MouseKeyHook/obj/Debug/net472/Gma.System.MouseKeyHook.dll index 520053946ed8473b5b863bc682203bae11115ced..d1c22017617a56aaded05a6fd501b1900ac6756e 100644 GIT binary patch delta 207 zcmZp8z})bFc|r%v=j6AuH}+&~7x4EFxvwD3;k7qFSGf6W;JeK%JLU@Mnp-9&TbP>| zS{SBSrkI+gnwgndT3DEZ_{J6%7RhF&W`-6`f$&kp9%wWM_&S1h|2&4@eQh;J945kcb k45>g2f|fvW3!n&0-Wbfc0O~UXs{@G}F&J(3zOhvt0RLM$NdN!< delta 207 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 c?N!BS4CvAwLMgRZ+ diff --git a/MouseKeyHook/obj/Debug/net472/MouseKeyHook.AssemblyInfo.cs b/MouseKeyHook/obj/Debug/net472/MouseKeyHook.AssemblyInfo.cs index 43b3bd8..717bb4b 100644 --- a/MouseKeyHook/obj/Debug/net472/MouseKeyHook.AssemblyInfo.cs +++ b/MouseKeyHook/obj/Debug/net472/MouseKeyHook.AssemblyInfo.cs @@ -27,7 +27,7 @@ using System.Reflection; Additionally, there is a possibility to supress certain keyboard or mouse clicks, or detect special key combinations. ")] [assembly: System.Reflection.AssemblyFileVersionAttribute("5.6.1.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("5.6.1-alpha+82571ca7acc438d897ae3c9ec82004d9b17d8ba3")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("5.6.1-alpha+b79ac874181d9d56e6669885181d3888c6561822")] [assembly: System.Reflection.AssemblyProductAttribute("Gma.System.MouseKeyHook")] [assembly: System.Reflection.AssemblyTitleAttribute("MouseKeyHook")] [assembly: System.Reflection.AssemblyVersionAttribute("5.6.1.0")] diff --git a/MouseKeyHook/obj/Debug/net472/MouseKeyHook.AssemblyInfoInputs.cache b/MouseKeyHook/obj/Debug/net472/MouseKeyHook.AssemblyInfoInputs.cache index 69f2a2a..ed7dbe2 100644 --- a/MouseKeyHook/obj/Debug/net472/MouseKeyHook.AssemblyInfoInputs.cache +++ b/MouseKeyHook/obj/Debug/net472/MouseKeyHook.AssemblyInfoInputs.cache @@ -1 +1 @@ -06fdb9fc37c742f50d76528053869b3cbfdef2279aa1315e549dca221683598b +70c9f1e9e2d2fd0a1214b52373a3abe55e61b4226a1e787d0372dbeecb7c05a3 diff --git a/MouseKeyHook/obj/Debug/net472/MouseKeyHook.csproj.FileListAbsolute.txt b/MouseKeyHook/obj/Debug/net472/MouseKeyHook.csproj.FileListAbsolute.txt index bf53e26..20d8d69 100644 --- a/MouseKeyHook/obj/Debug/net472/MouseKeyHook.csproj.FileListAbsolute.txt +++ b/MouseKeyHook/obj/Debug/net472/MouseKeyHook.csproj.FileListAbsolute.txt @@ -24,6 +24,5 @@ C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net472\MouseKeyHo C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net472\MouseKeyHook.AssemblyInfoInputs.cache C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net472\MouseKeyHook.AssemblyInfo.cs C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net472\MouseKeyHook.csproj.CoreCompileInputs.cache -C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net472\MouseKeyHook.sourcelink.json C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net472\Gma.System.MouseKeyHook.dll C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\net472\Gma.System.MouseKeyHook.pdb diff --git a/MouseKeyHook/obj/Debug/net472/MouseKeyHook.sourcelink.json b/MouseKeyHook/obj/Debug/net472/MouseKeyHook.sourcelink.json deleted file mode 100644 index 42d200f..0000000 --- a/MouseKeyHook/obj/Debug/net472/MouseKeyHook.sourcelink.json +++ /dev/null @@ -1 +0,0 @@ -{"documents":{"C:\\Users\\vitor\\source\\repos\\scumoverlay\\*":"https://raw.githubusercontent.com/MarcellVokk/DamnOverSharp/bd23c8554ddfc6849e872b9bac200da8c8393f1b/*"}} \ No newline at end of file diff --git a/MouseKeyHook/obj/Debug/netcoreapp3.1/Gma.System.MouseKeyHook.dll b/MouseKeyHook/obj/Debug/netcoreapp3.1/Gma.System.MouseKeyHook.dll index 7dc39ea2eb89131a9e7a3d8e1267a2fd16a4d4e3..27bc2a99559e28b88af22165a52239d7d9cb219d 100644 GIT binary patch delta 198 zcmZo@U}dl)!>{1a{H@8eowlFs_ zv@lGuOffY}H8V4_w6HJ*@r^AkERxMk%?vG!j5b@J3uI);=v=jE@`Upy0{InRLRe15 zxGrg#ad!5tOtsBd&TC2dnlo53Br+s3STL9~m@pUuX+wq-pjZlnDT5h9DiDL9B~aV~ bC<2o=2Jo7l!S&ap*s7=6B%~yZq)4yHteLQ;dw0Elf>K zQc}{A%`8kTQ!UJmk}Q)FlZ^}vQW7naEsQOV(+ra~Tb~PLWXW}W^=I;g^Ckj2gLLF} zeR|`tqqh5zi&)Xa%~#HAN%*EP7%><#Br{krm;#{*LkbY40r_S?5fcVWhEyPJ4pfr_ jWG68s0%eRC41h2N$hH9MGX}~S1N9g(ByIM7u~i%Zhp0Tt diff --git a/MouseKeyHook/obj/Debug/netcoreapp3.1/Gma.System.MouseKeyHook.pdb b/MouseKeyHook/obj/Debug/netcoreapp3.1/Gma.System.MouseKeyHook.pdb index 570eeed6610039bafc311ff222529c0a7aa068a4..959c84e121ce04b957809c0b4b5253cb707b8c13 100644 GIT binary patch delta 2669 zcmeH{drXye7{{OA^B#fY5spVdLeN9zB?aVW8KQCycj0i81Ekz zB%;O#DUZK*;=|vGvk5$^j`~d*4hdn)4)S3ra+HSOh*y@PqlRY6Iq5eXebwqH)xG~WyDUHsRO^N2ceheL+0G5U<$gNXs?}1J!S$AE3Q*ogKa&wBN6SD4 z`-?r3Q&fdiWMbOOayb*rydrs77;Tp?vbaHQkko95WXoVSMlOlV0oKZ34mVj|rEZ_( zgbd~JQmJ3bDV8F-;mgKIXE7Gq;9{%%v67dlQi;n&2W#YHE*9EoXl6*Qi~Xb~kCWAF zhPp5DtC1*_XcsrBR2g(()k=xW$FyQOosUt5L>B;Aa@xRFi7rIZ>!lyCY@$YA2~&I} z6mpQ174b4tF3nN$lN;MMR>UjRHt{dUbceJQbGvd%*eW1RP8!IOB_({&vYBr94#=1| zOV}mhZca9>^68YyX*b8I61nE)7Rw5{;(OQa-QKVs_b+|$V3_HD$rBP*%hxQOKS^vLw;r}FB0x#$KjU!R{f(^{?XR31Z%BB zXo%e3_FuSVy?cG<==)Zqgtb9LNyZH>9C)(fr4Vozj`TC&sD&s7oQ`oAcnz}*z1>VS z4ZJm#Xen4fg=i6I44y25A3dP*Vc0Hz#2Nb6(`MRGM`azQHO78V@+a&Z)E9B4s zSIEr)zM@L?kq>#0%?w?I&}7eXuGKg9aHI+>K%x*)geZP!nC{`IoSgsUVxQjOv9Jdg zre8E`j@kdqzjQrTtLLW%_QV)if?coPtVP(oHuh%t)^|QRigQP`Z`^g8#w#T{+l#lGKN7){8C!CaX^4%dV+HAPpyBLa?+q8p^3@6vyv9i@>@9p$Pc`-87X&mY4D>*p&s5_dAPC-CY(T9*esmZe3IczNr_QqzHHlk+baC;vq@_y}s;a7O%aRh3?MaDo)?};278es! zWl6Fn#V5yC$6ED~+Rd8>j1_WlY6xl8V;4T-dr=L|3%xA&-t!C9xc;Ubx)+vHFn7uR zrt3GuZ^w;YxV<5=z3=wPs{zFw7urhg8-vgM?)OdQfbkXi`Y44AZW>%m!@6ZaKAT8ic=`_$g2Ed+DU( z*OrqXM`Tc{G;?JJ%%0}+83<$JToYz>{H}@GrG?Wo;Ut^;Gcn6&eHO5q`?IK1Q!Vy+ zUEbw^m6XD*D=1Y{EUtOAQM{)Rf!5|w5dXS@5@iMJv$2CpKAMd{R>h}@9XaI74J#>G zu2Z~w6+bD8BG%e1N6wTZfk zVKx?19?vMDWS>&6pK?B4LV8)oUzE^xO}e<~U0XI$T4V8c%++*?w)S?KDa#z z(N;rLker)a&i@$n%N6I@SA&!!Y668wPzHD=L1tsobg&(VdItC@KGY@PJj@>jzlD|J zuY-h`2Htr@h*WUv6e09rWPlK{;2A$5wBQzh(Jtm=a2?*~fN3yD2CJ}O9_SCw1-Ie- zY)}VLL$3M@u|Sz4&{S|H1gh~#8gK!>T`<^!ghRoZc=;H349X|LbCZz_*oF84NeK@e zg@6~a6UA9JqC5^RgCKb^f<^Hl?1a+JzCvY|f?d$Zfy!=?t4Klx6q|emdIEd{einjn z!YBfqgNiAeaDq|bx@ve_jKK>qOav3K(^=pr5X2B!FboF|pfV|-2RjM_7h{Jo5uYQw z7*G#JgUYGJQsE1~i$LZ1vN-;J>+MjlheCN_Wpy7#sE=W|R#9WtUX?>eD8a&HKp|8` zkYY&5{RA!!hG%F0t8RC4l!n8`Tb~24e{Q838E_V=bC6-khYwomA6JB^T>t<8 diff --git a/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.AssemblyInfo.cs b/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.AssemblyInfo.cs index d739240..717bb4b 100644 --- a/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.AssemblyInfo.cs +++ b/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.AssemblyInfo.cs @@ -27,7 +27,7 @@ using System.Reflection; Additionally, there is a possibility to supress certain keyboard or mouse clicks, or detect special key combinations. ")] [assembly: System.Reflection.AssemblyFileVersionAttribute("5.6.1.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("5.6.1-alpha+3284976fe8632226ffd8878c61a30e43c4c313cd")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("5.6.1-alpha+b79ac874181d9d56e6669885181d3888c6561822")] [assembly: System.Reflection.AssemblyProductAttribute("Gma.System.MouseKeyHook")] [assembly: System.Reflection.AssemblyTitleAttribute("MouseKeyHook")] [assembly: System.Reflection.AssemblyVersionAttribute("5.6.1.0")] diff --git a/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.AssemblyInfoInputs.cache b/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.AssemblyInfoInputs.cache index f871d09..ed7dbe2 100644 --- a/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.AssemblyInfoInputs.cache +++ b/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.AssemblyInfoInputs.cache @@ -1 +1 @@ -34c40aeaa5ecb8948ca4743b7a8a347d5ccb39a5a7f23cf2c0d1035226e301a3 +70c9f1e9e2d2fd0a1214b52373a3abe55e61b4226a1e787d0372dbeecb7c05a3 diff --git a/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.csproj.FileListAbsolute.txt b/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.csproj.FileListAbsolute.txt index 7d058c8..5e4e2c8 100644 --- a/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.csproj.FileListAbsolute.txt +++ b/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.csproj.FileListAbsolute.txt @@ -25,6 +25,5 @@ C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\netcoreapp3.1\Mou C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\netcoreapp3.1\MouseKeyHook.AssemblyInfoInputs.cache C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\netcoreapp3.1\MouseKeyHook.AssemblyInfo.cs C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\netcoreapp3.1\MouseKeyHook.csproj.CoreCompileInputs.cache -C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\netcoreapp3.1\MouseKeyHook.sourcelink.json C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\netcoreapp3.1\Gma.System.MouseKeyHook.dll C:\Users\vitor\source\repos\scumoverlay\MouseKeyHook\obj\Debug\netcoreapp3.1\Gma.System.MouseKeyHook.pdb diff --git a/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.sourcelink.json b/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.sourcelink.json deleted file mode 100644 index 42d200f..0000000 --- a/MouseKeyHook/obj/Debug/netcoreapp3.1/MouseKeyHook.sourcelink.json +++ /dev/null @@ -1 +0,0 @@ -{"documents":{"C:\\Users\\vitor\\source\\repos\\scumoverlay\\*":"https://raw.githubusercontent.com/MarcellVokk/DamnOverSharp/bd23c8554ddfc6849e872b9bac200da8c8393f1b/*"}} \ No newline at end of file diff --git a/RenderHookAPI/CaptureProcess.cs b/RenderHookAPI/CaptureProcess.cs index b789e97..0f7075c 100644 --- a/RenderHookAPI/CaptureProcess.cs +++ b/RenderHookAPI/CaptureProcess.cs @@ -65,10 +65,12 @@ namespace RenderHookAPI _channelName, // The name of the IPC channel for the injected assembly to connect to config ); - + var injectionDONE = MessageBox.Show("Injection Finish"); + } catch (Exception e) { + var injectionFAIL = MessageBox.Show($"Injection FAIL WITH ERROR {e.Message}"); throw new InjectionFailedException(e); } diff --git a/RenderHookAPI/bin/Capture.dll b/RenderHookAPI/bin/Capture.dll new file mode 100644 index 0000000000000000000000000000000000000000..d533168f01a54fc9b50b6ad3894d02df7390a6b0 GIT binary patch literal 115200 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 literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/EasyHook.xml b/RenderHookAPI/bin/EasyHook.xml new file mode 100644 index 0000000..05b7d80 --- /dev/null +++ b/RenderHookAPI/bin/EasyHook.xml @@ -0,0 +1,2146 @@ + + + + EasyHook + + + +

    + A helper class for determining the address of COM object functions for hooking given a COM class id (CLSID) and COM interface id (IID), or COM class type and COM interface type. + + + The following three examples result in the same output: + + // 1. Use imported Class and Interface Types + COMClassInfo cci1 = new COMClassInfo(typeof(CLSID_DirectInputDevice8), typeof(IID_IDirectInputDevice8W), "GetCapabilities"); + // 2. Use Guid from class and interface types + COMClassInfo cci2 = new COMClassInfo(typeof(CLSID_DirectInputDevice8).GUID, typeof(IID_IDirectInputDevice8W).GUID, 3); + // 3. Use class and interface Guids directly (no need to have class and interface types defined) + COMClassInfo cci3 = new COMClassInfo(new Guid("25E609E5-B259-11CF-BFC7-444553540000"), new Guid("54D41081-DC15-4833-A41B-748F73A38179"), 3); + + // Will output False if dinput8.dll is not already loaded + Console.WriteLine(cci1.IsModuleLoaded()); + cci1.Query(); + cci2.Query(); + cci3.Query(); + // Will output True as dinput8.dll will be loaded by .Query() if not already + Console.WriteLine(cci1.IsModuleLoaded()); + + // Output the function pointers we queried + Console.WriteLine(cci1.FunctionPointers[0]); + Console.WriteLine(cci2.FunctionPointers[0]); + Console.WriteLine(cci3.FunctionPointers[0]); + + ... + + [ComVisible(true)] + [Guid("25E609E5-B259-11CF-BFC7-444553540000")] + public class CLSID_DirectInputDevice8 + { + } + + [ComVisible(true)] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("54D41081-DC15-4833-A41B-748F73A38179")] + public interface IID_IDirectInputDevice8W + { + /*** IDirectInputDevice8W methods ***/ + int GetCapabilities(IntPtr deviceCaps); // fourth method due to IUnknown methods QueryInterface, AddRef and Release + // other methods... + } + + + + + + Creates a new COMClassInfo using the COM class and interface types. The function names to retrieve the addresses for should be provided as strings + + The COM object's class type + The COM object's interface type + The methods to retrieve addresses for + + + + Creates a new COMClassInfo instance using the COM class and interface Guids. The function indexes to retrieve the addresses for as defined by the order of the methods in the COM interface. + + The class id (CLSID) of the COM object + The interface id (IID) of the COM interface. This interface MUST inherit from IUnknown. + One or more method indexes to retrieve the address for. Index 0 == QueryInterface, 1 == AddRef, 2 == Release, 3 == first method and so on, i.e. the order that the methods appear in the interface's C++ header file. + + + + Will contain the method addresses after a call to . The index corresponds to the order method names / indexes are passed into or . + + + + + Retrieve the module for the COM class. Only available after a call to . + + + + + Query the COM class for the specified method addresses. If not already loaded the COM module will be loaded. + + True if the COM class exists, False otherwise. + Thrown if the method index extends beyond the interface and into protected memory. + If the provided interface type is not an interface, or the class type is not visible to COM. + Thrown if the class instance does not support the specified interface. + + + + Determines if the module containing the COM class is already loaded + + True if the module is loaded, otherwise False + + + + Currently only provides a mechanism to register assemblies in the GAC. + + + The following demonstrates how to use and : + + using System; + using System.Collections.Generic; + using System.Runtime.Remoting; + using System.Text; + using System.IO; + using EasyHook; + + namespace FileMon + { + public class FileMonInterface : MarshalByRefObject + { + public void IsInstalled(Int32 InClientPID) + { + Console.WriteLine("FileMon has been installed in target {0}.\r\n", InClientPID); + } + + public void OnCreateFile(Int32 InClientPID, String[] InFileNames) + { + for (int i = 0; i < InFileNames.Length; i++) + { + Console.WriteLine(InFileNames[i]); + } + } + + public void ReportException(Exception InInfo) + { + Console.WriteLine("The target process has reported an error:\r\n" + InInfo.ToString()); + } + + public void Ping() + { + } + } + + class Program + { + static String ChannelName = null; + + static void Main(string[] args) + { + try + { + Config.Register( + "A FileMon like demo application.", + "FileMon.exe", + "FileMonInject.dll"); + + RemoteHooking.IpcCreateServer<FileMonInterface>(ref ChannelName, WellKnownObjectMode.SingleCall); + + RemoteHooking.Inject( + Int32.Parse(args[0]), + "FileMonInject.dll", + "FileMonInject.dll", + ChannelName); + + Console.ReadLine(); + } + catch (Exception ExtInfo) + { + Console.WriteLine("There was an error while connecting to target:\r\n{0}", ExtInfo.ToString()); + } + } + } + } + + + + + + The path where dependant files, like EasyHook(32|64)Svc.exe are stored. + Defaults to no path being specified. + + + + + The path where helper files, like EasyHook(32|64).dll are stored. + Defaults to the location of the assembly containing the Config type + + + + + Get the directory name of the current process, ending with a backslash. + + Directory name of the current process + + + + Get the name of the EasyHook SVC executable. + Automatically determine whether to use the 64-bit or the 32-bit version. + + Executable name + + + + Get the name of the EasyHook SVC executable to use for WOW64 bypass. + If this process is 64-bit, return the 32-bit service executable and vice versa. + + + + + + Get the EasyHook SVC executable name with the custom dependency path prepended. + + Full path to the executable + + + + REQUIRES ADMIN PRIVILEGES. Installs EasyHook and all given user NET assemblies into the GAC and + ensures that all references are cleaned up if the installing application + is shutdown. Cleanup does not depend on the calling application... + + + + ATTENTION: There are some problems when debugging processes whose libraries + are added to the GAC. Visual Studio won't start the debug session! There is + only one chance for you to workaround this issue if you want to install + libraries AND debug them simultanously. This is simply to debug only one process + which is the default setting of Visual Studio. Because the libraries are added + to the GAC AFTER Visual Studio has initialized the debug session, there won't be + any conflicts; at least so far... + + In debug versions of EasyHook, you may also check the "Application" event log, which holds additional information + about the GAC registration, after calling this method. In general this method works + transactionally. This means if something goes wrong, the GAC state of all related libraries + won't be violated! + + The problem with NET assemblies is that the CLR only searches the GAC and + directories starting with the application base directory for assemblies. + To get injected assemblies working either all of them have to be located + under the target base directory (which is not suitable in most cases) or + reside in the GAC. + + EasyHook provides a way to automatically register all of its own assemblies + and custom ones temporarily in the GAC. It also ensures + that all of these assemblies are removed if the installing process exists. + So you don't need to care about and may write applications according to + the XCOPY standard. If your application ships with an installer, you may + statically install all of your assemblies and the ones of EasyHook into the + GAC. In this case just don't call . + + Of course EasyHook does also take care of multiple processes using the same + injection libraries. So if two processes are sharing some of those DLLs, + a stable reference counter ensures that the libraries are kept in the GAC + if one process is terminated while the other continues running and so continues + holding a proper GAC reference. + + Please note that in order to add your library to the GAC, it has to be a valid + NET assembly and expose a so called "Strong Name". Assemblies without a strong + name will be rejected by this method! + + + + A description under which the installed files should be referenced. + + + A list of user assemblies as relative or absolute paths. + + + At least one of the files specified could not be found! + + + Unable to load at least one of the given files for reflection. + + + At least one of the given files does not have a strong name. + + + + + This class will provide various static members to be used with local hooking and + is also the instance class of a hook. + + + The following demonstrates how to use : + +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Runtime.InteropServices; +using EasyHook; + +namespace FileMonInject +{ + public class Main : EasyHook.IEntryPoint + { + FileMon.FileMonInterface Interface; + LocalHook CreateFileHook; + Stack<String> Queue = new Stack<String> (); + + public Main( + RemoteHooking.IContext InContext, + String InChannelName) + { + // connect to host... + Interface = RemoteHooking.IpcConnectClient<FileMon.FileMonInterface>(InChannelName); + + // validate connection... + Interface.Ping(); + } + + public void Run( + RemoteHooking.IContext InContext, + String InChannelName) + { + // install hook... + try + { + CreateFileHook = LocalHook.Create( + LocalHook.GetProcAddress("kernel32.dll", "CreateFileW"), + new DCreateFile(CreateFile_Hooked), + this); + + CreateFileHook.ThreadACL.SetExclusiveACL(new Int32[] { 0 }); + } + catch (Exception ExtInfo) + { + Interface.ReportException(ExtInfo); + + return; + } + + Interface.IsInstalled(RemoteHooking.GetCurrentProcessId()); + + RemoteHooking.WakeUpProcess(); + + // wait for host process termination... + try + { + while (true) + { + Thread.Sleep(500); + + // transmit newly monitored file accesses... + if (Queue.Count > 0) + { + String[] Package = null; + + lock (Queue) + { + Package = Queue.ToArray(); + + Queue.Clear(); + } + + Interface.OnCreateFile(RemoteHooking.GetCurrentProcessId(), Package); + } + else + Interface.Ping(); + } + } + catch + { + // Ping() will raise an exception if host is unreachable + } + } + + [UnmanagedFunctionPointer(CallingConvention.StdCall, + CharSet = CharSet.Unicode, + SetLastError = true)] + delegate IntPtr DCreateFile( + String InFileName, + UInt32 InDesiredAccess, + UInt32 InShareMode, + IntPtr InSecurityAttributes, + UInt32 InCreationDisposition, + UInt32 InFlagsAndAttributes, + IntPtr InTemplateFile); + + // just use a P-Invoke implementation to get native API access from C# (this step is not necessary for C++.NET) + [DllImport("kernel32.dll", + CharSet = CharSet.Unicode, + SetLastError = true, + CallingConvention = CallingConvention.StdCall)] + static extern IntPtr CreateFile( + String InFileName, + UInt32 InDesiredAccess, + UInt32 InShareMode, + IntPtr InSecurityAttributes, + UInt32 InCreationDisposition, + UInt32 InFlagsAndAttributes, + IntPtr InTemplateFile); + + // this is where we are intercepting all file accesses! + static IntPtr CreateFile_Hooked( + String InFileName, + UInt32 InDesiredAccess, + UInt32 InShareMode, + IntPtr InSecurityAttributes, + UInt32 InCreationDisposition, + UInt32 InFlagsAndAttributes, + IntPtr InTemplateFile) + { + + try + { + Main This = (Main)HookRuntimeInfo.Callback; + + lock (This.Queue) + { + This.Queue.Push("[" + RemoteHooking.GetCurrentProcessId() + ":" + + RemoteHooking.GetCurrentThreadId() + "]: \"" + InFileName + "\""); + } + } + catch + { + } + + // call original API... + return CreateFile( + InFileName, + InDesiredAccess, + InShareMode, + InSecurityAttributes, + InCreationDisposition, + InFlagsAndAttributes, + InTemplateFile); + } + } +} + + + + + + + RIP relocation is disabled by default. If you want to enable it, + just call this method which will attach a debugger to the current + process. There may be circumstances under which this might fail + and this is why it is not done by default. On 32-Bit system this + method will always succeed and do nothing... + + + + + Tries to get the underlying thread ID for a given handle. + + + This is not always possible. The handle has to be opened with THREAD_QUERY_INFORMATION + access. + + A valid thread handle. + A valid thread ID associated with the given thread handle. + + The given handle was not opened with THREAD_QUERY_INFORMATION access. + + The handle is invalid. + + + Should never occur and just notifies you that a handle to thread ID conversion is not + available on the current platform. + + + + + Tries to get the underlying process ID for a given handle. + + + This is not always possible. The handle has to be opened with PROCESS_QUERY_INFORMATION + access. + + A valid process handle. + A valid process ID associated with the given process handle. + + The given handle was not opened with PROCESS_QUERY_INFORMATION access. + + The handle is invalid. + + + Should never occur and just notifies you that a handle to thread ID conversion is not + available on the current platform. + + + + + Reads the kernel object name for a given windows usermode handle. + Executes in approx. 100 micro secounds. + + + This allows you to translate a handle back to the associated filename for example. + But keep in mind that such names are only valid for kernel service routines, like + NtCreateFile. You won't have success when calling CreateFile on such + object names! The regular windows user mode API has some methods that will allow + you to convert such kernelmode names back into usermode names. I know this because I did it + some years ago but I've already forgotten how it has to be done! I can only give you + some hints: FindFirstVolume(), FindFirstVolumeMountPoint(), + QueryDosDevice(), GetVolumePathNamesForVolumeName() + + A valid usermode handle. + + The kernel object name associated with the given handle. + + The given handle is invalid or could not be accessed for unknown reasons. + + + + + Ensures that each instance is always terminated with . + + + + + The callback passed to . + + + + + Returns the thread ACL associated with this hook. Refer to + for more information about access negotiation. + + + The underlying hook is already disposed. + + + + + Returns the trampoline bypass address associated with this hook. + + + The underlying hook has been disposed. + + + + + Checks whether a given thread ID will be intercepted by the underlying hook. + + + + This method provides an interface to the internal negotiation algorithm. + You may use it to check whether your ACL provides expected results. + + The following is a pseudo code of how this method is implemented: + + if(InThreadID == 0) + InThreadID = GetCurrentThreadId(); + + if(GlobalACL.Contains(InThreadID)) + { + if(LocalACL.Contains(InThreadID)) + { + if(LocalACL.IsExclusive) + return false; + } + else + { + if(GlobalACL.IsExclusive) + return false; + + if(!LocalACL.IsExclusive) + return false; + } + } + else + { + if(LocalACL.Contains(InThreadID)) + { + if(LocalACL.IsExclusive) + return false; + } + else + { + if(!GlobalACL.IsExclusive) + return false; + + if(!LocalACL.IsExclusive) + return false; + } + } + + return true; + + + + A native OS thread ID; or zero if you want to check the current thread. + true if the thread is intercepted, false otherwise. + + The underlying hook is already disposed. + + + + + Returns the gloabl thread ACL associated with ALL hooks. Refer to + for more information about access negotiation. + + + + + If you want to immediately uninstall a hook, the only way is to dispose it. A disposed + hook is guaranteed to never invoke your handler again but may still consume + memory even for process life-time! + + + As we are living in a manged world, you don't have to dispose a hook because the next + garbage collection will do it for you, assuming that your code does not reference it + anymore. But there are times when you want to uninstall it excplicitly, with no delay. + If you dispose a disposed or not installed hook, nothing will happen! + + + + + Installs a managed hook. After this you'll have to activate it by setting a proper . + + + + Note that not all entry points are hookable! In general methods like CreateFileW + won't cause any trouble. But there might be methods that are not hookable because their + entry point machine code is not eligable to be hooked. You should test all hooks on + common environments like "Windows XP x86/x64 SP2/SP3" and "Windows Vista x86/x64 (SP1)". + This is the only way to ensure that your application will work well on most machines. + + Your handler delegate has to use the and + shall map to the same native method signature, otherwise the application will crash! The best + way is to use predefined delegates used in related P-Invoke implementations usually found with Google. + If you know how to write such native delegates you won't need internet resources of course. + I recommend using C++.NET which allows you to just copy the related windows API to your managed + class and thread it as delegate without any changes. This will also speed up the whole thing + because no unnecessary marshalling is required! C++.NET is also better in most cases because you + may access the whole native windows API from managed code without any effort what significantly eases + writing of hook handlers. + + + The given delegate is automatically prevented from being garbage collected until the hook itself + is collected... + + + A target entry point that should be hooked. + A handler with the same signature as the original entry point + that will be invoked for every call that has passed the Fiber Deadlock Barrier and various integrity checks. + An uninterpreted callback that will later be available through . + + A handle to the newly created hook. + + + Not enough memory available to complete the operation. On 64-Bit this may also indicate + that no memory can be allocated within a 31-Bit boundary around the given entry point. + + + The given function pointer does not map to executable memory (valid machine code) or + you passed null as delegate. + + + The given entry point contains machine code that can not be hooked. + + + The maximum amount of hooks has been installed. This is currently set to MAX_HOOK_COUNT (1024). + + + + + Installs an unmanaged hook. After this you'll have to activate it by setting a proper . + WON'T be supported! Refer to the native "LhBarrierXxx" APIs to + access unmanaged hook runtime information. + + + + Note that not all entry points are hookable! In general methods like CreateFileW + won't cause any trouble. But there may be methods that are not hookable because their + entry point machine code is not eligable to be hooked. You should test all hooks on + common environments like "Windows XP x86/x64 SP1/SP2/SP3" and "Windows Vista x86/x64 (SP1)". + This is the only way to ensure that your application will work well on most machines. + + Unmanaged hooks will require a native DLL which handles the requests. This way + you will get a high-performance interface, because + a switch from unmanaged to managed code seems to be rather time consuming without doing anything + useful (at least nothing visible); so a hook omitting this switch will be handled one or two + orders of magnitudes faster until finally your handler gains execution. But as a managed hook is still executed + within at last 1000 nano-seconds, even the "slow" managed implementation will be fast enough in most + cases. With C++.NET you would be able to provide such native high-speed hooks for frequently + called API methods, while still using managed ones for usual API methods, within a single assembly! + A pure unmanaged, empty hook executes in approx. 70 nano-seconds, which is incredible fast + considering the thread deadlock barrier and thread ACL negotiation that are already included in this benchmark! + + + A target entry point that should be hooked. + A handler with the same signature as the original entry point + that will be invoked for every call that has passed the Thread Deadlock Barrier and various integrity checks. + An uninterpreted callback that will later be available through LhBarrierGetCallback(). + + A handle to the newly created hook. + + + Not enough memory available to complete the operation. On 64-Bit this may also indicate + that no memory can be allocated within a 31-Bit boundary around the given entry point. + + + The given function pointer does not map to executable memory (valid machine code) or + you passed null as delegate. + + + The given entry point contains machine code that can not be hooked. + + + The maximum amount of hooks has been installed. This is currently set to MAX_HOOK_COUNT (1024). + + + + + Will return the address for a given DLL export symbol. The specified + module has to be loaded into the current process space and also export + the given method. + + + If you wonder how to get native entry points in a managed environment, + this is the anwser. You will only be able to hook native code from a managed + environment if you have access to a method like this, returning the native + entry point. Please note that you will also hook any managed code, which + of course ultimately relies on the native windows API! + + A system DLL name like "kernel32.dll" or a full qualified path to any DLL. + An exported symbol name like "CreateFileW". + The entry point for the given API method. + + The given module is not loaded into the current process. + + + The given module does not export the desired method. + + + + + Will return a delegate for a given DLL export symbol. The specified + module has to be loaded into the current process space and also export + the given method. + + + This method is usually not useful to hook something but it allows you + to dynamically load native API methods into your managed environment instead + of using the static P-Invoke approach provided by . + + A delegate using the and + exposing the same method signature as the specified native symbol. + A system DLL name like "kernel32.dll" or a full qualified path to any DLL. + An exported symbol name like "CreateFileW". + The managed delegate wrapping around the given native symbol. + + The given module is not loaded into the current process. + + + The given module does not export the given method. + + + + + Processes any pending hook removals. Warning! This method can be quite slow (1 second) under certain circumstances. + + + + + + Wraps the data needed for the connection to the host. + + + + + Gets the state of the current . + + + + + Gets the unmanaged data containing the pointer to the memory block containing ; + + + + + Loads from the specified. + + + + + + When not using the GAC, the BinaryFormatter fails to recognise the InParam + when attempting to deserialise. + + A custom DeserializationBinder works around this (see http://spazzarama.com/2009/06/25/binary-deserialize-unable-to-find-assembly/) + + + + + Loads the user library (trying the strong name first, then the file name), + creates an instance for the specified in the library + and invokes the Run() method specified in that instance. + + The assembly strong name provided by the user, located in the global assembly cache. + The assembly file name provided by the user to be loaded. + Array of parameters to use with the constructor and with the Run() method. Note that all but the first parameter should be binary encoded. + to use for reporting to the host side. + The exit code to be returned by the main() method. + + + + Finds the in the specified . + + + An is thrown if the given user library does not export a proper type implementing + the interface. + + The strong name of the assembly provided by the user. + The file name of the assembly provided by the user. + The functioning as for the user provided . + + + + Finds a user defined Run() method in the specified matching the specified . + + Name of the method to search. + to extract the method from. + Array of parameters to match to the method's defined parameters. + for the matching method, if any. + + + + Initializes an instance from the specified using the specified . + + + + + + + + Returns whether the specified can be used as parameters when invoking the specified . + + + + + + + + Constructs a message for a containing more specific information about the expected paramaters. + + Name of the missing method. + Array of the expected parameters. + + + + + Provides a managed interface to the native thread ACLs. + + + Refer to the official guide to learn more about why thread ACLs are useful. + They can be used to exclude/include dedicated threads from interception or to dynamically + apply different kind of hooks to different threads. Even if you could do this + in managed code, it is not that easy to implement and also EasyHook evaluates + those ACLs in unmanaged code. So if any thread is not intercepted, it will never + enter the manged environment what will speed up things about orders of magnitudes. + + + + + Is this ACL an exclusive one? Refer to for more information. + + + + + Is this ACL an inclusive one? Refer to for more information. + + + + + Sets an inclusive ACL. This means all threads that are enumerated through + are intercepted while all others are NOT. Of course this will overwrite the existing ACL. + + + Please note that this is not necessarily the final + negotiation result. Refer to for more information. + In general inclusive ACLs will restrict exclusive ACLs while local ACLs will overwrite the + global ACL. + + Threads to be explicitly included in negotiation. + + The limit of 128 access entries is exceeded! + + + + + Sets an exclusive ACL. This means all threads that are enumerated through + are NOT intercepted while all others are. Of course this will overwrite the existing ACL. + + + Please note that this is not necessarily the final + negotiation result. Refer to for more information. + In general inclusive ACLs will restrict exclusive ACLs while local ACLs will overwrite the + global ACL. + + Threads to be explicitly included in negotiation. + + The limit of 128 access entries is exceeded! + + + + + Creates a copy of the internal thread list associated with this ACL. You may freely + modify it without affecting the internal entries. + + + A copy of the internal thread entries. + + + + + This class is intended to be used within hook handlers, + to access associated runtime information. + + + Other hooking libraries on the market require that you keep track of + such information yourself, what can be a burden. + + + + + Is the current thread within a valid hook handler? This is only the case + if your handler was called through the hooked entry point... + Executes in max. one micro secound. + + + + + The user callback initially passed to either or . + Executes in max. one micro secound. + + The current thread is not within a valid hook handler. + + + + The hook handle initially returned by either or . + Executes in max. one micro secound. + + The current thread is not within a valid hook handler. + + + + Allows you to explicitly update the unmanaged module list which is required for + , and . + Normally this is not necessary, but if you hook a process that frequently loads/unloads modules, you + may call this method in a LoadLibrary hook to always operate on the latest module list. + + + + + Retrives the unmanaged module that contains the given pointer. If no module can be + found, null is returned. This method will automatically update the unmanaged + module list from time to time. + Executes in less than one micro secound. + + + + + + + Determines the first unmanaged module on the current call stack. This is always the module + that invoked the hook. + Executes in max. 15 micro secounds. + + + The problem is that if the calling module is a NET assembly + and invokes the hook through a P-Invoke binding, you will get + "mscorwks.dll" as calling module and not the NET assembly. This is only an example + but I think you got the idea. To solve this issue, refer to + and ! + + + + + Determines the first managed module on the current call stack. This is always the module + that invoked the hook. + Executes in max. 40 micro secounds. + + + Imagine your hook targets CreateFile. A NET assembly will now invoke this hook through + FileStream, for example. But because System.IO.FileStream invokes the hook, you will + get "System.Core" as calling module and not the desired assembly. + To solve this issue, refer to + and ! + + + + + Returns the address where execution is continued, after you hook has + been completed. This is always the instruction behind the hook invokation. + Executes in max. one micro secound. + + + + + A stack address pointing to . + Executes in max. one micro secound. + + + + + Creates a call stack trace of the unmanaged code path that finally + lead to your hook. To detect whether the desired module is within the + call stack you will have to walk through the whole list! + Executes in max. 20 micro secounds. + + + This method is not supported on Windows 2000 and will just return the + calling unmanaged module wrapped in an array on that platform. + + + + + Creates a call stack trace of the managed code path that finally + lead to your hook. To detect whether the desired module is within the + call stack you will have to walk through the whole list! + Executes in max. 80 micro secounds. + + + + + EasyHook will search in the injected user library for a class which implements + this interface. You should only have one class exposing this interface, otherwise + it is undefined which one will be chosen. See remarks for more details on how you should create this class. + + + + To implement this interface is not the only thing to do. The related class shall implement + two methods. The first one is a constructor ctor(IContext, ...) which will let you initialize + your library. You should immediately complete this call and only connect to your host + application for further error reporting. This initialization method allows you to redirect + all unhandled exceptions to your host application automatically. So even if all things in + your library initialization would fail, you may still report exceptions! Such + unhandled exceptions will be thrown by in your host. But + make sure that you are using serializable exception objects only as all standard NET ones are, + but not all custom ones. Otherwise you will only intercept a general exception with no specific + information attached. + + The second one is Run(IContext, ...) and should only exit/return when you want to unload your injected library. + Unhandled exceptions WON'T be redirected automatically and are likely to crash the target process. As you are expected + to connect to your host in the ctor(), you are now also expected to report errors by yourself. + + The parameter list described by (IContext, ...) will always contain a + instance as the first parameter. All further parameters will depend on the arguments passed to + at your injection host. ctor() and Run() must have the same custom parameter list + as composed by the one passed to Inject(). Otherwise an exception will be thrown. For example + if you call with Inject(..., ..., ..., ..., "MyString1", "MyString2"), you + have supplied a custom argument list of the format String, String to Inject. This list + will be converted to an object array and serialized. The injected library stub will later + deserialize this array and pass it to ctor() and Run(), both expected to have + a signature of IContext, String, String in our case. So Run will now be called with + (IContext, "MyString1", "MyString2"). + + You should avoid using static fields or properties within such a class, as this might lead to + bugs in your code when multiple library instances are injected into the same target! + + + + + + All supported options that will influence the way your library is injected. + + + + + Default injection procedure. + + + + + Use of services is not permitted. + + + + + Use of WOW64 bypass is not permitted. + + + + + Allow injection without a strong name (e.g. no GAC registration). This option requires that the full path to injected assembly be provided + + + + + Provides all things related to library injection, inter-process-communication (IPC) and + helper routines for common remote tasks. + + + The following demonstrates how to use and : + + using System; + using System.Collections.Generic; + using System.Runtime.Remoting; + using System.Text; + using System.IO; + using EasyHook; + + namespace FileMon + { + public class FileMonInterface : MarshalByRefObject + { + public void IsInstalled(Int32 InClientPID) + { + Console.WriteLine("FileMon has been installed in target {0}.\r\n", InClientPID); + } + + public void OnCreateFile(Int32 InClientPID, String[] InFileNames) + { + for (int i = 0; i < InFileNames.Length; i++) + { + Console.WriteLine(InFileNames[i]); + } + } + + public void ReportException(Exception InInfo) + { + Console.WriteLine("The target process has reported an error:\r\n" + InInfo.ToString()); + } + + public void Ping() + { + } + } + + class Program + { + static String ChannelName = null; + + static void Main(string[] args) + { + try + { + Config.Register( + "A FileMon like demo application.", + "FileMon.exe", + "FileMonInject.dll"); + + RemoteHooking.IpcCreateServer<FileMonInterface>(ref ChannelName, WellKnownObjectMode.SingleCall); + + RemoteHooking.Inject( + Int32.Parse(args[0]), + "FileMonInject.dll", + "FileMonInject.dll", + ChannelName); + + Console.ReadLine(); + } + catch (Exception ExtInfo) + { + Console.WriteLine("There was an error while connecting to target:\r\n{0}", ExtInfo.ToString()); + } + } + } + } + + + + + + A context contains some basic information about the environment + in which your library main method has been invoked. You will always + get an instance of this interface in your library Run method + and your library constructor. + + + + + Returns the process ID of the host that has injected this library. + + + + + If the library was injected with , this will + finally start the current process. You should call this method in the library + Run() method after all hooks have been installed. + + + + + true if we are running with administrative privileges, false otherwise. + + + Due to UAC on Windows Vista, this property in general will be false even if the user is in + the builtin-admin group. As you can't hook without administrator privileges you + should just set the UAC level of your application to requireAdministrator. + + + + + Creates a globally reachable, managed IPC-Port. + + + Because it is something tricky to get a port working for any constellation of + target processes, I decided to write a proper wrapper method. Just keep the returned + alive, by adding it to a global list or static variable, + as long as you want to have the IPC port open. + + + A class derived from which provides the + method implementations this server should expose. + + + if you want to handle each call in an new + object instance, otherwise. The latter will implicitly + allow you to use "static" remote variables. + + + Either null to let the method generate a random channel name to be passed to + or a predefined one. If you pass a value unequal to + null, you shall also specify all SIDs that are allowed to connect to your channel! + + Provide a TRemoteObject object to be made available as a well known type on the server end of the channel. + + If no SID is specified, all authenticated users will be allowed to access the server + channel by default. You must specify an SID if is unequal to null. + + + An that shall be keept alive until the server is not needed anymore. + + + If a predefined channel name is being used, you are required to specify a list of well known SIDs + which are allowed to access the newly created server. + + + The given channel name is already in use. + + + + + Creates a globally reachable, managed IPC-Port. + + + Because it is something tricky to get a port working for any constellation of + target processes, I decided to write a proper wrapper method. Just keep the returned + alive, by adding it to a global list or static variable, + as long as you want to have the IPC port open. + + + A class derived from which provides the + method implementations this server should expose. + + + if you want to handle each call in an new + object instance, otherwise. The latter will implicitly + allow you to use "static" remote variables. + + + Either null to let the method generate a random channel name to be passed to + or a predefined one. If you pass a value unequal to + null, you shall also specify all SIDs that are allowed to connect to your channel! + + + If no SID is specified, all authenticated users will be allowed to access the server + channel by default. You must specify an SID if is unequal to null. + + + An that shall be keept alive until the server is not needed anymore. + + + If a predefined channel name is being used, you are required to specify a list of well known SIDs + which are allowed to access the newly created server. + + + The given channel name is already in use. + + + + + Connects to a globally reachable, managed IPC port. + + + All requests have to be made through the returned object instance. + Please note that even if you might think that managed IPC is quiet slow, + this is not usually the case. Internally a mechanism is being used to + directly continue execution within the server process, so that even if + your thread does nothing while dispatching the request, no CPU time is lost, + because the server thread seemlessly takes over exection. And to be true, + the rare conditions in which you will need high-speed IPC ports are not + worth the effort to break with NET's exciting IPC capabilities. In times + of Quad-Cores, managed marshalling isn't that slow anymore. + + + An object derived from which provides the + method implementations this server should provide. Note that only calls through the + returned object instance will be redirected to the server process! ATTENTION: Static fields + and members are always processed locally only... + + + The name of the channel to connect to, usually obtained with . + + + An remote object instance which member accesses will be redirected to the server. + + + Unable to create remote object or invalid channel name... + + + + + Injects the given user library into the target process. No memory leaks are left + in the target, even if injection fails for unknown reasons. + + + + There are two possible user library paths. The first one should map to + a 32-bit library, and the second one should map to 64-bit library. If your + code has been compiled for "AnyCPU", like it's the default for C#, you may + even specify one library path for both parameters. Please note that your + library including all of it's dependencies must be registered in the + Global Assembly Cache (GAC). Refer to for more + information about how to get them there. + + If you inject a library into any target process please keep in mind that + your working directory will be switched. EasyHook will automatically add + the directory of the injecting application as first directory of the target's PATH environment + variable. So make sure that all required dependencies are either located + within the injecting application's directory, a system directory or any directory already + contained in the PATH variable. + + EasyHook provides extensive error information during injection. Any kind of failure is + being caught and thrown as an exception by this method. If for example your library + does not expose a class implementing , an exception will be + raised in the target process during injection. The exception will be redirected to this method + and you can catch it in a try-catch statement around . + + You will often have to pass parameters to your injected library. + names are common, but also any other kind of data can be passed. You may add a custom list + of objects marked with the . All common NET classes + will be serializable by default, but if you are using your own classes you might have to provide + serialization by yourself. The custom parameter list will be passed unchanged to your injected + library entry points Run and construcotr. Verify that all required type libraries to deserialize + your parameter list are either registered in the GAC or otherwise accessible to your library by being in the same path. + + It is supported to inject code into 64-bit processes from within 32-bit processes and + vice versa. It is also supported to inject code into other terminal sessions. Of course + this will require additional processes and services to be created, but as they are managed + internally, you won't notice them! There will be some delay when injecting the first library. + + Even if it would technically be possible to inject a library for debugging purposes into + the current process, it will throw an exception. This is because it heavily depends on + your injected library whether the current process will be damaged. Any kind of communication + may lead into deadlocks if you hook the wrong APIs. Just use the capability of Visual Studio + to debug more than one process simultanously which will allow you to debug your library + as if it would be injected into the current process without running into any side-effects. + + + The given exceptions are those which are thrown by EasyHook code. The NET framework might throw + any other exception not listed here. Don't rely on the exception type. If you passed valid parameters, + the only exceptions you should explicitly check for are and + . All others + shall be caught and treated as bad environment or invalid parameter error. + + + + The target process ID. + + + A valid combination of options. + + + A partially qualified assembly name or a relative/absolute file path of the 32-bit version of your library. + For example "MyAssembly, PublicKeyToken=248973975895496" or ".\Assemblies\MyAssembly.dll". + + + A partially qualified assembly name or a relative/absolute file path of the 64-bit version of your library. + For example "MyAssembly, PublicKeyToken=248973975895496" or ".\Assemblies\MyAssembly.dll". + + + A serializable list of parameters being passed to your library entry points Run() and + constructor (see ). + + + It is unstable to inject libraries into the same process. This exception is disabled in DEBUG mode. + + + Access to target process denied or the current user is not an administrator. + + + The given process does not exist or unable to serialize/deserialize one or more pass thru arguments. + + + The given user library could not be found. + + + Unable to allocate unmanaged memory in current or target process. + + + It is not supported to inject into the target process. This is common on Windows Vista and Server 2008. + + + Unable to wait for user library to be initialized. Check your library's constructor. + + + The given user library does not export a class implementing the interface. + + + + + See for more information. + + + The target process ID. + + + A partially qualified assembly name or a relative/absolute file path of the 32-bit version of your library. + For example "MyAssembly, PublicKeyToken=248973975895496" or ".\Assemblies\MyAssembly.dll". + + + A partially qualified assembly name or a relative/absolute file path of the 64-bit version of your library. + For example "MyAssembly, PublicKeyToken=248973975895496" or ".\Assemblies\MyAssembly.dll". + + + A serializable list of parameters being passed to your library entry points Run() and + constructor (see ). + + + + + Determines if the target process is 64-bit or not. This will work only + if the current process has PROCESS_QUERY_INFORMATION access to the target. + + + A typical mistake is to enumerate processes under system privileges and + calling this method later when required. This won't work in most cases because + you'll also need system privileges to run this method on processes in other sessions! + + The PID of the target process. + true if the given process is 64-bit, false otherwise. + + The given process is not accessible. + + + The given process does not exist. + + + + + Returns the of the user the target process belongs to. + You need PROCESS_QUERY_INFORMATION access to the target. + + An accessible target process ID. + The identity of the target owner. + + The given process is not accessible. + + + The given process does not exist. + + + + + Returns the current native system process ID. + + The native system process ID. + + + + Returns the current native system thread ID. + + + Even if currently each dedicated managed + thread (not a thread from a ) exactly maps to one native + system thread, this behavior may change in future versions. + If you would like to have unintercepted threads, you should make sure that they are + dedicated ones, e.g. derived from . + + The native system thread ID. + + + + Will execute the given static method under system privileges. + + + + For some tasks it is necessary to have unrestricted access to the windows API. + For example if you want to enumerate all running processes in all sessions. But + keep in mind that you only can access these information within the given static + method and only if it is called through this service. + + To accomplish this task, your assembly is loaded into a system service which + executes the given static method in a remoted manner. This implies that the + return type shall be marked with . All + handles or other process specific things obtained in the service, will be invalid + in your application after the call is completed! Also the service will use + a new instance of your class, so you should only rely on the given parameters + and avoid using any external variables.. Your method shall be threaded as isolated! + + The next thing to mention is that all assemblies required for executing the method + shall either be in the GAC or in the directory of the related EasyHook-Library. + Otherwise the service won't be able to use your assembly! + + All unhandled exceptions will be rethrown by the local . + + + A class containing the given static method. + A public static method exposed by the given public class. + A list of serializable parameters being passed to your static method. + The same value your method is returning or null if a void method is called. + + The current user is not an administrator. + + + +private static void OnProcessUpdate(Object InCallback) +{ + ProcessTimer.Change(Timeout.Infinite, Timeout.Infinite); + + try + { + ProcessInfo[] Array = (ProcessInfo[])RemoteHooking.ExecuteAsService<Form1>("EnumProcesses"); + SortedDictionary<String, ProcessInfo> Result = new SortedDictionary<string, ProcessInfo>(); + + // sort by name... + lock (ProcessList) + { + ActivePIDList.Clear(); + + for (int i = 0; i < Array.Length; i++) + { + Result.Add(System.IO.Path.GetFileName(Array[i].FileName) + "____" + i, Array[i]); + + ActivePIDList.Add(Array[i].Id); + } + + Result.Values.CopyTo(Array, 0); + + ProcessList.Clear(); + + ProcessList.AddRange(Array); + } + } + catch (AccessViolationException) + { + MessageBox.Show("This is an administrative task!", "Permission denied...", MessageBoxButtons.OK); + + Process.GetCurrentProcess().Kill(); + } + finally + { + ProcessTimer.Change(5000, 5000); + } +} + +[Serializable] +public class ProcessInfo +{ + public String FileName; + public Int32 Id; + public Boolean Is64Bit; + public String User; +} + +public static ProcessInfo[] EnumProcesses() +{ + List<ProcessInfo> Result = new List<ProcessInfo>(); + Process[] ProcList = Process.GetProcesses(); + + for (int i = 0; i < ProcList.Length; i++) + { + Process Proc = ProcList[i]; + + try + { + ProcessInfo Info = new ProcessInfo(); + + Info.FileName = Proc.MainModule.FileName; + Info.Id = Proc.Id; + Info.Is64Bit = RemoteHooking.IsX64Process(Proc.Id); + Info.User = RemoteHooking.GetProcessIdentity(Proc.Id).Name; + + Result.Add(Info); + } + catch + { + } + } + + return Result.ToArray(); +} + + + + + + Creates a new process which is started suspended until you call + from within your injected library Run() method. This allows you to hook the target + BEFORE any of its usual code is executed. In situations where a target has debugging and + hook preventions, you will get a chance to block those mechanisms for example... + + + + Please note that this method might fail when injecting into managed processes, especially + when the target is using the CLR hosting API and takes advantage of AppDomains. For example, + the Internet Explorer won't be hookable with this method. In such a case your only options + are either to hook the target with the unmanaged API or to hook it after (non-supended) creation + with the usual method. + + + See for more information. The exceptions listed here are additional + to the ones listed for . + + + + A relative or absolute path to the desired executable. + + + Optional command line parameters for process creation. + + + Internally CREATE_SUSPENDED is already passed to CreateProcess(). With this + parameter you can add more flags like DETACHED_PROCESS, CREATE_NEW_CONSOLE or + whatever! + + + A valid combination of options. + + + A partially qualified assembly name or a relative/absolute file path of the 32-bit version of your library. + For example "MyAssembly, PublicKeyToken=248973975895496" or ".\Assemblies\\MyAssembly.dll". + + + A partially qualified assembly name or a relative/absolute file path of the 64-bit version of your library. + For example "MyAssembly, PublicKeyToken=248973975895496" or ".\Assemblies\\MyAssembly.dll". + + + The process ID of the newly created process. + + + A serializable list of parameters being passed to your library entry points Run() and + constructor (see ). + + + The given EXE path could not be found. + + + + + Creates a new process which is started suspended until you call + from within your injected library Run() method. This allows you to hook the target + BEFORE any of its usual code is executed. In situations where a target has debugging and + hook preventions, you will get a chance to block those mechanisms for example... + + + + Please note that this method might fail when injecting into managed processes, especially + when the target is using the CLR hosting API and takes advantage of AppDomains. For example, + the Internet Explorer won't be hookable with this method. In such a case your only options + are either to hook the target with the unmanaged API or to hook it after (non-supended) creation + with the usual method. + + + See for more information. The exceptions listed here are additional + to the ones listed for . + + + + A relative or absolute path to the desired executable. + + + Optional command line parameters for process creation. + + + Internally CREATE_SUSPENDED is already passed to CreateProcess(). With this + parameter you can add more flags like DETACHED_PROCESS, CREATE_NEW_CONSOLE or + whatever! + + + A partially qualified assembly name or a relative/absolute file path of the 32-bit version of your library. + For example "MyAssembly, PublicKeyToken=248973975895496" or ".\Assemblies\\MyAssembly.dll". + + + A partially qualified assembly name or a relative/absolute file path of the 64-bit version of your library. + For example "MyAssembly, PublicKeyToken=248973975895496" or ".\Assemblies\\MyAssembly.dll". + + + The process ID of the newly created process. + + + A serializable list of parameters being passed to your library entry points Run() and + constructor (see ). + + + The given EXE path could not be found. + + + + + Returns true if the operating system is 64-Bit Windows, false otherwise. + + + + + Installs the EasyHook support driver. After this step you may use + to install your kernel mode hooking component. + + + + + Loads the given driver into the kernel and immediately marks it for deletion. + The installed driver will be registered with the service control manager under the + you specify. + Please note that you should use to find out which + driver to load. Even if your process is running on 32-Bit this does not mean, + that the OS kernel is running on 32-Bit! + + + + + + + The IAssemblyCache interface is the top-level interface that provides access to the GAC. + + + + + Represents an assembly name. An assembly name includes a predetermined set of name-value pairs. The assembly name is described in detail in the .NET Framework SDK. + + + + + The IAssemblyName::SetProperty method adds a name-value pair to the assembly name, or, if a name-value pair with the same name already exists, modifies or deletes the value of a name-value pair. + + The ID that represents the name part of the name-value pair that is to be added or to be modified. Valid property IDs are defined in the ASM_NAME enumeration. + A pointer to a buffer that contains the value of the property. + The length of the pvProperty buffer in bytes. If cbProperty is zero, the name-value pair is removed from the assembly name. + + + + + The IAssemblyName::GetProperty method retrieves the value of a name-value pair in the assembly name that specifies the name. + + The ID that represents the name of the name-value pair whose value is to be retrieved. Specified property IDs are defined in the ASM_NAME enumeration. + A pointer to a buffer that is to contain the value of the property. + The length of the pvProperty buffer, in bytes. + + + + + The IAssemblyName::Finalize method freezes an assembly name. Additional calls to IAssemblyName::SetProperty are unsuccessful after this method has been called. + + + + + + The IAssemblyName::GetDisplayName method returns a string representation of the assembly name. + + A pointer to a buffer that is to contain the display name. The display name is returned in Unicode. + The size of the buffer in characters (on input). The length of the returned display name (on return). + One or more of the bits defined in the ASM_DISPLAY_FLAGS enumeration: + + + + + Enumerates the assemblies in the GAC. + + + + + Enumerates the assemblies in the GAC. + + Must be null + Pointer to a memory location that is to receive the interface pointer to the assembly name of the next assembly that is enumerated. + Must be zero. + + + + + The IInstallReferenceItem interface represents a reference that has been set on an assembly in the GAC. Instances of IInstallReferenceIteam are returned by the interface. + + + + + Returns a FUSION_INSTALL_REFERENCE structure, . + + A pointer to a FUSION_INSTALL_REFERENCE structure. + The memory is allocated by the GetReference method and is freed when + is released. Callers must not hold a reference to this + buffer after the IInstallReferenceItem object is released. + To avoid allocation issues with the interop layer, the is not marshaled directly - therefore use of out IntPtr + + + + + + + The IInstllReferenceEnum interface enumerates all references that are set on an assembly in the GAC. + Note: references that belong to the assembly are locked for changes while those references are being enumerated. + + + + + Returns the next reference information for an assembly + + Pointer to a memory location that receives the IInstallReferenceItem pointer. + Must be zero. + Must be null. + Return values are as follows: S_OK: - The next item is returned successfully. S_FALSE: - No more items. + + + + Install assembly commit flags (mutually exclusive) + + + + + If the assembly is already installed in the gAC and the file version numbers of the assembly being installed are the same or later, the files are replaced. + + + + + The files of an existing assembly are overwritten regardless of their version number. + + + + + The uninstall action taken + + + + + Unknown + + + + + The assembly files have been removed from the GAC + + + + + An application is using the assembly. + + + + + The assembly does not exist in the GAC + + + + + Not used. + + + + + The assembly has not been removed from the GAC because another application reference exists. + + + + + The that was specified is not found in the GAC. + + + + + The ASM_CACHE_FLAGS enumeration used in . + + + + + Enumerates the cache of precompiled assemblies by using Ngen.exe. + + + + + Enumerates the GAC. + + + + + Enumerates the assemblies that have been downloaded on-demand or that have been shadow-copied. + + + + + The CREATE_ASM_NAME_OBJ_FLAGS enumeration, used in + + + + + If this flag is specified, the szAssemblyName parameter is a full assembly name and is parsed to the individual properties. If the flag is not specified, szAssemblyName is the "Name" portion of the assembly name. + + + + + If this flag is specified, certain properties, such as processor architecture, are set to their default values. + + + + + The ASM_NAME enumeration property ID describes the valid names of the name-value pairs in an assembly name. See the .NET Framework SDK for a description of these properties. + + + + + ASM_DISPLAY_FLAGS: . + + + + + Includes the version number as part of the display name. + + + + + Includes the culture. + + + + + Includes the public key token. + + + + + Includes the public key. + + + + + Includes the custom part of the assembly name. + + + + + Includes the processor architecture. + + + + + Includes the language ID. + + + + + Include all attributes. + + + + + The FUSION_INSTALL_REFERENCE structure represents a reference that is made when an application has installed an assembly in the GAC. + + + + + Create a new InstallReference + + Possible values for the guidScheme field can be one of the following (): + + + FUSION_REFCOUNT_MSI_GUID + The assembly is referenced by an application that has been installed by using Windows Installer. The szIdentifier field is set to MSI, and szNonCannonicalData is set to Windows Installer. This scheme must only be used by Windows Installer itself. + + + FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID + The assembly is referenced by an application that appears in Add/Remove Programs. The szIdentifier field is the token that is used to register the application with Add/Remove programs. + + + FUSION_REFCOUNT_FILEPATH_GUID + The assembly is referenced by an application that is represented by a file in the file system. The szIdentifier field is the path to this file. + + + FUSION_REFCOUNT_OPAQUE_STRING_GUID + The assembly is referenced by an application that is only represented by an opaque string. The szIdentifier is this opaque string. The GAC does not perform existence checking for opaque references when you remove this. + + + + A unique string that identifies the application that installed the assembly. + A string that is only understood by the entity that adds the reference. The GAC only stores this string. + + + + The entity that adds the reference. + + + + + A unique string that identifies the application that installed the assembly. + + + + + A string that is only understood by the entity that adds the reference. The GAC only stores this string. + + + + + The size of the structure in bytes. + + + + + Reserved, must be zero. + + + + + Possible values for the guidScheme for . + + + + + Ensures that the provided Guid is one of the valid reference guids defined in (excluding and ). + + The Guid to validate + True if the Guid is , , or . + + + + FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID - The assembly is referenced by an application that appears in Add/Remove Programs. The szIdentifier field is the token that is used to register the application with Add/Remove programs. + + + + + FUSION_REFCOUNT_FILEPATH_GUID - The assembly is referenced by an application that is represented by a file in the file system. The szIdentifier field is the path to this file. + + + + + FUSION_REFCOUNT_OPAQUE_STRING_GUID - The assembly is referenced by an application that is only represented by an opaque string. The szIdentifier is this opaque string. The GAC does not perform existence checking for opaque references when you remove this. + + + + + This GUID cannot be used for installing into GAC. FUSION_REFCOUNT_MSI_GUID - The assembly is referenced by an application that has been installed by using Windows Installer. The szIdentifier field is set to MSI, and szNonCannonicalData is set to Windows Installer. This scheme must only be used by Windows Installer itself. + + + + + This GUID cannot be used for installing into GAC. + + + + + Provides methods to install or remove assemblies from the Global Assembly Cache (GAC) + + + + + Install assembly into GAC + + + + + + + + Install the provided assemblies to GAC + + + + + + + + Uninstall an assembly from the GAC. has to be fully specified name. E.g., for v1.0/v1.1 assemblies, it should be "name, Version=xx, Culture=xx, PublicKeyToken=xx". For v2.0+ assemblies, it should be "name, Version=xx, Culture=xx, PublicKeyToken=xx, ProcessorArchitecture=xx". If is not fully specified, a random matching assembly could be uninstalled. + + + + + + + + Uninstall the provided assembly names from the GAC. have to be fully specified names. E.g., for v1.0/v1.1 assemblies, it should be "name, Version=xx, Culture=xx, PublicKeyToken=xx". For v2.0+ assemblies, it should be "name, Version=xx, Culture=xx, PublicKeyToken=xx, ProcessorArchitecture=xx". If is not fully specified, a random matching assembly could be uninstalled. + + + + + + + + Query an assembly in the GAC. has to be a fully specified name. E.g., for v1.0/v1.1 assemblies, it should be "name, Version=xx, Culture=xx, PublicKeyToken=xx". For v2.0+ assemblies, it should be "name, Version=xx, Culture=xx, PublicKeyToken=xx, ProcessorArchitecture=xx". If is not fully specified, a random matching assembly may be found. + + + + + + + Enumerate assemblies within the Global Assembly Cache (GAC) + + + + + Enumerate assemblies in the GAC + + null means enumerate all the assemblies + + + + Get the next assembly within the enumerator. + + + + + + Enumerate referenced assemblies installed in the global assembly cache. + + + + + Create enumerator for provided assembly name + + has to be a fully specified name. E.g., for v1.0/v1.1 assemblies, it should be "name, Version=xx, Culture=xx, PublicKeyToken=xx". For v2.0+ assemblies, it should be "name, Version=xx, Culture=xx, PublicKeyToken=xx, ProcessorArchitecture=xx". + + + + Get next reference + + + + + + Fusion DllImports + + + + + To obtain an instance of the API, call the CreateAssemblyEnum API + + Pointer to a memory location that contains the IAssemblyEnum pointer. + Must be null. + An assembly name that is used to filter the enumeration. Can be null to enumerate all assemblies in the GAC. + Exactly one item from the ASM_CACHE_FLAGS enumeration, . + Must be NULL. + + + + + An instance of is obtained by calling the CreateAssemblyNameObject API + + Pointer to a memory location that receives the IAssemblyName pointer that is created. + A string representation of the assembly name or of a full assembly reference that is determined by dwFlags. The string representation can be null. + Zero or more of the bits that are defined in the CREATE_ASM_NAME_OBJ_FLAGS enumeration, . + Must be null. + + + + + To obtain an instance of the API, call the CreateAssemblyCache API + + Pointer to return + Must be zero. + + + + + To obtain an instance of the API, call the CreateInstallReferenceEnum API + + A pointer to a memory location that receives the IInstallReferenceEnum pointer. + The assembly name for which the references are enumerated. + Must be zero. + Must be null. + + + + diff --git a/RenderHookAPI/bin/EasyHook32.dll b/RenderHookAPI/bin/EasyHook32.dll new file mode 100644 index 0000000000000000000000000000000000000000..a5be55924b71dcd2d5958e07559a05a6773e1015 GIT binary patch literal 268288 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�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

    uM5OjpEU!JT{(h)$tW;l`olH)p!C6g*tm# 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

    + The assembly is a managed Direct3D Compiler API. + + dd607340 + D3DCompiler + D3DCompiler + + + + Shader compilation results. + + + + + Initializes a new instance of the class. + + The bytecode. + The result code. + The message. + + + + Performs an implicit conversion from to . + + The input. + + The result of the conversion. + + + + + Performs an implicit conversion from to byte array + + The input. + + The result of the conversion. + + + + +

    [This documentation is preliminary and is subject to change.]

    A function-linking-graph interface is used for constructing shaders that consist of a sequence of precompiled function calls that pass values to each other .

    +
    + +

    To get a function-linking-graph interface, call .

    You can use the function-linking-graph (FLG) interface methods to construct shaders that consist of a sequence of precompiled function calls that pass values to each other. You don't need to write HLSL and then call the HLSL compiler. Instead, the shader structure is specified programmatically via a C++ API. FLG nodes represent input and output signatures and invocations of precompiled library functions. The order of registering the function-call nodes defines the sequence of invocations. You must specify the input signature node first and the output signature node last. FLG edges define how values are passed from one node to another. The data types of passed values must be the same; there is no implicit type conversion. Shape and swizzling rules follow the HLSL behavior. Values can only be passed forward in this sequence.

    +
    + + dn280535 + ID3D11FunctionLinkingGraph + ID3D11FunctionLinkingGraph + +

    A function-linking-graph interface is used for constructing shaders that consist of a sequence of precompiled function calls that pass values to each other.

    Note??This interface is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    + +

    To get a function-linking-graph interface, call .

    You can use the function-linking-graph (FLG) interface methods to construct shaders that consist of a sequence of precompiled function calls that pass values to each other. You don't need to write HLSL and then call the HLSL compiler. Instead, the shader structure is specified programmatically via a C++ API. FLG nodes represent input and output signatures and invocations of precompiled library functions. The order of registering the function-call nodes defines the sequence of invocations. You must specify the input signature node first and the output signature node last. FLG edges define how values are passed from one node to another. The data types of passed values must be the same; there is no implicit type conversion. Shape and swizzling rules follow the HLSL behavior. Values can only be passed forward in this sequence.

    Note?? requires the D3dcompiler_47.dll or a later version of the DLL.? +
    + + dn280535 + ID3D11FunctionLinkingGraph + ID3D11FunctionLinkingGraph +
    + + + Initializes a new instance of . + + + + +

    [This documentation is preliminary and is subject to change.]

    Sets the input signature of the function-linking-graph.

    +
    +

    #G*=R~GWUqr|}JYmCX5*m3F_^^`)+ zj5+bxQJ$vlz1BxxNm0E>JEX+}mEpvBoVZ^#QTi7C>=?3?+*Cr1IFehVP9^Q2wo$!w zVq$HHIUZ*;?phZs#Xz+)lk{v1n^q}5+gFbt=_;uk<)v8q29k2L-^J2`Y4Ac%9DeP>nF9%8Tz7obQp>KA`rxDH9EGYe}G|JW8{{z~g1#a`kQH!AhkOqBI`&l|63#!D@GQAv3KpTj)_sPc7;>^ zEti>QxiYJ8OIJF#tn7;~(WhR>pYOgjwCWXX1U){S^^%--E;VV`Z^vNoUmp#))R?v? zpVJ7b`Gxe{X486h9e5|Dv#Tf7jA}tE5Usn8A4?@ye>qfxajd@U9gTfhaRE!zqVSA5CYUiWpGxrWu4+F~; zx4O!%IYPTXJ5Flt+uE!iOtDy5ZZG+`x!cHHsmRvM_i z$??+06gm!Kb3>D=lJ&PTN7G&X&j7Op*3o4yE;Dccyi(z zY%ncdiEe3ay{uP{bRuHc40Z)!cLnNSTA^wEP}&D*bdhf9v?u-zv_|eUvzdCP&RBTQ zFtO}tVe3-khx&wFAM1O0TB+!iqLTfc?cMQ=C7sjvF=KtVdl#*x?E2fvWA}9$8D0?y zHibBqCa%5~s?l)yq7K0nb!ipJ>Sgx9n**)i z>e`xejk#sF%RU3aB76M($0?~4?_s7gZfnaGx*9VI5}VmH6eu)#^OE>@XTbiUt}$Pj zp3_GH_~}dM4fGQIGVA}a`i!Mb*T4Rg_uT!|;%B|L3=iM&*3%c(K0fp{8z-$e_@j<~ z{?B~t>d##M)S}uqZr-x_YcpEk{?N1Izy0`=qo&+<(!;eY{yhF{&5!B{(sZplbdIU> z<+5_kX>Ds~gx35Mp9{pHXcJS>Q}~KwdsAlFw8rLEYHQ+GF8jjfpG<#kYW%D3e{ADz z1L@U&r(aGp^rL1u_zwj z`ufFl;qysXqtC766t6AB{Zl*f_!X~tB&YV~I=7Yt1KSuP=)s9oPcdH(B zl2BT`Y9(dsV4$?i$CAG34j!kZCt3;R%;>DKsDGZis-PKOI%<2TMqJtK+C--}eWgBL zg1Ftv_YWt^^~Cd1sh($=(bKMk2A>(@7SkF<^#2f=JEdLk$vmQ=4ShWZQX&=(X6R<(VQKx)yiW^_w20KH@|p98B9L4 zlFkoQ8(NFok=SbUKl>k$G79JUqH$+1JyOeQeXG#_Y3mLwpVkdlA|d#?H_-*wv_Hc)*@0_~@CBCGXo z8?B+@5_pNq^JFxz1d{GJQ72`_!nNrco z)8J((%}Kg`p%Q4W(RIgxN-=Q0ee0v|Y-aZ&cDx)Y#Rjwf>3hzly_zJ^7^`|y%h|n5 zyzWqXrPFqmZlHAfOVW4NQj5jcrP`vg!Pb-7>-nVjTsygebf^3zu)lnza-Ud^axH!S zHN>;6h4PVoI(H}GM*U7ReaeoRD!1BGW6X5s1nFB`>x0ktC3y!b^YPcARKU zBw6(vDE;#BRcXb0{lU|dR+g?L4yHe`UJrCnLR=@uYa-Vi^0#*`y>epjMHKcxc2_uO z86OdD*L9Ww%b~TN`o3KsEHyT*hP10b(OMvuMf=gQXtEv4?MQChtkgaO>2;y3%_|4F zPGkGd@ueLoz5aUrpPYTnVD!H1;UA#?-!Ly4JX8HK9F(#!Tg;meW2?Qp>G;?XA*C z4to`^B*|sz6d#i2dkywhD5K;0H@~*CbMZ7j*PKaf?;o8e*fRwA4_xn(Ml~S`bi&jB z3W;q+^$(qf>8haJg`8MFO4p4~obK`3q3ds@>(|dWo#U@*mtXT4C>6DY_C}IVD{I}i zWv_eKJ)RvA2DtevLd)A#zEJ*UW_|GE~jG}4Gz z6Ep(ogw~$cmgb^LLRy_IpA9s^S&bOzI@&<{CCy!>Jzw8Fm&T8Q>O zeN(VCpgt3ikjJToW-L}T3{xidg`bFFl_S(hZvYfd7O6?lwuNp1gJ)#zu zF6wHMJ&hQ+wM(_~pOxad+hcIKq(kwQ49WRFFPXHrG@oi$ZC70Cf41hVjy+#VbOo(+ zrCYjc$6mGjiS$Y5q&mTmdrW+Kqq(c0;H9;q7X$=vdMr#yN4z~4=Ux!)U8%Xc_o>P>U{bG|tX`QCMoX%LD-*`~!PZu-B z4Rq#zaU^X#8$EZ=8AyJu2JCn^i@i{Tsk<&*)KBc*|M{gqP}(}pU1&60Gl1&%M5DDG z&j!2VW?NeS{>~iR(gj`JdKqj7@Ob1L zsEsre+cjU@7s~6{o_-BhyPA`2sqENoHOAJsdSU!i?^cP`S59;)G_$OAZO(m9glg*Q zDswytl;a9qWmkvp*lXmApw7)a#M9B3DfxAF6)HPhD*4K{`8M`({$+7>&G*(0B~w}G ztmI>Qoy}Z`tZZdxa!n$!?={txqq0h1cG{LYRmlN( zZka7jCUsn!Qx7fC8R>y)Q#_tyih)Ra>_@~Jo2UG?$zUY4g+l2K*L^M)O1 z`|L>T>q#SihR2$<+fyE~hU<>{eUG{on?CGSyyY>s;vb)LE1DWPN6{;TcfKgL*F4O#m0&JNfh<@KR)V!) z1K0$%fbC!xxQ*v&_rm+ZL2w8h21meAa11!_=lN7n0k*X8Y$`k)i~tS9uY^Z}(O?Xy z0u#X`Fd1wmPBmNuYC#>S2Mu5@m>`0 z)GVuuJTnCRv>GckSyTNjB5fPSSxCFmT!B}uP7zM5)!ek;} zgn2o*8!YH*Q|Xq*u1uk_xs#h$Y_!T|ZhYZRcO|+&?bVnY zJbsjZd33(xZR*s-@6EqA^>XiC`K;&zr?Q~i-pEp!YU2@LZn|%0oUd$e%&L6p*2?D) zp*&2f^pzzs%F;NI7|w#`&g`;5Dr!Mjs=x%!0|J^1X}jsQ&Vtzu4Kqt^*W21rTSoSQ z6O;~1KW)XQWpoyFws*8uN;mlCvdUhn46Es74R@U1U9T+jC2o6TN8>`~1i#ND>Cfqq?Clg>BuM6T_oPUTc}-D#P|e7?-5 zvawJ(x{u$KT&{5$<&T2aw$asc&8^GIBH=6l=v=zeUi7c5)56dU3DKQh3iY4=!e^K# zqu=Z~HFF-gt?J0!zkRoQ_03`Xz0PHC)Vw|Int9n=r;fw(^U{s^Wm=5Ro7&ZuNzLm> z7g~BIj%CG$M|xh*q$}r5Cxi~tdA2yKFD2V|BtHW`Da!!As*@8H+gWGCULJ zk-NggYlwgIQ`l;tc=h~kYG`N!eQ(=U%B zf5}mvXB_7O);f}XTUj2lU(8Ck@(ZrX=UY4U;n-R-R=$FnpQ~LTZ@8|#0>-+kbmqU4f?S>Qk=V$fx?_bW}-Q3r|zx)q1 zl*;yzGIRfMr{7izcV3yfe>m^l_pSS*!am(jQZB|}R`F($T-*n3Tzg6K@{1zx2;{SU_yIWBQH1-6zO?tF67Aj2n zPvNT>d&IR7%U|}G>v50kw}1JopR)M|@C!g3ZgUhrw*Tp4Hr(~_Eg*I;FUP`9xfP3n z@*T*3GJDbKpjrW<-}=o~c3ESYV?T|%!Xe79y3pKm471#ZKGwHR z{p4uAkU9R{_V7)2$~@xZo+o;+Cc~&1W$tRf!~7DK1tr-N-z^NgC6iE@Lup3*adzJj)JqE@SID5 zG}Lo^C*hQTG5l0#sB@Zgx>Np@@w1$>opYSwd{^RJ=f%zlzA^CS5gvQ?SxdUyr*$IMQ*^YFk;ovE%&dU{W`GgqiFN12_u zW!2SpTwhy1Wp4eHTWe>|n$s|4*0kyK=T}!_pFi`aDc4V*KYecf&9fWk*UX$feOklK zv+t;`j(uuwo-@C8`jndKvrBHX8X~7T)z#H^I`eCq7EUSf+;wYBx~Xg7!gQ{>$~e}f z2XI8x=(e7jsj18CeX!M&OnAKPEwjh@*kBEvcC|dKu{~Wq?n)D9W`0U{V_QZW^(fbw z`RV4wH6{D?jm`Fst!bSdY()x@n|Tx@lZhWxFo_W~TKL9cInTiHRuD_tvz3D(d=vA6TgF*WH*g zX+>((z)6qJ+Lhkybe?0JycB(QYxI;%N6OxnR6PMzj$P*z(v6uytL@FUj!c!!Zl!vo zj?>V&INf2BvMEH57*&rq$w#$alcNT6aWJF7bGou-V6Z-vdNvI)CDqOjp7S4VKvgt3 z&h5SVE=oWy_U1bq07grK*otzFqo%*=5*z`=8#IKV$bnPvyegl-shO22<1+5 z%t_gx9@9A7i9Dn7%}M9F+nN~&=se|Bov$8mo)gP%)mUtQPhj5lE!Wv$#%Jrc;4_|6 zx!ZL%l(`+k&B1MXS=K-4zL&Kmwb}>8C(Re1T(;$AOr3L z_k+#gtKhrf*WmBq^rt*$1h@v&fq9?+R)Tfl6JR^o4Gw@KAo*#}83smzYVdc;&$~tf(ptx8e9X;{+#Fh zVmmT{Uz7Jf@C~pX`~|lp{s4zLIO6dVD`&mt!n z2`&TIfEi#mxEu6!#A)nD;61V}}4RRm^?*I>h$AEt8k#i-`@9)TX3VG`H zLOr=>N4l~xz+ryZ5Ev>&v)|Ja~yc$oFD63q{?uxCKy|ZG}`y!_Zx{lg&3YwYu$(Q`91{h7Uoj?;1+KXU9k zhZ8M5F52T%CuTRc$nKXeM(4x5iw2=oi;Hpqy>xMvDNhiv^Uc zpW8=+fu7v?oqsbUUtG&e0vl<<_!(`ve8HKMn9U{SSYMbfa?6}tZu&wpG}%JCEh6=Jz;4cCZeYP5ZN0#J2S26Om@QfIUSAJd}}9Zz0|Gg%4VpULOQCo zUkA5SSLwbYIClooh#h6J5jpc+?ddqrE@>dua$94jEA2cR}62_J0oSMwgMKb9QQa)8RU#81rjqY)t zJdLJ|#QUOe)i$bSVm%VKjme0+f9;}?Ta>@t8&vjZpFL}OUHs0-)lqq(S(Or|ZI6o_A{BCeO;6HgyU3Z3kxS?2OuNZku*ebbZ0llY zXY7CUSkC4Oy$PRT{G<9dOBuGKHMcQr#8eftpZ4AdzOG?wA3te>AeW#BibF$#mVN&J+viU;Dku#tf}+)=Qqnfsl%Pnf z2#TNxinQ7ail7L$2!e8hpa_bf+@J`8pswGucFt-hC;RNZ`o8!5eBbZ)cZcboGyB=k zTC-+m&6?RK$;|0^8GxU}o&h&@Ci;LkCPjD=38&?lj=H1p(XlXgov6O0(qG`RrNslp_#^dFR!!Zk5V?IqQq48gY_d||l)Y?&_i|}^= z=*e-19Zls&4I300KPB;L@0=%@jt4Rkh8;iSJp6>bV`QfB+op<2XW^9%j5Vcn^i2HB zeCaI5yM|WA&sj{skI;{rZRkrsOh26NC?38yWSb3p++nPBX1C^Var_L7Km4#Gjl^Dm z3_=p*7)|p#?d`(!b7d5^NEOp&7#cg)_4fFT*%%bm`tOv_@C~rrpS1o^E0XS?{OS!E zW3b04quN8~Or45p;c)m3TOU{2JIL-)S0$s@iwqA=kKo|LC}WWzv9Q34hSiK1miiVo zHxC|*Sy9nzBz*pT@VGgZ6>}<$vAC&rU$TKRLOOc;YZLL;y{l@;xT(Ez@8;QVbe|ER z{6G3n{gJ(AZ*v7j3mo%h;_nad_H4n1w=#0N zk!gI<-*4lwMBjU&awc*vGM&r+4VnJ@#n#AMA=7zrR`N=9^qIaBNB6cx=6l3T&(d{! zWa6b^PIWsV@0iR~zYj9i)9;L?&!du`M<+kS1scyBm#iP3yut+;{3qc`vgr#z#4{b) ziClp^6d8`$(4X2t`cxy6&hwJj`M6SBE=8vM3y_KDdgKF;?@WGPf-C8_44LHJgG{(5 zkf}|tBh&r&km-Idj6(Kdo1wUAPG`^uCGlsz@-6Vj?mqMUpSaR{hidAW z|6?g9ZR%CYnKu0&Q~7^F@Z>Y_#k#3ymQ6eB?DFX|W>%bo-QJvY&#OBBf?jE(4jo-^ z*qFl$k2vzEu}2>>uISj~#!oo@gcFNTGG6WcPiXYNgfs2%NUq>%hllfjNdx|yYW%-3 zFfs;ZW|h5%@1|nGn>7FY`THcTvf`88!jk2^*Lin!Y@|}+;%ejC0Q_@ze{i?6_x6B) z=l!d?uSRZ0Zb4py+=|?W+>YFV+=<+c z>{y$TlZ8A4ITv{-vJ*KEIUjihvWDzM4kGKw3FHFgvB<^9laL8thFpPMg9tC=@zo8R0 zP9_>ZT&C+$FXPp^Agj;(-&oGDNrO_-;AGm=R@k0?x?|%<_^$u1nYQ_oWGcdQLx4}0 ziIe*B>tr9PKeIrxQ^x?srfTBvZE)S3I-Jxa_fK7y(1svm<6nPKd`@v~0{Jias%l*4 zVNB3of#QBA@+HWdQvIOBrt+FC`pUm&Z7L@gXKyMOy|DeJa$fh2T&}*kZWk^)S3k2` zZ#nbXSN6EpOXVfsw!Xf{^KT!MaCY7KSj9mN54?ECv_#vffA06i?$?gn?VC#z=iL0> zO{2Hl;+g{R9+y^(%)zbz{S* z)t8-p{P55WZ!<&gKcr7X~K3`RCOqU){dnsaO8?;hFc{ z)brEuXP2%y^`q(;V_&)b7Uxxij+@l7-yF2p@mlL^t-a}w_&L#S-n+Yk{^^OIToUn%*zwYz<1f5DqI9>CvZe-rma zS08%87w;^3_T7KRpa1jE*C#L7;k?%S*T)YTd&;Lrw>-1xrY~QK-_SBXGN<6RAJ7#npf)kT=`~j{^7SYIsSYvvaY5$YmbLJKfip%;K)l04m)(K$8Vhz`0(Jc=bWK$ z4g1jj-4V4XhgMwiO!J8!ET6w(>0|EC${yL_p5yK+IO&O;5&Ipnex%(3Tlx^M0=N0pxO=cU&@wB@3Uc3401yAHMnMK{>SN zYy&<4Jf@SQ9p$y*zWS7VSINqwEAfmn(qba`~}+Wk;m%*$u!m zPa|~Taw6J?ubJ3a9(!_MxiQ#RUOm3AJolu&@+7o{b;wofS1bBg`};7?Gy2-7p-g^c z1K9y>r+srb%0r+7mnR+5XR8Xdh3jjf50~2@m&-*;x#fhu`U3 zxmqc=j_;FOr|3|DInMfQP;|&s=3tr97deXDiQc|v+b8vvn-!ZhDLS+%JYyA}Ld9-n zicQL(1CR3#_!HJMs9;trV`G6b9#$)Tm#g$?tuj8>D(xMiv{#Gw$*NK8mWTGz8R&{`d2Gs zsn*{ow?*M>RQfuo*sx9+4^E|=r;OX2SRdyGg~zM(QMV$iO&Jdfw2}LI9mW8cYn48& zLp_h@eCWVy%?L$@HbriZqGv7SGJd7fzpE5|79G>aA4Fd;zD((t9_87gO24dB>|cqs zhV|@Lp53UFYoQyj7Zac}mzODR)D^p}QEb%!JliJ=7%q1zV`&lQKCj&^sOPp+DKSQm zQZB|=;y9;CdA1E@ezr!zBw#DXYp?^C3t=BFI}}U>#v9jbz_4z)7-P&|jPc3kdIevG zF~HB(V~laRPO&+@%(Us*CdCeA(4YIFUBMSBb7!H_-Zj9m4s(IoWLstKG+@kdf90Yr zTwVtZmrGz1E^mbX%-OEY$983GHz@UW$~al9jLAB*o!hb+a=F|c?JL(Q^=p+jRw$em ziXD2CakX}QAJ1F`vrOS!spwM!JFpI#vUV>}+TvCGVT0nsn-qO?Wu6u&{NJkrCnKyt(p{n(xZ%}b;_DM@#H>P<*?PJ@vJ;stk^I| zsV`8TZBlgWRQh6p@@$2o=f-GX{8@%)ITl?%zOUQ@9ll>4%$@&Kf~oAumhKy{e9(j*q`f5z|Z9givC{s1gRH!n0iN!F=Iz8`{X_ z1Z>XF7Aen`U|ut31jYcDJID9Uqm9sq+vte(jn8uM@K~)^d`<`S;jubV!IUXuzR}^j(odBy_6vYZ%8Ty6)3%Q?`8^~`}Res&G;bk?1V@tmo&t6kBdv#1ZVM&apJcpA}0 z=9!DRze$!7kL9Wu#h&ZH$@&ywelbt3BCATV!y4FuF&ofEmQ}1^f=auZv6eAr{i%Jj zIu%*9sHX!>C+tv*ImLD>R_q*9+N)t)vChp(xd1%;EV+qGN$|fh(RieBLT7(giR>f6 zN!6oRn>a}>mCfY0C+`uCGCzZ2zeF#H=^pbiZ$A(|Fdy?UZz_)Y=(|&-msPuoi{8Ny z7rhfAd#0v5RIp4dKGu)*Pbc?%h0jVZw}abB`kC38a3qW6lCEYr(vNY3g~)uY{-1oZ5k*HB`bkNytZblkiQJ@PUhbpM>uWAs_i(3EvbUAH@X{ zz7ioH?I$ICr9wVB6OiytRrpfJ2`G$2<7zu(3E!DQzU_s4WeQ)~@eD57U`X_vrtn#{ zm%c-q%13ir^@C)WvrPERaP%EpK#k{VE~-5EXe8oe9AODZ*VIIQgK*5lys0?mV;;g; z@ll^x`9I<(xw**1lg_W@C2_1*sy%SqNIm$M+iNA4{3+wCUNZXu3+nw@_5Riz^Pg@ia=hzkmF^gTF9|9XWu_VIRh@d)|iz!4Yu zLekT0J)(7nafIdepx7_bI3*nOFmFE)J}@8ia9dJw%(p#mkY4H5X?l+2<{}f9)w<8^ zu;OF=SpRf#Y29Z&E4kbbZYSwyW@o}BkW<&`RQaUe9FXxG;W5E;n(?%c8YSdASIBoL z_-qq`(=oOntRKLQ-VB_?F6T+w0ht9txrYHKky|B{dpP(2wViK_BP`Do6#FF_FGnET zt%EdPq_{#M-;uzPT@uJN?&zADNbdP)fCP6Gu&H)7gT{ZiXA1TAAkaIMhqz zUYH`c+JukhTal1&ZVDf@CpD4%jzyN}cTtkB8u+w!0p>W|r!_c{#8u;(nn*7F+@wVA z#X`BqD|{5AB#=`R$(?}Aa;ydnW@Ykz1qK#Y*lOLb+3b>t~k)DpC^J?@Gv(;7Wk)hjXTo z;Un=~mCBa}S32g%+A9GG$;-$Dr=xTY(7>DH}wV6HLYOT`mzMk=2Z6)A~u z*QVoh_JIjE6FJp>yf0!T;jS~`V?W4v!c_?QY9)NYoWn}kTxa1v>5-GXnvEOK;jbb& z9CVg6*xA=^)*sbI>cPK@09J7{Zp?6%y^q-bJI5B$3pf`Sig6OXA5H%yJ2TE{is-Fm z+&)PRU(FsNzI}zbVL}}Fb4qq{_v?k(;&`pG;~OsI%NOEU9$%A>^}CS$_&(dQA0YWb z#jzdjaBN3A9NWE`Zgx1fn;nkrW`|?D z+2Po3R=6q{i~K>6nbDGUG|$gRmf(`VZN!4D_tu5Bh+e>4Tv&g;nmwxGxS#EC+|PD6 z?q@q3_p=?2``Hf1{cMNhem28hj7qi}U+r*K_EY(+?5Eb9 zsW>b9sW>b9sW>b9sW>b9sW>b9Er1~gBRkU>1oaf(GcF;(?UTgt)$9@CoWr|%an&BXvmEHJR!dcl(#pUq_i!1T%XK|lz z5zfkPD$dGoD$dGojJpyA9#>pvb|sv|euR_Qk8l$E5l&)1!b$8$IEnoTC$Znp`@RYlXJtnfXJyA%LCtpKYoD~fl8UpkpNg}x zpNg}xpNg}xpNg}xpNg}xpNg}x-xWgpsW>b9sW>b9sW>b9sW>b9sW>b9skq^N!(%{6 z#aY>}22Tz~b`D_ZtDyCqaf!a_0VT%qIOgjBAS#HD?_2eUinHnu6=&5SD$c4uRGd|R zs5qxPR?%+`o1>?q53`_pcp}`_~S~{cDHg z{~L&1I~?213Reqb(Kt<*87)~yK;Usn@ zoW#zAlh~PX5<3%4VrRl_j-8#rr%Rh_XYL2Kw;3<#$2hjP9ggj7hhux&;n?1GIJUPP zj_qxRyB?L?UcRQovEA%&Y&Sa`+szKgcC*8=-Ry8|H#;2L%?fvenXydjZdB}Sa(h!1 z;n>cbDoqN6V>_GN-c&_6w)3V+lLFz`&L+1vRS}Nuys6TpKsdIu$?Z*5gkw8zsx&Dq zLY-AV@FRqi*pF}$`w>oJKf+1uM>vW72q&>0;UxCE8Mwj7Imqb}`BTO@(}7S=xLc4V ze2jAfpDq#KZO9Tn#wF5`pQz3c4el=7my83( zC4_u-c3GN~TV%t>I6JwFa|-w*{+{^uwcz4ggd4^mEUtu;_*?Qm>w zI~?2F4#)Pk!?C^XaBOcg+ykiO_VP6yj_qcLW4qbm*lu<>wwoP}?PiB#yV>E`ZdSP4 zVJyiwWt`pm`;eLOP3l&e)R|R1W>#rZ_qa)&S=AF}l_qsfCUs_2Pok3SXO(E4HzG@L zPgxNu_x`Swt%|FyZYuYlR?1ezXK|C-VHaO9E@44Nc43@TfU_FM{5bLPJm)&IE8&Kj z-AJh;9MAKVTm3!~j^}y58z~oJzvqCH*pF}$`w>oJKf+1uM>vW72q&>0;UxAWoWy?5 z1Gf*dT_T*seuR_Qk8l$E5l&)1!b$8$IEnoTC$Zl%zzs%rBBx8_PZ^g;2SPpLB>h2r z`&w}EEy79qgK(1mAe^K>2q)y3F9J6hIf0xm(L5&{x0A1CcooO?w!^W#?Qm>w zI~?2F4#)Pk!?C^XaBOcooSpsHZgx1fn;nkrW`|?D+2Po3b~v`19ggj0hof=oG&63p zj>hRr$jrl6vquOgu`}T$b|##}&V-ZLnQ;3fQ?hG^#LmPgvGdD@MEif%*yzO!gkw8% zo!OOeY-h9kTt_&zGuN423CDIeyU%rmV>@%5*_Ci?XS4fUN4R|cU~&Bi?pgIKKT0@> z{Rk(qAK@hSBb>y3gp=5ha1#3wPGY}S;3Vla2?&_ik-0zkYWAp#v+5TWXVot%&Z=Kj zoK?T5IIDh9aaR4J;;j1R4aI(DcH=t2S=mj+S=mj+S=mj+S=mj+S=mj+S=mj+S=o(o zZ75icI~6CfAMr`-M>vW72q&>0;UxAWoWy>Fli2S~;07aGr5@aT3t57D+lolJw^k`z z72mPCsoZ;CDO(lS;pU)ZPKVow8;r|J2SPpBjmxW5T;+X-j! ziE#hCkR`H{iZRKgK11x68+mj)5BXam?mHpwFW?S9R{e?D zql~li8(ZSRKZJaYv*Y_w$j3N4z8{2qjI-k#41mObjI-nWmry^(+421(CeOzmkdqvk^R!)N$xhJm>^~U2WM&}sa>`c_S+7?QJ?4w2xtb~ttw;PQamS%}+3h}#`FJAX=c+)aqf72@^)PU5fj1WwYwdjsc& zo(W`c@`_8pMB~5-+#$GDBWuYkF8vbW?t)Olk&gc4mGJbL6a9USeT01VLcV>4d`l#J zP;{7(Z>f+k4}6mJADp?B_7nEUa!G#xv%ipUg@g|(4_Ekn_?(>>*bbT>_n7dd;t7|Z z%I7raYe>hZ;EC@5@JZ5vLfk>XLA0?yPj?Q}gZqplES(RU(NlcDIEw4YSD3|j)DFfG zAK~blnwXDySkF`(^Dz(MtoR~y9}DJzxSFk-ESK*yK2%A_8OJE~?_kd78;*;n{d=mW*0UyVmc*Jz?*n|4b!Li+}_#RZ+YlS1Z|872($L&t-H*W9d z;#f~JK58%Xr5i7)a{nECKE;0N&IQ_`@S{+U_2T_PDxPq}$Mxy-V?GsUI^V$O7wWf4 zs2}mEa;qUDHIaVAr{dD-7f|%`;5qWasfqX=GtrOmDlg%J3Lnci<9l4;v%(P{-?!=y z;!|;|UM!#V3kmgmLZ~0{sdB4Xm~th##HZrY>E~7Sv+9pW6#Y{Bfkl(tF!)H86FD8< z1l(%^pNccnZvrq8A>We{KFHO-wu9q@bbQttztSK=d_MD9_*@mQwuMf<7L zMEhjMk-s2ZPAUkW33s%jAIndLl726MgvSZt%*HeME8=4wZg)C9=3(9eIPe`K)UQRT zAMr`_BR+|KbRuw|wCy*>5jI_-ek%r_*;=nYL-X?gZ@80$c4nNN zoljQyXdavSQ?fJTh>zzxiv1Gx8{wEI-FRR=<{_M!p3JvB?pvLkkrE^~H_4Okyf`n3 zW4+RyPqKcjS2{k{@4v!lW@q9%1?}K9_ZVb|yZK zBRQ^2Z3c~l5}{mLyCma<_#|@A6w3WjD3|yoa?6Br*9qkkpG5A=&A>^~DatSAq`-wy@#&fw)F5x6{JA`tl3*{0{BKK3F+!;c-gpS99 z!6%tVvxIWL6v`z&iQL&jx&IW(B|eGVIYPOeLb=2zk$e7T;3VT}gHXS@Lb-&K$o*a@ z_X43@!b#+QE0lYQknhLM;FI+4e4*T*g>s2cBDY#7_a~uT;*-d|3^?O^5eS^Q|2Pii zxab2E{(xK+M=_=u?sD(}>Tn{bX)$4?*iQWGpQfr%=9B% z4fyDu6Pe!|q}rtl_x=Sw6=%jrIF*mSkB~r48r#i`?j!Gu%!*st+@z7p)g*UswIWTKaQwZ#G!VxwxIs8N8zi5c zE-?k8l#XgyZ-jRUXU57Q&FraX~s9;Xf1VM>vUo zgp=q;IEjAih58Xrq95TT`Vmf|-#>+N2`3q+LE$(hK1n->kM|vfr!^pTJkWR{K1qAO z+zgzgy#Zl+Nv@=S2`8}&$(7jU8)171C((~^61(U^yAYqGy~HPJZ>O-mgp;(FaFX_h zgzY6hNqdP;(%!Fy?IoO~y@ZprHzI5=@k!cCe3JHV5b75d>PLJMyZj`STOgE6d=k0e zZU#=$Z!w{M-wWjuP9irUl-nhgOE`(#Q9`*t2;~w^BKJ_C+#iK<2`7;|S}6AyA>WwI z;FFB!--L3H5XvP!iQHd>at{~EB|eGV--U9I6v`z&iQGSha*r0uB|eGVKZJ6R63Qh$ ziQHvE+}%RlRYKgALfnl)+#(_FS|RRwA?_w2?p7i0HX&}I5OnW$$vHLQBa-Xomk zoSJZwb85m#&Z!9}Ij1I^8zjIHpA?q~K1qCfjBwp2KFPYj z1#r|9>bKN$AygTO&Vd<6*mO90f6h4K8-Z+=R6fGd`IFhWQE?G-ItPqibqn zKIUQGR2=g$580_Lfj$15!6h7R-5d1kPx?@5SJ&!xrMlcg}D8NxM4z^ONbjO z#A!m@2qEqOAueBtJ5Y!lF2s3&lcfLP%&p{w{SYczCYrzgWPgyk*-xkXOY&D{xYYHA za6uuT8P1F^1isWbJ5@hw$B9Z@%(= z`^EmvxP(c2Q{|KWPFC8>b{l{LS6s+&QTS5(m-VD}94h3SDC8RrK1nJN z;tmty#t3n`5O+9mXtKj;(U>0GI~5=au23QuFAREhTt+~amw#o4SM z>y?g=^&^}WAH~Him-RD?D~azI08;%us{19VtdMWA zkncF~Nz!;Bj()eKBuR0{3;CqD6NG#x0!L7*aoU6XDvsxIYWr#YF^)KS9;f1HJQGeb ze+ichJn^NQZ!~{duCyIie5@Z~C{vtd_WF@<#Q;d=Wr;FQ)5a0tJ4wh_D&#wv8X!og z2<1*yqe|;LsFDA{_|zq~BXY+)F~-%R=0}z)8|8Lfo4|+#28rO12??Mc33szjvVx zAimFdGu*3mQ;_Z#;_egT{vpK8Fl(TRzB7fm3L)+s;7CRC&tyllIAjWQXJL1=-=Uh5GULg6#OV6Yy0D z$HDmmoD+-f1;YMioL&DCj>jEg&Bk9l>KR8E&M5XvH2w%DiC+lE_O*&%2*-NyxlBKy z_`v$HUg`K)KRZ6!f3RG_5}%n}i0?w^Cy8^;O5(`YR`J1HA>Y{&KFB&3I7yl<#LW@n zDuuZ7gt&`#5@^b^Oz~{{{n;aAxC*@q~Lf z*&e%#8*(WQuSRD1sm~B!Bjj?t&hiJ~fFVBSVcr3_Bp>rI?*JV5_EPxx=eP#oP_bCC z3*pEX$SYO z8SWz?-yuT24~2Xqg?yibkH>qe{@mUi6ujW${^EI*iYMGxLcXw&ug9dltQTLYKMIxh zvYy;8DsH2YZ>*5-J&;Sr)lHIl1PrxB!gsTfkM?E~zFUNR9}4;EgnXYVd@#AgiJUsF zdQf+p312Fna9b+QRBb{?d=DvnspF0xA>6;4Z;VjCW{G~l z{JZ%M7wY$%P``gS-(=_~S!W0*nMdyk+c8Bbmv9of?+N9eA(TrviQIREaz7BtC7eX= z2uxbSnZ>*6e7jR9mv9of8A7>>g>nfek^7foXRGz?4xwDaN#xRIOJe7Hg>nfek-Lph z?oy##!b#+AA(UG$luI~?+`&S*ON4R>Cy|>el>3QLF5x6{HKE)NpJ4b ze0K@?1}S`2`;?uN^S2svkM})1Z`FBuoC)6m9Jq!E`HmIx?JDG(pzx)}O{^#RmtBN> z=;FS2unMt{3aqK4jfZ0vRS0Uj8*X|~KsOp!Q__XKq z^xlnr_W|PwOF1>s`xN@!2NE3pP6K)`iEc@o=)9D0^zKH2qxX^$9KDy6;OM=i1V{Ff z;OM=i1V`^B?Ql+DxF2}Dp{ie^{%|5Qj{Bt_2pJIAEqKe7r8;@qUT;K2Z2l z+soh{V4hO=(*0dp;@bmCvHh%YO{siNmezMAzTHy!(%_y<<;&^g;S%xfp30X7w>p(C z!7P1O;v1UEmj?HADxb5DhfBn_XDVMB+}~6A63o(fCB9}M&Y3DV4c{}Ve9k_3Tq3!9 zrShf0J)6pxra$&hE?zkO5r(%@c5<#YD&aEbVarShf0J(tRtV3xis z@$Hk!mj-vC!l&W6YUI>JeBVjtIdE@)kJk-6l6KwySt$1~r5&Unai=EoFBh5crTS-T zN0-tL<}<@xEadw^$T!b~Z$LXx(XH^M^{2pHYQksMj$af$tM)Ds^8G60I~aUC4$y^Z z#{uE^KI2pELh;5i$aJ5v>As(nii5fX67f|g+fj`&aXOJxQ#&xTlQ>6G&qOK+p9yy( zGS44czX+e&AB4MA;iLW~96!f+!rhs~RRhA~fb>)oE8_^H}Nkm5F{luBkt0Z%1iyfyRsyaaH#jK z?p2;&QF{8c8B=HCng2a$knwX3PKTp97fJ9vk{`(&utr}CXa@Ky9kU$M95Wnef^C|k+))bV8IGxrnRxar z1EayWYmN}I*Kvm7=f~o&9A!9012f%G;g}5k`Os!EK9w30OHrPUx-uYUI?l#-Zl~Z{ zg1Z%lgsNoCbf7C7dEjE%1;ES(nslmwZqxAG41@EqBxhlg(`iT~#JPCJ=_qiF#eYsm zKE4U%c8r9k)A0NOM$H*ORO0yqz~skop6ru%0`AO$#6CH0=oUcsJAAkXQKA`(pUuWM zp)(BIR2t9B0AIP%>Qwzmi-XbTa{NbWDo#~0pkXO2O;3{bDqtgO>6x%pB`^c)s6A7R zR=A;u3tBlb4tlNIXNd`5CF@ffW9T_9$xA&;(%8QAskfI>SyJ_N<2Qb0V6@LNdTtK1 zs8m|(7@!5o4jZ=Z|4gcd)7iHG&u3tiPliO+wr?alFiJ3K920Pt#@lSPX)-kG>$j~P zjhTA9YI?cz+|pUI;gh1nT?cE!ouxCT%q*EUj2xGfJbw z&o7-lJRbYoHu~h*vrDI+QGUJ?1T$twhtHWcBRqRbS?To2vqw&!Hf7e#*)ykBj+`=c zdU*2e=?9C`J{&6!lsU7e zRi2;xjG9@c=gfhW(vqTC)6Sh%UV3Kf>`gb-+lN)*QF6s&OV2GWcb3z?(czP4A2H+H znP->I8t$AkZPb)0rL)ntsguiRmkxIxvWZ7OB)t^EA5I&Y%|wBxlZ?P6`2cAxgX_PN%neW(4Z?dv+k<#mN!$GT2&O>#|j&2(Mwy2-V~ z^?<9%^@{5a*XORkT>HBZb{DvhbWe4k@S5PF;NoC*Xot}5q5VS#g)R)u57mX1hH}HZM?#UJ$mx;# z$XBT?9ur5v=BJ)bDX&BtR1HHXg|5n@+|e-<9XQgh39uq zrguBgm=s(dydv~+=&ewDC@*qQWML$r$Mh2Y zZ2d#MOW!q0?r|-6OSR)%FS%RYKe~I|yL$HYGYjDzb&Xzh0_epueDhq<^jN5_Lw8h#ng~IXWeJS@hcIqUdeWrs#{& z*P>rVe~$hU-7+>Lwr6a3ED+OUqhiO!PK=esrpGRbT@tH}y&QWZ_F3%P*pIP6@$KR} z#rKNm$7Au+q5Y+O>-xnt z&wVG_e6{CB&wZXXo^8D6dGGT+>wVGtr*~`L5xz3?c$4o>-(deX{?q-p`0w-o;Xerd zdrn|(;L^bLfz^TM1A7K%2S!y`BC8{< zk-ha}^>Te(^rz@Su|(_`v}S&6>$p2UHa-D*pBt}@-yeT8{#^W}_&e0+MGnVGTn1|g zYo*%l+JjomHOqCYYrX4a&jR$i%R9|`j`u0=T5pzbJ72(eobN2(xxUMM_xU#XqW;7E z)BFqkclaOlulB#>Z}oThH~165`N5jteZhYOyMtSWb`6~nnh~lBEehQpS`vCF^jPTC z(1)RahQ15^9Lfpr9xe=@6233|TKN0$@8LrtarEQdNNwbf$kNE4k&B~^(Kn*sMGuW# z7P~&SIPRDPT{G}KKJ8GgSUV4Pep~xW+un7h>m^s4>wDKTp0_<8c|P}i<@w$--dpVL z^!@5P*dO*^?7zx?vwyk25i{op|DXQsz|Mhv1IGqV3Y-8>f- z8G0}DNoalO>(Gy(UqgR}wg_(%-aecg-ZMNbd{9^m`@^yD=Qb%7%gGgw=i;aWPIe5$Yjiyiy{jm*GF!P+#P9%ybxIv`699*@)zcAR3EJ$ zp^wv#*C*;z^t1GH^eX)l{c`)F_+dxe~)Iw z&WT+adoqRrRe_&<#$_vax4X!-uM!F)uLDl@Y`tJI4eU|>P z{8pi*SmS%wr~A+JzvW*KZK8`0iyakfjeSi0QSWdpz-5?rly;J~g?pG=caL@-pUHv^`0%fhj=G@%e>{@3U8&i$~)Iv?Oot~ z9X_HR7Vq%>703@B8$3N&8e9_GJ9K#Xbd1-xqC3YOjrcp^(4iJSa<%rnwqE;MyWZ{c z`FtT?)Hlj^7<}Q;K97Gqe9CM7+`yRN+~7OGkAj~Cw+!tZ3WkmdjSHO;Iy-a@X4Ms; zTS9k)?lxxB6QO5AFNXdRdONf(^m*u;PzOR9(W6$ZC&6qW9-ie*1`uRB5y@Lj+E<_dbNI?zDLv@ofhqg4vKFRcXafg@jRjx zxQbjKyS{Y&=*mE(vdsOld#dLpf4hHdxF|d!Tnt|{3ErqIT#j|9GF%ltCH_eK=eVQG z;iy7W9&%N3o|cAAEM{#Lv^Q~r_X@)Rr*}C;1{wTb_7H5?+Wc^ z_XN*$&s@(Po_9QM?+hCAIT^+tdO0lGto^9%t-;s_Q#fk^6Xe z%rnVT3lCN2UF@y*F7q~cSHjAxyiMNK-ezx$ccy=#|NT%$C_g$PsztrgU{sGLq6N{y z=-6mcbV9T^Ix#vaS`sabmPae1mC>r`+-P-lL9`~iFj|Xfqb|BQT2HzKI9SgZtzPY|?-vVEaZ=vsY-%?+uKg*x(&+!jI4CoGQ zhdEIlT!0mJVXzj_-kQ)Gp~mp4a1%y&bGQZTKx?=yyw^!R!48{&V&=?4^sU@aY_4b!gF-a@>$Q9IRjrmNhw&~>ltLD!40&Zn-gv8wjC zc0lx6>wd`n7JR}6c-d~mG8^4F9=9jtiFwAsdgplNBeq%QS>U@iR^}c1k2H(H@I|mMdulg7<>sG;>;H2Q_&KOm;tF}7RmfLJhgY;0PrBDN^D6zkHfvA1L2z#_r;nE3ekl=wU& z7J4?`7Jrxgbt1#~{d9Y4H)(fjE8wGE!c2T$`xsHix7y!aJG%CC?c*BZ^0~&ij>0%P z*;VGMa?N*L?s~-agzH(?3$EAUJHB)Md`Wb^qZW>G8vk1)lL35z{?$Jm+I4aI5ETtYlBXnqv-P*gK z_h7HzdkkWmiHOT)c+dA($$z$g zw*LwLGlT?22c4)Yx8sm5A$z2|0(9-4>k zo=-iUo^L(>@(jiiP~S1WVniVqV=mWV#arro5b?;{zINZozAvyt?e_iQ+t$AW{L?=E;r@gD0e{p# z#y=S&?>zrS{=5D6`ycZ^=l=(y?~wsdKo6W6m>ReuP>V5mcc3BgXyA#!h@c;1@JQ_T zW+Fbj1pe(R__n))_XZybzKrqL9o!h)BeY-WfKU`GDMi^QA$qF_%|Rrvz=*Ez4&4)a zJoI#E4I=9;!`b1TvG(iXBaPVk6U4-CM2715`UpLtAEqCL*tS?d4XemSdJW>F+x2?= ze*Gb=$1lR4tkpa8^?E19RhQn4v9(d(Gdc{O|8V&FIT%lmW9RrL{LH7(En?fmc7~Vn zVf>7VjfS*G-;chHz8zuzz5M(6N5KB0{1yK5{qy{F{v|jsc-8;5|3iO9VC%pxfuVt60aqXt zhzE`cj0>C+I33Z$V)%jw1FHg0VV~I=$PDfs%nObPx`W~1=-?6X3?~Iog?CtJoGmN~ z-UILOOmIVRi_k9U5!&|@gbJ}Uof?{lsO)O&^j^UZ@6*s1i0Fr4hqqUF|F9donZv?k zja>}I47Y{r!z;oMVAXm7-r;?${NIOnj_eW9a7sa5p+2$#yOD1q4t*DRfs^zr^qVm6 zmto%jp%0Coft7Yv^!(^Ntgtk%U&Su*E9?_@i|rLF#}4G~SVL?>?1$K{@q^-{{=@~recV|eH`BR2lp^MhwgZ?<=L#P0if z5A=@m9_gKcd3K@qQtvh1CEokJk9)WB?d%(d^Ak7b)zQ9VvDRM(uYH|w1?JS#@Y^qA zUi}lh>mPl;__p!y=|2!V*fH?qrI=4M{nui*z0}{}UkQ)yK|j74XhVe88TbXKCRxGb z&{r2=e{*lJ34Qc@aJ$f+p<$un=${iqr-mkDzAOk`6}mQb8{+1tLe1EReiQl~9y~L= zM|hv`ewZ&OA+nnho)x}0d`}c$K4~cjpheyUnCSYWp9XTI6 zyG4;YjIRfAUh;0_!^o!?X8@|v_jh-336eI20=nXhE zdKxRpo6*m4a`t=lujmf3U1IsMk+C?|kGZky5M|sJyAv_S&#~WQj(8?wjMn&uxT7}1 z_<4#9ZA&d%%h3)*oS(oM+fmv$?K8R@iwA~k6hm( z67O+sL_D#Bdsp`!?x_1vccFVM_Ppg7rE}f$-IrtUd%Jsyd%62D<5aN)-s64uC+^SP zKOs{4mwS+BM-QF1?St{_H+FPIp5r~Icux1s^i+B-@LcS<7SY?Sh@2n5&XXdzH$Cqf z3@iVe zVJ}V`?!|fB=aFwCI&3>zKObxN{rdaxtv~7`qF3P@u0Hw#toc*)fLIt-ER2nfO~EKy z9=k90XzYpD8l1j;82cpleXJYnZbsY_*W(58BX9gd& z$GgvfA3w)^F-~`{a^D6&z5-{vZ=)AJLN9FX*~zf~!5$Cdyh9P^o#dHFhHpLxIZ_IUqgtjj}ud&7$y z==1x+zHz?OaBh5+uMH;z-99=i-qW9tbs*?3@E7{0`p>~ya2veFz5b{C&->dD2bKk9 z2C4!V2kr>0fagCP=Pym6HbiryF-ty)o`)6err2XKM`H%wrr>wpXivJ|_x{uSgZBvE zSN`)bH?Igi9(e|P$rb3$r}gsag*aFJKI({Vh4pX*V(vJi?z3Yr#LkG%ieD06inGRl zz$bi8ebbzQ_f-zZgNT6+bR}F1T!Y<1+@~WtUWRq=Rrdj~O{Hg^$I(V_mK=^wSGO_x z9qw#ce2BZ!Q-wWVwPz7lt!06gShZGTx7!+6i=FQJzy_S-ZNv(e9UKxIYOG@3ppH`? z5OwtKy=ZTh8OuiGH#C+9UA;K-Ex@RoV8njqSik3@^$RhR7sr;xR>oGvRwMRnjjfHX zi>=41(jD6v%Zz8ohs1}*^Wr1oUSmYk+3Li2NxVE>8J`gPZXM2cH^8bJU74`y5cg25c_Z9joCg)at4wfDbeF)hRKl|?a4&Q( z!Wqai_e%FFM4T~dxDLQt*W3gIJ^p@acsS>A3 z3%m=lD_@Kq`AY1@S7RsMiZiBl-u2!M-fr(k%!6#-5Z_Rr)0gkld_i9VyUij*s*`Y{ zUg4`kPgAs7hrMTmuMw+jGoqz7tgaotPG1*JPaN1;=U}!tF|cY~(~eW_PJfrb$L|Pa1#$wp0cRjTpap_~M4%Aoam9g2 zfwDja=2vx~#)xw35#=`G%|ep%a$Tq%?@k&q!EI4hik6K7{QALq@%Z~|v# zML6M^gczU#QCc<5W@^KAh}Gzvxe4bBYjC#Ej=fwbcI-W2M6gE?P|Szm{FUyqsJfVtm@+24fu z-wY4120ow-UZ5R*paY(u6TYBplaI~BjHSig=@EUdS8?;YtfbVF8_h^FuXod$_GvJiDcZWkKN)At^ zCks9$2VNx?e#HsTk`Lda!Mg;LC((uQF-7n)#qcweHl3mIs<6OQ1D{h1uTuxVQxDJ6 z0N>L%;9P1g_QdOqv+PdzqAqx&9{3}NH`AL1pOgcylncM)G>v%1dW+ztis7dw!Bdr` zoPyWDXIY&ku7MA0+jLUC-rEUZ)&+0Y1Apf5W%{z<({kX|at*(h2hTPFzRe5oro+D# zz{8D&kDCB5HxYiW1fH%OzOEA9uJ6>a*0)GGb6W}Dw+h~GHT+)-JYXw);97XWb?}4h z;R!du7k0xNZiGL~RL&ZQ!Y}3-afIgg!aM5lj|K3MW8otwz)MbqpDcl=EQhbGgtwdv zf4Kl2b0K`@B6!Wk@SDqwol2vB6};za_|F!2&{p`+weX_r;78ZPlWu@7?S?nq2!EOh zkD3jiIs{&IDEw+3JnIPfRxiA(4*yyJ4?7kx)3$=AZ~C3GvSf5;gg5J zD-VTV&Vy$j0pIL}ch=#b3*e#0!beYlm!1eeT>?*C4qsgfZ{7b~wyxhhu2t~ftKq*} z;K5tr!`H%#uY(_74^O@UzPuaWd?WmMCOmpJeEJZ0^`Y?VdGPEb;M=|M?mGNC?X<_j z$4`Klp9nu+0#9EKUtbAtKi4=5sR=EF&tC+uzZiah89e_=`2JP!{;Q4s9-WW0h1Oyf zSci3BJywDZSPSTEextDu%);484)#~M;h|U;@~|?Dz}n!&>Y!tND8LGl?mYmX<}bvW zu?VZiVyqj>uyW7|p!xYUo%nZ#H()L4#%i(=>q#b7lx(aiL$In0#k!J*m1P9h7B5y8 z9qUU0R+zC^V`wio5$j9|R+@6GHI-Ox<{Iw|YOuenHFkK5vF#-7T!0xX*(i7Q;^(b?|+lG9c8ELu~tCNniqXNAUZzYTL3C3yU zBz(uA4DZ@2HocKpVC)%d^+kFe&MWG1V$p#2JdOG)y-8n<^U4;yHElJ{nA-7Xvm@o4 z$q~(rW<|53IXKVG#fhd9XPWtG-Z?lX4Wi>}MfxU{;Dem-Gn3#;>J5+4 z0k4n^FHne>um-bv4Q6b2I0v&ch&fn==&lKKiRRA`L~=AwigB)5hwi*?25 zmrmyzw$9RO5ML||{m*!q|2gk66kbG!=a`81mNhtWCJ(X7+z((Eof*r*4mAgR)LiUR zo!F;p*rx`uQ%zv6T4?N6i|Ks1W00c-UwLdZqPg{m<+_Z09lbZ8on5XG!Hq!t7BqHu zg+}B?aT`T#m5AA@jXhqi5v?sltk!7k^O}t)Z7seD&|&QLx{UXInTXADjQyU|h|0W( z$r8q%ugHkTN^qi4VeI>=jVO#_uzF+f*Jzw6wcuSuo3a1vz}pDg0rnUX7sXo?ZRO!~ zNi+6=3FA#D#aI+!mE&6mRmN_x#)zyI;~i~-u_J6U-p*1y)o$zxJB>(+;wXxuD28(S z@{IV2q9=--C~~5>iJ~TonX2)gb)m6GTx`6bq)3V4B#M$KMxqFb;vLKFv46tu|LIWEIVE$tmw8?g^XJ{0#*)I%{3MLZPmP_#p_ z4n;Z?=TMYGF%CsI6yH#EL$M7-HWb%TRI|$1QMTahgZ7l`j97*u8H!`Fj1!PtW1ds| zLUX;q*j-LA;ueZpC}yd~o0f&f9&@qreVj&o%W1W-&ulef6pBzb7<}<&L~8bF~Qi0mKfg_sKWQ278twHMMhjfQ3b^m&3NP8YV1kZ8L>o{@y#dNmu4F= z1Vs=OKTz~QvzsCZiW|xhHBih@jc*xHyigZeY{Uu_DNvk1QNmhdr@G#V4=6gI*dPbr zLl|o8S4SAWjv@kz2Z}MXDHfneU@pFyP=h&6F#tsXwEj0?^{2JJ4R4od-S5N+Xt(j+ zGSl#nwA#~Jui@JTI=)*_h;J55!1oF!;adge_)b9;zEQ9MXVA6yHo;e4o#*Tb0 z_Tx3i30R%66JLpaIIXEI*n_tj=U^Si?z3$KqmbyCR#_caWvrROtkc+2Z^Vu|%Qz#;HTKdY zu#*lN=VXP(9(p2n&}GJ1S(UMOUWlD@opD~)VCM4I5TTE_R1UJUwe#mvn=B* zawz<3zHxRIH1@`0jW@M)epY7eiRZ$<(t5QB{2=DYn5@XR%7gO7sJ0c7-wru#&<4S;a}U0^R-T6 zPrDKRHOn|-%Qg10Bj8_y#yMM|5i?GNe=Rf4+Nz9ia4m#?tuxNs8oZ5OI&o{p8(}(g zYsa^`=+v#t*r#T~zvgT@c^hHuP80C2v@~mknx|P7*82<=(jmxgrA_#8T~qKI_LUPY9aa_Si`=jHxNSCa zQhzql8y=$3s3#H)dZfMp1PQ-C^EKGKV=-wqFYI*L>|S`^J=-;~KCE+<4y%(dI@O$VGg8+}a5chQ3=(ICZc0Zwwe#vdMSOoM_^LV*`vaF3Zf zG0B?&B-fUalqyZg*atn*jPZ%z@uJO~G>1_()F2ab`b6GCf{+GycJjath+JboWH%sYp3iOjhu$7CkW zNlLIK9@cYFOU$?}DG@pguO;X{)NK@D{YoC`xjfu-s+y z@+q91u@AEi=SPW;d9i}sd@d!iaHi0>LYl(;L$sRm2T11l(#91_rC4C`*zGR%<@<{A ziwYK?f_Mx8da*g>e1qr!%FE~}r_nN0t=;4jcVT~cA7xH+BW*&^!UD>vY4$He89{v$ z<}GJwNN+`*fAFoeHrq$0kSU=VRTAu4dhy_h`MPgn|KDWRR?cW_;TquqV8Ar2K2Jd!RZpsgRT4RCxAEEWrv4aV2O*q zW#{rA0gk81_9K9QM@K;U5i!8a#JSf5%pk7k0-%Q?=+Q%(^91lwLeInY>F6r~-0|cP zdL}{-A3ygH_X+h*f1+gNkLiMQ2E7gLTzZc@jzT&_ zTkR|81Nx4m9P{+OA0#o0)9#lP=Qn=_0a-puHzt8NZX`ugT9>}1AGKt^Ggppj^H@rt;Rw6 zhk!qKzDTR3Oy?=+3_8w|59h-an~&1y7QjhV4VXi9fODuFut>nap)l}D+68zk9Rh3= z^z{M;=w(nk=>tHMes5bq-=G>gMvi{I;zrSNY}c49x{8PzcD@5YhyMBJ5HJeP(<;6+ zZ=jt+wBAf(B5LD3aQ=VABDsJRUPVHpn%1TQ@@rO6AuX!agIyuEm})9%m13#gtfJme zjlHJD!ajc;h0TC&gw)nJsZtMxSin+s&GgkUjTven&T8n=EH%u04J@o%*ui|29mtVb z$n^Om0jg5W-sQU9+1MSR8fMiSdVrbc(q4a%DuO{;&O#ApG%}-G4KSF-j5Z~}VB{Uq z-eMeD%R-@BHGPX#*UCAto(t7NmC_DunQBIKQ)vw`s_JH%wN_EB<%$+Wy`5PbYZX_+tG%6DJw&V2!)sJiy@6I?nk?KJ>TOc3;i7|NLkY65 zVss8^X;KUrUyX#7ZPAA_;%)e_)-c1wgbuZeGb?qiO>OTo5Emn{moYP7sF53)usfoL zM2iL%QhEet-mDw`4|WBtn;DgQq}Nc}J4R%MBZ}5L)Fu{kyifGgs)kf+7`INV>R|!y z;9SL|j~>|+6wx<= zaC}KnU4+3X=;T5?tVEO|Xb=}x2l3ddR6?OvCD1u&bll8FjK#nJef7u>0%}AF#W{TZ zx`uG)%OONqZangs5nF&19bmn#gQpS+UP9!7?F(=i+mn{5O1q}RfdMm4icg8yHuOkr)!oF7M&{rq zW5$*pW`euTq#7mAjF~nqOh9Y}s32nnnPOt9b)%kXJWi@rO$n)eST=DJVtvLo74Emn zF2lf##3_OJ6q!8u0*Xb^4GcB0p;9BW;=Le1EKHPYsiK#`*^L@3oF%-g7#7tcyn7IV z6^5bo(ptm^6Z;SL`Kjxv3VXguy}1AA`0K<8)lC7qofeXeJ4X%jPn}vJ6QT`NOI>6U zqaNCL6R!&G7-`^xx4Idaf_5R$WYBcLEug5tWokp+K-q!P6cn!2pfLEnorO{d<`aKO z{0dw$lE#40uRyYkBG6ZZ%&T&ED-3Z#@%tY)zZI@}xb#fUBty!y`3OVjSX z`ptxyGn>6^V1bY z3)=Vp@YE^)o>AAAZ_eFuwPE1R_Xawix%ivQ$qPpZFW+%~N5#&((wFIhd*(d463fDU-L`(S%>w?m^DB9?OSIi z7d~_Hf6r&myLPeUiFGaOe_fIBtG$~)J=t&|@nXj-yIwlA_UBpOcl|_tdjAubyB~Y< z&Nsf;_u3D3eYnv0eA+9wS5K$<=j^W3D(+h`n}7+DcwfNF0ryUmZTwn8iLBDGA;L$K!Glfq24=~H`30qNTt;qU*o%>(()6N|d4XVIG0QCs6cywa7nSDcE+{H2$!%4X zK(M$ie?fkrjcBYy?n2)@Uuns_`99p_m_)ODtE!p?Px`sB^QnwqIp<;*YQsTaRvA*U zCt>WKaf6aPF$pQXJhz$3Rmg)Jxmb=ikYnxX;ZK&Gx@*q%@@qRb{m)UqwtM-C`lg5G zrTp>IXT{c&#?>VgbGlpa&OFc`=zHhZG$#3^H zW?J1pzH)HIi_bg|e)_|O)rTG*_3?Pyo8SH8^NVfY{HXVl^pZb(xMuay|Gw06{CDg5 zw8!7_c!*3!AcP9>!@EpF=KxGe|BM*w+U(@qQu`^-n;fdXzV|<+}pW{1NC}uAhS& zzNmc1O)RbjZ<-FG`^t$9iyN6B0WSu!2Iufbz$(13HR1)Kj#i=W2ds|1*3wIk>!0&I ze3aOTj%UWpB~dj5)xy?TRTRqvZ4FLX1A0_(dirsC^7EK~(?zQ$aQT^Pf?F(J+EjSS`%T<6HSk4#?J z%OI)X)q{Vfxa|+=TLYc}jnN#1^9#}UJp4+j1m%2Se6&R6h$acM#chUYe+VWS$k ze;;If@FUF2G_+p{yj`^9o{PW-d?fAggaw(KY25w*ESF(dK3;4}fql6rnVO)LdzXKB z&Ap+YXasQIh9P6X+wocA@8o<;buk;F`C4eu*L;M0X1~g}Lt~qdmwE{+%n-BK1&gg= zp82ZwguIl`#f|O0JR@H4?t*MNtY~T*Gp+c^E&78pSsqm8590X7 z74Qa|@T3g8G@RdM*|ohDkw{3z{Q?&Ilt?5yFRH;Zx=hQjwdr5ep2BR=4t<-kYiFzu ziorH_!A=&$RiqnfMLRRUrq-gkRvF)rp6E3l7O!O8EF_0GEX!6*zt*jHG9z2=QY!-d zxu`6=O$nJSHYlMaZv<=Nrsv&Y`=Y!-CqQ6PUVMfYi|PI=_)GKvwrc+WE*FO7AAgC% L{Og!T_Q3xERpm?7 literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/EasyHook64.dll b/RenderHookAPI/bin/EasyHook64.dll new file mode 100644 index 0000000000000000000000000000000000000000..32ed94f73634ccb10eb0baa37ba4b1f81e663ed6 GIT binary patch literal 310272 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 ZrbYgx;YN^m(YuNDV=^C9~)GP~z zKDG7f+V0O|kJ|3)T^^c1)wcEjdi{QXuBzWdJiPibPV7y!x-YKKdJ;yHfPA0r^8W&N zh!Otpj_AOl1S-bQu)u$&=`lLb@^qfk5{hTDi03h0?;yoJI%u$SW?^mfNAUrwdz3At ze|0bu&4&S%4wrqqEWyehkz`0IQ2KJw-Bd9asgY;cwG=-U+MA6dZ$jF2jc^Ep$=iug z+YqWMdigq8^@yEz6&7mr!;oBSy=ROXC$@t?fe4-YCboVl9H_^(V(K%{8{bO12Z(N~ zlvp2|XBg13ly#U%yv&uM1lj8f_3>}l5wrfGtofpy)f;32kDBKes$H11BR59P30wGW z<+qKW&94WzEs__uOUIHqfEocIwLMoOg7PWAfR$J=IU)Dq$PzPCPBtG@Nq;k6)rDC)n=-0DC^e>G?JvCn zBaaE0to}|SwpYEZ)~nCJLH|Qm#|T(we~3t8ncT_LZTqxnSS*>sO8+9$7&ES@)U($G z`_7fbbiek*u}w+H&v^4@3{HV))3`=E~7u17rG+6I;ua{}Hn563CHndjfu^5UgJQ?6D}2LlEA2 z05?SlAlb`+LY3iURRmd+U{m-pOB?*6sT|wIxH9Fhg&De*0V=b&kVMu`6dH#5GOmUb zc&?5VZsHo1IH?oQCb5Y9as7EurLZDiEd6ivmxbs?5GaX%125g&=nK-vRTyjY$9P#& z)L#m;omcFCG?GD(01UT+K}l50h*TFUSsfn5WjWSBDHY{u)KbfTCb}!CI2rbi&EL~f z%&^vt+^F?c|H(9L(gk`!{VWw!BVK8Tn1<~X^-wbFs5m+NYo5+wP}&|$Y{9JF_ilJY zj?&+&T~al2dWw8G1rxOeiOnC zr*=iHHxhxcb$U*6Ev8g2NAqZQ>gLv}xUa$6bt34XCiomGa>}Vds`N9m@o$5E>})oy zmKTw2WjCbC-g}gEiW=+L)cE<>CtVHgb(g@lXFOlHnNDCDb}Fy*jumG~@0g3BrPn*& z^|O@y1GV9Nnud|~H2r4^j9R&wfz<-D1Q-!DCgG|{I?Qao?QO?HhOMG}5A#{Euw+uA zWX*8(!ff5ve1;kw{KJlk+|9Ymy z9Px5g;+ok$f0dA+Ko@4RF3c5Dm?5ePlj}j(sdfSLIBf2O4$-JQ3Ro)nM&aj_|9YML z7)kylYcV$OwhBjBffrEa!Q)RUfSPvM)sqObhE;R3tzVfepgkMdd-NQeMmT>j++} z^lLeQ=43$+&k4aCh?lnV90w}iA1(jXybO{)`HprKz7=v3$( z4bsN?Uxz=Y!~d?sA83P-3XT3ozQTIE=wzzxalC)TtKK;0dqn@6>F>5 z9AeS8TnYQWEu%P6Bm-UTa*Uv&;=peMLw+g0VkfkMtOVg>z&N4jNs^Udg-Rfrs7!*z zZh|BU3~TbX@G3Zh@$x03ah_}VP8x@ELGDWZjo3&hgWSQA0zM8 z%o&wW$RcY->bXL4JX+^?uH^Uwh-J7-3<_K0a+JYuEN_P$1T)40Y~-;?r;ulG-rO7K zoeJk$qO?r;#|h2{gfUX8n_zF>8~O?b{g8&fSfH;JXz8C5fJ{CwmIKlwq1Ri$(uKY0 zbfijpl}>t{Bt2EAGJ{=4A%d>GOA0A%-mC7xqdzM=>1nwey^QHULgV?h;Q3C-mRz*L zmxk$7Fn$fQPGDXY80)SU*w{5A+GPLfL{-2Tc0j<>{wu_Hh{s~qCQ5;S=LpkEsr-S# zPVZfmdX>%H*j+-q-;z!Dm0(b-o)l5EoTmjmQ9;Hv4K3vD#KnxPV%}y@rhmYd>sC+}DRWBvH$XPZPVI21Q311CN zT-;5s8tZPp)yt1yq@GUbYhH}xZZ+ES`7xieK+rP|t2dc?JqsMMyG$?Die+PR`mW|z zuA3~<7we+43-PytaN6U9{s2?(w!;bCson-UA>luQiky(C-=OPa{Z@*eS>96TR*8>_ zC$)?!r8{2%u>GP$4o_zFWCwXl-uM$|O{RnhUJCli5VJpXoVM0|;kn`yWxH|PNczZj zwp3}`DtqW5l5q-^BGV*#Yxt$AqZsyj^fkq zaH9tFj^fjPKu6uQw;Lt8Ckiv0-&8VhCERY(Fjt{^vA)Y>`}k}E?2CwuSx@!sL))0A zqL>)@$|`Yo6E&G=FT7L_u`;B~Aj0@~33mmGbg`Psw#!u*a)Lm0cvvOa^c$&ds%DG! z_8E26_KNcl1DOo1^8jh9Jx8uPso4^2p2epzee$4Ks(JPx3bCqy0QfJO_jk2}?Swuh zPf2(R5sgm?P+bj+#pa_WWh&JWkcUdVn$feD{{wMVkUpc^&_FC_ZaJe{wOpUk72gMP zMpt|v$QfPneIRFa#rJ`n(G}kZoY7V1bDzimK`A9Jt=%SDNNg3Qnk8>$lEUB-HHAd> z1dpgKruw&2ajKw3AK-mNk07eb?kZN}#XM`#LwLxW+dhTw=I&TFU>e4hYFAj3+mu2gy7v8Ca$?b`YNB$uQ0Ks2{APQKi}y4) zr~2+Yb@C@;BAV6aZPev-3wO9m8h;MKg$A@zKk%1ql~%wcQj)3mpAD7CvSe3JK$egDmHaH?5?nS6yOEatx#MAHJbW!imkmZJJG zQH$M5{410g+)psG6*IktQMtavcknizI5lQ_uekW2O5{50ozBWdE9RIn>v3BZMs*VF z-LQF*wHpULoEBnn6-;-LR(zsLFDc|1#>bLO@m;?}Q3DC(P~Zmp`(J^Y{qIebDw<-j zS*3U0Ho@RhBl!Z3HGPl08CW;^p*^B^*ef#8slL&9_OB$?hp>sAs~am{8h4R>btbxQ zkLY51QYQM?J)%qP6Nq-l*I@I>=%KJ9Va|$}icAsJh@UZR8CIe}X>`5)4YA2Vd+s*i zSgT}(gw$aiPQAxiLs!)1eJl<7+D&^lC=z>CgT6IWj|f*tHmQ`1a*89Uqy1}ABW()* zD2FSwH%>|SXzw9jdmk`IIgM>T1Y9-N7ak{JOSJamerjt}X6|XRyvtjoR;|x|i_RFU z{Kbag66RnZZ|%XQwbF1@%pKOHKK9;jEeO+WsYK1}S`2Y(@q0idH3jha+TNl}ZBq4& z@#(N92@9@lR=I2(b##1x^hj%4nnIG0+n@pxVZA)+=tP&Z7WJ1Gw4N9sd^OzbQ<~kM zB9fL2`$-t#g)!>6)O65nYi(ui zia7&FHk@SLoj4AQUt`FT4X!(r5pGt*DrvNaE}@7rp~doMu#=m|c5a$(O>{z#OKf_8 z=*>?z%upjIbCCZNrf=m-$4x;&3v~_OXJ8OPc&hRoB0S$tlX}B^t@#Vo`n&BymfGpJw4`#;;PsGXP%STt^dN_d0`z*nb=5<5PLHCtf0`{VQ%l-Z7i&Rr2Qgz0z28LTtdB z+lW&mnEAM%2YLk|>zfPsE9eS&f|S3V&C~eH$N|d7Z3TN*k32e?ckn3I@IGMd9kW^S z?7$N2U?cgI-;Q+3 zzH0vVx+?MK7hH*TN^PBt4$?2we2^paftMU~`w2RxsIo2gG%(=k&*`Y#y|AO!VvS5f z5``O3)oz#YRW){3tJbAV29!W-Rk~_Nu!(lEQYKu%z=E#?}yA8=0^X8Xf~5I#9uE0LKel@ zT!Gted;T)|g7uYnmJ(AiBURHP{Z6&#tx5<~lMWNSuwt?Oz$@Bev&= zg;Bo6T3^;l6P<2h$<7X5dc055wu#h259V8;FNDYP$!#LAK8os02$#3P-Z2xDLgY<} zc8|nqeE*iz|AoqGubAFfs_Sy6;I?*0%f60Qej8jO3@8+TMmj++I+=@#?bEH@C8Mcs0zYX3L|qS;||i z;Tw3hSKuLAS(HmZlH7GaQkbPlRZW~*B?gZ=2hk`8u$7r^B=aue4MY0TlwUB=>jpnf zH+Z^z{utl}M{gO1~5N?ia0T ziGy7pZhuKh-_oN)TEx^VA1FKGAfc>SCY*Mel#n;JdoXuM1qM(9`#wUu&fw;snr7U- z$p*9%7L^lHx>ve?aoo2D{n=;i?Ab#vmwsK1?L&L~NKHiPZ!Y~rz#S4}UrObb3Oz4L zy2!?L@pzb|5P3KY9_tG!82U*8eo_HfmkNHotVtvF!GD|w|FFO>)9_sR)E>X=-@;Gn zuBO1~By}!JCDjx+l^2-%Qv$;}kZDXqCIs>*9a!uIZXHJ8egx`(WJeXt|6uc*G_~E% za4EsF?0bdVc&oE-ci-ym8+qf(tABpk+n8GP0cyWvH(FYxdfD$VfBye#zhek{H?lME z+B61>cD2PJn*;ZY`nS)1$Kh@c|Ev8D>~A7wRgqa&Xc`5RCx$8F12(!ab~$_^QkwI( z#mxGx5$k@L+hgYJElBEIj7ATssJKXpKmt*?omaO?kDJ5TIX^#G1DX0CV zoK!GO|5cym`nopCEP=6KxgfV5H$aM+PJEuy`P6Fh7CjNQq|wE+bs#Mz6@Qykh3MPC zTe&rHm8)Z)sj|6G>3aQxk)X+DFUjT{vRU)BD#{oI)1YB~#0(age|`$giNJ6@O8if5 znfF(KXKBC^UFN3*FaTgisS)GY$u^4Zgjz@t!+?-Ujt%Yh1e-2@KbsL-HeJ>nqB4Ju zZ~WhBoFh;^kom=e^RGy$YeWaa`6mVQo)|DvN!)`t z4!E=|Qe;Y{PKCu|oQ#UHAZ8|^_UBN0ZNvEoQm`y^LMMTY;eLfZcbL4SWE!*g`Y9qa zE3cHA)n-HqgKA|`!D9aPD2@Jh1nt?RD2I$UWyULP?{Zjc zlotv7**RR^m8w}0LFraEv!ZqdW)fnX2R;>_UyESp6BtE=2n`jZ08*v+V7(vI3x0@# zZ>uCx*xK^)zru~rw(uUo)aSC)_}w$jNG;3FK-KPCAI?B$n$v1lRHyQDnE>)S!g*^W zdD}Qu%x;{VTA!ge7)A+6ghy&xWdI$hu4vg{Pc9}{Tno64!R|Us_~dP|z{J0vG{ePo z5M~tn(ji{MpD#LzZZW->?s*5im!J>F~*f6H3)Fl(hTnxGEi2 zkrg+>?glIAj@NO+vf|3^%{s1B$K_=~dH^lXtX=h5%H zDMG*B?xW~uM4;ahU}SfRzY*qKd~dNm8Ns$LW~6>6jS7Ya43fAW@*N%pQI3F^7ZgVG z{=s8DZqHdf&M?Qt4f7!ELcuP3g_o7R*SWNT#PTnkx78dsyYhng+{4$fa%kYbw8@Z? zd}hlmKcDkIx;PuL?C$yvAb2F71T&moV5Dx9t}!<>vz3FHz0TKfPJ9MfOu*14O@hK*c381$-^AoXg= z>vxLbpLS#_)wK&+^&8xTnbEdSx@StjgU2Nudi8-;*p~`Du`_RD(nHeTu@zRN5>r1k= z`U()LNo1#_*agZD?5#3smWG}}CTgv!^cw@YTY3Glg*e^Qa31XKkl3F{>?k;_!% z^E&bkiJU5tV{$}dxKc$vtRv5n;iXa{g`>NA7(QJh84B!r4R$q>PnR6bcO%PG!ec0=*XBvK9z}lO-1gbBd?Um<(bGQROB~ z)InF0$mEWk^f8576~wC=VmSg`_Y6FDbm;G%pU4K~Kf2Fw3o=Uq|3ODSis00Jk{fdx zG43F|R7c+;(M2xhk5LIP*D;qcTOgIa`hoZmVg)ycNcR{-U<#TyZNL~>07+taF5RYv zNl$>KtHwBWViOp%?knk0kx!QFkf*l3I}~)84bTu@^!UbSMYs;1ckX!|tbqnTlj95V zGylu)IO0y{_wv&@zR&snC)nGFdyL;@z-I4Ddhcp$QkgcXtx4`XPGQ!xLkavN5EHNk zjdEGmtxQ)4aDy3pWO*ywkn5WnBn3e27a8^(G`I+R%HxxYuPOA|=c&NdVE8O69bZ0s zj2lH)%!=a6XCJPk4kpt~R54%NS1eH|umTKz?EX^13m}@TAVh6E@>@2_S|h2`syv5Q zYKzG^O%G&`F*A6(gss8m`}t&-@C9VzLSFSQp=haOk6$HR?Pew?3mbrJ9M-I06L6axyQ=f*jATTDcH(94 z&}VO;d}oJAyLj>GV@{dKU1T zyLw;+QpHs&+5Q`0DdZ&(;TAG#9y$QZ#f^U6TVe)V+d?A?m)p0BA)i}&8l0ev)?XL>w=t=D z{364;b(V;oE%M!Zcm36}%rA*$S>>$5V~W2J05*Ttv92nNO@BU`w{}d+V*!B)t}MWV$_VK_ zphgratSws`D_hq~z6`ev0uc8lf^fa~FEOUCM^5~j8OklF+5lSL$ou>E5SFBNu5?pQ#Z8Y+*)1*i;&ZxZ}dpWyEx+qUi^osJB`!>SsmK7AHRkCN zT%@Lgv(V1WmSS7Gtd~~-hFm+6%tax1Y!)huK!Df$WZ@#LU=v~-}|D89vnimg6c+x;6 zsHTMEv*p+xOyeNODs|W%8|&Fhb7B9HGGdz>*5MWxV~KK!-F0(p0Y6Oi#}+A5JQgHl zG1j?Egwgee9ywPC`%FJ~l)B8*upTODkbuUH0x2pxxwFF7kI}q$XGSV7?|1bWv57wh zA+VqV9!FO*2&SccL#>H}A}Is++gJ#0c5|4aa!6DLpQ!1lE_^Dj+_CU!tGR^?pyxr+ z)R6q}s#3msB^$1jIfPBsk53cS1^tH{o*d|As%geLZnK`Cb9NMftLMcm|k`B>o~|BwSw zL~zs!3xx{yNV{YW(WS`9Ol7FmkZgHIA~bjdaWZ_dp~+DY`%OM&0l>Pq%C{)Ldr|iS zfF97H@LN;Ka!CM4seIh-eiX+jR4X5XvW2Ib3CO}O?Z!1h7Q&;tkCcQ`8ZwNSY&!ez z8-#|5W5%|%m#TCXk@&IgK9N#HeDPysxgT-On4HkvR8k7S=BSjJW1&OFNgdQ{m`I?j z(8JE!!=hG`q5^i&RLgWU76%e0mK~E~yq0 z;x<6tcGUnE)~E)!d4JUabu>U5>c6h<;Et{@`IAmxCFw_HrTrv0}{M9)68MuBGMOOK!-QVQ;E*6lM$EO!84B zA5t&*D3|Usf>grDrMwr*yVhmM2r2mryp)!6Ce#u_mPoxRIi2Y4YDLJ?Gxh$ODX;s) z?&GCe((sga7Ot82l4j)VGR4O43~<@_S>OeqBNUk14Z)w@CUPUuF0 zVA(oGW8uXtu4TNHgEv*;Ye?(gBB`-CcznT{c9s&`W=r*|R7L(MnAHjT#1XC{^R+Ru zINS$gP!yTZFwwBIn*aA)S@a}16vseqq!7=PgP-s!niK?_i9p-|E9Y9lD5C41+-l6v z2{zv)?V-Ew3TIxFy{JqxjK>IkLi>7|3|pxjp7;!I0u|@MRu`&v?wfjtV9#*a34KA)m^5UY zV(X=^wC4BeAmez<$tG2b^yxd59EFka<6tAcJP=FU3$xbG>!ne!?Jn8Kr%4Ym9Z!E zm!Tr+H6itR zNh>hwV?p=2F3V5JubTYi7{C8ol35+*u-&`BLdtV7WQ=eC0k#>D8lUTgE>;<;GjB(^ zUFpVCqznMy|3Z?b{GT47`qOZQOrue?pQdy4YCoBT*rMw+z9ZAMf1H`d9JWBhRqa3C zBE?2^n#Dp&bq$=g9me5OI_Z=MLcY|*d@$q3LzPE$$umyT zjB+qR5%HPeGRhe$*BYx&`A^zn|1nRnm0}&!t^Id3`NHXZw##v4+@*iVf6%Z zAuZuIR&UXH9S(|DgcT&ml#1H2#WPE)3_(YI59_b@-|^xs3Q z{9|@71B1M1HxJeEvpT)IevSo}N`_fyMn5n!xiBo`sme)wof=vrn5|9L_fF_i z#ibh%^@nk3&i$l};W?m{{g)vH%AedB*r04qe38|cvZ|SWwfx_Hmzy==8kYZTaHUH~ z0}P;6tZ&S~3qVGLHB`%gLN-hq886s;^vA>QQ;y5%E)v$uaL3jWFhkTu>Y6?uFyWmlX?BTyg4GPMWbKpp+4`(#2U0i)sW3@xH z&?(^N><(Q$eh!CV#&Ge0VZCUSy}{;MlPYy^CD-^Y&S{C94Et&N&&#Eya`zX4?qvxCCHKp+9n`)RH=h;-^z_;&+FeH}!ZmC0klDqU$H``KSdzdO}x{}}SQAtb{P;KZ%eUVr|7Yo}L zbmo^xDZ2}-{1T_#%r7CPv?9OcYK~zLy+p|iyt-p%avKg{b|?oh{~vqr0v|_J z_y5n#?xvvxlF}AJDX>7104)vWmJ%*Wo3xvfw1Kt|kW11{(oLJoHoKdqrL?o8#e}6A z6(k~RRMe=b5xInW3Kdd72#68{H6ZFht42f!$U}dh?>V2@-Gu7H|9SrZ*Ykh4wXJ*a}ss&&M&$%D78Ah>un*G#0#dvC@%exG#l@_%=RbSF|h5ta_KVvV% zjKuThi9NAHv+pf7=T`OoF6Iq%Jcb7FF&Uqnx(jVd?RA%wz4vk%y2omplKqH8)uew z9*MP}VexW2vcGHpAZ*57##Qj~;wPk&KJmTy?0e;PSv>WhtJ|Yy zE)h0eM9vs2knBp&FB6aKBD?;9(WCm-3dTCg6`yb&E>5&(l_y?9qo=>LQl9w0d3_dc znk8n;DepQw;b4iRXjyPc4wih~Ipfj5&e`2%o@+7-*L%1Ap>TcXw$UBb@tZ z&OHY$Zg6osW6imLUjvc@Ye3mp{&Kr-)gOix6RxdgwUMlXGy1%$1b3Y<` zN_pa{%<|y1Ir#F@etdJW3&kL@q%d0G-8w~(xiu53+9FD^-=YnhF8$G+Gwc8&ji+wA z1D;ss885(_YFzXJ!He)n%btLz0`Dxn8_iBE@h&vC9*?h4E-dzLn^jVH+?JUog*D!7 z*~J|N`(vKsuAH5V%;GLfJ_WyPM&V1X4;LrUTaZQJc4qM$-p+uhG;{CN;toG5&+%$< z_e%5#5#xYdfGVZuE^FX0!BoB@rLg83zY*w{i%q2(-oEAhQ5K+=cl@5i+69i2i(bk# zS&6Z|C+&aQ`OEb(>pbHtfrKrW1cU(}ti(eYo}t1G-mSjE4VharaC7jNh$)f-OAYVY zzt>xmDD$cp+wg|lv(EJC(zYeTC!vyW-LYSfFeN+pMJRt|asihw{WuXhbyp8sYdAmF zsTG-6i7PDDF)qiCOoNCa`Z?V)pDtq^bb;`P!7%1n@emGXa1k-*#2J`$nxouv`Uok7 zf)$mQ?$il(F2)QC9$|YDohNuG(+VtO3m$pkVn~H6(J2zRauBEB#QP(u*b8r|a?D6BQkwcxhs6?lz zy_UREa#5z!B*(gxjnox#LLbvvraT!CXZUP)*25p|cg|5hDOXsnsPLayG&AvOl)zVF zZ##SOp#a@kL{?n$xO1?wixp(L^qGIJpP6<3Zi_vg?Yw-*wa0lyAD1L|FDuD7IgcpA zZWV=t0t;u!T85X%>w2-bQLd#(V)Qw<_ubSwKQB8sikq$;RlbykR3F7@)@D4J3=pw? z?an*rRN~eX?!olSv|d7g5BChT2RnMb(%-v9UO+)dei-h`@nSCudp_?IXHPTnVyGW4 zgXZA2aXwxQ^+Ojy!$zPIx(K=&x-vVb(?mu^(P9s13g)pl9pFga8m2=34?$Y2T&#`2boyqp{s!*;w3W*{0ePmM{=($2EP zq9U1{%NJ8z>Pzv!uX?@6kLBsR{k|_Axqs%;(hQOw;7k$v(Y)JbY^Xnj9rNg@0K)orYe1D0qc?T!B%BnP?Ertad3b|k;*-)9N_Yr zcow08Rrcg18h+GuXIGAdNVV5et#l2NCon>t(jh{@i7yOBnnq)*IyU8cW6Kl8{&^A? ztWCbLIFKmLmo9oiAXw=|lZw*%SRiq6fh=yGD9hXbLigUIos|!Kw7>gZBS(rZtkV>9C~N+t#B9ta|_x)%xJY zVCOIxzx%iu%|y%SoOq5T3RY5(QI@JW6Rtt&7gQwJLvwmjKFShrmM7k>z&mqzUVCRC zN3F!5+QbN+_mI0M{Zfi>r?F2F&;9R-9;zBG#QSMyQzmjJjHPA+!R5F@<1vX{H{LX7 z1a>PDyE|nD99|5FQ#9=biD~lL0emRqS>!U(M=zV;JOlUc*Pvjy9;HElK?AF=sWwjf z1nO1!39rdF&Us(zmkQTaYt_d{-pA8@Wvatof%|`01+uelDgN$r?l}y_cW1@#(2>R? zuUKaQmyyq_S1PETW5tFtEgai=EbhSn4xeIm&cadkNmkcdJ`U`i3J;vWOv6=Z49gH~ z@fAkATYS!0_>e*TLMcJnJFdmJv141VH+u)VyI7(vS(36pBljrE7p~3E-hpRc4QKuq zG|UTo#}JL|?I**Tb2N?w5;8|(IMdYr3apUUKMwsw=~5FfnO){whsK4=Iz8vSfiPhl z=5u~}pBsYMF>>};ZrYhQ9xP{tt(~yt3|y;Dn~5M~Z~vm4>N|2I(Jx1w+pu3IOON7~ zWUo4MGb%3L*9?^=J}h1MsqD{UvJr*n9rX>Vvfy%W!1F}O!dlZCJ<6%U(`7sq2wrJ= zok|?QS|WQrW#|y?ocYy13XuPhVeP)y0qhotemcjCwJ`GdX7`C4p*S}vJ_4Z zLM@TkIWf@hDt*bR(6`%WCrXh9rO$cy4|SE|HMebh5~YvtA1dqEJ!9|o8%tZt6Q!3` zB%bTUi=j7`F2!@J*h5QRx(&G`F~jc0Cra-#v5OVjmyF3VbVW*ElAU~cyb_%bJWlDn ziL!&(BMtWNDnp`oRXm84xc&pY!h-5kQc!mv@&u7gcuvGf;@I<#LmSw-EfMjfcX&u3 z_^xBiqhOvVbbg{u48mZVvrdj8O2Nf`G>T$~6>pw%K8+%cf^#8i-_m65b7tbLqZ=z! zoTQbI3`2{JhO47|P9BQk5N_h2l1Zrj&YketnX)NaV9|xxbGOuy+tpV<?IcMMI?UNJQSb`;z}?dspYPa`GiF3ja8CHR z5n7R)F=wh6pcS!jiASMZ=Dd%1{0mQh`*9=f$ZAGiK)NzT5a zSjf2Tn8I#t%}LqOAQt7f*Nm zdE3xlPw~Ab9!k4lOQ#yY$PiEuY>ID8jhN-LD33dT@5hzt(4V0CJcB_vTFH*hUSrGQ z<-uj%K=6{xvP9NF9mS_e-rhT< zEEvuVcosO4+4$VdIhaKH^ck-#ye2oA?L3Xbi^_!|V=m$qz;_1963g?PEol0XM8$fF z3in8Uu{TdU$#QzcN${Ep_RF<>xtsEfy%|m!V$!X9Vi?1rR^qu8>659&ttW?De?Y2Z zAKpj6;Bo{(Mz$fh6762RnHfE_BDmkl!a4EW&y>CBDZZq#^i5PGF`nj(;gv#MP|@<@ zI)nsA>s3^+2~Xx@uEtn+ZDuU%J&&XYp4!KO#KAlEv`>X)BnkSaW83#^x~%x!jGXAj zfrM|5THk#zTDpH2Z>>ED>jp9w7i(KR*pa0S%kyN{kyv|qo>JADHVCnxpafKgy>5ij~t96Vg++5d+#gWeoXXYI+;QXZ!sv( zI{#2*EPK1^Wd@hbC`+uC%H;g=NxWv#v2{jf_KwG4Ik518?ClT8PU6rvYmhy~3%BMX zwSN6Km0FlBLILWFkgk+a7NoLiOe(XBd?U0Q|9f>+Ow=&4v#tJw%75N-oJ>s*b~ z?p^I%qirtH?k?7c)LlMG+-byI-xrd}Og7o+&TZWU*Ag|So$7DOsJ?jdzeDL)QnupB}z z56-{_>FxDNr&1cGO6R*cfbrv)IL6~Gqr$|-N_mP}5*kYj2ULp|NL*6{kuRdEJh3rP zZv9s~A#vW-FV3AS)qaoo?NlmnyOpL(3Vj}${t=O~Oiq|QpS8j$DhVP)^Na=S)(@M`#@{T;p47 z@dD`$L=TG>sNTWUc!3JbQG5N)6D>#;^~9#J^26k`+lXP2U0QJuI5%b`Cj$b?qF3-euWh`-?DTUa{N;}rE#q=7{+0Hmt zNptP#k;Wh8NUD!;b&2$X@MNV5OalVr>`rsz`qQ6wO#Ab-lt23BCQv>m9t7YONdQ{26gQJHhvQKy_{{HbY z3Yc25eeIm=9oyhEvDn*JpS}GHa*AzU3?kP__CBPN1O2KiMUDES7r=|y!ivNV(i-R~ zTqhqfON?N~7$fJUlJWoSlel9N90N5h1ootJJzCf|rKgB`;+K#eg>P%>q4q{`@DvRugU;lG;&~HQ!bsoc$pXhXAkg|(? z$?WYvg0W7BSQFB~)4Dc(tzTl?c6A`JIKQJk(}*7C^omRQVsY@|%yJpxl%DZI1?Gaz z#R^F3kyAYJgkc7%fa-=z9mRWlQYG@yC+t-6X{jL6UGW$1e_`)=(peOH+NEj`lU9Ev z4sYbctcj;F+|v%7eW(laX<{@;)zX~`$z>sovQmT*5c*LEy6+%`#GlyUJ>wNsOk~Au zjM@&B;oMK&LbP^fWk|>2XIU%u$MS6ov(GM9D@BZ#Is$=MzluF+uQ24j#xeKrH;xb%#0LvH3vEXWq2bN<# z?lH{a4?ADir9hr)Uf6GKFU17%yHhfwbI@fmW!H=ziCwSkdZULHZ_kK&w@-=cW#ki& z@Aa_*Cv##*DrAh@{YLG?;u7qRskXBMtt=+$D$wOic+HOSk75UxC#Q_l60Z_+|? z&R5+8M>oy6_zx1@O!TB?ONYKFQId(fd|Vp6ELbW2m2_oU`aXi1zbi)P6jwmh))D8h zNzMzmWO}!HyYQ>~jqnLG{0PLG2mr3h6Z`p+on>+(LMl8m4P&=^zKu!|T%4P@c1FOn zBojxzg(JA*g-+s`<%#9EU$in8_lkBc3(lBU=6OC)_|}$8+@LEde6rP%d#>4dWfYxE z@18}8k{s_|5ANFOprjH`2TI+>OS^w}>htgJni8FX`+(yUKPv9(@tFFat;7 z3N>Wn8u#AIM-Ac)aG4YQ_?8wPx&MqDK_3MVIF+CpA;&Q#yURH&ik5fSDFmd$jC*S+ z5Qh~HVEk=3|A^qIWON{b8+~0So<@Z~nC9JiF_ugTOmk+S4aE%5&H94Lw%DDQeF@D~ za$a^FJWS5Z?mSM;Hfdg#^S~W7nHVYiz7NMw6z3q9(K|s%U;fzh1{3XXhJDHRE>m1N zM@a!mJ)8g!FBc14=9|BPiN0p&aO!Vq7d{m|&Up+*_O=`}i2+%zF!8j5*M4#LADz2Q ztPBVuA(B(cs{FZe{bz1kTsOm2GOpk7A0V#s7{#j8poby(TOjci?xQ)6d_|n#6Se`< zIeZTG<>d>M#_1S~;mZsN#E|psNm%h{Ne&W6)nge^u_Wqru{R;@@T><`j4jJ_=13qq zf|i*Z=j$Uq0Cs*y022zns9v^bO3QayBB9Z2j$ZdYgL`BuO}cHSXXVo&8KUYQ%j z@yq1+$#}yq?~p6iZs{l_p3r+Cdic9mPIQ`lsJ-J&BpX6mmA}8TNZx*u7Pad-N50dG zb!Cr`Y#PQa63&Wcw(*?UQSW*(?>CCRjHaxsVsvj-qI6UScO|>JN=Gr9Ig(htJ5e!+ zxwBC`4}!`5v(W#N~}e zIMJJT*aS)*%z8@{T z;VeCnwLqex()kUne#`@yTAkN%UAq~ZUY^)tBQ){~M@87V3}1)t#$w9_GIpJXH@`maQLw^~h9!`g z*&>OYnDLae^+3T@an#}cEwU#qyop09E=N(5^uZHJm(N6fO{QPR!x9)glCR$1a_&$W zJ1Hga$D1^U({(^2-0#yqzu7S1r1z%`DkmCbC0(5JuMCcvXds!VBj%f6fSl8ZPkA*x zz9w`6>gCGy<^bh6RP?n1IoifhMp)kZWEFXY^YrL`vH1#2$oJy(~&EruSp= zfw4OYr%dIHGH|9(4hG7?TPj0z9RH5V5JWMs^Tsgzc{4f_WuE&5Y5P}VU!{S>0{1V9 zRF@G!Q$0x4Vbm{w$#H*qVy6w?a66zKMKkPN`n&xqEhYpUg*uGC5GKFzhdN%7_hhLb z&QL~6^EfK3ko}H!j8Ye?qwRjx>z_p-^ZuCd7yIq1GaN&YMy6W$U4cMeVBxa7*c5oI z3PH-_PbWRboRV_>pLmRSuVj_O_Ix9DtaEhDNBf_&Wz-_x()TAz5V&^EF2f8}P0OvF65DIlyry9zjqi~hJ*RNYNJk(TLkbTRb8!G(` z+r(SWnlYU}6WhN6c$XTDp8};vgp-}$FHO2GP2VnNjln~&4fkN}r}3lr?}zFC-Tspl z7%9Vm6Wb7ZFZmr3&x$GYt)xS$gZMeLRGa6Lr;+E8<>ZxQBPrk0mhB53^QKbcQ1A}xlentBWQS@I6@ZgMyI z0{I5{0f`A`l^(~C3&;z|<>VSNN`9978u=q~H~9kjTkA@`9P<@$WH$g{~+zc?>tPn$}I?u2t>eDBK4_ApB@(1mOpATG)t?;&^OrEE1JHDHmZB zl{Iy(T8jTIqHvD%!*af)F0R0OHu#gRqGEn+?fgy3U(vPL=K3qJ`DJGlHaTnr0_Qe0 zohvz|x0NU@&DgC#x(io9OCT@9uN34}$e$Rv1f{S6T#5XXAZvHEP}*PZKBcuk5%{5P zX#b=fr;foJ`rkU~sCz!wwR_$eLXkQq?w7%T3HK8Cyaud*mNYCj!iu6Lgv%IDq2xs| zxE5RqcVTda5mfP7j&x{)F2QlhS?zyJ`6~YC^R&XXoJYqUhk4#0QcG|8{0-_{azvkB zWxukZ!;x~Y!xKX~=mMd`6-6kT5HD#1^rpkvl02rvJK2^S{)xwn5lY!AN!hQ!zxhbh zTKsNGi;o~Ty$USn_QL~Re=2-u6$Dc6g#7~`+ck(Hx&YgGK{QT1woN?w^ zXP;BB@Z7@l&cEQoqT)r1OG=k44U{drsJvqNipq;GS-A>N8dhC?#iy^l>gsE%Yt{s7 z>+08r8rH3EY-(-^Z)lA~V{IGTH*LOl%XM3~sWx7MGJKS7m)v$Nf40^KF`V7hGN_bo zj5RYU3DfKApOfI+wbi`bcX3vD*GD>M*rT7s@tDJzGno(y#3w zL)}Y#EcGb0pSu4zZT~oG|M6NMPn|PI>vrmPYPW>;P|FOWYy;FEYH7Sk?GAEAsV_0k zHuCXrfpLg26(z!N)T2(cp!P)3o;0Hl`ceN{)P5BE5!9@(I?@Uoe%NSH)NX1~6Ka)D zJT0yh+W&&2|E>!ufi0?*hm^lzoHGdb5`q@gC%>w}Yhj}aN9Fn(nc%ZNgX{mo|APPG zYa3$Lit{xm&m!rN+O+?tBZb`bsX^VA@I`SgKN+D6A)FCVS^@FVk66^GEBxfN5MN#Y z&QALG$bG70eHArKr>yk$`lhVZX|D2@%a{Z_?+L33{VoHl8uA7jqjZh8vOZQds zF^FD`ANE>R%Ct^6gX@1PKM(AG2<~fe&VS{Po5HStsr(cFB#j&418y=RJbwI1=ylpk zUPW+3n@fq4Jd~0%G3WFdwEqi?Gn47@$x^oe02T$uapTGWLTwtWi&nHhWDLWhgi|3nIp4^mm^Z(t@VXEp~HK^7@LM3@6 zZHJsqT9g|6tw9-)HdxI4xTZ^ssoO?rg&UJDbO}0bLSClY8yT5MDoOk9ri0X{f8YM< zwm{0N#7RP+Tjr*JQFhYLcSiDj2TnifNr|r&=z)|O<=6`%G*X+TUPz1Fggr?$oj%gW ziVNv&H6k6P{gafCP)Yhon<4e6P5F@WOU$Ld9;n>^f06!v#70Vq4z=XJ)Iz_?DH$v3 zu)F0%%7$D~r6rbfy#rml`*n=BadQLf%W?Rk!7NXq$pit?GL8@m3|3o>HPd zo>J1DM&UXJU!=X2@}+-ME=%BlBXX+-=WRyWb?cm4UsCO>m`nPLuaXKYl@Vj<;Kzjnn}4_g)+7RWo_jF zY`Ad|dy)zg+6L7hNI#QbjM0`%G%tkaj0KY(RUZM7QZ#{;ar?eZ|5P$(oJ+e zNY4h->p0_j{7LKCY+$t#Y^SMzhVoPUpnoe6vY_%wu7UL`T`$EkDMk9Kve-Bk|NI{d zX*q1IQQ=A-7X^b6WA&;f^9pzp*+2d4@>2JltCyE8UQv>i^6J{4+$D3jqoHwkA-R2N zlHLjJ_Tk0SXD8{;P14Ii(MxL@F_$45G^U19x~#b&+ECMoxuM0a*bCM)uB;2n1XHQ*p)YQ& ztBKZ?w$(L9OWQFyqV>wUrkZf5rL|5S6My09su1kfu8h_M*DuA?L``!P=hybNQMje0 zaaBW;ntMpvPd^BME~{yXE@^3<0^j8-nEx&Ff`GO2wn3uD&ML7{y#*Nkc0# zsin1{E*Y-U=2(-S1}txZ=XDV`|5}>DHLZ0kqpc0iYjF(cFF}SPi7`{CwRRw(&|0!6 z-F$VVu9fH3R+rZ_>B59?l|@jN8frggP`dLO^^03# z&C#>ZRQ6=XGA&IOZ3@&h*EX`KAwU0xxlX72ey^Gr941xb;U~kkZ?NMwCMZ2O*f(5n z&+z#$L%Cze4m1S$`F5qJ0|IwQtE%n5Ic^Fsfe-n=%SOqY1{O|s4H$MJvqW!p$`ez!S>|eSM*BhyS z7Upk0$v@Y<|NrQ`*OC8tzPkCJH>qTN+@>7)f1w1J@#H`A6K-w}3a>X)|19&9{d3(P zI8Oghj%NPb^6#GKU-J`2nAUQPiS|EPY*V&!jMTo~GtKl$V8^fT*uLY2&vbU(n7C=@ zXFu2d`7eC&=3BmWYtNT&`^xQK{o2=izwym)-SO@3e7Em=-~Yj#Km5^;`+suRPw&3x z-unjbf8fD~9)9G}!Cj9%zWZlSJUO)Isi&X$`LoXrKmWonUi{^+UK)A%*RQ<#o8SI! z^tIQ2|HdEw_$TMhxAyM)^I!ft_P4kH{?0$%eQ*5z5B~Y#e|)sx`0q{t|LY0fPc#Ai zKOO)7>GS`$)Biu4fdAL#Y6AX$I{qfU zx|&*6#F8yU?cTo#Q@i&s+Ns_97dG{D?cC_3olnpGuuiJ(s$GdLDHV^?d38_1V;w)aOuF zQM=>rYU+hF4^ivc0K*7VUr6(I>LO~JTI!8#oz#o9G`guvsC%fFQ1?X>(L0FU^4KP!~~8p{}IPq^_nuh?Wdka zolkufbrJP!>PqUPsjI1vp$=0YOKns8sk^CLTho>Pl+)l9g=L)Q!|(>NvGcZL$N>P3@(2pVx99?CPcYK{W5Do=QDPokcxNokKlJ zJ)L@tdIq&|sZNi>sdK1jQTwTnrY@kKOC6vtq^_pEfI3XQnA)aZPu)XpvP0EJ?WG=| zo@WtX z52CK3o=P2}&Z2Ioo<-eBT}a(aZL&kzPkj*eAoW!0Vd`1bqtu1eUP(Co_62qx~J}O-Bb6u_UCH*1Fn7Q zA=f_jh-*Jz+jm_1)Z?yw>dY&2{LM49{aosUsPm|&QWv=P3$*=!YffF|nxCi5L#{b> zyK7#g%{yIl>K<2@X!AZ-2eck=b-C6KCZHslP|v zOMO3eKlN_vLF!kjhpF9hz$o=IG#{gWl-jsbr^gU=0n^JJC*{!mD>ToeUQg|g%iM8X z5zT|HImhkpxW1C+ECxn3^>wr#roNBb;JDA72k4}EDa~_f?xpUbd2(Ds{TZ73Y2TeE z7@#?ep^-;(civ!#=HI0I5o+A0RGUNXj+@4*e@gSrt91JQfZ83$xZ}25nkQ(U&+|{A z&ZD_I4lAH}Cd~_I{w?YN_0OrRsPCi>QSYH{r^bC&wRKWIK;1+AGwMF-yQv4Le?>h+ zJxo19eG#=oJxD!H{R`?M#_u5N%&T?!Jx`rWEiY%wmPh@PmPP^fQ`7tsb8kf zqkh7*&-!};bpg%YadZ*Q-Fc4y%^PXoPjh!3rHbYung^IaQ>jBVFQ=}i`_rh~X&#}j zr2B)ZJ86D1br1Eosr#sZL_I)VK|Mr$FZBrZL)7j(gFCO{(7co8?!1RPPcu$)cb=h& z;mxA`%xawwvQ0LLSp1Oegv(y3FKh@PVZ=$ZE?w}r_{qw0qG{1p*h~|aV?KIy`9j19c zbtlcgO5H=fk-CpMMm<2i+I7$LK8$*Z=3k;7puri z&X29sJ#;^VI+x~`y6$N{lRA&)mr)l`_fQ9@Z=$ZE{yKGtx{tb#{vS@=PV*}2ewrUa z-AVJysfQWA^Qe1hzJt1t`n%Kv)NRy5)VEU)@_a{9kI?+n)CSLYJhemfTIzA?N2oJ{ zI=vsK&ZX|B&Z8cnE}(vz8f#D5Cib7C9%A@rQCHFYN@};?{(I^W%^#z-sUN29q5cka zKlPWXhk3rEsE25N8}$hFRn(nKpEIZ(ns25aqj?eaIL&XQ?x%SHb!M%OzfC=n{Fub#=^JsoGbpdrV^(gHhO&y^5HPk&k-&xdEG~Yt)-dFKchiJZr+M)l)P`A^( zn!20*pGnT`y14`)OS(m zQGcJhfO-jafI3XA-&Qm5_46-1i~_e1j^8CopA`w=y(!4@;i-l}(<3)ztRt z@ieAv@`SBy^4z$lZfWI-PTAzyW!dDtOxfi9OWB&~uRJv>n>-7ysqM?Nrn1TNtg^{F z9Gxkpw=ykJdrG$JO?bBJX0|#N%rjKS}5HuouDkBqik8e2J-)hk3~JV(iN%z_Yp$=*7krG?(%*4{tACl+<-fmr_f4nFrr4p_Xzo&sc(|oAoB; zMYL-!d`RidxFiJUlt=x^G5|M6aN^l&g7os@XM{ zcOWFb?)jyh&4Y67OL-IRo?ptHgvYfnEs_+0;_yh?maXkVTukoO!@`6cPK$he&5Ql8~}Zu-`#_?0HlFXek4LU$?c zOF0+qrk|8|IiDLIDfjbWdpYe(`Iq=rP)j`!eFc8Y;WnCV7bM+MCHCgQ zl^c(Cl`bj0S*3eQOT9|BFZD~xm7A_o&!il=`6l&E;^Bt7NyW1w8BcllBE4Kly_E2| z=_vJ6-V1ljxztn9ZoQEDD%w52)LY4y$>|{VIKBL=QSnZNOX_!eIHjJaYpL%OwXPp- zyrll8n>VTaPx&wHLb`cml7G@pNW5MDf-0U%QKIxF?MHe(>UJdMqi#>6#OajN?TYxQ zOV|d)M^a`Hb4K2xNYBS6l~2o)>8#tMGQ%Bz$s07%-njKet~-+NZusPV6FHmPKh^EY zqGZ0v^(NiDZXZ(S&C0*@_Cf4drj-*(zm+&Lv3%=#oodI@>%n5x#x|-1)a5Ky|8+TA zluYmRa+B`PO}A3ST{fLArOEQAuh)TOebVVvoD8>4r{ZM0rPC=@A9Xq{PS(GODknOg z>EY1fPsP&>S0z(ehpRkUZ*;g;Cc~-2Rh||O$-mTjb-0!$!|jI4&2Qb_E=mh$6Z#IR znyb%Wk}N;^{1wS|z&(GeJ(TmO%9}pFyx*obeg0H<*QoL(=bxPaIvj4!>Tt*#J$lpW zUzRL~`aG3MbA6r)=B`|qrJNo3JkkQVB~+hhRkHl(^Q78IeI9wcNN?%>PRv(%>n(L< z(*DXjN$KHVmZqhiU7CzfMD=7+S90zC@}#*A*WyX_ba7g^bj#zGEbZQHMRfmC(!*_k z-Sl(YTWx{q6>Ly{hg zlh=9ee{ov;#e8+LUTE`0liXKMGQT)kK6H58R?`jN%H(xhn+MX$ft+u7+I3%aWitM$ z{=L4^OSzCuUsvVrS-t6S)*wC7^%`8A({(L-sct&Sn{Vmn4eX7(=IhuCcJ+Gpc3s_w zURt_)d8;s8OIc0V@-}6<-Z05ru5#(-a+ONgZZE|>|E9F~%GFA@=E1afTp!WDjWBn8 zka5I3gx>XE_n+O-mGq~j+{inGdeiO68u%~|SJsq2x}Pn%syE%w4kpuC!ZHu3?530M zch{nqqBq^niGS%jwLXY8m)~@AdEa)T)}st}d@v8`tj9yTA206#>P^?T8eHAe^_paO zwYfXGbnA048Gdb^ijUR}$?$2tE}73-H&60EoGh2x+#NN!=aaW`)5Di4=i2_}WI5FJ zNlL$KU+RynjF7J7t<;HnviU^!wUgZIHD1IAeZEwFYrQs^e_Dr<FZ;v{J7d}hqRVo*MGTwHYUrXHgCdsRd2caE^%zr>w|knz35U$0#xHuN}2-kH^#9>=+}4>AuS<;$HF(eonm zF0>mz-EVbgOZ0rnJoJ3rc^p0dS({8RJziO#tRH$@kP5%sZ+DM~o`=@MO+P)pS)Xjj z^|;WT1(Ep>88^DKBQoD0`I)MZdVJ^3f{3|{8{D&rmUd8n^`^%q>E^n=rOZV)CCi^4 zzsaxO^tj%gEzE%cF^W9k`F_-hF+ZX>+?SUSLrNX1<3EWvInTL_`F7F%bO>6np zo7*pTTMSpbHQv>3jnwlD?yQ!c*O~|4-S$+E(^BEl{qR)%(K;0$t>ss5dS1ev9nUkS? zR#E2RB=)KDqvvtl*+wy!@{-C=J#QoLwChdJ^MsSvZ#@pwzv=0demp(CdS0dtq0pP2 zKS_m0_xGed(JgXH>k{i~*S*%EWO%fe^&a%5btKt7XdO*nKlOY~>in`2S1Ed*dJVx6 z^pne#M-^DL4{!Z0YLS=7vEjYnV!UVGR(DxLb8X8;(d9J}9;<8#$JpTExV(S7V$C|d z@tpQnuzTMN=I-0t$|JmfE^n{%eQ~FKlo85Wc42@Wzw>z*6@&36J!+xeN?V`vYw8V-t^UU#GS0gQVh3^7|F;Q zB6S#{$vPvl=0+V>SCFkG9E`3(^_q{1&-~Up)is~r)S@Q7=eO!B(tNzhU)$1Z%s->H z8Od(Uk3>|}n2!vHnd)W;rIre1c6xq$!8zjp{2KI|YijU^UT6*4ks7pCwFq@BbZu=| zP9&6)2S%vXB7mY}Ym^o7N|{5eLRy1`6S=&hq4yh66kw+=QrFB2x!zA6Z)i##UthOr zZC!IsB+>v!cvW2fn&nK2I0LA|2CA^NhIJ!^aI9%WdcagOqS=-Tr#jxI!?^}8sY{&J zMC$R^iocCDQcTw%tZSm^<3@2T8Zq$xz4AY}W}^|T-5`G|jf0IrBdC|{1nXs`0dTEq znuCp452F!|u>}#iU{gyQl3Nq5MavjKkyBRULWmA5z^k-INK*IderY&g~)46Su}`q>=7@OXjpr=_Vu zJPHaWY~fggq;GHo*6wNzo*^|i*cPqbuppHm)N(qtL5FJ>Adx5NuzR@^_b}J_Cssr^ zO!QCm1pgwF{EJMo51sCRq;^4MvQGCe(y%}!mkJ@yFM5J`WRf{_x_=WQ2=^*Nt_7vj z0!*C@py>1fD$NrFH`W^XLutXd5B0hh^;s%nZ9|*nl;K!JsJZ!r%=jX{Tf{<>eob~N(V#QUa(O$ zNcB=ES$_0>ouP=3D>kojsp6vi7B^T1Rh!2&(aEYuVbkUsjrvSSfGV+yg?^IeS;2=qB^cUtZ&dB)i*G0 z8k(>wthj5|=at4zX{H&pBwl?3npu53wgv&IhjaW%@(Y7fKf$_Ygc@vIAZaLsZ^E@m z6k)TbDo4=LBpCHN2#PqBQQzEv)nkM$BEd*aoA}opiK-LnV^KMo9E;%O_2HUm4LTq7 z;nq6I2t|ahKCBKK^{vgd4b4$7f(1@+JR+-^2pd$FMHp;}KyPT31gJ+c;7^|)ROJkm z=N9DnLPeD%(757I!)v8maiBiRw2Uz?gsfooY9IM56uXMh?YIDnA86%Vo=Ghi%ldX5 zf%Xow7j9!zjesWwj%aX46Q)K}}=@$1<)zxcgZc}bStPm{6+Zw~Tz-VH%tmd}1 zFj{ArjZ-Aw$<8G1uV& zwGJ1jbyzrOUGrvR9YV4WX}qqLZV=~n@TIXPq;9S^)?oBdTf0HVN{zKm?Ll0F8*6dr zvkv{HI#u*Q=z4S;P-YtIvA?!fiV2AQ2JSbKO*&l~TY_pjt+Az6C8SW|D3mw~C60|P zx||E)z0$JMa$^K*ilJ3(#Pz?aCbAwaj}9d4P>VO%Z&z)q5K$AY&LdQs;cjYB-4{cs zjx%GSlNXLAtOPC<1dK|x#5v`!Moypzhahr7QRS@)1Hx8|&Na+%UEQFGyi*zp3x*nT zRw4ZgNg$vbWk<;4Voh{YWW9=(c<*Wnw%TCcj4QYt7fP2#@3VfX<8ZF2{BM?m1+CKz zl*=)+${V3XMi`Qaa1-4~E&JkFC;<^l{t2b-De82JF)lI2WwYu4i=A+!rWXA-m9{Yz zW!V>NLLCNB>5Y1^sb+M!r73J~L4O|&OiQay7f_`~OAN^v?_i!!A2z8hGa)AjE-R42DnqK zB{z^_ALbFPTBTx*^HJ+jjMi(T+WlIzNMgPg1xHi6$0c!sd(q-PES(dHzYqzdh=fr@ zB*OIzR6kUx;#6M~l;K9$?YO9Y6>uDr6Ju>}#VCl{tjtkcHPv-HT;Hrb3D<|!PPo1` zD1}$CLAS|}uEy0@Z!nK+m}su9d||nmDf=MGT39X|5*Hy#j-tdRB&|qGB&POZR|Ghs{9j;{v?jKtFpz$O=)evT>>mR zCjJT4ad@bXgX%cQdlLF>jz?vurV?o$mW?JM_TnK-~Elw4Ajut7_DD@vM)mb7e_ zs}bg!gIHTNs0VDIx^}e&vF>MW6M9lGuMMkdmDXA;-UxqMYoifq_Y~1swPN6cKlO15 zbpNm)RsFKo7Wk`A0b-5>38jhIT+yi5n$Qv5f}>Sa-BU$`B*H#kqz02D*dplbMUZ3Y z{!8{KB1npoZ*pAHK2oO(s!;kmpjcO=R`XyuF4H7(T+Pi0sb!i(j>|NOqFk&+O9vKI z{bNv!MXPH$sQR}N_SqurXGTJe2L2?dAmR{`)>HOl^-_Km;X{Od(a3r|hC=5>^;0A4 zld9wq`#PBvrF|4F8HW)T{%Y~3=Z_*$eWi>^f2ML zOg75#2@{PfbmG6BY}CZv2TnFBN*MLTq9m!>sNLYuJT>8{%{k!+7j0`=TQJ9p`B0TD z>00^GhVF+-6QP_BRB0kqT2HdI$&eNY+Asl>KB4AnH$b8>VU}#isC5Tc!XxHs^G(#r z3>BR|-{k6a|I;VLlzG~On9^wzVy<@kfuhp`sC6npN~Z-tYdzuBhVipXE1{$fsM1QP zw4T&zOi(;??BNNQ+%es-bOdlWw8Z9ieig`(L89o5q?L zzBr}g*wlzJD0^aGd)9`2mRt}u5ie-5qL?-=QyRlQ&6uJZU@G6VeHmzqxr{G`YM_~B zF3o{DPV@8uryLiJD5y=e8gNe1x;LZG*Ng&0W92WjaxQMAjTGwI#{IN`rZVF|Q|f``Z>9heRwKB)P8el4F zKlK1p!X;+70%>m4l#UfQbsPg#k!qhc4EuV(sgJ8cCyt?!Rrb`N6Iu^8m7R$L&bBZI zoZ>OIwn+m|Xg%=M#$qlSq1PL=6a%$Ur|Q45pBh+da}F%wLTMS8a-*K;zYJ6-nosmU zZQ!chy8~CaX$#l2HZ4dtA6hr0E||(3n#DuR)nHc><&T41P01HMaMVnVKeSfnsR5)q zzcgs#4+oIRc!(DJXg@G;)D(N7H;`gJap0(RvRkaoWdJG1Wp+$cyORN=(ijkGs^d6; zIu5GiAdhSNY5)oQY5)mN7(gnG0i&Biu68rX)oun+Cj;#23HH+ljLJN1!074;{-q5V zX+F_^cfhF9AC(_hXV{xCVANVh$a>RSrGpwUDvgm)n+*D};R2}Uw?H*m)0FfRje#0B ztPitx`J0J!IO2Leg0#?Rud+S)iUNVZ!_r?qR; zV%~=FtO}3NJ^$u9bd>ddck!@IbS#Y4(l9tZYiwMDyBIj(##TMvZO0`_?5Z2pvV*NX z*t#hk4X#mx(3FH`{VsEd{!tWz6`>{IyLvM%TXS}~N zMvd2u*NxvBZy0|t{)msJnwDjGEU)FWGOQ_9iy1aIn5|~SjG8gC%|x!^FSSLis1>u? ztc_N?waMCSU2a`recHOxy2`rRy2h%uzGHsZ>@&Y-e&76od8he9^Cokr`C0RGX1Doy z^9$w|&8P}TMEx509?eU}i1D)VYvUE;RpU3tZ;f&Dee(nJpXP_=f0!Sc`^~e=v(0nN z0&}5xu32cFXRb9vW`nuTTyHj-O=h!MW-YTWvdXOrYq_<;s*3w zwwpW58_ds`oo1JLqnR+jW`5o5HNRng)BKishxu)@P^I5_>en!i@%rox`=8d4NX5_k zE-}978?qimKK0`7DEmj|Z2M^Y82ecJc>4rg>DipV?2?d+c9WzqDSmUbbGbeq;U4dd>R1^#|)u)|=K|>(AC-t-o1|e2aZ0 zzEa;3-%?+|SLR#hyU17WtMD!Nt?*U)F800b4R||@c*duFSNfi^pR-52OT9CFH)LGp zyW01XeV4V_xYqD^wr3a~)6?hqp653>`)}>*GukpXW_-=_btXw6C~Z4^v+R_)VLWfYVE@8?(f+0VtF+^5GmbEx^c-Ro`W713 z`(E%h8n31KB<>4T$z7Q7tnr?ChFNDWwOXwX^Q&fid{cZgV)6^miz>v&c>JE@J+nQx z`M%tK<3J*VOUXJxf(M0_yjB_&q`G&B=Hfj43-3T04avD)FyP?Zv#)y)(T>VE@;X((P)`HJ%&c?^`Ntdp(aKB%k-4Ws6(1)C}KkV83$t zn@R2urOw9J1*RE?8PoA~Y16jsLC-GFW1h!7yFEYicxFRz_}uMeJu?_e5+KYp!mi|;z$R^K)soEpc)pY}cD`?>E~ z-*diU=;Pz^#z{S%8rAQ=pAfnEuS9V3^y=3VB!$Xo8M@GkeR@K$=~#7~N!54TaBghTYWvgHeVoqn5Qg$fp1xSk!P`|#8c{7;#ukmc*;D>JQsP& zJr$nio)w--&&8gL;^pyazQcSK@h`@2iGL|RWOzN(eKUMNv!1YSjrYXA9KS98mH6%P zug1R?|9bo>UvK_id*X+Cj_~Aq2I4=mer!GKdCn6s-m~tHzi;(h zKe2{A&wHkMc3auL9N!PDmBs_{2jh4;)OWGb>RWDveGkPSX1aYP<0Vy&eyM)3XkdoV zli``-$@CoLnd&*%ljZry>+`+seczkso9{c(=l2b+q}oT*Zh)o ztJPzD*}Bd8igmm7RjbfC&pO|_z`D>XvWl%m){)jM>nLlsb+mPib*$yLwpiC$Tdi%D zZN;tYtqyCuwZpo>`i#|Sby+uB3Dqh|zW%H2bG|d|-3ZIQ83QUr&l$tU^TrFtFN_zB zUmCwM{%Veye>2}U|8Blx{=)Y1J)+yGh)?90zb(%Hb%C}Cp7FcIkXIf`jXItl31=f;DDYDwU)V$2BGA}o;Fh6Zx zXFSdGicT_Jd;!JXFPCK#`5?ImVwpry7&g{-$?yA#av^L=TPH(-?_$i z-;2H`L$8l~fmgoz*^cLr-K{kqiAUigl(8*&9Bxh*~|BR=7X>*FWm6UJ^MfwTM}EsZ}D?~HeSLO*|;@xzRJGJcv2=O;Vs|1P%j z|JxBc-@d?>HQArBe{Mf(r@Xtu7xW$Cu{?Fimu%0|)-7mR#(aPB{m9erxyy5>XI$mi z`@SR}qj>sjjSRKC5Sf+C5q73=oq735oy58rhtE6^$;NLIAyW^k# zgk{0?;mg?hu5pVi|C?-7F?BsT#`uZnR)`yYr+WsC<0i!2wUf^OnBY2Pa&SiW|8L5y zdiXFEv7_>S?NGbzP&(b#63tj==^&(@i7rLtG$IZGWmJEPW9=h=y4ho};#zk1M#{cG`e zh4SQC)iQ5U=9|5*nuf8^%C-J%?lViQ#g?p7|113cTKPNT(d*O~c+Z{`p1YL$es8hj zBJaUwmU)PIsF`i%nA6O|%<1L~bEbK?d4!p39%;@pk1}VQN1Ml($C`fgIP-Y(1appg zqWLNFBs0%E**pcIKp)X~Qc?C#HRqc1%+t*IX1;m4xxlP2mzyihO7mj#5_6@wDrryb z%65rwrEisQweM2jWxguk<-WbfKI6~EUyQ#RW5(Z%w~fCW?->6u-ZkDc#*O!l4~%~r z9~%E*d}Qp$r)^ApE6Zad1I!F_ikWF1WKR8<|AukXq$`>}@4x?bzq%02C|Il4!#a;F zB1^~sSx#1xRb(|8BEzIj-bD70caZ($L*x)SLcU7ALGB~pAwMKDLpuC9WGrcj2tJ8 z2AwXMWDc22`pG%uT=GovJhFr=Cs&cxWQc4hx05%KH+chfDDjTWQc4hJINlhj~pO}$Pv;Z$4T#crYD(0&LDHi*`%M$BlF1uvWN_jm1GrJ zO*WEIatpbgyotP-yq&y*yptRt2gxCFm>eY?a*P}&jYh_w%pr40Kbc47lLcfE86Ydk zDzcgkkzul(w8>7go9rQb$v(2593ThDA##`;AxBAv+(*7cen@(obUI{_GsxNG9C9vs zCV3uNLY9-O$ScVZ87A9Fo9raJ$sV$o>?8Zh0dkNWBA+2&Bwr=pAor2)kROuXX2zeK zLCz-g$b7PZEFuGBC0RvQlOZxpwv#s5Np_PxWG{IKc_(={`4G9A93r0~UnED#edIgj zIBB%79*{X?F6k%p$b7PZEFuGBCAo^MBCjN?$q*SPqhvd|g|x}-WG8tO*-hR|_K>%e zcaVMLo#fr*069nwkm@4G*B6G-G(og1*`D6iE zLSEo3LzP4T7F!?I^2Dy)Xhy0NAwlZJI8Kj@gBj=K5lIM{n zWI4HttRk-@tI1ljk&KemlX+x5 zSwI$%0kV>;B12@Dw8>7go9rQb$$oN>93qFw5pt9qBR?d)QRX8#gPcvyA?K23l0{^I ztR$<*YBEHI$#&8vJINlhj~pNe$sux>93e+ZhkS=LVyu5;4w*~($viTjEFg=>O0tTq zCPQSHY$t89lk6sY$X>FK>?a4vA##Lt$Z;~WO~)&j%p(iP09i$b$aZo&*-iG6ePlm5 zKn{{aS2FO+9m1Hd$CfiAy>?FI%9$1lQ!8&c9T71FL?*q zNA{BgR%fGi>dWF=WeUP;!HAu>$1lQ!8& zc9T71FWE=-lLO=+xtkm!hshCglyt~3a-1}-)#>3SGszq>m-Lf)WIkCy2FOaXimWC> zWSDFxJINlhkGz|Fh}=y+LynLRIZhf|bbNBiTr!W$Cj(?9Sw&WpA+nw9Bzwp{a)2Bn zhshCglyt~3a-7V(PKP&_%p(iP09i$b$ab=m>>>Ne0dj~OAszA^@mlXJ-e zvWN_jm1GqeBEw`m*-3VjJ!Bu*PY#enZzgXi?;!6a?40|i>RIb<%GM;4GpWPq$BtH^3HM25+B(k45} zZnB5$CHu&Ja)2BphsY7~4RRkjPG;V~^d|Gj0y02Wks&flZXvgm-DEG>PY#m9hNcg zxnv$$KnBPvvX*Qlqhvd2lbvKY*+ce{ePlm5Kn{{a{0hIr`dY3&Fp6~lf*M@PT@qoIo{6lqYwf9o*pKQZ$>^JSx;|u;5d+!2Y zS5dW%&&jzoy(hhqmI9|YC{RjB1C(piD=C&Xq=6O$nzT7>0%>x{1zJQn;bw&brJ$5o z!~zBSB4XuQ5g{UCQNVIhsvt(JS`{@SzE%YJo@ehhIs5GF*=OqI@B9BgcYo8h_slbE zty!~X&Fncldv{LjEblzJ^O(+KJEwQP>8V9sf9L4)PVBFE;Q9BlKgSM_m&M1&4~ReN zjwj~a6@V{~X z#~V%(`>O-gL29&Wb#g9@z3cG*WBeLOyj$I<{_6am{g>#Uo%}z=pDx(0p6WbB{i)!8 z3Vwzvyl(y(iaouJ61a`ti6ysC#Ap|8pq%Z}kN;V4q5w-Y0+oYggpBHKK|F9jIPa_fZWa$Eo=<$o z84*8@ycPLLq&xD{$lH;hMRrGSD7dj;L%~f28w+kOxTWAT1p|Cf3ydomUofFyV!@<> zg9{ERm|XBH^@5|tCkn22kUx+7BJ#_~p2)8vzmEI{j{RNr-vvVo1{Q2B7+kP6@?2z4 z!Tkjz3q}+SEf`iXykHFw4?8{fk=r-1*_k<+8JUXA%*?FJnVGXQb2IZYr(`NKx~cQ! z>|>b)I6JL3e_>`(rV3Z5XR0%cGc}nrGEGj|lFZV~S(#INaUai|lQ}nYUS?UQ7I}4< z<(U+@qD#NUtq4X6RQDs&LH#G(#8uQQUk(5cTlJg&|- zM4grBas2BK(c0+p=yf=M9kH=rrZ96$p64;$`bWA%r4siQ+*|NLL3{is@wXspk>uZ# z_@%>tPqfI1(?gv9@hrHbmr{qQInLSK#2l2g_3HRsVy2TnD=|JcAvO_ZhbN{cj!Kj# zj!hh&I4Mz)n4OrPn3q_PSlPL%v!S!m7m>f1IKT4(CvSXWQerZA-ITaF@tMS}iQ7bS zbz*Dc`oxWi)t$|qEuHDk+Y@&rHYe^%Y)RY;#8(nEi8B*R6K5yRNt~Bho~TXKCss;L zY1)5?g$1Un!_*XYu$pXv4TsF=tmvGH9{ro+Pai}-a-!;z*mlRG9*dnWo~5~5>s((K zTNS?`zB=A0o^?UuZs+XI_@&^re`0iE6e_et+rV`K&c>;W<7?t;f$4C(XQP8YQEFr6 zPn_-WUFwsjrDo|p(fguRou7!_8{ZN?z4Jmx>uhP?vyVs51!kRt`$GJRzJPtq>5MkS z_lp*7a7pHc_q)hAb6jbn}6yno$QwWT!txvg_7@9m#| zolbtv2RqT=ki-j)AF_0qlk>Fme@QIq&~b^YJFh`&o^-ChmU%Km!KgQmVO^Hv7 z9~>VSf4K9J&I?dh;NYUMxI+`MEuHstu8cNBZ$Q~EV|!xvM*l1N`RH8^7d%buv{R{N zLW`YR_;V#(4?!A~_?(k-du+R-w^FC#OJNJ3Ril%?O7KNeU(^NZ$Xt}UII||RHgiel z6PZghy5y6Y%QBZ|I(x5m{uP-kGgtM=)us9AHJMLk)}j8V|4ts)W!7h|&)o2L*3Pfr z|8B&!|8Tn}MkhrNjvf-796dC8SoCo5uO*4c#c%dYj7)qRWA7G}{4V}0$=w~l)A69Y zVtirhL5TyzkIoQ!xR~wkMB3rlBz*5oT;Y`~gV& zl#_RL)OpE{deD)-EAzvQibvx;vHyu35}z8M5I;!tdL+^0aK0cmSItx3hc<6WiRPJc z_+1w5LfK^)-$yzcmnL>Q`9F{L&kV^7%@k!;qFzySbmrFRrs(HT_HMx+3*LhrwmAIn ziS2dp{}cVRbA5fR%;7T)|Nl1rhxo?m?9Mrzb9>{*ro@)$ZPDAKo1I$tTk6C&BR`D1 z5_v81OZ9AIkNSS(4b=RB!-JX@B<@l7s;%lSbujq9hScoHS?&CfnKbc$b9TS;|HB!j z9zl8(>C=vcE24KeC0~fS0$+5Z=VP6ZcRnBKU+{F~8FyQ0gZ=R55eI@q8Xum`}v9$Bo z@sHwXb$-0_+|EcW7VGC}bN|HP#Invky*9Gb=3j$q0o!r0F|pbJZN{r>V(ViYWADXh z$8L_+cHSHN@7OW1_oBa#z8gI%_UGvP(Y3M5V;@FOip_}KsjiG}j@=!b7CS5UtLQt? zBVxZri|aaJ=HFVIWh&cNHFJ2DS~;;;Li{}sNB z;vUbdZl@>Ticac0*zum(yw@0^ZCTr z)zj)5>TANcF);%5zEABO)Ux>f>Wk_Dl)mk$MeyT^uR5b{O>|V^z(jj=G3s2ZKB+E4 z*(jX<%!gkLEx*}2PN!$c1Ah^ZobNbe>}02GMq+LBlhN4?LCH z8hcUwE>a#@8L2F&E4U z`<8R{oaB8QbcdWj5Bik+^{V{7A+$(niO{6b$wH?HEfrcW zbh^+Jg;ofiBeYWJ0-;qxmkO;F+8{J7bdAuA(5r;56S`jL2BEhI-6ZsOp__$n5xQ0A zHlf>vb_v}fbf?f=Lf;hHEp)fgJwo3R+9UKmp?igXAXL5P+C3(;Q0O3`MM6giEfG3a zXj14zp_7G95n3v=T%Pgw_aMDzsK;gV40lH9|8&*9l!Obc4`a zgl-agyU@)-w+P)T^Z}vUgl-qwC3J_-okDjB?H0OQ=pLc(2<;L2p3uEQKM<vb_v}fbf?f=Lc4|T5!xekuTb>^i5o(Tgq8?R3LPK6c{C@?+G(;>z&X#>;oAFG z&W9my3R26ovLuLVIqDdP*2#69T=UxxEWmq>opR8WTsQM%5?<1DG0K@Y1^=zAYvrk0 zzP8=LUEI=I&y0FGxlm}k&=#R*}w7^lEE1;!~bPJwajbi6bAIHaRW(PD?M&@!RZgq90E+NI!&&xhch z)kxsm3cju2+X}v|4qx!XM`6I1x+0Y!O+zY2IvVoPUL?Mk4WAalH)8N^7o-)frAS91 zl_5<-Dn~jR=@_JAk)|UZhXlqrK#vkyCUlz6a-m0))`M?7_|}7OJ^0pxZ$0?dgKs_f z)`M?7_yXhb1$Fp>I($JLzMu|YP>1j8)un1RzPhw}bs5q$q;jOAk&Zz+7Vm>DMLG(p z3~3rtInvQc#~>Z6){p@XP)8o9BM;P(2kOWJb>xBa#W2JlD|EV0Sli`8hA4L$KuU(B zWJpSeq-3~Ok|8M>l9FL- zV;cWEWAyO($GASmYm7u(u2Dzm6K3L=)RvopchEL9O+|8x)di{6=2X+PGM!b2FZ?yB zsrWyMyP_n%-`$4yY4Q7i{8nrgzU{}a{_$&+t=Qe4kMo&MjVZwLYo3>&q(!YnStWiA zT7+G`WkB$|$2+|m5tWkIvp)&{ z&&GQ|SfAfdZg+6GGEDqk-lw2myN`$4+76UV#xEHBULwDOI2GC~P>T_}lgO=xRLW~q ztARVz$vYVT=jOYbx4~-st}1QDuP3I^mh4f3Hxcn`i>ttkUo++x6&rwV!Iv+2R)?H= z*nt?fpZ_-lse2>|WGixcO)KDQY50O@68{sOMk&9^SP%W(gFWW0O+>awlju2@A9>;J z=-}E8ZnQh|>!4?>e+?Mm(uhfS6 z(%0%y%9fifMt{9MwwF3Rqf!6qKqjjZ@SvzO-2;xUwT#iZSi_Tfz z{@w}lfGlse)#UGNeJ2Kr^#XKE37NSl33aqP*NsrtS z?XPRLcWyl$3FgAe^#2a@I6cJq1cY``hnn;_Ok!<4`l=QEu@bR{v1=x-nUh2`WIWWZ z(oBQC_sS^K;Y2QuXhx)@qf<7HCgItPSu0S6Z(yLDU*6SUb#3#Et04Z2MNLj^&7Dz_ z99o^&q+^Vir#q_M5`GDq_Mx|E@7{MgZq1T^}bAtMX(ZpRL@T=@>MXt79jri?gmeyfpa5kl1Ch;!6 za$gJy;Y0Ln9zp%ZvC4Hr63^uX)jOnj6e=|*wY+21YlF5fAi?<`9fwx8aSYF+F3qPY~i=HmCzYZ~~82p6vU;@x6_tFte5__^OnM`qCY zbovlHVRx&@H<%$!8INKlyddy~FzF*dv!`c)Ry~eZV_V_A0$TcP`WS-}HHo7B}8z z?>cp4aebS2>a=7w7O)HcK7I6xMbFSC$(+$Bm3OGR4fM|JOh^CL?Vx5s{+8Qnx2<}P z;b`TY$JR5CvkRlF8&mtP+_V<;PAsVFwZ?I0{_T){SDmux%KG0G-?;7C9Sy&@;`H;1 znrD7#$l6fHLwcdsi0f)bl}5)8+*S9*xT1gL?lI)*vk8?-&orWs*`pUjKhFHL=po?YuEYFyE$mAd$C-f=xq_fSxOd(9?wC8C zD`9u8;Kw=b46++zz+9|Sw3Xfcma?4Rhbqx#?)|Yp7{$19<&1nj`kZ}5Z*e0YZ9^Xj z_8RW6=@?6lj?B76yxYZ>7M<2;pUGVzxxVGshhE}pG#R#_4%}(fckA>z?z!~UR>$YQ z9-iyNetEk6!Ls&UlAnLJJ^w5TPWSiz=a-jj8G1K&q;#(|NbkGx$22Z-XS{HW>hU%g zz19YA(fZKe-8G)O;&XRD=|Iq?JrS5M0#W(%nA-wy_uITms6Yu+* zk=#3(??%sl{m%ER}F*?Ji;7msk^0)wr_s-OdZKe(! zS&Y^kRgC`GdoIpN?tH8z=h{n;88^hITS z_#VO>wCf^h!v1a(d-!qOVF|)5tZQ$)C^f(N{M3r}#+K%}&F!sgt6CcQxn{LMzP32K zsipUOKC9bS;QK!*{qvEU-O@U%vAMpcrMjcJz0v)CAXS*XpxWIvnBUyiUf0~a5pogq zn2HEE6<={EMLJ43KZ{}haPRs={XXrSij`_J;*1-S-MzvE=tFu2dsiRSc|qgy*1FcU zOPDtg%F49^!Tl_6aA(%n<9mlN)|rj1?HzSZggNDM4NN;M0(;}5vfevf)L(#)pw4ZT z4-HqrgKIF#^wG5W4;zMEy!@1F9=+teCoXuS;QErx#v6vLs(g6RI9 zANTbmpE$qr)7u`|_T706H{J0@*{ctKb<)f$`rTQ1)t|~naV^70#rcIRMZL4*Y3JgG z#?^@aTqEc`REX4`3pyOcfvfHgYQJ?_xcFekE4^8q6E%@Jm)Vt98vTVH_me2&PFLc5?u*8 ze&%BI9Bjj%QSA&!Wc<@{-p|dQd$RjVxp9&8I7?7pt~2>NAvMrz4Q&h3Aba@Zj$gVP z|J-OnyKo0Kdso7han>e5{Jrrhmv^?F)-kAl)}Od;ZFOb?#yY^(uptAbWFe_W%BqYd2S_J8rzaAIy)lH(TvpQ+hej9`3B0 zD_2LSeEPB%c_*yb-tI1*I|_p2g!QN2BZKV2yMi=YE#~sIpJBHb3j49a_4exlp z>mxVLW@n1UsrI=S;S1%ut!WP#?C+R$xQAx%_$}i`1x9+W&4cvA zQ(Dl?ZH{+hUiQd=V58~H%KR&mWxjvlj zUEA?NZbyhu&?j@b_qAcRw}bmTs{wm8mz!5tlfSw9$y}r4v!8b_$@P*T`%welE5I1nT`Cizm8^G8N9#a*C_Y?l|8ASGia1plI0krpP!%29cz%?yt~nUo>?1Y zbzv_A>Erd{eYM!acJE9v7f-V09t&ZA@2{hj&;DkNnu|GyeyMxKyxz#RA;=DW<2y&1 zyQ9ffv-X~_wVBpBh`%?!lb5@i4V$IuwOI|a+6UWT`#(qSzS@6&+me=xk16l{kuykt zt~D7O-1P@{4%?kk!`*}MR=A$dd+j6O*_`9_Z*Fd1d0XaMFv!0sP4~I`d$)ZngZTM< zeP8x|<{_@}Spu%kxfHjR_c)wAD3LwM`%h}mJny{#TSa~7e_oBIrt0h3 z>+s#;?4z@eQk5+&7tC&1oo-6CXLn7q>ITM(>~lPB&+=KHpx?AOPI%wP-?QDjB0GPv z!}!BrU$T2~ZiEQ>opPQt8@c|^l_!6p=D5;# z_v~l)9+7@YkI0>E`tFv}4=9_~(ECa5m5x*THvl(I633nSTu;+IGk>3C_PzhpJHUE1 zy{~tELE|HPf7W;G=C;v05^|#!t&G3Ya6HlbyHicT7; z&N!z2nu(I!vFGluv?8MMcdv`ZGqguAMsdfQ5zsqF@fRg`AH_RcF!E{7aDzh7@47+v zXN>opffH86#dWIWOWR(H+Q4l)u|h4-RQ}CGDcGVdaUmO zvwXCULHyV@Z%p=%JaoZ=iLHx4qo$K_0_g9WwPOe4r&DvpiOhNMLC+==Q(2No` zj&u(({)DY0vK9!EpKZUEPYdThQ$e52{!$w31zGF#ofpGek<~8ve$qxi?~W%u_g|%< zj#s?9=U8SuN;x}M{3Vc*Z8hO9lkW3TdZf8Ao8vXSFS!!Rjwrp$#J*!6CHwr=!G7WT ziM`r)_nM<8EBO@s{xBOchrg4vU2YrQD4*Ra;+mobyvSAmI-Y%kfgJm;=iFWn^1s~u z5^viNaU^8dd%S1lUeCV8i|qJ11icgV`^O<@2esC-nO-lM<9=9t;;O=pp9|3!HI6Mi z9PaMl`_S69BR0rh+`nE0e(o&7UNuL0);Ilf>GnMT*XtJ7gJ&)6*6l^|TE~zBhK!0zv)NcmK|7b9a}{WNpsvZtGl+aXrZG0gh7t!6-lr za7=~mR?YYHx~oC%PSuYw2iDwyaFH z)-|u z(zf|k$4^=_09nrA{Ggmn^B3i0TjM3EWMf{KgX3Dc(>MeQvu$)>v2RVfH?o=P6MUi;8*lKE5J3DeW*pes#*VLVXgO`>ku;mU$3*zVWWCbJv@0Y-dEFhqS><-Sw^O zncg*K)*r?>zkV-34X(xXUl%QMo^D_aP~hU-KUo3J?q72@;~6b;tziGBM(+C0%hkQV zH?08apH+~=k>cJ*2S2y$<(S*PHoU=*qo7(wLlyYwzd3c!d6!8!+VlCBT>Lxy2#ev>g8C2CalY%|&mSroN$~TR{eN*i_U(wP*8x$7cFA?@eK&u39XxK$id33U zX+WW!f?K-REw4P#tvBZ{?zOIWM)L*DEf+WE)b+M!Mce9b+RJ~$BqN_ac8zr9?h)D} zRE=`;i-abHmI|#9xc-6^z3Xvr9te}&Knp__zm7uqef zaDQos&<3H}|JKR%W}#g|cM07qblI}yb#1Bo$$DHZTehM;g%@QkTb8bCTT!R~93R(h z?e)0U8OxTnH#8C;8OxTf#N$TZ>x(eMx3uaU@NLo;%a*0;mN&W*A*a3dm~!yPb58B8 zjeM4g$FgM|SPnF;eJqa(= zABXgDc~J;v=GHps!#YO*cQ{@sas*zl#y6}T?BpG$js%^A1QzN<)CEkP3_2OXnD03| z59v~*gHhp9oE(O-!;y|aIudCT(#fcBA}Sw@^GlJ=L*h|;(aLtNP!4e~alPDkO-mi3 zYTMVQQ!OhsOx1E4Z%X3XwD!go$yFV7t@Tb>EzQxqDvP^_{RnFyzk`OCl3KSLTr+WL z;zQKdr&iW=G_@yJwBP|aw`y_)9;Cxx2$DrD`?#*vTwnNmt2eg0wsz|G%J1dwEruN& zH%Yqco4C+^?gMbi`bNB}1%I%(8tabkUUXR0BYM-|8NwOL%&63MJep7KzYYFD(R z*P4t*yLHsJV=;?AwB&*i{W`Z&)mGQk%-8+z_G_piwC=Yxh2u%UVANr|s{v zvlk6~{o3Zb)fgI$&5iAih!~foT9YeVT9eu@bUE$_@Q9?x{k1}7IxL%xsKWX#~dzGv~d`QkowXMJ#SF*!gC1-K?&u*$~Yx9&Q>)MlUX!n-SY;CPu zEB28pm5ms(tt%SVdMZ1Jr2Y{p=|23ET)>;F-tZ#ctZ+B~uQ|FFyYrl%d-dWui=Q}U z^L2k||6tbL$5mc;LiLshxjvkI{5k2?7Ct51c226UZ7pvC&zaTH*i?T`bE(Ictt7KW8ow{H5%e@~P>1=lxBT^IfEec;Y#{YtPcVV`}mNSjRINjsoOYc*>XJ zJmb06)yPZp{s;&2E07%iypUrlaQg7#wg&Jdjy$_OWq#ROCb1dt-U}?&>bwj*h%fTo zyCgm5tUw<6@ajjt-oq=GZKD3TC-6e7&WnddRDbl?EkBK@isGoE%&Nae)Xw3`IgjiY zRfUnMDgwtW9vV|a%loOJWdqaeKjzwIA?}|3g7jU~;Sm{7pazsBN{dGiP@~(C>ietF z<%Mc=*~p&Z-NjwH-cw_gx@v#C!&lcEnovXQ2ZH|qHMDhLIx;k(hC;96k%ekx`#?3a zet;TT-d~NZF774|`o*6PRBFG2FlL0uSe%!7u8T)U)#zCx(*J`Raa8w+^zd4ZyAbQAlMch) z#|IHL6O;$79*IR%47Q3mHXjI^!|pX=_v(?|k^Kj#{o9Mw{`EuE{^di|{u@X14C^kc z8hvDcbzu9~)PeO+r~}Ktst$}iri!Z2Cuqy&IQWeyR3pG^1bB@=AC9OlN=No9RQsV% z_p1SgFYH$~JRK=1R3-IDHT_gcc|w(xjYw0kVy930qfZOf(CVzu9D@bnR;0xrx<2Fj z${^?s-O>M}s~un2sr&i88A?sBz+Md6&Ep%mJ{{MW$aOJZD__*!PZdFSQQ08JKZty8 zrc%E`x>;}$M<4hvaP(n=y?Tnr4p3uZtFf@v*w&IB^uo?zT}8b<|9B<(5(|)Rn(x>_ zz!#~pHGS(8CkLzKvj?eU`+-zDN9&8Ok}Ur4VB&o^=2 zg1*q##jc;0YG1grMycD7ju#uceT6YW3TR)ELG}dq~D7i z$M(Bnckft*{k5EFXDjt;dn7pYOL!+MIkhja}}53Hrn@Wp4N5AUbO zv_As>eOQf&Y*PcppVIWFVF@*C_i#0=y;u!hy z5aZ-@wSP?&#>yhKf8>7B6+i^DM|IPN-sxhvKrq-2>ADdgH*yupz`vp(}OYdt)cY zS!8fb4MwaST$ZSch~Gqq?}tdllKRUZL*5foPFlR*0L0Lt zh@V5$e$~T!io1vIq}4RPHFsd{Md}ip6*GR<4}w3!H_P_x8QDF2XK|N1W+*ec89s;9 zYm>44)!4h-7&^3TaC%Vfz|sL2hmj!#YDn3DQa273BMug+p|1>t&kvq^Q2Q{*D27f& zYWVCS8wd0hb|-e?bAK{^5%QEwQ9~bc>K%QM%qwim@M%L@{q;&&kMSA2iyrFV z-7lR0N7q)Gy5)lrzXz$Jjf2vzFWw7ZygkqtcVdY&dR(CzhIl&+a)-5ICYBiF$aChw zp_osGU>+QdIR$ge#*y8l55zpQabOR$=!&Ofwb81AQpPQ|&5f0V)PRlISb6Nr*!Mts zOZUS8gVX`f4ps-WgJP~a0AurjYB!Rz?=VEv)jv?`3rMH_jXi_C4V-`Fb)`~r?X=Z1 zS4Eul4c0jI{oudwTN*Bg&-{Jv5TA|0jq(HDoop2KL50k8*XnQM>8B#yQH z)uhNUHKqq^o1G)NhNX*ZImf$WqzGeVD8|STHR7S7H1(y{ZrLD|4MZ8{|5nWVlye2j zXalUr4nQ0@0CC^|$UC6SwSg03+6z>?JfcRAWeggj2EUs~)5d)8b@Z5+8u+docY5=V z7^DtrAE^$iAA$HYOda%4?|kd5sW4Tk(T5GhTzsG!8yOMk51Xhn<6Jf38EGr1qh~Sn zEP|dxq2~~Fz(!Zk(fcRVph&Uu`T!drapv)1YAoiru^0zqH}>ixYX$fc#^Gq##aXAc z!lz2&s{h-XlN&2*sWU!NGUVNU-MWPBb!0d()U#F^Hlmwr3&+0WQSTtce63q)LGQXU z5*NEVwipLnlmyyh8{6TDVUaOdueSGBW3WCOgSEjJ_}G}TQQf`sf}S5V_15*Tm;Bcf z2lagA${G$?@Hg0S3~V^&704P9u#Ti0_&nDp&Ac1A8QP8XGGzjXD_!35dD-*5iwL2)%` zR$)(~JGQd`1J3aw#N~>ri24dr8*!yFK^e^hr-u~z}E-E*9STGYrTHw#FD{?CAc>zNBk=D#1iUIo#?^rT08E@0qV%z zF*Odjk-!ajEw1A2gH>rwM0Fs=rc$>7N&%x#rckDURlw$AaPRA>)2oNyxBSKXAD z_(4TOL^UF1$ai8)O+-J&F}E@AFG%Z{KL)Y$HO$Y5qY7mTn4EIz`yTr3*+R9UF`_;~ zdW7}pf4dXTb@Kd(dQEg^dG;D(7Iky#!PorPUOju`tuyBj!kj-)4Xc(ppSobK8}Ja; z`QCGFW1()$jj4*(h)N@6N@-We>6Pu{=k75SV-1OYhH~sPY;^Y+B7-p3 zmSLQBIrDy%D|evkS{qU0FNvrg${iF_gLb<Slh2Ef%OK~MD1r`y|EPQjU`xboT&~#ol)JW z6FvvKHi5ry`*cKo9cfS*Y(o9p3lXOhPTq&eAHjV11~J}iZ#_Nk9Xq!tRMmBeZ%DOL z*L&UDmwMbeZLL9Ds}xu1;|dE@VSTkqUmsE5M!MbM!8yj4M_l`2HR*Mx%w0#8VIAr9qe}|aC0Nr8 ztskz2VtvDVr(PQ#+FuDk= z@4b#p8>pt0f1+Soq_yC{p0V9yc9wKG`HXDo#K>u{4N(J^_v?vwaaRKRj*h9(nCs%0>$<-k zQRnT5sG_4?TX?S{B@tDEcpe#7pvFb+PUh@wIP1=0+{fTP2Y$kP95*HpQC%-Z)WYv! zYzR;9b*~M*eJ^7~kE_hf5%pE1?M{7+35+#wp6jc)-^BQJ_8N7+czJrybvfx3Xpf_N z?tY%LS2GJ`dc4}w!4WlhJnCr~&b-k-=U#F2_$cl>9#i^$pZmZ4OA1uULnC^}WArBx zH34Z0#t*5ZM{7Y<$UR|~y9b8-FU(P+%Ch@~u6+i__y!=6A;15w#NO z9O&Bs>fXO%y@_?rSgdbz)|}3oYzX%524nATkSb|)?>qZDIt1^%Q_ll`3qSvztMk`| zI=0ciGy?l#n7s^}wz~-A{t=MaVlFbRl#^N+MM(LK)_L&fi=MX4au>3wS?|Jj^W> zJCP8JIp>xlDO}gSg1WB(`!eKy2la8@g;a{P6MAhx{qLeJ3r~!yTBKH_Ymx3mdK~FF zq*sx4BmEhv|4C7GAW}KfX-FxgOOd{S^a#>RNPCbXCr8y#q=S*lkxoTA2dN!tJ<=UW z4)MKnvu0LS&7HXv>5R(x3m4bSTsV8~vSk$&%vd)6w3(;OT{d@V)uQT} zWpn0N&z)VfsQRpm3SBa1(c)#5b7#((Tb<2YSR+}Bk14OHs5o2AS-xs!JKjIu;Jmhb zRjQRab5i~sc?lL?fHl8<)>?Th36RKl-(ZrP?E-3A+$R+l*5NH*0MBomc~MlDQn$kW8~52Q&3HJZof*zsz?z!$d#IQt&kJ}!XW)?@Jdovq1^>0}f`(aj zt*v;nVpeKZW3%(Vb@yHCy#=$uBq)DwbA3=Y+AS{xTePy;dA3NuAFP)nAY{56?{!!H zOgxC>_IOT-fsylawNz_OOK+9A%^j=Vi#9NTAhvqeT0AG%mQ_Ox$RdE|w@E+2z^yCr zP%xh6ThPFF&a7F{)X|1Fy3L%8Z(T6wl%|&Dbxo%H`OSX3FDKh4O-&R|6?^kUn={h* zTWN86&x^!?l(*berJC_q2&*_aE~;y4<3sd(RHOzE)$uWYvZ+qB;b}P(HOL#wn(N({ z()H#nZco)UwKupUOkT88O>@cL^4GLnkZK0nt+v2@2b^>5_|%+MSfw?4y|^Ro4A0(d z7<)AycEaOy&hw05)V4JHq5!#Eytb`9wHjQO)LoD|BduQ}z_+zE*?1C;CDQeaQ>_;@u1G1b)!J0;oa`L=6wbE~FHn1&_=gaP zBRxN=DvAo!R!`ms$WzE$)_ZS^f96L3f&;|GNF5fYJNlJy7fzh zP8E8h&;>%z5!xg)BXpzCtwOg8eM#usLO&2XYMv`^ywGEWo+@;y(2Inw6S_(0Hlfc7 z-6iyQLO&2X=oD8@QfR5rSwag$pIW)TROk&tw+MYi=(9p!5xQIG`$7vVU3muzEfadO z(1k*m3vCyAgU~yKJ}C5Ap|1#iOX#nKzAto?^yh&>j}f|1XsyumPjmG;Nqa}g^)c{I9`l4Q71|_pozTw;eL(0_LSGa5w$OKls*kyRhY6i1 zv{dLUp$mjA6_NO z^uB5HglJ`|E{&%t+gn@Ks^gt2H$dV^pQz{El{4|>_IOQG+f4p(8Gd!=x$`d05e3j= zc1LR~9!J(|68zE`_r9<5i~34xzs@>tgr@H5OkQV0uNvy%spIn&=J7&LwW@(RZVTt( z&&{~pftFwNYK=FG7WL&dAK%Mk?!1nsrmDL32G#_!lzDTT@tk!_Gas%#v#zy~i>4*& z!x(4mppuWA68HUatF!vJ3o-CK-=7B!FIV1o%vDF{_dd8gyA_Y{;t}S>czToXcwM9B z#H#BW+pt3A+QIpQqL1*UmlZAbDOsMVL}ZTh2LQgh>Nk|^c8FfNspI2lhcEAI@t`-{ z{UN#t)1$V1Chk_6RyMD(wXIz(iB;pz7PXIIvCz6!b@pNwaw(}E$mw&wKWVSS)8&NU zY~+on&dc{;sUEqmX=!O{NHwLWl`U?rOSd(&fY*e`oQ`x8EYqHnHSqiKC9qX0R|VA= zmuX#uJODl0I##E&%&X|NFw2>BO&uxqhDa19(BVzV$yvInt62+%b8G!LzNE1}HM^mX zD?_Y=8fW3dt|}d`Nws2C0u8m%)Io_R46CM8GdPc?$DWO@6!msQU1t_6 zqt;h--#CKsDjRoU--a)a_hM=7C2Cn@9^Qh}G&7y%dvNhZqO9NPu>pS1Nc)(zL``=_ zyE`OLbk5zE>()i*x6P`nce=Q}6+5104^?&X#Z9SHTHO;}kgB^V<#$5ttj^`iw@?08 zw0FQ-?)!U(MAs3-tFdH;Cr4wnAG{?kJKBaSQcpj1K-ej9!C{ zD4-uNo_(70Fn=rRjdF9`H5#tpEx?UNYkM!_VNSVpqPtX8Gv}O%@Tqmd_-(1FYrEjI z)N03Imu0UdzO^)^1Uw1t_m0+=B4{O^D91zbc>8fP0@nGkw!R6h!XNn{@TfHMM1z*r zdHAFg{uV`-Es3y)wUaev``I-CO^3VVnXM^y^2~H&+suWF=d0JEy}nx0q8(U$ErwO= z8O;~tz0eq--zKlc?e*H0b9qfJeBxex%PobeI?@csix%Tg5R~db z8!%!T>*?WD_)7|PKifWYHum7IXU#=(PviMl9g9>s^S~e6QB9euH0FGts4CTpKW2cr zR-|UP;LX*zGx)KiiL<`1!HcYCwmCZTmDW>P;)&DlqP-0kx!albf{Grb4Q9Jv1k-`? zQRXec%}z&J|MfE57(q@w$r72`T*E1~F@8pKgY&{rSW)6MRHCY?n&aMBe7bpL&BP6G zy0O`5vwGY0n&vh*7H#&P=Nd5s)*eJTw1Z3wjJKO2^KgsVz}#6KD_3G@DK*3Cq3V?D zsP}v4O2>0*oXE~9(A_zQO(+&Ne8I81b00*HK+bK^1sGXr*UY&7FuJItJ>Ajn_;YV= zDRuMsRgc@ty^R0j&aU-~R=RQ@r;V#t)U@ytj#W=X{`-$;JQMM1A=eRaW|0>Ve9k*J zZ=pR@m1;6D~HTcGT&pB!=9;rKoJ+~g}OU;F5z=_B30Bd-w3F*yoJ zk2l`^@tnU@@b?M)tcD$Fg*|HgzJ`P+%&sHs>{fibxHaD0`g_3 zU|uoOFiFfGhs1n-Q=Hc`<$AVUBm6scswIE1P=sHH|5>1v-6Z*|L6b;nq_IehrPP(} zpgtKS>f9;x3Q(3`iNx}&kf_g1NQWZf@n+}xPEhK%1&Q+RLn7{RB(~`#B$mI9#PSjt zjP}ts!>Myb^oilxSKKFd`s?p2eqZbVtNHu&@n8Gp|G#?8-voJN=)C_ck0RsYs+%+( z|0|pGk1AES94}T_xvHV@{0o{^H@BoO#7;uTMHjDGdx^_==B(Ls=FU5%a{j3wTX5RK zMOCL)FRnS`%q2_Da(>eNN2UKSu5WY`Sxp+BI%QTw3U|6Ps|DTr~}S6i@vsJ&wC z730Jb_x{8^x$_>Ec7CDz1D;h}mT~A-;J__MSsH`vk)m?9O{{?@~a+zp$w)=PL zjLDp{X8UT49p$dKl0qj6oh)>U&{Co0LZ=I@5Lzj;N@%UnCZTJDUL|y$(Dgz$2)#w< zCZV?r-7IvA(5*rr5V}q1cA;HDUl975P|g2Mx!x`G9ie-L7VhWTrATN}=oF!)LZ=I@ z6k01(uMg64y+&w8=sKYrgl-bLS?E@w+lB5Bx=Uz}(83Z|&k~`fLZ=I@5Lzj;O6XFd zwL%+&riHE%ni0BA=mw#ig>DzRL#XDzORo0_-7Bd9dD9hr4#}KGLPNN4c~jPdokX*4KYS z{NQ=b5iTE{&$yz`NlV{w-w*fCqHH_wSN?A~B6*Gi-w~BVw}0IVx4-v18q3f&|0um& zj`hO#9pSsLbSiXV(*CIZuiED?{=TGN@#xs3R2!0e^jyvx{Ky9%eZ>21-ltX|eT2C( z1KJ5Z@BKNUCy_2k>T_%^sOZhx5zn5#U)XzIar>a&^QvzS?LD9P-Y|Wh`Rt}q`aJpM zQ={GU*wfGNe?vLX@BHlxFYW)#s|zcVJ$F2sK78w!zV-RWik;_vIO*qOZdf$>H&<3% z_}SM#GkZw<`a{2bN5x;B-aO~Gox^VIyyB}BPoMbxd%yS5{Dam!^J+!QbKUEIm3jV@ zCvM(4^U13(IOCAxuK#no`_frY{`iKs{_^?1{^qj#PoI6~FE0Ao3-2C!AQBE`{PXWg6BVXYx3HH>e^=~b)dcK#TQ>N7bs#Eqq<$-VA_q!Pt z_deFx^yT>1kGcLc>Q-rUY~es|M=0Dte7r@EH>=$t-<_Dz7?F` z{Y-Fv&BoyTDzUS_y+sB-?-}r0zY)xTvcdj)#NYgKw~KxJ{kT)|otr6k*eX|EgY-N1 z5qT6!{#Mc7pWh>P_WM<#@b}{*u#14M^(x+X0{rSqEPs8KE_zHvETJZ-z z|21M~zdb7rdH~7gO=|?~R>5}i~UnzY2`I{vE_}g15@x;%6x7gXwXS(#GKVKR8 zrP7dJWblWyjBCH1dky`SHu#VFdaz&ZHSphK@RLnqAHP0HvA;imgJC>Y82Y!+Fdmm0 z#!;6c4it(X`t{jtz^4uUk~GMzl6lR~KWUI#Yv8}_+Tea^F!W=E%rAbqJ6{OqQ)RGo z&xT-pmtkB~8uV!}#F?dr{4RrE?K0%AG4QE0^-Z_E{&-$#h%-A4?W!`wjS@qA zm~61yHp946hIm_H=-)0w|86$)Z_;4T4WcK1*XB_q>!>vbJ8U=f?_PsGOAT@hCI0*6 zb{qV>%3z0W2DzmMf7@)(r_0b^4FgMGTh4*vU^ zO$I$H4DH=&u;*U!H$VRh13qbxJK5mpJ7rw>`749{HyGruGmMuKLw=#$*Z9{J>r8SD z`IE&z{r4Bo-s+B1fBtksKkhW}uQm8piS(o2e{L5({`{qexb%VS=lJ&lrVHNRFWrLo z@6Xgqobl)Pi2nZkq~QC=m3+V4q|7^hK075Y`SUkPzx(sMWqkSbHyHTrGVpms`1tkT zCjINzzvofcAN=`+vVQaHqYQc$$$F*_-r(n(#BP4MlWz{5M|Mj8`o~3ufq%EbKi@O> zRjKgt>oY?1^!x1^!@N@@amGKs9uT|v^P7Z^KYyp_v4cN9Chhg-ua|!G=dTkx_~ZPp7hHev<9Exr z_UCuW{Nm?RBK_jW7fBrO=NB5<)g%1<_#Fnh8^msYeI`r4_~(%-!Ta+w27H5zcfUT5 zh&}!JF@ry>H}Kgi=@&n~Q1tQVZS@Qk+kV|Ep`q$M>g7@c_8t_Gi@wG_iKKu2l5I%lcsMe3kI= z>$z0)^yAkX_zaTx>BlP>FaG@L2D=r>{-@vmkI4NIpF!d=QTl7U=x{CxJxc=6|Nmvxjsf1QkLe}1XNPrrR8iavgPxr_^cen!TT zKmP-RAC?>RStoM+{&oS8fO@n>XBG>O%Pl{ZBeA_N^{rPi* zzdyg;5VyC9U-{*B8RRAn{Lhho@ypGKKf6&QJ0I1Hef<5HHpJ&{(Z?TGCyG9PK9z>J zy3@c%8RC42#4EqtwD_$*zgzsxug^O1Pk;W2!pEP#RmQL1o@=Dv{c=mMb^TL6S2{)F z^Cm-_uQb>>BlEJKPp$NqU!PjBvtOU2?2q~Rl!!n0`D_*bem)ySPd}d*4F0*sz^6<4 z(a&d_!Olene<(HZ$r$Y1BmUrT*Jkktzdr8>-fy2Z20pd2-t+UBEO`CrhvniAdkyzf zJrWQ5=xOk`F2lOC>T%Z({d{&A#wp^0^LJ!d>IUmT@efkQGtP;<&*vHV(QY<4TlKgf zOrDg>^C0=Vq>MNwT?eN*2mkPjWtxxXn*+jy=BN2+zJ8qM$G`EWUSaJfFFspNUVNTi z&ks25JtpEz%M9bE_0#&BP*vn{b+QXnvZH z=9>e;h32REXg&Qn&CjMksGm)L=yv4m4;vi&L*v*6lOO1I=yrzn2j@9{$2)^mDikE= zp#7GC8F94XF+z#wwLbXmIIhQR_|;nSqup%y)!Fa^FUCO|e#uwu< z^_Kj&pKHS}Wyz1f2ifpj>EY-16R>a&`qdC58-A-S`3<$?*Wlr2^k?wmWN4#bqlaHu zd-<*lKR=FXZycmu&JW-hgyXwF0CnnfEPDCi(mBXaU z#*cjx7XQefa!ZiN#}wBl3Qp_gw+D)yV=w;K?G2O5c&c$>aU$YHA@EUH(?*dDHBP{tfS@PQt`~Y>v9c{z$=Raus1y}&F zyaI{%B$EGNf6!-G&SW~gxC#>p`TRq7^5dLo!|zbwg4Susb`J6(KVri8v7M8U@*U*0 zG9L)##2sRZn{0t2gl)As4g)CP+MVO~a2sa8OtHirVTohxu{llvi2b5{E2#hISI1i7 zjx3(ZgS(QWbLG{2!JpkAhVn)N8R1c|)D z=6&6cFn(G;t-nbw=Y7pDOs;N+ZYT8%vNLfNNd9@+FQ58#fSDd6+9&jw)_C4W&9vlq zktM%b;FtHn;&fhK5atiyX72;e#x57zv;#8dSjwFXoQ>QymU2%4KS1-2H;p4!j}x5c z9Q2p@NcrYL`im{D(vsh)z|k%hNc1~W|3SHH(EuCV$AIz?eQP9-|0v;`h8OPWq>!@1(<4-a}KT$Tn5yCP%hu^ zXe0MBOSxxw_;HO=f#g3Zw+2be4a1%3!Lhv=B>zEvmy3R({sPPrV71&Zei8E~n-)%)a3M9#r|a{FcwcUs@XX|ygZJ+ZeY5-I5Z8#*4~gfd zgLWg1YfT$me@h(qs%`jj584LDy=5C5_l#|DLo9J{nZR{8vYmr|Mf(xQWIDJGJ0EFZ za6#*T&7X2FK(ZOX*Fh+8>}z8j2d2rA-+CK<;I-Pr&opoC0_OSvettZ0&3=AKWcUu^ zZZPpnX2Ha@Ao=a5?~62&xEllb={TtI#HB6yZLr}7%!OKsJhT<%)T2mfkl%ovYD3~) zQZ$)ux7Huo&aoH&-vY1~N52WewYydF{@;-o;Q}rK;TosHy$t-HcGkFLAi~YmxN(Bf zG^h&sjkm;2u*5N*^T;Q6k_*d=({oKeeur4{n{0{G@-&rdIfVAp<=T!p0J-quv>o%| zv>o%|v>o%|v>o%|v>o%|v>k(R7b8>KMN<<_+bthX+bthX+bthX+bthX+bthX+bthX z+bs;Y2F7AMs0uQg3+_K)BT(er~5e{ zPWN*@obKm*INi_raJrv^aF-!d+fCDaxG?*9`Gwifiwm=#7Z+wfFD}e}UR;>{ytpv? zebUl?UR;>{ytpv?d2wO(^Wwtn=f#ED&x;GQpBEQqzbh^6=f#ED&x;GQpBEQqKQAuK zeqLOd{k*s^`+0F;_PgBDeqLOd{k*sdL4iQ>ytpv?d2wO(^Wwtn=f#ED&x;GQU#F%0 zytpv?d2wO(^Wwtn=f#ED&x;GQpBEQqKQAuKei=*qd2wO(^Wwtn=f#ED&x;GQpBEQq zKQAuKeqLOd{jN}U^RE{dW6nEkxCF#CCNVfORl!tCe8h1u_UOZ$0o<59hzqlu7Z+wXFD}e(8uw|OXur~VL6kTf`w?ejKjLicN1ToQh_kUDaW?iN&c=S% z0H^JzDYE(;UR;%F3f&jT$ug5xG?*9 zaff8xqtBTa7iPb8s2N2{_TiAt;C!xe71``QXBwydSkpd0WRRaO59<#vF04PixUl~4 z;==mFiwo-yFD|SnBBa%FuQqiVRrN4 z!tADT*XffybbX$3U3|Sh$wO~IImb~&2#(`}IPLeE22~+W_isL&?%#Yk-M{&8x_|TG zbpPhV>Hf`!)BT$dM>{8jj3#;eYG*A^+dGK0x8JnA^Wn6;^Wn6;^Wn6;^Wn6;^Wn6; zgK#$@Q`<#T6HePLA5PmXA5PmXA5PmXA5PmXA5PmXA5PmX47UNsqMud-8BOx&r^IPK zng&%N&c@Ef+1Qyl8#@zcV`t)Q>`a`Eor&8QJ12oR9s6o$-4EK{L42v7#%X)!!)bfx z!)bfx!)bfx!)bfx!)bd5;ch~vZm*^$oVHs&oVHs&oVHs&oVHs&oVHs&oVHs&oVHsS zZex(K0`hM5*g2rMH;XuJ=ibbK6XLX;1B!dIh|_lN%?vmpPTM)4xHpS9ZRg(1fD_`h zodb${vxw7n?#&E1xdnM){h+H5XJbF&Z0tvzjs1wTu^(|Z_9M>5e#F_>@3X)~k&2K^ z2ji*6B~2jY6L%|;4L^-b0&hCV@4t|2_-R~)i5c>}{E~Taw}+H_iyrh|gq(i{Wo$<> z1VjBaE?0rOzfn?*S z8dqUrhI}u-WFFiXP;TP~8dqV-FP~lR61i1*_-R}|xf++W;Aa!>$!~lJFI`031bq=g ziL;6K#M#7q;%wqQaW?UuIGcEXH*hw`eKsIq?zP0-Z;9J#iTiI$+!rlzTY$3}zxN0( zj4j9S1A?mv0cxD~XHA2ukl%PI$cNMZoDZk{IUi2@b3UB*=X^Nr&-rlLpY!3^Z%MID z5ZPBdYkAtXQb$c~6;k4cI;k4cI z;k4cI;k4cI;k4cI;k4cI;k4btaG!&*Z2VN?^3A_r4l;f~-Xj5dL0OLmWd`Iu7LXT| z^>|QbK;HI%yr8VFB9rzDJ2=j_A=%)b2xH_a`HufXV#(u=v*pE0H`w?ejzh{6Ohm`Li&c=Sk+1QUb8~YJwV?W|->_?o9{fM)% z-&4Rvk&;NJgYi`3Doh~cYn)Agkl*+aUb=`loBklqray?Y=?~&;`hz%|{vgh#KfVGS z`y=0a=pn&@7!UTx!$>y#h#Q6!CKtu(n@HrBL^2(et8o=35b`xn`-`SQRme}5hxv^c zHzA0TcN^e7Fh1ARkWKEgw$XEgw$X zEgw$XEgw$XEe!W8+N#Sn4YD6`HufXV#(u<26hZmq+Srf$Z0tvzjs1wTvER3Viy~DZ znGTL~;&eMT4Z?eI+TQta+TQta+TQta+TQta+TQta+TQta+TQta`Ru3dmJg@xmJg@x zmJg@xmJg@xmJg@xmJg@xmJdfiO$HfP^600}A!$CE22~->#?Hjq*qJyRI}>MPXW|Y< z;*qZ%Hg+aI8#{m7k(mF#9eMQ99Ej6))_FmcIBn;ka-Bz_?o9{fM)%A8|JJBhJQt#M#)7I2-%D0G!S7 zq74X`mymRSXc|=2iwo-)FD|TKytuG_@#4bz#fuB;7cVZXU%a@me)*oqenEEAdBla; z&5H}On->>mH!m*CZeCoN-MqLkyLoY8cGI|>I0^GRFV4n( zHufXV#(pmY7exv?_M-3=BpckTVT?RwuX)bHPQM>k=qdZ5=REB6O%xVLGT}ZzfyNb@ zK**%~$jD%VoRSetnp5QvvYmLEKM}`XPDi<1*)mH7+b}BvA3Mmi#m>AHR1k`Dt7}et)p!r*ZlC zMFFs}pT_0m_cu%ZG%g>%KU(tBxP1J2Ect0%K7IuN*w|0w^6~r7Qa_E$$Bz@GjeZ)J zk00j{8-5y>j~~}qHvBX$AHP3a^3%9{{QhFePvi3O`yWew8kdjXdlvi{8~9Z*hXV)E z&i%P*A7(GgHI7*B4+gR4`at8ju4AkSTHmo98b^M_k@^qKPxH}w`f-|{=0jWY z&3fnoG*qvLN+FQ3#(!`= zdfkaCf%lGkk-slEZMQIf4|>`ghNIknHa{&-x7*)uy1n~~(|QK+V|z6}lfU@o{xkR; z?XjO}Utkv$ei+JWz4ZNpA5R?l>3oxZnx7XJINreT7)$*gvDAyL*#`uY1oi>BP;!H=?%NG5(YDBBKxUR;oVHNc!; z$?vN+{2=#4@blUwgFOGic02)oUR;oVoZn9N@FPao@$%e@iy0nVm|s02~OKLJ*Ga(0uagr}=2UCVtu;M*&db2jN<`Lzip3A4=RD=$H4vg8ftr9QP;Z z?gLKS!@qB!_1T3J^2=vG;wmlW&Ic|>ZcUq^IUL6y;(2W>kW5ON5VUzj&hHv|gtD zNv)sO%fwIX_xJD%vNQR89PQBahK|$7&N-;xs}QQ^jj(uijwQd>Ecu-ae%fxjUviX_ z3omXY@=&eM!Tu+11ZWXbK7JY(#_zl!L4L_tH`Q9;`26WIOI!*#n|}MDrJc!7uOs!k z(%%gFLA|A1&RsVCLVh-KS6Rw^!%{B!*~o3Ml>4ToT=KJ#+p-Th8$bA&rGAZ;a*4B% z`(sPF7g)+A&PMJ}Y~;e9n=IuLXCt@UQtoO?xy0GX{i&tgW=pxm*~op{QtpM8{C>U< z{A|WitEJpuSjr_o8@X+ka(`(lm;7wxc38^YV=0&XY~-%p2b_&xy<@50rIvDuvyuCI zOSzX=$|cT5?r$ySUT(?n-F@I^)4x|(%Kek2T=KJ#o3WJpM@zZnXCwD&;GE|ouyEG> zr`Mr+UGyWI{1tM&IIb~+aMyqzpel)E;Af{ff9K>s|?&H9* z&yz?xuHiK2Xvb9v~y!>=r)8(2H_iao4h_mV6gDvf{!;;@2`@qk}&fl?Y zFL5^QJ=9Xa7r<|SZFmC(L=ks@p!oM$jk)4<4;Joyb zCGHgq9An8&OWeyAIR1T{E$&tDvl(xPS&ldIvxx_<0SA_$2iF__!Syu}?ecv~`~AQY z_qru+mnH6pz}fiK;g)_yel~vfRsc?~Bef;DuKT&Ae#F_xB~Gs&{PMJ1+(I~V^}4`> zBmQkm{fM*Ck2o9sh_lgex21l>+2}`{jef-0==V!Yxy0G{>2ym!B|n>Xke|NqAf9u8 z-yi5NB{rCjo}k^8=-+*2*(lAn#- z4=v@MW+|8aY~=pcQtrnr<&vL`+%1;4yDf3oTH-!!iM!bncZ((N220#cmblMY;%>9V z{g)+fy(R8OOWX!a+-EIun=Emkv&3CziM!qsx6u-Jt0nF^OWb>wxOPk2-+;5(e{An$3==A4#M$gq6KAteO`Od>HE}lk)Wq5BQxj*iPfeW7J~eSR z`_#nQ>{AnGdR|y}6ZdzCv)Rwq{Ag>_L4F^BU%rF;6QLXE!hpDF*hahHxaVPmI~cf# zCBFg-9QoPeV&G@9K3!-z?~|X+ydMXSO<}+J_l1z<9NY)iIATpW{(i1;W}pG`Z6Gqr>59qwswSUbEp6F;_B<80*;XOipJ&(vPOToaD` z5)fz;Hx_x~Mk(qAJy*bI@B3NutFqw-IsIu6i(`N#ZjdEzuqAG&C2oi%t_V2#)BkDj zY{1;C%Jl!Hl)r(+H9%Jb76?$bK?_ZxK*T}=6bM=&K&cT5q_hJWnYN)btpWMSD!Ut5 zbc0lhQkKk2W+pR}`Cvh>C}j<9l_;zRtQbCou(E#xg2ojky0Gr=Imw}En#>&c(*3%8 z_2GWz%>CZyoaa5~yw5qAnaVSp=@OpFb)cc1@JueJA@2})CgbW7lW~C7p@w>^P4wvK zyAAs>-+(76$zkw>DmK&n)x6o(`(|DzJ(=g4C-rt(hh&~>-fZis=84`+>&8hCgfm+| zG;g-{X`blK)Zb=ar}jx)G|#jjzf1c%)mv(*w^KjldFb~2F8%HFeE+lkovD4N5DAA`CI2?j-L{Hvrf~}W4U(FM)@B~{gt*3Rg zZYxjgX&vFsr1uWKKU052U)twv=yckjEoks`yE?^Bw@M)hk@lYZqtH zJ3t;**-fPG^#*nwbkavP1?|4JrpBwUyHsmca zpG~}HK&*b_euYHu35#q-`g49yqfeSI`?pgK^@1jP=)WI5lQ^FS zPkxU>{(fwyOX7F>@0sUo)8E$mC4QGS^;gGjFCJRU4fQ@^qDKX180uZtq}TdOb%9HskJguX3TX|Yf>j+P*_0oDKd9l>% zL_l;p<*^I+p6L%o2ZUdTj`eq3m%x7JYaBJ@nIiw$}5w%o`q*Je}(6SFM6Hko6KKbuW3JK($nn|j+o?0?LK}KUJ!!G zyj=3%X6NkT=Rr0ymsA^b$7FYo{VSBGttvO7v$_vul$~i=tZGUJH=Ca9KXkpq6}@(G z5xtMoK9fA>qYa+KdZzr~Mnk=8P4uX1D?F2{*O0fxkk@C(`2Gvxh+A@380yeMt&unl4^-3Nd!*uYb?{_chf!Q$Ivc>*)BjYu{N-_3GazZRPnX_-IoCTt$g9VWT9vkKeT(pZ-+Jd5wl8neJ~+Q` zy>kuQ_po96e&2d)X`jh^MtCOk==+BKSZ7$T@J#CcfnmK@8P+R2lX{;ttoLcddWC0F z?;<9x@Y?0O&GYT=4C@u1Nxe41dbbr7}hI1lX_*dWfJF6!+M2h zQt$qT^$r-;D?F2W_cg3HWmvE9OzPdou-<;ddWC0F?_9%rpEs;mcqa9F4C^f$)+;=d zdY2g1`+{M;!ZWG&1jBm2VOX#5OzJ(xu--_UdRy}_$zO!mT5mhvi!-cOnlE}=+vw@_ zTchxH8uAtx_V+$Ry@L$({@zgUU_-qx8|uBwQ145IdhayU8#mNDz)&x1sP}e5y(vRI zhoRoIq27UpdfzhCa~ta2Yp6G;NpGfo%AYmnZ;ZL8_dR;vHqXn8+UV`YLu;O)-i3yG z?=sX|)uh*&H|ciD`tnXgy^9U?oM@V?lbag#w##GRY9E|K4D})=dT1TmMvtOBE{Ti$ z?Ss~S>_OrS;myaS4^-drd|p0xlfQkSdBPQIz2x&0`P&C3Jo%dj^0_3BrQ;>%rNWcX zZcKRcxugkCK9@A%$>)+LJc*A9Pd=A4;mPNcv+-PT^mEYTjiNm+c^)oI^YnAsgTxoY zJMurlo2lNT4E36MGwB^|sMpM!N$+EA*4FM_Zx9@R@-qTHbt^L*H8l0~->2>;dX+`hdG)l*BCSI;p&!ubI zjiPr*t6m4*S6cNPyLGfDdWW{^b>Qu2)$?hU-6(qVTlG5d9%|Kd?bgwr=pELo*Maw7 ztDaA*>_*Yc8}eMO^>)zvhgLn;?)tPR^&Z};*Max7R=p0-iKl5cB8cK zs8+oWynk%fbM4mAp6DIjs@H+{aI2nAtL#S6JF-=;1MlNadLHhJVXc?w{nTWh!}~6J z`n|y|9pC%EG_3dRrhZ8KM7#Bp_2s5EdadiT^rPC;53SdZceA11&kgndqK)2O{h;8r zCcTd9DZEd%(QDU_Up48?)ZbeT^g1x*6hf3fdBX zY2Ri;-q#wu829PtrhhJgB6XGcZ!=Gt>Qmp@^FNxW@7H>JjX!P^J+0IFeXS~bUpH)D zGf#9~TBHfJo=N*ePwULozL(mxPmgPP9*%;>o^GP%>F;ZPJKl+gdcrf& zJIPQ_cqV$~C+EbNYHwY>gZA0u>*JT7vHGgD>#yvJuIq~Qb#L0}>+M_b^I7e9tsD_; z$LqU3(sgC`#;Z4>^9R2i{Epf|{2UyKX#iYvuw^AUgie8ZYyo}|{Ed{ualDJ4rNP`J zo`R2I>-nSkf^T5LpX;=&ZY+Y|1K!i{9UKDvDF-(@&~bv7U}gLucsC~e?cgwnHWkV< z;MXwG%!A?ibxs<58I$r?z-tj1K<;w+`9{W2a{3a<^br1s%)lF%kR}CeI=X-s~fe_%U!NCYpjD zJcGWl0a*#|cP4Fya{#yjlY8Uf+secmogW&suj2rG<2L1}`!LNbKF5_8BIr#GBj0gNzz|*f} zKI4bLJ43{ljodb{h)JvjUu*b+Ti4dx69rGbiggYCGVno6_&dNdChZhlxQ?+6#|@sj zzCO-ZfDd8YD9?kxz~tUHz~x=_dn4fU*H~5xP8s~OZpIM46MXzy#vXnZoY%uR;9eK# z#T@uP@CbK-^D28%^xA8QSGJtl3w5qut#_LRZFjr_eM{4{vQ zrh4B);9Zz-l2UeEJ^oSf+Rcn-%6q^Q`xpJ|LXjdi~SzTWU_p!24BxnKa3F)SEw_=1mPN(UUe zx&AK5fd3S)uMb7=ou6vxfLUw@^*#U|d|SOe^T1zXyC|=LFMXDH@5sZHU zACBOaUnGY3A@Ibz>-8=Lzk>0H#mVwJg32T@2LA;aPC8OU+^=StfdL?>zMRw zCwTEcFc#6tf}i^q<@ibPyO?Me!6U!T^CjjBz=tpy19|ZN$5@ZxKLGCg9pZrR00Wrl z3;tt~zEi#v9C(~@g`WnGeWG6PBJc`Ko@p4|_C3~E=HqtoyzkfjmEeom0?GxS{Q+%2 zNARyoJOj$(;2W6KD>(X8{oP#xFMPV5Glap1u>_nlc>FW8m3x)|>@bMql+q?^W4U=-g#TDi_d=FT7i7|&S z_&TQU1$Vtn-zXOx{0aTRPlMOK!aEn=@v3Eg^Iz$gtoh*0wYnbzU$AV}Qp#Th?KYdL zOYpBSiESM8?rXEQ!x3EaHk%d3Ukbk0ZnJL1Uj%-7Kkmg(fNS@+Sw;NyVDe9FRs}x= zo_v5!%~Ky3!z3q(gKv9#y?j1+`a5hSN36r(S23B_JEZJDo8_cj@KH?W<740#4x)XO zZwD_v*k-x#SAmNTw^=@X!N)P-?*i>d*wpxRfhiZ|aH`;%qbbLa2rjT$aVZB^9b+TU zV%~wTVo7|D+h#q7rGx{X%Rx>SKLEaj?T~UXu-Iljh93eyhwZ{ofyeR-5zpd#!27Y+ z@blojrL>QKY))_`HV}y$`Ad%i0|{;tcS6xl!I%|qy6}?58AA+V|IS2pa@1* z(th#5Uwnvhh3`AxW-Y#ec8Cuy;)5)&_~3n*A7AjxSP)r*d;Lk7*zTjEw8N0#KG-v@SMF?_*aV{v@JL^o?4 zzTj`M2k-@5{4&ule8K#+HtQ99!KX2cAM_L4&_n$31^3@T+wcY7fi1;%fwy2Q@MGZ0 zO&ER%ydlC`C*|N5ucMv#MeyX!JQsW)7{Oxrf{XiTGrr(i*miuu3$SVY5co|jk6#2o zy@j!ap8(&)iuk^*aIfcC;OD`kZeU*E3&t^vA0!k!@J8Z~FL)ld2w(7CYz6)_c+pM7 z89xM$Vj(F9-*pS)4c`Tx_6f!}egNG3Nt?9|KL&pMR@#A|09X7qZ59sr@i=W04mkWN z)=B(n@FDB~e%Mg(O>7>%;4f}tZsH5>^Ea&j_=0C(0sH{igN5(~pTC{9;S2s4yAi(% zx<75RZpZh4Yp`wj5%3XgJHFsCpJATh3ogO(_<}e8E#m}Va1yKFPlNZ}VY6!ZdC>QH z#tDa20r1efSOf7r;CHc=_+=?eGQWfauKoh^3qJ%ticRAe1@GovgD>dZ&NCH0*n1Cg z!xwyYkY|c7Xr);zYld1Cm2-Ixns@D^+-egeGX0iFkb3bcQTxZ(T2E3q)X-~(6` zUvTr6i50%!mOO377rY7EfiHM3_87k4{D*lD;(NfCzsa1!uY#pVXe)JBYy3QT$S$5Wz6acn$$_Zj`^*dM z0Q_mt`6Pz#0R|M}Hgm?tfPly$M3H;0} zyj$TUz~_I;c%r-v{;0|`qWnehl%Lnz?*+g8uhdKVV_@|)#y@<)!+yo{#dm?{V$yd% zcpWC~jDZhg($1Y=;C05ToS%S?V0qC2JvG{o?*&(5q7ww~z~tU-;KP_`?gW3@@U34n zMlj(B-qi48;L}(U&1b=VepA2K3H}f(Q(gvF{u}+lUjs(41ZR?hw>5mh`x?IBqYYp1 zM-5+azc=dl3SQLk1#f8hf_FB2!RdxCxU1m{{;c5(+TW~e3Le?;1y61Gf)_V@!JdXM z_{oMZ_{D~w0`m=D@VSOBxa8kiqZoUFAHXCIf?W+?@aBe}24BX6FZkSV>wLjA)*LIy zvk>gVL`U$phA()3!xwz4;j=USAAHSGf8WSuSurQA^n!afmbp#=N0)n*&!IfrrhLBx z_9}$QIGW3z8!zSCS5mCEuHsqyS~p20jmxvoQoPmH#nzSl_iXDTyz{IJ_}u(T@O9+My$@SzU8O$nU1`0Od(VQi!HQUG;a^W{*76kxlw4i-y_AJvY_hK9 zZ*Qyv*Ha!*HAEXF93@h+04-hj3OK#6rA-mq*3EqzmFC$EO@BkvrD_z$R_<|GE3B3L z&t3JK|Kz&bI+FWWa_=?jPKjQG7)ejBAyR#C_AZnD ztW&)>fp#pRRW8OsJ-WLiu?kg*zFg<1c3#lXl_x9h)bW+C>QAXvrM0~$@GpO{lA|L} zZVRpGYw9g$lP#@~x=&TH-SeK-2zQF_3hw8vfa>PATDyBBawfzW=2VRD%6RLgPitw> z?&r3jH9dFP^5}*h*VeAhy?hpV+QKErdltI7Hm=*WzI)>}r!Bl>)j7v`7rJ`;)^1$C zwrA7EuG1D?-_^Tt`RQ-pf7#mJ-mVQ-^<3{lU}NuT3%6|EcxvyuaMy;ly~l0nUblHu z@20E!j$5~B!>Ma~Hypop$wJqLwHv#y?&|GZ-CP?|F4wZY&0Bi=&f_D@hT2iHsGWF} zx{o`1yVh;l+}(G5<7-MbcU`xITDsN;Hg|9B?&-RwtM{#MHh=rD$$7dwRPTx)#5svuttaT9z%|qfN^eztuTz zU$$7sjW1*X{BOG)b7VcYs)P2lBkfGP(%!T$?N8^23PZ)A(olFTIu;*Gj%CJjV}-HO zSY@m>W*>KsyT`rb{_)^=csx2DA5V^F#&hF^afDoR>OU(mS{}7LbF3XU&b&O!H}chEl=91IUe2jhdu!OUQ8urOE}tPIv@i!<$}CH{0U9ZpBn z@pLksN$1jqbSYg)*V6VO=a75IJLDe<4uyxJL-C>HP-ZAcn@dBLq1upr*g5PT_73}p zgTvwB=x}^EIh+~J4Ht$>!SgQMZm=xBU2Ihq;GjTS~r zqm|LxsC~>i<{tBo`Nx7|zgq-L3Ud@4DWnaWKSrb<(lsoE6J(Kp8;t+wnbXUd)O zru?a3Dx8X@;;CdRlbTNDQ^iy{RZUs_j(%6ar{C8f=nwTr`eXfx{#5^Tf4;xiU+%B= zTLX>(*MMihHxL*I4MYZF1Brpu!1O?Vpg2$-s18_zjzQO;XV5no7z_sZi^JvN>aaE97;%kwMtmcI zkZ0lrz33 zje16Xqk+-TXk;`tnix%uPLJkCi_C!Ps5RyobB%e%d}D#J&{$+FHkKGmjZKf`$BJX+ zvFeyL?ihECd&Yg^f$`9IWIQ&W7*CB)kLSmW1;k*%$Bp&tTo}7a7}n7d=r6*&_rY+Hj$V}O-xVZCyEp0iRy$k>6mm)dM167fyvNh zWHL6Hm`qJhPv$3!ljTXCbErOFtzrDc9BVtze43G*XDk;P&1J@Ol@V=?+3AUszPRa) zm;U(aQII}`=~a||#pzj+zGdiLj{X(sVTnFg=w*$5+Ucp2zPjnHm;U2;KT z$LV>JzGvutj{X;jK#3Ssh(e7x*olObSh$IXmw5PzNRXI>iAt2X#EDFj*kp)Kj`$Ra zP>C2-h*FI>*@={sShU6+KHr- zSh|U(mw5V#XpoqOiE5O%#))i_*k*`sj`$XcaETaKCacUiYsx<5VAi>qcOGV*kGU6M z_Jx>#5oTbFIhbG;rkID*%)~r%vB+#JGasumBU5uMyS)BW_LPG;>0(xTn3q0gW`MaF zVs=KDpD|`=f;pN}voyy%Eih9{%+(6BwZ?q4Gh?01SvRxR%e?h7bA!y?Ftazx{Eah% zlg!}^vpB~*E-;fz%;gHRxyF39Gozi%X*aXl%e?k8vxCg-Fta<#{Ejojlg#l9vpmN< zFEG|#!_UeQWbFvEdPG@2;;bM^){qRVNRD-+px%RJ-YZq!EY`4{6~)P#;$~Ix zvaa}9S%R!BVOEzY>r0#!CdnF;VU@|T&J%R+}2@jhz+8$(rM4)$y|K_*r>^ ztUX~?pD623oE0d^8kAub%CQa=ScyukMHN<~8tajr70Jn(re{1TZ(h6DE;}b9aGfjke^K; z$85Y&yl=ft^8Y8^8qqAB3vgBqSiH51yvJOBpv)unhsrxb`>1_@MV=8Rx5$uBSa0PI zk+!))wat6p-}07EsCT^N;Ibc+EL?VEl84KlOfqrVl}Rox`!dPKWoIV&xLv*di>N#` zsWSMS%1~tusi`bpc65@*%brd$dD+z^R6d$h*?dW5qLPO?RYotnJIU$8D*H^R9p1Fc zJ4VO;GBGb$gHSyWLwL%TY!@ThZwfXV=)YJZqixnEwL z7L--iCpn*Fe3I`4)R}?o6yqw-lPphiys|nuko}^Z9mtN+ukyNxIzNzIqnse*RW?^q zJ4ZQ1kiDavBgpPCtnxR>-XwR+tJ8$C%GxAnlZ;LBwSYQPh^S0W@-)fPBuA4BP4Y9z z&LlVUsndm!%E}}slZ;IAv7$O-sHz>AQ|&FiYA+U2Ck-*R3(Ke-WcA0Lq z?+U0>n~2(RCDmRtr}kQ9b@E`TU6xzzIQ?pW6;bC83AMAzseNZjz4t73R8F<`lyeB# zeTLOODxuCIrqvFrr1qdS&LdU1Kc zc1N-|lATeGeNj=JQB>uOBBsZzoKm>de#p;mD5Op*Vrn0hQD+qewF9cM|FNs{3b)$% z1lae4)tNg>X=b~q9CH*s}-kx@IFqB_m0sy&U99gRnw zXa&?>CaO*{l4=)|SLa$~wSTdz^9;AzxdhbdRz&StlIm0=r*xcLh|a|OHMm#oP5c7hg?&kWAv+4$PsnaU_7bv_ zkbOi(orM(CNkUbfj5*X9f>)i01l8$5Or0>M)VV=Hor_e|iGf3%GkVlnK~SBJMAa!l zN}V?5)%ie0osrnp$$&?lm<80CKvbQSB-Lp^UY(nj)j5D&otL=P2|z%do<-E&KdDYl zaw^*|t1~n?IdQ7pzE7Q_h15PjuFg*~YKLD`r)gESx0jv0N1dnz)Sf=dN}EupYSU^j zUt*=L%0529&$uyk?X0sdb+YDD`}Z*GY)qZ5r5LfY4$rNB7RRUxGL|U$gIxasHs<#m literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/EasyHook64Svc.exe b/RenderHookAPI/bin/EasyHook64Svc.exe new file mode 100644 index 0000000000000000000000000000000000000000..350138d4a9855163853fe92c0a7d91fe6e748a0b GIT binary patch literal 8192 zcmeHMdw5humOr;&BpuQufe-=&F5%S#(&WJ_NFYr}LIWWo2?;MhxaqDW7rOg4_uf1j z2T4R+W(0iU19pdRbj4Y8bP9k$8m|F8S|M4f>f!2j ziQXc$8BMl`ol*)F0q@z9RBaK_*sqZOY*i*o8o-c*`qBY)kIA}B)GrMO08NY)dJjx8 z(I$^>=zbuDZe=KNp(F7PNM+F8qqCp}My@Mu!pCKe!#5z65iK526~*VcU6HtM7P3=! zF3|-SQ8McI`Ycjg2!w?1FQht)dl)9o;)b3Mi`5P5JM$cQ%@!>kB^?qXR(A%9SsF&} z%&W6pbJ)RZV6L53cP8MJJoGW9z(MyRM}u^$2{^{-7Dcv?g!^}EI47a&+ zkh@_urzrJ~8g93w+qLl=fkooz9b$3IsJxp;lA9Z%j*{1t6~jSiL&(@h=}=0tpnUtC z07%=cGlpAk0ogVqC6;R#f)kd3p`Cd}7Gomv?VKTROo5Glf;O1CbT<}=Q=81e6ae>B z0H(t4W#%b<3!OmaK#BnY=+2O!oxjrP~GuFO;Y;8}hTJ2i`Tm8Uy1civ}306^t-;2qE{)D9dL%g7Q-77`*NSYaM!7XXAK@=0ewf)>9}qSY?}w)`##)a6K0rr+`4?hXP#fUD|v@P`=eyU<-t*-f*VJwdN0^|(@XekRum|oBH4%N?~8q-@8KZBB+W4*;G z)Wm|pQVDU918cl#r5a>{#6{MGS-&RrYM>z+iFdd{Ypn>IdQ@QIG8QWaqnKul zY84%|s&+NtHL=k*x0|4`=JwWBu5~}ITnja-hI$>&YZxrl9E>)o=0Mgyw5|kLNYS_S zOKDJaC|`+ym33+Z35hm*SdC0KFrode62x*X+@iL&>+p-g$V-^v*VV}NMCct+gQ7(p z3o2crWZWnl_7AlC%^L~jS|qBgt!;ynLJ=h#?QauzIo>DwX;y=(Ie=OduIOTZZr}mV z=V4upVgpM!ZbO^SlmI-IgzGZyro2{fY7xFzSXk6zYa-$0aieicgBCloDImOW5az^^ zpqdDSQjp1+xLXM?h10+<%r@e_Rjves&5D0ZpVA36>oFD`1N77)KJcp%C77V_@oQnY zJ6{e#!gAxD$MpCDq}Tv!H4U^d98d{y_vhCbTGh_l*=mF7O>hq%7JXbM@uk8SYQpcE zRI^QMH!Hee4(=_9zUx>^d_$m$EWRH|VmsBXiuNvII-Grp;CyOp== zI%Xt+@h7Ip;Lhh)Op0w_sEG}g>Y1771rB0jqEu5Az4Xm)OkrUxVO>QxsT%Ix1rPM< zx)P-(_y-gF5BB-->!|{JzClske>D8I;DqWRKiy38NyeR{3h}2#&EN^r2CAlZGKoDc-g_y&S&4d_4mIcn=DC5R+%I_3hC** z>f*p+lPN>7lf~t7Ib@6EN>}a3#*T83#gY*kn>xgi<8ozGr?1Lbow3%EKQSHKE zY8jd)Su<9rxze}iq_46$rHm-z(TwgM7rKF1NgB(;DpXvlL+q}MwV4?=ORl7hwK%Xd zy6?B6-|ho8l3Xr;B$sG=e-gTtTsdRyf|=_&oWPkg9Fc)lf+n0#%E|C1{czic#_U;_ zzMXV*(Z(I=Z#(BFEnhS2eD;N-FZaka2@ydzF4q#jr4aFYUA?!E-=cZETKcQ#@Y3pq z2Od53)Z@oK++KAi*LC-g-anmxZsr;5`A2@a?!(u5e_uHFw#v2h?$0g1^4^mlO}OjI z-z80%vN|*W@GJkey>!El3-auoJ9;Zl*p58{Xf5Ry!XVqbGzS>E62S2%Ch2; z)_o_>p7q^1v`+_p0+1?|KoDn{FK1u%@=oh@0dB~1-ke4=?^dZ{H{mc z6R#=_?|qzk%U!n_bJ)C^C)aEmQ*iJ8&&^$L&KUOm=eIvy^$Yp9&3tue<4^zdotMWJ zJ#pqw7qjPH?VWvi-P-m4?#=pO&(<%_)a_61ZF_b1^JklWmh-gZCH3)rhc9og?racdG~Nt7|*=#bsb%v5kGwZq^mT4aFb&aP4ld*Xy`lXXT;B^Qhw!}fnBHt2YqRIP{p2v zvAag}aq_?~YnOggd zW6Mj=-Sa`q%ANb)dmzOj|D^n_S08`uwccfC&$FkS!W+)~`q>k8zJ;@=I&Xb@v-GWu z#)9<4?`%4-r_vfsdHCsvmaO{Z z0j;ET@t+R8@!Q9L@YydWojm@>pe@;gtNF_iWU2e{=H1)?GD^T^MS}&h_q+MK`%N8Ck#SarZ7YM*lM&P^j-M zkGsfNI6|-pAKqo^>X+2Nlt22g_gBlkyVEW_@Vl+|PUU`5K7T_**LbjMY)H7vhQ!1p z8s4BaZ{84QW=q$sd_+uOVFSsYNT8W_`~Nx}jlaY3L7eAhnU`)%iTAn~Wn;OfBZ3o= zh`5I^<_QG(n+aZXCzD(zO5Yq<_-iTex_cDzTI9$EB)%&U%^L*InYuZ+F2(rUZXj_f zc+<2I-Cag>P~6A_3guZSG~yiI2v~s^wtBoE)X+-QeSnp**IIhs_USdghYt}O(Xs4A zz9=S!AX?}euZnDmz%}B8)gea}r>766CqIvQnj~5^fXdHQ1N8p0STN90+aKZ75_B@b z#ZT+jK_vZL@DxzuHw%#fe@hyTmJ&{A4JUml9xaGREYMcqAu2(Oi2kD(ts?k%-wb6Q zr|_78$0;5}DH;WUkBD(}#WC0;(QY_oB}TXeJO;SAzLCDzg3BB{_L0dAeHl0vyn667 z2e#EMbD@MjY4Q56xxhRe%?pIVgR#Cz%=`m0Oo5yyjllPs{_j zZA0MEVeP~$@pp1Qrkc18v3M=mXKOw}KC@qE+y1f5!%Mw{6{d?>Y=_3?0Ly$`dqP~w z=i>TyU!9S!n~#N}trw#)#MpRz8ijSfY5N6OK%c~xuCUvur(amGs4EndagpK|p3>Yx zPeHEC!Z_-22Pn;5-B6i7FIUEWAskSGxPO)AMwyYjXkn@|)ww{4-_>P^2pgrj?Rt2= z;cvtJ+{h29eqA%P7Be5w!hFRDc{&Pn<&Y9qTbN-cPHxd3gvoNBFkb-2H?Dx!>4Ya` z=oQBKU7A}R^+qB=7558h>`@|-+?g>6rrvItzHp274fQF?746Ws5x;iE>%i!2YdiF0 z0bE5o5LUD@;~PpXPDquJ`sKu~>Ckuu>tI1S$YE)&V)()x+7_ng%I&Jx&!3A*b6b?4 z!Qz7wLS_!4O+xjV*Xh1sW}gwjuwZ6lh8BwH{u}sfv;ekh{(qNu2gDzLjl=xgmc6H6@D{&Xtg#ATKSSK?D5H3Sc@*75F=SyHph|%sy9=toV%#4hc z5M^BnBu+T&Dg%K6%2cWV;|hfd0SCgBlu1aS3`G$LIKspM;)IZ+l0XPS`CiYCw6aZ# zpGk^d^_zZ2zkcua>+b2%x-EOiM?`+q;bEe~cyehJ@IQk**pV5JM(Cl^=Vu<4);>S8 zYnyH>Im_&`)U1+H4a0Pl9!;_O4MjJUmbOkMYo@jMS!adk6jZk-h}KGe+I-i#E#7Fy zNuD`Q8b=fbCFD|DYw%Q18&QeQ5pCJEn+a^cDEk3{Y`KWwSK~D-%73Fz7Y#KM#X$Y& z0-`o%UrzKY2jbL{Cz^69?bG1Oi0MK)1bkIdzqq6AbbxoUZQu!CN1OnTqQI)SomL%{ zsGA9msPLI4p%#@!qNn1PZKXgHK3t9l>pI2oMrepzTE>K+VC5mh`YKV2N+Z#VBJ{K7 z|8WFrcwM1zZpsv(uGvKS@kC)k9R=+Q=%Xn873-$3G>fQ6<9}`a>dyY}cRy(Tt(Vi8zhHC>LK&Cfe+EU<81!h)ET$NKii z%79P!IEeKTw6Vd2&2pA2ufc8sPas$po519W05Pnzu+N+fXk*2MV-)}vWOA{oj7|dx z2V+=2;c9t8RWNogT2<3(0yG&ySXyO+Jo5NSXN97^*mN)l*@nrRg(-s&@Kt-_&IMZLpL9KVQfwZOJnJ1Q zpJ(G4lucL=ED!wZT6i}UE?p1|#mp_01kI_6^EgEC_Zm!{+S)UR5)5Z?6HYeWq~S^IM~>jw||Ms;eaF~o4&DUH0|Dg zn|v@6^gq+25=o>ZMx~P{3APYTtC2~=6H#$v9G)~T7?s=@L(spVNrbw3nQ$hy0A>%x z=1m%Z{<+F;(J599LJ@1+ywK#$jdPE?E!^y3vB~h%S%3l*T8h1X+c+ zPN(rz#6c7GcWiO(U(vaGg~V(WEG62}5U+{X*VNZ8WlDfDfZv7?tKu@SMG&lO8~ukBHfqY)H1?`4sS{;NR>O8M6mC7ogIng))If^x@okJ|B4W z`KTC1)F7T1ir_Y#h01*9@e}<~e(&cta)qkkMv&SC%#(rkEdo9y;7bC&D_}rkt|H(T z=|U+;hJaTK%J-yOL3v4f4%7EX>20+A@^gUW1UygXzBQuVB;ZZ*x8xu_B5JC?w2iEFx72u$J0Ue;*bPD)+DwX4uqI$sX)GU|MF*+cBS3WHJ^BnUMdJy|PCZB#oyD$s9e!OxoeJD^* zis^^wZ5DRRMeEFTe@0tQoddR`W#b+FhNEY-c(a+!=^4%H)T|wPO0&r&sE%$L9a=`+ zDOz@ugZ-eV-_av2TbK0f=}`rqJu4CCjhbbTaq<-H1wOW3>Qb#f%~^@7i*}WH zxSm}VhYsa>Xv}U9NkhA`U**Lwrfp?^CgaZ5*iEJb-8mr&DOfPs9VThmj*3ym)NL@XveX>Z zdjoASGMH9ODc{{)WF&t_rQCU=&Wxs^vuY1;F4Wh>)0q9NoieSA-XrqETOimPb`Fe4 z3KpiBdy#Imt5|c?jeF^K>eir*msBAd-MUy=%_epOY=vSk^b)TV*}Kxr@OrZ~gCAJI z*ibVj!ar&iQE8mgc`$-B#u;WJ)0Y#Q7rvyNZu4h6Lg5XGzNPy%>gqt#&QZyOC3xHI4j?A)U z{Q`bDq)5^HF8q~1LNCkj_A5|PMuBJ|63y?8=C6rn&yD7>E0vv zeqngc?YqKO?+s7fKKoxSzt|UB)p)i3{%hmksDEtzyUX@$s`%|oI}i1iSof@1|4+xN zonAZb#1Gfb`r8fX?fPZwxNGiQI^_HN^)C+{8NR7^(fihk`@i{zXD_=ie&0UDc=0D+ zyzNh$+MLHOY&~}4;OnpVmeS>SFKay*k_s2h>1<7xJZTd$wbe96vJgpVUS&&DC7S4^ z8E1xODX|{SQStU05XW)3M3J!qL~|uln$5zgq{LG5mAabRMT#e;bZN*)nlI6u`ntsn zm!umOSF20Xi>n(_HH)j4E?&5(dSUObB6puGn&u7?wUj(ol1aUXy>*2^Z*tSO3PTmx_)&O6E z+K4)Y?>_ILwxGQll~*%&Sk`$2mto(08fbYHH+i-rYy}Sb>4~R~qv)n4w z&6gAL2N$ml`Wn#ONS*j{y^#{sfmRY<+FOAq0avbqzWV>cxr9WsbP1b%CpbYJ;zm1343zTORNaVK@mkIgrvp z?>mF0M}hT8{4ml8Bxo`WVocDYDqJ!5h1tSX1F`3jKTW{XwF&=-VfHa#V77zhZCtXdCRq z{%{(Ntxv&j1=?z;7FH?9k+E-P3gV=JhI1GNUkt~L?jYdZNB;VZFv_p>xkNaVvGoL&!JfBVQ t$`(HMz=Huq>C^TX27DTzxZfy`U;L+wIVJdeWxJaipQiU`GXLWd_&4Ue)p7s; literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/EasyLoad64.dll b/RenderHookAPI/bin/EasyLoad64.dll new file mode 100644 index 0000000000000000000000000000000000000000..5537082c2d2837ee6715c132e5df121425840ef3 GIT binary patch literal 7680 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 a^W)F&J_iiq*(>$j$HM&G7v=w91pfnp2Vi>u literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/SharpDX.D3DCompiler.xml b/RenderHookAPI/bin/SharpDX.D3DCompiler.xml new file mode 100644 index 0000000..faa6231 --- /dev/null +++ b/RenderHookAPI/bin/SharpDX.D3DCompiler.xml @@ -0,0 +1,6852 @@ + + + + SharpDX.D3DCompiler + + + +

    ^67Qqk`%4)w82=+@Xst-k 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

    An array of structures for the parameters of the input signature.

    +

    A reference to the interface that represents the input signature of the function-linking-graph.

    + dn280542 + HRESULT ID3D11FunctionLinkingGraph::SetInputSignature([In, Buffer] const D3D11_PARAMETER_DESC* pInputParameters,[In] unsigned int cInputParameters,[Out] ID3D11LinkingNode** ppInputNode) + ID3D11FunctionLinkingGraph::SetInputSignature + + + +

    [This documentation is preliminary and is subject to change.]

    Sets the output signature of the function-linking-graph.

    +
    +

    An array of structures for the parameters of the output signature.

    +

    A reference to the interface that represents the output signature of the function-linking-graph.

    + dn280543 + HRESULT ID3D11FunctionLinkingGraph::SetOutputSignature([In, Buffer] const D3D11_PARAMETER_DESC* pOutputParameters,[In] unsigned int cOutputParameters,[Out] ID3D11LinkingNode** ppOutputNode) + ID3D11FunctionLinkingGraph::SetOutputSignature +
    + + +

    [This documentation is preliminary and is subject to change.]

    Initializes a shader module from the function-linking-graph object.

    +
    +

    A reference to an interface for the shader module to initialize.

    + dn280537 + HRESULT ID3D11FunctionLinkingGraph::CreateModuleInstance([Out] ID3D11ModuleInstance** ppModuleInstance,[Out, Optional] ID3D10Blob** ppErrorBuffer) + ID3D11FunctionLinkingGraph::CreateModuleInstance + Is thrown when creation fails and the error text is available. + Is thrown when creation fails and the error text is not available. +
    + + + Gets the error from the last function call of the function-linking-graph, as a string + + + + +

    [This documentation is preliminary and is subject to change.]

    Creates a call-function linking node to use in the function-linking-graph.

    +
    +

    A reference to the interface for the library module that contains the function prototype.

    +

    The name of the function.

    +

    A reference to a variable that receives a reference to the interface that represents the function in the function-linking-graph.

    + dn280536 + HRESULT ID3D11FunctionLinkingGraph::CallFunction([In, Optional] const char* pModuleInstanceNamespace,[In] ID3D11Module* pModuleWithFunctionPrototype,[In] const char* pFunctionName,[Out] ID3D11LinkingNode** ppCallNode) + ID3D11FunctionLinkingGraph::CallFunction +
    + + +

    [This documentation is preliminary and is subject to change.]

    Passes the return value from a source linking node to a destination linking node.

    +
    + As return value is used the constant D3D_RETURN_PARAMETER_INDEX. +

    A reference to the interface for the source linking node.

    +

    A reference to the interface for the destination linking node.

    +

    The zero-based index of the destination parameter.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + dn280540 + HRESULT ID3D11FunctionLinkingGraph::PassValue([In] ID3D11LinkingNode* pSrcNode,[In] int SrcParameterIndex,[In] ID3D11LinkingNode* pDstNode,[In] int DstParameterIndex) + ID3D11FunctionLinkingGraph::PassValue +
    + + + Generates hlsl code for function linking grpah + + Flags (unused by the runtime for now) + Hlsl code as string + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the error from the last function call of the function-linking-graph.

    +
    + + dn280539 + GetLastError + GetLastError + HRESULT ID3D11FunctionLinkingGraph::GetLastError([Out, Optional] ID3D10Blob** ppErrorBuffer) +
    + + +

    Initializes a shader module from the function-linking-graph object.

    +
    +

    The address of a reference to an interface for the shader module to initialize.

    +

    An optional reference to a variable that receives a reference to the ID3DBlob interface that you can use to access compiler error messages, or null if there are no errors.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280537 + HRESULT ID3D11FunctionLinkingGraph::CreateModuleInstance([Out] ID3D11ModuleInstance** ppModuleInstance,[Out, Optional] ID3D10Blob** ppErrorBuffer) + ID3D11FunctionLinkingGraph::CreateModuleInstance +
    + + +

    Sets the input signature of the function-linking-graph.

    +
    +

    An array of structures for the parameters of the input signature.

    +

    The number of input parameters in the pInputParameters array.

    +

    A reference to a variable that receives a reference to the interface that represents the input signature of the function-linking-graph.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280542 + HRESULT ID3D11FunctionLinkingGraph::SetInputSignature([In, Buffer] const D3D11_PARAMETER_DESC* pInputParameters,[In] unsigned int cInputParameters,[Out] ID3D11LinkingNode** ppInputNode) + ID3D11FunctionLinkingGraph::SetInputSignature +
    + + +

    Sets the output signature of the function-linking-graph.

    +
    +

    An array of structures for the parameters of the output signature.

    +

    The number of output parameters in the pOutputParameters array.

    +

    A reference to a variable that receives a reference to the interface that represents the output signature of the function-linking-graph.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280543 + HRESULT ID3D11FunctionLinkingGraph::SetOutputSignature([In, Buffer] const D3D11_PARAMETER_DESC* pOutputParameters,[In] unsigned int cOutputParameters,[Out] ID3D11LinkingNode** ppOutputNode) + ID3D11FunctionLinkingGraph::SetOutputSignature +
    + + +

    Creates a call-function linking node to use in the function-linking-graph.

    +
    +

    The optional namespace for the function, or null if no namespace is needed.

    +

    A reference to the interface for the library module that contains the function prototype.

    +

    The name of the function.

    +

    A reference to a variable that receives a reference to the interface that represents the function in the function-linking-graph.

    + + dn280536 + HRESULT ID3D11FunctionLinkingGraph::CallFunction([In, Optional] const char* pModuleInstanceNamespace,[In] ID3D11Module* pModuleWithFunctionPrototype,[In] const char* pFunctionName,[Out] ID3D11LinkingNode** ppCallNode) + ID3D11FunctionLinkingGraph::CallFunction +
    + + +

    Passes a value from a source linking node to a destination linking node.

    +
    +

    A reference to the interface for the source linking node.

    +

    The zero-based index of the source parameter.

    +

    A reference to the interface for the destination linking node.

    +

    The zero-based index of the destination parameter.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280540 + HRESULT ID3D11FunctionLinkingGraph::PassValue([In] ID3D11LinkingNode* pSrcNode,[In] int SrcParameterIndex,[In] ID3D11LinkingNode* pDstNode,[In] int DstParameterIndex) + ID3D11FunctionLinkingGraph::PassValue +
    + + +

    Passes a value with swizzle from a source linking node to a destination linking node.

    +
    +

    A reference to the interface for the source linking node.

    +

    The zero-based index of the source parameter.

    +

    The name of the source swizzle.

    +

    A reference to the interface for the destination linking node.

    +

    The zero-based index of the destination parameter.

    +

    The name of the destination swizzle.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280541 + HRESULT ID3D11FunctionLinkingGraph::PassValueWithSwizzle([In] ID3D11LinkingNode* pSrcNode,[In] int SrcParameterIndex,[In] const char* pSrcSwizzle,[In] ID3D11LinkingNode* pDstNode,[In] int DstParameterIndex,[In] const char* pDstSwizzle) + ID3D11FunctionLinkingGraph::PassValueWithSwizzle +
    + + +

    Gets the error from the last function call of the function-linking-graph.

    +
    +

    An reference to a variable that receives a reference to the ID3DBlob interface that you can use to access the error.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280539 + HRESULT ID3D11FunctionLinkingGraph::GetLastError([Out, Optional] ID3D10Blob** ppErrorBuffer) + ID3D11FunctionLinkingGraph::GetLastError +
    + + +

    Generates Microsoft High Level Shader Language (HLSL) shader code that represents the function-linking-graph.

    +
    +

    Reserved

    +

    An reference to a variable that receives a reference to the ID3DBlob interface that you can use to access the HLSL shader source code that represents the function-linking-graph. You can compile this HLSL code, but first you must add code or include statements for the functions called in the function-linking-graph.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280538 + HRESULT ID3D11FunctionLinkingGraph::GenerateHlsl([In] unsigned int uFlags,[Out] ID3D10Blob** ppBuffer) + ID3D11FunctionLinkingGraph::GenerateHlsl +
    + + +

    A function-reflection interface accesses function info.

    Note??This interface is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    + +

    To get a function-reflection interface, call . This isn't a COM interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.

    Note?? requires the D3dcompiler_47.dll or a later version of the DLL.? +
    + + dn280546 + ID3D11FunctionReflection + ID3D11FunctionReflection +
    + + +

    Returns all constant buffers provided by this function

    +
    +

    All references to that represents the constant buffers.

    +
    + + +

    Returns all function parameters

    +
    +

    All references to that represents the function parameters.

    +
    + + + Returns reflection for function return parameter + + Thrown if function has no return value (void) + + + +

    Gets a description of how a resource is bound to a function.

    +
    +

    A zero-based resource index.

    +

    A reference to a structure that describes input binding of the resource.

    + +

    A shader consists of executable code (the compiled HLSL functions) and a set of resources that supply the shader with input data. GetResourceBindingDesc gets info about how one resource in the set is bound as an input to the shader. The ResourceIndex parameter specifies the index for the resource.

    +
    + + dn280551 + HRESULT ID3D11FunctionReflection::GetResourceBindingDesc([In] unsigned int ResourceIndex,[Out] D3D11_SHADER_INPUT_BIND_DESC* pDesc) + ID3D11FunctionReflection::GetResourceBindingDesc +
    + + +

    Gets a description of how a resource is bound to a function.

    +
    +

    Resource name.

    +

    A reference to a structure that describes input binding of the resource.

    + +

    A shader consists of executable code (the compiled HLSL functions) and a set of resources that supply the shader with input data. GetResourceBindingDesc gets info about how one resource in the set is bound as an input to the shader. The ResourceIndex parameter specifies the index for the resource.

    +
    + + dn280551 + HRESULT ID3D11FunctionReflection::GetResourceBindingDesc([In] unsigned int ResourceIndex,[Out] D3D11_SHADER_INPUT_BIND_DESC* pDesc) + ID3D11FunctionReflection::GetResourceBindingDesc +
    + + + Returns all resource bindings attached to this resource + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Fills the function descriptor structure for the function.

    +
    + + dn280549 + GetDesc + GetDesc + HRESULT ID3D11FunctionReflection::GetDesc([Out] D3D11_FUNCTION_DESC* pDesc) +
    + + +

    Fills the function descriptor structure for the function.

    +
    +

    A reference to a structure that receives a description of the function.

    +

    Returns one of the Direct3D 11 Return Codes.

    + + dn280549 + HRESULT ID3D11FunctionReflection::GetDesc([Out] D3D11_FUNCTION_DESC* pDesc) + ID3D11FunctionReflection::GetDesc +
    + + +

    Gets a constant buffer by index for a function.

    +
    +

    Zero-based index.

    +

    A reference to a interface that represents the constant buffer.

    + +

    A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.

    +
    + + dn280547 + ID3D11ShaderReflectionConstantBuffer* ID3D11FunctionReflection::GetConstantBufferByIndex([In] unsigned int BufferIndex) + ID3D11FunctionReflection::GetConstantBufferByIndex +
    + + +

    Gets a constant buffer by name for a function.

    +
    +

    The constant-buffer name.

    +

    A reference to a interface that represents the constant buffer.

    + +

    A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.

    +
    + + dn280548 + ID3D11ShaderReflectionConstantBuffer* ID3D11FunctionReflection::GetConstantBufferByName([In] const char* Name) + ID3D11FunctionReflection::GetConstantBufferByName +
    + + +

    Gets a description of how a resource is bound to a function.

    +
    +

    A zero-based resource index.

    +

    A reference to a structure that describes input binding of the resource.

    +

    Returns one of the Direct3D 11 Return Codes.

    + +

    A shader consists of executable code (the compiled HLSL functions) and a set of resources that supply the shader with input data. GetResourceBindingDesc gets info about how one resource in the set is bound as an input to the shader. The ResourceIndex parameter specifies the index for the resource.

    +
    + + dn280551 + HRESULT ID3D11FunctionReflection::GetResourceBindingDesc([In] unsigned int ResourceIndex,[Out] D3D11_SHADER_INPUT_BIND_DESC* pDesc) + ID3D11FunctionReflection::GetResourceBindingDesc +
    + + +

    Gets a variable by name.

    +
    +

    A reference to a string containing the variable name.

    +

    Returns a Interface interface.

    + + dn280553 + ID3D11ShaderReflectionVariable* ID3D11FunctionReflection::GetVariableByName([In] const char* Name) + ID3D11FunctionReflection::GetVariableByName +
    + + +

    Gets a description of how a resource is bound to a function.

    +
    +

    The constant-buffer name of the resource.

    +

    A reference to a structure that describes input binding of the resource.

    +

    Returns one of the Direct3D 11 Return Codes.

    + +

    A shader consists of executable code (the compiled HLSL functions) and a set of resources that supply the shader with input data. GetResourceBindingDescByName gets info about how one resource in the set is bound as an input to the shader. The Name parameter specifies the name of the resource.

    +
    + + dn280552 + HRESULT ID3D11FunctionReflection::GetResourceBindingDescByName([In] const char* Name,[Out] D3D11_SHADER_INPUT_BIND_DESC* pDesc) + ID3D11FunctionReflection::GetResourceBindingDescByName +
    + + +

    Gets the function parameter reflector.

    +
    +

    The zero-based index of the function parameter reflector to retrieve.

    +

    A reference to a interface that represents the function parameter reflector.

    + + dn280550 + ID3D11FunctionParameterReflection* ID3D11FunctionReflection::GetFunctionParameter([In] int ParameterIndex) + ID3D11FunctionReflection::GetFunctionParameter +
    + + +

    Values that identify the indended use of a constant-data buffer.

    +
    + +

    -typed values are specified in the uFlags member of the structure.

    +
    + + ff728729 + D3D_SHADER_CBUFFER_FLAGS + D3D_SHADER_CBUFFER_FLAGS +
    + + +

    Bind the constant buffer to an input slot defined in HLSL code (instead of letting the compiler choose the input slot).

    +
    + + ff728729 + D3D_CBF_USERPACKED + D3D_CBF_USERPACKED +
    + + + None. + + + None + None + + + +

    Values that identify the intended use of constant-buffer data.

    +
    + + ff728722 + D3D_CBUFFER_TYPE + D3D_CBUFFER_TYPE +
    + + +

    A buffer containing scalar constants.

    +
    + + ff728722 + D3D_CT_CBUFFER + D3D_CT_CBUFFER +
    + + +

    A buffer containing texture data.

    +
    + + ff728722 + D3D_CT_TBUFFER + D3D_CT_TBUFFER +
    + + +

    A buffer containing interface references.

    +
    + + ff728722 + D3D_CT_INTERFACE_POINTERS + D3D_CT_INTERFACE_POINTERS +
    + + +

    A buffer containing binding information.

    +
    + + ff728722 + D3D_CT_RESOURCE_BIND_INFO + D3D_CT_RESOURCE_BIND_INFO +
    + + + No documentation. + + + D3DCOMPILE_DISASM_FLAGS + D3DCOMPILE_DISASM_FLAGS + + + + No documentation. + + + D3D_DISASM_ENABLE_COLOR_CODE + D3D_DISASM_ENABLE_COLOR_CODE + + + + No documentation. + + + D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS + D3D_DISASM_ENABLE_DEFAULT_VALUE_PRINTS + + + + No documentation. + + + D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING + D3D_DISASM_ENABLE_INSTRUCTION_NUMBERING + + + + No documentation. + + + D3D_DISASM_ENABLE_INSTRUCTION_CYCLE + D3D_DISASM_ENABLE_INSTRUCTION_CYCLE + + + + No documentation. + + + D3D_DISASM_DISABLE_DEBUG_INFO + D3D_DISASM_DISABLE_DEBUG_INFO + + + + No documentation. + + + D3D_DISASM_ENABLE_INSTRUCTION_OFFSET + D3D_DISASM_ENABLE_INSTRUCTION_OFFSET + + + + No documentation. + + + D3D_DISASM_INSTRUCTION_ONLY + D3D_DISASM_INSTRUCTION_ONLY + + + + No documentation. + + + D3D_DISASM_PRINT_HEX_LITERALS + D3D_DISASM_PRINT_HEX_LITERALS + + + + None. + + + None + None + + + + No documentation. + + + D3DCOMPILE_EFFECT_FLAGS + D3DCOMPILE_EFFECT_FLAGS + + + + No documentation. + + + D3DCOMPILE_EFFECT_CHILD_EFFECT + D3DCOMPILE_EFFECT_CHILD_EFFECT + + + + No documentation. + + + D3DCOMPILE_EFFECT_ALLOW_SLOW_OPS + D3DCOMPILE_EFFECT_ALLOW_SLOW_OPS + + + + None. + + + None + None + + + +

    Values that indicate the location of a shader #include file.

    +
    + +

    You pass a -typed value to the IncludeType parameter in a call to the method to indicate the location of the #include file.

    +
    + + ff728723 + D3D_INCLUDE_TYPE + D3D_INCLUDE_TYPE +
    + + +

    The local directory.

    +
    + + ff728723 + D3D_INCLUDE_LOCAL + D3D_INCLUDE_LOCAL +
    + + +

    The system directory.

    +
    + + ff728723 + D3D_INCLUDE_SYSTEM + D3D_INCLUDE_SYSTEM +
    + + +

    Values that indicate how the pipeline interprets geometry or hull shader input primitives.

    +
    + +

    The method returns a -typed value.

    +
    + + ff728725 + D3D_PRIMITIVE + D3D_PRIMITIVE +
    + + +

    The shader has not been initialized with an input primitive type.

    +
    + + ff728725 + D3D_PRIMITIVE_UNDEFINED + D3D_PRIMITIVE_UNDEFINED +
    + + +

    Interpret the input primitive as a point.

    +
    + + ff728725 + D3D_PRIMITIVE_POINT + D3D_PRIMITIVE_POINT +
    + + +

    Interpret the input primitive as a line.

    +
    + + ff728725 + D3D_PRIMITIVE_LINE + D3D_PRIMITIVE_LINE +
    + + +

    Interpret the input primitive as a triangle.

    +
    + + ff728725 + D3D_PRIMITIVE_TRIANGLE + D3D_PRIMITIVE_TRIANGLE +
    + + +

    Interpret the input primitive as a line with adjacency data.

    +
    + + ff728725 + D3D_PRIMITIVE_LINE_ADJ + D3D_PRIMITIVE_LINE_ADJ +
    + + +

    Interpret the input primitive as a triangle with adjacency data.

    +
    + + ff728725 + D3D_PRIMITIVE_TRIANGLE_ADJ + D3D_PRIMITIVE_TRIANGLE_ADJ +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_1_CONTROL_POINT_PATCH + D3D_PRIMITIVE_1_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_2_CONTROL_POINT_PATCH + D3D_PRIMITIVE_2_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_3_CONTROL_POINT_PATCH + D3D_PRIMITIVE_3_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_4_CONTROL_POINT_PATCH + D3D_PRIMITIVE_4_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_5_CONTROL_POINT_PATCH + D3D_PRIMITIVE_5_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_6_CONTROL_POINT_PATCH + D3D_PRIMITIVE_6_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_7_CONTROL_POINT_PATCH + D3D_PRIMITIVE_7_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_8_CONTROL_POINT_PATCH + D3D_PRIMITIVE_8_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_9_CONTROL_POINT_PATCH + D3D_PRIMITIVE_9_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_10_CONTROL_POINT_PATCH + D3D_PRIMITIVE_10_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_11_CONTROL_POINT_PATCH + D3D_PRIMITIVE_11_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_12_CONTROL_POINT_PATCH + D3D_PRIMITIVE_12_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_13_CONTROL_POINT_PATCH + D3D_PRIMITIVE_13_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_14_CONTROL_POINT_PATCH + D3D_PRIMITIVE_14_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_15_CONTROL_POINT_PATCH + D3D_PRIMITIVE_15_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_16_CONTROL_POINT_PATCH + D3D_PRIMITIVE_16_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_17_CONTROL_POINT_PATCH + D3D_PRIMITIVE_17_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_18_CONTROL_POINT_PATCH + D3D_PRIMITIVE_18_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_19_CONTROL_POINT_PATCH + D3D_PRIMITIVE_19_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_20_CONTROL_POINT_PATCH + D3D_PRIMITIVE_20_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_21_CONTROL_POINT_PATCH + D3D_PRIMITIVE_21_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_22_CONTROL_POINT_PATCH + D3D_PRIMITIVE_22_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_23_CONTROL_POINT_PATCH + D3D_PRIMITIVE_23_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_24_CONTROL_POINT_PATCH + D3D_PRIMITIVE_24_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_25_CONTROL_POINT_PATCH + D3D_PRIMITIVE_25_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_26_CONTROL_POINT_PATCH + D3D_PRIMITIVE_26_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_27_CONTROL_POINT_PATCH + D3D_PRIMITIVE_27_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_28_CONTROL_POINT_PATCH + D3D_PRIMITIVE_28_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_29_CONTROL_POINT_PATCH + D3D_PRIMITIVE_29_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_30_CONTROL_POINT_PATCH + D3D_PRIMITIVE_30_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_31_CONTROL_POINT_PATCH + D3D_PRIMITIVE_31_CONTROL_POINT_PATCH +
    + + +

    Interpret the input primitive as a control point patch.

    +
    + + ff728725 + D3D_PRIMITIVE_32_CONTROL_POINT_PATCH + D3D_PRIMITIVE_32_CONTROL_POINT_PATCH +
    + + +

    Indicates semantic flags for function parameters.

    +
    + + dn280475 + D3D_PARAMETER_FLAGS + D3D_PARAMETER_FLAGS +
    + + +

    The parameter has no semantic flags.

    +
    + + dn280475 + D3D_PF_NONE + D3D_PF_NONE +
    + + +

    Indicates an input parameter.

    +
    + + dn280475 + D3D_PF_IN + D3D_PF_IN +
    + + +

    Indicates an output parameter.

    +
    + + dn280475 + D3D_PF_OUT + D3D_PF_OUT +
    + + +

    Values that identify the data types that can be stored in a register.

    +
    + +

    A register component type is specified in the ComponentType member of the structure.

    +
    + + ff728727 + D3D_REGISTER_COMPONENT_TYPE + D3D_REGISTER_COMPONENT_TYPE +
    + + +

    The data type is unknown.

    +
    + + ff728727 + D3D_REGISTER_COMPONENT_UNKNOWN + D3D_REGISTER_COMPONENT_UNKNOWN +
    + + +

    32-bit unsigned integer.

    +
    + + ff728727 + D3D_REGISTER_COMPONENT_UINT32 + D3D_REGISTER_COMPONENT_UINT32 +
    + + +

    32-bit signed integer.

    +
    + + ff728727 + D3D_REGISTER_COMPONENT_SINT32 + D3D_REGISTER_COMPONENT_SINT32 +
    + + +

    32-bit floating-point number.

    +
    + + ff728727 + D3D_REGISTER_COMPONENT_FLOAT32 + D3D_REGISTER_COMPONENT_FLOAT32 +
    + + +

    Values that identify the return type of a resource.

    +
    + +

    A resource return type is specified in the ReturnType member of the structure.

    +
    + + ff728728 + D3D_RESOURCE_RETURN_TYPE + D3D_RESOURCE_RETURN_TYPE +
    + + +

    Return type is an unsigned integer value normalized to a value between 0 and 1.

    +
    + + ff728728 + D3D_RETURN_TYPE_UNORM + D3D_RETURN_TYPE_UNORM +
    + + +

    Return type is a signed integer value normalized to a value between -1 and 1.

    +
    + + ff728728 + D3D_RETURN_TYPE_SNORM + D3D_RETURN_TYPE_SNORM +
    + + +

    Return type is a signed integer.

    +
    + + ff728728 + D3D_RETURN_TYPE_SINT + D3D_RETURN_TYPE_SINT +
    + + +

    Return type is an unsigned integer.

    +
    + + ff728728 + D3D_RETURN_TYPE_UINT + D3D_RETURN_TYPE_UINT +
    + + +

    Return type is a floating-point number.

    +
    + + ff728728 + D3D_RETURN_TYPE_FLOAT + D3D_RETURN_TYPE_FLOAT +
    + + +

    Return type is unknown.

    +
    + + ff728728 + D3D_RETURN_TYPE_MIXED + D3D_RETURN_TYPE_MIXED +
    + + +

    Return type is a double-precision value.

    +
    + + ff728728 + D3D_RETURN_TYPE_DOUBLE + D3D_RETURN_TYPE_DOUBLE +
    + + +

    Return type is a multiple-dword type, such as a double or uint64, and the component is continued from the previous component that was declared. The first component represents the lower bits.

    +
    + + ff728728 + D3D_RETURN_TYPE_CONTINUED + D3D_RETURN_TYPE_CONTINUED +
    + + + No documentation. + + + D3DCOMPILE_SECDATA_FLAGS + D3DCOMPILE_SECDATA_FLAGS + + + + No documentation. + + + D3DCOMPILE_SECDATA_MERGE_UAV_SLOTS + D3DCOMPILE_SECDATA_MERGE_UAV_SLOTS + + + + No documentation. + + + D3DCOMPILE_SECDATA_PRESERVE_TEMPLATE_SLOTS + D3DCOMPILE_SECDATA_PRESERVE_TEMPLATE_SLOTS + + + + No documentation. + + + D3DCOMPILE_SECDATA_REQUIRE_TEMPLATE_MATCH + D3DCOMPILE_SECDATA_REQUIRE_TEMPLATE_MATCH + + + + None. + + + None + None + + + +

    Values that identify parts of the content of an arbitrary length data buffer.

    +
    + +

    These values are passed to the or function.

    +
    + + ff728720 + D3D_BLOB_PART + D3D_BLOB_PART +
    + + + No documentation. + + + ff728720 + D3D_BLOB_INPUT_SIGNATURE_BLOB + D3D_BLOB_INPUT_SIGNATURE_BLOB + + + + No documentation. + + + ff728720 + D3D_BLOB_OUTPUT_SIGNATURE_BLOB + D3D_BLOB_OUTPUT_SIGNATURE_BLOB + + + + No documentation. + + + ff728720 + D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB + D3D_BLOB_INPUT_AND_OUTPUT_SIGNATURE_BLOB + + + + No documentation. + + + ff728720 + D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB + D3D_BLOB_PATCH_CONSTANT_SIGNATURE_BLOB + + + + No documentation. + + + ff728720 + D3D_BLOB_ALL_SIGNATURE_BLOB + D3D_BLOB_ALL_SIGNATURE_BLOB + + + + No documentation. + + + ff728720 + D3D_BLOB_DEBUG_INFO + D3D_BLOB_DEBUG_INFO + + + + No documentation. + + + ff728720 + D3D_BLOB_LEGACY_SHADER + D3D_BLOB_LEGACY_SHADER + + + + No documentation. + + + ff728720 + D3D_BLOB_XNA_PREPASS_SHADER + D3D_BLOB_XNA_PREPASS_SHADER + + + + No documentation. + + + ff728720 + D3D_BLOB_XNA_SHADER + D3D_BLOB_XNA_SHADER + + + + No documentation. + + + ff728720 + D3D_BLOB_PDB + D3D_BLOB_PDB + + + + No documentation. + + + ff728720 + D3D_BLOB_PRIVATE_DATA + D3D_BLOB_PRIVATE_DATA + + + + No documentation. + + + ff728720 + D3D_BLOB_ROOT_SIGNATURE + D3D_BLOB_ROOT_SIGNATURE + + + + No documentation. + + + ff728720 + D3D_BLOB_TEST_ALTERNATE_SHADER + D3D_BLOB_TEST_ALTERNATE_SHADER + + + + No documentation. + + + ff728720 + D3D_BLOB_TEST_COMPILE_DETAILS + D3D_BLOB_TEST_COMPILE_DETAILS + + + + No documentation. + + + ff728720 + D3D_BLOB_TEST_COMPILE_PERF + D3D_BLOB_TEST_COMPILE_PERF + + + + No documentation. + + + ff728720 + D3D_BLOB_TEST_COMPILE_REPORT + D3D_BLOB_TEST_COMPILE_REPORT + + + + No documentation. + + + D3DCOMPILE_SHADER_FLAGS + D3DCOMPILE_SHADER_FLAGS + + + + No documentation. + + + D3DCOMPILE_DEBUG + D3DCOMPILE_DEBUG + + + + No documentation. + + + D3DCOMPILE_SKIP_VALIDATION + D3DCOMPILE_SKIP_VALIDATION + + + + No documentation. + + + D3DCOMPILE_SKIP_OPTIMIZATION + D3DCOMPILE_SKIP_OPTIMIZATION + + + + No documentation. + + + D3DCOMPILE_PACK_MATRIX_ROW_MAJOR + D3DCOMPILE_PACK_MATRIX_ROW_MAJOR + + + + No documentation. + + + D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR + D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR + + + + No documentation. + + + D3DCOMPILE_PARTIAL_PRECISION + D3DCOMPILE_PARTIAL_PRECISION + + + + No documentation. + + + D3DCOMPILE_FORCE_VS_SOFTWARE_NO_OPT + D3DCOMPILE_FORCE_VS_SOFTWARE_NO_OPT + + + + No documentation. + + + D3DCOMPILE_FORCE_PS_SOFTWARE_NO_OPT + D3DCOMPILE_FORCE_PS_SOFTWARE_NO_OPT + + + + No documentation. + + + D3DCOMPILE_NO_PRESHADER + D3DCOMPILE_NO_PRESHADER + + + + No documentation. + + + D3DCOMPILE_AVOID_FLOW_CONTROL + D3DCOMPILE_AVOID_FLOW_CONTROL + + + + No documentation. + + + D3DCOMPILE_PREFER_FLOW_CONTROL + D3DCOMPILE_PREFER_FLOW_CONTROL + + + + No documentation. + + + D3DCOMPILE_ENABLE_STRICTNESS + D3DCOMPILE_ENABLE_STRICTNESS + + + + No documentation. + + + D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY + D3DCOMPILE_ENABLE_BACKWARDS_COMPATIBILITY + + + + No documentation. + + + D3DCOMPILE_IEEE_STRICTNESS + D3DCOMPILE_IEEE_STRICTNESS + + + + No documentation. + + + D3DCOMPILE_OPTIMIZATION_LEVEL0 + D3DCOMPILE_OPTIMIZATION_LEVEL0 + + + + No documentation. + + + D3DCOMPILE_OPTIMIZATION_LEVEL1 + D3DCOMPILE_OPTIMIZATION_LEVEL1 + + + + No documentation. + + + D3DCOMPILE_OPTIMIZATION_LEVEL2 + D3DCOMPILE_OPTIMIZATION_LEVEL2 + + + + No documentation. + + + D3DCOMPILE_OPTIMIZATION_LEVEL3 + D3DCOMPILE_OPTIMIZATION_LEVEL3 + + + + No documentation. + + + D3DCOMPILE_RESERVED16 + D3DCOMPILE_RESERVED16 + + + + No documentation. + + + D3DCOMPILE_RESERVED17 + D3DCOMPILE_RESERVED17 + + + + No documentation. + + + D3DCOMPILE_WARNINGS_ARE_ERRORS + D3DCOMPILE_WARNINGS_ARE_ERRORS + + + + None. + + + None + None + + + +

    Values that identify shader-input options.

    +
    + +

    -typed values are specified in the uFlags member of the structure.

    +
    + + ff728730 + D3D_SHADER_INPUT_FLAGS + D3D_SHADER_INPUT_FLAGS +
    + + +

    Assign a shader input to a register based on the register assignment in the HLSL code (instead of letting the compiler choose the register).

    +
    + + ff728730 + D3D_SIF_USERPACKED + D3D_SIF_USERPACKED +
    + + +

    Use a comparison sampler, which uses the SampleCmp (DirectX HLSL Texture Object) and SampleCmpLevelZero (DirectX HLSL Texture Object) sampling functions.

    +
    + + ff728730 + D3D_SIF_COMPARISON_SAMPLER + D3D_SIF_COMPARISON_SAMPLER +
    + + +

    A 2-bit value for encoding texture components.

    +
    + + ff728730 + D3D_SIF_TEXTURE_COMPONENT_0 + D3D_SIF_TEXTURE_COMPONENT_0 +
    + + +

    A 2-bit value for encoding texture components.

    +
    + + ff728730 + D3D_SIF_TEXTURE_COMPONENT_1 + D3D_SIF_TEXTURE_COMPONENT_1 +
    + + +

    A 2-bit value for encoding texture components.

    +
    + + ff728730 + D3D_SIF_TEXTURE_COMPONENTS + D3D_SIF_TEXTURE_COMPONENTS +
    + + +

    This value is reserved.

    +
    + + ff728730 + D3D_SIF_UNUSED + D3D_SIF_UNUSED +
    + + + None. + + + None + None + + + +

    Values that identify resource types that can be bound to a shader and that are reflected as part of the resource description for the shader.

    +
    + +

    -typed values are specified in the Type member of the structure.

    +
    + + ff728731 + D3D_SHADER_INPUT_TYPE + D3D_SHADER_INPUT_TYPE +
    + + +

    The shader resource is a constant buffer.

    +
    + + ff728731 + D3D_SIT_CBUFFER + D3D_SIT_CBUFFER +
    + + +

    The shader resource is a texture buffer.

    +
    + + ff728731 + D3D_SIT_TBUFFER + D3D_SIT_TBUFFER +
    + + +

    The shader resource is a texture.

    +
    + + ff728731 + D3D_SIT_TEXTURE + D3D_SIT_TEXTURE +
    + + +

    The shader resource is a sampler.

    +
    + + ff728731 + D3D_SIT_SAMPLER + D3D_SIT_SAMPLER +
    + + +

    The shader resource is a read-and-write buffer.

    +
    + + ff728731 + D3D_SIT_UAV_RWTYPED + D3D_SIT_UAV_RWTYPED +
    + + +

    The shader resource is a structured buffer.

    For more information about structured buffer, see the Remarks section.

    +
    + + ff728731 + D3D_SIT_STRUCTURED + D3D_SIT_STRUCTURED +
    + + +

    The shader resource is a read-and-write structured buffer.

    +
    + + ff728731 + D3D_SIT_UAV_RWSTRUCTURED + D3D_SIT_UAV_RWSTRUCTURED +
    + + +

    The shader resource is a byte-address buffer.

    +
    + + ff728731 + D3D_SIT_BYTEADDRESS + D3D_SIT_BYTEADDRESS +
    + + +

    The shader resource is a read-and-write byte-address buffer.

    +
    + + ff728731 + D3D_SIT_UAV_RWBYTEADDRESS + D3D_SIT_UAV_RWBYTEADDRESS +
    + + +

    The shader resource is an append-structured buffer.

    +
    + + ff728731 + D3D_SIT_UAV_APPEND_STRUCTURED + D3D_SIT_UAV_APPEND_STRUCTURED +
    + + +

    The shader resource is a consume-structured buffer.

    +
    + + ff728731 + D3D_SIT_UAV_CONSUME_STRUCTURED + D3D_SIT_UAV_CONSUME_STRUCTURED +
    + + +

    The shader resource is a read-and-write structured buffer that uses the built-in counter to append or consume.

    +
    + + ff728731 + D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER + D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER +
    + + + No documentation. + + + D3DCOMPILE_SHADER_REQUIRES_FLAGS + D3DCOMPILE_SHADER_REQUIRES_FLAGS + + + + No documentation. + + + D3D_SHADER_REQUIRES_DOUBLES + D3D_SHADER_REQUIRES_DOUBLES + + + + No documentation. + + + D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL + D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL + + + + No documentation. + + + D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE + D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE + + + + No documentation. + + + D3D_SHADER_REQUIRES_64_UAVS + D3D_SHADER_REQUIRES_64_UAVS + + + + No documentation. + + + D3D_SHADER_REQUIRES_MINIMUM_PRECISION + D3D_SHADER_REQUIRES_MINIMUM_PRECISION + + + + No documentation. + + + D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS + D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS + + + + No documentation. + + + D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS + D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS + + + + No documentation. + + + D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING + D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING + + + + No documentation. + + + D3D_SHADER_REQUIRES_TILED_RESOURCES + D3D_SHADER_REQUIRES_TILED_RESOURCES + + + + No documentation. + + + D3D_SHADER_REQUIRES_STENCIL_REF + D3D_SHADER_REQUIRES_STENCIL_REF + + + + No documentation. + + + D3D_SHADER_REQUIRES_INNER_COVERAGE + D3D_SHADER_REQUIRES_INNER_COVERAGE + + + + No documentation. + + + D3D_SHADER_REQUIRES_TYPED_UAV_LOAD_ADDITIONAL_FORMATS + D3D_SHADER_REQUIRES_TYPED_UAV_LOAD_ADDITIONAL_FORMATS + + + + No documentation. + + + D3D_SHADER_REQUIRES_ROVS + D3D_SHADER_REQUIRES_ROVS + + + + No documentation. + + + D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER + D3D_SHADER_REQUIRES_VIEWPORT_AND_RT_ARRAY_INDEX_FROM_ANY_SHADER_FEEDING_RASTERIZER + + + + None. + + + None + None + + + +

    Values that identify the class of a shader variable.

    +
    + +

    The class of a shader variable is not a programming class; the class identifies the variable class such as scalar, vector, object, and so on. -typed values are specified in the Class member of the structure.

    +
    + + ff728733 + D3D_SHADER_VARIABLE_CLASS + D3D_SHADER_VARIABLE_CLASS +
    + + +

    The shader variable is a scalar.

    +
    + + ff728733 + D3D_SVC_SCALAR + D3D_SVC_SCALAR +
    + + +

    The shader variable is a vector.

    +
    + + ff728733 + D3D_SVC_VECTOR + D3D_SVC_VECTOR +
    + + +

    The shader variable is a row-major matrix.

    +
    + + ff728733 + D3D_SVC_MATRIX_ROWS + D3D_SVC_MATRIX_ROWS +
    + + +

    The shader variable is a column-major matrix.

    +
    + + ff728733 + D3D_SVC_MATRIX_COLUMNS + D3D_SVC_MATRIX_COLUMNS +
    + + +

    The shader variable is an object.

    +
    + + ff728733 + D3D_SVC_OBJECT + D3D_SVC_OBJECT +
    + + +

    The shader variable is a structure.

    +
    + + ff728733 + D3D_SVC_STRUCT + D3D_SVC_STRUCT +
    + + +

    The shader variable is a class.

    +
    + + ff728733 + D3D_SVC_INTERFACE_CLASS + D3D_SVC_INTERFACE_CLASS +
    + + +

    The shader variable is an interface.

    +
    + + ff728733 + D3D_SVC_INTERFACE_POINTER + D3D_SVC_INTERFACE_POINTER +
    + + +

    Values that identify information about a shader variable.

    +
    + +

    A call to the method returns values in the uFlags member of a structure.

    +
    + + ff728734 + D3D_SHADER_VARIABLE_FLAGS + D3D_SHADER_VARIABLE_FLAGS +
    + + +

    Indicates that the registers assigned to this shader variable were explicitly declared in shader code (instead of automatically assigned by the compiler).

    +
    + + ff728734 + D3D_SVF_USERPACKED + D3D_SVF_USERPACKED +
    + + +

    Indicates that this variable is used by this shader. This value confirms that a particular shader variable (which can be common to many different shaders) is indeed used by a particular shader.

    +
    + + ff728734 + D3D_SVF_USED + D3D_SVF_USED +
    + + +

    Indicates that this variable is an interface.

    +
    + + ff728734 + D3D_SVF_INTERFACE_POINTER + D3D_SVF_INTERFACE_POINTER +
    + + +

    Indicates that this variable is a parameter of an interface.

    +
    + + ff728734 + D3D_SVF_INTERFACE_PARAMETER + D3D_SVF_INTERFACE_PARAMETER +
    + + + None. + + + None + None + + + +

    Values that identify various data, texture, and buffer types that can be assigned to a shader variable.

    +
    + +

    A call to the method returns a value in the Type member of a structure.

    The types in a structured buffer describe the structure of the elements in the buffer. The layout of these types generally match their C++ struct counterparts. The following examples show structured buffers:

    struct mystruct {float4 val; uint ind;}; RWStructuredBuffer<mystruct> rwbuf; RWStructuredBuffer<float3> rwbuf2;
    +
    + + ff728735 + D3D_SHADER_VARIABLE_TYPE + D3D_SHADER_VARIABLE_TYPE +
    + + +

    The variable is a void reference.

    +
    + + ff728735 + D3D_SVT_VOID + D3D_SVT_VOID +
    + + +

    The variable is a boolean.

    +
    + + ff728735 + D3D_SVT_BOOL + D3D_SVT_BOOL +
    + + +

    The variable is an integer.

    +
    + + ff728735 + D3D_SVT_INT + D3D_SVT_INT +
    + + +

    The variable is a floating-point number.

    +
    + + ff728735 + D3D_SVT_FLOAT + D3D_SVT_FLOAT +
    + + +

    The variable is a string.

    +
    + + ff728735 + D3D_SVT_STRING + D3D_SVT_STRING +
    + + +

    The variable is a texture.

    +
    + + ff728735 + D3D_SVT_TEXTURE + D3D_SVT_TEXTURE +
    + + +

    The variable is a 1D texture.

    +
    + + ff728735 + D3D_SVT_TEXTURE1D + D3D_SVT_TEXTURE1D +
    + + +

    The variable is a 2D texture.

    +
    + + ff728735 + D3D_SVT_TEXTURE2D + D3D_SVT_TEXTURE2D +
    + + +

    The variable is a 3D texture.

    +
    + + ff728735 + D3D_SVT_TEXTURE3D + D3D_SVT_TEXTURE3D +
    + + +

    The variable is a texture cube.

    +
    + + ff728735 + D3D_SVT_TEXTURECUBE + D3D_SVT_TEXTURECUBE +
    + + +

    The variable is a sampler.

    +
    + + ff728735 + D3D_SVT_SAMPLER + D3D_SVT_SAMPLER +
    + + +

    The variable is a 1D sampler.

    +
    + + ff728735 + D3D_SVT_SAMPLER1D + D3D_SVT_SAMPLER1D +
    + + +

    The variable is a 2D sampler.

    +
    + + ff728735 + D3D_SVT_SAMPLER2D + D3D_SVT_SAMPLER2D +
    + + +

    The variable is a 3D sampler.

    +
    + + ff728735 + D3D_SVT_SAMPLER3D + D3D_SVT_SAMPLER3D +
    + + +

    The variable is a cube sampler.

    +
    + + ff728735 + D3D_SVT_SAMPLERCUBE + D3D_SVT_SAMPLERCUBE +
    + + +

    The variable is a pixel shader.

    +
    + + ff728735 + D3D_SVT_PIXELSHADER + D3D_SVT_PIXELSHADER +
    + + +

    The variable is a vertex shader.

    +
    + + ff728735 + D3D_SVT_VERTEXSHADER + D3D_SVT_VERTEXSHADER +
    + + +

    The variable is a pixel fragment.

    +
    + + ff728735 + D3D_SVT_PIXELFRAGMENT + D3D_SVT_PIXELFRAGMENT +
    + + +

    The variable is a vertex fragment.

    +
    + + ff728735 + D3D_SVT_VERTEXFRAGMENT + D3D_SVT_VERTEXFRAGMENT +
    + + +

    The variable is an unsigned integer.

    +
    + + ff728735 + D3D_SVT_UINT + D3D_SVT_UINT +
    + + +

    The variable is an 8-bit unsigned integer.

    +
    + + ff728735 + D3D_SVT_UINT8 + D3D_SVT_UINT8 +
    + + +

    The variable is a geometry shader.

    +
    + + ff728735 + D3D_SVT_GEOMETRYSHADER + D3D_SVT_GEOMETRYSHADER +
    + + +

    The variable is a rasterizer-state object.

    +
    + + ff728735 + D3D_SVT_RASTERIZER + D3D_SVT_RASTERIZER +
    + + +

    The variable is a depth-stencil-state object.

    +
    + + ff728735 + D3D_SVT_DEPTHSTENCIL + D3D_SVT_DEPTHSTENCIL +
    + + +

    The variable is a blend-state object.

    +
    + + ff728735 + D3D_SVT_BLEND + D3D_SVT_BLEND +
    + + +

    The variable is a buffer.

    +
    + + ff728735 + D3D_SVT_BUFFER + D3D_SVT_BUFFER +
    + + +

    The variable is a constant buffer.

    +
    + + ff728735 + D3D_SVT_CBUFFER + D3D_SVT_CBUFFER +
    + + +

    The variable is a texture buffer.

    +
    + + ff728735 + D3D_SVT_TBUFFER + D3D_SVT_TBUFFER +
    + + +

    The variable is a 1D-texture array.

    +
    + + ff728735 + D3D_SVT_TEXTURE1DARRAY + D3D_SVT_TEXTURE1DARRAY +
    + + +

    The variable is a 2D-texture array.

    +
    + + ff728735 + D3D_SVT_TEXTURE2DARRAY + D3D_SVT_TEXTURE2DARRAY +
    + + +

    The variable is a render-target view.

    +
    + + ff728735 + D3D_SVT_RENDERTARGETVIEW + D3D_SVT_RENDERTARGETVIEW +
    + + +

    The variable is a depth-stencil view.

    +
    + + ff728735 + D3D_SVT_DEPTHSTENCILVIEW + D3D_SVT_DEPTHSTENCILVIEW +
    + + +

    The variable is a 2D-multisampled texture.

    +
    + + ff728735 + D3D_SVT_TEXTURE2DMS + D3D_SVT_TEXTURE2DMS +
    + + +

    The variable is a 2D-multisampled-texture array.

    +
    + + ff728735 + D3D_SVT_TEXTURE2DMSARRAY + D3D_SVT_TEXTURE2DMSARRAY +
    + + +

    The variable is a texture-cube array.

    +
    + + ff728735 + D3D_SVT_TEXTURECUBEARRAY + D3D_SVT_TEXTURECUBEARRAY +
    + + +

    The variable holds a compiled hull-shader binary.

    +
    + + ff728735 + D3D_SVT_HULLSHADER + D3D_SVT_HULLSHADER +
    + + +

    The variable holds a compiled domain-shader binary.

    +
    + + ff728735 + D3D_SVT_DOMAINSHADER + D3D_SVT_DOMAINSHADER +
    + + +

    The variable is an interface.

    +
    + + ff728735 + D3D_SVT_INTERFACE_POINTER + D3D_SVT_INTERFACE_POINTER +
    + + +

    The variable holds a compiled compute-shader binary.

    +
    + + ff728735 + D3D_SVT_COMPUTESHADER + D3D_SVT_COMPUTESHADER +
    + + +

    The variable is a double precision (64-bit) floating-point number.

    +
    + + ff728735 + D3D_SVT_DOUBLE + D3D_SVT_DOUBLE +
    + + +

    The variable is a 1D read-and-write texture.

    +
    + + ff728735 + D3D_SVT_RWTEXTURE1D + D3D_SVT_RWTEXTURE1D +
    + + +

    The variable is an array of 1D read-and-write textures.

    +
    + + ff728735 + D3D_SVT_RWTEXTURE1DARRAY + D3D_SVT_RWTEXTURE1DARRAY +
    + + +

    The variable is a 2D read-and-write texture.

    +
    + + ff728735 + D3D_SVT_RWTEXTURE2D + D3D_SVT_RWTEXTURE2D +
    + + +

    The variable is an array of 2D read-and-write textures.

    +
    + + ff728735 + D3D_SVT_RWTEXTURE2DARRAY + D3D_SVT_RWTEXTURE2DARRAY +
    + + +

    The variable is a 3D read-and-write texture.

    +
    + + ff728735 + D3D_SVT_RWTEXTURE3D + D3D_SVT_RWTEXTURE3D +
    + + +

    The variable is a read-and-write buffer.

    +
    + + ff728735 + D3D_SVT_RWBUFFER + D3D_SVT_RWBUFFER +
    + + +

    The variable is a byte-address buffer.

    +
    + + ff728735 + D3D_SVT_BYTEADDRESS_BUFFER + D3D_SVT_BYTEADDRESS_BUFFER +
    + + +

    The variable is a read-and-write byte-address buffer.

    +
    + + ff728735 + D3D_SVT_RWBYTEADDRESS_BUFFER + D3D_SVT_RWBYTEADDRESS_BUFFER +
    + + +

    The variable is a structured buffer.

    For more information about structured buffer, see the Remarks section.

    +
    + + ff728735 + D3D_SVT_STRUCTURED_BUFFER + D3D_SVT_STRUCTURED_BUFFER +
    + + +

    The variable is a read-and-write structured buffer.

    +
    + + ff728735 + D3D_SVT_RWSTRUCTURED_BUFFER + D3D_SVT_RWSTRUCTURED_BUFFER +
    + + +

    The variable is an append structured buffer.

    +
    + + ff728735 + D3D_SVT_APPEND_STRUCTURED_BUFFER + D3D_SVT_APPEND_STRUCTURED_BUFFER +
    + + +

    The variable is a consume structured buffer.

    +
    + + ff728735 + D3D_SVT_CONSUME_STRUCTURED_BUFFER + D3D_SVT_CONSUME_STRUCTURED_BUFFER +
    + + +

    The variable is an 8-byte FLOAT.

    +
    + + ff728735 + D3D_SVT_MIN8FLOAT + D3D_SVT_MIN8FLOAT +
    + + +

    The variable is a 10-byte FLOAT.

    +
    + + ff728735 + D3D_SVT_MIN10FLOAT + D3D_SVT_MIN10FLOAT +
    + + +

    The variable is a 16-byte FLOAT.

    +
    + + ff728735 + D3D_SVT_MIN16FLOAT + D3D_SVT_MIN16FLOAT +
    + + +

    The variable is a 12-byte INT.

    +
    + + ff728735 + D3D_SVT_MIN12INT + D3D_SVT_MIN12INT +
    + + +

    The variable is a 16-byte INT.

    +
    + + ff728735 + D3D_SVT_MIN16INT + D3D_SVT_MIN16INT +
    + + +

    The variable is a 16-byte INT.

    +
    + + ff728735 + D3D_SVT_MIN16UINT + D3D_SVT_MIN16UINT +
    + + +

    Indicates shader type.

    +
    + + ff476214 + D3D11_SHADER_VERSION_TYPE + D3D11_SHADER_VERSION_TYPE +
    + + +

    Pixel shader.

    +
    + + ff476214 + D3D11_SHVER_PIXEL_SHADER + D3D11_SHVER_PIXEL_SHADER +
    + + +

    Vertex shader.

    +
    + + ff476214 + D3D11_SHVER_VERTEX_SHADER + D3D11_SHVER_VERTEX_SHADER +
    + + +

    Geometry shader.

    +
    + + ff476214 + D3D11_SHVER_GEOMETRY_SHADER + D3D11_SHVER_GEOMETRY_SHADER +
    + + +

    Hull shader.

    +
    + + ff476214 + D3D11_SHVER_HULL_SHADER + D3D11_SHVER_HULL_SHADER +
    + + +

    Domain shader.

    +
    + + ff476214 + D3D11_SHVER_DOMAIN_SHADER + D3D11_SHVER_DOMAIN_SHADER +
    + + +

    Compute shader.

    +
    + + ff476214 + D3D11_SHVER_COMPUTE_SHADER + D3D11_SHVER_COMPUTE_SHADER +
    + + +

    Indicates the end of the enumeration constants.

    +
    + + ff476214 + D3D11_SHVER_RESERVED0 + D3D11_SHVER_RESERVED0 +
    + + +

    Strip flag options.

    +
    + +

    These flags are used by .

    +
    + + dd607325 + D3DCOMPILER_STRIP_FLAGS + D3DCOMPILER_STRIP_FLAGS +
    + + + No documentation. + + + dd607325 + D3DCOMPILER_STRIP_REFLECTION_DATA + D3DCOMPILER_STRIP_REFLECTION_DATA + + + + No documentation. + + + dd607325 + D3DCOMPILER_STRIP_DEBUG_INFO + D3DCOMPILER_STRIP_DEBUG_INFO + + + + No documentation. + + + dd607325 + D3DCOMPILER_STRIP_TEST_BLOBS + D3DCOMPILER_STRIP_TEST_BLOBS + + + + No documentation. + + + dd607325 + D3DCOMPILER_STRIP_PRIVATE_DATA + D3DCOMPILER_STRIP_PRIVATE_DATA + + + + No documentation. + + + dd607325 + D3DCOMPILER_STRIP_ROOT_SIGNATURE + D3DCOMPILER_STRIP_ROOT_SIGNATURE + + + + None. + + + None + None + + + +

    Values that identify shader parameters that use system-value semantics.

    +
    + +

    The values identify shader parameters that have predefined system-value semantics. These values are used in a shader-signature description. For more information about shader-signature description, see .

    +
    + + ff728724 + D3D_NAME + D3D_NAME +
    + + +

    This parameter does not use a predefined system-value semantic.

    +
    + + ff728724 + D3D_NAME_UNDEFINED + D3D_NAME_UNDEFINED +
    + + +

    This parameter contains position data.

    +
    + + ff728724 + D3D_NAME_POSITION + D3D_NAME_POSITION +
    + + +

    This parameter contains clip-distance data.

    +
    + + ff728724 + D3D_NAME_CLIP_DISTANCE + D3D_NAME_CLIP_DISTANCE +
    + + +

    This parameter contains cull-distance data.

    +
    + + ff728724 + D3D_NAME_CULL_DISTANCE + D3D_NAME_CULL_DISTANCE +
    + + +

    This parameter contains a render-target-array index.

    +
    + + ff728724 + D3D_NAME_RENDER_TARGET_ARRAY_INDEX + D3D_NAME_RENDER_TARGET_ARRAY_INDEX +
    + + +

    This parameter contains a viewport-array index.

    +
    + + ff728724 + D3D_NAME_VIEWPORT_ARRAY_INDEX + D3D_NAME_VIEWPORT_ARRAY_INDEX +
    + + +

    This parameter contains a vertex ID.

    +
    + + ff728724 + D3D_NAME_VERTEX_ID + D3D_NAME_VERTEX_ID +
    + + +

    This parameter contains a primitive ID.

    +
    + + ff728724 + D3D_NAME_PRIMITIVE_ID + D3D_NAME_PRIMITIVE_ID +
    + + +

    This parameter contains an instance ID.

    +
    + + ff728724 + D3D_NAME_INSTANCE_ID + D3D_NAME_INSTANCE_ID +
    + + +

    This parameter contains data that identifies whether or not the primitive faces the camera.

    +
    + + ff728724 + D3D_NAME_IS_FRONT_FACE + D3D_NAME_IS_FRONT_FACE +
    + + +

    This parameter contains a sampler-array index.

    +
    + + ff728724 + D3D_NAME_SAMPLE_INDEX + D3D_NAME_SAMPLE_INDEX +
    + + +

    This parameter contains one of four tessellation factors that correspond to the amount of parts that a quad patch is broken into along the given edge. This flag is used to tessellate a quad patch.

    +
    + + ff728724 + D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR + D3D_NAME_FINAL_QUAD_EDGE_TESSFACTOR +
    + + +

    This parameter contains one of two tessellation factors that correspond to the amount of parts that a quad patch is broken into vertically and horizontally within the patch. This flag is used to tessellate a quad patch.

    +
    + + ff728724 + D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR + D3D_NAME_FINAL_QUAD_INSIDE_TESSFACTOR +
    + + +

    This parameter contains one of three tessellation factors that correspond to the amount of parts that a tri patch is broken into along the given edge. This flag is used to tessellate a tri patch.

    +
    + + ff728724 + D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR + D3D_NAME_FINAL_TRI_EDGE_TESSFACTOR +
    + + +

    This parameter contains the tessellation factor that corresponds to the amount of parts that a tri patch is broken into within the patch. This flag is used to tessellate a tri patch.

    +
    + + ff728724 + D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR + D3D_NAME_FINAL_TRI_INSIDE_TESSFACTOR +
    + + +

    This parameter contains the tessellation factor that corresponds to the number of lines broken into within the patch. This flag is used to tessellate an isolines patch.

    +
    + + ff728724 + D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR + D3D_NAME_FINAL_LINE_DETAIL_TESSFACTOR +
    + + +

    This parameter contains the tessellation factor that corresponds to the number of lines that are created within the patch. This flag is used to tessellate an isolines patch.

    +
    + + ff728724 + D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR + D3D_NAME_FINAL_LINE_DENSITY_TESSFACTOR +
    + + +

    This parameter contains render-target data.

    +
    + + ff728724 + D3D_NAME_TARGET + D3D_NAME_TARGET +
    + + +

    This parameter contains depth data.

    +
    + + ff728724 + D3D_NAME_DEPTH + D3D_NAME_DEPTH +
    + + +

    This parameter contains alpha-coverage data.

    +
    + + ff728724 + D3D_NAME_COVERAGE + D3D_NAME_COVERAGE +
    + + +

    This parameter signifies that the value is greater than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.

    +
    + + ff728724 + D3D_NAME_DEPTH_GREATER_EQUAL + D3D_NAME_DEPTH_GREATER_EQUAL +
    + + +

    This parameter signifies that the value is less than or equal to a reference value. This flag is used to specify conservative depth for a pixel shader.

    +
    + + ff728724 + D3D_NAME_DEPTH_LESS_EQUAL + D3D_NAME_DEPTH_LESS_EQUAL +
    + + +

    This parameter contains a stencil reference. See Shader Specified Stencil Reference Value.

    +
    + + ff728724 + D3D_NAME_STENCIL_REF + D3D_NAME_STENCIL_REF +
    + + +

    This parameter contains inner input coverage data. See Conservative Rasterization.

    +
    + + ff728724 + D3D_NAME_INNER_COVERAGE + D3D_NAME_INNER_COVERAGE +
    + + +

    Values that identify domain options for tessellator data.

    +
    + +

    The data domain defines the type of data. This enumeration is used by .

    +
    + + ff728737 + D3D_TESSELLATOR_DOMAIN + D3D_TESSELLATOR_DOMAIN +
    + + +

    The data type is undefined.

    +
    + + ff728737 + D3D_TESSELLATOR_DOMAIN_UNDEFINED + D3D_TESSELLATOR_DOMAIN_UNDEFINED +
    + + +

    Isoline data.

    +
    + + ff728737 + D3D_TESSELLATOR_DOMAIN_ISOLINE + D3D_TESSELLATOR_DOMAIN_ISOLINE +
    + + +

    Triangle data.

    +
    + + ff728737 + D3D_TESSELLATOR_DOMAIN_TRI + D3D_TESSELLATOR_DOMAIN_TRI +
    + + +

    Quad data.

    +
    + + ff728737 + D3D_TESSELLATOR_DOMAIN_QUAD + D3D_TESSELLATOR_DOMAIN_QUAD +
    + + +

    Values that identify output primitive types.

    +
    + +

    The output primitive type determines how the tessellator output data is organized; this enumeration is used by .

    +
    + + ff728738 + D3D_TESSELLATOR_OUTPUT_PRIMITIVE + D3D_TESSELLATOR_OUTPUT_PRIMITIVE +
    + + +

    The output primitive type is undefined.

    +
    + + ff728738 + D3D_TESSELLATOR_OUTPUT_UNDEFINED + D3D_TESSELLATOR_OUTPUT_UNDEFINED +
    + + +

    The output primitive type is a point.

    +
    + + ff728738 + D3D_TESSELLATOR_OUTPUT_POINT + D3D_TESSELLATOR_OUTPUT_POINT +
    + + +

    The output primitive type is a line.

    +
    + + ff728738 + D3D_TESSELLATOR_OUTPUT_LINE + D3D_TESSELLATOR_OUTPUT_LINE +
    + + +

    The output primitive type is a clockwise triangle.

    +
    + + ff728738 + D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW + D3D_TESSELLATOR_OUTPUT_TRIANGLE_CW +
    + + +

    The output primitive type is a counter clockwise triangle.

    +
    + + ff728738 + D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW + D3D_TESSELLATOR_OUTPUT_TRIANGLE_CCW +
    + + +

    Values that identify partitioning options.

    +
    + +

    During tessellation, the partition option helps to determine how the algorithm chooses the next partition value; this enumeration is used by .

    +
    + + ff728739 + D3D_TESSELLATOR_PARTITIONING + D3D_TESSELLATOR_PARTITIONING +
    + + +

    The partitioning type is undefined.

    +
    + + ff728739 + D3D_TESSELLATOR_PARTITIONING_UNDEFINED + D3D_TESSELLATOR_PARTITIONING_UNDEFINED +
    + + +

    Partition with integers only.

    +
    + + ff728739 + D3D_TESSELLATOR_PARTITIONING_INTEGER + D3D_TESSELLATOR_PARTITIONING_INTEGER +
    + + +

    Partition with a power-of-two number only.

    +
    + + ff728739 + D3D_TESSELLATOR_PARTITIONING_POW2 + D3D_TESSELLATOR_PARTITIONING_POW2 +
    + + +

    Partition with an odd, fractional number.

    +
    + + ff728739 + D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD + D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_ODD +
    + + +

    Partition with an even, fractional number.

    +
    + + ff728739 + D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN + D3D_TESSELLATOR_PARTITIONING_FRACTIONAL_EVEN +
    + + + Functions + + + + + + Note??You can use this API to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?

    Reads a file that is on disk into memory.

    +
    +

    A reference to a constant null-terminated string that contains the name of the file to read into memory.

    +

    A reference to a variable that receives a reference to the ID3DBlob interface that contains information that read from the pFileName file. You can use this ID3DBlob interface to access the file information and pass it to other compiler functions.

    +

    Returns one of the Direct3D 11 return codes.

    + + Note??The D3dcompiler_44.dll or later version of the file contains the compiler function.? + + + hh446877 + HRESULT D3DReadFileToBlob([In] const wchar_t* pFileName,[Out] ID3D10Blob** ppContents) + D3DReadFileToBlob +
    + + + Note??You can use this API to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?

    Writes a memory blob to a file on disk.

    +
    +

    A reference to a ID3DBlob interface that contains the memory blob to write to the file that the pFileName parameter specifies.

    +

    A reference to a constant null-terminated string that contains the name of the file to which to write.

    +

    A Boolean value that specifies whether to overwrite information in the pFileName file. TRUE specifies to overwrite information and specifies not to overwrite information.

    +

    Returns one of the Direct3D 11 return codes.

    + + Note??The D3dcompiler_44.dll or later version of the file contains the compiler function.? + + + hh446883 + HRESULT D3DWriteBlobToFile([In] ID3D10Blob* pBlob,[In] const wchar_t* pFileName,[In] BOOL bOverwrite) + D3DWriteBlobToFile +
    + + +

    Compile HLSL code or an effect file into bytecode for a given target.

    +
    +

    A reference to uncompiled shader data; either ASCII HLSL code or a compiled effect.

    +

    Length of pSrcData.

    +

    You can use this parameter for strings that specify error messages. If not used, set to null.

    +

    An array of null-terminated macro definitions (see ).

    +

    Optional. A reference to an for handling include files. Setting this to null will cause a compile error if a shader contains a #include. You can pass the D3D_COMPILE_STANDARD_FILE_INCLUDE macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use D3D_COMPILE_STANDARD_FILE_INCLUDE, you must specify the source file name in the pSourceName parameter; the compiler will derive the initial relative directory from pSourceName.

    #define D3D_COMPILE_STANDARD_FILE_INCLUDE ((*)()1)
    +

    The name of the shader entry point function where shader execution begins. When you compile using a fx profile (for example, fx_4_0, fx_5_0, and so on), ignores pEntrypoint. In this case, we recommend that you set pEntrypoint to null because it is good programming practice to set a reference parameter to null if the called function will not use it. For all other shader profiles, a valid pEntrypoint is required.

    +

    A string that specifies the shader target or set of shader features to compile against. The shader target can be shader model 2, shader model 3, shader model 4, or shader model 5. The target can also be an effect type (for example, fx_4_1). For info about the targets that various profiles support, see Specifying Compiler Targets.

    +

    Flags defined by D3D compile constants.

    +

    Flags defined by D3D compile effect constants. When you compile a shader and not an effect file, ignores Flags2; we recommend that you set Flags2 to zero because it is good programming practice to set a nonreference parameter to zero if the called function will not use it.

    +

    A reference to a variable that receives a reference to the ID3DBlob interface that you can use to access the compiled code.

    +

    A reference to a variable that receives a reference to the ID3DBlob interface that you can use to access compiler error messages, or null if there are no errors.

    +

    Returns one of the Direct3D 11 return codes.

    + +

    The difference between and is that the latter method takes some optional parameters that can be used to control some aspects of how bytecode is generated. If this extra flexibility is not required, there is no performance gain from using .

    +
    + + dd607324 + HRESULT D3DCompile([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In, Optional] const char* pSourceName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In, Optional] ID3DInclude* pInclude,[In, Optional] const char* pEntrypoint,[In] const char* pTarget,[In] D3DCOMPILE_SHADER_FLAGS Flags1,[In] D3DCOMPILE_EFFECT_FLAGS Flags2,[Out] ID3D10Blob** ppCode,[Out, Optional] ID3D10Blob** ppErrorMsgs) + D3DCompile +
    + + +

    Compiles Microsoft High Level Shader Language (HLSL) code into bytecode for a given target.

    +
    +

    A reference to uncompiled shader data (ASCII HLSL code).

    +

    The size, in bytes, of the block of memory that pSrcData points to.

    +

    An optional reference to a constant null-terminated string containing the name that identifies the source data to use in error messages. If not used, set to null.

    +

    An optional array of structures that define shader macros. Each macro definition contains a name and a null-terminated definition. If not used, set to null.

    +

    A reference to an interface that the compiler uses to handle include files. If you set this parameter to null and the shader contains a #include, a compile error occurs. You can pass the D3D_COMPILE_STANDARD_FILE_INCLUDE macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use D3D_COMPILE_STANDARD_FILE_INCLUDE, you must specify the source file name in the pSourceName parameter; the compiler will derive the initial relative directory from pSourceName.

    #define D3D_COMPILE_STANDARD_FILE_INCLUDE ((*)()1)
    +

    A reference to a constant null-terminated string that contains the name of the shader entry point function where shader execution begins. When you compile an effect, ignores pEntrypoint; we recommend that you set pEntrypoint to null because it is good programming practice to set a reference parameter to null if the called function will not use it.

    +

    A reference to a constant null-terminated string that specifies the shader target or set of shader features to compile against. The shader target can be a shader model (for example, shader model 2, shader model 3, shader model 4, or shader model 5). The target can also be an effect type (for example, fx_4_1). For info about the targets that various profiles support, see Specifying Compiler Targets.

    +

    A combination of shader D3D compile constants that are combined by using a bitwise OR operation. The resulting value specifies how the compiler compiles the HLSL code.

    +

    A combination of effect D3D compile effect constants that are combined by using a bitwise OR operation. The resulting value specifies how the compiler compiles the effect. When you compile a shader and not an effect file, ignores Flags2; we recommend that you set Flags2 to zero because it is good programming practice to set a nonreference parameter to zero if the called function will not use it.

    +

    A combination of the following flags that are combined by using a bitwise OR operation. The resulting value specifies how the compiler compiles the HLSL code.

    FlagDescription
    (0x01)Merge unordered access view (UAV) slots in the secondary data that the pSecondaryData parameter points to.
    (0x02)Preserve template slots in the secondary data that the pSecondaryData parameter points to.
    (0x04)Require that templates in the secondary data that the pSecondaryData parameter points to match when the compiler compiles the HLSL code.

    ?

    If pSecondaryData is null, set to zero.

    +

    A reference to secondary data. If you don't pass secondary data, set to null. Use this secondary data to align UAV slots in two shaders. Suppose shader A has UAVs and they are bound to some slots. To compile shader B such that UAVs with the same names are mapped in B to the same slots as in A, pass A?s byte code to as the secondary data.

    +

    The size, in bytes, of the block of memory that pSecondaryData points to. If pSecondaryData is null, set to zero.

    +

    A reference to a variable that receives a reference to the ID3DBlob interface that you can use to access the compiled code.

    +

    A reference to a variable that receives a reference to the ID3DBlob interface that you can use to access compiler error messages, or null if there are no errors.

    +

    Returns one of the Direct3D 11 return codes.

    + +

    The difference between and is that takes some optional parameters (SecondaryDataFlags, pSecondaryData and SecondaryDataSize) that can be used to control some aspects of how bytecode is generated. Refer to the descriptions of these parameters for more details. There is no difference otherwise to the efficiency of the bytecode generated between and .

    +
    + + hh446869 + HRESULT D3DCompile2([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In, Optional] const char* pSourceName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In, Optional] ID3DInclude* pInclude,[In] const char* pEntrypoint,[In] const char* pTarget,[In] D3DCOMPILE_SHADER_FLAGS Flags1,[In] D3DCOMPILE_EFFECT_FLAGS Flags2,[In] D3DCOMPILE_SECDATA_FLAGS SecondaryDataFlags,[In, Buffer, Optional] const void* pSecondaryData,[In] SIZE_T SecondaryDataSize,[Out] ID3D10Blob** ppCode,[Out, Optional] ID3D10Blob** ppErrorMsgs) + D3DCompile2 +
    + + + Note??You can use this API to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store. Refer to the section, "Compiling shaders for UWP", in the remarks for .?

    Compiles Microsoft High Level Shader Language (HLSL) code into bytecode for a given target.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    Returns one of the Direct3D 11 return codes.

    + + Note??The D3dcompiler_44.dll or later version of the file contains the compiler function.? + + + hh446872 + HRESULT D3DCompileFromFile([In] const wchar_t* pFileName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In, Optional] ID3DInclude* pInclude,[In] const char* pEntrypoint,[In] const char* pTarget,[In] D3DCOMPILE_SHADER_FLAGS Flags1,[In] D3DCOMPILE_EFFECT_FLAGS Flags2,[Out] ID3D10Blob** ppCode,[Out, Optional] ID3D10Blob** ppErrorMsgs) + D3DCompileFromFile +
    + + +

    Preprocesses uncompiled HLSL code.

    +
    +

    A reference to uncompiled shader data; either ASCII HLSL code or a compiled effect.

    +

    Length of pSrcData.

    +

    The name of the file that contains the uncompiled HLSL code.

    +

    An array of null-terminated macro definitions (see ).

    +

    A reference to an for handling include files. Setting this to null will cause a compile error if a shader contains a #include. You can pass the D3D_COMPILE_STANDARD_FILE_INCLUDE macro, which is a reference to a default include handler. This default include handler includes files that are relative to the current directory and files that are relative to the directory of the initial source file. When you use D3D_COMPILE_STANDARD_FILE_INCLUDE, you must specify the source file name in the pSourceName parameter; the compiler will derive the initial relative directory from pSourceName.

    #define D3D_COMPILE_STANDARD_FILE_INCLUDE ((*)()1)
    +

    The address of a ID3DBlob that contains the compiled code.

    +

    A reference to an ID3DBlob that contains compiler error messages, or null if there were no errors.

    +

    Returns one of the Direct3D 11 return codes.

    + +

    outputs #line directives and preserves line numbering of source input so that output line numbering can be properly related to the input source.

    +
    + + dd607332 + HRESULT D3DPreprocess([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In, Optional] const char* pSourceName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In, Optional] ID3DInclude* pInclude,[Out] ID3D10Blob** ppCodeText,[Out, Optional] ID3D10Blob** ppErrorMsgs) + D3DPreprocess +
    + + + Note??You can use this API to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?

    Gets shader debug information.

    +
    +

    A reference to source data; either uncompiled or compiled HLSL code.

    +

    Length of pSrcData.

    +

    A reference to a buffer that receives the ID3DBlob interface that contains debug information.

    +

    Returns one of the Direct3D 11 return codes.

    + +

    Debug information is embedded in the body of the shader after calling .

    +
    + + dd607328 + HRESULT D3DGetDebugInfo([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[Out] ID3D10Blob** ppDebugInfo) + D3DGetDebugInfo +
    + + +

    Gets a reference to a reflection interface.

    +
    +

    A reference to source data as compiled HLSL code.

    +

    Length of pSrcData.

    +

    The reference of the COM interface to use. For example, IID_ID3D11ShaderReflection.

    +

    A reference to a reflection interface.

    +

    Returns one of the Direct3D 11 return codes.

    + +

    Shader code contains metadata that can be inspected using the reflection APIs.

    The following code illustrates retrieving a Interface from a shader.

     pd3dDevice->CreatePixelShader( pPixelShaderBuffer->GetBufferPointer(), pPixelShaderBuffer->GetBufferSize(), g_pPSClassLinkage, &g_pPixelShader ); * pReflector = null; 	
    +            ( pPixelShaderBuffer->GetBufferPointer(), pPixelShaderBuffer->GetBufferSize(),  IID_ID3D11ShaderReflection, (void**) &pReflector);	
    +            
    +
    + + dd607334 + HRESULT D3DReflect([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] const GUID& pInterface,[Out] void** ppReflector) + D3DReflect +
    + + +

    Creates a library-reflection interface from source data that contains an HLSL library of functions.

    Note??This function is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    +

    A reference to source data as an HLSL library of functions.

    +

    The size, in bytes, of the block of memory that pSrcData points to.

    +

    The reference of the COM interface to use. For example, IID_ID3D11LibraryReflection.

    +

    A reference to a variable that receives a reference to a library-reflection interface, .

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280343 + HRESULT D3DReflectLibrary([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] const GUID& riid,[Out] void** ppReflector) + D3DReflectLibrary +
    + + +

    Disassembles compiled HLSL code.

    +
    +

    A reference to source data as compiled HLSL code.

    +

    Length of pSrcData.

    +

    Flags affecting the behavior of . Flags can be a combination of zero or more of the following values.

    FlagDescription
    Enable the output of color codes.
    Enable the output of default values.
    Enable instruction numbering.
    No effect.
    Disable debug information.
    Enable instruction offsets.
    Disassemble instructions only.
    Use hex symbols in disassemblies.

    ?

    +

    The comment string at the top of the shader that identifies the shader constants and variables.

    +

    A reference to a buffer that receives the ID3DBlob interface that accesses assembly text.

    +

    Returns one of the Direct3D 11 return codes.

    + + dd607326 + HRESULT D3DDisassemble([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] D3DCOMPILE_DISASM_FLAGS Flags,[In, Optional] const char* szComments,[Out] ID3D10Blob** ppDisassembly) + D3DDisassemble +
    + + +

    Disassembles a specific region of compiled Microsoft High Level Shader Language (HLSL) code.

    +
    +

    A reference to compiled shader data.

    +

    The size, in bytes, of the block of memory that pSrcData points to.

    +

    A combination of zero or more of the following flags that are combined by using a bitwise OR operation. The resulting value specifies how disassembles the compiled shader data.

    FlagDescription
    (0x01)Enable the output of color codes.
    (0x02)Enable the output of default values.
    (0x04)Enable instruction numbering.
    (0x08)No effect.
    (0x10)Disable the output of debug information.
    (0x20)Enable the output of instruction offsets.
    (0x40)This flag has no effect in . Cycle information comes from the trace; therefore, cycle information is available only in D3DDisassemble11Trace's trace disassembly.

    ?

    +

    A reference to a constant null-terminated string at the top of the shader that identifies the shader constants and variables.

    +

    The number of bytes offset into the compiled shader data where starts the disassembly.

    +

    The number of instructions to disassemble.

    +

    A reference to a variable that receives the number of bytes offset into the compiled shader data where finishes the disassembly.

    +

    A reference to a buffer that receives the ID3DBlob interface that accesses the disassembled HLSL code.

    +

    Returns one of the Direct3D 11 return codes.

    + + Note??The D3dcompiler_44.dll or later version of the file contains the compiler function.? + + + hh706344 + HRESULT D3DDisassembleRegion([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] unsigned int Flags,[In, Optional] const char* szComments,[In] SIZE_T StartByteOffset,[In] SIZE_T NumInsts,[Out, Optional] SIZE_T* pFinishByteOffset,[Out] ID3D10Blob** ppDisassembly) + D3DDisassembleRegion +
    + + +

    Creates a linker interface.

    Note??This function is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    +

    A reference to a variable that receives a reference to the interface that is used to link a shader module.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + Note??The D3dcompiler_47.dll or later version of the DLL contains the function.? + + + dn280341 + HRESULT D3DCreateLinker([Out, Fast] ID3D11Linker** ppLinker) + D3DCreateLinker +
    + + +

    Creates a shader module interface from source data for the shader module.

    Note??This function is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    +

    A reference to the source data for the shader module.

    +

    The size, in bytes, of the block of memory that pSrcData points to.

    +

    A reference to a variable that receives a reference to the interface that is used for shader resource re-binding.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + Note??The D3dcompiler_47.dll or later version of the DLL contains the function.? + + + dn280342 + HRESULT D3DLoadModule([In] const void* pSrcData,[In] SIZE_T cbSrcDataSize,[Out, Fast] ID3D11Module** ppModule) + D3DLoadModule +
    + + +

    Creates a function-linking-graph interface.

    Note??This function is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    +

    Reserved

    +

    A reference to a variable that receives a reference to the interface that is used for constructing shaders that consist of a sequence of precompiled function calls.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + Note??The D3dcompiler_47.dll or later version of the DLL contains the function.? + + + dn280340 + HRESULT D3DCreateFunctionLinkingGraph([In] unsigned int uFlags,[Out, Fast] ID3D11FunctionLinkingGraph** ppFunctionLinkingGraph) + D3DCreateFunctionLinkingGraph +
    + + +

    Retrieves the byte offsets for instructions within a section of shader code.

    +
    +

    A reference to the compiled shader data.

    +

    The size, in bytes, of the block of memory that pSrcData points to.

    +

    A combination of the following flags that are combined by using a bitwise OR operation. The resulting value specifies how retrieves the instruction offsets.

    FlagDescription
    D3D_GET_INST_OFFSETS_INCLUDE_NON_EXECUTABLE (0x01)Include non-executable code in the retrieved information.

    ?

    +

    The index of the instruction in the compiled shader data for which starts to retrieve the byte offsets.

    +

    The number of instructions for which retrieves the byte offsets.

    +

    A reference to a variable that receives the total number of instructions in the section of shader code.

    +

    A reference to a variable that receives the actual number of offsets.

    + +

    A new kind of Microsoft High Level Shader Language (HLSL) debugging information from a program database (PDB) file uses instruction-byte offsets within a shader blob (arbitrary-length data buffer). You use to translate to and from instruction indexes.

    Note??The D3dcompiler_44.dll or later version of the file contains the compiler function.? +
    + + hh446875 + HRESULT D3DGetTraceInstructionOffsets([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] unsigned int Flags,[In] SIZE_T StartInstIndex,[In] SIZE_T NumInsts,[Out] SIZE_T* pOffsets,[Out] SIZE_T* pTotalInsts) + D3DGetTraceInstructionOffsets +
    + + + Note?? may be altered or unavailable for releases after Windows?8.1. Instead use with the value.?

    Gets the input signature from a compilation result.

    +
    + No documentation. + No documentation. + No documentation. +

    Returns one of the Direct3D 11 return codes.

    + + dd607330 + HRESULT D3DGetInputSignatureBlob([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[Out] ID3D10Blob** ppSignatureBlob) + D3DGetInputSignatureBlob +
    + + + Note?? may be altered or unavailable for releases after Windows?8.1. Instead use with the value.?

    Gets the output signature from a compilation result.

    +
    + No documentation. + No documentation. + No documentation. +

    Returns one of the Direct3D 11 return codes.

    + + dd607331 + HRESULT D3DGetOutputSignatureBlob([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[Out] ID3D10Blob** ppSignatureBlob) + D3DGetOutputSignatureBlob +
    + + + Note?? may be altered or unavailable for releases after Windows?8.1. Instead use with the value.?

    Gets the input and output signatures from a compilation result.

    +
    + No documentation. + No documentation. + No documentation. +

    Returns one of the Direct3D 11 return codes.

    + + dd607329 + HRESULT D3DGetInputAndOutputSignatureBlob([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[Out] ID3D10Blob** ppSignatureBlob) + D3DGetInputAndOutputSignatureBlob +
    + + +

    Removes unwanted blobs from a compilation result.

    +
    +

    A reference to source data as compiled HLSL code.

    +

    Length of pSrcData.

    +

    Strip flag options, represented by .

    +

    A reference to a variable that receives a reference to the ID3DBlob interface that you can use to access the unwanted stripped out shader code.

    +

    Returns one of the Direct3D 11 return codes.

    + + dd607335 + HRESULT D3DStripShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[In] D3DCOMPILER_STRIP_FLAGS uStripFlags,[Out] ID3D10Blob** ppStrippedBlob) + D3DStripShader +
    + + +

    Retrieves a specific part from a compilation result.

    +
    +

    A reference to uncompiled shader data; either ASCII HLSL code or a compiled effect.

    +

    Length of uncompiled shader data that pSrcData points to.

    +

    A -typed value that specifies the part of the buffer to retrieve.

    +

    Flags that indicate how to retrieve the blob part. Currently, no flags are defined.

    +

    The address of a reference to the ID3DBlob interface that is used to retrieve the specified part of the buffer.

    +

    Returns one of the Direct3D 11 return codes.

    + +

    retrieves the part of a blob (arbitrary length data buffer) that contains the type of data that the Part parameter specifies.

    +
    + + ff728674 + HRESULT D3DGetBlobPart([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] D3D_BLOB_PART Part,[In] unsigned int Flags,[Out] ID3D10Blob** ppPart) + D3DGetBlobPart +
    + + +

    Sets information in a compilation result.

    +
    +

    A reference to compiled shader data.

    +

    The length of the compiled shader data that pSrcData points to.

    +

    A -typed value that specifies the part to set. Currently, you can update only private data; that is, currently only supports the value.

    +

    Flags that indicate how to set the blob part. Currently, no flags are defined; therefore, set to zero.

    +

    A reference to data to set in the compilation result.

    +

    The length of the data that pPart points to.

    +

    A reference to a buffer that receives the ID3DBlob interface for the new shader in which the new part data is set.

    +

    Returns one of the Direct3D 11 return codes.

    + +

    modifies data in a compiled shader. Currently, can update only the private data in a compiled shader. You can use to attach arbitrary uninterpreted data to a compiled shader.

    Note??The D3dcompiler_44.dll or later version of the file contains the compiler function.? +
    + + hh446880 + HRESULT D3DSetBlobPart([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] D3D_BLOB_PART Part,[In] unsigned int Flags,[In, Buffer] const void* pPart,[In] SIZE_T PartSize,[Out] ID3D10Blob** ppNewShader) + D3DSetBlobPart +
    + + +

    Creates a buffer.

    +
    +

    Number of bytes in the blob.

    +

    The address of a reference to the ID3DBlob interface that is used to retrieve the buffer.

    +

    Returns one of the Direct3D 11 return codes.

    + +

    The latest D3dcompiler_nn.dll contains the compiler function. Therefore, you are no longer required to create and use an arbitrary length data buffer by using the D3D10CreateBlob function that is contained in D3d10.dll.

    +
    + + ff728672 + HRESULT D3DCreateBlob([In] SIZE_T Size,[Out] ID3D10Blob** ppBlob) + D3DCreateBlob +
    + + + Note??You can use this API to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?

    Compresses a set of shaders into a more compact form.

    +
    +

    The number of shaders to compress.

    +

    An array of structures that describe the set of shaders to compress.

    +

    Flags that indicate how to compress the shaders. Currently, only the D3D_COMPRESS_SHADER_KEEP_ALL_PARTS (0x00000001) flag is defined.

    +

    The address of a reference to the ID3DBlob interface that is used to retrieve the compressed shader data.

    +

    Returns one of the Direct3D 11 return codes.

    + + ff728671 + HRESULT D3DCompressShaders([In] unsigned int uNumShaders,[In, Buffer] D3D_SHADER_DATA* pShaderData,[In] unsigned int uFlags,[Out] ID3D10Blob** ppCompressedData) + D3DCompressShaders +
    + + + Note??You can use this API to develop your Windows Store apps, but you can't use it in apps that you submit to the Windows Store.?

    Decompresses one or more shaders from a compressed set.

    +
    +

    A reference to uncompiled shader data; either ASCII HLSL code or a compiled effect.

    +

    Length of uncompiled shader data that pSrcData points to.

    +

    The number of shaders to decompress.

    +

    The index of the first shader to decompress.

    +

    An array of indexes that represent the shaders to decompress.

    +

    Flags that indicate how to decompress. Currently, no flags are defined.

    +

    The address of a reference to the ID3DBlob interface that is used to retrieve the decompressed shader data.

    +

    A reference to a variable that receives the total number of shaders that decompressed.

    +

    Returns one of the Direct3D 11 return codes.

    + + ff728673 + HRESULT D3DDecompressShaders([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] unsigned int uNumShaders,[In] unsigned int uStartIndex,[In, Buffer, Optional] unsigned int* pIndices,[In] unsigned int uFlags,[Out, Buffer] ID3D10Blob** ppShaders,[Out, Optional] unsigned int* pTotalShaders) + D3DDecompressShaders +
    + + + Functions + + + + + +

    This shader-reflection interface provides access to a constant buffer.

    +
    + +

    To create a constant-buffer interface, call or . This isn't a COM interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.

    +
    + + ff476591 + ID3D11ShaderReflectionConstantBuffer + ID3D11ShaderReflectionConstantBuffer +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a constant-buffer description.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476592 + GetDesc + GetDesc + HRESULT ID3D11ShaderReflectionConstantBuffer::GetDesc([Out] D3D11_SHADER_BUFFER_DESC* pDesc) +
    + + +

    Get a constant-buffer description.

    +
    +

    A reference to a , which represents a shader-buffer description.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476592 + HRESULT ID3D11ShaderReflectionConstantBuffer::GetDesc([Out] D3D11_SHADER_BUFFER_DESC* pDesc) + ID3D11ShaderReflectionConstantBuffer::GetDesc +
    + + +

    Get a shader-reflection variable by index.

    +
    +

    Zero-based index.

    +

    A reference to a shader-reflection variable interface (see Interface).

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476593 + ID3D11ShaderReflectionVariable* ID3D11ShaderReflectionConstantBuffer::GetVariableByIndex([In] unsigned int Index) + ID3D11ShaderReflectionConstantBuffer::GetVariableByIndex +
    + + +

    Get a shader-reflection variable by name.

    +
    +

    Variable name.

    +

    Returns a sentinel object (end of list marker). To determine if GetVariableByName successfully completed, call and check the returned ; any return value other than success means that GetVariableByName failed.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476594 + ID3D11ShaderReflectionVariable* ID3D11ShaderReflectionConstantBuffer::GetVariableByName([In] const char* Name) + ID3D11ShaderReflectionConstantBuffer::GetVariableByName +
    + + +

    A function-parameter-reflection interface accesses function-parameter info.

    Note??This interface is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    + +

    To get a function-parameter-reflection interface, call . This isn't a COM interface, so you don't need to worry about reference counts or releasing the interface when you're done with it.

    Note?? requires the D3dcompiler_47.dll or a later version of the DLL.? +
    + + dn280544 + ID3D11FunctionParameterReflection + ID3D11FunctionParameterReflection +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Fills the parameter descriptor structure for the function's parameter.

    +
    + + dn280545 + GetDesc + GetDesc + HRESULT ID3D11FunctionParameterReflection::GetDesc([Out] D3D11_PARAMETER_DESC* pDesc) +
    + + +

    Fills the parameter descriptor structure for the function's parameter.

    +
    +

    A reference to a structure that receives a description of the function's parameter.

    +

    Returns one of the Direct3D 11 Return Codes.

    + + dn280545 + HRESULT ID3D11FunctionParameterReflection::GetDesc([Out] D3D11_PARAMETER_DESC* pDesc) + ID3D11FunctionParameterReflection::GetDesc +
    + + +

    is an include interface that the user implements to allow an application to call user-overridable methods for opening and closing shader #include files.

    +
    + +

    To use this interface, create an interface that inherits from and implement custom behavior for the methods.

    +
    + + ff728746 + ID3DInclude + ID3DInclude +
    + + + A user-implemented method for opening and reading the contents of a shader #include file. + + A -typed value that indicates the location of the #include file. + Name of the #include file. + Pointer to the container that includes the #include file. + Stream that is associated with fileName to be read. This reference remains valid until is called. + HRESULT Open([None] D3D_INCLUDE_TYPE IncludeType,[None] const char* pFileName,[None] LPCVOID pParentData,[None] LPCVOID* ppData,[None] UINT* pBytes) + + + + A user-implemented method for closing a shader #include file. + + + If was successful, Close is guaranteed to be called before the API using the interface returns. + + This is a reference that was returned by the corresponding call. + HRESULT Close([None] LPCVOID pData) + + + +

    A library-reflection interface accesses library info.

    Note?? This interface is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    + +

    To get a library-reflection interface, call .

    Note?? requires the D3dcompiler_47.dll or a later version of the DLL.? +
    + + dn280554 + ID3D11LibraryReflection + ID3D11LibraryReflection +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Fills the library descriptor structure for the library reflection.

    +
    + + dn280556 + GetDesc + GetDesc + HRESULT ID3D11LibraryReflection::GetDesc([Out] D3D11_LIBRARY_DESC* pDesc) +
    + + +

    Fills the library descriptor structure for the library reflection.

    +
    +

    A reference to a structure that receives a description of the library reflection.

    +

    Returns one of the Direct3D 11 Return Codes.

    + + dn280556 + HRESULT ID3D11LibraryReflection::GetDesc([Out] D3D11_LIBRARY_DESC* pDesc) + ID3D11LibraryReflection::GetDesc +
    + + +

    Gets the function reflector.

    +
    +

    The zero-based index of the function reflector to retrieve.

    +

    A reference to a interface that represents the function reflector.

    + + dn280557 + ID3D11FunctionReflection* ID3D11LibraryReflection::GetFunctionByIndex([In] int FunctionIndex) + ID3D11LibraryReflection::GetFunctionByIndex +
    + + + Initializes a new instance of the class from a . + + + + + +

    Returns all function reflectors provided by this library

    +
    +

    All references to interfaces that represents the function reflectors.

    +
    + + +

    A linker interface is used to link a shader module.

    Note?? This interface is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    + +

    To get a linker interface, call .

    Note?? requires the D3dcompiler_47.dll or a later version of the DLL.? +
    + + dn280558 + ID3D11Linker + ID3D11Linker + +

    [This documentation is preliminary and is subject to change.]

    Links the shader and produces a shader blob that the Direct3D runtime can use.

    +
    + + dn280560 + ID3D11Linker + ID3D11Linker +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Links the shader and produces a shader blob that the Direct3D runtime can use.

    +
    +

    A reference to the interface for the shader module instance to link from.

    +

    The name of the shader module instance to link from.

    +

    The name for the shader blob that is produced.

    +

    Reserved.

    +

    A reference to a variable that receives a reference to the ID3DBlob interface that you can use to access the compiled shader code.

    +

    A reference to a variable that receives a reference to the ID3DBlob interface that you can use to access compiler error messages.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280560 + HRESULT ID3D11Linker::Link([In] ID3D11ModuleInstance* pEntry,[In] const char* pEntryName,[In] const char* pTargetName,[In] unsigned int uFlags,[Out] ID3D10Blob** ppShaderBlob,[Out, Optional] ID3D10Blob** ppErrorBuffer) + ID3D11Linker::Link +
    + + +

    Adds an instance of a library module to be used for linking.

    +
    +

    A reference to the interface for the library module instance.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280561 + HRESULT ID3D11Linker::UseLibrary([In] ID3D11ModuleInstance* pLibraryMI) + ID3D11Linker::UseLibrary +
    + + +

    Adds a clip plane with the plane coefficients taken from a cbuffer entry for 10Level9 shaders.

    +
    + No documentation. + No documentation. +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280559 + HRESULT ID3D11Linker::AddClipPlaneFromCBuffer([In] unsigned int uCBufferSlot,[In] unsigned int uCBufferEntry) + ID3D11Linker::AddClipPlaneFromCBuffer +
    + + + Initializes a new instance of class. + + + + +

    [This documentation is preliminary and is subject to change.]

    Links the shader and produces a shader blob that the Direct3D runtime can use.

    +
    +

    A reference to the interface for the shader module instance to link from.

    +

    The name of the shader module instance to link from.

    +

    The name for the shader blob that is produced.

    +

    Reserved

    +

    Returns the compiled .

    + dn280560 + HRESULT ID3D11Linker::Link([In] ID3D11ModuleInstance* pEntry,[In] const char* pEntryName,[In] const char* pTargetName,[In] unsigned int uFlags,[Out] ID3D10Blob** ppShaderBlob,[Out] ID3D10Blob** ppErrorBuffer) + ID3D11Linker::Link + Is thrown when linking fails and the error text is available. + Is thrown when linking fails and the error text is not available. +
    + + +

    A linking-node interface is used for shader linking.

    Note?? This interface is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    + +

    To get a linking-node interface, call , , or .

    Note?? requires the D3dcompiler_47.dll or a later version of the DLL.? +
    + + dn280562 + ID3D11LinkingNode + ID3D11LinkingNode +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    A module interface creates an instance of a module that is used for resource rebinding.

    Note?? This interface is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    + +

    To get a module interface, call .

    Note?? requires the D3dcompiler_47.dll or a later version of the DLL.? +
    + + dn280563 + ID3D11Module + ID3D11Module + +

    [This documentation is preliminary and is subject to change.]

    Initializes an instance of a shader module that is used for resource rebinding.

    +
    + + dn280608 + ID3D11Module + ID3D11Module +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Initializes an instance of a shader module that is used for resource rebinding.

    +
    +

    The name of a shader module to initialize. This can be null if you don't want to specify a name for the module.

    +

    The address of a reference to an interface to initialize.

    +

    Returns if successful; otherwise, returns one of the Direct3D 11 Return Codes.

    + + dn280608 + HRESULT ID3D11Module::CreateInstance([In, Optional] const char* pNamespace,[Out, Fast] ID3D11ModuleInstance** ppModuleInstance) + ID3D11Module::CreateInstance +
    + + + Initializes a new instance of the class. + + The source data of the module. + + + +

    A module-instance interface is used for resource rebinding.

    Note?? This interface is part of the HLSL shader linking technology that you can use on all Direct3D?11 platforms to create precompiled HLSL functions, package them into libraries, and link them into full shaders at run time.? +
    + +

    To get a module-instance interface, call or .

    Note?? requires the D3dcompiler_47.dll or a later version of the DLL.? +
    + + dn280564 + ID3D11ModuleInstance + ID3D11ModuleInstance + +

    [This documentation is preliminary and is subject to change.]

    Rebinds a resource by name as an unordered access view (UAV) to destination slots.

    +
    + + dn280569 + ID3D11ModuleInstance + ID3D11ModuleInstance +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Rebinds a constant buffer from a source slot to a destination slot.

    +
    +

    The source slot number for rebinding.

    +

    The destination slot number for rebinding.

    +

    The offset in bytes of the destination slot for rebinding. The offset must have 16-byte alignment.

    +

    Returns:

    • for a valid rebinding
    • S_FALSE for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data
    • E_FAIL for an invalid rebinding, for example, the rebinding is out-of-bounds
    • Possibly one of the other Direct3D 11 Return Codes
    + + dn280565 + HRESULT ID3D11ModuleInstance::BindConstantBuffer([In] unsigned int uSrcSlot,[In] unsigned int uDstSlot,[In] unsigned int cbDstOffset) + ID3D11ModuleInstance::BindConstantBuffer +
    + + +

    Rebinds a constant buffer by name to a destination slot.

    +
    +

    The name of the constant buffer for rebinding.

    +

    The destination slot number for rebinding.

    +

    The offset in bytes of the destination slot for rebinding. The offset must have 16-byte alignment.

    +

    Returns:

    • for a valid rebinding
    • S_FALSE for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data
    • E_FAIL for an invalid rebinding, for example, the rebinding is out-of-bounds
    • Possibly one of the other Direct3D 11 Return Codes
    + + dn280566 + HRESULT ID3D11ModuleInstance::BindConstantBufferByName([In] const char* pName,[In] unsigned int uDstSlot,[In] unsigned int cbDstOffset) + ID3D11ModuleInstance::BindConstantBufferByName +
    + + +

    Rebinds a texture or buffer from source slot to destination slot.

    +
    +

    The first source slot number for rebinding.

    +

    The first destination slot number for rebinding.

    +

    The number of slots for rebinding.

    +

    Returns:

    • for a valid rebinding
    • S_FALSE for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data
    • E_FAIL for an invalid rebinding, for example, the rebinding is out-of-bounds
    • Possibly one of the other Direct3D 11 Return Codes
    + + dn280567 + HRESULT ID3D11ModuleInstance::BindResource([In] unsigned int uSrcSlot,[In] unsigned int uDstSlot,[In] unsigned int uCount) + ID3D11ModuleInstance::BindResource +
    + + +

    Rebinds a texture or buffer by name to destination slots.

    +
    +

    The name of the texture or buffer for rebinding.

    +

    The first destination slot number for rebinding.

    +

    The number of slots for rebinding.

    +

    Returns:

    • for a valid rebinding
    • S_FALSE for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data
    • E_FAIL for an invalid rebinding, for example, the rebinding is out-of-bounds
    • Possibly one of the other Direct3D 11 Return Codes
    + + dn280570 + HRESULT ID3D11ModuleInstance::BindResourceByName([In] const char* pName,[In] unsigned int uDstSlot,[In] unsigned int uCount) + ID3D11ModuleInstance::BindResourceByName +
    + + +

    Rebinds a sampler from source slot to destination slot.

    +
    +

    The first source slot number for rebinding.

    +

    The first destination slot number for rebinding.

    +

    The number of slots for rebinding.

    +

    Returns:

    • for a valid rebinding
    • S_FALSE for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data
    • E_FAIL for an invalid rebinding, for example, the rebinding is out-of-bounds
    • Possibly one of the other Direct3D 11 Return Codes
    + + dn280571 + HRESULT ID3D11ModuleInstance::BindSampler([In] unsigned int uSrcSlot,[In] unsigned int uDstSlot,[In] unsigned int uCount) + ID3D11ModuleInstance::BindSampler +
    + + +

    Rebinds a sampler by name to destination slots.

    +
    +

    The name of the sampler for rebinding.

    +

    The first destination slot number for rebinding.

    +

    The number of slots for rebinding.

    +

    Returns:

    • for a valid rebinding
    • S_FALSE for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data
    • E_FAIL for an invalid rebinding, for example, the rebinding is out-of-bounds
    • Possibly one of the other Direct3D 11 Return Codes
    + + dn280605 + HRESULT ID3D11ModuleInstance::BindSamplerByName([In] const char* pName,[In] unsigned int uDstSlot,[In] unsigned int uCount) + ID3D11ModuleInstance::BindSamplerByName +
    + + +

    Rebinds an unordered access view (UAV) from source slot to destination slot.

    +
    +

    The first source slot number for rebinding.

    +

    The first destination slot number for rebinding.

    +

    The number of slots for rebinding.

    +

    Returns:

    • for a valid rebinding
    • S_FALSE for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data
    • E_FAIL for an invalid rebinding, for example, the rebinding is out-of-bounds
    • Possibly one of the other Direct3D 11 Return Codes
    + + dn280606 + HRESULT ID3D11ModuleInstance::BindUnorderedAccessView([In] unsigned int uSrcSlot,[In] unsigned int uDstSlot,[In] unsigned int uCount) + ID3D11ModuleInstance::BindUnorderedAccessView +
    + + +

    Rebinds an unordered access view (UAV) by name to destination slots.

    +
    +

    The name of the UAV for rebinding.

    +

    The first destination slot number for rebinding.

    +

    The number of slots for rebinding.

    +

    Returns:

    • for a valid rebinding
    • S_FALSE for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data
    • E_FAIL for an invalid rebinding, for example, the rebinding is out-of-bounds
    • Possibly one of the other Direct3D 11 Return Codes
    + + dn280607 + HRESULT ID3D11ModuleInstance::BindUnorderedAccessViewByName([In] const char* pName,[In] unsigned int uDstSlot,[In] unsigned int uCount) + ID3D11ModuleInstance::BindUnorderedAccessViewByName +
    + + +

    Rebinds a resource as an unordered access view (UAV) from source slot to destination slot.

    +
    +

    The first source slot number for rebinding.

    +

    The first destination slot number for rebinding.

    +

    The number of slots for rebinding.

    +

    Returns:

    • for a valid rebinding
    • S_FALSE for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data
    • E_FAIL for an invalid rebinding, for example, the rebinding is out-of-bounds
    • Possibly one of the other Direct3D 11 Return Codes
    + + dn280568 + HRESULT ID3D11ModuleInstance::BindResourceAsUnorderedAccessView([In] unsigned int uSrcSrvSlot,[In] unsigned int uDstUavSlot,[In] unsigned int uCount) + ID3D11ModuleInstance::BindResourceAsUnorderedAccessView +
    + + +

    Rebinds a resource by name as an unordered access view (UAV) to destination slots.

    +
    +

    The name of the resource for rebinding.

    +

    The first destination slot number for rebinding.

    +

    The number of slots for rebinding.

    +

    Returns:

    • for a valid rebinding
    • S_FALSE for rebinding a nonexistent slot; that is, for which the shader reflection doesn?t have any data
    • E_FAIL for an invalid rebinding, for example, the rebinding is out-of-bounds
    • Possibly one of the other Direct3D 11 Return Codes
    + + dn280569 + HRESULT ID3D11ModuleInstance::BindResourceAsUnorderedAccessViewByName([In] const char* pSrvName,[In] unsigned int uDstUavSlot,[In] unsigned int uCount) + ID3D11ModuleInstance::BindResourceAsUnorderedAccessViewByName +
    + + + Initializes a new instance of the class. + +

    The address of a reference to an interface to initialize.

    +
    + + + Initializes a new instance of the class. + +

    The name of a shader module to initialize. This can be null if you don't want to specify a name for the module.

    +

    The address of a reference to an interface to initialize.

    +
    + + +

    A shader-reflection interface accesses shader information.

    +
    + +

    An interface can be retrieved for a shader by using . The following code illustrates retrieving a from a shader.

    pd3dDevice->CreatePixelShader( pPixelShaderBuffer->GetBufferPointer(), pPixelShaderBuffer->GetBufferSize(), g_pPSClassLinkage, &g_pPixelShader ); * pReflector = null; 	
    +            ( pPixelShaderBuffer->GetBufferPointer(), pPixelShaderBuffer->GetBufferSize(),  IID_ID3D11ShaderReflection, (void**) &pReflector);
    +
    + + ff476590 + ID3D11ShaderReflection + ID3D11ShaderReflection +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a shader description.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476615 + GetDesc + GetDesc + HRESULT ID3D11ShaderReflection::GetDesc([Out] D3D11_SHADER_DESC* pDesc) +
    + + +

    Gets the number of Mov instructions.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476620 + GetMovInstructionCount + GetMovInstructionCount + unsigned int ID3D11ShaderReflection::GetMovInstructionCount() +
    + + +

    Gets the number of Movc instructions.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476619 + GetMovcInstructionCount + GetMovcInstructionCount + unsigned int ID3D11ShaderReflection::GetMovcInstructionCount() +
    + + +

    Gets the number of conversion instructions.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476614 + GetConversionInstructionCount + GetConversionInstructionCount + unsigned int ID3D11ShaderReflection::GetConversionInstructionCount() +
    + + +

    Gets the number of bitwise instructions.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476611 + GetBitwiseInstructionCount + GetBitwiseInstructionCount + unsigned int ID3D11ShaderReflection::GetBitwiseInstructionCount() +
    + + +

    Gets the geometry-shader input-primitive description.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476616 + GetGSInputPrimitive + GetGSInputPrimitive + D3D_PRIMITIVE ID3D11ShaderReflection::GetGSInputPrimitive() +
    + + +

    Indicates whether a shader is a sample frequency shader.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476627 + IsSampleFrequencyShader + IsSampleFrequencyShader + BOOL ID3D11ShaderReflection::IsSampleFrequencyShader() +
    + + +

    Gets the number of interface slots in a shader.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476621 + GetNumInterfaceSlots + GetNumInterfaceSlots + unsigned int ID3D11ShaderReflection::GetNumInterfaceSlots() +
    + + +

    Gets the minimum feature level.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476618 + GetMinFeatureLevel + GetMinFeatureLevel + HRESULT ID3D11ShaderReflection::GetMinFeatureLevel([Out] D3D_FEATURE_LEVEL* pLevel) +
    + + +

    Gets a group of flags that indicates the requirements of a shader.

    +
    + +

    Here is how the D3D11Shader.h header defines the shader requirements flags:

     #define                          0x00000001	
    +            #define              0x00000002	
    +            #define              0x00000004	
    +            #define                          0x00000008	
    +            #define                0x00000010	
    +            #define           0x00000020	
    +            #define           0x00000040	
    +            #define     0x00000080	
    +            
    +
    + + jj542458 + GetRequiresFlags + GetRequiresFlags + unsigned longlong ID3D11ShaderReflection::GetRequiresFlags() +
    + + +

    Get a shader description.

    +
    +

    A reference to a shader description. See .

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476615 + HRESULT ID3D11ShaderReflection::GetDesc([Out] D3D11_SHADER_DESC* pDesc) + ID3D11ShaderReflection::GetDesc +
    + + +

    Get a constant buffer by index.

    +
    +

    Zero-based index.

    +

    A reference to a constant buffer (see Interface).

    + +

    A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476612 + ID3D11ShaderReflectionConstantBuffer* ID3D11ShaderReflection::GetConstantBufferByIndex([In] unsigned int Index) + ID3D11ShaderReflection::GetConstantBufferByIndex +
    + + +

    Get a constant buffer by name.

    +
    +

    The constant-buffer name.

    +

    A reference to a constant buffer (see Interface).

    + +

    A constant buffer supplies either scalar constants or texture constants to a shader. A shader can use one or more constant buffers. For best performance, separate constants into buffers based on the frequency they are updated.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476613 + ID3D11ShaderReflectionConstantBuffer* ID3D11ShaderReflection::GetConstantBufferByName([In] const char* Name) + ID3D11ShaderReflection::GetConstantBufferByName +
    + + +

    Get a description of how a resource is bound to a shader.

    +
    +

    A zero-based resource index.

    +

    A reference to an input-binding description. See .

    + +

    A shader consists of executable code (the compiled HLSL functions) and a set of resources that supply the shader with input data. GetResourceBindingDesc gets information about how one resource in the set is bound as an input to the shader. The ResourceIndex parameter specifies the index for the resource.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476624 + HRESULT ID3D11ShaderReflection::GetResourceBindingDesc([In] unsigned int ResourceIndex,[Out] D3D11_SHADER_INPUT_BIND_DESC* pDesc) + ID3D11ShaderReflection::GetResourceBindingDesc +
    + + +

    Get an input-parameter description for a shader.

    +
    +

    A zero-based parameter index.

    +

    A reference to a shader-input-signature description. See .

    + +

    An input-parameter description is also called a shader signature. The shader signature contains information about the input parameters such as the order or parameters, their data type, and a parameter semantic.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476617 + HRESULT ID3D11ShaderReflection::GetInputParameterDesc([In] unsigned int ParameterIndex,[Out] D3D11_SIGNATURE_PARAMETER_DESC* pDesc) + ID3D11ShaderReflection::GetInputParameterDesc +
    + + +

    Get an output-parameter description for a shader.

    +
    +

    A zero-based parameter index.

    +

    A reference to a shader-output-parameter description. See .

    + +

    An output-parameter description is also called a shader signature. The shader signature contains information about the output parameters such as the order or parameters, their data type, and a parameter semantic.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476622 + HRESULT ID3D11ShaderReflection::GetOutputParameterDesc([In] unsigned int ParameterIndex,[Out] D3D11_SIGNATURE_PARAMETER_DESC* pDesc) + ID3D11ShaderReflection::GetOutputParameterDesc +
    + + +

    Get a patch-constant parameter description for a shader.

    +
    +

    A zero-based parameter index.

    +

    A reference to a shader-input-signature description. See .

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476623 + HRESULT ID3D11ShaderReflection::GetPatchConstantParameterDesc([In] unsigned int ParameterIndex,[Out] D3D11_SIGNATURE_PARAMETER_DESC* pDesc) + ID3D11ShaderReflection::GetPatchConstantParameterDesc +
    + + +

    Gets a variable by name.

    +
    +

    A reference to a string containing the variable name.

    +

    Returns a Interface interface.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476626 + ID3D11ShaderReflectionVariable* ID3D11ShaderReflection::GetVariableByName([In] const char* Name) + ID3D11ShaderReflection::GetVariableByName +
    + + +

    Get a description of how a resource is bound to a shader.

    +
    +

    The constant-buffer name of the resource.

    +

    A reference to an input-binding description. See .

    + +

    A shader consists of executable code (the compiled HLSL functions) and a set of resources that supply the shader with input data. GetResourceBindingDescByName gets information about how one resource in the set is bound as an input to the shader. The Name parameter specifies the name of the resource.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476625 + HRESULT ID3D11ShaderReflection::GetResourceBindingDescByName([In] const char* Name,[Out] D3D11_SHADER_INPUT_BIND_DESC* pDesc) + ID3D11ShaderReflection::GetResourceBindingDescByName +
    + + +

    Gets the number of Mov instructions.

    +
    +

    Returns the number of Mov instructions.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476620 + unsigned int ID3D11ShaderReflection::GetMovInstructionCount() + ID3D11ShaderReflection::GetMovInstructionCount +
    + + +

    Gets the number of Movc instructions.

    +
    +

    Returns the number of Movc instructions.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476619 + unsigned int ID3D11ShaderReflection::GetMovcInstructionCount() + ID3D11ShaderReflection::GetMovcInstructionCount +
    + + +

    Gets the number of conversion instructions.

    +
    +

    Returns the number of conversion instructions.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476614 + unsigned int ID3D11ShaderReflection::GetConversionInstructionCount() + ID3D11ShaderReflection::GetConversionInstructionCount +
    + + +

    Gets the number of bitwise instructions.

    +
    +

    The number of bitwise instructions.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476611 + unsigned int ID3D11ShaderReflection::GetBitwiseInstructionCount() + ID3D11ShaderReflection::GetBitwiseInstructionCount +
    + + +

    Gets the geometry-shader input-primitive description.

    +
    +

    The input-primitive description. See , D3D11_PRIMITIVE_TOPOLOGY, or D3D10_PRIMITIVE_TOPOLOGY.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476616 + D3D_PRIMITIVE ID3D11ShaderReflection::GetGSInputPrimitive() + ID3D11ShaderReflection::GetGSInputPrimitive +
    + + +

    Indicates whether a shader is a sample frequency shader.

    +
    +

    Returns true if the shader is a sample frequency shader; otherwise returns false.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476627 + BOOL ID3D11ShaderReflection::IsSampleFrequencyShader() + ID3D11ShaderReflection::IsSampleFrequencyShader +
    + + +

    Gets the number of interface slots in a shader.

    +
    +

    The number of interface slots in the shader.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476621 + unsigned int ID3D11ShaderReflection::GetNumInterfaceSlots() + ID3D11ShaderReflection::GetNumInterfaceSlots +
    + + +

    Gets the minimum feature level.

    +
    +

    A reference to one of the enumerated values in , which represents the minimum feature level.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476618 + HRESULT ID3D11ShaderReflection::GetMinFeatureLevel([Out] D3D_FEATURE_LEVEL* pLevel) + ID3D11ShaderReflection::GetMinFeatureLevel +
    + + +

    Retrieves the sizes, in units of threads, of the X, Y, and Z dimensions of the shader's thread-group grid.

    +
    +

    A reference to the size, in threads, of the x-dimension of the thread-group grid. The maximum size is 1024.

    +

    A reference to the size, in threads, of the y-dimension of the thread-group grid. The maximum size is 1024.

    +

    A reference to the size, in threads, of the z-dimension of the thread-group grid. The maximum size is 64.

    +

    Returns the total size, in threads, of the thread-group grid by calculating the product of the size of each dimension.

    *pSizeX * *pSizeY * *pSizeZ;
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    When a compute shader is written it defines the actions of a single thread group only. If multiple thread groups are required, it is the role of the call to issue multiple thread groups.

    +
    + + ff728742 + unsigned int ID3D11ShaderReflection::GetThreadGroupSize([Out, Optional] unsigned int* pSizeX,[Out, Optional] unsigned int* pSizeY,[Out, Optional] unsigned int* pSizeZ) + ID3D11ShaderReflection::GetThreadGroupSize +
    + + +

    Gets a group of flags that indicates the requirements of a shader.

    +
    +

    A value that contains a combination of one or more shader requirements flags; each flag specifies a requirement of the shader. A default value of 0 means there are no requirements.

    Shader requirement flagDescription
    Shader requires that the graphics driver and hardware support double data type. For more info, see .
    Shader requires an early depth stencil.
    Shader requires unordered access views (UAVs) at every pipeline stage.
    Shader requires 64 UAVs.
    Shader requires the graphics driver and hardware to support minimum precision. For more info, see Using HLSL minimum precision.
    Shader requires that the graphics driver and hardware support extended doubles instructions. For more info, see the ExtendedDoublesShaderInstructions member of .
    Shader requires that the graphics driver and hardware support the msad4 intrinsic function in shaders. For more info, see the SAD4ShaderInstructions member of .
    Shader requires that the graphics driver and hardware support Direct3D 9 shadow support. For more info, see .
    Shader requires that the graphics driver and hardware support tiled resources. For more info, see GetResourceTiling.

    ?

    + +

    Here is how the D3D11Shader.h header defines the shader requirements flags:

     #define                          0x00000001	
    +            #define              0x00000002	
    +            #define              0x00000004	
    +            #define                          0x00000008	
    +            #define                0x00000010	
    +            #define           0x00000020	
    +            #define           0x00000040	
    +            #define     0x00000080	
    +            
    +
    + + jj542458 + unsigned longlong ID3D11ShaderReflection::GetRequiresFlags() + ID3D11ShaderReflection::GetRequiresFlags +
    + + + Initializes a new instance of the class from a . + + + + + +

    Get an interface by index.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476598 + ID3D11ShaderReflectionType + ID3D11ShaderReflectionType +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the description of a shader-reflection-variable type.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476597 + GetDesc + GetDesc + HRESULT ID3D11ShaderReflectionType::GetDesc([Out] D3D11_SHADER_TYPE_DESC* pDesc) +
    + + +

    Gets the base class of a class.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476603 + GetSubType + GetSubType + ID3D11ShaderReflectionType* ID3D11ShaderReflectionType::GetSubType() +
    + + +

    Gets an Interface interface containing the variable base class type.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476596 + GetBaseClass + GetBaseClass + ID3D11ShaderReflectionType* ID3D11ShaderReflectionType::GetBaseClass() +
    + + +

    Gets the number of interfaces.

    +
    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476602 + GetNumInterfaces + GetNumInterfaces + unsigned int ID3D11ShaderReflectionType::GetNumInterfaces() +
    + + +

    Get the description of a shader-reflection-variable type.

    +
    +

    A reference to a shader-type description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476597 + HRESULT ID3D11ShaderReflectionType::GetDesc([Out] D3D11_SHADER_TYPE_DESC* pDesc) + ID3D11ShaderReflectionType::GetDesc +
    + + +

    Get a shader-reflection-variable type by index.

    +
    +

    Zero-based index.

    +

    A reference to a Interface.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476599 + ID3D11ShaderReflectionType* ID3D11ShaderReflectionType::GetMemberTypeByIndex([In] unsigned int Index) + ID3D11ShaderReflectionType::GetMemberTypeByIndex +
    + + +

    Get a shader-reflection-variable type by name.

    +
    +

    Member name.

    +

    A reference to a Interface.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476600 + ID3D11ShaderReflectionType* ID3D11ShaderReflectionType::GetMemberTypeByName([In] const char* Name) + ID3D11ShaderReflectionType::GetMemberTypeByName +
    + + +

    Get a shader-reflection-variable type.

    +
    +

    Zero-based index.

    +

    The variable type.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476601 + const char* ID3D11ShaderReflectionType::GetMemberTypeName([In] unsigned int Index) + ID3D11ShaderReflectionType::GetMemberTypeName +
    + + +

    Indicates whether two Interface references have the same underlying type.

    +
    + No documentation. +

    Returns if the references have the same underlying type; otherwise returns S_FALSE.

    + +

    IsEqual indicates whether the sources of the Interface references have the same underlying type. For example, if two Interface references were retrieved from variables, IsEqual can be used to see if the variables have the same type.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476605 + HRESULT ID3D11ShaderReflectionType::IsEqual([In] ID3D11ShaderReflectionType* pType) + ID3D11ShaderReflectionType::IsEqual +
    + + +

    Gets the base class of a class.

    +
    +

    Returns a reference to a Interface containing the base class type. Returns null if the class does not have a base class.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476603 + ID3D11ShaderReflectionType* ID3D11ShaderReflectionType::GetSubType() + ID3D11ShaderReflectionType::GetSubType +
    + + +

    Gets an Interface interface containing the variable base class type.

    +
    +

    Returns A reference to a Interface.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476596 + ID3D11ShaderReflectionType* ID3D11ShaderReflectionType::GetBaseClass() + ID3D11ShaderReflectionType::GetBaseClass +
    + + +

    Gets the number of interfaces.

    +
    +

    Returns the number of interfaces.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476602 + unsigned int ID3D11ShaderReflectionType::GetNumInterfaces() + ID3D11ShaderReflectionType::GetNumInterfaces +
    + + +

    Get an interface by index.

    +
    +

    Zero-based index.

    +

    A reference to a Interface.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476598 + ID3D11ShaderReflectionType* ID3D11ShaderReflectionType::GetInterfaceByIndex([In] unsigned int uIndex) + ID3D11ShaderReflectionType::GetInterfaceByIndex +
    + + +

    Indicates whether a variable is of the specified type.

    +
    +

    A reference to a Interface.

    +

    Returns if object being queried is equal to or inherits from the type in the pType parameter; otherwise returns S_FALSE.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476606 + HRESULT ID3D11ShaderReflectionType::IsOfType([In] ID3D11ShaderReflectionType* pType) + ID3D11ShaderReflectionType::IsOfType +
    + + +

    Indicates whether a class type implements an interface.

    +
    +

    A reference to a Interface.

    +

    Returns if the interface is implemented; otherwise return S_FALSE.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476604 + HRESULT ID3D11ShaderReflectionType::ImplementsInterface([In] ID3D11ShaderReflectionType* pBase) + ID3D11ShaderReflectionType::ImplementsInterface +
    + + + Indicates whether two references have the same underlying type. + + + IsEqual indicates whether the sources of the references have the same underlying type. For example, if two ID3D11ShaderReflectionType Interface references were retrieved from variables, IsEqual can be used to see if the variables have the same type. This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll. + + A reference to a . + Returns true if the references have the same underlying type; otherwise returns false. + HRESULT ID3D11ShaderReflectionType::IsEqual([In] ID3D11ShaderReflectionType* pType) + + + + Indicates whether a variable is of the specified type. + + + This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll. + + A reference to a . + Returns true if object being queried is equal to or inherits from the type in the pType parameter; otherwise returns false. + HRESULT ID3D11ShaderReflectionType::IsOfType([In] ID3D11ShaderReflectionType* pType) + + + + Indicates whether a class type implements an interface. + + + This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll. + + A reference to a . + Returns true if the interface is implemented; otherwise return false. + HRESULT ID3D11ShaderReflectionType::ImplementsInterface([In] ID3D11ShaderReflectionType* pBase) + + + +

    Gets the corresponding interface slot for a variable that represents an interface reference.

    +
    + +

    GetInterfaceSlot gets the corresponding slot in an dynamic linkage array for an interface instance. The returned slot number is used to set an interface instance to a particular class instance. See the HLSL Interfaces and Classes overview for additional information.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476609 + ID3D11ShaderReflectionVariable + ID3D11ShaderReflectionVariable +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a shader-variable description.

    +
    + +

    This method can be used to determine if the Interface is valid, the method returns E_FAIL when the variable is not valid.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476608 + GetDesc + GetDesc + HRESULT ID3D11ShaderReflectionVariable::GetDesc([Out] D3D11_SHADER_VARIABLE_DESC* pDesc) +
    + + +

    This method returns the buffer of the current .

    +
    + + dn933280 + GetBuffer + GetBuffer + ID3D11ShaderReflectionConstantBuffer* ID3D11ShaderReflectionVariable::GetBuffer() +
    + + +

    Get a shader-variable description.

    +
    +

    A reference to a shader-variable description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    This method can be used to determine if the Interface is valid, the method returns E_FAIL when the variable is not valid.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476608 + HRESULT ID3D11ShaderReflectionVariable::GetDesc([Out] D3D11_SHADER_VARIABLE_DESC* pDesc) + ID3D11ShaderReflectionVariable::GetDesc +
    + + +

    Get a shader-variable type.

    +
    +

    A reference to a Interface.

    + +

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476610 + ID3D11ShaderReflectionType* ID3D11ShaderReflectionVariable::GetType() + ID3D11ShaderReflectionVariable::GetType +
    + + +

    This method returns the buffer of the current .

    +
    +

    Returns a reference to the of the present .

    + + dn933280 + ID3D11ShaderReflectionConstantBuffer* ID3D11ShaderReflectionVariable::GetBuffer() + ID3D11ShaderReflectionVariable::GetBuffer +
    + + +

    Gets the corresponding interface slot for a variable that represents an interface reference.

    +
    +

    Index of the array element to get the slot number for. For a non-array variable this value will be zero.

    +

    Returns the index of the interface in the interface array.

    + +

    GetInterfaceSlot gets the corresponding slot in an dynamic linkage array for an interface instance. The returned slot number is used to set an interface instance to a particular class instance. See the HLSL Interfaces and Classes overview for additional information.

    This method's interface is hosted in the out-of-box DLL D3DCompiler_xx.dll.

    +
    + + ff476609 + unsigned int ID3D11ShaderReflectionVariable::GetInterfaceSlot([In] unsigned int uArrayIndex) + ID3D11ShaderReflectionVariable::GetInterfaceSlot +
    + + +

    Describes a shader constant-buffer.

    +
    + +

    Constants are supplied to shaders in a shader-constant buffer. Get the description of a shader-constant-buffer by calling .

    +
    + + ff476208 + D3D11_SHADER_BUFFER_DESC + D3D11_SHADER_BUFFER_DESC +
    + + +

    The name of the buffer.

    +
    + + ff476208 + const char* Name + char Name +
    + + +

    A -typed value that indicates the intended use of the constant data.

    +
    + + ff476208 + D3D_CBUFFER_TYPE Type + D3D_CBUFFER_TYPE Type +
    + + +

    The number of unique variables.

    +
    + + ff476208 + unsigned int Variables + unsigned int Variables +
    + + +

    Buffer size (in bytes).

    +
    + + ff476208 + unsigned int Size + unsigned int Size +
    + + +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies properties for the shader constant-buffer.

    +
    + + ff476208 + D3D_SHADER_CBUFFER_FLAGS uFlags + D3D_SHADER_CBUFFER_FLAGS uFlags +
    + + +

    Describes a function.

    +
    + + dn280416 + D3D11_FUNCTION_DESC + D3D11_FUNCTION_DESC +
    + + +

    The shader version.

    +
    + + dn280416 + unsigned int Version + unsigned int Version +
    + + +

    The name of the originator of the function.

    +
    + + dn280416 + const char* Creator + char Creator +
    + + +

    A combination of D3DCOMPILE Constants that are combined by using a bitwise OR operation. The resulting value specifies shader compilation and parsing.

    +
    + + dn280416 + unsigned int Flags + unsigned int Flags +
    + + +

    The number of constant buffers for the function.

    +
    + + dn280416 + unsigned int ConstantBuffers + unsigned int ConstantBuffers +
    + + +

    The number of bound resources for the function.

    +
    + + dn280416 + unsigned int BoundResources + unsigned int BoundResources +
    + + +

    The number of emitted instructions for the function.

    +
    + + dn280416 + unsigned int InstructionCount + unsigned int InstructionCount +
    + + +

    The number of temporary registers used by the function.

    +
    + + dn280416 + unsigned int TempRegisterCount + unsigned int TempRegisterCount +
    + + +

    The number of temporary arrays used by the function.

    +
    + + dn280416 + unsigned int TempArrayCount + unsigned int TempArrayCount +
    + + +

    The number of constant defines for the function.

    +
    + + dn280416 + unsigned int DefCount + unsigned int DefCount +
    + + +

    The number of declarations (input + output) for the function.

    +
    + + dn280416 + unsigned int DclCount + unsigned int DclCount +
    + + +

    The number of non-categorized texture instructions for the function.

    +
    + + dn280416 + unsigned int TextureNormalInstructions + unsigned int TextureNormalInstructions +
    + + +

    The number of texture load instructions for the function.

    +
    + + dn280416 + unsigned int TextureLoadInstructions + unsigned int TextureLoadInstructions +
    + + +

    The number of texture comparison instructions for the function.

    +
    + + dn280416 + unsigned int TextureCompInstructions + unsigned int TextureCompInstructions +
    + + +

    The number of texture bias instructions for the function.

    +
    + + dn280416 + unsigned int TextureBiasInstructions + unsigned int TextureBiasInstructions +
    + + +

    The number of texture gradient instructions for the function.

    +
    + + dn280416 + unsigned int TextureGradientInstructions + unsigned int TextureGradientInstructions +
    + + +

    The number of floating point arithmetic instructions used by the function.

    +
    + + dn280416 + unsigned int FloatInstructionCount + unsigned int FloatInstructionCount +
    + + +

    The number of signed integer arithmetic instructions used by the function.

    +
    + + dn280416 + unsigned int IntInstructionCount + unsigned int IntInstructionCount +
    + + +

    The number of unsigned integer arithmetic instructions used by the function.

    +
    + + dn280416 + unsigned int UintInstructionCount + unsigned int UintInstructionCount +
    + + +

    The number of static flow control instructions used by the function.

    +
    + + dn280416 + unsigned int StaticFlowControlCount + unsigned int StaticFlowControlCount +
    + + +

    The number of dynamic flow control instructions used by the function.

    +
    + + dn280416 + unsigned int DynamicFlowControlCount + unsigned int DynamicFlowControlCount +
    + + +

    The number of macro instructions used by the function.

    +
    + + dn280416 + unsigned int MacroInstructionCount + unsigned int MacroInstructionCount +
    + + +

    The number of array instructions used by the function.

    +
    + + dn280416 + unsigned int ArrayInstructionCount + unsigned int ArrayInstructionCount +
    + + +

    The number of mov instructions used by the function.

    +
    + + dn280416 + unsigned int MovInstructionCount + unsigned int MovInstructionCount +
    + + +

    The number of movc instructions used by the function.

    +
    + + dn280416 + unsigned int MovcInstructionCount + unsigned int MovcInstructionCount +
    + + +

    The number of type conversion instructions used by the function.

    +
    + + dn280416 + unsigned int ConversionInstructionCount + unsigned int ConversionInstructionCount +
    + + +

    The number of bitwise arithmetic instructions used by the function.

    +
    + + dn280416 + unsigned int BitwiseInstructionCount + unsigned int BitwiseInstructionCount +
    + + +

    A -typed value that specifies the minimum Direct3D feature level target of the function byte code.

    +
    + + dn280416 + D3D_FEATURE_LEVEL MinFeatureLevel + D3D_FEATURE_LEVEL MinFeatureLevel +
    + + +

    A value that contains a combination of one or more shader requirements flags; each flag specifies a requirement of the shader. A default value of 0 means there are no requirements. For a list of values, see .

    +
    + + dn280416 + unsigned longlong RequiredFeatureFlags + unsigned longlong RequiredFeatureFlags +
    + + +

    The name of the function.

    +
    + + dn280416 + const char* Name + char Name +
    + + +

    The number of logical parameters in the function signature, not including the return value.

    +
    + + dn280416 + int FunctionParameterCount + int FunctionParameterCount +
    + + +

    Indicates whether the function returns a value. TRUE indicates it returns a value; otherwise, (it is a subroutine).

    +
    + + dn280416 + BOOL HasReturn + BOOL HasReturn +
    + + +

    Indicates whether there is a Direct3D 10Level9 vertex shader blob. TRUE indicates there is a 10Level9 vertex shader blob; otherwise, .

    +
    + + dn280416 + BOOL Has10Level9VertexShader + BOOL Has10Level9VertexShader +
    + + +

    Indicates whether there is a Direct3D 10Level9 pixel shader blob. TRUE indicates there is a 10Level9 pixel shader blob; otherwise, .

    +
    + + dn280416 + BOOL Has10Level9PixelShader + BOOL Has10Level9PixelShader +
    + + +

    Describes how a shader resource is bound to a shader input.

    +
    + +

    Get a shader-input-signature description by calling or .

    +
    + + ff476210 + D3D11_SHADER_INPUT_BIND_DESC + D3D11_SHADER_INPUT_BIND_DESC +
    + + +

    Name of the shader resource.

    +
    + + ff476210 + const char* Name + char Name +
    + + +

    A -typed value that identifies the type of data in the resource.

    +
    + + ff476210 + D3D_SHADER_INPUT_TYPE Type + D3D_SHADER_INPUT_TYPE Type +
    + + +

    Starting bind point.

    +
    + + ff476210 + unsigned int BindPoint + unsigned int BindPoint +
    + + +

    Number of contiguous bind points for arrays.

    +
    + + ff476210 + unsigned int BindCount + unsigned int BindCount +
    + + +

    A combination of -typed values for shader input-parameter options.

    +
    + + ff476210 + D3D_SHADER_INPUT_FLAGS uFlags + D3D_SHADER_INPUT_FLAGS uFlags +
    + + +

    If the input is a texture, the -typed value that identifies the return type.

    +
    + + ff476210 + D3D_RESOURCE_RETURN_TYPE ReturnType + D3D_RESOURCE_RETURN_TYPE ReturnType +
    + + +

    A -typed value that identifies the dimensions of the bound resource.

    +
    + + ff476210 + D3D_SRV_DIMENSION Dimension + D3D_SRV_DIMENSION Dimension +
    + + +

    The number of samples for a multisampled texture; when a texture isn't multisampled, the value is set to -1 (0xFFFFFFFF).

    +
    + + ff476210 + unsigned int NumSamples + unsigned int NumSamples +
    + + +

    Describes a library.

    +
    + + dn280417 + D3D11_LIBRARY_DESC + D3D11_LIBRARY_DESC +
    + + +

    The name of the originator of the library.

    +
    + + dn280417 + const char* Creator + char Creator +
    + + +

    A combination of D3DCOMPILE Constants that are combined by using a bitwise OR operation. The resulting value specifies how the compiler compiles.

    +
    + + dn280417 + unsigned int Flags + unsigned int Flags +
    + + +

    The number of functions exported from the library.

    +
    + + dn280417 + unsigned int FunctionCount + unsigned int FunctionCount +
    + + +

    Describes a function parameter.

    +
    + +

    Get a function-parameter description by calling .

    +
    + + dn280419 + D3D11_PARAMETER_DESC + D3D11_PARAMETER_DESC +
    + + +

    The name of the function parameter.

    +
    + + dn280419 + const char* Name + char Name +
    + + +

    The HLSL semantic that is associated with this function parameter. This name includes the index, for example, SV_Target[n].

    +
    + + dn280419 + const char* SemanticName + char SemanticName +
    + + +

    A -typed value that identifies the variable type for the parameter.

    +
    + + dn280419 + D3D_SHADER_VARIABLE_TYPE Type + D3D_SHADER_VARIABLE_TYPE Type +
    + + +

    A -typed value that identifies the variable class for the parameter as one of scalar, vector, matrix, object, and so on.

    +
    + + dn280419 + D3D_SHADER_VARIABLE_CLASS Class + D3D_SHADER_VARIABLE_CLASS Class +
    + + +

    The number of rows for a matrix parameter.

    +
    + + dn280419 + unsigned int Rows + unsigned int Rows +
    + + +

    The number of columns for a matrix parameter.

    +
    + + dn280419 + unsigned int Columns + unsigned int Columns +
    + + +

    A -typed value that identifies the interpolation mode for the parameter.

    +
    + + dn280419 + D3D_INTERPOLATION_MODE InterpolationMode + D3D_INTERPOLATION_MODE InterpolationMode +
    + + +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies semantic flags for the parameter.

    +
    + + dn280419 + D3D_PARAMETER_FLAGS Flags + D3D_PARAMETER_FLAGS Flags +
    + + +

    The first input register for this parameter.

    +
    + + dn280419 + unsigned int FirstInRegister + unsigned int FirstInRegister +
    + + +

    The first input register component for this parameter.

    +
    + + dn280419 + unsigned int FirstInComponent + unsigned int FirstInComponent +
    + + +

    The first output register for this parameter.

    +
    + + dn280419 + unsigned int FirstOutRegister + unsigned int FirstOutRegister +
    + + +

    The first output register component for this parameter.

    +
    + + dn280419 + unsigned int FirstOutComponent + unsigned int FirstOutComponent +
    + + +

    Describes shader data.

    +
    + +

    An array of structures is passed to to compress the shader data into a more compact form.

    +
    + + ff728721 + D3D_SHADER_DATA + D3D_SHADER_DATA +
    + + +

    A reference to shader data.

    +
    + + ff728721 + const void* pBytecode + void pBytecode +
    + + +

    Length of shader data that pBytecode points to.

    +
    + + ff728721 + SIZE_T BytecodeLength + SIZE_T BytecodeLength +
    + + +

    Describes a shader.

    +
    + +

    A shader is written in HLSL and compiled into an intermediate language by the HLSL compiler. The shader description returns information about the compiled shader. Get a shader description by calling .

    +
    + + ff476209 + D3D11_SHADER_DESC + D3D11_SHADER_DESC +
    + + +

    Shader version.

    +
    + + ff476209 + unsigned int Version + unsigned int Version +
    + + +

    The name of the originator of the shader.

    +
    + + ff476209 + const char* Creator + char Creator +
    + + +

    Shader compilation/parse flags.

    +
    + + ff476209 + D3DCOMPILE_SHADER_FLAGS Flags + D3DCOMPILE_SHADER_FLAGS Flags +
    + + +

    The number of shader-constant buffers.

    +
    + + ff476209 + unsigned int ConstantBuffers + unsigned int ConstantBuffers +
    + + +

    The number of resource (textures and buffers) bound to a shader.

    +
    + + ff476209 + unsigned int BoundResources + unsigned int BoundResources +
    + + +

    The number of parameters in the input signature.

    +
    + + ff476209 + unsigned int InputParameters + unsigned int InputParameters +
    + + +

    The number of parameters in the output signature.

    +
    + + ff476209 + unsigned int OutputParameters + unsigned int OutputParameters +
    + + +

    The number of intermediate-language instructions in the compiled shader.

    +
    + + ff476209 + unsigned int InstructionCount + unsigned int InstructionCount +
    + + +

    The number of temporary registers in the compiled shader.

    +
    + + ff476209 + unsigned int TempRegisterCount + unsigned int TempRegisterCount +
    + + +

    Number of temporary arrays used.

    +
    + + ff476209 + unsigned int TempArrayCount + unsigned int TempArrayCount +
    + + +

    Number of constant defines.

    +
    + + ff476209 + unsigned int DefCount + unsigned int DefCount +
    + + +

    Number of declarations (input + output).

    +
    + + ff476209 + unsigned int DclCount + unsigned int DclCount +
    + + +

    Number of non-categorized texture instructions.

    +
    + + ff476209 + unsigned int TextureNormalInstructions + unsigned int TextureNormalInstructions +
    + + +

    Number of texture load instructions

    +
    + + ff476209 + unsigned int TextureLoadInstructions + unsigned int TextureLoadInstructions +
    + + +

    Number of texture comparison instructions

    +
    + + ff476209 + unsigned int TextureCompInstructions + unsigned int TextureCompInstructions +
    + + +

    Number of texture bias instructions

    +
    + + ff476209 + unsigned int TextureBiasInstructions + unsigned int TextureBiasInstructions +
    + + +

    Number of texture gradient instructions.

    +
    + + ff476209 + unsigned int TextureGradientInstructions + unsigned int TextureGradientInstructions +
    + + +

    Number of floating point arithmetic instructions used.

    +
    + + ff476209 + unsigned int FloatInstructionCount + unsigned int FloatInstructionCount +
    + + +

    Number of signed integer arithmetic instructions used.

    +
    + + ff476209 + unsigned int IntInstructionCount + unsigned int IntInstructionCount +
    + + +

    Number of unsigned integer arithmetic instructions used.

    +
    + + ff476209 + unsigned int UintInstructionCount + unsigned int UintInstructionCount +
    + + +

    Number of static flow control instructions used.

    +
    + + ff476209 + unsigned int StaticFlowControlCount + unsigned int StaticFlowControlCount +
    + + +

    Number of dynamic flow control instructions used.

    +
    + + ff476209 + unsigned int DynamicFlowControlCount + unsigned int DynamicFlowControlCount +
    + + +

    Number of macro instructions used.

    +
    + + ff476209 + unsigned int MacroInstructionCount + unsigned int MacroInstructionCount +
    + + +

    Number of array instructions used.

    +
    + + ff476209 + unsigned int ArrayInstructionCount + unsigned int ArrayInstructionCount +
    + + +

    Number of cut instructions used.

    +
    + + ff476209 + unsigned int CutInstructionCount + unsigned int CutInstructionCount +
    + + +

    Number of emit instructions used.

    +
    + + ff476209 + unsigned int EmitInstructionCount + unsigned int EmitInstructionCount +
    + + +

    The -typed value that represents the geometry shader output topology.

    +
    + + ff476209 + D3D_PRIMITIVE_TOPOLOGY GSOutputTopology + D3D_PRIMITIVE_TOPOLOGY GSOutputTopology +
    + + +

    Geometry shader maximum output vertex count.

    +
    + + ff476209 + unsigned int GSMaxOutputVertexCount + unsigned int GSMaxOutputVertexCount +
    + + +

    The -typed value that represents the input primitive for a geometry shader or hull shader.

    +
    + + ff476209 + D3D_PRIMITIVE InputPrimitive + D3D_PRIMITIVE InputPrimitive +
    + + +

    Number of parameters in the patch-constant signature.

    +
    + + ff476209 + unsigned int PatchConstantParameters + unsigned int PatchConstantParameters +
    + + +

    Number of geometry shader instances.

    +
    + + ff476209 + unsigned int cGSInstanceCount + unsigned int cGSInstanceCount +
    + + +

    Number of control points in the hull shader and domain shader.

    +
    + + ff476209 + unsigned int cControlPoints + unsigned int cControlPoints +
    + + +

    The -typed value that represents the tessellator output-primitive type.

    +
    + + ff476209 + D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive + D3D_TESSELLATOR_OUTPUT_PRIMITIVE HSOutputPrimitive +
    + + +

    The -typed value that represents the tessellator partitioning mode.

    +
    + + ff476209 + D3D_TESSELLATOR_PARTITIONING HSPartitioning + D3D_TESSELLATOR_PARTITIONING HSPartitioning +
    + + +

    The -typed value that represents the tessellator domain.

    +
    + + ff476209 + D3D_TESSELLATOR_DOMAIN TessellatorDomain + D3D_TESSELLATOR_DOMAIN TessellatorDomain +
    + + +

    Number of barrier instructions in a compute shader.

    +
    + + ff476209 + unsigned int cBarrierInstructions + unsigned int cBarrierInstructions +
    + + +

    Number of interlocked instructions in a compute shader.

    +
    + + ff476209 + unsigned int cInterlockedInstructions + unsigned int cInterlockedInstructions +
    + + +

    Number of texture writes in a compute shader.

    +
    + + ff476209 + unsigned int cTextureStoreInstructions + unsigned int cTextureStoreInstructions +
    + + +

    Describes a shader signature.

    +
    + +

    A shader can take n inputs and can produce m outputs. The order of the input (or output) parameters, their associated types, and any attached semantics make up the shader signature. Each shader has an input and an output signature.

    When compiling a shader or an effect, some API calls validate shader signatures That is, they compare the output signature of one shader (like a vertex shader) with the input signature of another shader (like a pixel shader). This ensures that a shader outputs data that is compatible with a downstream shader that is consuming that data. Compatible means that a shader signature is a exact-match subset of the preceding shader stage. Exact match means parameter types and semantics must exactly match. Subset means that a parameter that is not required by a downstream stage, does not need to include that parameter in its shader signature.

    Get a shader-signature from a shader or an effect by calling APIs such as .

    +
    + + ff476215 + D3D11_SIGNATURE_PARAMETER_DESC + D3D11_SIGNATURE_PARAMETER_DESC +
    + + +

    A per-parameter string that identifies how the data will be used. For more info, see Semantics.

    +
    + + ff476215 + const char* SemanticName + char SemanticName +
    + + +

    Semantic index that modifies the semantic. Used to differentiate different parameters that use the same semantic.

    +
    + + ff476215 + unsigned int SemanticIndex + unsigned int SemanticIndex +
    + + +

    The register that will contain this variable's data.

    +
    + + ff476215 + unsigned int Register + unsigned int Register +
    + + +

    A -typed value that identifies a predefined string that determines the functionality of certain pipeline stages.

    +
    + + ff476215 + D3D_NAME SystemValueType + D3D_NAME SystemValueType +
    + + +

    A -typed value that identifies the per-component-data type that is stored in a register. Each register can store up to four-components of data.

    +
    + + ff476215 + D3D_REGISTER_COMPONENT_TYPE ComponentType + D3D_REGISTER_COMPONENT_TYPE ComponentType +
    + + +

    Mask which indicates which components of a register are used.

    +
    + + ff476215 + D3D11_REGISTER_COMPONENT_MASK_FLAG Mask + D3D11_REGISTER_COMPONENT_MASK_FLAG Mask +
    + + +

    Mask which indicates whether a given component is never written (if the signature is an output signature) or always read (if the signature is an input signature).

    +
    + + ff476215 + D3D11_REGISTER_COMPONENT_MASK_FLAG ReadWriteMask + D3D11_REGISTER_COMPONENT_MASK_FLAG ReadWriteMask +
    + + +

    Indicates which stream the geometry shader is using for the signature parameter.

    +
    + + ff476215 + unsigned int Stream + unsigned int Stream +
    + + +

    A -typed value that indicates the minimum desired interpolation precision. For more info, see Using HLSL minimum precision.

    +
    + + ff476215 + D3D_MIN_PRECISION MinPrecision + D3D_MIN_PRECISION MinPrecision +
    + + +

    Describes a shader-variable type.

    +
    + +

    Get a shader-variable-type description by calling .

    +
    + + ff476212 + D3D11_SHADER_TYPE_DESC + D3D11_SHADER_TYPE_DESC +
    + + +

    A -typed value that identifies the variable class as one of scalar, vector, matrix, object, and so on.

    +
    + + ff476212 + D3D_SHADER_VARIABLE_CLASS Class + D3D_SHADER_VARIABLE_CLASS Class +
    + + +

    A -typed value that identifies the variable type.

    +
    + + ff476212 + D3D_SHADER_VARIABLE_TYPE Type + D3D_SHADER_VARIABLE_TYPE Type +
    + + +

    Number of rows in a matrix. Otherwise a numeric type returns 1, any other type returns 0.

    +
    + + ff476212 + unsigned int Rows + unsigned int Rows +
    + + +

    Number of columns in a matrix. Otherwise a numeric type returns 1, any other type returns 0.

    +
    + + ff476212 + unsigned int Columns + unsigned int Columns +
    + + +

    Number of elements in an array; otherwise 0.

    +
    + + ff476212 + unsigned int Elements + unsigned int Elements +
    + + +

    Number of members in the structure; otherwise 0.

    +
    + + ff476212 + unsigned int Members + unsigned int Members +
    + + +

    Offset, in bytes, between the start of the parent structure and this variable. Can be 0 if not a structure member.

    +
    + + ff476212 + unsigned int Offset + unsigned int Offset +
    + + +

    Name of the shader-variable type. This member can be null if it isn't used. This member supports dynamic shader linkage interface types, which have names. For more info about dynamic shader linkage, see Dynamic Linking.

    +
    + + ff476212 + const char* Name + char Name +
    + + +

    Describes a shader variable.

    +
    + +

    Get a shader-variable description using reflection by calling .

    As of the June 2010 update, DefaultValue emits default values for reflection.

    +
    + + ff476213 + D3D11_SHADER_VARIABLE_DESC + D3D11_SHADER_VARIABLE_DESC +
    + + +

    The variable name.

    +
    + + ff476213 + const char* Name + char Name +
    + + +

    Offset from the start of the parent structure to the beginning of the variable.

    +
    + + ff476213 + unsigned int StartOffset + unsigned int StartOffset +
    + + +

    Size of the variable (in bytes).

    +
    + + ff476213 + unsigned int Size + unsigned int Size +
    + + +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value identifies shader-variable properties.

    +
    + + ff476213 + D3D_SHADER_VARIABLE_FLAGS uFlags + D3D_SHADER_VARIABLE_FLAGS uFlags +
    + + +

    The default value for initializing the variable.

    +
    + + ff476213 + void* DefaultValue + void DefaultValue +
    + + +

    Offset from the start of the variable to the beginning of the texture.

    +
    + + ff476213 + unsigned int StartTexture + unsigned int StartTexture +
    + + +

    The size of the texture, in bytes.

    +
    + + ff476213 + unsigned int TextureSize + unsigned int TextureSize +
    + + +

    Offset from the start of the variable to the beginning of the sampler.

    +
    + + ff476213 + unsigned int StartSampler + unsigned int StartSampler +
    + + +

    The size of the sampler, in bytes.

    +
    + + ff476213 + unsigned int SamplerSize + unsigned int SamplerSize +
    + + + Shadow callback for . + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + + Internal Include Callback + + + + + A user-implemented method for opening and reading the contents of a shader #include file. + + This pointer + A -typed value that indicates the location of the #include file. + Name of the #include file. + Pointer to the container that includes the #include file. + Pointer to the buffer that Open returns that contains the include directives. This pointer remains valid until is called. + Pointer to the number of bytes that Open returns in ppData. + The user-implemented method should return S_OK. If Open fails when reading the #include file, the application programming interface (API) that caused Open to be called fails. This failure can occur in one of the following situations:The high-level shader language (HLSL) shader fails one of the D3D10CompileShader*** functions.The effect fails one of the D3D10CreateEffect*** functions. + HRESULT Open([None] D3D_INCLUDE_TYPE IncludeType,[None] const char* pFileName,[None] LPCVOID pParentData,[None] LPCVOID* ppData,[None] UINT* pBytes) + + + + A user-implemented method for closing a shader #include file. + + + If was successful, Close is guaranteed to be called before the API using the interface returns. + + This pointer + Pointer to the buffer that contains the include directives. This is the pointer that was returned by the corresponding call. + The user-implemented Close method should return S_OK. If Close fails when it closes the #include file, the application programming interface (API) that caused Close to be called fails. This failure can occur in one of the following situations:The high-level shader language (HLSL) shader fails one of the D3D10CompileShader*** functions.The effect fails one of the D3D10CreateEffect*** functions. + HRESULT Close([None] LPCVOID pData) + + + + The namespace provides managed Direct3D Compiler API. + + dd607340 + D3DCompiler + D3DCompiler + + + + No documentation. + + D3D11_REGISTER_COMPONENT_MASK_FLAG + + + + No documentation. + + D3D11_REGISTER_COMPONENT_MASK_ALL + + + + No documentation. + + D3D11_REGISTER_COMPONENT_MASK_COMPONENT_W + + + + No documentation. + + D3D11_REGISTER_COMPONENT_MASK_COMPONENT_X + + + + No documentation. + + D3D11_REGISTER_COMPONENT_MASK_COMPONENT_Y + + + + No documentation. + + D3D11_REGISTER_COMPONENT_MASK_COMPONENT_Z + + + + None. + + None + + + + Represents the compiled bytecode of a shader or effect. + + Blob + + + + Use this ShaderFlags constant in order to compile an effect with old D3D10CompileEffectFromMemory. + + + + + Initializes a new instance of the class. + + A containing the compiled bytecode. + + + + Initializes a new instance of the class. + + A containing the compiled bytecode. + + + + Initializes a new instance of the class. + + The buffer. + + + + Initializes a new instance of the class. + + a pointer to a compiler bytecode + size of the bytecode + + + + Initializes a new instance of the class. + + The BLOB. + + + + Gets the buffer pointer. + + + + + Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + Name of the source file. + The secondary data flags. + The secondary data. + + The compiled shader bytecode, or null if the method fails. + + + + + Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + Name of the source file. + The secondary data flags. + The secondary data. + + The compiled shader bytecode, or null if the method fails. + + + + + Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + Name of the source file. + The secondary data flags. + The secondary data. + + The compiled shader bytecode, or null if the method fails. + + + + + Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + Name of the source file. + The secondary data flags. + The secondary data. + + The compiled shader bytecode, or null if the method fails. + + + + + Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + Name of the source file. + The secondary data flags. + The secondary data. + + The compiled shader bytecode, or null if the method fails. + + + + + Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + Name of the source file used for reporting errors. Default is "unknown" + The secondary data flags. + The secondary data. + + The compiled shader bytecode, or null if the method fails. + + + + + Compiles the provided shader or effect source. + + The shader data. + Size of the shader. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + Name of the source file used for reporting errors. Default is "unknown" + The secondary data flags. + The secondary data. + + The compiled shader bytecode, or null if the method fails. + + + + + Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + Name of the source file. + + The compiled shader bytecode, or null if the method fails. + + + + + Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + Name of the source file. + The compiled shader bytecode, or null if the method fails. + + + + Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + The compiled shader bytecode, or null if the method fails. + + + + Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + Effect compilation options. + A set of macros to define during compilation. + An interface for handling include files. + + The compiled shader bytecode, or null if the method fails. + + + + + Compresses a set of shaders into a more compact form. + + An array of structures that describe the set of shaders to compress. + A compressed . + HRESULT D3DCompressShaders([In] int uNumShaders,[In, Buffer] D3D_SHADER_DATA* pShaderData,[In] int uFlags,[Out] ID3DBlob** ppCompressedData) + + + + Decompresses all shaders from a compressed set. + + Returns an array of decompress shader bytecode. + HRESULT D3DDecompressShaders([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] unsigned int uNumShaders,[In] unsigned int uStartIndex,[In, Buffer, Optional] unsigned int* pIndices,[In] unsigned int uFlags,[Out, Buffer] ID3D10Blob** ppShaders,[Out, Optional] unsigned int* pTotalShaders) + + + + Decompresses one or more shaders from a compressed set. + + The number of shaders to decompress. + The index of the first shader to decompress. + Returns an array of decompress shader bytecode. + HRESULT D3DDecompressShaders([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] unsigned int uNumShaders,[In] unsigned int uStartIndex,[In, Buffer, Optional] unsigned int* pIndices,[In] unsigned int uFlags,[Out, Buffer] ID3D10Blob** ppShaders,[Out, Optional] unsigned int* pTotalShaders) + + + + Decompresses one or more shaders from a compressed set. + + An array of indexes that represent the shaders to decompress. + Returns an array of decompress shader bytecode. + HRESULT D3DDecompressShaders([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] unsigned int uNumShaders,[In] unsigned int uStartIndex,[In, Buffer, Optional] unsigned int* pIndices,[In] unsigned int uFlags,[Out, Buffer] ID3D10Blob** ppShaders,[Out, Optional] unsigned int* pTotalShaders) + + + + Gets this instance is composed of compressed shaders. + + + true if this instance is compressed; otherwise, false. + + + + + Disassembles compiled HLSL code back into textual source. + + The textual source of the shader or effect. + + + + Disassembles compiled HLSL code back into textual source. + + Flags affecting the output of the disassembly. + The textual source of the shader or effect. + + + + Disassembles compiled HLSL code back into textual source. + + Flags affecting the output of the disassembly. + Commenting information to embed in the disassembly. + The textual source of the shader or effect. + + + + Disassembles a region of a compiled HLSL code back into textual source. + + The flags. + The comments. + The start byte offset. + The number of instructions. + The finish byte offset ref. + The textual source of the shader or effect. + HRESULT D3DDisassembleRegion([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] unsigned int Flags,[In, Optional] const char* szComments,[In] SIZE_T StartByteOffset,[In] SIZE_T NumInsts,[Out, Optional] SIZE_T* pFinishByteOffset,[Out] ID3D10Blob** ppDisassembly) + + + + Gets the trace instruction offsets. + + if set to true [is including non executable code]. + Start index of the instructions. + The number of instructions. + The total instructions ref. + An offset + HRESULT D3DGetTraceInstructionOffsets([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] unsigned int Flags,[In] SIZE_T StartInstIndex,[In] SIZE_T NumInsts,[Out, Buffer, Optional] SIZE_T* pOffsets,[Out, Optional] SIZE_T* pTotalInsts) + + + + Retrieves a specific part from a compilation result. + + + D3DGetBlobPart retrieves the part of a blob (arbitrary length data buffer) that contains the type of data that the Part parameter specifies. + + A -typed value that specifies the part of the buffer to retrieve. + Returns the extracted part. + HRESULT D3DGetBlobPart([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] D3D_BLOB_PART Part,[In] int Flags,[Out] ID3DBlob** ppPart) + + + + Sets information in a compilation result. + + The part. + The part data. + The new shader in which the new part data is set. + HRESULT D3DSetBlobPart([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] D3D_BLOB_PART Part,[In] unsigned int Flags,[In, Buffer] const void* pPart,[In] SIZE_T PartSize,[Out] ID3D10Blob** ppNewShader) + + + + Loads from the specified stream. + + The stream. + A shader bytecode + + + + Saves this bytecode to the specified stream. + + The stream. + + + + Preprocesses the provided shader or effect source. + + A string containing the source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + Name of the source file. + The preprocessed shader source. + + + + Preprocesses the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + Name of the source file. + The preprocessed shader source. + + + + Preprocesses the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + Name of the source file. + The preprocessed shader source. + + + + Preprocesses the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to preprocess. + + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + Name of the source file. + The preprocessed shader source. + + + + Preprocesses the provided shader or effect source. + + A string containing the source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + Name of the source file. + The preprocessed shader source. + + + + Preprocesses a shader or effect from a file on disk. + + The name of the source file to compile. + The preprocessed shader source. + + + + Preprocesses a shader or effect from a file on disk. + + The name of the source file to compile. + A set of macros to define during preprocessing. + An interface for handling include files. + The preprocessed shader source. + + + + Preprocesses a shader or effect from a file on disk. + + The name of the source file to compile. + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + The preprocessed shader source. + + + + Strips extraneous information from a compiled shader or effect. + + Options specifying what to remove from the shader. + A string containing any errors that may have occurred. + HRESULT D3DStripShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[In] D3DCOMPILER_STRIP_FLAGS uStripFlags,[Out] ID3D10Blob** ppStrippedBlob) + + + + Cast this to the underlying byte buffer. + + + A byte buffer + + + + Read a compiled shader bytecode from a Stream and return a ShaderBytecode + + + + + + + Read a compiled shader bytecode from a Stream and return a ShaderBytecode + + + + + + + Disposes all resource for the allocated object + + This is kept for backwards compatibility only, this actually does nothing in that case + + + + Gets the shader type and version string from the provided bytecode. + + The type and version string of the provided shader bytecode. + Is thrown when bytecode contains invalid data or the version could not be read. + Is thrown when bytecode contains invalid data. + + + + Reads the value between start and end bits from the provided token. + + The source of the data to read. + The start bit. + The end bit. + + + + + Represents a profile of a shader stage - stage type and version + + + + + Gets the shader version - that is the shader stage type + + For example, it is the "vs" part from "vs_5_0". + + + + Gets the major version of the shader profile. + + For example, it is the "5" part from "vs_5_0". + + + + Gets the minor version of the shader profile. + + For example, it is the "0" part from "vs_5_0". + + + + Gets the major version of the shader sub-profile. + + For example, it is the "9" part from "vs_4_0_profile_9_3". + + + + Gets the minor version of the shader sub-profile. + + For example, it is the "3" part from "vs_4_0_profile_9_3". + + + + Creates a new instance of the struct. + + The shader stage type. + The major version. + The minor version. + The profile major version. + The profile minor version. + + + + Returns the string representation of the current profile. + + The string representation, for example "ps_5_0" or "vs_4_0_profile_9_3". + + + + Gets the shader type prefix. + + Type prefix, for example "vs" or "ps". + + + + Gets the corresponding for this . + + The minimum that corresponds to current profile. + + + + Represents a shader signature. + + + + + Initializes a new instance of the class. + + A pointer to a shader signature bytecode. + The size. + + + + Initializes a new instance of the class. + + The BLOB. + + + + Initializes a new instance of the class. + + The data. + + + + Initializes a new instance of the class. + + The data. + + + + Gets the raw data of the shader signature. + + + + + Extracts the input and output signatures from a compiled shader or effect. + + The bytecode of the compiled shader or effect. + The input and output signatures of the shader or effect. + dd607329 + HRESULT D3DGetInputAndOutputSignatureBlob([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[Out] ID3D10Blob** ppSignatureBlob) + D3DGetInputAndOutputSignatureBlob + + + + Extracts the input signature from a compiled shader or effect. + + The bytecode of the compiled shader or effect. + The input signature of the shader or effect. + dd607330 + HRESULT D3DGetInputSignatureBlob([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[Out] ID3D10Blob** ppSignatureBlob) + D3DGetInputSignatureBlob + + + + Extracts the output signature from a compiled shader or effect. + + The bytecode of the compiled shader or effect. + The output signature of the shader or effect. + HRESULT D3DGetOutputSignatureBlob([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[Out] ID3D10Blob** ppSignatureBlob) + dd607331 + HRESULT D3DGetOutputSignatureBlob([In, Buffer] const void* pSrcData,[In] SIZE_T SrcDataSize,[Out] ID3D10Blob** ppSignatureBlob) + D3DGetOutputSignatureBlob + + + + Cast this to the underlying byte buffer. + + + A byte buffer + + + diff --git a/RenderHookAPI/bin/SharpDX.DXGI.dll b/RenderHookAPI/bin/SharpDX.DXGI.dll new file mode 100644 index 0000000000000000000000000000000000000000..3b9d1a5d9847b1e2aff7c9e4ea72b7210ffa89d9 GIT binary patch literal 139776 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 K)8}&sf&T(u0=*Id literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/SharpDX.DXGI.xml b/RenderHookAPI/bin/SharpDX.DXGI.xml new file mode 100644 index 0000000..4b3c4a3 --- /dev/null +++ b/RenderHookAPI/bin/SharpDX.DXGI.xml @@ -0,0 +1,10094 @@ + + + + SharpDX.DXGI + + + +

    +

    The interface represents a display subsystem (including one or more GPUs, DACs and video memory).

    +
    + +

    A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard.

    To enumerate the display subsystems, use .

    To get an interface to the adapter for a particular device, use .

    To create a software adapter, use .

    Windows?Phone?8: This API is supported.

    +
    + + bb174523 + IDXGIAdapter + IDXGIAdapter + + + + Gets all outputs from this adapter. + + bb174525 + HRESULT IDXGIAdapter::EnumOutputs([In] unsigned int Output,[Out] IDXGIOutput** ppOutput) + IDXGIAdapter::EnumOutputs + + + + Checks to see if a device interface for a graphics component is supported by the system. + + The GUID of the interface of the device version for which support is being checked. For example, typeof(ID3D10Device).GUID. + + true if the interface is supported; otherwise, false. + + Bb174524 + HRESULT IDXGIAdapter::CheckInterfaceSupport([In] const GUID& InterfaceName,[Out] LARGE_INTEGER* pUMDVersion) + IDXGIAdapter::CheckInterfaceSupport + + + + Checks to see if a device interface for a graphics component is supported by the system. + + the interface of the device version for which support is being checked. + + true if the interface is supported; otherwise, false. + + Bb174524 + HRESULT IDXGIAdapter::CheckInterfaceSupport([In] const GUID& InterfaceName,[Out] LARGE_INTEGER* pUMDVersion) + IDXGIAdapter::CheckInterfaceSupport + + + + Checks to see if a device interface for a graphics component is supported by the system. + + the interface of the device version for which support is being checked. + The user mode driver version of InterfaceName. This is only returned if the interface is supported. + + true if the interface is supported; otherwise, false. + + Bb174524 + HRESULT IDXGIAdapter::CheckInterfaceSupport([In] const GUID& InterfaceName,[Out] LARGE_INTEGER* pUMDVersion) + IDXGIAdapter::CheckInterfaceSupport + + + + Checks to see if a device interface for a graphics component is supported by the system. + + The GUID of the interface of the device version for which support is being checked. For example, typeof(ID3D10Device).GUID. + The user mode driver version of InterfaceName. This is only returned if the interface is supported. + + true if the interface is supported; otherwise, false. + + Bb174524 + HRESULT IDXGIAdapter::CheckInterfaceSupport([In] const GUID& InterfaceName,[Out] LARGE_INTEGER* pUMDVersion) + IDXGIAdapter::CheckInterfaceSupport + + + + Gets an adapter (video card) outputs. + + The index of the output. + + An instance of + + HRESULT IDXGIAdapter::EnumOutputs([In] unsigned int Output,[Out] IDXGIOutput** ppOutput) + + When the EnumOutputs method succeeds and fills the ppOutput parameter with the address of the reference to the output interface, EnumOutputs increments the output interface's reference count. To avoid a memory leak, when you finish using the output interface, call the Release method to decrement the reference count.EnumOutputs first returns the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. EnumOutputs then returns other outputs. + + if the index is greater than the number of outputs, result code + bb174525 + HRESULT IDXGIAdapter::EnumOutputs([In] unsigned int Output,[Out] IDXGIOutput** ppOutput) + IDXGIAdapter::EnumOutputs + + + + Return the number of available outputs from this adapter. + + The number of outputs + bb174525 + HRESULT IDXGIAdapter::EnumOutputs([In] unsigned int Output,[Out] IDXGIOutput** ppOutput) + IDXGIAdapter::EnumOutputs + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a DXGI 1.0 description of an adapter (or video card).

    +
    + +

    Graphics apps can use the DXGI API to retrieve an accurate set of graphics memory values on systems that have Windows Display Driver Model (WDDM) drivers. The following are the critical steps involved.

    • Graphics driver model determination ? Because DXGI is only available on systems with WDDM drivers, the app must first confirm the driver model by using the following API.
       HasWDDMDriver()	
      +            { LPDIRECT3DCREATE9EX pD3D9Create9Ex = null; HMODULE             hD3D9          = null; hD3D9 = LoadLibrary( L"d3d9.dll" ); if ( null == hD3D9 ) { return false; } // /*  Try to create IDirect3D9Ex interface (also known as a DX9L interface). This interface can only be created if the driver is a WDDM driver. */ // pD3D9Create9Ex = (LPDIRECT3DCREATE9EX) GetProcAddress( hD3D9, "Direct3DCreate9Ex" ); return pD3D9Create9Ex != null;	
      +            } 
    • Retrieval of graphics memory values.? After the app determines the driver model to be WDDM, the app can use the Direct3D 10 or later API and DXGI to get the amount of graphics memory. After you create a Direct3D device, use this code to obtain a structure that contains the amount of available graphics memory.
        * pDXGIDevice;	
      +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
      +             * pDXGIAdapter;	
      +            pDXGIDevice->GetAdapter(&pDXGIAdapter);	
      +             adapterDesc;	
      +            pDXGIAdapter->GetDesc(&adapterDesc); 
    +
    + + bb174526 + GetDesc + GetDesc + HRESULT IDXGIAdapter::GetDesc([Out] DXGI_ADAPTER_DESC* pDesc) +
    + + +

    Enumerate adapter (video card) outputs.

    +
    +

    The index of the output.

    +

    The address of a reference to an interface at the position specified by the Output parameter.

    +

    A code that indicates success or failure (see DXGI_ERROR). is returned if the index is greater than the number of outputs.

    If the adapter came from a device created using , then the adapter has no outputs, so is returned.

    + + Note??If you call this API in a Session 0 process, it returns .?

    When the EnumOutputs method succeeds and fills the ppOutput parameter with the address of the reference to the output interface, EnumOutputs increments the output interface's reference count. To avoid a memory leak, when you finish using the output interface, call the Release method to decrement the reference count.

    EnumOutputs first returns the output on which the desktop primary is displayed. This output corresponds with an index of zero. EnumOutputs then returns other outputs.

    +
    + + bb174525 + HRESULT IDXGIAdapter::EnumOutputs([In] unsigned int Output,[Out] IDXGIOutput** ppOutput) + IDXGIAdapter::EnumOutputs +
    + + +

    Gets a DXGI 1.0 description of an adapter (or video card).

    +
    +

    A reference to a structure that describes the adapter. This parameter must not be null. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID in the VendorId, DeviceId, SubSysId, and Revision members of and ?Software Adapter? for the description string in the Description member.

    +

    Returns if successful; otherwise returns E_INVALIDARG if the pDesc parameter is null.

    + +

    Graphics apps can use the DXGI API to retrieve an accurate set of graphics memory values on systems that have Windows Display Driver Model (WDDM) drivers. The following are the critical steps involved.

    • Graphics driver model determination ? Because DXGI is only available on systems with WDDM drivers, the app must first confirm the driver model by using the following API.
       HasWDDMDriver()	
      +            { LPDIRECT3DCREATE9EX pD3D9Create9Ex = null; HMODULE             hD3D9          = null; hD3D9 = LoadLibrary( L"d3d9.dll" ); if ( null == hD3D9 ) { return false; } // /*  Try to create IDirect3D9Ex interface (also known as a DX9L interface). This interface can only be created if the driver is a WDDM driver. */ // pD3D9Create9Ex = (LPDIRECT3DCREATE9EX) GetProcAddress( hD3D9, "Direct3DCreate9Ex" ); return pD3D9Create9Ex != null;	
      +            } 
    • Retrieval of graphics memory values.? After the app determines the driver model to be WDDM, the app can use the Direct3D 10 or later API and DXGI to get the amount of graphics memory. After you create a Direct3D device, use this code to obtain a structure that contains the amount of available graphics memory.
        * pDXGIDevice;	
      +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
      +             * pDXGIAdapter;	
      +            pDXGIDevice->GetAdapter(&pDXGIAdapter);	
      +             adapterDesc;	
      +            pDXGIAdapter->GetDesc(&adapterDesc); 
    +
    + + bb174526 + HRESULT IDXGIAdapter::GetDesc([Out] DXGI_ADAPTER_DESC* pDesc) + IDXGIAdapter::GetDesc +
    + + +

    Checks whether the system supports a device interface for a graphics component.

    +
    +

    The of the interface of the device version for which support is being checked. For example, __uuidof(ID3D10Device).

    +

    The user mode driver version of InterfaceName. This is returned only if the interface is supported, otherwise this parameter will be null.

    +

    indicates that the interface is supported, otherwise is returned (For more information, see DXGI_ERROR).

    + + Note??You can use CheckInterfaceSupport only to check whether a Direct3D 10.x interface is supported, and only on Windows Vista SP1 and later versions of the operating system. If you try to use CheckInterfaceSupport to check whether a Direct3D 11.x and later version interface is supported, CheckInterfaceSupport returns . Therefore, do not use CheckInterfaceSupport. Instead, to verify whether the operating system supports a particular interface, try to create the interface. For example, if you call the method and it fails, the operating system does not support the interface.? + + + bb174524 + HRESULT IDXGIAdapter::CheckInterfaceSupport([In] const GUID& InterfaceName,[Out] LARGE_INTEGER* pUMDVersion) + IDXGIAdapter::CheckInterfaceSupport +
    + + + The assembly provides managed DXGI API. + + hh404534 + DXGI + DXGI + + + +

    An interface implements a derived class for DXGI objects that produce image data.

    +
    + +

    The interface is designed for use by DXGI objects that need access to other DXGI objects. This interface is useful to applications that do not use Direct3D to communicate with DXGI.

    The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the interface. You can query this Direct3D device object for the device's corresponding interface. To retrieve the interface of a Direct3D device, use the following code:

     * pDXGIDevice;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
    +            

    Windows?Phone?8: This API is supported.

    +
    + + bb174527 + IDXGIDevice + IDXGIDevice +
    + + + Gets the residency status of an array of resources. + + + The information returned by the pResidencyStatus argument array describes the residency status at the time that the QueryResourceResidency method was called. Note that the residency status will constantly change. If you call the QueryResourceResidency method during a device removed state, the pResidencyStatus argument will return the DXGI_RESIDENCY_EVICTED_TO_DISK flag. Note??This method should not be called every frame as it incurs a non-trivial amount of overhead. + + An array of interfaces. + Returns an array of flags. Each element describes the residency status for corresponding element in the ppResources argument array. + HRESULT IDXGIDevice::QueryResourceResidency([In, Buffer] const IUnknown** ppResources,[Out, Buffer] DXGI_RESIDENCY* pResidencyStatus,[None] int NumResources) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the adapter for the specified device.

    +
    + +

    If the GetAdapter method succeeds, the reference count on the adapter interface will be incremented. To avoid a memory leak, be sure to release the interface when you are finished using it.

    +
    + + bb174531 + GetAdapter + GetAdapter + HRESULT IDXGIDevice::GetAdapter([Out] IDXGIAdapter** pAdapter) +
    + + +

    Gets or sets the GPU thread priority.

    +
    + + bb174532 + GetGPUThreadPriority / SetGPUThreadPriority + GetGPUThreadPriority + HRESULT IDXGIDevice::GetGPUThreadPriority([Out] int* pPriority) +
    + + +

    Returns the adapter for the specified device.

    +
    +

    The address of an interface reference to the adapter. This parameter must not be null.

    +

    Returns if successful; otherwise, returns one of the DXGI_ERROR that indicates failure. If the pAdapter parameter is null this method returns E_INVALIDARG.

    + +

    If the GetAdapter method succeeds, the reference count on the adapter interface will be incremented. To avoid a memory leak, be sure to release the interface when you are finished using it.

    +
    + + bb174531 + HRESULT IDXGIDevice::GetAdapter([Out] IDXGIAdapter** pAdapter) + IDXGIDevice::GetAdapter +
    + + +

    Returns a surface. This method is used internally and you should not call it directly in your application.

    +
    +

    A reference to a structure that describes the surface.

    +

    The number of surfaces to create.

    +

    A DXGI_USAGE flag that specifies how the surface is expected to be used.

    +

    An optional reference to a structure that contains shared resource information for opening views of such resources.

    +

    The address of an interface reference to the first created surface.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    + +

    The CreateSurface method creates a buffer to exchange data between one or more devices. It is used internally, and you should not directly call it.

    The runtime automatically creates an interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an interface when it calls or ID3D10Device::CreateTexture2D to create a 2D texture. To retrieve the interface that represents the 2D texture surface, call ID3D11Texture2D::QueryInterface or ID3D10Texture2D::QueryInterface. In this call, you must pass the identifier of . If the 2D texture has only a single MIP-map level and does not consist of an array of textures, QueryInterface succeeds and returns a reference to the interface reference. Otherwise, QueryInterface fails and does not return the reference to . +

    +
    + + bb174530 + HRESULT IDXGIDevice::CreateSurface([In] const DXGI_SURFACE_DESC* pDesc,[In] unsigned int NumSurfaces,[In] unsigned int Usage,[In, Optional] const DXGI_SHARED_RESOURCE* pSharedResource,[Out] IDXGISurface** ppSurface) + IDXGIDevice::CreateSurface +
    + + +

    Gets the residency status of an array of resources.

    +
    +

    An array of interfaces.

    +

    An array of flags. Each element describes the residency status for corresponding element in the ppResources argument array.

    +

    The number of resources in the ppResources argument array and pResidencyStatus argument array.

    +

    Returns if successful; otherwise, returns , E_INVALIDARG, or E_POINTER (see Common Values and WinError.h for more information).

    + +

    The information returned by the pResidencyStatus argument array describes the residency status at the time that the QueryResourceResidency method was called.

    Note??The residency status will constantly change.?

    If you call the QueryResourceResidency method during a device removed state, the pResidencyStatus argument will return the flag.

    Note??This method should not be called every frame as it incurs a non-trivial amount of overhead.? +
    + + bb174533 + HRESULT IDXGIDevice::QueryResourceResidency([In, Buffer] const IUnknown** ppResources,[Out, Buffer] DXGI_RESIDENCY* pResidencyStatus,[In] unsigned int NumResources) + IDXGIDevice::QueryResourceResidency +
    + + +

    Gets the residency status of an array of resources.

    +
    +

    An array of interfaces.

    +

    An array of flags. Each element describes the residency status for corresponding element in the ppResources argument array.

    +

    The number of resources in the ppResources argument array and pResidencyStatus argument array.

    +

    Returns if successful; otherwise, returns , E_INVALIDARG, or E_POINTER (see Common Values and WinError.h for more information).

    + +

    The information returned by the pResidencyStatus argument array describes the residency status at the time that the QueryResourceResidency method was called.

    Note??The residency status will constantly change.?

    If you call the QueryResourceResidency method during a device removed state, the pResidencyStatus argument will return the flag.

    Note??This method should not be called every frame as it incurs a non-trivial amount of overhead.? +
    + + bb174533 + HRESULT IDXGIDevice::QueryResourceResidency([In, Buffer] const IUnknown** ppResources,[Out, Buffer] DXGI_RESIDENCY* pResidencyStatus,[In] unsigned int NumResources) + IDXGIDevice::QueryResourceResidency +
    + + +

    Gets the residency status of an array of resources.

    +
    +

    An array of interfaces.

    +

    An array of flags. Each element describes the residency status for corresponding element in the ppResources argument array.

    +

    The number of resources in the ppResources argument array and pResidencyStatus argument array.

    +

    Returns if successful; otherwise, returns , E_INVALIDARG, or E_POINTER (see Common Values and WinError.h for more information).

    + +

    The information returned by the pResidencyStatus argument array describes the residency status at the time that the QueryResourceResidency method was called.

    Note??The residency status will constantly change.?

    If you call the QueryResourceResidency method during a device removed state, the pResidencyStatus argument will return the flag.

    Note??This method should not be called every frame as it incurs a non-trivial amount of overhead.? +
    + + bb174533 + HRESULT IDXGIDevice::QueryResourceResidency([In, Buffer] const IUnknown** ppResources,[Out, Buffer] DXGI_RESIDENCY* pResidencyStatus,[In] unsigned int NumResources) + IDXGIDevice::QueryResourceResidency +
    + + +

    Sets the GPU thread priority.

    +
    +

    A value that specifies the required GPU thread priority. This value must be between -7 and 7, inclusive, where 0 represents normal priority.

    +

    Return if successful; otherwise, returns E_INVALIDARG if the Priority parameter is invalid.

    + +

    The values for the Priority parameter function as follows:

    • Positive values increase the likelihood that the GPU scheduler will grant GPU execution cycles to the device when rendering.
    • Negative values lessen the likelihood that the device will receive GPU execution cycles when devices compete for them.
    • The device is guaranteed to receive some GPU execution cycles at all settings.

    To use the SetGPUThreadPriority method, you should have a comprehensive understanding of GPU scheduling. You should profile your application to ensure that it behaves as intended. If used inappropriately, the SetGPUThreadPriority method can impede rendering speed and result in a poor user experience.

    +
    + + bb174534 + HRESULT IDXGIDevice::SetGPUThreadPriority([In] int Priority) + IDXGIDevice::SetGPUThreadPriority +
    + + +

    Gets the GPU thread priority.

    +
    +

    A reference to a variable that receives a value that indicates the current GPU thread priority. The value will be between -7 and 7, inclusive, where 0 represents normal priority.

    +

    Return if successful; otherwise, returns E_POINTER if the pPriority parameter is null.

    + + bb174532 + HRESULT IDXGIDevice::GetGPUThreadPriority([Out] int* pPriority) + IDXGIDevice::GetGPUThreadPriority +
    + + +

    Inherited from objects that are tied to the device so that they can retrieve a reference to it.

    +
    + +

    Windows?Phone?8: This API is supported.

    +
    + + bb174528 + IDXGIDeviceSubObject + IDXGIDeviceSubObject +
    + + + Retrieves the device. + + The interface that is returned can be any interface published by the device. + The associated device. + HRESULT IDXGIDeviceSubObject::GetDevice([In] GUID* riid,[Out] void** ppDevice) + + + + Gets or sets the debug-name for this object. + + + The debug name. + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the device.

    +
    +

    The reference id for the device.

    +

    The address of a reference to the device.

    +

    A code that indicates success or failure (see DXGI_ERROR).

    + +

    The type of interface that is returned can be any interface published by the device. For example, it could be an * called pDevice, and therefore the REFIID would be obtained by calling __uuidof(pDevice).

    +
    + + bb174529 + HRESULT IDXGIDeviceSubObject::GetDevice([In] const GUID& riid,[Out] void** ppDevice) + IDXGIDeviceSubObject::GetDevice +
    + + +

    An interface is a base interface for all DXGI objects; supports associating caller-defined (private data) with an object and retrieval of an interface to the parent object.

    +
    + +

    implements base-class functionality for the following interfaces:

    Windows?Phone?8: This API is supported.

    +
    + + bb174541 + IDXGIObject + IDXGIObject +
    + + + Gets the parent of the object. + + Type of the parent object + Returns the parent object based on the GUID of the type of the parent object. + bb174542 + HRESULT IDXGIObject::GetParent([In] const GUID& riid,[Out] void** ppParent) + IDXGIObject::GetParent + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets application-defined data to the object and associates that data with a .

    +
    +

    A that identifies the data. Use this in a call to GetPrivateData to get the data.

    +

    The size of the object's data.

    +

    A reference to the object's data.

    +

    Returns one of the DXGI_ERROR values.

    + +

    SetPrivateData makes a copy of the specified data and stores it with the object.

    Private data that SetPrivateData stores in the object occupies the same storage space as private data that is stored by associated Direct3D objects (for example, by a Microsoft Direct3D?11 device through or by a Direct3D?11 child device through ).

    The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "<unnamed>". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the SetPrivateData method and the well-known private data () that is in D3Dcommon.h. For example, to give pContext a friendly name of My name, use the following code:

     static const char c_szName[] = "My name";	
    +            hr = pContext->SetPrivateData( , sizeof( c_szName ) - 1, c_szName );	
    +            

    You can use to track down memory leaks and understand performance characteristics of your applications. This information is reflected in the output of the debug layer that is related to memory leaks () and with the event tracing for Windows events that we've added to Windows?8. +

    +
    + + bb174544 + HRESULT IDXGIObject::SetPrivateData([In] const GUID& Name,[In] unsigned int DataSize,[In, Buffer] const void* pData) + IDXGIObject::SetPrivateData +
    + + +

    Set an interface in the object's private data.

    +
    +

    A identifying the interface.

    +

    The interface to set.

    +

    Returns one of the following DXGI_ERROR.

    + +

    This API associates an interface reference with the object.

    When the interface is set its reference count is incremented. When the data are overwritten (by calling SPD or SPDI with the same ) or the object is destroyed, ::Release() is called and the interface's reference count is decremented.

    +
    + + bb174545 + HRESULT IDXGIObject::SetPrivateDataInterface([In] const GUID& Name,[In, Optional] const IUnknown* pUnknown) + IDXGIObject::SetPrivateDataInterface +
    + + +

    Get a reference to the object's data.

    +
    +

    A identifying the data.

    +

    The size of the data.

    +

    Pointer to the data.

    +

    Returns one of the following DXGI_ERROR.

    + +

    If the data returned is a reference to an , or one of its derivative classes, previously set by , you must call ::Release() on the reference before the reference is freed to decrement the reference count.

    You can pass GUID_DeviceType in the Name parameter of GetPrivateData to retrieve the device type from the display adapter object (, , ).

    To get the type of device on which the display adapter was created

    1. Call IUnknown::QueryInterface on the or ID3D10Device object to retrieve the object.
    2. Call GetParent on the object to retrieve the object.
    3. Call GetPrivateData on the object with GUID_DeviceType to retrieve the type of device on which the display adapter was created. pData will point to a value from the driver-type enumeration (for example, a value from ).

    On Windows?7 or earlier, this type is either a value from D3D10_DRIVER_TYPE or depending on which kind of device was created. On Windows?8, this type is always a value from . Don't use with GUID_DeviceType because the behavior when doing so is undefined.

    +
    + + bb174543 + HRESULT IDXGIObject::GetPrivateData([In] const GUID& Name,[InOut] unsigned int* pDataSize,[Out, Buffer] void* pData) + IDXGIObject::GetPrivateData +
    + + +

    Gets the parent of the object.

    +
    +

    The ID of the requested interface.

    +

    The address of a reference to the parent object.

    +

    Returns one of the DXGI_ERROR values.

    + + bb174542 + HRESULT IDXGIObject::GetParent([In] const GUID& riid,[Out] void** ppParent) + IDXGIObject::GetParent +
    + + +

    An interface implements methods for generating DXGI objects (which handle full screen transitions).

    +
    + +

    Create a factory by calling CreateDXGIFactory.

    Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the interface from the Direct3D device and then use the method to locate the factory. The following code shows how.

     * pDXGIDevice = nullptr;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);  * pDXGIAdapter = nullptr;	
    +            hr = pDXGIDevice->GetAdapter( &pDXGIAdapter );  * pIDXGIFactory = nullptr;	
    +            pDXGIAdapter->GetParent(__uuidof(), (void **)&pIDXGIFactory);

    Windows?Phone?8: This API is supported.

    +
    + + bb174535 + IDXGIFactory + IDXGIFactory +
    + + + Gets both adapters (video cards) with or without outputs. + + The index of the adapter to enumerate. + a reference to an interface at the position specified by the Adapter parameter + + When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop.When the EnumAdapters method succeeds and fills the ppAdapter parameter with the address of the reference to the adapter interface, EnumAdapters increments the adapter interface's reference count. When you finish using the adapter interface, call the Release method to decrement the reference count before you destroy the reference.EnumAdapters first returns the local adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. EnumAdapters then returns other adapters with outputs. + + HRESULT IDXGIFactory::EnumAdapters([In] unsigned int Adapter,[Out] IDXGIAdapter** ppAdapter) + + + + Return an array of available from this factory. + + HRESULT IDXGIFactory::EnumAdapters([In] unsigned int Adapter,[Out] IDXGIAdapter** ppAdapter) + + + + Return the number of available adapters from this factory. + + The number of adapters + HRESULT IDXGIFactory::EnumAdapters([In] unsigned int Adapter,[Out] IDXGIAdapter** ppAdapter) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Enumerates the adapters (video cards).

    +
    +

    The index of the adapter to enumerate.

    +

    The address of a reference to an interface at the position specified by the Adapter parameter. This parameter must not be null.

    +

    Returns if successful; otherwise, returns if the index is greater than or equal to the number of adapters in the local system, or if ppAdapter parameter is null.

    + +

    When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop.

    When the EnumAdapters method succeeds and fills the ppAdapter parameter with the address of the reference to the adapter interface, EnumAdapters increments the adapter interface's reference count. When you finish using the adapter interface, call the Release method to decrement the reference count before you destroy the reference.

    EnumAdapters first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. EnumAdapters next returns other adapters with outputs. EnumAdapters finally returns adapters without outputs.

    +
    + + bb174538 + HRESULT IDXGIFactory::EnumAdapters([In] unsigned int Adapter,[Out] IDXGIAdapter** ppAdapter) + IDXGIFactory::EnumAdapters +
    + + +

    Allows DXGI to monitor an application's message queue for the alt-enter key sequence (which causes the application to switch from windowed to full screen or vice versa).

    +
    +

    The handle of the window that is to be monitored. This parameter can be null; but only if the flags are also 0.

    +

    One or more of the following values:

    • - Prevent DXGI from monitoring an applications message queue; this makes DXGI unable to respond to mode changes.
    • - Prevent DXGI from responding to an alt-enter sequence.
    • - Prevent DXGI from responding to a print-screen key.
    +

    if WindowHandle is invalid, or E_OUTOFMEMORY.

    + + Note??If you call this API in a Session 0 process, it returns .?

    The combination of WindowHandle and Flags informs DXGI to stop monitoring window messages for the previously-associated window.

    If the application switches to full-screen mode, DXGI will choose a full-screen resolution to be the smallest supported resolution that is larger or the same size as the current back buffer size.

    Applications can make some changes to make the transition from windowed to full screen more efficient. For example, on a WM_SIZE message, the application should release any outstanding swap-chain back buffers, call , then re-acquire the back buffers from the swap chain(s). This gives the swap chain(s) an opportunity to resize the back buffers, and/or recreate them to enable full-screen flipping operation. If the application does not perform this sequence, DXGI will still make the full-screen/windowed transition, but may be forced to use a stretch operation (since the back buffers may not be the correct size), which may be less efficient. Even if a stretch is not required, presentation may not be optimal because the back buffers might not be directly interchangeable with the front buffer. Thus, a call to ResizeBuffers on WM_SIZE is always recommended, since WM_SIZE is always sent during a fullscreen transition.

    While windowed, the application can, if it chooses, restrict the size of its window's client area to sizes to which it is comfortable rendering. A fully flexible application would make no such restriction, but UI elements or other design considerations can, of course, make this flexibility untenable. If the application further chooses to restrict its window's client area to just those that match supported full-screen resolutions, the application can field WM_SIZING, then check against . If a matching mode is found, allow the resize. (The can be retrieved from . Absent subsequent changes to desktop topology, this will be the same output that will be chosen when alt-enter is fielded and fullscreen mode is begun for that swap chain.)

    Applications that want to handle mode changes or Alt+Enter themselves should call MakeWindowAssociation with the flag after swap chain creation. The WindowHandle argument, if non-null, specifies that the application message queues will not be handled by the DXGI runtime for all swap chains of a particular target . Calling MakeWindowAssociation with the flag after swapchain creation ensures that DXGI will not interfere with application's handling of window mode changes or Alt+Enter.

    +
    + + bb174540 + HRESULT IDXGIFactory::MakeWindowAssociation([In] HWND WindowHandle,[In] DXGI_MWA_FLAGS Flags) + IDXGIFactory::MakeWindowAssociation +
    + + +

    Get the window through which the user controls the transition to and from full screen.

    +
    +

    A reference to a window handle.

    + + Note??If you call this API in a Session 0 process, it returns .? + + + bb174539 + HRESULT IDXGIFactory::GetWindowAssociation([Out] HWND* pWindowHandle) + IDXGIFactory::GetWindowAssociation +
    + + +

    [Starting with Direct3D 11.1, we recommend not to use CreateSwapChain anymore to create a swap chain. Instead, use CreateSwapChainForHwnd, CreateSwapChainForCoreWindow, or CreateSwapChainForComposition depending on how you want to create the swap chain.]

    Creates a swap chain.

    +
    + No documentation. + No documentation. + No documentation. +

    if pDesc or ppSwapChain is null, if you request full-screen mode and it is unavailable, or E_OUTOFMEMORY. Other error codes defined by the type of device passed in may also be returned.

    + + Note??If you call this API in a Session 0 process, it returns .?

    If you attempt to create a swap chain in full-screen mode, and full-screen mode is unavailable, the swap chain will be created in windowed mode and will be returned.

    If the buffer width or the buffer height is zero, the sizes will be inferred from the output window size in the swap-chain description.

    Because the target output can't be chosen explicitly when the swap chain is created, we recommend not to create a full-screen swap chain. This can reduce presentation performance if the swap chain size and the output window size do not match. Here are two ways to ensure that the sizes match:

    • Create a windowed swap chain and then set it full-screen using .
    • Save a reference to the swap chain immediately after creation, and use it to get the output window size during a WM_SIZE event. Then resize the swap chain buffers (with ) during the transition from windowed to full-screen.

    If the swap chain is in full-screen mode, before you release it you must use SetFullscreenState to switch it to windowed mode. For more information about releasing a swap chain, see the "Destroying a Swap Chain" section of DXGI Overview.

    After the runtime renders the initial frame in full screen, the runtime might unexpectedly exit full screen during a call to . To work around this issue, we recommend that you execute the following code right after you call CreateSwapChain to create a full-screen swap chain (Windowed member of set to ). +

     // Detect if newly created full-screen swap chain isn't actually full screen.	
    +            * pTarget;  bFullscreen;	
    +            if (SUCCEEDED(pSwapChain->GetFullscreenState(&bFullscreen, &pTarget)))	
    +            { pTarget->Release();	
    +            }	
    +            else bFullscreen = ;	
    +            // If not full screen, enable full screen again.	
    +            if (!bFullscreen)	
    +            { ShowWindow(hWnd, SW_MINIMIZE); ShowWindow(hWnd, SW_RESTORE); pSwapChain->SetFullscreenState(TRUE, null);	
    +            }	
    +            

    You can specify and values in the swap-chain description that pDesc points to. These values allow you to use features like flip-model presentation and content protection by using pre-Windows?8 APIs.

    However, to use stereo presentation and to change resize behavior for the flip model, applications must use the method. Otherwise, the back-buffer contents implicitly scale to fit the presentation target size; that is, you can't turn off scaling.

    +
    + + bb174537 + HRESULT IDXGIFactory::CreateSwapChain([In] IUnknown* pDevice,[In] DXGI_SWAP_CHAIN_DESC* pDesc,[Out, Fast] IDXGISwapChain** ppSwapChain) + IDXGIFactory::CreateSwapChain +
    + + +

    Create an adapter interface that represents a software adapter.

    +
    +

    Handle to the software adapter's dll. HMODULE can be obtained with GetModuleHandle or LoadLibrary.

    +

    Address of a reference to an adapter (see ).

    + +

    A software adapter is a DLL that implements the entirety of a device driver interface, plus emulation, if necessary, of kernel-mode graphics components for Windows. Details on implementing a software adapter can be found in the Windows Vista Driver Development Kit. This is a very complex development task, and is not recommended for general readers.

    Calling this method will increment the module's reference count by one. The reference count can be decremented by calling FreeLibrary.

    The typical calling scenario is to call LoadLibrary, pass the handle to CreateSoftwareAdapter, then immediately call FreeLibrary on the DLL and forget the DLL's HMODULE. Since the software adapter calls FreeLibrary when it is destroyed, the lifetime of the DLL will now be owned by the adapter, and the application is free of any further consideration of its lifetime.

    +
    + + bb174536 + HRESULT IDXGIFactory::CreateSoftwareAdapter([In] HINSTANCE Module,[Out] IDXGIAdapter** ppAdapter) + IDXGIFactory::CreateSoftwareAdapter +
    + + +

    The interface implements methods for generating DXGI objects.

    +
    + +

    This interface is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    To create a factory, call the CreateDXGIFactory1 function.

    Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. + You can request the or interface from the Direct3D device and then use the method to locate + the factory. The following code shows how.

     * pDXGIDevice;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);  * pDXGIAdapter;	
    +            hr = pDXGIDevice->GetParent(__uuidof(), (void **)&pDXGIAdapter);  * pIDXGIFactory;	
    +            pDXGIAdapter->GetParent(__uuidof(), (void **)&pIDXGIFactory);	
    +            
    +
    + + ff471335 + IDXGIFactory1 + IDXGIFactory1 +
    + + + Default Constructor for Factory1. + + + + + Gets both adapters (video cards) with or without outputs. + + The index of the adapter to enumerate. + a reference to an interface at the position specified by the Adapter parameter + + This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop.When the EnumAdapters1 method succeeds and fills the ppAdapter parameter with the address of the reference to the adapter interface, EnumAdapters1 increments the adapter interface's reference count. When you finish using the adapter interface, call the Release method to decrement the reference count before you destroy the reference.EnumAdapters1 first returns the local adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. EnumAdapters1 next returns other adapters with outputs. EnumAdapters1 finally returns adapters without outputs. + + HRESULT IDXGIFactory1::EnumAdapters1([In] unsigned int Adapter,[Out] IDXGIAdapter1** ppAdapter) + + + + Return an array of available from this factory. + + HRESULT IDXGIFactory1::EnumAdapters1([In] unsigned int Adapter,[Out] IDXGIAdapter1** ppAdapter) + + + + Return the number of available adapters from this factory. + + The number of adapters + HRESULT IDXGIFactory1::EnumAdapters1([In] unsigned int Adapter,[Out] IDXGIAdapter1** ppAdapter) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Informs an application of the possible need to re-enumerate adapters.

    +
    + +

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    +
    + + ff471337 + IsCurrent + IsCurrent + BOOL IDXGIFactory1::IsCurrent() +
    + + +

    Enumerates both adapters (video cards) with or without outputs.

    +
    +

    The index of the adapter to enumerate.

    +

    The address of a reference to an interface at the position specified by the Adapter parameter. This parameter must not be null.

    +

    Returns if successful; otherwise, returns if the index is greater than or equal to the number of adapters in the local system, or if ppAdapter parameter is null.

    + +

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    When you create a factory, the factory enumerates the set of adapters that are available in the system. Therefore, if you change the adapters in a system, you must destroy and recreate the object. The number of adapters in a system changes when you add or remove a display card, or dock or undock a laptop.

    When the EnumAdapters1 method succeeds and fills the ppAdapter parameter with the address of the reference to the adapter interface, EnumAdapters1 increments the adapter interface's reference count. When you finish using the adapter interface, call the Release method to decrement the reference count before you destroy the reference.

    EnumAdapters1 first returns the adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero. EnumAdapters1 next returns other adapters with outputs. EnumAdapters1 finally returns adapters without outputs.

    +
    + + ff471336 + HRESULT IDXGIFactory1::EnumAdapters1([In] unsigned int Adapter,[Out] IDXGIAdapter1** ppAdapter) + IDXGIFactory1::EnumAdapters1 +
    + + +

    Informs an application of the possible need to re-enumerate adapters.

    +
    +

    , if a new adapter is becoming available or the current adapter is going away. TRUE, no adapter changes.

    IsCurrent returns to inform the calling application to re-enumerate adapters.

    + +

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    +
    + + ff471337 + BOOL IDXGIFactory1::IsCurrent() + IDXGIFactory1::IsCurrent +
    + + +

    The interface includes methods to create a newer version swap chain with more features than and to monitor stereoscopic 3D capabilities.

    +
    + +

    To create a Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 factory interface, pass into either the CreateDXGIFactory or CreateDXGIFactory1 function or call QueryInterface from a factory object that either CreateDXGIFactory or CreateDXGIFactory1 returns. +

    Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. + You can request the , , or interface from the Direct3D device and then use the method to locate + the factory. The following code shows how.

     * pDXGIDevice;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);  * pDXGIAdapter;	
    +            hr = pDXGIDevice->GetParent(__uuidof(), (void **)&pDXGIAdapter);  * pIDXGIFactory;	
    +            pDXGIAdapter->GetParent(__uuidof(), (void **)&pIDXGIFactory);	
    +            
    +
    + + hh404556 + IDXGIFactory2 + IDXGIFactory2 +
    + + + Initializes a new instance of class. + + True - to set the DXGI_CREATE_FACTORY_DEBUG flag. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Determines whether to use stereo mode.

    +
    + +

    We recommend that windowed applications call IsWindowedStereoEnabled before they attempt to use stereo. IsWindowedStereoEnabled returns TRUE if both of the following items are true:

    • All adapters in the computer have drivers that are capable of stereo. This only means that the driver is implemented to the Windows Display Driver Model (WDDM) for Windows?8 (WDDM 1.2). However, the adapter does not necessarily have to be able to scan out stereo.
    • The current desktop mode (desktop modes are mono) and system policy and hardware are configured so that the Desktop Window Manager (DWM) performs stereo composition on at least one adapter output.

    The creation of a windowed stereo swap chain succeeds if the first requirement is met. However, if the adapter can't scan out stereo, the output on that adapter is reduced to mono.

    The Direct3D 11.1 Simple Stereo 3D Sample shows how to add a stereoscopic 3D effect and how to respond to system stereo changes.

    +
    + + hh404561 + IsWindowedStereoEnabled + IsWindowedStereoEnabled + BOOL IDXGIFactory2::IsWindowedStereoEnabled() +
    + + +

    Determines whether to use stereo mode.

    +
    +

    Indicates whether to use stereo mode. TRUE indicates that you can use stereo mode; otherwise, .

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, IsWindowedStereoEnabled always returns because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    We recommend that windowed applications call IsWindowedStereoEnabled before they attempt to use stereo. IsWindowedStereoEnabled returns TRUE if both of the following items are true:

    • All adapters in the computer have drivers that are capable of stereo. This only means that the driver is implemented to the Windows Display Driver Model (WDDM) for Windows?8 (WDDM 1.2). However, the adapter does not necessarily have to be able to scan out stereo.
    • The current desktop mode (desktop modes are mono) and system policy and hardware are configured so that the Desktop Window Manager (DWM) performs stereo composition on at least one adapter output.

    The creation of a windowed stereo swap chain succeeds if the first requirement is met. However, if the adapter can't scan out stereo, the output on that adapter is reduced to mono.

    The Direct3D 11.1 Simple Stereo 3D Sample shows how to add a stereoscopic 3D effect and how to respond to system stereo changes.

    +
    + + hh404561 + BOOL IDXGIFactory2::IsWindowedStereoEnabled() + IDXGIFactory2::IsWindowedStereoEnabled +
    + + +

    Creates a swap chain that is associated with an handle to the output window for the swap chain.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    CreateSwapChainForHwnd returns:

    • if it successfully created a swap chain.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if the calling application provided invalid data, for example, if pDesc or ppSwapChain is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic that are defined by the type of device that you pass to pDevice.

    Platform Update for Windows?7:?? is not supported on Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed and causes CreateSwapChainForHwnd to return when called. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + + Note??Do not use this method in Windows Store apps. Instead, use .?

    If you specify the width, height, or both (Width and Height members of that pDesc points to) of the swap chain as zero, the runtime obtains the size from the output window that the hWnd parameter specifies. You can subsequently call the method to retrieve the assigned width or height value.

    Because you can associate only one flip presentation model swap chain at a time with an , the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see Deferred Destruction Issues with Flip Presentation Swap Chains.

    For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.

    +
    + + hh404557 + HRESULT IDXGIFactory2::CreateSwapChainForHwnd([In] IUnknown* pDevice,[In] HWND hWnd,[In] const DXGI_SWAP_CHAIN_DESC1* pDesc,[In, Optional] const DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pFullscreenDesc,[In, Optional] IDXGIOutput* pRestrictToOutput,[Out, Fast] IDXGISwapChain1** ppSwapChain) + IDXGIFactory2::CreateSwapChainForHwnd +
    + + +

    Creates a swap chain that is associated with the CoreWindow object for the output window for the swap chain.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    CreateSwapChainForCoreWindow returns:

    • if it successfully created a swap chain.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if the calling application provided invalid data, for example, if pDesc or ppSwapChain is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic that are defined by the type of device that you pass to pDevice.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, CreateSwapChainForCoreWindow fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + + Note??Use this method in Windows Store apps rather than .?

    If you specify the width, height, or both (Width and Height members of that pDesc points to) of the swap chain as zero, the runtime obtains the size from the output window that the pWindow parameter specifies. You can subsequently call the method to retrieve the assigned width or height value.

    Because you can associate only one flip presentation model swap chain (per layer) at a time with a CoreWindow, the Microsoft Direct3D?11 policy of deferring the destruction of objects can cause problems if you attempt to destroy a flip presentation model swap chain and replace it with another swap chain. For more info about this situation, see Deferred Destruction Issues with Flip Presentation Swap Chains.

    For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.

    +
    + + hh404559 + HRESULT IDXGIFactory2::CreateSwapChainForCoreWindow([In] IUnknown* pDevice,[In] IUnknown* pWindow,[In] const DXGI_SWAP_CHAIN_DESC1* pDesc,[In, Optional] IDXGIOutput* pRestrictToOutput,[Out, Fast] IDXGISwapChain1** ppSwapChain) + IDXGIFactory2::CreateSwapChainForCoreWindow +
    + + +

    Identifies the adapter on which a shared resource object was created.

    +
    +

    A handle to a shared resource object. The method returns this handle.

    +

    A reference to a variable that receives a locally unique identifier () value that identifies the adapter. is defined in Dxgi.h. An is a 64-bit value that is guaranteed to be unique only on the operating system on which it was generated. The uniqueness of an is guaranteed only until the operating system is restarted.

    +

    GetSharedResourceAdapterLuid returns:

    • if it identified the adapter.
    • if hResource is invalid.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, GetSharedResourceAdapterLuid fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    You cannot share resources across adapters. Therefore, you cannot open a shared resource on an adapter other than the adapter on which the resource was created. Call GetSharedResourceAdapterLuid before you open a shared resource to ensure that the resource was created on the appropriate adapter. To open a shared resource, call the or method.

    +
    + + hh404560 + HRESULT IDXGIFactory2::GetSharedResourceAdapterLuid([In] void* hResource,[Out] LUID* pLuid) + IDXGIFactory2::GetSharedResourceAdapterLuid +
    + + +

    Registers an application window to receive notification messages of changes of stereo status.

    +
    +

    The handle of the window to send a notification message to when stereo status change occurs.

    +

    Identifies the notification message to send.

    +

    A reference to a key value that an application can pass to the method to unregister the notification message that wMsg specifies.

    +

    RegisterStereoStatusWindow returns:

    • if it successfully registered the window.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, RegisterStereoStatusWindow fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + + hh404587 + HRESULT IDXGIFactory2::RegisterStereoStatusWindow([In] HWND WindowHandle,[In] unsigned int wMsg,[Out] unsigned int* pdwCookie) + IDXGIFactory2::RegisterStereoStatusWindow +
    + + +

    Registers to receive notification of changes in stereo status by using event signaling.

    +
    +

    A handle to the event object that the operating system sets when notification of stereo status change occurs. The CreateEvent or OpenEvent function returns this handle.

    +

    A reference to a key value that an application can pass to the method to unregister the notification event that hEvent specifies.

    +

    RegisterStereoStatusEvent returns:

    • if it successfully registered the event.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, RegisterStereoStatusEvent fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + + hh404584 + HRESULT IDXGIFactory2::RegisterStereoStatusEvent([In] void* hEvent,[Out] unsigned int* pdwCookie) + IDXGIFactory2::RegisterStereoStatusEvent +
    + + +

    Unregisters a window or an event to stop it from receiving notification when stereo status changes.

    +
    +

    A key value for the window or event to unregister. The or method returns this value.

    + +

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, UnregisterStereoStatus has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404593 + void IDXGIFactory2::UnregisterStereoStatus([In] unsigned int dwCookie) + IDXGIFactory2::UnregisterStereoStatus +
    + + +

    Registers an application window to receive notification messages of changes of occlusion status.

    +
    +

    The handle of the window to send a notification message to when occlusion status change occurs.

    +

    Identifies the notification message to send.

    +

    A reference to a key value that an application can pass to the method to unregister the notification message that wMsg specifies.

    +

    RegisterOcclusionStatusWindow returns:

    • if it successfully registered the window.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if WindowHandle is not a valid window handle or not the window handle that the current process owns.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, RegisterOcclusionStatusWindow fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    Apps choose the Windows message that Windows sends when occlusion status changes.

    +
    + + hh404581 + HRESULT IDXGIFactory2::RegisterOcclusionStatusWindow([In] HWND WindowHandle,[In] unsigned int wMsg,[Out] unsigned int* pdwCookie) + IDXGIFactory2::RegisterOcclusionStatusWindow +
    + + +

    Registers to receive notification of changes in occlusion status by using event signaling.

    +
    +

    A handle to the event object that the operating system sets when notification of occlusion status change occurs. The CreateEvent or OpenEvent function returns this handle.

    +

    A reference to a key value that an application can pass to the method to unregister the notification event that hEvent specifies.

    +

    RegisterOcclusionStatusEvent returns:

    • if the method successfully registered the event.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if hEvent is not a valid handle or not an event handle.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, RegisterOcclusionStatusEvent fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    If you call RegisterOcclusionStatusEvent multiple times with the same event handle, RegisterOcclusionStatusEvent fails with .

    If you call RegisterOcclusionStatusEvent multiple times with the different event handles, RegisterOcclusionStatusEvent properly registers the events.

    +
    + + hh404578 + HRESULT IDXGIFactory2::RegisterOcclusionStatusEvent([In] void* hEvent,[Out] unsigned int* pdwCookie) + IDXGIFactory2::RegisterOcclusionStatusEvent +
    + + +

    Unregisters a window or an event to stop it from receiving notification when occlusion status changes.

    +
    +

    A key value for the window or event to unregister. The or method returns this value.

    + +

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, UnregisterOcclusionStatus has no effect. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404590 + void IDXGIFactory2::UnregisterOcclusionStatus([In] unsigned int dwCookie) + IDXGIFactory2::UnregisterOcclusionStatus +
    + + +

    Creates a swap chain that you can use to send Direct3D content into the DirectComposition API or the Windows.UI.Xaml framework to compose in a window.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    CreateSwapChainForComposition returns:

    • if it successfully created a swap chain.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if the calling application provided invalid data, for example, if pDesc or ppSwapChain is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic that are defined by the type of device that you pass to pDevice.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, CreateSwapChainForComposition fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    You can use composition swap chains with either DirectComposition?s interface or XAML?s SwapChainBackgroundPanel class. For DirectComposition, you can call the method to set the swap chain as the content of a visual object, which then allows you to bind the swap chain to the visual tree. For XAML, the SwapChainBackgroundPanel class exposes a classic COM interface . You can use the method to bind to the XAML UI graph. For info about how to use composition swap chains with XAML?s SwapChainBackgroundPanel class, see DirectX and XAML interop.

    The , , , , and IDXGISwapChain::GetCoreWindow methods aren't valid on this type of swap chain. If you call any of these methods on this type of swap chain, they fail.

    For info about how to choose a format for the swap chain's back buffer, see Converting data for the color space.

    +
    + + hh404558 + HRESULT IDXGIFactory2::CreateSwapChainForComposition([In] IUnknown* pDevice,[In] const DXGI_SWAP_CHAIN_DESC1* pDesc,[In, Optional] IDXGIOutput* pRestrictToOutput,[Out, Fast] IDXGISwapChain1** ppSwapChain) + IDXGIFactory2::CreateSwapChainForComposition +
    + + +

    Enables creating Microsoft DirectX Graphics Infrastructure (DXGI) objects.

    +
    + + mt427785 + IDXGIFactory4 + IDXGIFactory4 +
    + + + Initializes a new instance of class. + + + + + Gets the default warp adapter. + + The warp adapter. + + + + Gets the adapter for the specified LUID. + + A unique value that identifies the adapter. + The adapter. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Outputs the for the specified .

    +
    + No documentation. + No documentation. + No documentation. +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR. See also Direct3D 12 Return Codes.

    + +

    For Direct3D 12, it's no longer possible to backtrack from a device to the that was used to create it. enables an app to retrieve information about the adapter where a D3D12 device was created. is designed to be paired with . For more information, see DXGI 1.4 Improvements.

    +
    + + mt427786 + HRESULT IDXGIFactory4::EnumAdapterByLuid([In] LUID AdapterLuid,[In] const GUID& riid,[Out] void** ppvAdapter) + IDXGIFactory4::EnumAdapterByLuid +
    + + +

    Provides an adapter which can be provided to to use the WARP renderer.

    +
    +

    The globally unique identifier () of the object referenced by the ppvAdapter parameter.

    +

    The address of an interface reference to the adapter. This parameter must not be null.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR. See also Direct3D 12 Return Codes.

    + +

    For more information, see DXGI 1.4 Improvements.

    +
    + + mt427787 + HRESULT IDXGIFactory4::EnumWarpAdapter([In] const GUID& riid,[Out] void** ppvAdapter) + IDXGIFactory4::EnumWarpAdapter +
    + + + Helper to use with . + + + + + Calculates the size of a in bytes. Can be 0 for compressed format (as they are less than 1 byte) + + The DXGI format. + size of in bytes + + + + Calculates the size of a in bits. + + The DXGI format. + size of in bits + + + + Returns true if the is valid. + + A format to validate + True if the is valid. + + + + Returns true if the is a compressed format. + + The format to check for compressed. + True if the is a compressed format + + + + Determines whether the specified is packed. + + The DXGI Format. + true if the specified is packed; otherwise, false. + + + + Determines whether the specified is video. + + The . + true if the specified is video; otherwise, false. + + + + Determines whether the specified is a SRGB format. + + The . + true if the specified is a SRGB format; otherwise, false. + + + + Determines whether the specified is typeless. + + The . + true if the specified is typeless; otherwise, false. + + + + Computes the scanline count (number of scanlines). + + The . + The height. + The scanline count. + + + + Static initializer to speed up size calculation (not sure the JIT is enough "smart" for this kind of thing). + + + + +

    Identifies the type of DXGI adapter.

    +
    + +

    The enumerated type is used by the Flags member of the or structure to identify the type of DXGI adapter.

    +
    + + ff471327 + DXGI_ADAPTER_FLAG + DXGI_ADAPTER_FLAG +
    + + +

    Specifies no flags.

    +
    + + ff471327 + DXGI_ADAPTER_FLAG_NONE + DXGI_ADAPTER_FLAG_NONE +
    + + +

    Value always set to 0. This flag is reserved.

    +
    + + ff471327 + DXGI_ADAPTER_FLAG_REMOTE + DXGI_ADAPTER_FLAG_REMOTE +
    + + +

    Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.

    Direct3D 11:??This enumeration value is supported starting with Windows?8.

    +
    + + ff471327 + DXGI_ADAPTER_FLAG_SOFTWARE + DXGI_ADAPTER_FLAG_SOFTWARE +
    + + +

    Identifies the type of DXGI adapter.

    +
    + +

    The enumerated type is used by the Flags member of the or structure to identify the type of DXGI adapter.

    +
    + + ff471327 + DXGI_ADAPTER_FLAG3 + DXGI_ADAPTER_FLAG3 +
    + + +

    Specifies no flags.

    +
    + + ff471327 + DXGI_ADAPTER_FLAG3_NONE + DXGI_ADAPTER_FLAG3_NONE +
    + + +

    Value always set to 0. This flag is reserved.

    +
    + + ff471327 + DXGI_ADAPTER_FLAG3_REMOTE + DXGI_ADAPTER_FLAG3_REMOTE +
    + + +

    Specifies a software adapter. For more info about this flag, see new info in Windows?8 about enumerating adapters.

    Direct3D 11:??This enumeration value is supported starting with Windows?8.

    +
    + + ff471327 + DXGI_ADAPTER_FLAG3_SOFTWARE + DXGI_ADAPTER_FLAG3_SOFTWARE +
    + + +

    Forces this enumeration to compile to 32 bits in size. Without this value, some compilers would allow this enumeration to compile to a size other than 32 bits. This value is not used.

    +
    + + ff471327 + DXGI_ADAPTER_FLAG3_ACG_COMPATIBLE + DXGI_ADAPTER_FLAG3_ACG_COMPATIBLE +
    + + +

    Identifies the alpha value, transparency behavior, of a surface.

    +
    + +

    For more information about alpha mode, see .

    +
    + + hh404496 + DXGI_ALPHA_MODE + DXGI_ALPHA_MODE +
    + + +

    Indicates that the transparency behavior is not specified.

    +
    + + hh404496 + DXGI_ALPHA_MODE_UNSPECIFIED + DXGI_ALPHA_MODE_UNSPECIFIED +
    + + +

    Indicates that the transparency behavior is premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.

    +
    + + hh404496 + DXGI_ALPHA_MODE_PREMULTIPLIED + DXGI_ALPHA_MODE_PREMULTIPLIED +
    + + +

    Indicates that the transparency behavior is not premultiplied. The alpha channel indicates the transparency of the color.

    +
    + + hh404496 + DXGI_ALPHA_MODE_STRAIGHT + DXGI_ALPHA_MODE_STRAIGHT +
    + + +

    Indicates to ignore the transparency behavior.

    +
    + + hh404496 + DXGI_ALPHA_MODE_IGNORE + DXGI_ALPHA_MODE_IGNORE +
    + + +

    Specifies color space types.

    +
    + +

    This enum is used within DXGI in the CheckColorSpaceSupport, SetColorSpace1 and CheckOverlayColorSpaceSupport methods. It is also referenced in D3D11 video methods such as , and D2D methods such as .

    The following color parameters are defined:

    +
    + + dn903661 + DXGI_COLOR_SPACE_TYPE + DXGI_COLOR_SPACE_TYPE +
    + + +
    PropertyValue
    ColorspaceRGB
    Range0-255
    Gamma2.2
    SitingImage
    PrimariesBT.709

    ?

    This is the standard definition for sRGB. Note that this is often implemented with a linear segment, but in that case the exponent is corrected to stay aligned with a gamma 2.2 curve. This is usually used with 8 bit and 10 bit color channels. +

    +
    + + dn903661 + DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 + DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709 +
    + + +
    PropertyValue
    ColorspaceRGB
    Range0-255
    Gamma1.0
    SitingImage
    PrimariesBT.709

    ?

    This is the standard definition for scRGB, and is usually used with 16 bit integer, 16 bit floating point, and 32 bit floating point channels. +

    +
    + + dn903661 + DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709 + DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709 +
    + + +
    PropertyValue
    ColorspaceRGB
    Range16-235
    Gamma2.2
    SitingImage
    PrimariesBT.709

    ?

    This is the standard definition for ITU-R Recommendation BT.709. Note that due to the inclusion of a linear segment, the transfer curve looks similar to a pure exponential gamma of 1.9. This is usually used with 8 bit and 10 bit color channels. +

    +
    + + dn903661 + DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P709 + DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P709 +
    + + +
    PropertyValue
    ColorspaceRGB
    Range16-235
    Gamma2.2
    SitingImage
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels. +

    +
    + + dn903661 + DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P2020 + DXGI_COLOR_SPACE_RGB_STUDIO_G22_NONE_P2020 +
    + + +

    Reserved.

    +
    + + dn903661 + DXGI_COLOR_SPACE_RESERVED + DXGI_COLOR_SPACE_RESERVED +
    + + +
    PropertyValue
    ColorspaceYCbCr
    Range0-255
    Gamma2.2
    SitingImage
    PrimariesBT.709
    TransferBT.601

    ?

    This definition is commonly used for JPG, and is usually used with 8, 10, 12, or 16 bit color channels. +

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601 + DXGI_COLOR_SPACE_YCBCR_FULL_G22_NONE_P709_X601 +
    + + +
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2.2
    SitingVideo
    PrimariesBT.601

    ?

    This definition is commonly used for MPEG2, and is usually used with 8, 10, 12, or 16 bit color channels. +

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P601 +
    + + +
    PropertyValue
    ColorspaceYCbCr
    Range0-255
    Gamma2.2
    SitingVideo
    PrimariesBT.601

    ?

    This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. +

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601 + DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P601 +
    + + +
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2.2
    SitingVideo
    PrimariesBT.709

    ?

    This definition is commonly used for H.264 and HEVC, and is usually used with 8, 10, 12, or 16 bit color channels. +

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P709 +
    + + +
    PropertyValue
    ColorspaceYCbCr
    Range0-255
    Gamma2.2
    SitingVideo
    PrimariesBT.709

    ?

    This is sometimes used for H.264 camera capture, and is usually used with 8, 10, 12, or 16 bit color channels. +

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709 + DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P709 +
    + + +
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2.2
    SitingVideo
    PrimariesBT.2020

    ?

    This definition may be used by HEVC, and is usually used with 10, 12, or 16 bit color channels. +

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_LEFT_P2020 +
    + + +
    PropertyValue
    ColorspaceYCbCr
    Range0-255
    Gamma2.2
    SitingVideo
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020 + DXGI_COLOR_SPACE_YCBCR_FULL_G22_LEFT_P2020 +
    + + +
    PropertyValue
    ColorspaceRGB
    Range0-255
    Gamma2084
    SitingImage
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    +
    + + dn903661 + DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 + DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020 +
    + + +
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2084
    SitingVideo
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_LEFT_P2020 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_LEFT_P2020 +
    + + +
    PropertyValue
    ColorspaceRGB
    Range16-235
    Gamma2084
    SitingImage
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    +
    + + dn903661 + DXGI_COLOR_SPACE_RGB_STUDIO_G2084_NONE_P2020 + DXGI_COLOR_SPACE_RGB_STUDIO_G2084_NONE_P2020 +
    + + +
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2.2
    SitingVideo
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_TOPLEFT_P2020 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G22_TOPLEFT_P2020 +
    + + +
    PropertyValue
    ColorspaceYCbCr
    Range16-235
    Gamma2084
    SitingVideo
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_TOPLEFT_P2020 + DXGI_COLOR_SPACE_YCBCR_STUDIO_G2084_TOPLEFT_P2020 +
    + + +
    PropertyValue
    ColorspaceRGB
    Range0-255
    Gamma2.2
    SitingImage
    PrimariesBT.2020

    ?

    This is usually used with 10, 12, or 16 bit color channels.

    +
    + + dn903661 + DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P2020 + DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P2020 +
    + + +

    A custom color definition is used.

    +
    + + dn903661 + DXGI_COLOR_SPACE_YCBCR_STUDIO_GHLG_TOPLEFT_P2020 + DXGI_COLOR_SPACE_YCBCR_STUDIO_GHLG_TOPLEFT_P2020 +
    + + + No documentation. + + + dn903661 + DXGI_COLOR_SPACE_YCBCR_FULL_GHLG_TOPLEFT_P2020 + DXGI_COLOR_SPACE_YCBCR_FULL_GHLG_TOPLEFT_P2020 + + + +

    A custom color definition is used.

    +
    + + dn903661 + DXGI_COLOR_SPACE_CUSTOM + DXGI_COLOR_SPACE_CUSTOM +
    + + +

    Identifies the granularity at which the graphics processing unit (GPU) can be preempted from performing its current compute task.

    +
    + +

    You call the method to retrieve the granularity level at which the GPU can be preempted from performing its current compute task. The operating system specifies the compute granularity level in the ComputePreemptionGranularity member of the structure.

    +
    + + hh404499 + DXGI_COMPUTE_PREEMPTION_GRANULARITY + DXGI_COMPUTE_PREEMPTION_GRANULARITY +
    + + +

    Indicates the preemption granularity as a compute packet.

    +
    + + hh404499 + DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY + DXGI_COMPUTE_PREEMPTION_DMA_BUFFER_BOUNDARY +
    + + +

    Indicates the preemption granularity as a dispatch (for example, a call to the method). A dispatch is a part of a compute packet.

    +
    + + hh404499 + DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY + DXGI_COMPUTE_PREEMPTION_DISPATCH_BOUNDARY +
    + + +

    Indicates the preemption granularity as a thread group. A thread group is a part of a dispatch.

    +
    + + hh404499 + DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY + DXGI_COMPUTE_PREEMPTION_THREAD_GROUP_BOUNDARY +
    + + +

    Indicates the preemption granularity as a thread in a thread group. A thread is a part of a thread group.

    +
    + + hh404499 + DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY + DXGI_COMPUTE_PREEMPTION_THREAD_BOUNDARY +
    + + +

    Indicates the preemption granularity as a compute instruction in a thread.

    +
    + + hh404499 + DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY + DXGI_COMPUTE_PREEMPTION_INSTRUCTION_BOUNDARY +
    + + + No documentation. + + + DXGI_ENUM_MODES_FLAGS + DXGI_ENUM_MODES_FLAGS + + + + No documentation. + + + DXGI_ENUM_MODES_INTERLACED + DXGI_ENUM_MODES_INTERLACED + + + + No documentation. + + + DXGI_ENUM_MODES_SCALING + DXGI_ENUM_MODES_SCALING + + + + No documentation. + + + DXGI_ENUM_MODES_STEREO + DXGI_ENUM_MODES_STEREO + + + + No documentation. + + + DXGI_ENUM_MODES_DISABLED_STEREO + DXGI_ENUM_MODES_DISABLED_STEREO + + + +

    Flags that indicate how the back buffers should be rotated to fit the physical rotation of a monitor.

    +
    + + bb173065 + DXGI_MODE_ROTATION + DXGI_MODE_ROTATION +
    + + +

    Unspecified rotation.

    +
    + + bb173065 + DXGI_MODE_ROTATION_UNSPECIFIED + DXGI_MODE_ROTATION_UNSPECIFIED +
    + + +

    Specifies no rotation.

    +
    + + bb173065 + DXGI_MODE_ROTATION_IDENTITY + DXGI_MODE_ROTATION_IDENTITY +
    + + +

    Specifies 90 degrees of rotation.

    +
    + + bb173065 + DXGI_MODE_ROTATION_ROTATE90 + DXGI_MODE_ROTATION_ROTATE90 +
    + + +

    Specifies 180 degrees of rotation.

    +
    + + bb173065 + DXGI_MODE_ROTATION_ROTATE180 + DXGI_MODE_ROTATION_ROTATE180 +
    + + +

    Specifies 270 degrees of rotation.

    +
    + + bb173065 + DXGI_MODE_ROTATION_ROTATE270 + DXGI_MODE_ROTATION_ROTATE270 +
    + + +

    Flags indicating how an image is stretched to fit a given monitor's resolution.

    +
    + +

    Selecting the CENTERED or STRETCHED modes can result in a mode change even if you specify the native resolution of the display in the . If you know the native resolution of the display and want to make sure that you do not initiate a mode change when transitioning a swap chain to full screen (either via ALT+ENTER or ), you should use UNSPECIFIED.

    This enum is used by the and structures.

    +
    + + bb173066 + DXGI_MODE_SCALING + DXGI_MODE_SCALING +
    + + +

    Unspecified scaling.

    +
    + + bb173066 + DXGI_MODE_SCALING_UNSPECIFIED + DXGI_MODE_SCALING_UNSPECIFIED +
    + + +

    Specifies no scaling. The image is centered on the display. This flag is typically used for a fixed-dot-pitch display (such as an LED display).

    +
    + + bb173066 + DXGI_MODE_SCALING_CENTERED + DXGI_MODE_SCALING_CENTERED +
    + + +

    Specifies stretched scaling.

    +
    + + bb173066 + DXGI_MODE_SCALING_STRETCHED + DXGI_MODE_SCALING_STRETCHED +
    + + +

    Flags indicating the method the raster uses to create an image on a surface.

    +
    + +

    This enum is used by the and structures.

    +
    + + bb173067 + DXGI_MODE_SCANLINE_ORDER + DXGI_MODE_SCANLINE_ORDER +
    + + +

    Scanline order is unspecified.

    +
    + + bb173067 + DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED + DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED +
    + + +

    The image is created from the first scanline to the last without skipping any.

    +
    + + bb173067 + DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE + DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE +
    + + +

    The image is created beginning with the upper field.

    +
    + + bb173067 + DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST + DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST +
    + + +

    The image is created beginning with the lower field.

    +
    + + bb173067 + DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST + DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST +
    + + +

    Status codes that can be returned by DXGI functions.

    +

    + +

    The value for each value is determined from this macro that is defined in DXGItype.h:

     #define _FACDXGI    0x87a	
    +            #define MAKE_DXGI_STATUS(code)  MAKE_HRESULT(0, _FACDXGI, code)	
    +            

    For example, is defined as 0x087A0001:

     #define                     MAKE_DXGI_STATUS(1)	
    +            
    +
    + + cc308061 + DXGI_STATUS + DXGI_STATUS +
    + + + No documentation. + + + cc308061 + DXGI_STATUS_OCCLUDED + DXGI_STATUS_OCCLUDED + + + + No documentation. + + + cc308061 + DXGI_STATUS_CLIPPED + DXGI_STATUS_CLIPPED + + + + No documentation. + + + cc308061 + DXGI_STATUS_NO_REDIRECTION + DXGI_STATUS_NO_REDIRECTION + + + + No documentation. + + + cc308061 + DXGI_STATUS_NO_DESKTOP_ACCESS + DXGI_STATUS_NO_DESKTOP_ACCESS + + + + No documentation. + + + cc308061 + DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE + DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE + + + + No documentation. + + + cc308061 + DXGI_STATUS_MODE_CHANGED + DXGI_STATUS_MODE_CHANGED + + + + No documentation. + + + cc308061 + DXGI_STATUS_MODE_CHANGE_IN_PROGRESS + DXGI_STATUS_MODE_CHANGE_IN_PROGRESS + + + + No documentation. + + + cc308061 + DXGI_STATUS_UNOCCLUDED + DXGI_STATUS_UNOCCLUDED + + + + No documentation. + + + cc308061 + DXGI_STATUS_DDA_WAS_STILL_DRAWING + DXGI_STATUS_DDA_WAS_STILL_DRAWING + + + + No documentation. + + + cc308061 + DXGI_STATUS_PRESENT_REQUIRED + DXGI_STATUS_PRESENT_REQUIRED + + + +

    Specifies a range of hardware features, to be used when checking for feature support.

    +
    + +

    This enum is used by the CheckFeatureSupport method.

    +
    + + mt722565 + DXGI_FEATURE + DXGI_FEATURE +
    + + +

    The display supports tearing, a requirement of variable refresh rate displays.

    +
    + + mt722565 + DXGI_FEATURE_PRESENT_ALLOW_TEARING + DXGI_FEATURE_PRESENT_ALLOW_TEARING +
    + + +

    Resource data formats, including fully-typed and typeless formats. A list of modifiers at the bottom of the page more fully describes each format type.

    +
    + + bb173059 + DXGI_FORMAT + DXGI_FORMAT +
    + + +

    The format is not known.

    +
    + + bb173059 + DXGI_FORMAT_UNKNOWN + DXGI_FORMAT_UNKNOWN +
    + + +

    A four-component, 128-bit typeless format that supports 32 bits per channel including alpha. ?

    +
    + + bb173059 + DXGI_FORMAT_R32G32B32A32_TYPELESS + DXGI_FORMAT_R32G32B32A32_TYPELESS +
    + + +

    A four-component, 128-bit floating-point format that supports 32 bits per channel including alpha. 1,5,8

    +
    + + bb173059 + DXGI_FORMAT_R32G32B32A32_FLOAT + DXGI_FORMAT_R32G32B32A32_FLOAT +
    + + +

    A four-component, 128-bit unsigned-integer format that supports 32 bits per channel including alpha. ?

    +
    + + bb173059 + DXGI_FORMAT_R32G32B32A32_UINT + DXGI_FORMAT_R32G32B32A32_UINT +
    + + +

    A four-component, 128-bit signed-integer format that supports 32 bits per channel including alpha. ?

    +
    + + bb173059 + DXGI_FORMAT_R32G32B32A32_SINT + DXGI_FORMAT_R32G32B32A32_SINT +
    + + +

    A three-component, 96-bit typeless format that supports 32 bits per color channel.

    +
    + + bb173059 + DXGI_FORMAT_R32G32B32_TYPELESS + DXGI_FORMAT_R32G32B32_TYPELESS +
    + + +

    A three-component, 96-bit floating-point format that supports 32 bits per color channel.5,8

    +
    + + bb173059 + DXGI_FORMAT_R32G32B32_FLOAT + DXGI_FORMAT_R32G32B32_FLOAT +
    + + +

    A three-component, 96-bit unsigned-integer format that supports 32 bits per color channel.

    +
    + + bb173059 + DXGI_FORMAT_R32G32B32_UINT + DXGI_FORMAT_R32G32B32_UINT +
    + + +

    A three-component, 96-bit signed-integer format that supports 32 bits per color channel.

    +
    + + bb173059 + DXGI_FORMAT_R32G32B32_SINT + DXGI_FORMAT_R32G32B32_SINT +
    + + +

    A four-component, 64-bit typeless format that supports 16 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R16G16B16A16_TYPELESS + DXGI_FORMAT_R16G16B16A16_TYPELESS +
    + + +

    A four-component, 64-bit floating-point format that supports 16 bits per channel including alpha.5,7

    +
    + + bb173059 + DXGI_FORMAT_R16G16B16A16_FLOAT + DXGI_FORMAT_R16G16B16A16_FLOAT +
    + + +

    A four-component, 64-bit unsigned-normalized-integer format that supports 16 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R16G16B16A16_UNORM + DXGI_FORMAT_R16G16B16A16_UNORM +
    + + +

    A four-component, 64-bit unsigned-integer format that supports 16 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R16G16B16A16_UINT + DXGI_FORMAT_R16G16B16A16_UINT +
    + + +

    A four-component, 64-bit signed-normalized-integer format that supports 16 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R16G16B16A16_SNORM + DXGI_FORMAT_R16G16B16A16_SNORM +
    + + +

    A four-component, 64-bit signed-integer format that supports 16 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R16G16B16A16_SINT + DXGI_FORMAT_R16G16B16A16_SINT +
    + + +

    A two-component, 64-bit typeless format that supports 32 bits for the red channel and 32 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R32G32_TYPELESS + DXGI_FORMAT_R32G32_TYPELESS +
    + + +

    A two-component, 64-bit floating-point format that supports 32 bits for the red channel and 32 bits for the green channel.5,8

    +
    + + bb173059 + DXGI_FORMAT_R32G32_FLOAT + DXGI_FORMAT_R32G32_FLOAT +
    + + +

    A two-component, 64-bit unsigned-integer format that supports 32 bits for the red channel and 32 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R32G32_UINT + DXGI_FORMAT_R32G32_UINT +
    + + +

    A two-component, 64-bit signed-integer format that supports 32 bits for the red channel and 32 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R32G32_SINT + DXGI_FORMAT_R32G32_SINT +
    + + +

    A two-component, 64-bit typeless format that supports 32 bits for the red channel, 8 bits for the green channel, and 24 bits are unused.

    +
    + + bb173059 + DXGI_FORMAT_R32G8X24_TYPELESS + DXGI_FORMAT_R32G8X24_TYPELESS +
    + + +

    A 32-bit floating-point component, and two unsigned-integer components (with an additional 32 bits). This format supports 32-bit depth, 8-bit stencil, and 24 bits are unused.?

    +
    + + bb173059 + DXGI_FORMAT_D32_FLOAT_S8X24_UINT + DXGI_FORMAT_D32_FLOAT_S8X24_UINT +
    + + +

    A 32-bit floating-point component, and two typeless components (with an additional 32 bits). This format supports 32-bit red channel, 8 bits are unused, and 24 bits are unused.?

    +
    + + bb173059 + DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS + DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS +
    + + +

    A 32-bit typeless component, and two unsigned-integer components (with an additional 32 bits). This format has 32 bits unused, 8 bits for green channel, and 24 bits are unused.

    +
    + + bb173059 + DXGI_FORMAT_X32_TYPELESS_G8X24_UINT + DXGI_FORMAT_X32_TYPELESS_G8X24_UINT +
    + + +

    A four-component, 32-bit typeless format that supports 10 bits for each color and 2 bits for alpha.

    +
    + + bb173059 + DXGI_FORMAT_R10G10B10A2_TYPELESS + DXGI_FORMAT_R10G10B10A2_TYPELESS +
    + + +

    A four-component, 32-bit unsigned-normalized-integer format that supports 10 bits for each color and 2 bits for alpha.

    +
    + + bb173059 + DXGI_FORMAT_R10G10B10A2_UNORM + DXGI_FORMAT_R10G10B10A2_UNORM +
    + + +

    A four-component, 32-bit unsigned-integer format that supports 10 bits for each color and 2 bits for alpha.

    +
    + + bb173059 + DXGI_FORMAT_R10G10B10A2_UINT + DXGI_FORMAT_R10G10B10A2_UINT +
    + + +

    Three partial-precision floating-point numbers encoded into a single 32-bit value (a variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There are no sign bits, and there is a 5-bit biased (15) exponent for each channel, 6-bit mantissa for R and G, and a 5-bit mantissa for B, as shown in the following illustration.5,7

    +
    + + bb173059 + DXGI_FORMAT_R11G11B10_FLOAT + DXGI_FORMAT_R11G11B10_FLOAT +
    + + +

    A four-component, 32-bit typeless format that supports 8 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R8G8B8A8_TYPELESS + DXGI_FORMAT_R8G8B8A8_TYPELESS +
    + + +

    A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R8G8B8A8_UNORM + DXGI_FORMAT_R8G8B8A8_UNORM +
    + + +

    A four-component, 32-bit unsigned-normalized integer sRGB format that supports 8 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R8G8B8A8_UNORM_SRGB + DXGI_FORMAT_R8G8B8A8_UNORM_SRGB +
    + + +

    A four-component, 32-bit unsigned-integer format that supports 8 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R8G8B8A8_UINT + DXGI_FORMAT_R8G8B8A8_UINT +
    + + +

    A four-component, 32-bit signed-normalized-integer format that supports 8 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R8G8B8A8_SNORM + DXGI_FORMAT_R8G8B8A8_SNORM +
    + + +

    A four-component, 32-bit signed-integer format that supports 8 bits per channel including alpha.

    +
    + + bb173059 + DXGI_FORMAT_R8G8B8A8_SINT + DXGI_FORMAT_R8G8B8A8_SINT +
    + + +

    A two-component, 32-bit typeless format that supports 16 bits for the red channel and 16 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R16G16_TYPELESS + DXGI_FORMAT_R16G16_TYPELESS +
    + + +

    A two-component, 32-bit floating-point format that supports 16 bits for the red channel and 16 bits for the green channel.5,7

    +
    + + bb173059 + DXGI_FORMAT_R16G16_FLOAT + DXGI_FORMAT_R16G16_FLOAT +
    + + +

    A two-component, 32-bit unsigned-normalized-integer format that supports 16 bits each for the green and red channels.

    +
    + + bb173059 + DXGI_FORMAT_R16G16_UNORM + DXGI_FORMAT_R16G16_UNORM +
    + + +

    A two-component, 32-bit unsigned-integer format that supports 16 bits for the red channel and 16 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R16G16_UINT + DXGI_FORMAT_R16G16_UINT +
    + + +

    A two-component, 32-bit signed-normalized-integer format that supports 16 bits for the red channel and 16 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R16G16_SNORM + DXGI_FORMAT_R16G16_SNORM +
    + + +

    A two-component, 32-bit signed-integer format that supports 16 bits for the red channel and 16 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R16G16_SINT + DXGI_FORMAT_R16G16_SINT +
    + + +

    A single-component, 32-bit typeless format that supports 32 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R32_TYPELESS + DXGI_FORMAT_R32_TYPELESS +
    + + +

    A single-component, 32-bit floating-point format that supports 32 bits for depth.5,8

    +
    + + bb173059 + DXGI_FORMAT_D32_FLOAT + DXGI_FORMAT_D32_FLOAT +
    + + +

    A single-component, 32-bit floating-point format that supports 32 bits for the red channel.5,8

    +
    + + bb173059 + DXGI_FORMAT_R32_FLOAT + DXGI_FORMAT_R32_FLOAT +
    + + +

    A single-component, 32-bit unsigned-integer format that supports 32 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R32_UINT + DXGI_FORMAT_R32_UINT +
    + + +

    A single-component, 32-bit signed-integer format that supports 32 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R32_SINT + DXGI_FORMAT_R32_SINT +
    + + +

    A two-component, 32-bit typeless format that supports 24 bits for the red channel and 8 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R24G8_TYPELESS + DXGI_FORMAT_R24G8_TYPELESS +
    + + +

    A 32-bit z-buffer format that supports 24 bits for depth and 8 bits for stencil.

    +
    + + bb173059 + DXGI_FORMAT_D24_UNORM_S8_UINT + DXGI_FORMAT_D24_UNORM_S8_UINT +
    + + +

    A 32-bit format, that contains a 24 bit, single-component, unsigned-normalized integer, with an additional typeless 8 bits. This format has 24 bits red channel and 8 bits unused.

    +
    + + bb173059 + DXGI_FORMAT_R24_UNORM_X8_TYPELESS + DXGI_FORMAT_R24_UNORM_X8_TYPELESS +
    + + +

    A 32-bit format, that contains a 24 bit, single-component, typeless format, with an additional 8 bit unsigned integer component. This format has 24 bits unused and 8 bits green channel.

    +
    + + bb173059 + DXGI_FORMAT_X24_TYPELESS_G8_UINT + DXGI_FORMAT_X24_TYPELESS_G8_UINT +
    + + +

    A two-component, 16-bit typeless format that supports 8 bits for the red channel and 8 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R8G8_TYPELESS + DXGI_FORMAT_R8G8_TYPELESS +
    + + +

    A two-component, 16-bit unsigned-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R8G8_UNORM + DXGI_FORMAT_R8G8_UNORM +
    + + +

    A two-component, 16-bit unsigned-integer format that supports 8 bits for the red channel and 8 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R8G8_UINT + DXGI_FORMAT_R8G8_UINT +
    + + +

    A two-component, 16-bit signed-normalized-integer format that supports 8 bits for the red channel and 8 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R8G8_SNORM + DXGI_FORMAT_R8G8_SNORM +
    + + +

    A two-component, 16-bit signed-integer format that supports 8 bits for the red channel and 8 bits for the green channel.

    +
    + + bb173059 + DXGI_FORMAT_R8G8_SINT + DXGI_FORMAT_R8G8_SINT +
    + + +

    A single-component, 16-bit typeless format that supports 16 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R16_TYPELESS + DXGI_FORMAT_R16_TYPELESS +
    + + +

    A single-component, 16-bit floating-point format that supports 16 bits for the red channel.5,7

    +
    + + bb173059 + DXGI_FORMAT_R16_FLOAT + DXGI_FORMAT_R16_FLOAT +
    + + +

    A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for depth.

    +
    + + bb173059 + DXGI_FORMAT_D16_UNORM + DXGI_FORMAT_D16_UNORM +
    + + +

    A single-component, 16-bit unsigned-normalized-integer format that supports 16 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R16_UNORM + DXGI_FORMAT_R16_UNORM +
    + + +

    A single-component, 16-bit unsigned-integer format that supports 16 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R16_UINT + DXGI_FORMAT_R16_UINT +
    + + +

    A single-component, 16-bit signed-normalized-integer format that supports 16 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R16_SNORM + DXGI_FORMAT_R16_SNORM +
    + + +

    A single-component, 16-bit signed-integer format that supports 16 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R16_SINT + DXGI_FORMAT_R16_SINT +
    + + +

    A single-component, 8-bit typeless format that supports 8 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R8_TYPELESS + DXGI_FORMAT_R8_TYPELESS +
    + + +

    A single-component, 8-bit unsigned-normalized-integer format that supports 8 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R8_UNORM + DXGI_FORMAT_R8_UNORM +
    + + +

    A single-component, 8-bit unsigned-integer format that supports 8 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R8_UINT + DXGI_FORMAT_R8_UINT +
    + + +

    A single-component, 8-bit signed-normalized-integer format that supports 8 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R8_SNORM + DXGI_FORMAT_R8_SNORM +
    + + +

    A single-component, 8-bit signed-integer format that supports 8 bits for the red channel.

    +
    + + bb173059 + DXGI_FORMAT_R8_SINT + DXGI_FORMAT_R8_SINT +
    + + +

    A single-component, 8-bit unsigned-normalized-integer format for alpha only.

    +
    + + bb173059 + DXGI_FORMAT_A8_UNORM + DXGI_FORMAT_A8_UNORM +
    + + +

    A single-component, 1-bit unsigned-normalized integer format that supports 1 bit for the red channel. ?.

    +
    + + bb173059 + DXGI_FORMAT_R1_UNORM + DXGI_FORMAT_R1_UNORM +
    + + +

    Three partial-precision floating-point numbers encoded into a single 32-bit value all sharing the same 5-bit exponent (variant of s10e5, which is sign bit, 10-bit mantissa, and 5-bit biased (15) exponent). There is no sign bit, and there is a shared 5-bit biased (15) exponent and a 9-bit mantissa for each channel, as shown in the following illustration. 2,6,7.

    +
    + + bb173059 + DXGI_FORMAT_R9G9B9E5_SHAREDEXP + DXGI_FORMAT_R9G9B9E5_SHAREDEXP +
    + + +

    A four-component, 32-bit unsigned-normalized-integer format. This packed RGB format is analogous to the UYVY format. Each 32-bit block describes a pair of pixels: (R8, G8, B8) and (R8, G8, B8) where the R8/B8 values are repeated, and the G8 values are unique to each pixel. ?

    Width must be even.

    +
    + + bb173059 + DXGI_FORMAT_R8G8_B8G8_UNORM + DXGI_FORMAT_R8G8_B8G8_UNORM +
    + + +

    A four-component, 32-bit unsigned-normalized-integer format. This packed RGB format is analogous to the YUY2 format. Each 32-bit block describes a pair of pixels: (R8, G8, B8) and (R8, G8, B8) where the R8/B8 values are repeated, and the G8 values are unique to each pixel. ?

    Width must be even.

    +
    + + bb173059 + DXGI_FORMAT_G8R8_G8B8_UNORM + DXGI_FORMAT_G8R8_G8B8_UNORM +
    + + +

    Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC1_TYPELESS + DXGI_FORMAT_BC1_TYPELESS +
    + + +

    Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC1_UNORM + DXGI_FORMAT_BC1_UNORM +
    + + +

    Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC1_UNORM_SRGB + DXGI_FORMAT_BC1_UNORM_SRGB +
    + + +

    Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC2_TYPELESS + DXGI_FORMAT_BC2_TYPELESS +
    + + +

    Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC2_UNORM + DXGI_FORMAT_BC2_UNORM +
    + + +

    Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC2_UNORM_SRGB + DXGI_FORMAT_BC2_UNORM_SRGB +
    + + +

    Four-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC3_TYPELESS + DXGI_FORMAT_BC3_TYPELESS +
    + + +

    Four-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC3_UNORM + DXGI_FORMAT_BC3_UNORM +
    + + +

    Four-component block-compression format for sRGB data. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC3_UNORM_SRGB + DXGI_FORMAT_BC3_UNORM_SRGB +
    + + +

    One-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC4_TYPELESS + DXGI_FORMAT_BC4_TYPELESS +
    + + +

    One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC4_UNORM + DXGI_FORMAT_BC4_UNORM +
    + + +

    One-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC4_SNORM + DXGI_FORMAT_BC4_SNORM +
    + + +

    Two-component typeless block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC5_TYPELESS + DXGI_FORMAT_BC5_TYPELESS +
    + + +

    Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC5_UNORM + DXGI_FORMAT_BC5_UNORM +
    + + +

    Two-component block-compression format. For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC5_SNORM + DXGI_FORMAT_BC5_SNORM +
    + + +

    A three-component, 16-bit unsigned-normalized-integer format that supports 5 bits for blue, 6 bits for green, and 5 bits for red.

    Direct3D 10 through Direct3D 11:??This value is defined for DXGI. However, Direct3D 10, 10.1, or 11 devices do not support this format.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_B5G6R5_UNORM + DXGI_FORMAT_B5G6R5_UNORM +
    + + +

    A four-component, 16-bit unsigned-normalized-integer format that supports 5 bits for each color channel and 1-bit alpha.

    Direct3D 10 through Direct3D 11:??This value is defined for DXGI. However, Direct3D 10, 10.1, or 11 devices do not support this format.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_B5G5R5A1_UNORM + DXGI_FORMAT_B5G5R5A1_UNORM +
    + + +

    A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8-bit alpha.

    +
    + + bb173059 + DXGI_FORMAT_B8G8R8A8_UNORM + DXGI_FORMAT_B8G8R8A8_UNORM +
    + + +

    A four-component, 32-bit unsigned-normalized-integer format that supports 8 bits for each color channel and 8 bits unused.

    +
    + + bb173059 + DXGI_FORMAT_B8G8R8X8_UNORM + DXGI_FORMAT_B8G8R8X8_UNORM +
    + + +

    A four-component, 32-bit 2.8-biased fixed-point format that supports 10 bits for each color channel and 2-bit alpha.

    +
    + + bb173059 + DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM + DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM +
    + + +

    A four-component, 32-bit typeless format that supports 8 bits for each channel including alpha. ?

    +
    + + bb173059 + DXGI_FORMAT_B8G8R8A8_TYPELESS + DXGI_FORMAT_B8G8R8A8_TYPELESS +
    + + +

    A four-component, 32-bit unsigned-normalized standard RGB format that supports 8 bits for each channel including alpha. ?

    +
    + + bb173059 + DXGI_FORMAT_B8G8R8A8_UNORM_SRGB + DXGI_FORMAT_B8G8R8A8_UNORM_SRGB +
    + + +

    A four-component, 32-bit typeless format that supports 8 bits for each color channel, and 8 bits are unused. ?

    +
    + + bb173059 + DXGI_FORMAT_B8G8R8X8_TYPELESS + DXGI_FORMAT_B8G8R8X8_TYPELESS +
    + + +

    A four-component, 32-bit unsigned-normalized standard RGB format that supports 8 bits for each color channel, and 8 bits are unused. ?

    +
    + + bb173059 + DXGI_FORMAT_B8G8R8X8_UNORM_SRGB + DXGI_FORMAT_B8G8R8X8_UNORM_SRGB +
    + + +

    A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC6H_TYPELESS + DXGI_FORMAT_BC6H_TYPELESS +
    + + +

    A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?

    +
    + + bb173059 + DXGI_FORMAT_BC6H_UF16 + DXGI_FORMAT_BC6H_UF16 +
    + + +

    A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.?

    +
    + + bb173059 + DXGI_FORMAT_BC6H_SF16 + DXGI_FORMAT_BC6H_SF16 +
    + + +

    A typeless block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC7_TYPELESS + DXGI_FORMAT_BC7_TYPELESS +
    + + +

    A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC7_UNORM + DXGI_FORMAT_BC7_UNORM +
    + + +

    A block-compression format. ? For information about block-compression formats, see Texture Block Compression in Direct3D 11.

    +
    + + bb173059 + DXGI_FORMAT_BC7_UNORM_SRGB + DXGI_FORMAT_BC7_UNORM_SRGB +
    + + +

    Most common YUV 4:4:4 video resource format. Valid view formats for this video resource format are and . For UAVs, an additional valid view format is . By using for UAVs, you can both read and write as opposed to just write for and . Supported view types are SRV, RTV, and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is V->R8, + U->G8, + Y->B8, + and A->A8.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_AYUV + DXGI_FORMAT_AYUV +
    + + +

    10-bit per channel packed YUV 4:4:4 video resource format. Valid view formats for this video resource format are and . For UAVs, an additional valid view format is . By using for UAVs, you can both read and write as opposed to just write for and . Supported view types are SRV and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U->R10, + Y->G10, + V->B10, + and A->A2.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_Y410 + DXGI_FORMAT_Y410 +
    + + +

    16-bit per channel packed YUV 4:4:4 video resource format. Valid view formats for this video resource format are and . Supported view types are SRV and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is U->R16, + Y->G16, + V->B16, + and A->A16.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_Y416 + DXGI_FORMAT_Y416 +
    + + +

    Most common YUV 4:2:0 video resource format. Valid luminance data view formats for this video resource format are and . Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are and . Supported view types are SRV, RTV, and UAV. For luminance data view, the mapping to the view channel is Y->R8. For chrominance data view, the mapping to the view channel is U->R8 and + V->G8.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the UV plane.

    An app using the YUY 4:2:0 formats must map the luma (Y) plane separately from the chroma (UV) planes. Developers do this by calling twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the UV planes (together) maps only the U and V planes as a single resource view.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_NV12 + DXGI_FORMAT_NV12 +
    + + +

    10-bit per channel planar YUV 4:2:0 video resource format. Valid luminance data view formats for this video resource format are and . The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, is no different than . Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are and . For UAVs, an additional valid chrominance data view format is . By using for UAVs, you can both read and write as opposed to just write for and . Supported view types are SRV, RTV, and UAV. For luminance data view, the mapping to the view channel is Y->R16. For chrominance data view, the mapping to the view channel is U->R16 and + V->G16.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the UV plane.

    An app using the YUY 4:2:0 formats must map the luma (Y) plane separately from the chroma (UV) planes. Developers do this by calling twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the UV planes (together) maps only the U and V planes as a single resource view.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_P010 + DXGI_FORMAT_P010 +
    + + +

    16-bit per channel planar YUV 4:2:0 video resource format. Valid luminance data view formats for this video resource format are and . Valid chrominance data view formats (width and height are each 1/2 of luminance view) for this video resource format are and . For UAVs, an additional valid chrominance data view format is . By using for UAVs, you can both read and write as opposed to just write for and . Supported view types are SRV, RTV, and UAV. For luminance data view, the mapping to the view channel is Y->R16. For chrominance data view, the mapping to the view channel is U->R16 and + V->G16.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes. The first (SysMemPitch * height) bytes are the Y plane, the remaining (SysMemPitch * (height / 2)) bytes are the UV plane.

    An app using the YUY 4:2:0 formats must map the luma (Y) plane separately from the chroma (UV) planes. Developers do this by calling twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the UV planes (together) maps only the U and V planes as a single resource view.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_P016 + DXGI_FORMAT_P016 +
    + + +

    8-bit per channel planar YUV 4:2:0 video resource format. This format is subsampled where each pixel has its own Y value, but each 2x2 pixel block shares a single U and V value. The runtime requires that the width and height of all resources that are created with this format are multiples of 2. The runtime also requires that the left, right, top, and bottom members of any that are used for this format are multiples of 2. This format differs from in that the layout of the data within the resource is completely opaque to applications. Applications cannot use the CPU to map the resource and then access the data within the resource. You cannot use shaders with this format. Because of this behavior, legacy hardware that supports a non-NV12 4:2:0 layout (for example, YV12, and so on) can be used. Also, new hardware that has a 4:2:0 implementation better than NV12 can be used when the application does not need the data to be in a standard layout.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width and height must be even. Direct3D 11 staging resources and initData parameters for this format use (rowPitch * (height + (height / 2))) bytes.

    An app using the YUY 4:2:0 formats must map the luma (Y) plane separately from the chroma (UV) planes. Developers do this by calling twice for the same texture and passing in 1-channel and 2-channel formats. Passing in a 1-channel format compatible with the Y plane maps only the Y plane. Passing in a 2-channel format compatible with the UV planes (together) maps only the U and V planes as a single resource view.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_420_OPAQUE + DXGI_FORMAT_420_OPAQUE +
    + + +

    Most common YUV 4:2:2 video resource format. Valid view formats for this video resource format are and . For UAVs, an additional valid view format is . By using for UAVs, you can both read and write as opposed to just write for and . Supported view types are SRV and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is Y0->R8, + U0->G8, + Y1->B8, + and V0->A8.

    A unique valid view format for this video resource format is . With this view format, the width of the view appears to be twice what the or view would be when hardware reconstructs RGBA automatically on read and before filtering. This Direct3D hardware behavior is legacy and is likely not useful any more. With this view format, the mapping to the view channel is Y0->R8, + U0-> + G8[0], + Y1->B8, + and V0-> + G8[1].

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width must be even.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_YUY2 + DXGI_FORMAT_YUY2 +
    + + +

    10-bit per channel packed YUV 4:2:2 video resource format. Valid view formats for this video resource format are and . The runtime does not enforce whether the lowest 6 bits are 0 (given that this video resource format is a 10-bit format that uses 16 bits). If required, application shader code would have to enforce this manually. From the runtime's point of view, is no different than . Supported view types are SRV and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is Y0->R16, + U->G16, + Y1->B16, + and V->A16.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width must be even.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_Y210 + DXGI_FORMAT_Y210 +
    + + +

    16-bit per channel packed YUV 4:2:2 video resource format. Valid view formats for this video resource format are and . Supported view types are SRV and UAV. One view provides a straightforward mapping of the entire surface. The mapping to the view channel is Y0->R16, + U->G16, + Y1->B16, + and V->A16.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width must be even.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_Y216 + DXGI_FORMAT_Y216 +
    + + +

    Most common planar YUV 4:1:1 video resource format. Valid luminance data view formats for this video resource format are and . Valid chrominance data view formats (width and height are each 1/4 of luminance view) for this video resource format are and . Supported view types are SRV, RTV, and UAV. For luminance data view, the mapping to the view channel is Y->R8. For chrominance data view, the mapping to the view channel is U->R8 and + V->G8.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Width must be a multiple of 4. Direct3D11 staging resources and initData parameters for this format use (rowPitch * height * 2) bytes. The first (SysMemPitch * height) bytes are the Y plane, the next ((SysMemPitch / 2) * height) bytes are the UV plane, and the remainder is padding.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_NV11 + DXGI_FORMAT_NV11 +
    + + +

    4-bit palletized YUV format that is commonly used for DVD subpicture.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_AI44 + DXGI_FORMAT_AI44 +
    + + +

    4-bit palletized YUV format that is commonly used for DVD subpicture.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_IA44 + DXGI_FORMAT_IA44 +
    + + +

    8-bit palletized format that is used for palletized RGB data when the processor processes ISDB-T data and for palletized YUV data when the processor processes BluRay data.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_P8 + DXGI_FORMAT_P8 +
    + + +

    8-bit palletized format with 8 bits of alpha that is used for palletized YUV data when the processor processes BluRay data.

    For more info about YUV formats for video rendering, see Recommended 8-Bit YUV Formats for Video Rendering.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_A8P8 + DXGI_FORMAT_A8P8 +
    + + +

    A four-component, 16-bit unsigned-normalized integer format that supports 4 bits for each channel including alpha.

    Direct3D 11.1:??This value is not supported until Windows?8.

    +
    + + bb173059 + DXGI_FORMAT_B4G4R4A4_UNORM + DXGI_FORMAT_B4G4R4A4_UNORM +
    + + +

    A video format; an 8-bit version of a hybrid planar 4:2:2 format.

    +
    + + bb173059 + DXGI_FORMAT_P208 + DXGI_FORMAT_P208 +
    + + +

    An 8 bit YCbCrA 4:4 rendering format.

    +
    + + bb173059 + DXGI_FORMAT_V208 + DXGI_FORMAT_V208 +
    + + +

    An 8 bit YCbCrA 4:4:4:4 rendering format.

    +
    + + bb173059 + DXGI_FORMAT_V408 + DXGI_FORMAT_V408 +
    + + +

    Indicates options for presenting frames to the swap chain.

    +
    + +

    This enum is used by the structure.

    +
    + + dn384107 + DXGI_FRAME_PRESENTATION_MODE + DXGI_FRAME_PRESENTATION_MODE +
    + + +

    Specifies that the presentation mode is a composition surface, meaning that the conversion from YUV to RGB is happening once per output refresh (for example, 60 Hz). When this value is returned, the media app should discontinue use of the decode swap chain and perform YUV to RGB conversion itself, reducing the frequency of YUV to RGB conversion to once per video frame.

    +
    + + dn384107 + DXGI_FRAME_PRESENTATION_MODE_COMPOSED + DXGI_FRAME_PRESENTATION_MODE_COMPOSED +
    + + +

    Specifies that the presentation mode is an overlay surface, meaning that the YUV to RGB conversion is happening efficiently in hardware (once per video frame). When this value is returned, the media app can continue to use the decode swap chain. See .

    +
    + + dn384107 + DXGI_FRAME_PRESENTATION_MODE_OVERLAY + DXGI_FRAME_PRESENTATION_MODE_OVERLAY +
    + + +

    No presentation is specified.

    +
    + + dn384107 + DXGI_FRAME_PRESENTATION_MODE_NONE + DXGI_FRAME_PRESENTATION_MODE_NONE +
    + + +

    An issue occurred that caused content protection to be invalidated in a swap-chain with hardware content protection, and is usually because the system ran out of hardware protected memory. The app will need to do one of the following:

    • Drastically reduce the amount of hardware protected memory used. For example, media applications might be able to reduce their buffering. +
    • Stop using hardware protection if possible.

    Note that simply re-creating the swap chain or the device will usually have no impact as the DWM will continue to run out of memory and will return the same failure.

    +
    + + dn384107 + DXGI_FRAME_PRESENTATION_MODE_COMPOSITION_FAILURE + DXGI_FRAME_PRESENTATION_MODE_COMPOSITION_FAILURE +
    + + +

    Identifies the granularity at which the graphics processing unit (GPU) can be preempted from performing its current graphics rendering task.

    +
    + +

    You call the method to retrieve the granularity level at which the GPU can be preempted from performing its current graphics rendering task. The operating system specifies the graphics granularity level in the GraphicsPreemptionGranularity member of the structure.

    The following figure shows granularity of graphics rendering tasks.

    +
    + + hh404504 + DXGI_GRAPHICS_PREEMPTION_GRANULARITY + DXGI_GRAPHICS_PREEMPTION_GRANULARITY +
    + + +

    Indicates the preemption granularity as a DMA buffer.

    +
    + + hh404504 + DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY + DXGI_GRAPHICS_PREEMPTION_DMA_BUFFER_BOUNDARY +
    + + +

    Indicates the preemption granularity as a graphics primitive. A primitive is a section in a DMA buffer and can be a group of triangles.

    +
    + + hh404504 + DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY + DXGI_GRAPHICS_PREEMPTION_PRIMITIVE_BOUNDARY +
    + + +

    Indicates the preemption granularity as a triangle. A triangle is a part of a primitive.

    +
    + + hh404504 + DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY + DXGI_GRAPHICS_PREEMPTION_TRIANGLE_BOUNDARY +
    + + +

    Indicates the preemption granularity as a pixel. A pixel is a part of a triangle.

    +
    + + hh404504 + DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY + DXGI_GRAPHICS_PREEMPTION_PIXEL_BOUNDARY +
    + + +

    Indicates the preemption granularity as a graphics instruction. A graphics instruction operates on a pixel.

    +
    + + hh404504 + DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY + DXGI_GRAPHICS_PREEMPTION_INSTRUCTION_BOUNDARY +
    + + + No documentation. + + + DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS + DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAGS + + + + No documentation. + + + DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_FULLSCREEN + DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_FULLSCREEN + + + + No documentation. + + + DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_WINDOWED + DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_WINDOWED + + + + No documentation. + + + DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED + DXGI_HARDWARE_COMPOSITION_SUPPORT_FLAG_CURSOR_STRETCHED + + + + None. + + + None + None + + + +

    Specifies the header metadata type.

    +
    + +

    This enum is used by the SetHDRMetaData method.

    +
    + + mt732701 + DXGI_HDR_METADATA_TYPE + DXGI_HDR_METADATA_TYPE +
    + + +

    Indicates there is no header metadata.

    +
    + + mt732701 + DXGI_HDR_METADATA_TYPE_NONE + DXGI_HDR_METADATA_TYPE_NONE +
    + + +

    Indicates the header metadata is held by a structure.

    +
    + + mt732701 + DXGI_HDR_METADATA_TYPE_HDR10 + DXGI_HDR_METADATA_TYPE_HDR10 +
    + + +

    Get a reference to the data contained in the surface, and deny GPU access to the surface.

    +
    + +

    Use to access a surface from the CPU. To release a mapped surface (and allow GPU access) call .

    +
    + + bb174567 + DXGI_MAP_FLAGS + DXGI_MAP_FLAGS +
    + + +

    A reference to the surface data (see ).

    +
    + + bb174567 + DXGI_MAP_READ + DXGI_MAP_READ +
    + + +

    CPU read-write flags. These flags can be combined with a logical OR.

    • - Allow CPU read access.
    • - Allow CPU write access.
    • - Discard the previous contents of a resource when it is mapped.
    +
    + + bb174567 + DXGI_MAP_WRITE + DXGI_MAP_WRITE +
    + + + No documentation. + + + bb174567 + DXGI_MAP_DISCARD + DXGI_MAP_DISCARD + + + +

    Specifies the memory segment group to use.

    +
    + +

    This enum is used by QueryVideoMemoryInfo and SetVideoMemoryReservation.

    Refer to the remarks for .

    +
    + + dn933219 + DXGI_MEMORY_SEGMENT_GROUP + DXGI_MEMORY_SEGMENT_GROUP +
    + + +

    The grouping of segments which is considered local to the video adapter, and represents the fastest available memory to the GPU. Applications should target the local segment group as the target size for their working set.

    +
    + + dn933219 + DXGI_MEMORY_SEGMENT_GROUP_LOCAL + DXGI_MEMORY_SEGMENT_GROUP_LOCAL +
    + + +

    The grouping of segments which is considered non-local to the video adapter, and may have slower performance than the local segment group.

    +
    + + dn933219 + DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL + DXGI_MEMORY_SEGMENT_GROUP_NON_LOCAL +
    + + +

    Options for swap-chain color space.

    +
    + +

    This enum is used by SetColorSpace.

    +
    + + dn313170 + DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS + DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS +
    + + +

    Specifies nominal range YCbCr, which isn't an absolute color space, but a way of encoding RGB info.

    +
    + + dn313170 + DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE + DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_NOMINAL_RANGE +
    + + +

    Specifies BT.709, which standardizes the format of high-definition television and has 16:9 (widescreen) aspect ratio.

    +
    + + dn313170 + DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 + DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_BT709 +
    + + +

    Specifies xvYCC or extended-gamut YCC (also x.v.Color) color space that can be used in the video electronics of television sets to support a gamut 1.8 times as large as that of the sRGB color space.

    +
    + + dn313170 + DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC + DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAG_xvYCC +
    + + + None. + + + None + None + + + +

    Specifies flags for the OfferResources1 method.

    +
    + + mt732702 + DXGI_OFFER_RESOURCE_FLAGS + DXGI_OFFER_RESOURCE_FLAGS +
    + + + No documentation. + + + mt732702 + DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT + DXGI_OFFER_RESOURCE_FLAG_ALLOW_DECOMMIT + + + + None. + + + None + None + + + +

    Identifies the importance of a resource?s content when you call the method to offer the resource.

    +
    + +

    Priority determines how likely the operating system is to discard an offered resource. Resources offered with lower priority are discarded first.

    +
    + + dn933257 + DXGI_OFFER_RESOURCE_PRIORITY + DXGI_OFFER_RESOURCE_PRIORITY +
    + + + No documentation. + + + dn933257 + DXGI_OFFER_RESOURCE_PRIORITY_LOW + DXGI_OFFER_RESOURCE_PRIORITY_LOW + + + + No documentation. + + + dn933257 + DXGI_OFFER_RESOURCE_PRIORITY_NORMAL + DXGI_OFFER_RESOURCE_PRIORITY_NORMAL + + + + No documentation. + + + dn933257 + DXGI_OFFER_RESOURCE_PRIORITY_HIGH + DXGI_OFFER_RESOURCE_PRIORITY_HIGH + + + + No documentation. + + + DXGI_OUTDUPL_FLAG + DXGI_OUTDUPL_FLAG + + + + No documentation. + + + DXGI_OUTDUPL_COMPOSITED_UI_CAPTURE_ONLY + DXGI_OUTDUPL_COMPOSITED_UI_CAPTURE_ONLY + + + + None. + + + None + None + + + +

    Identifies the type of reference shape.

    +
    + + hh404520 + DXGI_OUTDUPL_POINTER_SHAPE_TYPE + DXGI_OUTDUPL_POINTER_SHAPE_TYPE +
    + + +

    The reference type is a monochrome mouse reference, which is a monochrome bitmap. The bitmap's size is specified by width and height in a 1 bits per pixel (bpp) device independent bitmap (DIB) format AND mask that is followed by another 1 bpp DIB format XOR mask of the same size.

    +
    + + hh404520 + DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME + DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MONOCHROME +
    + + +

    The reference type is a color mouse reference, which is a color bitmap. The bitmap's size is specified by width and height in a 32 bpp ARGB DIB format.

    +
    + + hh404520 + DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR + DXGI_OUTDUPL_POINTER_SHAPE_TYPE_COLOR +
    + + +

    The reference type is a masked color mouse reference. A masked color mouse reference is a 32 bpp ARGB format bitmap with the mask value in the alpha bits. The only allowed mask values are 0 and 0xFF. When the mask value is 0, the RGB value should replace the screen pixel. When the mask value is 0xFF, an XOR operation is performed on the RGB value and the screen pixel; the result replaces the screen pixel.

    +
    + + hh404520 + DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR + DXGI_OUTDUPL_POINTER_SHAPE_TYPE_MASKED_COLOR +
    + + +

    Specifies support for overlay color space.

    +
    + + dn903665 + DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG + DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG +
    + + +

    Overlay color space support is present.

    +
    + + dn903665 + DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG_PRESENT + DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG_PRESENT +
    + + + None. + + + None + None + + + +

    Specifies overlay support to check for in a call to .

    +
    + + dn903667 + DXGI_OVERLAY_SUPPORT_FLAG + DXGI_OVERLAY_SUPPORT_FLAG +
    + + + No documentation. + + + dn903667 + DXGI_OVERLAY_SUPPORT_FLAG_DIRECT + DXGI_OVERLAY_SUPPORT_FLAG_DIRECT + + + + No documentation. + + + dn903667 + DXGI_OVERLAY_SUPPORT_FLAG_SCALING + DXGI_OVERLAY_SUPPORT_FLAG_SCALING + + + +

    Presents a rendered image to the user.

    +
    + +

    Starting with Direct3D 11.1, consider using because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.

    For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.

    Because calling Present might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.

    Differences between Direct3D 9 and Direct3D 10:

    Specifying in the Flags parameter is analogous to IDirect3DDevice9::TestCooperativeLevel in Direct3D 9.

    ?

    For flip presentation model swap chains that you create with the value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.

    For info about how data values change when you present content to the screen, see Converting data for the color space.

    +
    + + bb174576 + DXGI_PRESENT_FLAGS + DXGI_PRESENT_FLAGS +
    + + +

    An integer that specifies how to synchronize presentation of a frame with the vertical blank. +

    For the bit-block transfer (bitblt) model ( or ), values are:

    • 0 - The presentation occurs immediately, there is no synchronization.
    • 1 through 4 - Synchronize presentation after the nth vertical blank.

    For the flip model (), values are:

    • 0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued. +
    • 1 through 4 - Synchronize presentation for at least n vertical blanks.

    For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.

    If the update region straddles more than one output (each represented by ), Present performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.

    +
    + + bb174576 + DXGI_PRESENT_TEST + DXGI_PRESENT_TEST +
    + + +

    An integer value that contains swap-chain presentation options. These options are defined by the DXGI_PRESENT constants.

    +
    + + bb174576 + DXGI_PRESENT_DO_NOT_SEQUENCE + DXGI_PRESENT_DO_NOT_SEQUENCE +
    + + + No documentation. + + + bb174576 + DXGI_PRESENT_RESTART + DXGI_PRESENT_RESTART + + + + No documentation. + + + bb174576 + DXGI_PRESENT_DO_NOT_WAIT + DXGI_PRESENT_DO_NOT_WAIT + + + + No documentation. + + + bb174576 + DXGI_PRESENT_STEREO_PREFER_RIGHT + DXGI_PRESENT_STEREO_PREFER_RIGHT + + + + No documentation. + + + bb174576 + DXGI_PRESENT_STEREO_TEMPORARY_MONO + DXGI_PRESENT_STEREO_TEMPORARY_MONO + + + + No documentation. + + + bb174576 + DXGI_PRESENT_RESTRICT_TO_OUTPUT + DXGI_PRESENT_RESTRICT_TO_OUTPUT + + + + No documentation. + + + bb174576 + DXGI_PRESENT_USE_DURATION + DXGI_PRESENT_USE_DURATION + + + + No documentation. + + + bb174576 + DXGI_PRESENT_ALLOW_TEARING + DXGI_PRESENT_ALLOW_TEARING + + + + None. + + + None + None + + + +

    Specifies result flags for the ReclaimResources1 method.

    +
    + + mt732703 + DXGI_RECLAIM_RESOURCE_RESULTS + DXGI_RECLAIM_RESOURCE_RESULTS +
    + + + No documentation. + + + mt732703 + DXGI_RECLAIM_RESOURCE_RESULT_OK + DXGI_RECLAIM_RESOURCE_RESULT_OK + + + + No documentation. + + + mt732703 + DXGI_RECLAIM_RESOURCE_RESULT_DISCARDED + DXGI_RECLAIM_RESOURCE_RESULT_DISCARDED + + + + No documentation. + + + mt732703 + DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED + DXGI_RECLAIM_RESOURCE_RESULT_NOT_COMMITTED + + + +

    Flags indicating the memory location of a resource.

    +
    + +

    This enum is used by QueryResourceResidency.

    +
    + + bb173070 + DXGI_RESIDENCY + DXGI_RESIDENCY +
    + + +

    The resource is located in video memory.

    +
    + + bb173070 + DXGI_RESIDENCY_FULLY_RESIDENT + DXGI_RESIDENCY_FULLY_RESIDENT +
    + + +

    At least some of the resource is located in CPU memory.

    +
    + + bb173070 + DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY + DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY +
    + + +

    At least some of the resource has been paged out to the hard drive.

    +
    + + bb173070 + DXGI_RESIDENCY_EVICTED_TO_DISK + DXGI_RESIDENCY_EVICTED_TO_DISK +
    + + +

    Set the priority for evicting the resource from memory.

    +
    + +

    The eviction priority is a memory-management variable that is used by DXGI for determining how to populate overcommitted memory.

    You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.

    +
    + + bb174564 + DXGI_RESOURCE_PRIORITY + DXGI_RESOURCE_PRIORITY +
    + + +

    The priority is one of the following values:

    ValueMeaning
    (0x28000000)

    The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.

    (0x50000000)

    The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a GPU can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.

    (0x78000000)

    The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource.

    (0xa0000000)

    The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.

    (0xc8000000)

    The resource is evicted from memory only if there is no other way of resolving the memory requirement.

    ?

    +
    + + bb174564 + DXGI_RESOURCE_PRIORITY_MINIMUM + DXGI_RESOURCE_PRIORITY_MINIMUM +
    + + + No documentation. + + + bb174564 + DXGI_RESOURCE_PRIORITY_LOW + DXGI_RESOURCE_PRIORITY_LOW + + + + No documentation. + + + bb174564 + DXGI_RESOURCE_PRIORITY_NORMAL + DXGI_RESOURCE_PRIORITY_NORMAL + + + + No documentation. + + + bb174564 + DXGI_RESOURCE_PRIORITY_HIGH + DXGI_RESOURCE_PRIORITY_HIGH + + + + No documentation. + + + bb174564 + DXGI_RESOURCE_PRIORITY_MAXIMUM + DXGI_RESOURCE_PRIORITY_MAXIMUM + + + +

    Identifies resize behavior when the back-buffer size does not match the size of the target output.

    +
    + +

    The value is supported only for flip presentation model swap chains that you create with the value. You pass these values in a call to , , or .

    will prefer to use a horizontal fill, otherwise it will use a vertical fill, using the following logic.

    float aspectRatio = backBufferWidth / float(backBufferHeight); // Horizontal fill float scaledWidth = outputWidth; float scaledHeight = outputWidth / aspectRatio; if (scaledHeight >= outputHeight) { // Do vertical fill scaledWidth = outputHeight * aspectRatio; scaledHeight = outputHeight; } float offsetX = (outputWidth - scaledWidth) * 0.5f; float offsetY = (outputHeight - scaledHeight) * 0.5f; rect.left = static_cast<LONG>(offsetX); rect.top = static_cast<LONG>(offsetY); rect.right = static_cast<LONG>(offsetX + scaledWidth); rect.bottom = static_cast<LONG>(offsetY + scaledHeight); rect.left = std::max<LONG>(0, rect.left); rect.top = std::max<LONG>(0, rect.top); rect.right = std::min<LONG>(static_cast<LONG>(outputWidth), rect.right); rect.bottom = std::min<LONG>(static_cast<LONG>(outputHeight), rect.bottom); +

    Note that outputWidth and outputHeight are the pixel sizes of the presentation target size. In the case of CoreWindow, this requires converting the logicalWidth and logicalHeight values from DIPS to pixels using the window's DPI property.

    +
    + + hh404526 + DXGI_SCALING + DXGI_SCALING +
    + + +

    Directs DXGI to make the back-buffer contents scale to fit the presentation target size. This is the implicit behavior of DXGI when you call the method.

    +
    + + hh404526 + DXGI_SCALING_STRETCH + DXGI_SCALING_STRETCH +
    + + +

    Directs DXGI to make the back-buffer contents appear without any scaling when the presentation target size is not equal to the back-buffer size. The top edges of the back buffer and presentation target are aligned together. If the WS_EX_LAYOUTRTL style is associated with the handle to the target output window, the right edges of the back buffer and presentation target are aligned together; otherwise, the left edges are aligned together. All target area outside the back buffer is filled with window background color.

    This value specifies that all target areas outside the back buffer of a swap chain are filled with the background color that you specify in a call to .

    +
    + + hh404526 + DXGI_SCALING_NONE + DXGI_SCALING_NONE +
    + + +

    Directs DXGI to make the back-buffer contents scale to fit the presentation target size, while preserving the aspect ratio of the back-buffer. If the scaled back-buffer does not fill the presentation area, it will be centered with black borders.

    This constant is supported on Windows Phone 8 and Windows 10.

    Note that with legacy Win32 window swapchains, this works the same as . +

    +
    + + hh404526 + DXGI_SCALING_ASPECT_RATIO_STRETCH + DXGI_SCALING_ASPECT_RATIO_STRETCH +
    + + + No documentation. + + + DXGI_SHARED_RESOURCE_FLAGS + DXGI_SHARED_RESOURCE_FLAGS + + + + No documentation. + + + DXGI_SHARED_RESOURCE_READ + DXGI_SHARED_RESOURCE_READ + + + + No documentation. + + + DXGI_SHARED_RESOURCE_WRITE + DXGI_SHARED_RESOURCE_WRITE + + + + None. + + + None + None + + + +

    Specifies color space support for the swap chain.

    +
    + + dn903668 + DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG + DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG +
    + + +

    Color space support is present.

    +
    + + dn903668 + DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT + DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT +
    + + +

    Overlay color space support is present.

    +
    + + dn903668 + DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_OVERLAY_PRESENT + DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_OVERLAY_PRESENT +
    + + + None. + + + None + None + + + +

    Options for swap-chain behavior.

    +
    + +

    This enumeration is used by the structure and the method.

    This enumeration is also used by the structure.

    You don't need to set for swap chains that you create in full-screen mode with the method because those swap chains already behave as if is set. That is, presented content is not accessible by remote access or through the desktop duplication APIs.

    Swap chains that you create with the , , and methods are not protected if is not set and are protected if is set. When swap chains are protected, screen scraping is prevented and, in full-screen mode, presented content is not accessible through the desktop duplication APIs.

    When you call to change the swap chain's back buffer, you can reset or change all flags.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG + DXGI_SWAP_CHAIN_FLAG +
    + + +

    Set this flag to turn off automatic image rotation; that is, do not perform a rotation when transferring the contents of the front buffer to the monitor. Use this flag to avoid a bandwidth penalty when an application expects to handle rotation. This option is valid only during full-screen mode.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_NONPREROTATED + DXGI_SWAP_CHAIN_FLAG_NONPREROTATED +
    + + +

    Set this flag to enable an application to switch modes by calling . When switching from windowed to full-screen mode, the display mode (or monitor resolution) will be changed to match the dimensions of the application window.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH + DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH +
    + + +

    Set this flag to enable an application to render using GDI on a swap chain or a surface. This will allow the application to call on the 0th back buffer or a surface.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE + DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE +
    + + +

    Set this flag to indicate that the swap chain might contain protected content; therefore, the operating system supports the creation of the swap chain only when driver and hardware protection is used. If the driver and hardware do not support content protection, the call to create a resource for the swap chain fails.

    Direct3D 11:??This enumeration value is supported starting with Windows?8.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT + DXGI_SWAP_CHAIN_FLAG_RESTRICTED_CONTENT +
    + + +

    Set this flag to indicate that shared resources that are created within the swap chain must be protected by using the driver?s mechanism for restricting access to shared surfaces.

    Direct3D 11:??This enumeration value is supported starting with Windows?8.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER + DXGI_SWAP_CHAIN_FLAG_RESTRICT_SHARED_RESOURCE_DRIVER +
    + + +

    Set this flag to restrict presented content to the local displays. Therefore, the presented content is not accessible via remote accessing or through the desktop duplication APIs.

    This flag supports the window content protection features of Windows. Applications can use this flag to protect their own onscreen window content from being captured or copied through a specific set of public operating system features and APIs.

    If you use this flag with windowed ( or IWindow) swap chains where another process created the , the owner of the must use the SetWindowDisplayAffinity function appropriately in order to allow calls to or to succeed. +

    Direct3D 11:??This enumeration value is supported starting with Windows?8.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY + DXGI_SWAP_CHAIN_FLAG_DISPLAY_ONLY +
    + + +

    Set this flag to create a waitable object you can use to ensure rendering does not begin while a frame is still being presented. When this flag is used, the swapchain's latency must be set with the API instead of .

    Note??This enumeration value is supported starting with Windows?8.1.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT + DXGI_SWAP_CHAIN_FLAG_FRAME_LATENCY_WAITABLE_OBJECT +
    + + +

    Set this flag to create a swap chain in the foreground layer for multi-plane rendering. This flag can only be used with CoreWindow swap chains, which are created with CreateSwapChainForCoreWindow. Apps should not create foreground swap chains if indicates that hardware support for overlays is not available.

    Note that cannot be used to add or remove this flag.

    Note??This enumeration value is supported starting with Windows?8.1.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER + DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER +
    + + +

    Set this flag to create a swap chain for full-screen video.

    Note??This enumeration value is supported starting with Windows?8.1.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO + DXGI_SWAP_CHAIN_FLAG_FULLSCREEN_VIDEO +
    + + +

    Set this flag to create a swap chain for YUV video.

    Note??This enumeration value is supported starting with Windows?8.1.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO + DXGI_SWAP_CHAIN_FLAG_YUV_VIDEO +
    + + +

    Indicates that the swap chain should be created such that all underlying resources can be protected by the hardware. Resource creation will fail if hardware content protection is not supported.

    This flag has the following restrictions:

    • This flag can only be used with swap effect .
    Note??Creating a swap chain using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the DRM components are first initialized prior to any guarantees of protection. ?

    Note??This enumeration value is supported starting with Windows?10.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED + DXGI_SWAP_CHAIN_FLAG_HW_PROTECTED +
    + + +

    Tearing support is a requirement to enable displays that support variable refresh rates to function properly when the application presents a swap chain tied to a full screen borderless window. Win32 apps can already achieve tearing in fullscreen exclusive mode by calling SetFullscreenState(TRUE), but the recommended approach for Win32 developers is to use this tearing flag instead.

    To check for hardware support of this feature, refer to . For usage information refer to and the DXGI_PRESENT flags.

    +
    + + bb173076 + DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING + DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING +
    + + + No documentation. + + + bb173076 + DXGI_SWAP_CHAIN_FLAG_RESTRICTED_TO_ALL_HOLOGRAPHIC_DISPLAYS + DXGI_SWAP_CHAIN_FLAG_RESTRICTED_TO_ALL_HOLOGRAPHIC_DISPLAYS + + + + None. + + + None + None + + + +

    Options for handling pixels in a display surface after calling .

    +
    + +

    This enumeration is used by the and structures.

    To use multisampling with or , you must perform the multisampling in a separate render target. For example, create a multisampled texture by calling with a filled structure (BindFlags member set to and SampleDesc member with multisampling parameters). Next call to create a render-target view for the texture, and render your scene into the texture. Finally call to resolve the multisampled texture into your non-multisampled swap chain.

    The primary difference between presentation models is how back-buffer contents get to the Desktop Window Manager (DWM) for composition. In the bitblt model, which is used with the and values, contents of the back buffer get copied into the redirection surface on each call to . In the flip model, which is used with the value, all back buffers are shared with the DWM. Therefore, the DWM can compose straight from those back buffers without any additional copy operations. In general, the flip model is the more efficient model. The flip model also provides more features, such as enhanced present statistics.

    When you call on a flip model swap chain () with 0 specified in the SyncInterval parameter, 's behavior is the same as the behavior of Direct3D 9Ex's IDirect3DDevice9Ex::PresentEx with D3DSWAPEFFECT_FLIPEX and D3DPRESENT_FORCEIMMEDIATE. That is, the runtime not only presents the next frame instead of any previously queued frames, it also terminates any remaining time left on the previously queued frames.

    Regardless of whether the flip model is more efficient, an application still might choose the bitblt model because the bitblt model is the only way to mix GDI and DirectX presentation. In the flip model, the application must create the swap chain with , and then must use GetDC on the back buffer explicitly. After the first successful call to on a flip-model swap chain, GDI no longer works with the that is associated with that swap chain, even after the destruction of the swap chain. This restriction even extends to methods like ScrollWindowEx.

    For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas.

    +
    + + bb173077 + DXGI_SWAP_EFFECT + DXGI_SWAP_EFFECT +
    + + + No documentation. + + + bb173077 + DXGI_SWAP_EFFECT_DISCARD + DXGI_SWAP_EFFECT_DISCARD + + + + No documentation. + + + bb173077 + DXGI_SWAP_EFFECT_SEQUENTIAL + DXGI_SWAP_EFFECT_SEQUENTIAL + + + + No documentation. + + + bb173077 + DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL + DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL + + + + No documentation. + + + bb173077 + DXGI_SWAP_EFFECT_FLIP_DISCARD + DXGI_SWAP_EFFECT_FLIP_DISCARD + + + + No documentation. + + + DXGI_USAGE_ENUM + DXGI_USAGE_ENUM + + + + No documentation. + + + DXGI_USAGE_SHADER_INPUT + DXGI_USAGE_SHADER_INPUT + + + + No documentation. + + + DXGI_USAGE_RENDER_TARGET_OUTPUT + DXGI_USAGE_RENDER_TARGET_OUTPUT + + + + No documentation. + + + DXGI_USAGE_BACK_BUFFER + DXGI_USAGE_BACK_BUFFER + + + + No documentation. + + + DXGI_USAGE_SHARED + DXGI_USAGE_SHARED + + + + No documentation. + + + DXGI_USAGE_READ_ONLY + DXGI_USAGE_READ_ONLY + + + + No documentation. + + + DXGI_USAGE_DISCARD_ON_PRESENT + DXGI_USAGE_DISCARD_ON_PRESENT + + + + No documentation. + + + DXGI_USAGE_UNORDERED_ACCESS + DXGI_USAGE_UNORDERED_ACCESS + + + + No documentation. + + + DXGI_MWA_FLAGS + DXGI_MWA_FLAGS + + + + No documentation. + + + DXGI_MWA_NO_WINDOW_CHANGES + DXGI_MWA_NO_WINDOW_CHANGES + + + + No documentation. + + + DXGI_MWA_NO_ALT_ENTER + DXGI_MWA_NO_ALT_ENTER + + + + No documentation. + + + DXGI_MWA_NO_PRINT_SCREEN + DXGI_MWA_NO_PRINT_SCREEN + + + + No documentation. + + + DXGI_MWA_VALID + DXGI_MWA_VALID + + + + None. + + + None + None + + + + Functions + + + + + Constant CreateFactoryDebug. + DXGI_CREATE_FACTORY_DEBUG + + + +

    Creates a DXGI 1.1 factory that you can use to generate other DXGI objects.

    +
    +

    The globally unique identifier () of the object referenced by the ppFactory parameter.

    +

    Address of a reference to an object.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    + +

    Use a DXGI 1.1 factory to generate objects that enumerate adapters, create swap chains, and associate a window with the alt+enter key sequence for toggling to and from the full-screen display mode.

    If the CreateDXGIFactory1 function succeeds, the reference count on the interface is incremented. To avoid a memory leak, when you finish using the interface, call the IDXGIFactory1::Release method to release the interface.

    This entry point is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Note??Do not mix the use of DXGI 1.0 () and DXGI 1.1 () in an application. Use or , but not both in an application.?Note??CreateDXGIFactory1 fails if your app's DllMain function calls it. For more info about how DXGI responds from DllMain, see DXGI Responses from DLLMain.?Note??Starting with Windows?8, all DXGI factories (regardless if they were created with CreateDXGIFactory or CreateDXGIFactory1) enumerate adapters identically. The enumeration order of adapters, which you retrieve with or , is as follows:
    • Adapter with the output on which the desktop primary is displayed. This adapter corresponds with an index of zero.
    • Adapters with outputs.
    • Adapters without outputs.
    ? +
    + + ff471318 + HRESULT CreateDXGIFactory1([In] const GUID& riid,[Out] void** ppFactory) + CreateDXGIFactory1 +
    + + +

    Creates a DXGI 1.3 factory that you can use to generate other DXGI objects.

    In Windows?8, any DXGI factory created while DXGIDebug.dll was present on the system would load and use it. Starting in Windows?8.1, apps explicitly request that DXGIDebug.dll be loaded instead. Use CreateDXGIFactory2 and specify the flag to request DXGIDebug.dll; the DLL will be loaded if it is present on the system.

    +
    +

    Valid values include the (0x01) flag, and zero.

    Note??This flag will be set by the D3D runtime if:
    • The system creates an implicit factory during device creation.
    • The flag is specified during device creation, for example using (or the swapchain method, or the Direct3D 10 equivalents).
    ?
    +

    The globally unique identifier () of the object referenced by the ppFactory parameter.

    +

    Address of a reference to an object.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    + +

    This function accepts a flag indicating whether DXGIDebug.dll is loaded. The function otherwise behaves identically to CreateDXGIFactory1.

    +
    + + dn268307 + HRESULT CreateDXGIFactory2([In] unsigned int Flags,[In] const GUID& riid,[Out] void** ppFactory) + CreateDXGIFactory2 +
    + + + Functions + + + + + Constant InvalidCall. + DXGI_ERROR_INVALID_CALL + + + Constant NotFound. + DXGI_ERROR_NOT_FOUND + + + Constant MoreData. + DXGI_ERROR_MORE_DATA + + + Constant Unsupported. + DXGI_ERROR_UNSUPPORTED + + + Constant DeviceRemoved. + DXGI_ERROR_DEVICE_REMOVED + + + Constant DeviceHung. + DXGI_ERROR_DEVICE_HUNG + + + Constant DeviceReset. + DXGI_ERROR_DEVICE_RESET + + + Constant WasStillDrawing. + DXGI_ERROR_WAS_STILL_DRAWING + + + Constant FrameStatisticsDisjoint. + DXGI_ERROR_FRAME_STATISTICS_DISJOINT + + + Constant GraphicsVidpnSourceInUse. + DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE + + + Constant DriverInternalError. + DXGI_ERROR_DRIVER_INTERNAL_ERROR + + + Constant Nonexclusive. + DXGI_ERROR_NONEXCLUSIVE + + + Constant NotCurrentlyAvailable. + DXGI_ERROR_NOT_CURRENTLY_AVAILABLE + + + Constant RemoteClientDisconnected. + DXGI_ERROR_REMOTE_CLIENT_DISCONNECTED + + + Constant RemoteOufOfMemory. + DXGI_ERROR_REMOTE_OUTOFMEMORY + + + Constant AccessLost. + DXGI_ERROR_ACCESS_LOST + + + Constant WaitTimeout. + DXGI_ERROR_WAIT_TIMEOUT + + + Constant SessionDisconnected. + DXGI_ERROR_SESSION_DISCONNECTED + + + Constant RestrictToOutputStale. + DXGI_ERROR_RESTRICT_TO_OUTPUT_STALE + + + Constant CannotProtectContent. + DXGI_ERROR_CANNOT_PROTECT_CONTENT + + + Constant AccessDenied. + DXGI_ERROR_ACCESS_DENIED + + + Constant NameAlreadyExists. + DXGI_ERROR_NAME_ALREADY_EXISTS + + + Constant SdkComponentMissing. + DXGI_ERROR_SDK_COMPONENT_MISSING + + + Constant NotCurrent. + DXGI_ERROR_NOT_CURRENT + + + Constant HwProtectionOufOfMemory. + DXGI_ERROR_HW_PROTECTION_OUTOFMEMORY + + + Constant DynamicCodePolicyViolation. + DXGI_ERROR_DYNAMIC_CODE_POLICY_VIOLATION + + + Constant NonCompositedUi. + DXGI_ERROR_NON_COMPOSITED_UI + + + Constant ModeChangeInProgress. + DXGI_ERROR_MODE_CHANGE_IN_PROGRESS + + + Constant CacheCorrupt. + DXGI_ERROR_CACHE_CORRUPT + + + Constant CacheFull. + DXGI_ERROR_CACHE_FULL + + + Constant CacheHashCollision. + DXGI_ERROR_CACHE_HASH_COLLISION + + + Constant AlreadyExists. + DXGI_ERROR_ALREADY_EXISTS + + + +

    The interface represents a display sub-system (including one or more GPU's, DACs and video memory).

    +
    + +

    This interface is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    A display sub-system is often referred to as a video card, however, on some machines the display sub-system is part of the mother board.

    To enumerate the display sub-systems, use . To get an interface to the adapter for a particular device, use . To create a software adapter, use .

    Windows?Phone?8: This API is supported.

    +
    + + ff471329 + IDXGIAdapter1 + IDXGIAdapter1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a DXGI 1.1 description of an adapter (or video card).

    +
    + +

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Use the GetDesc1 method to get a DXGI 1.1 description of an adapter. To get a DXGI 1.0 description, use the method.

    +
    + + ff471330 + GetDesc1 + GetDesc1 + HRESULT IDXGIAdapter1::GetDesc1([Out] DXGI_ADAPTER_DESC1* pDesc) +
    + + +

    Gets a DXGI 1.1 description of an adapter (or video card).

    +
    +

    A reference to a structure that describes the adapter. This parameter must not be null. On feature level 9 graphics hardware, GetDesc1 returns zeros for the PCI ID in the VendorId, DeviceId, SubSysId, and Revision members of and ?Software Adapter? for the description string in the Description member.

    +

    Returns if successful; otherwise, returns E_INVALIDARG if the pDesc parameter is null.

    + +

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Use the GetDesc1 method to get a DXGI 1.1 description of an adapter. To get a DXGI 1.0 description, use the method.

    +
    + + ff471330 + HRESULT IDXGIAdapter1::GetDesc1([Out] DXGI_ADAPTER_DESC1* pDesc) + IDXGIAdapter1::GetDesc1 +
    + + +

    The interface represents a display subsystem, which includes one or more GPUs, DACs, and video memory.

    +
    + +

    A display subsystem is often referred to as a video card; however, on some computers, the display subsystem is part of the motherboard.

    To enumerate the display subsystems, use .

    To get an interface to the adapter for a particular device, use .

    To create a software adapter, use .

    +
    + + hh404537 + IDXGIAdapter2 + IDXGIAdapter2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 description of an adapter or video card. This description includes information about the granularity at which the graphics processing unit (GPU) can be preempted from performing its current task.

    +
    + +

    Use the GetDesc2 method to get a DXGI 1.2 description of an adapter. To get a DXGI 1.1 description, use the method. To get a DXGI 1.0 description, use the method.

    The Windows Display Driver Model (WDDM) scheduler can preempt the GPU's execution of application tasks. The granularity at which the GPU can be preempted from performing its current task in the WDDM 1.1 or earlier driver model is a direct memory access (DMA) buffer for graphics tasks or a compute packet for compute tasks. The GPU can switch between tasks only after it completes the currently executing unit of work, a DMA buffer or a compute packet.

    A DMA buffer is the largest independent unit of graphics work that the WDDM scheduler can submit to the GPU. This buffer contains a set of GPU instructions that the WDDM driver and GPU use. A compute packet is the largest independent unit of compute work that the WDDM scheduler can submit to the GPU. A compute packet contains dispatches (for example, calls to the method), which contain thread groups. The WDDM 1.2 or later driver model allows the GPU to be preempted at finer granularity levels than a DMA buffer or compute packet. You can use the GetDesc2 method to retrieve the granularity levels for graphics and compute tasks.

    +
    + + hh404540 + GetDesc2 + GetDesc2 + HRESULT IDXGIAdapter2::GetDesc2([Out] DXGI_ADAPTER_DESC2* pDesc) +
    + + +

    Gets a Microsoft DirectX Graphics Infrastructure (DXGI) 1.2 description of an adapter or video card. This description includes information about the granularity at which the graphics processing unit (GPU) can be preempted from performing its current task.

    +
    +

    A reference to a structure that describes the adapter. This parameter must not be null. On feature level 9 graphics hardware, earlier versions of GetDesc2 (GetDesc and GetDesc1) return zeros for the PCI ID in the VendorId, DeviceId, SubSysId, and Revision members of the adapter description structure and ?Software Adapter? for the description string in the Description member. GetDesc2 returns the actual feature level 9 hardware values in these members.

    +

    Returns if successful; otherwise, returns E_INVALIDARG if the pDesc parameter is null.

    + +

    Use the GetDesc2 method to get a DXGI 1.2 description of an adapter. To get a DXGI 1.1 description, use the method. To get a DXGI 1.0 description, use the method.

    The Windows Display Driver Model (WDDM) scheduler can preempt the GPU's execution of application tasks. The granularity at which the GPU can be preempted from performing its current task in the WDDM 1.1 or earlier driver model is a direct memory access (DMA) buffer for graphics tasks or a compute packet for compute tasks. The GPU can switch between tasks only after it completes the currently executing unit of work, a DMA buffer or a compute packet.

    A DMA buffer is the largest independent unit of graphics work that the WDDM scheduler can submit to the GPU. This buffer contains a set of GPU instructions that the WDDM driver and GPU use. A compute packet is the largest independent unit of compute work that the WDDM scheduler can submit to the GPU. A compute packet contains dispatches (for example, calls to the method), which contain thread groups. The WDDM 1.2 or later driver model allows the GPU to be preempted at finer granularity levels than a DMA buffer or compute packet. You can use the GetDesc2 method to retrieve the granularity levels for graphics and compute tasks.

    +
    + + hh404540 + HRESULT IDXGIAdapter2::GetDesc2([Out] DXGI_ADAPTER_DESC2* pDesc) + IDXGIAdapter2::GetDesc2 +
    + + +

    This interface adds some memory residency methods, for budgeting and reserving physical memory.

    +
    + +

    For more details, refer to the Residency section of the D3D12 documentation.

    +
    + + dn933221 + IDXGIAdapter3 + IDXGIAdapter3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Registers to receive notification of hardware content protection teardown events.

    +
    +

    A handle to the event object that the operating system sets when hardware content protection teardown occurs. The CreateEvent or OpenEvent function returns this handle.

    +

    A reference to a key value that an application can pass to the method to unregister the notification event that hEvent specifies.

    + +

    Call () to check for the presence of the capability to know whether the hardware contains an automatic teardown mechanism. After the event is signaled, the application can call to determine the impact of the hardware teardown for a specific interface. +

    +
    + + dn933230 + HRESULT IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent([In] void* hEvent,[Out] unsigned int* pdwCookie) + IDXGIAdapter3::RegisterHardwareContentProtectionTeardownStatusEvent +
    + + +

    Unregisters an event to stop it from receiving notification of hardware content protection teardown events.

    +
    +

    A key value for the window or event to unregister. The method returns this value.

    + + dn933233 + void IDXGIAdapter3::UnregisterHardwareContentProtectionTeardownStatus([In] unsigned int dwCookie) + IDXGIAdapter3::UnregisterHardwareContentProtectionTeardownStatus +
    + + +

    This method informs the process of the current budget and process usage.

    +
    +

    Specifies the device's physical adapter for which the video memory information is queried. For single-GPU operation, set this to zero. If there are multiple GPU nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is queried. See Multi-Adapter.

    +

    Specifies a that identifies the group as local or non-local.

    +

    Fills in a structure with the current values.

    + +

    Applications must explicitly manage their usage of physical memory explicitly and keep usage within the budget assigned to the application process. Processes that cannot kept their usage within their assigned budgets will likely experience stuttering, as they are intermittently frozen and paged-out to allow other processes to run.

    +
    + + dn933223 + HRESULT IDXGIAdapter3::QueryVideoMemoryInfo([In] unsigned int NodeIndex,[In] DXGI_MEMORY_SEGMENT_GROUP MemorySegmentGroup,[Out] DXGI_QUERY_VIDEO_MEMORY_INFO* pVideoMemoryInfo) + IDXGIAdapter3::QueryVideoMemoryInfo +
    + + +

    This method sends the minimum required physical memory for an application, to the OS.

    +
    +

    Specifies the device's physical adapter for which the video memory information is being set. For single-GPU operation, set this to zero. If there are multiple GPU nodes, set this to the index of the node (the device's physical adapter) for which the video memory information is being set. See Multi-Adapter.

    +

    Specifies a that identifies the group as local or non-local.

    +

    Specifies a UINT64 that sets the minimum required physical memory, in bytes.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    + +

    Applications are encouraged to set a video reservation to denote the amount of physical memory they cannot go without. This value helps the OS quickly minimize the impact of large memory pressure situations.

    +
    + + dn933232 + HRESULT IDXGIAdapter3::SetVideoMemoryReservation([In] unsigned int NodeIndex,[In] DXGI_MEMORY_SEGMENT_GROUP MemorySegmentGroup,[In] unsigned longlong Reservation) + IDXGIAdapter3::SetVideoMemoryReservation +
    + + +

    This method establishes a correlation between a CPU synchronization object and the budget change event.

    +
    +

    Specifies a HANDLE for the event.

    +

    A key value for the window or event to unregister. The method returns this value.

    + +

    Instead of calling QueryVideoMemoryInfo regularly, applications can use CPU synchronization objects to efficiently wake threads when budget changes occur.

    +
    + + dn933231 + HRESULT IDXGIAdapter3::RegisterVideoMemoryBudgetChangeNotificationEvent([In] void* hEvent,[Out] unsigned int* pdwCookie) + IDXGIAdapter3::RegisterVideoMemoryBudgetChangeNotificationEvent +
    + + +

    This method stops notifying a CPU synchronization object whenever a budget change occurs. An application may switch back to polling the information regularly.

    +
    +

    A key value for the window or event to unregister. The method returns this value.

    + +

    An application may switch back to polling for the information regularly.

    +
    + + dn933234 + void IDXGIAdapter3::UnregisterVideoMemoryBudgetChangeNotification([In] unsigned int dwCookie) + IDXGIAdapter3::UnregisterVideoMemoryBudgetChangeNotification +
    + + +

    The interface represents a display subsystem (including one or more GPUs, DACs and video memory).

    +
    + +

    A display subsystem is often referred to as a video card, however, on some machines the display subsystem is part of the motherboard.

    To enumerate the display subsystems, use .

    To get an interface to the adapter for a particular device, use .

    To create a software adapter, use .

    Windows?Phone?8: This API is supported.

    +
    + + bb174523 + IDXGIAdapter4 + IDXGIAdapter4 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetDesc3 + GetDesc3 + HRESULT IDXGIAdapter4::GetDesc3([Out] DXGI_ADAPTER_DESC3* pDesc) + + + + No documentation. + + No documentation. + No documentation. + + HRESULT IDXGIAdapter4::GetDesc3([Out] DXGI_ADAPTER_DESC3* pDesc) + IDXGIAdapter4::GetDesc3 + + + +

    Represents a swap chain that is used by desktop media apps to decode video data and show it on a DirectComposition surface.

    +
    + +

    Decode swap chains are intended for use primarily with YUV surface formats. When using decode buffers created with an RGB surface format, the TargetRect and DestSize must be set equal to the buffer dimensions. SourceRect cannot exceed the buffer dimensions.

    In clone mode, the decode swap chain is only guaranteed to be shown on the primary output.

    Decode swap chains cannot be used with dirty rects.

    +
    + + dn384109 + IDXGIDecodeSwapChain + IDXGIDecodeSwapChain +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the source region that is used for the swap chain.

    +
    + + dn384121 + GetSourceRect / SetSourceRect + GetSourceRect + HRESULT IDXGIDecodeSwapChain::GetSourceRect([Out] RECT* pRect) +
    + + +

    Gets or sets the rectangle that defines the target region for the video processing blit operation.

    +
    + + dn384122 + GetTargetRect / SetTargetRect + GetTargetRect + HRESULT IDXGIDecodeSwapChain::GetTargetRect([Out] RECT* pRect) +
    + + +

    Gets or sets the color space used by the swap chain.

    +
    + + dn384119 + GetColorSpace / SetColorSpace + GetColorSpace + DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS IDXGIDecodeSwapChain::GetColorSpace() +
    + + +

    Presents a frame on the output adapter. The frame is a subresource of the object that was used to create the decode swap chain.

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns on success, or it returns one of the following error codes:

    • E_OUTOFMEMORY
    + + dn384123 + HRESULT IDXGIDecodeSwapChain::PresentBuffer([In] unsigned int BufferToPresent,[In] unsigned int SyncInterval,[In] unsigned int Flags) + IDXGIDecodeSwapChain::PresentBuffer +
    + + +

    Sets the rectangle that defines the source region for the video processing blit operation.

    The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.

    +
    +

    A reference to a structure that contains the source region to set for the swap chain.

    +

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    + + dn384126 + HRESULT IDXGIDecodeSwapChain::SetSourceRect([In] const RECT* pRect) + IDXGIDecodeSwapChain::SetSourceRect +
    + + +

    Sets the rectangle that defines the target region for the video processing blit operation.

    The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.

    +
    +

    A reference to a structure that contains the target region to set for the swap chain.

    +

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    + + dn384127 + HRESULT IDXGIDecodeSwapChain::SetTargetRect([In] const RECT* pRect) + IDXGIDecodeSwapChain::SetTargetRect +
    + + +

    Sets the size of the destination surface to use for the video processing blit operation.

    The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.

    +
    +

    The width of the destination size, in pixels.

    +

    The height of the destination size, in pixels.

    +

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    + + dn384125 + HRESULT IDXGIDecodeSwapChain::SetDestSize([In] unsigned int Width,[In] unsigned int Height) + IDXGIDecodeSwapChain::SetDestSize +
    + + +

    Gets the source region that is used for the swap chain.

    +
    +

    A reference to a structure that receives the source region for the swap chain.

    +

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    + + dn384121 + HRESULT IDXGIDecodeSwapChain::GetSourceRect([Out] RECT* pRect) + IDXGIDecodeSwapChain::GetSourceRect +
    + + +

    Gets the rectangle that defines the target region for the video processing blit operation.

    +
    +

    A reference to a structure that receives the target region for the swap chain.

    +

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    + + dn384122 + HRESULT IDXGIDecodeSwapChain::GetTargetRect([Out] RECT* pRect) + IDXGIDecodeSwapChain::GetTargetRect +
    + + +

    Gets the size of the destination surface to use for the video processing blit operation.

    +
    +

    A reference to a variable that receives the width in pixels.

    +

    A reference to a variable that receives the height in pixels.

    +

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    + + dn384120 + HRESULT IDXGIDecodeSwapChain::GetDestSize([Out] unsigned int* pWidth,[Out] unsigned int* pHeight) + IDXGIDecodeSwapChain::GetDestSize +
    + + +

    Sets the color space used by the swap chain.

    +
    +

    A reference to a combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies the color space to set for the swap chain.

    +

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    + + dn384124 + HRESULT IDXGIDecodeSwapChain::SetColorSpace([In] DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS ColorSpace) + IDXGIDecodeSwapChain::SetColorSpace +
    + + +

    Gets the color space used by the swap chain.

    +
    +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies the color space for the swap chain.

    + + dn384119 + DXGI_MULTIPLANE_OVERLAY_YCbCr_FLAGS IDXGIDecodeSwapChain::GetColorSpace() + IDXGIDecodeSwapChain::GetColorSpace +
    + + +

    An interface implements a derived class for DXGI objects that produce image data.

    +
    + +

    This interface is not supported by Direct3D 12 devices. Direct3D 12 applications have direct control over their swapchain management, so better latency control should be handled by the application. You can make use of Waitable objects (refer to ) and the method if desired.

    This interface is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    The interface is designed for use by DXGI objects that need access to other DXGI objects. This interface is useful to applications that do not use Direct3D to communicate with DXGI.

    The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the interface. You can query this Direct3D device object for the device's corresponding interface. To retrieve the interface of a Direct3D device, use the following code:

     * pDXGIDevice;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
    +            

    Windows?Phone?8: This API is supported.

    +
    + + ff471331 + IDXGIDevice1 + IDXGIDevice1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the number of frames that the system is allowed to queue for rendering.

    +
    + +

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the CPU chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.

    +
    + + ff471332 + GetMaximumFrameLatency / SetMaximumFrameLatency + GetMaximumFrameLatency + HRESULT IDXGIDevice1::GetMaximumFrameLatency([Out] unsigned int* pMaxLatency) +
    + + +

    Sets the number of frames that the system is allowed to queue for rendering.

    +
    +

    The maximum number of back buffer frames that a driver can queue. The value defaults to 3, but can range from 1 to 16. A value of 0 will reset latency to the default. For multi-head devices, this value is specified per-head.

    +

    Returns if successful; otherwise, if the device was removed.

    + +

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the CPU chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.

    +
    + + ff471334 + HRESULT IDXGIDevice1::SetMaximumFrameLatency([In] unsigned int MaxLatency) + IDXGIDevice1::SetMaximumFrameLatency +
    + + +

    Gets the number of frames that the system is allowed to queue for rendering.

    +
    +

    This value is set to the number of frames that can be queued for render. This value defaults to 3, but can range from 1 to 16.

    +

    Returns if successful; otherwise, returns one of the following members of the D3DERR enumerated type:

    • D3DERR_DEVICELOST
    • D3DERR_DEVICEREMOVED
    • D3DERR_DRIVERINTERNALERROR
    • D3DERR_INVALIDCALL
    • D3DERR_OUTOFVIDEOMEMORY
    + +

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Frame latency is the number of frames that are allowed to be stored in a queue before submission for rendering. Latency is often used to control how the CPU chooses between responding to user input and frames that are in the render queue. It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.

    +
    + + ff471332 + HRESULT IDXGIDevice1::GetMaximumFrameLatency([Out] unsigned int* pMaxLatency) + IDXGIDevice1::GetMaximumFrameLatency +
    + + +

    The interface implements a derived class for DXGI objects that produce image data. The interface exposes methods to block CPU processing until the GPU completes processing, and to offer resources to the operating system.

    +
    + +

    The interface is designed for use by DXGI objects that need access to other DXGI objects. This interface is useful to applications that do not use Direct3D to communicate with DXGI.

    The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the interface. You can query this Direct3D device object for the device's corresponding interface. To retrieve the interface of a Direct3D device, use the following code:

     * pDXGIDevice;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
    +            

    Windows?Phone?8: This API is supported.

    +
    + + hh404543 + IDXGIDevice2 + IDXGIDevice2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Allows the operating system to free the video memory of resources by discarding their content.

    +
    +

    The number of resources in the ppResources argument array.

    +

    An array of references to interfaces for the resources to offer.

    +

    A -typed value that indicates how valuable data is.

    +

    OfferResources returns:

    • if resources were successfully offered
    • E_INVALIDARG if a resource in the array or the priority is invalid
    + +

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the IDXGIDevice2::ReclaimResource method to reclaim the resource. You cannot call OfferResources to offer immutable resources.

    To offer shared resources, call OfferResources on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    Note??The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources. The driver can postpone offering them until the next call to , , or .?

    Platform Update for Windows?7:??The runtime validates that OfferResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404549 + HRESULT IDXGIDevice2::OfferResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority) + IDXGIDevice2::OfferResources +
    + + +

    Allows the operating system to free the video memory of resources by discarding their content.

    +
    +

    The number of resources in the ppResources argument array.

    +

    An array of references to interfaces for the resources to offer.

    +

    A -typed value that indicates how valuable data is.

    +

    OfferResources returns:

    • if resources were successfully offered
    • E_INVALIDARG if a resource in the array or the priority is invalid
    + +

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the IDXGIDevice2::ReclaimResource method to reclaim the resource. You cannot call OfferResources to offer immutable resources.

    To offer shared resources, call OfferResources on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    Note??The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources. The driver can postpone offering them until the next call to , , or .?

    Platform Update for Windows?7:??The runtime validates that OfferResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404549 + HRESULT IDXGIDevice2::OfferResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority) + IDXGIDevice2::OfferResources +
    + + +

    Allows the operating system to free the video memory of resources by discarding their content.

    +
    +

    The number of resources in the ppResources argument array.

    +

    An array of references to interfaces for the resources to offer.

    +

    A -typed value that indicates how valuable data is.

    +

    OfferResources returns:

    • if resources were successfully offered
    • E_INVALIDARG if a resource in the array or the priority is invalid
    + +

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the IDXGIDevice2::ReclaimResource method to reclaim the resource. You cannot call OfferResources to offer immutable resources.

    To offer shared resources, call OfferResources on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    Note??The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources. The driver can postpone offering them until the next call to , , or .?

    Platform Update for Windows?7:??The runtime validates that OfferResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404549 + HRESULT IDXGIDevice2::OfferResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority) + IDXGIDevice2::OfferResources +
    + + +

    Restores access to resources that were previously offered by calling .

    +
    + No documentation. + No documentation. + No documentation. +

    ReclaimResources returns:

    • if resources were successfully reclaimed
    • E_INVALIDARG if the resources are invalid
    + +

    After you call to offer one or more resources, you must call ReclaimResources before you can use those resources again. You must check the values in the array at pDiscarded to determine whether each resource?s content was discarded. If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.

    To reclaim shared resources, call ReclaimResources only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources only while you hold the mutex.

    Platform Update for Windows?7:??The runtime validates that ReclaimResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404551 + HRESULT IDXGIDevice2::ReclaimResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer, Optional] BOOL* pDiscarded) + IDXGIDevice2::ReclaimResources +
    + + +

    Restores access to resources that were previously offered by calling .

    +
    + No documentation. + No documentation. + No documentation. +

    ReclaimResources returns:

    • if resources were successfully reclaimed
    • E_INVALIDARG if the resources are invalid
    + +

    After you call to offer one or more resources, you must call ReclaimResources before you can use those resources again. You must check the values in the array at pDiscarded to determine whether each resource?s content was discarded. If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.

    To reclaim shared resources, call ReclaimResources only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources only while you hold the mutex.

    Platform Update for Windows?7:??The runtime validates that ReclaimResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404551 + HRESULT IDXGIDevice2::ReclaimResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer, Optional] BOOL* pDiscarded) + IDXGIDevice2::ReclaimResources +
    + + +

    Restores access to resources that were previously offered by calling .

    +
    + No documentation. + No documentation. + No documentation. +

    ReclaimResources returns:

    • if resources were successfully reclaimed
    • E_INVALIDARG if the resources are invalid
    + +

    After you call to offer one or more resources, you must call ReclaimResources before you can use those resources again. You must check the values in the array at pDiscarded to determine whether each resource?s content was discarded. If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.

    To reclaim shared resources, call ReclaimResources only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources only while you hold the mutex.

    Platform Update for Windows?7:??The runtime validates that ReclaimResources is used correctly on non-shared resources but doesn't perform the intended functionality. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404551 + HRESULT IDXGIDevice2::ReclaimResources([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer, Optional] BOOL* pDiscarded) + IDXGIDevice2::ReclaimResources +
    + + +

    Flushes any outstanding rendering commands and sets the specified event object to the signaled state after all previously submitted rendering commands complete.

    +
    +

    A handle to the event object. The CreateEvent or OpenEvent function returns this handle. All types of event objects (manual-reset, auto-reset, and so on) are supported.

    The handle must have the EVENT_MODIFY_STATE access right. For more information about access rights, see Synchronization Object Security and Access Rights.

    +

    Returns if successful; otherwise, returns one of the following values:

    • E_OUTOFMEMORY if insufficient memory is available to complete the operation.
    • E_INVALIDARG if the parameter was validated and determined to be incorrect.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, EnqueueSetEvent fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    EnqueueSetEvent calls the SetEvent function on the event object after all previously submitted rendering commands complete or the device is removed.

    After an application calls EnqueueSetEvent, it can immediately call the WaitForSingleObject function to put itself to sleep until rendering commands complete.

    You cannot use EnqueueSetEvent to determine work completion that is associated with presentation (); instead, we recommend that you use .

    +
    + + hh404546 + HRESULT IDXGIDevice2::EnqueueSetEvent([In] void* hEvent) + IDXGIDevice2::EnqueueSetEvent +
    + + +

    The interface implements a derived class for DXGI objects that produce image data. The interface exposes a method to trim graphics memory usage by the DXGI device.

    +
    + +

    The interface is designed for use by DXGI objects that need access to other DXGI objects. This interface is useful to applications that do not use Direct3D to communicate with DXGI.

    The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the interface. You can query this Direct3D device object for the device's corresponding interface. To retrieve the interface of a Direct3D device, use the following code:

     * pDXGIDevice;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);

    Windows?Phone?8: This API is supported.

    +
    + + dn280345 + IDXGIDevice3 + IDXGIDevice3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Trims the graphics memory allocated by the DXGI device on the app's behalf.

    For apps that render with DirectX, graphics drivers periodically allocate internal memory buffers in order to speed up subsequent rendering requests. These memory allocations count against the app's memory usage for PLM and in general lead to increased memory usage by the overall system.

    Starting in Windows?8.1, apps that render with Direct2D and/or Direct3D (including CoreWindow and XAML interop) must call Trim in response to the PLM suspend callback. The Direct3D runtime and the graphics driver will discard internal memory buffers allocated for the app, reducing its memory footprint.

    Calling this method does not change the rendering state of the graphics device and it has no effect on rendering operations. There is a brief performance hit when internal buffers are reallocated during the first rendering operations after the Trim call, therefore apps should only call Trim when going idle for a period of time (in response to PLM suspend, for example).

    Apps should ensure that they call Trim as one of the last D3D operations done before going idle. Direct3D will normally defer the destruction of D3D objects. Calling Trim, however, forces Direct3D to destroy objects immediately. For this reason, it is not guaranteed that releasing the final reference on Direct3D objects after calling Trim will cause the object to be destroyed and memory to be deallocated before the app suspends.

    Similar to , apps should call before calling Trim. ClearState clears the Direct3D pipeline bindings, ensuring that Direct3D does not hold any references to the Direct3D objects you are trying to release.

    It is also prudent to release references on middleware before calling Trim, as that middleware may also need to release references + to Direct3D objects.

    +
    + + dn280346 + void IDXGIDevice3::Trim() + IDXGIDevice3::Trim +
    + + +

    An interface implements a derived class for DXGI objects that produce image data.

    +
    + +

    The interface is designed for use by DXGI objects that need access to other DXGI objects. This interface is useful to applications that do not use Direct3D to communicate with DXGI.

    The Direct3D create device functions return a Direct3D device object. This Direct3D device object implements the interface. You can query this Direct3D device object for the device's corresponding interface. To retrieve the interface of a Direct3D device, use the following code:

     * pDXGIDevice;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);	
    +            

    Windows?Phone?8: This API is supported.

    +
    + + bb174527 + IDXGIDevice4 + IDXGIDevice4 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Allows the operating system to free the video memory of resources, including both discarding the content and de-committing the memory.

    +
    +

    The number of resources in the ppResources argument array.

    +

    An array of references to interfaces for the resources to offer.

    +

    A -typed value that indicates how valuable data is.

    +

    Specifies the .

    +

    This method returns an success or error code, which can include E_INVALIDARG if a resource in the array, or the priority, is invalid.

    + +

    OfferResources1 (an extension of the original API) enables D3D based applications to allow de-committing of an allocation?s backing store to reduce system commit under low memory conditions. + A de-committed allocation cannot be reused, so opting in to the new flag means the new reclaim results must be properly handled. Refer to the flag descriptions in and the Example below.

    OfferResources1 and ReclaimResources1 may not be used interchangeably with OfferResources and ReclaimResources. +

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources1 to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources1 on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the ReclaimResources1 method to reclaim the resource. You cannot call OfferResources1 to offer immutable resources.

    To offer shared resources, call OfferResources1 on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources1 only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources1. The driver can postpone offering them until the next call to , , or .

    +
    + + mt732705 + HRESULT IDXGIDevice4::OfferResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority,[In] unsigned int Flags) + IDXGIDevice4::OfferResources1 +
    + + +

    Allows the operating system to free the video memory of resources, including both discarding the content and de-committing the memory.

    +
    +

    The number of resources in the ppResources argument array.

    +

    An array of references to interfaces for the resources to offer.

    +

    A -typed value that indicates how valuable data is.

    +

    Specifies the .

    +

    This method returns an success or error code, which can include E_INVALIDARG if a resource in the array, or the priority, is invalid.

    + +

    OfferResources1 (an extension of the original API) enables D3D based applications to allow de-committing of an allocation?s backing store to reduce system commit under low memory conditions. + A de-committed allocation cannot be reused, so opting in to the new flag means the new reclaim results must be properly handled. Refer to the flag descriptions in and the Example below.

    OfferResources1 and ReclaimResources1 may not be used interchangeably with OfferResources and ReclaimResources. +

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources1 to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources1 on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the ReclaimResources1 method to reclaim the resource. You cannot call OfferResources1 to offer immutable resources.

    To offer shared resources, call OfferResources1 on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources1 only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources1. The driver can postpone offering them until the next call to , , or .

    +
    + + mt732705 + HRESULT IDXGIDevice4::OfferResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority,[In] unsigned int Flags) + IDXGIDevice4::OfferResources1 +
    + + +

    Allows the operating system to free the video memory of resources, including both discarding the content and de-committing the memory.

    +
    +

    The number of resources in the ppResources argument array.

    +

    An array of references to interfaces for the resources to offer.

    +

    A -typed value that indicates how valuable data is.

    +

    Specifies the .

    +

    This method returns an success or error code, which can include E_INVALIDARG if a resource in the array, or the priority, is invalid.

    + +

    OfferResources1 (an extension of the original API) enables D3D based applications to allow de-committing of an allocation?s backing store to reduce system commit under low memory conditions. + A de-committed allocation cannot be reused, so opting in to the new flag means the new reclaim results must be properly handled. Refer to the flag descriptions in and the Example below.

    OfferResources1 and ReclaimResources1 may not be used interchangeably with OfferResources and ReclaimResources. +

    The priority value that the Priority parameter specifies describes how valuable the caller considers the content to be. The operating system uses the priority value to discard resources in order of priority. The operating system discards a resource that is offered with low priority before it discards a resource that is offered with a higher priority.

    If you call OfferResources1 to offer a resource while the resource is bound to the pipeline, the resource is unbound. You cannot call OfferResources1 on a resource that is mapped. After you offer a resource, the resource cannot be mapped or bound to the pipeline until you call the ReclaimResources1 method to reclaim the resource. You cannot call OfferResources1 to offer immutable resources.

    To offer shared resources, call OfferResources1 on only one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call OfferResources1 only while you hold the mutex. In fact, you can't offer shared resources unless you use because offering shared resources without using isn't supported.

    The user mode display driver might not immediately offer the resources that you specified in a call to OfferResources1. The driver can postpone offering them until the next call to , , or .

    +
    + + mt732705 + HRESULT IDXGIDevice4::OfferResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[In] DXGI_OFFER_RESOURCE_PRIORITY Priority,[In] unsigned int Flags) + IDXGIDevice4::OfferResources1 +
    + + +

    Restores access to resources that were previously offered by calling .

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns an success or error code, including E_INVALIDARG if the resources are invalid.

    + +

    After you call OfferResources1 to offer one or more resources, you must call ReclaimResources1 before you can use those resources again.

    To reclaim shared resources, call ReclaimResources1 only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources1 only while you hold the mutex.

    +
    + + mt732706 + HRESULT IDXGIDevice4::ReclaimResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer] DXGI_RECLAIM_RESOURCE_RESULTS* pResults) + IDXGIDevice4::ReclaimResources1 +
    + + +

    Restores access to resources that were previously offered by calling .

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns an success or error code, including E_INVALIDARG if the resources are invalid.

    + +

    After you call OfferResources1 to offer one or more resources, you must call ReclaimResources1 before you can use those resources again.

    To reclaim shared resources, call ReclaimResources1 only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources1 only while you hold the mutex.

    +
    + + mt732706 + HRESULT IDXGIDevice4::ReclaimResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer] DXGI_RECLAIM_RESOURCE_RESULTS* pResults) + IDXGIDevice4::ReclaimResources1 +
    + + +

    Restores access to resources that were previously offered by calling .

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns an success or error code, including E_INVALIDARG if the resources are invalid.

    + +

    After you call OfferResources1 to offer one or more resources, you must call ReclaimResources1 before you can use those resources again.

    To reclaim shared resources, call ReclaimResources1 only on one of the sharing devices. To ensure exclusive access to the resources, you must use an object and then call ReclaimResources1 only while you hold the mutex.

    +
    + + mt732706 + HRESULT IDXGIDevice4::ReclaimResources1([In] unsigned int NumResources,[In, Buffer] const IDXGIResource** ppResources,[Out, Buffer] DXGI_RECLAIM_RESOURCE_RESULTS* pResults) + IDXGIDevice4::ReclaimResources1 +
    + + +

    The interface exposes methods to indicate user preference for the operating system's stereoscopic 3D display behavior and to set stereoscopic 3D display status to enable or disable.

    We recommend that you not use to query or set system-wide stereoscopic 3D settings in your stereoscopic 3D apps. Instead, for your windowed apps, call the method to determine whether to render in stereo; for your full-screen apps, call the method and then determine whether any of the returned display modes support rendering in stereo.

    +
    + + Note?? The interface is only used by the Display app of the operating system's Control Panel or by control applets from third party graphics vendors. This interface is not meant for developers of end-user apps.?Note?? The interface does not exist for Windows Store apps.?

    Call QueryInterface from a factory object (, or ) to retrieve the interface. The following code shows how.

     * pDXGIDisplayControl;	
    +            hr = g_pDXGIFactory->QueryInterface(__uuidof(), (void **)&pDXGIDisplayControl);

    The operating system processes changes to stereo-enabled configuration asynchronously. Therefore, these changes might not be immediately visible in every process that calls to query for stereo configuration. Control applets can use the or method to register for notifications of all stereo configuration changes.

    Platform Update for Windows?7:?? Stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404552 + IDXGIDisplayControl + IDXGIDisplayControl +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a Boolean value that indicates whether the operating system's stereoscopic 3D display behavior is enabled.

    +
    + +

    You pass a Boolean value to the method to either enable or disable the operating system's stereoscopic 3D display behavior. TRUE enables the operating system's stereoscopic 3D display behavior and disables it.

    +
    + + hh404553 + IsStereoEnabled + IsStereoEnabled + BOOL IDXGIDisplayControl::IsStereoEnabled() +
    + + +

    Set a Boolean value to either enable or disable the operating system's stereoscopic 3D display behavior.

    +
    + +

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, SetStereoEnabled doesn't change stereoscopic 3D display behavior because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404554 + SetStereoEnabled + SetStereoEnabled + void IDXGIDisplayControl::SetStereoEnabled([In] BOOL enabled) +
    + + +

    Retrieves a Boolean value that indicates whether the operating system's stereoscopic 3D display behavior is enabled.

    +
    +

    IsStereoEnabled returns TRUE when the operating system's stereoscopic 3D display behavior is enabled and when this behavior is disabled.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, IsStereoEnabled always returns because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    You pass a Boolean value to the method to either enable or disable the operating system's stereoscopic 3D display behavior. TRUE enables the operating system's stereoscopic 3D display behavior and disables it.

    +
    + + hh404553 + BOOL IDXGIDisplayControl::IsStereoEnabled() + IDXGIDisplayControl::IsStereoEnabled +
    + + +

    Set a Boolean value to either enable or disable the operating system's stereoscopic 3D display behavior.

    +
    +

    A Boolean value that either enables or disables the operating system's stereoscopic 3D display behavior. TRUE enables the operating system's stereoscopic 3D display behavior and disables it.

    + +

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, SetStereoEnabled doesn't change stereoscopic 3D display behavior because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    +
    + + hh404554 + void IDXGIDisplayControl::SetStereoEnabled([In] BOOL enabled) + IDXGIDisplayControl::SetStereoEnabled +
    + + +

    Enables creating Microsoft DirectX Graphics Infrastructure (DXGI) objects.

    +
    + + dn457942 + IDXGIFactory3 + IDXGIFactory3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the flags that were used when a Microsoft DirectX Graphics Infrastructure (DXGI) object was created.

    +
    + +

    The GetCreationFlags method returns flags that were passed to the CreateDXGIFactory2 function, or were implicitly constructed by CreateDXGIFactory, CreateDXGIFactory1, , or D3D11CreateDeviceAndSwapChain.

    +
    + + dn457943 + GetCreationFlags + GetCreationFlags + unsigned int IDXGIFactory3::GetCreationFlags() +
    + + +

    Gets the flags that were used when a Microsoft DirectX Graphics Infrastructure (DXGI) object was created.

    +
    +

    The creation flags.

    + +

    The GetCreationFlags method returns flags that were passed to the CreateDXGIFactory2 function, or were implicitly constructed by CreateDXGIFactory, CreateDXGIFactory1, , or D3D11CreateDeviceAndSwapChain.

    +
    + + dn457943 + unsigned int IDXGIFactory3::GetCreationFlags() + IDXGIFactory3::GetCreationFlags +
    + + +

    This interface enables a single method to support variable refresh rate displays.

    +
    + + mt722566 + IDXGIFactory5 + IDXGIFactory5 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Used to check for hardware feature support.

    +
    +

    Specifies one member of to query support for.

    +

    Specifies a reference to a buffer that will be filled with data that describes the feature support.

    +

    The size, in bytes, of pFeatureSupportData.

    +

    This method returns an success or error code.

    + +

    Refer to the description of .

    +
    + + mt722567 + HRESULT IDXGIFactory5::CheckFeatureSupport([In] DXGI_FEATURE Feature,[Out, Buffer] void* pFeatureSupportData,[In] unsigned int FeatureSupportDataSize) + IDXGIFactory5::CheckFeatureSupport +
    + + +

    Creates swap chains for desktop media apps that use DirectComposition surfaces to decode and display video.

    +
    + +

    To create a Microsoft DirectX Graphics Infrastructure (DXGI) media factory interface, pass into either the CreateDXGIFactory or CreateDXGIFactory1 function or call QueryInterface from a factory object returned by CreateDXGIFactory, CreateDXGIFactory1, or CreateDXGIFactory2.

    Because you can create a Direct3D device without creating a swap chain, you might need to retrieve the factory that is used to create the device in order to create a swap chain. You can request the , , , or interface from the Direct3D device and then use the method to locate the factory. The following code shows how.

     * pDXGIDevice;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice);  * pDXGIAdapter;	
    +            hr = pDXGIDevice->GetParent(__uuidof(), (void **)&pDXGIAdapter);  * pIDXGIFactory;	
    +            pDXGIAdapter->GetParent(__uuidof(), (void **)&pIDXGIFactory);
    +
    + + dn384128 + IDXGIFactoryMedia + IDXGIFactoryMedia +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a YUV swap chain for an existing DirectComposition surface handle.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    CreateSwapChainForCompositionSurfaceHandle returns:

    • if it successfully created a swap chain.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if the calling application provided invalid data, for example, if pDesc, pYuvDecodeBuffers, or ppSwapChain is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic that are defined by the type of device that you pass to pDevice.
    + + dn384130 + HRESULT IDXGIFactoryMedia::CreateSwapChainForCompositionSurfaceHandle([In] IUnknown* pDevice,[In, Optional] void* hSurface,[In] const DXGI_SWAP_CHAIN_DESC1* pDesc,[In, Optional] IDXGIOutput* pRestrictToOutput,[Out] IDXGISwapChain1** ppSwapChain) + IDXGIFactoryMedia::CreateSwapChainForCompositionSurfaceHandle +
    + + +

    Creates a YUV swap chain for an existing DirectComposition surface handle. The swap chain is created with pre-existing buffers and very few descriptive elements are required. Instead, this method requires a DirectComposition surface handle and an buffer to hold decoded frame data. The swap chain format is determined by the format of the subresources of the .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    CreateDecodeSwapChainForCompositionSurfaceHandle returns:

    • if it successfully created a swap chain.
    • E_OUTOFMEMORY if memory is unavailable to complete the operation.
    • if the calling application provided invalid data, for example, if pDesc, pYuvDecodeBuffers, or ppSwapChain is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic that are defined by the type of device that you pass to pDevice.
    + +

    The provided via the pYuvDecodeBuffers parameter must point to at least one subresource, and all subresources must be created with the flag.

    +
    + + dn384129 + HRESULT IDXGIFactoryMedia::CreateDecodeSwapChainForCompositionSurfaceHandle([In] IUnknown* pDevice,[In, Optional] void* hSurface,[In] DXGI_DECODE_SWAP_CHAIN_DESC* pDesc,[In] IDXGIResource* pYuvDecodeBuffers,[In, Optional] IDXGIOutput* pRestrictToOutput,[Out] IDXGIDecodeSwapChain** ppSwapChain) + IDXGIFactoryMedia::CreateDecodeSwapChainForCompositionSurfaceHandle +
    + + +

    Enables performing bulk operations across all SurfaceImageSource objects created in the same process.

    +
    + + dn448959 + ISurfaceImageSourceManagerNative + ISurfaceImageSourceManagerNative +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Flushes all current GPU work for all SurfaceImageSource or VirtualSurfaceImageSource objects associated with the given device.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The FlushAllSurfacesWithDevice method flushes current GPU work for all SurfaceImageSource objects that were created with device. This GPU work includes Direct2D rendering work and internal GPU work done by the framework associated with rendering. This is useful if an application has created multiple SurfaceImageSource objects and needs to flush the GPU work for all of these surfaces from the background rendering thread. By flushing this work from the background thread the work can be better parallelized, with work being done on the UI thread to improve performance.

    You can call the FlushAllSurfacesWithDevice method from a non-UI thread.

    +
    + + dn448960 + HRESULT ISurfaceImageSourceManagerNative::FlushAllSurfacesWithDevice([In] IUnknown* device) + ISurfaceImageSourceManagerNative::FlushAllSurfacesWithDevice +
    + + +

    Provides the implementation of a shared fixed-size surface for Direct2D drawing.

    Note??If the surface is larger than the screen size, use instead.? +
    + +

    This interface provides the native implementation of the SurfaceImageSource Windows runtime type. To obtain a reference to , you must cast a SurfaceImageSource instance to IInspectable or , and call QueryInterface.

     Microsoft::WRL::ComPtr<>	m_sisNative;	
    +            // ...	
    +            IInspectable* sisInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(surfaceImageSource);	
    +            sisInspectable->QueryInterface(__uuidof(), (void **)&m_sisNative) 
    +
    + + hh848322 + ISurfaceImageSourceNative + ISurfaceImageSourceNative +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the DXGI device, created with , that will draw the surface. This method must be called from the UI thread.

    +
    + + hh848325 + SetDevice + SetDevice + HRESULT ISurfaceImageSourceNative::SetDevice([In] IDXGIDevice* device) +
    + + +

    Sets the DXGI device, created with , that will draw the surface. This method must be called from the UI thread.

    +
    +

    Pointer to the DXGI device interface.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh848325 + HRESULT ISurfaceImageSourceNative::SetDevice([In] IDXGIDevice* device) + ISurfaceImageSourceNative::SetDevice +
    + + +

    Opens the supplied DXGI surface for drawing.

    +
    +

    The region of the surface that will be drawn into.

    +

    Receives the point (x,y) offset of the surface that will be drawn into.

    +

    Receives a reference to the surface for drawing.

    + +

    If the app window that contains the SurfaceImageSource isn't active, like when it's suspended, calling the BeginDraw method returns an error.

    +
    + + hh848323 + HRESULT ISurfaceImageSourceNative::BeginDraw([In] RECT updateRect,[Out] IDXGISurface** surface,[Out] POINT* offset) + ISurfaceImageSourceNative::BeginDraw +
    + + +

    Closes the surface draw operation.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh848324 + HRESULT ISurfaceImageSourceNative::EndDraw() + ISurfaceImageSourceNative::EndDraw +
    + + +

    Provides the implementation of a shared Microsoft DirectX surface which is displayed in a SurfaceImageSource or VirtualSurfaceImageSource.

    +
    + +

    The interface provides the native implementation of the SurfaceImageSource class. To get a reference to the interface, you must cast a SurfaceImageSource instance to IInspectable or , and call the QueryInterface method.

     Microsoft::WRL::ComPtr<>	m_sisD2DNative;	
    +            // ...	
    +            IInspectable* sisInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(surfaceImageSource);	
    +            sisInspectable->QueryInterface(__uuidof(), (void **)&m_sisD2DNative) 

    The interface provides high-performance batched Direct2D drawing, which enables drawing to multiple different SurfaceImageSource or VirtualSurfaceImageSource objects in the same batch, as long as they share the same Direct2D device. Batching can improve performance when updating multiple surfaces at the same time.

    The interface enables drawing to a SurfaceImageSource or VirtualSurfaceImageSource from one or more background threads, which allows high-performance DirectX rendering off the UI thread.

    Only call the SetDevice, BeginDraw, and EndDraw methods on interface, not on the or interfaces.

    In order to support batching updates to multiple surfaces to improve performance, you can pass an to the SetDevice method, instead of an . The BeginDraw method can then optionally return a shared , which the app uses to draw all content for that update.

    To draw to the surface from a background thread, you must set any DirectX resources, including the Microsoft Direct3D device, Direct3D device context, Direct2D device, and Direct2D device context, to enable multithreading support.

    You can call the BeginDraw, SuspendDraw, and ResumeDraw methods from any background thread to enable high-performance multithreaded drawing.

    Always call the EndDraw method on the UI thread in order to synchronize updating the DirectX content with the current XAML UI thread frame. You can call BeginDraw on a background thread, call SuspendDraw when you're done drawing on the background thread, and call EndDraw on the UI thread.

    Use SuspendDraw and ResumeDraw to suspend and resume drawing on any background or UI thread.

    Handle the SurfaceContentsLost event to determine when you need to recreate content which may be lost if the system resets the GPU.

    +
    + + dn302137 + ISurfaceImageSourceNativeWithD2D + ISurfaceImageSourceNativeWithD2D +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the Microsoft DirectX Graphics Infrastructure (DXGI) or Direct2D device, created with , that will draw the surface.

    +
    + + dn302141 + SetDevice + SetDevice + HRESULT ISurfaceImageSourceNativeWithD2D::SetDevice([In] IUnknown* device) +
    + + +

    Sets the Microsoft DirectX Graphics Infrastructure (DXGI) or Direct2D device, created with , that will draw the surface.

    +
    +

    Pointer to the DXGI device interface. You can pass an to signal that this surface participates in Direct2D batching to improve performance when updating Direct2D content across multiple surfaces. The device must have multithreading supported enabled if the app draws to the surface from a background thread.

    +

    This method fails when the SurfaceImageSource is larger than the maximum texture size supported by the Direct3D device. Apps should use VirtualSurfaceImageSource for surfaces larger than the maximum texture size supported by the Direct3D device.

    + + dn302141 + HRESULT ISurfaceImageSourceNativeWithD2D::SetDevice([In] IUnknown* device) + ISurfaceImageSourceNativeWithD2D::SetDevice +
    + + +

    Initiates an update to the associated SurfaceImageSource or VirtualSurfaceImageSource.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn302138 + HRESULT ISurfaceImageSourceNativeWithD2D::BeginDraw([In] const RECT& updateRect,[In] const GUID& iid,[Out] void** updateObject,[Out] POINT* offset) + ISurfaceImageSourceNativeWithD2D::BeginDraw +
    + + +

    Closes the surface draw operation.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Always call the EndDraw method on the UI thread in order to synchronize updating the Microsoft DirectX content with the current XAML UI thread frame.

    +
    + + dn302139 + HRESULT ISurfaceImageSourceNativeWithD2D::EndDraw() + ISurfaceImageSourceNativeWithD2D::EndDraw +
    + + +

    Suspends the drawing operation.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn302142 + HRESULT ISurfaceImageSourceNativeWithD2D::SuspendDraw() + ISurfaceImageSourceNativeWithD2D::SuspendDraw +
    + + +

    Resume the drawing operation.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn302140 + HRESULT ISurfaceImageSourceNativeWithD2D::ResumeDraw() + ISurfaceImageSourceNativeWithD2D::ResumeDraw +
    + + + No documentation. + + + ISwapChainBackgroundPanelNative + ISwapChainBackgroundPanelNative + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the DirectX swap chain for SwapChainBackgroundPanel.

    +
    + + hh848327 + SetSwapChain + SetSwapChain + HRESULT ISwapChainBackgroundPanelNative::SetSwapChain([In] IDXGISwapChain* swapChain) +
    + + +

    Sets the DirectX swap chain for SwapChainBackgroundPanel.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh848327 + HRESULT ISwapChainBackgroundPanelNative::SetSwapChain([In] IDXGISwapChain* swapChain) + ISwapChainBackgroundPanelNative::SetSwapChain +
    + + +

    Provides interoperation between XAML and a DirectX swap chain. Unlike SwapChainBackgroundPanel, a SwapChainPanel can appear at any level in the XAML display tree, and more than 1 can be present in any given tree.

    +
    + +

    This interface provides the native implementation of the Windows::UI::XAML::Control::SwapChainPanel Windows Runtime type. To obtain a reference to , you must cast a SwapChainPanel instance to IInspectable or , and call QueryInterface.

     Microsoft::WRL::ComPtr<>	m_swapChainNative;	
    +            // ...	
    +            IInspectable* panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainPanel);	
    +            panelInspectable->QueryInterface(__uuidof(), (void **)&m_swapChainNative); 
    +
    + + dn302143 + ISwapChainPanelNative + ISwapChainPanelNative +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the DirectX swap chain for SwapChainPanel.

    +
    + + dn302144 + SetSwapChain + SetSwapChain + HRESULT ISwapChainPanelNative::SetSwapChain([In] IDXGISwapChain* swapChain) +
    + + +

    Sets the DirectX swap chain for SwapChainPanel.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn302144 + HRESULT ISwapChainPanelNative::SetSwapChain([In] IDXGISwapChain* swapChain) + ISwapChainPanelNative::SetSwapChain +
    + + +

    Provides interoperation between XAML and a DirectX swap chain. Unlike SwapChainBackgroundPanel, a SwapChainPanel can appear at any level in the XAML display tree, and more than 1 can be present in any given tree.

    +
    + +

    This interface provides the native implementation of the Windows::UI::XAML::Control::SwapChainPanel Windows Runtime type. To obtain a reference to , you must cast a SwapChainPanel instance to IInspectable or , and call QueryInterface.

     Microsoft::WRL::ComPtr<>	m_swapChainNative2;	
    +            // ...	
    +            IInspectable* panelInspectable = (IInspectable*) reinterpret_cast<IInspectable*>(swapChainPanel);	
    +            panelInspectable->QueryInterface(__uuidof(), (void **)&m_swapChainNative2); 
    +
    + + dn858172 + ISwapChainPanelNative2 + ISwapChainPanelNative2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the DirectX swap chain for SwapChainPanel using a handle to the swap chain.

    +
    + +

    SetSwapChain(HANDLE swapChainHandle) allows a swap chain to be rendered by referencing a shared handle to the swap chain. This enables scenarios where a swap chain is created in one process and needs to be passed to another process.

    XAML supports setting a DXGI swap chain as the content of a SwapChainPanel element. Apps accomplish this by querying for the interface from a SwapChainPanel instance and calling SetSwapChain( *swapChain).

    This process works for references to in process swap chains. However, this doesn?t work for VoIP apps, which use a two-process model to enable continuing calls on a background process when a foreground process is suspended or shut down. This two-process implementation requires the ability to pass a shared handle to a swap chain, rather than a reference, created on the background process to the foreground process to be rendered in a XAML SwapChainPanel in the foreground app.

     <!-- XAML markup --> 	
    +            <Page>  <SwapChainPanel x:Name=?captureStreamDisplayPanel? /> 	
    +            </Page>  // Definitions 	
    +            ComPtr<> m_swapChain; 	
    +            HANDLE m_swapChainHandle; 	
    +            ComPtr<> m_d3dDevice; 	
    +            ComPtr<> dxgiAdapter; 	
    +            ComPtr<> dxgiFactory; 	
    +            ComPtr<> dxgiFactoryMedia; 	
    +            ComPtr<> dxgiDevice; 	
    +             swapChainDesc = {0};  // Get DXGI factory (assume standard boilerplate has created D3D11Device) 	
    +            m_d3dDevice.As(&dxgiDevice); 	
    +            dxgiDevice->GetAdapter(&dxgiAdapter); 	
    +            dxgiAdapter->GetParent(__uuidof(), &dxgiFactory);  // Create swap chain and get handle 	
    +            (GENERIC_ALL, nullptr, &m_swapChainHandle); 	
    +            dxgiFactory.As(&dxgiFactoryMedia); 	
    +            dxgiFactoryMedia->CreateSwapChainForCompositionSurfaceHandle(  m_d3dDevice.Get(),  m_swapChainHandle,  &swapChainDesc,  nullptr,  &m_swapChain 	
    +            );  // Set swap chain to display in a SwapChainPanel 	
    +            ComPtr<> panelNative; 	
    +            reinterpret_cast<*>(captureStreamDisplayPanel)->QueryInterface(IID_PPV_ARGS(&panelNative))); 	
    +            panelNative->SetSwapChainHandle(m_swapChainHandle);  
    +
    + + dn858173 + SetSwapChainHandle + SetSwapChainHandle + HRESULT ISwapChainPanelNative2::SetSwapChainHandle([In] void* swapChainHandle) +
    + + +

    Sets the DirectX swap chain for SwapChainPanel using a handle to the swap chain.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    SetSwapChain(HANDLE swapChainHandle) allows a swap chain to be rendered by referencing a shared handle to the swap chain. This enables scenarios where a swap chain is created in one process and needs to be passed to another process.

    XAML supports setting a DXGI swap chain as the content of a SwapChainPanel element. Apps accomplish this by querying for the interface from a SwapChainPanel instance and calling SetSwapChain( *swapChain).

    This process works for references to in process swap chains. However, this doesn?t work for VoIP apps, which use a two-process model to enable continuing calls on a background process when a foreground process is suspended or shut down. This two-process implementation requires the ability to pass a shared handle to a swap chain, rather than a reference, created on the background process to the foreground process to be rendered in a XAML SwapChainPanel in the foreground app.

     <!-- XAML markup --> 	
    +            <Page>  <SwapChainPanel x:Name=?captureStreamDisplayPanel? /> 	
    +            </Page>  // Definitions 	
    +            ComPtr<> m_swapChain; 	
    +            HANDLE m_swapChainHandle; 	
    +            ComPtr<> m_d3dDevice; 	
    +            ComPtr<> dxgiAdapter; 	
    +            ComPtr<> dxgiFactory; 	
    +            ComPtr<> dxgiFactoryMedia; 	
    +            ComPtr<> dxgiDevice; 	
    +             swapChainDesc = {0};  // Get DXGI factory (assume standard boilerplate has created D3D11Device) 	
    +            m_d3dDevice.As(&dxgiDevice); 	
    +            dxgiDevice->GetAdapter(&dxgiAdapter); 	
    +            dxgiAdapter->GetParent(__uuidof(), &dxgiFactory);  // Create swap chain and get handle 	
    +            (GENERIC_ALL, nullptr, &m_swapChainHandle); 	
    +            dxgiFactory.As(&dxgiFactoryMedia); 	
    +            dxgiFactoryMedia->CreateSwapChainForCompositionSurfaceHandle(  m_d3dDevice.Get(),  m_swapChainHandle,  &swapChainDesc,  nullptr,  &m_swapChain 	
    +            );  // Set swap chain to display in a SwapChainPanel 	
    +            ComPtr<> panelNative; 	
    +            reinterpret_cast<*>(captureStreamDisplayPanel)->QueryInterface(IID_PPV_ARGS(&panelNative))); 	
    +            panelNative->SetSwapChainHandle(m_swapChainHandle);  
    +
    + + dn858173 + HRESULT ISwapChainPanelNative2::SetSwapChainHandle([In] void* swapChainHandle) + ISwapChainPanelNative2::SetSwapChainHandle +
    + + +

    Provides an interface for the implementation of drawing behaviors when a VirtualSurfaceImageSource requests an update.

    +
    + +

    This interface is implemented by the developer to provide specific drawing behaviors for updates to a VirtualSurfaceImageSource. Classes that implement this interface are provided to the , which calls the UpdatesNeeded method implementation whenever an update is requested.

    +
    + + hh848336 + IVirtualSurfaceImageSourceNative + IVirtualSurfaceImageSourceNative +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the boundaries of the visible region of the shared surface.

    +
    + + hh848331 + GetVisibleBounds + GetVisibleBounds + HRESULT IVirtualSurfaceImageSourceNative::GetVisibleBounds([Out] RECT* bounds) +
    + + +

    Invalidates a specific region of the shared surface for drawing.

    +
    +

    The region of the surface to invalidate.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh848332 + HRESULT IVirtualSurfaceImageSourceNative::Invalidate([In] RECT updateRect) + IVirtualSurfaceImageSourceNative::Invalidate +
    + + +

    Gets the total number of regions of the surface that must be updated.

    +
    +

    Receives the number of regions to update.

    + + hh848329 + HRESULT IVirtualSurfaceImageSourceNative::GetUpdateRectCount([Out] unsigned int* count) + IVirtualSurfaceImageSourceNative::GetUpdateRectCount +
    + + +

    Gets the set of regions that must be updated on the shared surface.

    +
    +

    The number of regions that must be updated. You obtain this by calling GetUpdateRectCount.

    +

    Receives a list of regions that must be updated.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh848330 + HRESULT IVirtualSurfaceImageSourceNative::GetUpdateRects([Out, Buffer] RECT* updates,[In] unsigned int count) + IVirtualSurfaceImageSourceNative::GetUpdateRects +
    + + +

    Gets the boundaries of the visible region of the shared surface.

    +
    +

    Receives a rectangle that specifies the visible region of the shared surface.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh848331 + HRESULT IVirtualSurfaceImageSourceNative::GetVisibleBounds([Out] RECT* bounds) + IVirtualSurfaceImageSourceNative::GetVisibleBounds +
    + + +

    Registers for the callback that will perform the drawing when an update to the shared surface is requested.

    +
    +

    Pointer to an implementation of .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh848334 + HRESULT IVirtualSurfaceImageSourceNative::RegisterForUpdatesNeeded([In, Optional] IVirtualSurfaceUpdatesCallbackNative* callback) + IVirtualSurfaceImageSourceNative::RegisterForUpdatesNeeded +
    + + +

    Resizes the surface.

    +
    +

    The updated width of the surface.

    +

    The updated height of the surface.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh848335 + HRESULT IVirtualSurfaceImageSourceNative::Resize([In] int newWidth,[In] int newHeight) + IVirtualSurfaceImageSourceNative::Resize +
    + + + Gets the set of regions that must be updated on the shared surface. + + + + + Event fired when an update is needed. Use to get the region to update. + + + + +

    Performs the drawing behaviors when an update to VirtualSurfaceImageSource is requested.

    +
    + +

    This method is implemented by the developer.

    +
    + + hh848337 + IVirtualSurfaceUpdatesCallbackNative + IVirtualSurfaceUpdatesCallbackNative +
    + + + Callback method for IVirtualSurfaceUpdatesCallbackNative + + HRESULT IVirtualSurfaceUpdatesCallbackNative::UpdatesNeeded() + + + +

    Performs the drawing behaviors when an update to VirtualSurfaceImageSource is requested.

    +
    + +

    This method is implemented by the developer.

    +
    + + hh848337 + IVirtualSurfaceUpdatesCallbackNative + IVirtualSurfaceUpdatesCallbackNative +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Performs the drawing behaviors when an update to VirtualSurfaceImageSource is requested.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method is implemented by the developer.

    +
    + + hh848337 + HRESULT IVirtualSurfaceUpdatesCallbackNative::UpdatesNeeded() + IVirtualSurfaceUpdatesCallbackNative::UpdatesNeeded +
    + + +

    Represents a keyed mutex, which allows exclusive access to a shared resource that is used by multiple devices.

    +
    + +

    The is required to create a resource capable of supporting the interface.

    An should be retrieved for each device sharing a resource. In Direct3D 10.1, such a resource that is shared between two or more devices is created with the D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX flag. In Direct3D 11, such a resource that is shared between two or more devices is created with the flag.

    For information about creating a keyed mutex, see the method.

    +
    + + ff471338 + IDXGIKeyedMutex + IDXGIKeyedMutex +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Using a key, acquires exclusive rendering access to a shared resource.

    +
    +

    A value that indicates which device to give access to. This method will succeed when the device that currently owns the surface calls the method using the same value. This value can be any UINT64 value.

    +

    The time-out interval, in milliseconds. This method will return if the interval elapses, and the keyed mutex has not been released using the specified Key. If this value is set to zero, the AcquireSync method will test to see if the keyed mutex has been released and returns immediately. If this value is set to INFINITE, the time-out interval will never elapse.

    +

    Return if successful.

    If the owning device attempted to create another keyed mutex on the same shared resource, AcquireSync returns E_FAIL.

    AcquireSync can also return the following DWORD constants. Therefore, you should explicitly check for these constants. If you only use the SUCCEEDED macro on the return value to determine if AcquireSync succeeded, you will not catch these constants.

    • WAIT_ABANDONED - The shared surface and keyed mutex are no longer in a consistent state. If AcquireSync returns this value, you should release and recreate both the keyed mutex and the shared surface.
    • WAIT_TIMEOUT - The time-out interval elapsed before the specified key was released.
    + +

    The AcquireSync method creates a lock to a surface that is shared between multiple devices, allowing only one device to render to a surface at a time. This method uses a key to determine which device currently has exclusive access to the surface.

    When a surface is created using the D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX value of the D3D10_RESOURCE_MISC_FLAG enumeration, you must call the AcquireSync method before rendering to the surface. You must call the ReleaseSync method when you are done rendering to a surface.

    To acquire a reference to the keyed mutex object of a shared resource, call the QueryInterface method of the resource and pass in the UUID of the interface. For more information about acquiring this reference, see the following code example.

    The AcquireSync method uses the key as follows, depending on the state of the surface:

    • On initial creation, the surface is unowned and any device can call the AcquireSync method to gain access. For an unowned device, only a key of 0 will succeed. Calling the AcquireSync method for any other key will stall the calling CPU thread.
    • If the surface is owned by a device when you call the AcquireSync method, the CPU thread that called the AcquireSync method will stall until the owning device calls the ReleaseSync method using the same Key.
    • If the surface is unowned when you call the AcquireSync method (for example, the last owning device has already called the ReleaseSync method), the AcquireSync method will succeed if you specify the same key that was specified when the ReleaseSync method was last called. Calling the AcquireSync method using any other key will cause a stall.
    • When the owning device calls the ReleaseSync method with a particular key, and more than one device is waiting after calling the AcquireSync method using the same key, any one of the waiting devices could be woken up first. The order in which devices are woken up is undefined.
    • A keyed mutex does not support recursive calls to the AcquireSync method.
    +
    + + ff471339 + HRESULT IDXGIKeyedMutex::AcquireSync([In] unsigned longlong Key,[In] unsigned int dwMilliseconds) + IDXGIKeyedMutex::AcquireSync +
    + + +

    Using a key, releases exclusive rendering access to a shared resource.

    +
    +

    A value that indicates which device to give access to. This method succeeds when the device that currently owns the surface calls the ReleaseSync method using the same value. This value can be any UINT64 value.

    +

    Returns if successful.

    If the device attempted to release a keyed mutex that is not valid or owned by the device, ReleaseSync returns E_FAIL.

    + +

    The ReleaseSync method releases a lock to a surface that is shared between multiple devices. This method uses a key to determine which device currently has exclusive access to the surface.

    When a surface is created using the D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX value of the D3D10_RESOURCE_MISC_FLAG enumeration, you must call the method before rendering to the surface. You must call the ReleaseSync method when you are done rendering to a surface.

    After you call the ReleaseSync method, the shared resource is unset from the rendering pipeline.

    To acquire a reference to the keyed mutex object of a shared resource, call the QueryInterface method of the resource and pass in the UUID of the interface. For more information about acquiring this reference, see the following code example.

    +
    + + ff471340 + HRESULT IDXGIKeyedMutex::ReleaseSync([In] unsigned longlong Key) + IDXGIKeyedMutex::ReleaseSync +
    + + +

    An interface represents an adapter output (such as a monitor).

    +
    + +

    To see the outputs available, use . To see the specific output that the swap chain will update, use .

    +
    + + bb174546 + IDXGIOutput + IDXGIOutput +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a description of the output.

    +
    + +

    On a high DPI desktop, GetDesc returns the visualized screen size unless the app is marked high DPI aware. For info about writing DPI-aware Win32 apps, see High DPI.

    +
    + + bb174548 + GetDesc + GetDesc + HRESULT IDXGIOutput::GetDesc([Out] DXGI_OUTPUT_DESC* pDesc) +
    + + +

    Gets a description of the gamma-control capabilities.

    +
    + +

    Note??Calling this method is only supported while in full-screen mode.?

    For info about using gamma correction, see Using gamma correction.

    +
    + + bb174553 + GetGammaControlCapabilities + GetGammaControlCapabilities + HRESULT IDXGIOutput::GetGammaControlCapabilities([Out] DXGI_GAMMA_CONTROL_CAPABILITIES* pGammaCaps) +
    + + +

    Gets or sets the gamma control settings.

    +
    + +

    Note??Calling this method is only supported while in full-screen mode.?

    For info about using gamma correction, see Using gamma correction.

    +
    + + bb174552 + GetGammaControl / SetGammaControl + GetGammaControl + HRESULT IDXGIOutput::GetGammaControl([Out] DXGI_GAMMA_CONTROL* pArray) +
    + + +

    Gets statistics about recently rendered frames.

    +
    + +

    This API is similar to .

    Note??Calling this method is only supported while in full-screen mode.? +
    + + bb174551 + GetFrameStatistics + GetFrameStatistics + HRESULT IDXGIOutput::GetFrameStatistics([Out] DXGI_FRAME_STATISTICS* pStats) +
    + + +

    Get a description of the output.

    +
    +

    A reference to the output description (see ).

    +

    Returns a code that indicates success or failure. if successful, if pDesc is passed in as null.

    + +

    On a high DPI desktop, GetDesc returns the visualized screen size unless the app is marked high DPI aware. For info about writing DPI-aware Win32 apps, see High DPI.

    +
    + + bb174548 + HRESULT IDXGIOutput::GetDesc([Out] DXGI_OUTPUT_DESC* pDesc) + IDXGIOutput::GetDesc +
    + + +

    [Starting with Direct3D 11.1, we recommend not to use GetDisplayModeList anymore to retrieve the matching display mode. Instead, use , which supports stereo display mode.]

    Gets the display modes that match the requested format and other input options.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    Returns one of the following DXGI_ERROR. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case is returned (if there is not enough room for all the display modes). If GetDisplayModeList is called from a Remote Desktop Services session (formerly Terminal Services session), is returned.

    + +

    In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this API to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).

    As shown, this API is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.

     UINT num = 0;	
    +             format = ;	
    +            UINT flags         = ; pOutput->GetDisplayModeList( format, flags, &num, 0); ...  * pDescs = new [num];	
    +            pOutput->GetDisplayModeList( format, flags, &num, pDescs); 
    +
    + + bb174549 + HRESULT IDXGIOutput::GetDisplayModeList([In] DXGI_FORMAT EnumFormat,[In] unsigned int Flags,[InOut] unsigned int* pNumModes,[Out, Buffer, Optional] DXGI_MODE_DESC* pDesc) + IDXGIOutput::GetDisplayModeList +
    + + +

    [Starting with Direct3D 11.1, we recommend not to use FindClosestMatchingMode anymore to find the display mode that most closely matches the requested display mode. Instead, use , which supports stereo display mode.]

    Finds the display mode that most closely matches the requested display mode.

    +
    + No documentation. + No documentation. + No documentation. +

    Returns one of the following DXGI_ERROR.

    + +

    FindClosestMatchingMode behaves similarly to the except FindClosestMatchingMode considers only the mono display modes. considers only stereo modes if you set the Stereo member in the structure that pModeToMatch points to, and considers only mono modes if Stereo is not set.

    returns a matched display-mode set with only stereo modes or only mono modes. + FindClosestMatchingMode behaves as though you specified the input mode as mono.

    +
    + + bb174547 + HRESULT IDXGIOutput::FindClosestMatchingMode([In] const DXGI_MODE_DESC* pModeToMatch,[Out] DXGI_MODE_DESC* pClosestMatch,[In, Optional] IUnknown* pConcernedDevice) + IDXGIOutput::FindClosestMatchingMode +
    + + +

    Halt a thread until the next vertical blank occurs.

    +
    +

    Returns one of the following DXGI_ERROR.

    + +

    A vertical blank occurs when the raster moves from the lower right corner to the upper left corner to begin drawing the next frame.

    +
    + + bb174559 + HRESULT IDXGIOutput::WaitForVBlank() + IDXGIOutput::WaitForVBlank +
    + + +

    Takes ownership of an output.

    +
    +

    A reference to the interface of a device (such as an ID3D10Device).

    +

    Set to TRUE to enable other threads or applications to take ownership of the device; otherwise, set to .

    +

    Returns one of the DXGI_ERROR values.

    + +

    When you are finished with the output, call .

    TakeOwnership should not be called directly by applications, since results will be unpredictable. It is called implicitly by the DXGI swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.

    +
    + + bb174558 + HRESULT IDXGIOutput::TakeOwnership([In] IUnknown* pDevice,[In] BOOL Exclusive) + IDXGIOutput::TakeOwnership +
    + + +

    Releases ownership of the output.

    +
    + +

    If you are not using a swap chain, get access to an output by calling and release it when you are finished by calling . An application that uses a swap chain will typically not call either of these methods.

    +
    + + bb174554 + void IDXGIOutput::ReleaseOwnership() + IDXGIOutput::ReleaseOwnership +
    + + +

    Gets a description of the gamma-control capabilities.

    +
    +

    A reference to a description of the gamma-control capabilities (see ).

    +

    Returns one of the DXGI_ERROR values.

    + +

    Note??Calling this method is only supported while in full-screen mode.?

    For info about using gamma correction, see Using gamma correction.

    +
    + + bb174553 + HRESULT IDXGIOutput::GetGammaControlCapabilities([Out] DXGI_GAMMA_CONTROL_CAPABILITIES* pGammaCaps) + IDXGIOutput::GetGammaControlCapabilities +
    + + +

    Sets the gamma controls.

    +
    +

    A reference to a structure that describes the gamma curve to set.

    +

    Returns one of the DXGI_ERROR values.

    + +

    Note??Calling this method is only supported while in full-screen mode.?

    For info about using gamma correction, see Using gamma correction.

    +
    + + bb174557 + HRESULT IDXGIOutput::SetGammaControl([In] const DXGI_GAMMA_CONTROL* pArray) + IDXGIOutput::SetGammaControl +
    + + +

    Gets the gamma control settings.

    +
    +

    An array of gamma control settings (see ).

    +

    Returns one of the DXGI_ERROR values.

    + +

    Note??Calling this method is only supported while in full-screen mode.?

    For info about using gamma correction, see Using gamma correction.

    +
    + + bb174552 + HRESULT IDXGIOutput::GetGammaControl([Out] DXGI_GAMMA_CONTROL* pArray) + IDXGIOutput::GetGammaControl +
    + + +

    Changes the display mode.

    +
    +

    A reference to a surface (see ) used for rendering an image to the screen. The surface must have been created as a back buffer (DXGI_USAGE_BACKBUFFER).

    +

    Returns one of the DXGI_ERROR values.

    + +

    should not be called directly by applications, since results will be unpredictable. It is called implicitly by the DXGI swap chain object during full-screen transitions, and should not be used as a substitute for swap-chain methods.

    This method should only be called between and calls.

    +
    + + bb174556 + HRESULT IDXGIOutput::SetDisplaySurface([In] IDXGISurface* pScanoutSurface) + IDXGIOutput::SetDisplaySurface +
    + + +

    [Starting with Direct3D 11.1, we recommend not to use GetDisplaySurfaceData anymore to retrieve the current display surface. Instead, use , which supports stereo display mode.]

    Gets a copy of the current display surface.

    +
    + No documentation. +

    Returns one of the DXGI_ERROR values.

    + +

    can only be called when an output is in full-screen mode. If the method succeeds, DXGI fills the destination surface.

    Use to determine the size (width and height) of the output when you want to allocate space for the destination surface. This is true regardless of target monitor rotation. A destination surface created by a graphics component (such as Direct3D 10) must be created with CPU-write permission (see D3D10_CPU_ACCESS_WRITE). Other surfaces should be created with CPU read-write permission (see D3D10_CPU_ACCESS_READ_WRITE). This method will modify the surface data to fit the destination surface (stretch, shrink, convert format, rotate). The stretch and shrink is performed with point-sampling.

    +
    + + bb174550 + HRESULT IDXGIOutput::GetDisplaySurfaceData([In] IDXGISurface* pDestination) + IDXGIOutput::GetDisplaySurfaceData +
    + + +

    Gets statistics about recently rendered frames.

    +
    +

    A reference to frame statistics (see ).

    +

    If this function succeeds, it returns . Otherwise, it might return .

    + +

    This API is similar to .

    Note??Calling this method is only supported while in full-screen mode.? +
    + + bb174551 + HRESULT IDXGIOutput::GetFrameStatistics([Out] DXGI_FRAME_STATISTICS* pStats) + IDXGIOutput::GetFrameStatistics +
    + + + Find the display mode that most closely matches the requested display mode. + + + Direct3D devices require UNORM formats. This method finds the closest matching available display mode to the mode specified in pModeToMatch. Similarly ranked fields (i.e. all specified, or all unspecified, etc) are resolved in the following order. ScanlineOrdering Scaling Format Resolution RefreshRate When determining the closest value for a particular field, previously matched fields are used to filter the display mode list choices, and other fields are ignored. For example, when matching Resolution, the display mode list will have already been filtered by a certain ScanlineOrdering, Scaling, and Format, while RefreshRate is ignored. This ordering doesn't define the absolute ordering for every usage scenario of FindClosestMatchingMode, because the application can choose some values initially, effectively changing the order that fields are chosen. Fields of the display mode are matched one at a time, generally in a specified order. If a field is unspecified, FindClosestMatchingMode gravitates toward the values for the desktop related to this output. If this output is not part of the desktop, then the default desktop output is used to find values. If an application uses a fully unspecified display mode, FindClosestMatchingMode will typically return a display mode that matches the desktop settings for this output. Unspecified fields are lower priority than specified fields and will be resolved later than specified fields. + + A reference to the Direct3D device interface. If this parameter is NULL, only modes whose format matches that of pModeToMatch will be returned; otherwise, only those formats that are supported for scan-out by the device are returned. + The desired display mode (see ). Members of DXGI_MODE_DESC can be unspecified indicating no preference for that member. A value of 0 for Width or Height indicates the value is unspecified. If either Width or Height are 0 both must be 0. A numerator and denominator of 0 in RefreshRate indicate it is unspecified. Other members of DXGI_MODE_DESC have enumeration values indicating the member is unspecified. If pConnectedDevice is NULL Format cannot be DXGI_FORMAT_UNKNOWN. + The mode that most closely matches pModeToMatch. + Returns one of the following . + HRESULT IDXGIOutput::FindClosestMatchingMode([In] const DXGI_MODE_DESC* pModeToMatch,[Out] DXGI_MODE_DESC* pClosestMatch,[In, Optional] IUnknown* pConcernedDevice) + + + + Gets the display modes that match the requested format and other input options. + + + In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this API to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor). As shown, this API is designed to be called twice. First to get the number of modes available, and second to return a description of the modes. + UINT num = 0; + DXGI_FORMAT format = DXGI_FORMAT_R32G32B32A32_FLOAT; + UINT flags = DXGI_ENUM_MODES_INTERLACED; pOutput->GetDisplayModeList( format, flags, &num, 0); ... DXGI_MODE_DESC * pDescs = new DXGI_MODE_DESC[num]; + pOutput->GetDisplayModeList( format, flags, &num, pDescs); + + + + The color format (see ). + format for modes to include (see {{DXGI_ENUM_MODES}}). DXGI_ENUM_MODES_SCALING needs to be specified to expose the display modes that require scaling. Centered modes, requiring no scaling and corresponding directly to the display output, are enumerated by default. + Returns a list of display modes (see ); + HRESULT IDXGIOutput::GetDisplayModeList([None] DXGI_FORMAT EnumFormat,[None] int Flags,[InOut] int* pNumModes,[Out, Buffer, Optional] DXGI_MODE_DESC* pDesc) + + + +

    An interface represents an adapter output (such as a monitor).

    +
    + +

    To determine the outputs that are available from the adapter, use . To determine the specific output that the swap chain will update, use . You can then call QueryInterface from any object to obtain an object.

    +
    + + hh404597 + IDXGIOutput1 + IDXGIOutput1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    [Starting with Direct3D 11.1, we recommend not to use GetDisplayModeList anymore to retrieve the matching display mode. Instead, use , which supports stereo display mode.]

    Gets the display modes that match the requested format and other input options.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    Returns one of the following DXGI_ERROR. It is rare, but possible, that the display modes available can change immediately after calling this method, in which case is returned (if there is not enough room for all the display modes). If GetDisplayModeList is called from a Remote Desktop Services session (formerly Terminal Services session), is returned.

    + +

    In general, when switching from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth and refresh rate of the swap chain. To exercise more control over the display mode, use this API to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).

    As shown, this API is designed to be called twice. First to get the number of modes available, and second to return a description of the modes.

     UINT num = 0;	
    +             format = ;	
    +            UINT flags         = ; pOutput->GetDisplayModeList( format, flags, &num, 0); ...  * pDescs = new [num];	
    +            pOutput->GetDisplayModeList( format, flags, &num, pDescs); 
    +
    + + bb174549 + HRESULT IDXGIOutput1::GetDisplayModeList1([In] DXGI_FORMAT EnumFormat,[In] unsigned int Flags,[InOut] unsigned int* pNumModes,[Out, Buffer, Optional] DXGI_MODE_DESC1* pDesc) + IDXGIOutput1::GetDisplayModeList1 +
    + + +

    Finds the display mode that most closely matches the requested display mode.

    +
    +

    A reference to the structure that describes the display mode to match. Members of can be unspecified, which indicates no preference for that member. A value of 0 for Width or Height indicates that the value is unspecified. If either Width or Height is 0, both must be 0. A numerator and denominator of 0 in RefreshRate indicate it is unspecified. Other members of have enumeration values that indicate that the member is unspecified. If pConcernedDevice is null, the Format member of cannot be .

    +

    A reference to the structure that receives a description of the display mode that most closely matches the display mode described at pModeToMatch.

    +

    A reference to the Direct3D device interface. If this parameter is null, FindClosestMatchingMode1 returns only modes whose format matches that of pModeToMatch; otherwise, FindClosestMatchingMode1 returns only those formats that are supported for scan-out by the device. For info about the formats that are supported for scan-out by the device at each feature level:

    • DXGI Format Support for Direct3D Feature Level 12.1 Hardware
    • DXGI Format Support for Direct3D Feature Level 12.0 Hardware
    • DXGI Format Support for Direct3D Feature Level 11.1 Hardware
    • DXGI Format Support for Direct3D Feature Level 11.0 Hardware
    • Hardware Support for Direct3D 10Level9 Formats
    • Hardware Support for Direct3D 10.1 Formats
    • Hardware Support for Direct3D 10 Formats
    +

    Returns one of the error codes described in the DXGI_ERROR topic.

    + +

    Direct3D devices require UNORM formats.

    FindClosestMatchingMode1 finds the closest matching available display mode to the mode that you specify in pModeToMatch.

    If you set the Stereo member in the structure to which pModeToMatch points to specify a stereo mode as input, FindClosestMatchingMode1 considers only stereo modes. FindClosestMatchingMode1 considers only mono modes if Stereo is not set.

    FindClosestMatchingMode1 resolves similarly ranked members of display modes (that is, all specified, or all unspecified, and so on) in the following order:

    1. ScanlineOrdering
    2. Scaling
    3. Format
    4. Resolution
    5. RefreshRate

    When FindClosestMatchingMode1 determines the closest value for a particular member, it uses previously matched members to filter the display mode list choices, and ignores other members. For example, when FindClosestMatchingMode1 matches Resolution, it already filtered the display mode list by a certain ScanlineOrdering, Scaling, and Format, while it ignores RefreshRate. This ordering doesn't define the absolute ordering for every usage scenario of FindClosestMatchingMode1, because the application can choose some values initially, which effectively changes the order of resolving members.

    FindClosestMatchingMode1 matches members of the display mode one at a time, generally in a specified order.

    If a member is unspecified, FindClosestMatchingMode1 gravitates toward the values for the desktop related to this output. If this output is not part of the desktop, FindClosestMatchingMode1 uses the default desktop output to find values. If an application uses a fully unspecified display mode, FindClosestMatchingMode1 typically returns a display mode that matches the desktop settings for this output. Because unspecified members are lower priority than specified members, FindClosestMatchingMode1 resolves unspecified members later than specified members.

    +
    + + hh404603 + HRESULT IDXGIOutput1::FindClosestMatchingMode1([In] const DXGI_MODE_DESC1* pModeToMatch,[Out] DXGI_MODE_DESC1* pClosestMatch,[In, Optional] IUnknown* pConcernedDevice) + IDXGIOutput1::FindClosestMatchingMode1 +
    + + +

    Copies the display surface (front buffer) to a user-provided resource.

    +
    +

    A reference to a resource interface that represents the resource to which GetDisplaySurfaceData1 copies the display surface.

    +

    Returns one of the error codes described in the DXGI_ERROR topic.

    + +

    GetDisplaySurfaceData1 is similar to except GetDisplaySurfaceData1 takes an and takes an .

    GetDisplaySurfaceData1 returns an error if the input resource is not a 2D texture (represented by the interface) with an array size (ArraySize member of the structure) that is equal to the swap chain buffers.

    The original and the updated GetDisplaySurfaceData1 behave exactly the same. GetDisplaySurfaceData1 was required because textures with an array size equal to 2 (ArraySize = 2) do not implement .

    You can call GetDisplaySurfaceData1 only when an output is in full-screen mode. If GetDisplaySurfaceData1 succeeds, it fills the destination resource.

    Use to determine the size (width and height) of the output when you want to allocate space for the destination resource. This is true regardless of target monitor rotation. A destination resource created by a graphics component (such as Direct3D 11) must be created with CPU write permission (see ). Other surfaces can be created with CPU read-write permission ( | ). GetDisplaySurfaceData1 modifies the surface data to fit the destination resource (stretch, shrink, convert format, rotate). GetDisplaySurfaceData1 performs the stretch and shrink with point sampling.

    +
    + + hh404609 + HRESULT IDXGIOutput1::GetDisplaySurfaceData1([In] IDXGIResource* pDestination) + IDXGIOutput1::GetDisplaySurfaceData1 +
    + + +

    Creates a desktop duplication interface from the interface that represents an adapter output.

    +
    + No documentation. + No documentation. + +

    If an application wants to duplicate the entire desktop, it must create a desktop duplication interface on each active output on the desktop. This interface does not provide an explicit way to synchronize the timing of each output image. Instead, the application must use the time stamp of each output, and then determine how to combine the images.

    For DuplicateOutput to succeed, you must create pDevice from or a later version of a DXGI factory interface that inherits from .

    If the current mode is a stereo mode, the desktop duplication interface provides the image for the left stereo image only.

    By default, only four processes can use a interface at the same time within a single session. A process can have only one desktop duplication interface on a single desktop output; however, that process can have a desktop duplication interface for each output that is part of the desktop.

    For improved performance, consider using DuplicateOutput1.

    +
    + + hh404600 + HRESULT IDXGIOutput1::DuplicateOutput([In] IUnknown* pDevice,[Out] IDXGIOutputDuplication** ppOutputDuplication) + IDXGIOutput1::DuplicateOutput +
    + + +

    [This documentation is preliminary and is subject to change.]

    Applies to: desktop apps | Metro style apps

    Gets the display modes that match the requested format and other input options.

    +
    +

    A -typed value for the color format.

    +

    A combination of DXGI_ENUM_MODES-typed values that are combined by using a bitwise OR operation. The resulting value specifies options for display modes to include. You must specify to expose the display modes that require scaling. Centered modes that require no scaling and correspond directly to the display output are enumerated by default.

    + A list of display modes + +

    GetDisplayModeList1 is updated from GetDisplayModeList to return a list of structures, which are updated mode descriptions. GetDisplayModeList behaves as though it calls GetDisplayModeList1 because GetDisplayModeList can return all of the modes that are specified by DXGI_ENUM_MODES, including stereo mode. However, GetDisplayModeList returns a list of structures, which are the former mode descriptions and do not indicate stereo mode.

    The GetDisplayModeList1 method does not enumerate stereo modes unless you specify the flag in the Flags parameter. If you specify , stereo modes are included in the list of returned modes that the pDesc parameter points to. In other words, the method returns both stereo and mono modes.

    In general, when you switch from windowed to full-screen mode, a swap chain automatically chooses a display mode that meets (or exceeds) the resolution, color depth, and refresh rate of the swap chain. To exercise more control over the display mode, use GetDisplayModeList1 to poll the set of display modes that are validated against monitor capabilities, or all modes that match the desktop (if the desktop settings are not validated against the monitor).

    The following example code shows that you need to call GetDisplayModeList1 twice. First call GetDisplayModeList1 to get the number of modes available, and second call GetDisplayModeList1 to return a description of the modes.

     UINT num = 0;	
    +             format = ;	
    +            UINT flags         = ; pOutput->GetDisplayModeList1( format, flags, &num, 0); ...  * pDescs = new [num];	
    +            pOutput->GetDisplayModeList1( format, flags, &num, pDescs); 
    +
    + hh404606 + HRESULT IDXGIOutput1::GetDisplayModeList1([In] DXGI_FORMAT EnumFormat,[In] unsigned int Flags,[InOut] unsigned int* pNumModes,[Out, Buffer, Optional] DXGI_MODE_DESC1* pDesc) + IDXGIOutput1::GetDisplayModeList1 +
    + + +

    An interface represents an adapter output (such as a monitor).

    +
    + +

    To see the outputs available, use . To see the specific output that the swap chain will update, use .

    +
    + + bb174546 + IDXGIOutput2 + IDXGIOutput2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Queries an adapter output for multiplane overlay support. If this API returns ?TRUE?, multiple swap chain composition takes place in a performant manner using overlay hardware. If this API returns false, apps should avoid using foreground swap chains (that is, avoid using swap chains created with the flag).

    +
    +

    TRUE if the output adapter is the primary adapter and it supports multiplane overlays, otherwise returns .

    + +

    See CreateSwapChainForCoreWindow for info on creating a foreground swap chain.

    +
    + + dn280411 + BOOL IDXGIOutput2::SupportsOverlays() + IDXGIOutput2::SupportsOverlays +
    + + +

    [This documentation is preliminary and is subject to change.]

    Queries an adapter output for multiplane overlay support.

    +
    +

    TRUE if the output adapter is the primary adapter and it supports multiplane overlays, otherwise returns .

    + + dn280411 + BOOL IDXGIOutput2::SupportsOverlays() + IDXGIOutput2::SupportsOverlays +
    + + +

    Represents an adapter output (such as a monitor). The interface exposes a method to check for overlay support.

    +
    + + dn903669 + IDXGIOutput3 + IDXGIOutput3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Checks for overlay support.

    +
    +

    A -typed value for the color format.

    +

    A reference to the Direct3D device interface. CheckOverlaySupport returns only support info about this scan-out device.

    +

    A reference to a variable that receives a combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for overlay support.

    + + dn903670 + HRESULT IDXGIOutput3::CheckOverlaySupport([In] DXGI_FORMAT EnumFormat,[In] IUnknown* pConcernedDevice,[Out] DXGI_OVERLAY_SUPPORT_FLAG* pFlags) + IDXGIOutput3::CheckOverlaySupport +
    + + +

    Represents an adapter output (such as a monitor). The interface exposes a method to check for overlay color space support.

    +
    + + dn903671 + IDXGIOutput4 + IDXGIOutput4 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Checks for overlay color space support.

    +
    +

    A -typed value for the color format.

    +

    A -typed value that specifies color space type to check overlay support for.

    +

    A reference to the Direct3D device interface. CheckOverlayColorSpaceSupport returns only support info about this scan-out device.

    +

    A reference to a variable that receives a combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for overlay color space support.

    + + dn903672 + HRESULT IDXGIOutput4::CheckOverlayColorSpaceSupport([In] DXGI_FORMAT Format,[In] DXGI_COLOR_SPACE_TYPE ColorSpace,[In] IUnknown* pConcernedDevice,[Out] DXGI_OVERLAY_COLOR_SPACE_SUPPORT_FLAG* pFlags) + IDXGIOutput4::CheckOverlayColorSpaceSupport +
    + + +

    An interface represents an adapter output (such as a monitor).

    +
    + +

    To see the outputs available, use . To see the specific output that the swap chain will update, use .

    +
    + + bb174546 + IDXGIOutput5 + IDXGIOutput5 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Allows specifying a list of supported formats for fullscreen surfaces that can be returned by the object.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    This method allows directly receiving the original back buffer format used by a running fullscreen application. For comparison, using the original DuplicateOutput function always converts the fullscreen surface to a 32-bit BGRA format. In cases where the current fullscreen application is using a different buffer format, a conversion to 32-bit BGRA incurs a performance penalty. Besides the performance benefit of being able to skip format conversion, using DuplicateOutput1 also allows receiving the full gamut of colors in cases where a high-color format (such as R10G10B10A2) is being presented.

    The pSupportedFormats array should only contain display scan-out formats. See Format Support for Direct3D Feature Level 11.0 Hardware for required scan-out formats at each feature level. If the current fullscreen buffer format is not contained in the pSupportedFormats array, DXGI will pick one of the supplied formats and convert the fullscreen buffer to that format before returning from . The list of supported formats should always contain , as this is the most common format for the desktop. +

    +
    + + mt679496 + HRESULT IDXGIOutput5::DuplicateOutput1([In] IUnknown* pDevice,[In] unsigned int Flags,[In] unsigned int SupportedFormatsCount,[In, Buffer] const DXGI_FORMAT* pSupportedFormats,[Out] IDXGIOutputDuplication** ppOutputDuplication) + IDXGIOutput5::DuplicateOutput1 +
    + + +

    An interface represents an adapter output (such as a monitor).

    +
    + +

    To see the outputs available, use . To see the specific output that the swap chain will update, use .

    +
    + + bb174546 + IDXGIOutput6 + IDXGIOutput6 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetDesc1 + GetDesc1 + HRESULT IDXGIOutput6::GetDesc1([Out] DXGI_OUTPUT_DESC1* pDesc) + + + + No documentation. + + No documentation. + No documentation. + + HRESULT IDXGIOutput6::GetDesc1([Out] DXGI_OUTPUT_DESC1* pDesc) + IDXGIOutput6::GetDesc1 + + + + No documentation. + + No documentation. + No documentation. + + HRESULT IDXGIOutput6::CheckHardwareCompositionSupport([Out] unsigned int* pFlags) + IDXGIOutput6::CheckHardwareCompositionSupport + + + +

    The interface accesses and manipulates the duplicated desktop image.

    +
    + +

    A collaboration application can use to access the desktop image. is supported in Desktop Window Manager (DWM) on non-8bpp DirectX full-screen modes and non-8bpp OpenGL full-screen modes. 16-bit or 32-bit GDI non-DWM desktop modes are not supported.

    An application can use on a separate thread to receive the desktop images and to feed them into their specific image-processing pipeline. The application uses to perform the following operations:

    1. Acquire the next desktop image.
    2. Retrieve the information that describes the image.
    3. Perform an operation on the image. This operation can be as simple as copying the image to a staging buffer so that the application can read the pixel data on the image. The application reads the pixel data after the application calls . Alternatively, this operation can be more complex. For example, the application can run some pixel shaders on the updated regions of the image to encode those regions for transmission to a client.
    4. After the application finishes processing each desktop image, it releases the image, loops to step 1, and repeats the steps. The application repeats these steps until it is finished processing desktop images.

    The following components of the operating system can generate the desktop image:

    • The DWM by composing the desktop image
    • A full-screen DirectX or OpenGL application
    • An application by switching to a separate desktop, for example, the secure desktop that is used to display the login screen

    All current interfaces become invalid when the operating system switches to a different component that produces the desktop image or when a mode change occurs. In these situations, the application must destroy its current interface and create a new interface.

    Examples of situations in which becomes invalid are:

    • Desktop switch
    • Mode change
    • Switch from DWM on, DWM off, or other full-screen application

    In these situations, the application must release the interface and must create a new interface for the new content. If the application does not have the appropriate privilege to the new desktop image, its call to the method fails.

    While the application processes each desktop image, the operating system accumulates all the desktop image updates into a single update. For more information about desktop updates, see Updating the desktop image data.

    The desktop image is always in the format.

    The interface does not exist for Windows Store apps.

    +
    + + hh404611 + IDXGIOutputDuplication + IDXGIOutputDuplication +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a description of a duplicated output. This description specifies the dimensions of the surface that contains the desktop image.

    +
    + +

    After an application creates an interface, it calls GetDesc to retrieve the dimensions of the surface that contains the desktop image. The format of the desktop image is always .

    +
    + + hh404618 + GetDesc + GetDesc + void IDXGIOutputDuplication::GetDesc([Out] DXGI_OUTDUPL_DESC* pDesc) +
    + + +

    Retrieves a description of a duplicated output. This description specifies the dimensions of the surface that contains the desktop image.

    +
    +

    A reference to a structure that describes the duplicated output. This parameter must not be null.

    + +

    After an application creates an interface, it calls GetDesc to retrieve the dimensions of the surface that contains the desktop image. The format of the desktop image is always .

    +
    + + hh404618 + void IDXGIOutputDuplication::GetDesc([Out] DXGI_OUTDUPL_DESC* pDesc) + IDXGIOutputDuplication::GetDesc +
    + + +

    Indicates that the application is ready to process the next desktop image.

    +
    +

    The time-out interval, in milliseconds. This interval specifies the amount of time that this method waits for a new frame before it returns to the caller. This method returns if the interval elapses, and a new desktop image is not available.

    For more information about the time-out interval, see Remarks.

    +

    A reference to a memory location that receives the structure that describes timing and presentation statistics for a frame.

    +

    A reference to a variable that receives the interface of the surface that contains the desktop bitmap.

    +

    AcquireNextFrame returns:

    • if it successfully received the next desktop image.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • if the time-out interval elapsed before the next desktop frame was available.
    • if the application called AcquireNextFrame without releasing the previous frame.
    • E_INVALIDARG if one of the parameters to AcquireNextFrame is incorrect; for example, if pFrameInfo is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + +

    When AcquireNextFrame returns successfully, the calling application can access the desktop image that AcquireNextFrame returns in the variable at ppDesktopResource. + If the caller specifies a zero time-out interval in the TimeoutInMilliseconds parameter, AcquireNextFrame verifies whether there is a new desktop image available, returns immediately, and indicates its outcome with the return value. If the caller specifies an INFINITE time-out interval in the TimeoutInMilliseconds parameter, the time-out interval never elapses.

    Note??You cannot cancel the wait that you specified in the TimeoutInMilliseconds parameter. Therefore, if you must periodically check for other conditions (for example, a terminate signal), you should specify a non-INFINITE time-out interval. After the time-out interval elapses, you can check for these other conditions and then call AcquireNextFrame again to wait for the next frame.?

    AcquireNextFrame acquires a new desktop frame when the operating system either updates the desktop bitmap image or changes the shape or position of a hardware reference. The new frame that AcquireNextFrame acquires might have only the desktop image updated, only the reference shape or position updated, or both.

    +
    + + hh404615 + HRESULT IDXGIOutputDuplication::AcquireNextFrame([In] unsigned int TimeoutInMilliseconds,[Out] DXGI_OUTDUPL_FRAME_INFO* pFrameInfo,[Out] IDXGIResource** ppDesktopResource) + IDXGIOutputDuplication::AcquireNextFrame +
    + + +

    Gets information about dirty rectangles for the current desktop frame.

    +
    +

    The size in bytes of the buffer that the caller passed to the pDirtyRectsBuffer parameter.

    +

    A reference to an array of structures that identifies the dirty rectangle regions for the desktop frame.

    +

    Pointer to a variable that receives the number of bytes that GetFrameDirtyRects needs to store information about dirty regions in the buffer at pDirtyRectsBuffer.

    For more information about returning the required buffer size, see Remarks.

    +

    GetFrameDirtyRects returns:

    • if it successfully retrieved information about dirty rectangles.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • if the buffer that the calling application provided was not big enough.
    • if the application called GetFrameDirtyRects without owning the desktop image.
    • E_INVALIDARG if one of the parameters to GetFrameDirtyRects is incorrect; for example, if pDirtyRectsBuffer is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + +

    GetFrameDirtyRects stores a size value in the variable at pDirtyRectsBufferSizeRequired. This value specifies the number of bytes that GetFrameDirtyRects needs to store information about dirty regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to pDirtyRectsBuffer:

    • GetFrameDirtyRects fails with because the buffer is not big enough.
    • GetFrameDirtyRects supplies a buffer that is bigger than necessary. The size value returned at pDirtyRectsBufferSizeRequired informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the DirtyRectsBufferSize parameter.

    The caller can also use the value returned at pDirtyRectsBufferSizeRequired to determine the number of s returned in the pDirtyRectsBuffer array.

    The buffer contains the list of dirty s for the current frame.

    Note??To produce a visually accurate copy of the desktop, an application must first process all move s before it processes dirty s.? +
    + + hh404619 + HRESULT IDXGIOutputDuplication::GetFrameDirtyRects([In] unsigned int DirtyRectsBufferSize,[Out, Buffer] RECT* pDirtyRectsBuffer,[Out] unsigned int* pDirtyRectsBufferSizeRequired) + IDXGIOutputDuplication::GetFrameDirtyRects +
    + + +

    Gets information about the moved rectangles for the current desktop frame.

    +
    +

    The size in bytes of the buffer that the caller passed to the pMoveRectBuffer parameter.

    +

    A reference to an array of structures that identifies the moved rectangle regions for the desktop frame.

    +

    Pointer to a variable that receives the number of bytes that GetFrameMoveRects needs to store information about moved regions in the buffer at pMoveRectBuffer.

    For more information about returning the required buffer size, see Remarks.

    +

    GetFrameMoveRects returns:

    • if it successfully retrieved information about moved rectangles.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • if the buffer that the calling application provided is not big enough.
    • if the application called GetFrameMoveRects without owning the desktop image.
    • E_INVALIDARG if one of the parameters to GetFrameMoveRects is incorrect; for example, if pMoveRectBuffer is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + +

    GetFrameMoveRects stores a size value in the variable at pMoveRectsBufferSizeRequired. This value specifies the number of bytes that GetFrameMoveRects needs to store information about moved regions. You can use this value in the following situations to determine the amount of memory to allocate for future buffers that you pass to pMoveRectBuffer:

    • GetFrameMoveRects fails with because the buffer is not big enough.
    • GetFrameMoveRects supplies a buffer that is bigger than necessary. The size value returned at pMoveRectsBufferSizeRequired informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the MoveRectsBufferSize parameter.

    The caller can also use the value returned at pMoveRectsBufferSizeRequired to determine the number of structures returned.

    The buffer contains the list of move RECTs for the current frame.

    Note??To produce a visually accurate copy of the desktop, an application must first process all move RECTs before it processes dirty RECTs.? +
    + + hh404620 + HRESULT IDXGIOutputDuplication::GetFrameMoveRects([In] unsigned int MoveRectsBufferSize,[Out, Buffer] DXGI_OUTDUPL_MOVE_RECT* pMoveRectBuffer,[Out] unsigned int* pMoveRectsBufferSizeRequired) + IDXGIOutputDuplication::GetFrameMoveRects +
    + + +

    Gets information about the new reference shape for the current desktop frame.

    +
    +

    The size in bytes of the buffer that the caller passed to the pPointerShapeBuffer parameter.

    +

    A reference to a buffer to which GetFramePointerShape copies and returns pixel data for the new reference shape.

    +

    Pointer to a variable that receives the number of bytes that GetFramePointerShape needs to store the new reference shape pixel data in the buffer at pPointerShapeBuffer.

    For more information about returning the required buffer size, see Remarks.

    +

    Pointer to a structure that receives the reference shape information.

    +

    GetFramePointerShape returns:

    • if it successfully retrieved information about the new reference shape.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • if the buffer that the calling application provided was not big enough.
    • if the application called GetFramePointerShape without owning the desktop image.
    • E_INVALIDARG if one of the parameters to GetFramePointerShape is incorrect; for example, if pPointerShapeInfo is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + +

    GetFramePointerShape stores a size value in the variable at pPointerShapeBufferSizeRequired. This value specifies the number of bytes that pPointerShapeBufferSizeRequired needs to store the new reference shape pixel data. You can use the value in the following situations to determine the amount of memory to allocate for future buffers that you pass to pPointerShapeBuffer:

    • GetFramePointerShape fails with because the buffer is not big enough.
    • GetFramePointerShape supplies a bigger than necessary buffer. The size value returned at pPointerShapeBufferSizeRequired informs the caller how much buffer space was actually used compared to how much buffer space the caller allocated and specified in the PointerShapeBufferSize parameter.

    The pPointerShapeInfo parameter describes the new reference shape.

    +
    + + hh404621 + HRESULT IDXGIOutputDuplication::GetFramePointerShape([In] unsigned int PointerShapeBufferSize,[Out, Buffer] void* pPointerShapeBuffer,[Out] unsigned int* pPointerShapeBufferSizeRequired,[Out] DXGI_OUTDUPL_POINTER_SHAPE_INFO* pPointerShapeInfo) + IDXGIOutputDuplication::GetFramePointerShape +
    + + +

    Provides the CPU with efficient access to a desktop image if that desktop image is already in system memory.

    +
    +

    A reference to a structure that receives the surface data that the CPU needs to directly access the surface data.

    +

    MapDesktopSurface returns:

    • if it successfully retrieved the surface data.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • if the application already has an outstanding map on the desktop image. The application must call UnMapDesktopSurface before it calls MapDesktopSurface again. is also returned if the application did not own the desktop image when it called MapDesktopSurface.
    • if the desktop image is not in system memory. In this situation, the application must first transfer the image to a staging surface and then lock the image by calling the method.
    • E_INVALIDARG if the pLockedRect parameter is incorrect; for example, if pLockedRect is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + +

    You can successfully call MapDesktopSurface if the DesktopImageInSystemMemory member of the structure is set to TRUE. If DesktopImageInSystemMemory is , MapDesktopSurface returns . Call to retrieve the structure.

    +
    + + hh404622 + HRESULT IDXGIOutputDuplication::MapDesktopSurface([Out] DXGI_MAPPED_RECT* pLockedRect) + IDXGIOutputDuplication::MapDesktopSurface +
    + + +

    Invalidates the reference to the desktop image that was retrieved by using .

    +
    +

    UnMapDesktopSurface returns:

    • if it successfully completed.
    • if the application did not map the desktop surface by calling .
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + + hh404624 + HRESULT IDXGIOutputDuplication::UnMapDesktopSurface() + IDXGIOutputDuplication::UnMapDesktopSurface +
    + + +

    Indicates that the application finished processing the frame.

    +
    +

    ReleaseFrame returns:

    • if it successfully completed.
    • if the application already released the frame.
    • if the desktop duplication interface is invalid. The desktop duplication interface typically becomes invalid when a different type of image is displayed on the desktop. Examples of this situation are:
      • Desktop switch
      • Mode change
      • Switch from DWM on, DWM off, or other full-screen application
      In this situation, the application must release the interface and create a new for the new content.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + +

    The application must release the frame before it acquires the next frame. After the frame is released, the surface that contains the desktop bitmap becomes invalid; you will not be able to use the surface in a DirectX graphics operation.

    For performance reasons, we recommend that you release the frame just before you call the method to acquire the next frame. When the client does not own the frame, the operating system copies all desktop updates to the surface. This can result in wasted GPU cycles if the operating system updates the same region for each frame that occurs. When the client acquires the frame, the client is aware of only the final update to this region; therefore, any overlapping updates during previous frames are wasted. When the client acquires a frame, the client owns the surface; therefore, the operating system can track only the updated regions and cannot copy desktop updates to the surface. Because of this behavior, we recommend that you minimize the time between the call to release the current frame and the call to acquire the next frame.

    +
    + + hh404623 + HRESULT IDXGIOutputDuplication::ReleaseFrame() + IDXGIOutputDuplication::ReleaseFrame +
    + + HRESULT IDXGIOutputDuplication::MapDesktopSurface([Out] DXGI_MAPPED_RECT* pLockedRect) + + + +

    Set the priority for evicting the resource from memory.

    +
    + +

    The eviction priority is a memory-management variable that is used by DXGI for determining how to populate overcommitted memory.

    You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.

    +
    + + bb174564 + IDXGIResource + IDXGIResource +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    [Starting with Direct3D 11.1, we recommend not to use GetSharedHandle anymore to retrieve the handle to a shared resource. Instead, use to get a handle for sharing. To use , you must create the resource as shared and specify that it uses NT handles (that is, you set the flag). We also recommend that you create shared resources that use NT handles so you can use CloseHandle, DuplicateHandle, and so on on those shared resources.]

    Gets the handle to a shared resource.

    +
    + +

    GetSharedHandle returns a handle for the resource that you created as shared (that is, you set the with or without the flag). You can pass this handle to the method to give another device access to the shared resource. You can also marshal this handle to another process to share a resource with a device in another process. However, this handle is not an NT handle. Therefore, don't use the handle with CloseHandle, DuplicateHandle, and so on.

    The creator of a shared resource must not destroy the resource until all intended entities have opened the resource. The validity of the handle is tied to the lifetime of the underlying video memory. If no resource objects exist on any devices that refer to this resource, the handle is no longer valid. To extend the lifetime of the handle and video memory, you must open the shared resource on a device.

    GetSharedHandle can also return handles for resources that were passed into to open those resources.

    GetSharedHandle fails if the resource to which it wants to get a handle is not shared.

    +
    + + bb174562 + GetSharedHandle + GetSharedHandle + HRESULT IDXGIResource::GetSharedHandle([Out] void** pSharedHandle) +
    + + +

    Get or sets the eviction priority.

    +
    + +

    The eviction priority is a memory-management variable that is used by DXGI to determine how to manage overcommitted memory.

    Priority levels other than the defined values are used when appropriate. For example, a resource with a priority level of 0x78000001 indicates that the resource is slightly above normal.

    +
    + + bb174561 + GetEvictionPriority / SetEvictionPriority + GetEvictionPriority + HRESULT IDXGIResource::GetEvictionPriority([Out] unsigned int* pEvictionPriority) +
    + + +

    [Starting with Direct3D 11.1, we recommend not to use GetSharedHandle anymore to retrieve the handle to a shared resource. Instead, use to get a handle for sharing. To use , you must create the resource as shared and specify that it uses NT handles (that is, you set the flag). We also recommend that you create shared resources that use NT handles so you can use CloseHandle, DuplicateHandle, and so on on those shared resources.]

    Gets the handle to a shared resource.

    +
    + No documentation. +

    Returns one of the DXGI_ERROR values.

    + +

    GetSharedHandle returns a handle for the resource that you created as shared (that is, you set the with or without the flag). You can pass this handle to the method to give another device access to the shared resource. You can also marshal this handle to another process to share a resource with a device in another process. However, this handle is not an NT handle. Therefore, don't use the handle with CloseHandle, DuplicateHandle, and so on.

    The creator of a shared resource must not destroy the resource until all intended entities have opened the resource. The validity of the handle is tied to the lifetime of the underlying video memory. If no resource objects exist on any devices that refer to this resource, the handle is no longer valid. To extend the lifetime of the handle and video memory, you must open the shared resource on a device.

    GetSharedHandle can also return handles for resources that were passed into to open those resources.

    GetSharedHandle fails if the resource to which it wants to get a handle is not shared.

    +
    + + bb174562 + HRESULT IDXGIResource::GetSharedHandle([Out] void** pSharedHandle) + IDXGIResource::GetSharedHandle +
    + + +

    Get the expected resource usage.

    +
    +

    A reference to a usage flag (see DXGI_USAGE). For Direct3D 10, a surface can be used as a shader input or a render-target output.

    +

    Returns one of the following DXGI_ERROR.

    + + bb174563 + HRESULT IDXGIResource::GetUsage([In] unsigned int* pUsage) + IDXGIResource::GetUsage +
    + + +

    Set the priority for evicting the resource from memory.

    +
    +

    The priority is one of the following values:

    ValueMeaning
    (0x28000000)

    The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.

    (0x50000000)

    The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a GPU can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.

    (0x78000000)

    The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource.

    (0xa0000000)

    The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.

    (0xc8000000)

    The resource is evicted from memory only if there is no other way of resolving the memory requirement.

    ?

    +

    Returns one of the following DXGI_ERROR.

    + +

    The eviction priority is a memory-management variable that is used by DXGI for determining how to populate overcommitted memory.

    You can set priority levels other than the defined values when appropriate. For example, you can set a resource with a priority level of 0x78000001 to indicate that the resource is slightly above normal.

    +
    + + bb174564 + HRESULT IDXGIResource::SetEvictionPriority([In] unsigned int EvictionPriority) + IDXGIResource::SetEvictionPriority +
    + + +

    Get the eviction priority.

    +
    +

    A reference to the eviction priority, which determines when a resource can be evicted from memory.

    The following defined values are possible.

    ValueMeaning
    (0x28000000)

    The resource is unused and can be evicted as soon as another resource requires the memory that the resource occupies.

    (0x50000000)

    The eviction priority of the resource is low. The placement of the resource is not critical, and minimal work is performed to find a location for the resource. For example, if a GPU can render with a vertex buffer from either local or non-local memory with little difference in performance, that vertex buffer is low priority. Other more critical resources (for example, a render target or texture) can then occupy the faster memory.

    (0x78000000)

    The eviction priority of the resource is normal. The placement of the resource is important, but not critical, for performance. The resource is placed in its preferred location instead of a low-priority resource.

    (0xa0000000)

    The eviction priority of the resource is high. The resource is placed in its preferred location instead of a low-priority or normal-priority resource.

    (0xc8000000)

    The resource is evicted from memory only if there is no other way of resolving the memory requirement.

    ?

    +

    Returns one of the following DXGI_ERROR.

    + +

    The eviction priority is a memory-management variable that is used by DXGI to determine how to manage overcommitted memory.

    Priority levels other than the defined values are used when appropriate. For example, a resource with a priority level of 0x78000001 indicates that the resource is slightly above normal.

    +
    + + bb174561 + HRESULT IDXGIResource::GetEvictionPriority([Out] unsigned int* pEvictionPriority) + IDXGIResource::GetEvictionPriority +
    + + +

    An interface extends the interface by adding support for creating a subresource surface object and for creating a handle to a shared resource.

    +
    + +

    To determine the type of memory a resource is currently located in, use . To share resources between processes, use . For information about how to share resources between multiple Windows graphics APIs, including Direct3D 11, Direct2D, Direct3D 10, and Direct3D 9Ex, see Surface Sharing Between Windows Graphics APIs.

    You can retrieve the interface from any video memory resource that you create from a Direct3D 10 and later function. Any Direct3D object that supports ID3D10Resource or also supports . For example, the Direct3D 2D texture object that you create from supports . You can call QueryInterface on the 2D texture object () to retrieve the interface. For example, to retrieve the interface from the 2D texture object, use the following code.

     * pDXGIResource;	
    +            hr = g_pd3dTexture2D->QueryInterface(__uuidof(), (void **)&pDXGIResource);

    Windows?Phone?8: This API is supported.

    +
    + + hh404625 + IDXGIResource1 + IDXGIResource1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a subresource surface object.

    +
    +

    The index of the subresource surface object to enumerate.

    +

    The address of a reference to a interface that represents the created subresource surface object at the position specified by the index parameter.

    +

    Returns if successful; otherwise, returns one of the following values:

    • if the index is out of range or if the subresource is not a valid surface.
    • E_OUTOFMEMORY if insufficient memory is available to create the subresource surface object.

    A subresource is a valid surface if the original resource would have been a valid surface had its array size been equal to 1.

    + +

    Subresource surface objects implement the interface, which inherits from and indirectly . Therefore, the GDI-interoperable methods of work if the original resource interface object was created with the GDI-interoperable flag ().

    CreateSubresourceSurface creates a subresource surface that is based on the resource interface on which CreateSubresourceSurface is called. For example, if the original resource interface object is a 2D texture, the created subresource surface is also a 2D texture.

    You can use CreateSubresourceSurface to create parts of a stereo resource so you can use Direct2D on either the left or right part of the stereo resource.

    +
    + + hh404627 + HRESULT IDXGIResource1::CreateSubresourceSurface([In] unsigned int index,[Out, Fast] IDXGISurface2** ppSurface) + IDXGIResource1::CreateSubresourceSurface +
    + + +

    Creates a handle to a shared resource. You can then use the returned handle with multiple Direct3D devices.

    +
    +

    A reference to a structure that contains two separate but related data members: an optional security descriptor, and a Boolean value that determines whether child processes can inherit the returned handle.

    Set this parameter to null if you want child processes that the application might create to not inherit the handle returned by CreateSharedHandle, and if you want the resource that is associated with the returned handle to get a default security descriptor.

    The lpSecurityDescriptor member of the structure specifies a SECURITY_DESCRIPTOR for the resource. Set this member to null if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. The ACLs in the default security descriptor for the resource come from the primary or impersonation token of the creator. For more info, see Synchronization Object Security and Access Rights.

    +

    The requested access rights to the resource. In addition to the generic access rights, DXGI defines the following values:

    • ( 0x80000000L ) - specifies read access to the resource.
    • ( 1 ) - specifies write access to the resource.

    You can combine these values by using a bitwise OR operation.

    +

    The name of the resource to share. The name is limited to MAX_PATH characters. Name comparison is case sensitive. You will need the resource name if you call the method to access the shared resource by name. If you instead call the method to access the shared resource by handle, set this parameter to null.

    If lpName matches the name of an existing resource, CreateSharedHandle fails with . This occurs because these objects share the same namespace.

    The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.

    The object can be created in a private namespace. For more information, see Object Namespaces.

    +

    A reference to a variable that receives the NT HANDLE value to the resource to share. You can use this handle in calls to access the resource.

    + +

    CreateSharedHandle only returns the NT handle when you created the resource as shared and specified that it uses NT handles (that is, you set the and flags). If you created the resource as shared and specified that it uses NT handles, you must use CreateSharedHandle to get a handle for sharing. In this situation, you can't use the method because it will fail.

    You can pass the handle that CreateSharedHandle returns in a call to the method to give a device access to a shared resource that you created on a different device.

    Because the handle that CreateSharedHandle returns is an NT handle, you can use the handle with CloseHandle, DuplicateHandle, and so on. You can call CreateSharedHandle only once for a shared resource; later calls fail. If you need more handles to the same shared resource, call DuplicateHandle. When you no longer need the shared resource handle, call CloseHandle to close the handle, in order to avoid memory leaks.

    If you pass a name for the resource to lpName when you call CreateSharedHandle to share the resource, you can subsequently pass this name in a call to the method to give another device access to the shared resource. If you use a named resource, a malicious user can use this named resource before you do and prevent your app from starting. To prevent this situation, create a randomly named resource and store the name so that it can only be obtained by an authorized user. Alternatively, you can use a file for this purpose. To limit your app to one instance per user, create a locked file in the user's profile directory.

    If you created the resource as shared and did not specify that it uses NT handles, you cannot use CreateSharedHandle to get a handle for sharing because CreateSharedHandle will fail.

    +
    + + hh404626 + HRESULT IDXGIResource1::CreateSharedHandle([In, Optional] const SECURITY_ATTRIBUTES* pAttributes,[In] DXGI_SHARED_RESOURCE_FLAGS dwAccess,[In, Optional] const wchar_t* lpName,[Out] void** pHandle) + IDXGIResource1::CreateSharedHandle +
    + + + Creates a handle to a shared resource. You can then use the returned handle with multiple Direct3D devices. + + A reference to a structure that contains two separate but related data members: an optional security descriptor, and a Boolean value that determines whether child processes can inherit the returned handle. Set this parameter to null if you want child processes that the application might create to not inherit the handle returned by CreateSharedHandle, and if you want the resource that is associated with the returned handle to get a default security descriptor. The lpSecurityDescriptor member of the structure specifies a SECURITY_DESCRIPTOR for the resource. Set this member to null if you want the runtime to assign a default security descriptor to the resource that is associated with the returned handle. + The requested access rights to the resource. In addition to the generic access rights, DXGI defines the following values: ( 0x80000000L ) - specifies read access to the resource. ( 1 ) - specifies write access to the resource. You can combine these values by using a bitwise OR operation. + The name of the resource to share. You will need the resource name if you call the method to access the shared resource by name. If you instead call the method to access the shared resource by handle, set this parameter to null. + A reference to a variable that receives the NT HANDLE value to the resource to share. You can use this handle in calls to access the resource. + + If you created the resource as shared and specified that it uses NT handles (that is, you set the flag), you must use CreateSharedHandle to get a handle for sharing. In this situation, you cannot use the method because it will fail. Similarly, if you created the resource as shared and did not specify that it uses NT handles, you cannot use CreateSharedHandle to get a handle for sharing because CreateSharedHandle will fail.You can pass the handle that CreateSharedHandle returns in a call to the or method to give a device access to a shared resource that you created on a different device.CreateSharedHandle only returns the NT handle when you created the resource as shared (that is, you set the and flags).Because the handle that CreateSharedHandle returns is an NT handle, you can use the handle with CloseHandle, DuplicateHandle, and so on. You can call CreateSharedHandle only once for a shared resource; later calls fail. If you need more handles to the same shared resource, call DuplicateHandle. When you no longer need the shared resource handle, call CloseHandle to close the handle, in order to avoid memory leaks.The creator of a shared resource must not destroy the resource until all entities that opened the resource have destroyed the resource. The validity of the handle is tied to the lifetime of the underlying video memory. If no resource objects exist on any devices that refer to this resource, the handle is no longer valid. To extend the lifetime of the handle and video memory, you must open the shared resource on a device. + + HRESULT IDXGIResource1::CreateSharedHandle([In, Optional] const SECURITY_ATTRIBUTES* pAttributes,[In] DXGI_SHARED_RESOURCE_FLAGS dwAccess,[In, Optional] const wchar_t* name,[Out] void** pHandle) + + + +

    The interface implements methods for image-data objects.

    +
    + +

    An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call .

    The runtime automatically creates an interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an interface when you call or ID3D10Device::CreateTexture2D to create a 2D texture. To retrieve the interface that represents the 2D texture surface, call ID3D11Texture2D::QueryInterface or ID3D10Texture2D::QueryInterface. In this call, you must pass the identifier of . If the 2D texture has only a single MIP-map level and does not consist of an array of textures, QueryInterface succeeds and returns a reference to the interface reference. Otherwise, QueryInterface fails and does not return the reference to .

    +
    + + bb174565 + IDXGISurface + IDXGISurface +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a description of the surface.

    +
    + + bb174566 + GetDesc + GetDesc + HRESULT IDXGISurface::GetDesc([Out] DXGI_SURFACE_DESC* pDesc) +
    + + +

    Get a description of the surface.

    +
    +

    A reference to the surface description (see ).

    +

    Returns if successful; otherwise, returns one of the error codes that are described in the DXGI_ERROR topic.

    + + bb174566 + HRESULT IDXGISurface::GetDesc([Out] DXGI_SURFACE_DESC* pDesc) + IDXGISurface::GetDesc +
    + + +

    Get a reference to the data contained in the surface, and deny GPU access to the surface.

    +
    +

    A reference to the surface data (see ).

    +

    CPU read-write flags. These flags can be combined with a logical OR.

    • - Allow CPU read access.
    • - Allow CPU write access.
    • - Discard the previous contents of a resource when it is mapped.
    +

    Returns if successful; otherwise, returns one of the error codes that are described in the DXGI_ERROR topic.

    + +

    Use to access a surface from the CPU. To release a mapped surface (and allow GPU access) call .

    +
    + + bb174567 + HRESULT IDXGISurface::Map([Out] DXGI_MAPPED_RECT* pLockedRect,[In] unsigned int MapFlags) + IDXGISurface::Map +
    + + +

    Get a reference to the data contained in the surface, and deny GPU access to the surface.

    +
    +

    Returns if successful; otherwise, returns one of the error codes that are described in the DXGI_ERROR topic.

    + +

    Use to access a surface from the CPU. To release a mapped surface (and allow GPU access) call .

    +
    + + bb174567 + HRESULT IDXGISurface::Unmap() + IDXGISurface::Unmap +
    + + + Acquires access to the surface data. + + Flags specifying CPU access permissions. + A for accessing the mapped data, or null on failure.. + + + + Acquires access to the surface data. + + Flags specifying CPU access permissions. + Stream to contain the surface data. + A for accessing the mapped data, or null on failure.. + + + + Gets a swap chain back buffer. + + The swap chain to get the buffer from. + The index of the desired buffer. + The buffer interface, or null on failure. + + + +

    The interface extends the by adding support for using Windows Graphics Device Interface (GDI) to render to a Microsoft DirectX Graphics Infrastructure (DXGI) surface.

    +
    + +

    This interface is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call . Then, call QueryInterface on the object that returns to retrieve the interface.

    Any object that supports also supports .

    The runtime automatically creates an interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an interface when you call or ID3D10Device::CreateTexture2D to create a 2D texture. To retrieve the interface that represents the 2D texture surface, call ID3D11Texture2D::QueryInterface or ID3D10Texture2D::QueryInterface. In this call, you must pass the identifier of . If the 2D texture has only a single MIP-map level and does not consist of an array of textures, QueryInterface succeeds and returns a reference to the interface reference. Otherwise, QueryInterface fails and does not return the reference to .

    +
    + + ff471343 + IDXGISurface1 + IDXGISurface1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns a device context (DC) that allows you to render to a Microsoft DirectX Graphics Infrastructure (DXGI) surface using Windows Graphics Device Interface (GDI).

    +
    +

    A Boolean value that specifies whether to preserve Direct3D contents in the GDI DC. TRUE directs the runtime not to preserve Direct3D contents in the GDI DC; that is, the runtime discards the Direct3D contents. guarantees that Direct3D contents are available in the GDI DC.

    +

    A reference to an handle that represents the current device context for GDI rendering.

    + +

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    After you use the GetDC method to retrieve a DC, you can render to the DXGI surface by using GDI. The GetDC method readies the surface for GDI rendering and allows inter-operation between DXGI and GDI technologies.

    Keep the following in mind when using this method:

    • You must create the surface by using the flag for a surface or by using the flag for swap chains, otherwise this method fails.
    • You must release the device and call the method before you issue any new Direct3D commands.
    • This method fails if an outstanding DC has already been created by this method.
    • The format for the surface or swap chain must be or .
    • On GetDC, the render target in the output merger of the Direct3D pipeline is unbound from the surface. You must call the method on the device prior to Direct3D rendering after GDI rendering.
    • Prior to resizing buffers you must release all outstanding DCs.

    You can also call GetDC on the back buffer at index 0 of a swap chain by obtaining an from the swap chain. The following code illustrates the process.

     * g_pSwapChain = null;	
    +            * g_pSurface1 = null;	
    +            ...	
    +            //Setup the device and and swapchain	
    +            g_pSwapChain->GetBuffer(0, __uuidof(), (void**) &g_pSurface1);	
    +            g_pSurface1->GetDC( , &g_hDC );	
    +            ...      	
    +            //Draw on the DC using GDI	
    +            ...	
    +            //When finish drawing release the DC	
    +            g_pSurface1->ReleaseDC( null ); 
    +
    + + ff471345 + HRESULT IDXGISurface1::GetDC([In] BOOL Discard,[Out] HDC* phdc) + IDXGISurface1::GetDC +
    + + +

    Releases the GDI device context (DC) that is associated with the current surface and allows you to use Direct3D to render.

    +
    +

    A reference to a structure that identifies the dirty region of the surface. A dirty region is any part of the surface that you used for GDI rendering and that you want to preserve. This area is used as a performance hint to graphics subsystem in certain scenarios. Do not use this parameter to restrict rendering to the specified rectangular region. If you pass in null, ReleaseDC considers the whole surface as dirty. Otherwise, ReleaseDC uses the area specified by the as a performance hint to indicate what areas have been manipulated by GDI rendering.

    You can pass a reference to an empty structure (a rectangle with no position or area) if you didn't change any content.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method is not supported by DXGI 1.0, which shipped in Windows?Vista and Windows Server?2008. DXGI 1.1 support is required, which is available on Windows?7, Windows Server?2008?R2, and as an update to Windows?Vista with Service Pack?2 (SP2) (KB 971644) and Windows Server?2008 (KB 971512).

    Use the ReleaseDC method to release the DC and indicate that your application finished all GDI rendering to this surface. You must call the ReleaseDC method before you can use Direct3D to perform additional rendering.

    Prior to resizing buffers you must release all outstanding DCs.

    +
    + + ff471346 + HRESULT IDXGISurface1::ReleaseDC([In, Optional] RECT* pDirtyRect) + IDXGISurface1::ReleaseDC +
    + + + Releases the GDI device context (DC) associated with the current surface and allows rendering using Direct3D. The whole surface to be considered dirty. + + + Use the ReleaseDC method to release the DC and indicate that your application has finished all GDI rendering to this surface. You must call the ReleaseDC method before you perform addition rendering using Direct3D. Prior to resizing buffers all outstanding DCs must be released. + + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDXGISurface1::ReleaseDC([In, Optional] RECT* pDirtyRect) + + + + Releases the GDI device context (DC) associated with the current surface and allows rendering using Direct3D. + + + Use the ReleaseDC method to release the DC and indicate that your application has finished all GDI rendering to this surface. You must call the ReleaseDC method before you perform addition rendering using Direct3D. Prior to resizing buffers all outstanding DCs must be released. + + A reference to a structure that identifies the dirty region of the surface. A dirty region is any part of the surface that you have used for GDI rendering and that you want to preserve. This is used as a performance hint to graphics subsystem in certain scenarios. Do not use this parameter to restrict rendering to the specified rectangular region. The area specified by the will be used as a performance hint to indicate what areas have been manipulated by GDI rendering. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDXGISurface1::ReleaseDC([In, Optional] RECT* pDirtyRect) + + + +

    The interface extends the interface by adding support for subresource surfaces and getting a handle to a shared resource.

    +
    + +

    An image-data object is a 2D section of memory, commonly called a surface. To get the surface from an output, call . Then, call QueryInterface on the object that returns to retrieve the interface.

    Any object that supports also supports .

    The runtime automatically creates an interface when it creates a Direct3D resource object that represents a surface. For example, the runtime creates an interface when you call to create a 2D texture. To retrieve the interface that represents the 2D texture surface, call ID3D11Texture2D::QueryInterface. In this call, you must pass the identifier of . If the 2D texture has only a single MIP-map level and does not consist of an array of textures, QueryInterface succeeds and returns a reference to the interface reference. Otherwise, QueryInterface fails and does not return the reference to .

    You can call the method to create an interface that refers to one subresource of a stereo resource.

    +
    + + hh404628 + IDXGISurface2 + IDXGISurface2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the parent resource and subresource index that support a subresource surface.

    +
    +

    The globally unique identifier () of the requested interface type.

    +

    A reference to a buffer that receives a reference to the parent resource object for the subresource surface.

    +

    A reference to a variable that receives the index of the subresource surface.

    +

    Returns if successful; otherwise, returns one of the following values:

    • E_NOINTERFACE if the object does not implement the that the riid parameter specifies.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + +

    For subresource surface objects that the method creates, GetResource simply returns the values that were used to create the subresource surface.

    Current objects that implement are either resources or views. GetResource for these objects returns ?this? or the resource that supports the view respectively. In this situation, the subresource index is 0.

    +
    + + hh404629 + HRESULT IDXGISurface2::GetResource([In] const GUID& riid,[Out] void** ppParentResource,[Out] unsigned int* pSubresourceIndex) + IDXGISurface2::GetResource +
    + + + Initializes a new sub resource surface instance of class. + + + + + + +

    An interface implements one or more surfaces for storing rendered data before presenting it to an output.

    +
    + +

    You can create a swap chain by + calling , , or . You can also create a swap chain when you call D3D11CreateDeviceAndSwapChain; however, you can then only access the sub-set of swap-chain functionality that the interface provides.

    +
    + + bb174569 + IDXGISwapChain + IDXGISwapChain +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    [Starting with Direct3D 11.1, we recommend not to use GetDesc anymore to get a description of the swap chain. Instead, use .]

    Get a description of the swap chain.

    +
    + + bb174572 + GetDesc + GetDesc + HRESULT IDXGISwapChain::GetDesc([Out] DXGI_SWAP_CHAIN_DESC* pDesc) +
    + + +

    Get the output (the display monitor) that contains the majority of the client area of the target window.

    +
    + +

    If the method succeeds, the output interface will be filled and its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.

    The output is also owned by the adapter on which the swap chain's device was created.

    You cannot call GetContainingOutput on a swap chain that you created with .

    +
    + + bb174571 + GetContainingOutput + GetContainingOutput + HRESULT IDXGISwapChain::GetContainingOutput([Out] IDXGIOutput** ppOutput) +
    + + +

    Gets the number of times that or has been called.

    +
    + +

    For info about presentation statistics for a frame, see .

    +
    + + bb174575 + GetLastPresentCount + GetLastPresentCount + HRESULT IDXGISwapChain::GetLastPresentCount([Out] unsigned int* pLastPresentCount) +
    + + +

    Presents a rendered image to the user.

    +
    +

    An integer that specifies how to synchronize presentation of a frame with the vertical blank.

    For the bit-block transfer (bitblt) model ( or ), values are:

    • 0 - The presentation occurs immediately, there is no synchronization.
    • 1 through 4 - Synchronize presentation after the nth vertical blank.

    For the flip model (), values are:

    • 0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued.
    • 1 through 4 - Synchronize presentation for at least n vertical blanks.

    For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.

    If the update region straddles more than one output (each represented by ), Present performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.

    +

    An integer value that contains swap-chain presentation options. These options are defined by the DXGI_PRESENT constants.

    +

    Possible return values include: , or (see DXGI_ERROR), (see ), or D3DDDIERR_DEVICEREMOVED.

    Note??The Present method can return either or D3DDDIERR_DEVICEREMOVED if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.?
    + +

    Starting with Direct3D 11.1, consider using because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.

    For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.

    Because calling Present might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.

    Differences between Direct3D 9 and Direct3D 10:

    Specifying in the Flags parameter is analogous to IDirect3DDevice9::TestCooperativeLevel in Direct3D 9.

    ?

    For flip presentation model swap chains that you create with the value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.

    For info about how data values change when you present content to the screen, see Converting data for the color space.

    +
    + + bb174576 + HRESULT IDXGISwapChain::Present([In] unsigned int SyncInterval,[In] DXGI_PRESENT_FLAGS Flags) + IDXGISwapChain::Present +
    + + +

    Accesses one of the swap-chain's back buffers.

    +
    +

    A zero-based buffer index.

    If the swap chain's swap effect is , this method can only access the first buffer; for this situation, set the index to zero.

    If the swap chain's swap effect is either or , only the swap chain's zero-index buffer can be read from and written to. The swap chain's buffers with indexes greater than zero can only be read from; so if you call the method for such buffers, they have the flag set.

    +

    The type of interface used to manipulate the buffer.

    +

    A reference to a back-buffer interface.

    +

    Returns one of the following DXGI_ERROR.

    + + bb174570 + HRESULT IDXGISwapChain::GetBuffer([In] unsigned int Buffer,[In] const GUID& riid,[Out] void** ppSurface) + IDXGISwapChain::GetBuffer +
    + + +

    Sets the display state to windowed or full screen.

    +
    +

    A Boolean value that specifies whether to set the display state to windowed or full screen. TRUE for full screen, and for windowed.

    +

    If you pass TRUE to the Fullscreen parameter to set the display state to full screen, you can optionally set this parameter to a reference to an interface for the output target that contains the swap chain. If you set this parameter to null, DXGI will choose the output based on the swap-chain's device and the output window's placement. If you pass to Fullscreen, you must set this parameter to null.

    +

    This methods returns:

    • if the action succeeded and the swap chain was placed in the requested state.
    • if the action failed. There are many reasons why a windowed-mode swap chain cannot switch to full-screen mode. For instance:
      • The application is running over Terminal Server.
      • The output window is occluded.
      • The output window does not have keyboard focus.
      • Another application is already in full-screen mode.

      When this error is returned, an application can continue to run in windowed mode and try to switch to full-screen mode later.

    • is returned if a fullscreen/windowed mode transition is occurring when this API is called.
    • Other error codes if you run out of memory or encounter another unexpected fault; these codes may be treated as hard, non-continuable errors.
    + +

    DXGI may change the display state of a swap chain in response to end user or system requests.

    We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through SetFullscreenState; that is, do not set the Windowed member of to to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything. Also, we recommend that you have a time-out confirmation screen or other fallback mechanism when you allow the end user to change display modes.

    +
    + + bb174579 + HRESULT IDXGISwapChain::SetFullscreenState([In] BOOL Fullscreen,[In, Optional] IDXGIOutput* pTarget) + IDXGISwapChain::SetFullscreenState +
    + + +

    Get the state associated with full-screen mode.

    +
    +

    A reference to a boolean whose value is either:

    • TRUE if the swap chain is in full-screen mode
    • if the swap chain is in windowed mode
    +

    A reference to the output target (see ) when the mode is full screen; otherwise null.

    +

    Returns one of the following DXGI_ERROR.

    + +

    When the swap chain is in full-screen mode, a reference to the target output will be returned and its reference count will be incremented.

    +
    + + bb174574 + HRESULT IDXGISwapChain::GetFullscreenState([Out, Optional] BOOL* pFullscreen,[Out, Optional] IDXGIOutput** ppTarget) + IDXGISwapChain::GetFullscreenState +
    + + +

    [Starting with Direct3D 11.1, we recommend not to use GetDesc anymore to get a description of the swap chain. Instead, use .]

    Get a description of the swap chain.

    +
    + No documentation. +

    Returns one of the following DXGI_ERROR.

    + + bb174572 + HRESULT IDXGISwapChain::GetDesc([Out] DXGI_SWAP_CHAIN_DESC* pDesc) + IDXGISwapChain::GetDesc +
    + + +

    Changes the swap chain's back buffer size, format, and number of buffers. This should be called when the application window is resized.

    +
    +

    The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than DXGI_MAX_SWAP_CHAIN_BUFFERS. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model.

    +

    The new width of the back buffer. If you specify zero, DXGI will use the width of the client area of the target window. You can't specify the width as zero if you called the method to create the swap chain for a composition surface.

    +

    The new height of the back buffer. If you specify zero, DXGI will use the height of the client area of the target window. You can't specify the height as zero if you called the method to create the swap chain for a composition surface.

    +

    A -typed value for the new format of the back buffer. Set this value to to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model.

    +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for swap-chain behavior.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    + +

    You can't resize a swap chain unless you release all outstanding references to its back buffers. You must release all of its direct and indirect references on the back buffers in order for ResizeBuffers to succeed.

    Direct references are held by the application after it calls AddRef on a resource.

    Indirect references are held by views to a resource, binding a view of the resource to a device context, a command list that used the resource, a command list that used a view to that resource, a command list that executed another command list that used the resource, and so on.

    Before you call ResizeBuffers, ensure that the application releases all references (by calling the appropriate number of Release invocations) on the resources, any views to the resource, and any command lists that use either the resources or views, and ensure that neither the resource nor a view is still bound to a device context. You can use to ensure that all references are released. If a view is bound to a deferred context, you must discard the partially built command list as well (by calling , then , then Release on the command list). After you call ResizeBuffers, you can re-query interfaces via .

    For swap chains that you created with , before you call ResizeBuffers, also call on the swap chain's back-buffer surface to ensure that you have no outstanding GDI device contexts (DCs) open.

    We recommend that you call ResizeBuffers when a client window is resized (that is, when an application receives a WM_SIZE message).

    The only difference between in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the or value set. In Windows?8, you must call ResizeBuffers to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the method fails.

    +
    + + bb174577 + HRESULT IDXGISwapChain::ResizeBuffers([In] unsigned int BufferCount,[In] unsigned int Width,[In] unsigned int Height,[In] DXGI_FORMAT NewFormat,[In] DXGI_SWAP_CHAIN_FLAG SwapChainFlags) + IDXGISwapChain::ResizeBuffers +
    + + +

    Resizes the output target.

    +
    +

    A reference to a structure that describes the mode, which specifies the new width, height, format, and refresh rate of the target. If the format is , ResizeTarget uses the existing format. We only recommend that you use when the swap chain is in full-screen mode as this method is not thread safe.

    +

    Returns a code that indicates success or failure. is returned if a full-screen/windowed mode transition is occurring when this API is called. See DXGI_ERROR for additional DXGI error codes.

    + +

    ResizeTarget resizes the target window when the swap chain is in windowed mode, and changes the display mode on the target output when the swap chain is in full-screen mode. Therefore, apps can call ResizeTarget to resize the target window (rather than a Microsoft Win32API such as SetWindowPos) without knowledge of the swap chain display mode.

    If a Windows Store app calls ResizeTarget, it fails with .

    You cannot call ResizeTarget on a swap chain that you created with .

    Apps must still call after they call ResizeTarget because only ResizeBuffers can change the back buffers. But, if those apps have implemented window resize processing to call ResizeBuffers, they don't need to explicitly call ResizeBuffers after they call ResizeTarget because the window resize processing will achieve what the app requires.

    +
    + + bb174578 + HRESULT IDXGISwapChain::ResizeTarget([In] const DXGI_MODE_DESC* pNewTargetParameters) + IDXGISwapChain::ResizeTarget +
    + + +

    Get the output (the display monitor) that contains the majority of the client area of the target window.

    +
    +

    A reference to the output interface (see ).

    +

    Returns one of the following DXGI_ERROR.

    + +

    If the method succeeds, the output interface will be filled and its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.

    The output is also owned by the adapter on which the swap chain's device was created.

    You cannot call GetContainingOutput on a swap chain that you created with .

    +
    + + bb174571 + HRESULT IDXGISwapChain::GetContainingOutput([Out] IDXGIOutput** ppOutput) + IDXGISwapChain::GetContainingOutput +
    + + +

    Gets performance statistics about the last render frame.

    +
    +

    A reference to a structure for the frame statistics.

    +

    Returns one of the DXGI_ERROR values.

    + +

    You cannot use GetFrameStatistics for swap chains that both use the bit-block transfer (bitblt) presentation model and draw in windowed mode.

    You can only use GetFrameStatistics for swap chains that either use the flip presentation model or draw in full-screen mode. You set the value in the SwapEffect member of the structure to specify that the swap chain uses the flip presentation model.

    +
    + + bb174573 + HRESULT IDXGISwapChain::GetFrameStatistics([Out] DXGI_FRAME_STATISTICS* pStats) + IDXGISwapChain::GetFrameStatistics +
    + + +

    Gets the number of times that or has been called.

    +
    + No documentation. +

    Returns one of the DXGI_ERROR values.

    + +

    For info about presentation statistics for a frame, see .

    +
    + + bb174575 + HRESULT IDXGISwapChain::GetLastPresentCount([Out] unsigned int* pLastPresentCount) + IDXGISwapChain::GetLastPresentCount +
    + + + Creates a swap chain. + + + If you attempt to create a swap chain in full-screen mode, and full-screen mode is unavailable, the swap chain will be created in windowed mode and DXGI_STATUS_OCCLUDED will be returned. If the buffer width or the buffer height are zero, the sizes will be inferred from the output window size in the swap-chain description. Since the target output cannot be chosen explicitly when the swap-chain is created, you should not create a full-screen swap chain. This can reduce presentation performance if the swap chain size and the output window size do not match. Here are two ways to ensure the sizes match: Create a windowed swap chain and then set it full-screen using . Save a reference to the swap-chain immediately after creation, and use it to get the output window size during a WM_SIZE event. Then resize the swap chain buffers (with ) during the transition from windowed to full-screen. If the swap chain is in full-screen mode, before you release it, you must use {{SetFullscreenState}} to switch it to windowed mode. For more information about releasing a swap chain, see the Destroying a Swap Chain section of {{DXGI Overview}}. + + a reference to a . + A reference to the device that will write 2D images to the swap chain. + A reference to the swap-chain description (see ). + HRESULT IDXGIFactory::CreateSwapChain([In] IUnknown* pDevice,[In] DXGI_SWAP_CHAIN_DESC* pDesc,[Out] IDXGISwapChain** ppSwapChain) + bb174537 + HRESULT IDXGIFactory::CreateSwapChain([In] IUnknown* pDevice,[In] DXGI_SWAP_CHAIN_DESC* pDesc,[Out, Fast] IDXGISwapChain** ppSwapChain) + IDXGIFactory::CreateSwapChain + + + + Access one of the swap-chain back buffers. + + The interface of the surface to resolve from the back buffer + A zero-based buffer index. If the swap effect is not DXGI_SWAP_EFFECT_SEQUENTIAL, this method only has access to the first buffer; for this case, set the index to zero. + + Returns a reference to a back-buffer interface. + + bb174570 + HRESULT IDXGISwapChain::GetBuffer([In] unsigned int Buffer,[In] const GUID& riid,[Out] void** ppSurface) + IDXGISwapChain::GetBuffer + + + +

    Gets performance statistics about the last render frame.

    +
    + +

    You cannot use GetFrameStatistics for swap chains that both use the bit-block transfer (bitblt) presentation model and draw in windowed mode.

    You can only use GetFrameStatistics for swap chains that either use the flip presentation model or draw in full-screen mode. You set the value in the SwapEffect member of the structure to specify that the swap chain uses the flip presentation model.

    +
    + + bb174573 + GetFrameStatistics + GetFrameStatistics + HRESULT IDXGISwapChain::GetFrameStatistics([Out] DXGI_FRAME_STATISTICS* pStats) +
    + + + Gets or sets a value indicating whether the swapchain is in fullscreen. + + + true if this swapchain is in fullscreen; otherwise, false. + + bb174574 + HRESULT IDXGISwapChain::GetFullscreenState([Out] BOOL* pFullscreen,[Out] IDXGIOutput** ppTarget) + IDXGISwapChain::GetFullscreenState + + + +

    [Starting with Direct3D 11.1, we recommend not to use Present anymore to present a rendered image. Instead, use . For more info, see Remarks.]

    Presents a rendered image to the user.

    +
    + No documentation. + No documentation. +

    Possible return values include: , or (see DXGI_ERROR), (see ), or D3DDDIERR_DEVICEREMOVED.

    Note??The Present method can return either or D3DDDIERR_DEVICEREMOVED if a video card has been physically removed from the computer, or a driver upgrade for the video card has occurred.

    + +

    Starting with Direct3D 11.1, we recommend to instead use because you can then use dirty rectangles and the scroll rectangle in the swap chain presentation and as such use less memory bandwidth and as a result less system power. For more info about using dirty rectangles and the scroll rectangle in swap chain presentation, see Using dirty rectangles and the scroll rectangle in swap chain presentation.

    For the best performance when flipping swap-chain buffers in a full-screen application, see Full-Screen Application Performance Hints.

    Because calling Present might cause the render thread to wait on the message-pump thread, be careful when calling this method in an application that uses multiple threads. For more details, see Multithreading Considerations.

    Differences between Direct3D 9 and Direct3D 10:

    Specifying in the Flags parameter is analogous to IDirect3DDevice9::TestCooperativeLevel in Direct3D 9.

    ?

    For flip presentation model swap chains that you create with the value set, a successful presentation unbinds back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.

    For info about how data values change when you present content to the screen, see Converting data for the color space.

    +
    + + bb174576 + HRESULT IDXGISwapChain::Present([In] unsigned int SyncInterval,[In] DXGI_PRESENT_FLAGS Flags) + IDXGISwapChain::Present +
    + + +

    Provides presentation capabilities that are enhanced from . These presentation capabilities consist of specifying dirty rectangles and scroll rectangle to optimize the presentation.

    +
    + +

    You can create a swap chain by + calling , , or . You can also create a swap chain when you call D3D11CreateDeviceAndSwapChain; however, you can then only access the sub-set of swap-chain functionality that the interface provides.

    provides the IsTemporaryMonoSupported method that you can use to determine whether the swap chain supports "temporary mono? presentation. This type of swap chain is a stereo swap chain that can be used to present mono content. +

    Note??Some stereo features like the advanced presentation flags are not represented by an explicit interface change. Furthermore, the original () and new () swap chain interfaces generally have the same behavior. For information about how methods are translated into methods, see the descriptions of the methods.? +
    + + hh404631 + IDXGISwapChain1 + IDXGISwapChain1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a description of the swap chain.

    +
    + + hh404640 + GetDesc1 + GetDesc1 + HRESULT IDXGISwapChain1::GetDesc1([Out] DXGI_SWAP_CHAIN_DESC1* pDesc) +
    + + +

    Gets a description of a full-screen swap chain.

    +
    + +

    The semantics of GetFullscreenDesc are identical to that of the IDXGISwapchain::GetDesc method for -based swap chains.

    +
    + + hh404644 + GetFullscreenDesc + GetFullscreenDesc + HRESULT IDXGISwapChain1::GetFullscreenDesc([Out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc) +
    + + +

    Retrieves the underlying for this swap-chain object.

    +
    + +

    Applications call the method to create a swap chain that is associated with an .

    +
    + + hh404647 + GetHwnd + GetHwnd + HRESULT IDXGISwapChain1::GetHwnd([Out] HWND* pHwnd) +
    + + +

    Determines whether a swap chain supports ?temporary mono.?

    +
    + +

    Temporary mono is a feature where a stereo swap chain can be presented using only the content in the left buffer. To present using the left buffer as a mono buffer, an application calls the method with the flag. All windowed swap chains support temporary mono. However, full-screen swap chains optionally support temporary mono because not all hardware supports temporary mono on full-screen swap chains efficiently.

    +
    + + hh446794 + IsTemporaryMonoSupported + IsTemporaryMonoSupported + BOOL IDXGISwapChain1::IsTemporaryMonoSupported() +
    + + +

    Gets the output (the display monitor) to which you can restrict the contents of a present operation.

    +
    + +

    If the method succeeds, the runtime fills the buffer at ppRestrictToOutput with a reference to the restrict-to output interface. This restrict-to output interface has its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.

    The output is also owned by the adapter on which the swap chain's device was created.

    +
    + + hh446788 + GetRestrictToOutput + GetRestrictToOutput + HRESULT IDXGISwapChain1::GetRestrictToOutput([Out] IDXGIOutput** ppRestrictToOutput) +
    + + +

    Retrieves or sets the background color of the swap chain.

    +
    + + Note??The background color that GetBackgroundColor retrieves does not indicate what the screen currently displays. The background color indicates what the screen will display with your next call to the method. The default value of the background color is black with full opacity: 0,0,0,1.? + + + hh404634 + GetBackgroundColor / SetBackgroundColor + GetBackgroundColor + HRESULT IDXGISwapChain1::GetBackgroundColor([Out] D3DCOLORVALUE* pColor) +
    + + +

    Gets or sets the rotation of the back buffers for the swap chain.

    +
    + + hh446791 + GetRotation / SetRotation + GetRotation + HRESULT IDXGISwapChain1::GetRotation([Out] DXGI_MODE_ROTATION* pRotation) +
    + + +

    Gets a description of the swap chain.

    +
    +

    A reference to a structure that describes the swap chain.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    + + hh404640 + HRESULT IDXGISwapChain1::GetDesc1([Out] DXGI_SWAP_CHAIN_DESC1* pDesc) + IDXGISwapChain1::GetDesc1 +
    + + +

    Gets a description of a full-screen swap chain.

    +
    +

    A reference to a structure that describes the full-screen swap chain.

    +

    GetFullscreenDesc returns:

    • if it successfully retrieved the description of the full-screen swap chain.
    • for non- swap chains or if pDesc is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + +

    The semantics of GetFullscreenDesc are identical to that of the IDXGISwapchain::GetDesc method for -based swap chains.

    +
    + + hh404644 + HRESULT IDXGISwapChain1::GetFullscreenDesc([Out] DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc) + IDXGISwapChain1::GetFullscreenDesc +
    + + +

    Retrieves the underlying for this swap-chain object.

    +
    + No documentation. +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    If pHwnd receives null (that is, the swap chain is not -based), GetHwnd returns .

    + +

    Applications call the method to create a swap chain that is associated with an .

    +
    + + hh404647 + HRESULT IDXGISwapChain1::GetHwnd([Out] HWND* pHwnd) + IDXGISwapChain1::GetHwnd +
    + + +

    Retrieves the underlying CoreWindow object for this swap-chain object.

    +
    + No documentation. + No documentation. +

    GetCoreWindow returns:

    • if it successfully retrieved the underlying CoreWindow object.
    • if ppUnk is null; that is, the swap chain is not associated with a CoreWindow object.
    • Any that a call to QueryInterface to query for an CoreWindow object might typically return.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, GetCoreWindow fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    Applications call the method to create a swap chain that is associated with an CoreWindow object.

    +
    + + hh404650 + HRESULT IDXGISwapChain1::GetCoreWindow([In] const GUID& refiid,[Out] void** ppUnk) + IDXGISwapChain1::GetCoreWindow +
    + + +

    Presents a frame on the display screen.

    +
    +

    An integer that specifies how to synchronize presentation of a frame with the vertical blank.

    For the bit-block transfer (bitblt) model ( or ), values are:

    • 0 - The presentation occurs immediately, there is no synchronization.
    • 1 through 4 - Synchronize presentation after the nth vertical blank.

    For the flip model (), values are:

    • 0 - Cancel the remaining time on the previously presented frame and discard this frame if a newer frame is queued.
    • 1 through 4 - Synchronize presentation for at least n vertical blanks.

    For an example that shows how sync-interval values affect a flip presentation queue, see Remarks.

    If the update region straddles more than one output (each represented by ), Present1 performs the synchronization to the output that contains the largest sub-rectangle of the target window's client area.

    +

    An integer value that contains swap-chain presentation options. These options are defined by the DXGI_PRESENT constants.

    +

    A reference to a structure that describes updated rectangles and scroll information of the frame to present.

    +

    Possible return values include: , , , , or E_OUTOFMEMORY.

    + +

    An app can use Present1 to optimize presentation by specifying scroll and dirty rectangles. When the runtime has information about these rectangles, the runtime can then perform necessary bitblts during presentation more efficiently and pass this metadata to the Desktop Window Manager (DWM). The DWM can then use the metadata to optimize presentation and pass the metadata to indirect displays and terminal servers to optimize traffic over the wire. An app must confine its modifications to only the dirty regions that it passes to Present1, as well as modify the entire dirty region to avoid undefined resource contents from being exposed.

    For flip presentation model swap chains that you create with the value set, a successful presentation results in an unbind of back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.

    For info about how data values change when you present content to the screen, see Converting data for the color space.

    For info about calling Present1 when your app uses multiple threads, see Multithread Considerations and Multithreading and DXGI.

    +
    + + hh446797 + HRESULT IDXGISwapChain1::Present1([In] unsigned int SyncInterval,[In] DXGI_PRESENT_FLAGS PresentFlags,[In] const void* pPresentParameters) + IDXGISwapChain1::Present1 +
    + + +

    Determines whether a swap chain supports ?temporary mono.?

    +
    +

    Indicates whether to use the swap chain in temporary mono mode. TRUE indicates that you can use temporary-mono mode; otherwise, .

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, IsTemporaryMonoSupported always returns because stereoscopic 3D display behavior isn?t available with the Platform Update for Windows?7. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    Temporary mono is a feature where a stereo swap chain can be presented using only the content in the left buffer. To present using the left buffer as a mono buffer, an application calls the method with the flag. All windowed swap chains support temporary mono. However, full-screen swap chains optionally support temporary mono because not all hardware supports temporary mono on full-screen swap chains efficiently.

    +
    + + hh446794 + BOOL IDXGISwapChain1::IsTemporaryMonoSupported() + IDXGISwapChain1::IsTemporaryMonoSupported +
    + + +

    Gets the output (the display monitor) to which you can restrict the contents of a present operation.

    +
    +

    A reference to a buffer that receives a reference to the interface for the restrict-to output. An application passes this reference to in a call to the , , or method to create the swap chain.

    +

    Returns if the restrict-to output was successfully retrieved; otherwise, returns E_INVALIDARG if the reference is invalid.

    + +

    If the method succeeds, the runtime fills the buffer at ppRestrictToOutput with a reference to the restrict-to output interface. This restrict-to output interface has its reference count incremented. When you are finished with it, be sure to release the interface to avoid a memory leak.

    The output is also owned by the adapter on which the swap chain's device was created.

    +
    + + hh446788 + HRESULT IDXGISwapChain1::GetRestrictToOutput([Out] IDXGIOutput** ppRestrictToOutput) + IDXGISwapChain1::GetRestrictToOutput +
    + + +

    Changes the background color of the swap chain.

    +
    +

    A reference to a DXGI_RGBA structure that specifies the background color to set.

    +

    SetBackgroundColor returns:

    • if it successfully set the background color.
    • E_INVALIDARG if the pColor parameter is incorrect, for example, pColor is null or any of the floating-point values of the members of DXGI_RGBA to which pColor points are outside the range from 0.0 through 1.0.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, SetBackgroundColor fails with E_NOTIMPL. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    The background color affects only swap chains that you create with in windowed mode. You pass this value in a call to , , or . Typically, the background color is not visible unless the swap-chain contents are smaller than the destination window.

    When you set the background color, it is not immediately realized. It takes effect in conjunction with your next call to the method. The DXGI_PRESENT flags that you pass to can help achieve the effect that you require. For example, if you call SetBackgroundColor and then call with the Flags parameter set to , you change only the background color without changing the displayed contents of the swap chain.

    When you call the method to display contents of the swap chain, uses the value that is specified in the AlphaMode member of the structure to determine how to handle the a member of the DXGI_RGBA structure, the alpha value of the background color, that achieves window transparency. For example, if AlphaMode is , ignores the a member of DXGI_RGBA.

    Note??Like all presentation data, we recommend that you perform floating point operations in a linear color space. When the desktop is in a fixed bit color depth mode, the operating system converts linear color data to standard RGB data (sRGB, gamma 2.2 corrected space) to compose to the screen. For more info, see Converting data for the color space.? +
    + + hh446799 + HRESULT IDXGISwapChain1::SetBackgroundColor([In] const D3DCOLORVALUE* pColor) + IDXGISwapChain1::SetBackgroundColor +
    + + +

    Retrieves the background color of the swap chain.

    +
    +

    A reference to a DXGI_RGBA structure that receives the background color of the swap chain.

    +

    GetBackgroundColor returns:

    • if it successfully retrieves the background color.
    • if the pColor parameter is invalid, for example, pColor is null.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + + Note??The background color that GetBackgroundColor retrieves does not indicate what the screen currently displays. The background color indicates what the screen will display with your next call to the method. The default value of the background color is black with full opacity: 0,0,0,1.? + + + hh404634 + HRESULT IDXGISwapChain1::GetBackgroundColor([Out] D3DCOLORVALUE* pColor) + IDXGISwapChain1::GetBackgroundColor +
    + + +

    Sets the rotation of the back buffers for the swap chain.

    +
    +

    A -typed value that specifies how to set the rotation of the back buffers for the swap chain.

    +

    SetRotation returns:

    • if it successfully set the rotation.
    • if the swap chain is bit-block transfer (bitblt) model. The swap chain must be flip model to successfully call SetRotation.
    • Possibly other error codes that are described in the DXGI_ERROR topic.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, SetRotation fails with . For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    You can only use SetRotation to rotate the back buffers for flip-model swap chains that you present in windowed mode.

    SetRotation isn't supported for rotating the back buffers for flip-model swap chains that you present in full-screen mode. In this situation, SetRotation doesn't fail, but you must ensure that you specify no rotation () for the swap chain. Otherwise, when you call or to present a frame, the presentation fails.

    +
    + + hh446801 + HRESULT IDXGISwapChain1::SetRotation([In] DXGI_MODE_ROTATION Rotation) + IDXGISwapChain1::SetRotation +
    + + +

    Gets the rotation of the back buffers for the swap chain.

    +
    +

    A reference to a variable that receives a -typed value that specifies the rotation of the back buffers for the swap chain.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, GetRotation fails with . For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + + hh446791 + HRESULT IDXGISwapChain1::GetRotation([Out] DXGI_MODE_ROTATION* pRotation) + IDXGISwapChain1::GetRotation +
    + + + Creates a swapchain associated to the specified HWND. This is applicable only for Desktop platform. + + The DXGI Factory used to create the swapchain. + The associated device instance. + The HWND of the window to which this swapchain is associated. + The swap chain description. + The fullscreen description of the swap chain. Default is null. + The output to which this swap chain should be restricted. Default is null, meaning that there is no restriction. + + + + Creates a swapchain associated to the specified CoreWindow. This is applicable only for WinRT platform. + + The DXGI Factory used to create the swapchain. + The associated device instance. + The HWND of the window to which this swapchain is associated. + The swap chain description. + The output to which this swap chain should be restricted. Default is null, meaning that there is no restriction. + + + + Creates a swapchain for DirectComposition API or WinRT XAML framework. This is applicable only for WinRT platform. + + The DXGI Factory used to create the swapchain. + The associated device instance. + The swap chain description. + The output to which this swap chain should be restricted. Default is null, meaning that there is no restriction. + + + + [This documentation is preliminary and is subject to change.] + + An integer that specifies how to synchronize presentation of a frame with the vertical blank. For the bit-block transfer (bitblt) model, values are: 0 - The presentation occurs immediately, there is no synchronization. 1,2,3,4 - Synchronize presentation after the nth vertical blank. For the flip model, values are: 0 - Discard this frame if you submitted a more recent presentation. n > 0 - Synchronize presentation for at least n vertical blanks. For an example that shows how sync-interval values affect a flip presentation queue, see Remarks. If the update region straddles more than one output (each represented by ), Present1 performs the synchronization to the output that contains the largest subrectangle of the target window's client area. + An integer value that contains swap-chain presentation options. These options are defined by the DXGI_PRESENT constants. + A reference to a structure that describes updated rectangles and scroll information of the frame to present. + Possible return values include: , , , , or E_OUTOFMEMORY. + + An application can use Present1 to optimize presentation by specifying scroll and dirty rectangles. When the runtime has information about these rectangles, the runtime can then perform necessary bitblts during presentation more efficiently and pass this metadata to the Desktop Window Manager (DWM). The DWM can then use the metadata to optimize presentation and pass the metadata to indirect displays and terminal servers to optimize traffic over the wire. An application must confine its modifications to only the dirty regions that it passes to Present1, as well as modify the entire dirty region to avoid undefined resource contents from being exposed.For flip presentation model swap chains that you create with the value set, a successful presentation results in an unbind of back buffer 0 from the graphics pipeline, except for when you pass the flag in the Flags parameter.Flip presentation model queueSuppose the following frames with sync-interval values are queued from oldest (A) to newest (E) before you call Present1.A: 3, B: 0, C: 0, D: 1, E: 0When you call Present1, the runtime shows frame A for 3 vertical blank intervals, then frame D for 1 vertical blank interval, and then frame E until you submit a new presentation. The runtime discards frames C and D. + + + HRESULT IDXGISwapChain1::Present1([In] unsigned int SyncInterval,[In] unsigned int PresentFlags,[In] const void* pPresentParameters) + + + +

    Extends with methods to support swap back buffer scaling and lower-latency swap chains.

    +
    + +

    You can create a swap chain by + calling , , or .

    +
    + + dn280420 + IDXGISwapChain2 + IDXGISwapChain2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the number of frames that the swap chain is allowed to queue for rendering.

    +
    + + dn268311 + GetMaximumFrameLatency / SetMaximumFrameLatency + GetMaximumFrameLatency + HRESULT IDXGISwapChain2::GetMaximumFrameLatency([Out] unsigned int* pMaxLatency) +
    + + +

    Returns a waitable handle that signals when the DXGI adapter has finished presenting a new frame.

    Windows?8.1 introduces new APIs that allow lower-latency rendering by waiting until the previous frame is presented to the display before drawing the next frame. To use this method, first create the DXGI swap chain with the flag set, then call GetFrameLatencyWaitableObject to retrieve the waitable handle. Use the waitable handle with WaitForSingleObjectEx to synchronize rendering of each new frame with the end of the previous frame. For every frame it renders, the app should wait on this handle before starting any rendering operations. Note that this requirement includes the first frame the app renders with the swap chain. See the DirectXLatency sample.

    +
    + + dn268309 + GetFrameLatencyWaitableObject + GetFrameLatencyWaitableObject + void* IDXGISwapChain2::GetFrameLatencyWaitableObject() +
    + + +

    Gets or sets the transform matrix that will be applied to a composition swap chain upon the next present.

    Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in XAML pages using the SwapChainPanel element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch UI. The GetMatrixTransform and SetMatrixTransform methods are used to synchronize scaling of the DirectX swap chain with its associated SwapChainPanel element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.

    +
    + + dn268310 + GetMatrixTransform / SetMatrixTransform + GetMatrixTransform + HRESULT IDXGISwapChain2::GetMatrixTransform([Out] DXGI_MATRIX_3X2_F* pMatrix) +
    + + +

    Sets the source region to be used for the swap chain.

    Use SetSourceSize to specify the portion of the swap chain from which the operating system presents. This allows an effective resize without calling the more-expensive method. Prior to Windows?8.1, calling was the only way to resize the swap chain. The source rectangle is always defined by the region [0, 0, Width, Height].

    +
    + No documentation. + No documentation. +

    This method can return:

    • E_INVALIDARG if one or more parameters exceed the size of the back buffer.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + + dn280409 + HRESULT IDXGISwapChain2::SetSourceSize([In] unsigned int Width,[In] unsigned int Height) + IDXGISwapChain2::SetSourceSize +
    + + +

    Gets the source region used for the swap chain.

    Use GetSourceSize to get the portion of the swap chain from which the operating system presents. The source rectangle is always defined by the region [0, 0, Width, Height]. Use SetSourceSize to set this portion of the swap chain.

    +
    + No documentation. + No documentation. +

    This method can return error codes that are described in the DXGI_ERROR topic.

    + + dn280408 + HRESULT IDXGISwapChain2::GetSourceSize([Out] unsigned int* pWidth,[Out] unsigned int* pHeight) + IDXGISwapChain2::GetSourceSize +
    + + +

    Sets the number of frames that the swap chain is allowed to queue for rendering.

    +
    +

    The maximum number of back buffer frames that will be queued for the swap chain. This value is 3 by default.

    +

    Returns if successful; otherwise, if the device was removed.

    + +

    This method is only valid for use on swap chains created with . Otherwise, the result will be .

    +
    + + dn268313 + HRESULT IDXGISwapChain2::SetMaximumFrameLatency([In] unsigned int MaxLatency) + IDXGISwapChain2::SetMaximumFrameLatency +
    + + +

    Gets the number of frames that the swap chain is allowed to queue for rendering.

    +
    +

    The maximum number of back buffer frames that will be queued for the swap chain. This value is 1 by default, but should be set to 2 if the scene takes longer than it takes for one vertical refresh (typically about 16ms) to draw.

    +

    Returns if successful; otherwise, returns one of the following members of the D3DERR enumerated type:

    • D3DERR_DEVICELOST
    • D3DERR_DEVICEREMOVED
    • D3DERR_DRIVERINTERNALERROR
    • D3DERR_INVALIDCALL
    • D3DERR_OUTOFVIDEOMEMORY
    + + dn268311 + HRESULT IDXGISwapChain2::GetMaximumFrameLatency([Out] unsigned int* pMaxLatency) + IDXGISwapChain2::GetMaximumFrameLatency +
    + + +

    Returns a waitable handle that signals when the DXGI adapter has finished presenting a new frame.

    Windows?8.1 introduces new APIs that allow lower-latency rendering by waiting until the previous frame is presented to the display before drawing the next frame. To use this method, first create the DXGI swap chain with the flag set, then call GetFrameLatencyWaitableObject to retrieve the waitable handle. Use the waitable handle with WaitForSingleObjectEx to synchronize rendering of each new frame with the end of the previous frame. For every frame it renders, the app should wait on this handle before starting any rendering operations. Note that this requirement includes the first frame the app renders with the swap chain. See the DirectXLatency sample.

    +
    +

    A handle to the waitable object, or null if the swap chain was not created with .

    + + dn268309 + void* IDXGISwapChain2::GetFrameLatencyWaitableObject() + IDXGISwapChain2::GetFrameLatencyWaitableObject +
    + + +

    Sets the transform matrix that will be applied to a composition swap chain upon the next present.

    Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in XAML pages using the SwapChainPanel element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch UI. The GetMatrixTransform and SetMatrixTransform methods are used to synchronize scaling of the DirectX swap chain with its associated SwapChainPanel element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.

    +
    + No documentation. +

    SetMatrixTransform returns:

    • if it successfully retrieves the transform matrix.
    • E_INVALIDARG if the pMatrix parameter is incorrect, for example, pMatrix is null or the matrix represented by includes components other than scale and translation.
    • if the method is called on a swap chain that was not created with CreateSwapChainForComposition.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + + dn268312 + HRESULT IDXGISwapChain2::SetMatrixTransform([In] const DXGI_MATRIX_3X2_F* pMatrix) + IDXGISwapChain2::SetMatrixTransform +
    + + +

    Gets the transform matrix that will be applied to a composition swap chain upon the next present.

    Starting with Windows?8.1, Windows Store apps are able to place DirectX swap chain visuals in XAML pages using the SwapChainPanel element, which can be placed and sized arbitrarily. This exposes the DirectX swap chain visuals to touch scaling and translation scenarios using touch UI. The GetMatrixTransform and SetMatrixTransform methods are used to synchronize scaling of the DirectX swap chain with its associated SwapChainPanel element. Only simple scale/translation elements in the matrix are allowed ? the call will fail if the matrix contains skew/rotation elements.

    +
    + No documentation. +

    GetMatrixTransform returns:

    • if it successfully retrieves the transform matrix.
    • if the method is called on a swap chain that was not created with CreateSwapChainForComposition.
    • Possibly other error codes that are described in the DXGI_ERROR topic.
    + + dn268310 + HRESULT IDXGISwapChain2::GetMatrixTransform([Out] DXGI_MATRIX_3X2_F* pMatrix) + IDXGISwapChain2::GetMatrixTransform +
    + + +

    [This documentation is preliminary and is subject to change.]

    Gets the source region used for the swap chain.

    Use GetSourceSize to get the portion of the swap chain from which the operating system presents. The source rectangle is always defined by the region [0, 0, Width, Height]. Use SetSourceSize to set this portion of the swap chain.

    +
    +

    This method can return error codes that are described in the DXGI_ERROR topic.

    + + dn280408 + HRESULT IDXGISwapChain2::GetSourceSize([Out] unsigned int* pWidth,[Out] unsigned int* pHeight) + IDXGISwapChain2::GetSourceSize +
    + + +

    Extends with methods to support getting the index of the swap chain's current back buffer and support for color space.

    +
    + + dn903673 + IDXGISwapChain3 + IDXGISwapChain3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the index of the swap chain's current back buffer.

    +
    + + dn903675 + GetCurrentBackBufferIndex + GetCurrentBackBufferIndex + unsigned int IDXGISwapChain3::GetCurrentBackBufferIndex() +
    + + +

    Sets the color space used by the swap chain.

    +
    + + dn903676 + SetColorSpace1 + SetColorSpace1 + HRESULT IDXGISwapChain3::SetColorSpace1([In] DXGI_COLOR_SPACE_TYPE ColorSpace) +
    + + +

    Gets the index of the swap chain's current back buffer.

    +
    +

    Returns the index of the current back buffer.

    + + dn903675 + unsigned int IDXGISwapChain3::GetCurrentBackBufferIndex() + IDXGISwapChain3::GetCurrentBackBufferIndex +
    + + +

    Checks the swap chain's support for color space.

    +
    +

    A -typed value that specifies color space type to check support for.

    +

    A reference to a variable that receives a combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for color space support.

    + + dn903674 + HRESULT IDXGISwapChain3::CheckColorSpaceSupport([In] DXGI_COLOR_SPACE_TYPE ColorSpace,[Out] DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG* pColorSpaceSupport) + IDXGISwapChain3::CheckColorSpaceSupport +
    + + +

    Sets the color space used by the swap chain.

    +
    +

    A -typed value that specifies the color space to set.

    +

    This method returns on success, or it returns one of the error codes that are described in the DXGI_ERROR topic.

    + + dn903676 + HRESULT IDXGISwapChain3::SetColorSpace1([In] DXGI_COLOR_SPACE_TYPE ColorSpace) + IDXGISwapChain3::SetColorSpace1 +
    + + +

    Changes the swap chain's back buffer size, format, and number of buffers, where the swap chain was created using a D3D12 command queue as an input device. This should be called when the application window is resized.

    +
    +

    The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than DXGI_MAX_SWAP_CHAIN_BUFFERS. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model.

    +

    The new width of the back buffer. If you specify zero, DXGI will use the width of the client area of the target window. You can't specify the width as zero if you called the method to create the swap chain for a composition surface.

    +

    The new height of the back buffer. If you specify zero, DXGI will use the height of the client area of the target window. You can't specify the height as zero if you called the method to create the swap chain for a composition surface.

    +

    A -typed value for the new format of the back buffer. Set this value to to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model.

    +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for swap-chain behavior.

    +

    An array of UINTs, of total size BufferCount, where the value indicates which node the back buffer should be created on. Buffers created using ResizeBuffers1 with a non-null pCreationNodeMask array are visible to all nodes.

    +

    An array of command queues ( instances), of total size BufferCount. Each queue provided must match the corresponding creation node mask specified in the pCreationNodeMask array. When Present() is called, in addition to rotating to the next buffer for the next frame, the swapchain will also rotate through these command queues. This allows the app to control which queue requires synchronization for a given present operation.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    + +

    This method is only valid to call when the swapchain was created using a D3D12 command queue () as an input device.

    When a swapchain is created on a multi-GPU adapter, the backbuffers are all created on node 1 and only a single command queue is supported. ResizeBuffers1 enables applications to create backbuffers on different nodes, allowing a different command queue to be used with each node. These capabilities enable Alternate Frame Rendering (AFR) techniques to be used with the swapchain. See Direct3D 12 Multi-Adapters.

    The only difference between in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the or value set. In Windows?8, you must call ResizeBuffers to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the method fails.

    Also see the Remarks section in , all of which is relevant to ResizeBuffers1.

    +
    + + mt403341 + HRESULT IDXGISwapChain3::ResizeBuffers1([In] unsigned int BufferCount,[In] unsigned int Width,[In] unsigned int Height,[In] DXGI_FORMAT Format,[In] DXGI_SWAP_CHAIN_FLAG SwapChainFlags,[In, Buffer] const unsigned int* pCreationNodeMask,[In, Buffer] const IUnknown** ppPresentQueue) + IDXGISwapChain3::ResizeBuffers1 +
    + + +

    Changes the swap chain's back buffer size, format, and number of buffers, where the swap chain was created using a D3D12 command queue as an input device. This should be called when the application window is resized.

    +
    +

    The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than DXGI_MAX_SWAP_CHAIN_BUFFERS. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model.

    +

    The new width of the back buffer. If you specify zero, DXGI will use the width of the client area of the target window. You can't specify the width as zero if you called the method to create the swap chain for a composition surface.

    +

    The new height of the back buffer. If you specify zero, DXGI will use the height of the client area of the target window. You can't specify the height as zero if you called the method to create the swap chain for a composition surface.

    +

    A -typed value for the new format of the back buffer. Set this value to to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model.

    +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for swap-chain behavior.

    +

    An array of UINTs, of total size BufferCount, where the value indicates which node the back buffer should be created on. Buffers created using ResizeBuffers1 with a non-null pCreationNodeMask array are visible to all nodes.

    +

    An array of command queues ( instances), of total size BufferCount. Each queue provided must match the corresponding creation node mask specified in the pCreationNodeMask array. When Present() is called, in addition to rotating to the next buffer for the next frame, the swapchain will also rotate through these command queues. This allows the app to control which queue requires synchronization for a given present operation.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    + +

    This method is only valid to call when the swapchain was created using a D3D12 command queue () as an input device.

    When a swapchain is created on a multi-GPU adapter, the backbuffers are all created on node 1 and only a single command queue is supported. ResizeBuffers1 enables applications to create backbuffers on different nodes, allowing a different command queue to be used with each node. These capabilities enable Alternate Frame Rendering (AFR) techniques to be used with the swapchain. See Direct3D 12 Multi-Adapters.

    The only difference between in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the or value set. In Windows?8, you must call ResizeBuffers to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the method fails.

    Also see the Remarks section in , all of which is relevant to ResizeBuffers1.

    +
    + + mt403341 + HRESULT IDXGISwapChain3::ResizeBuffers1([In] unsigned int BufferCount,[In] unsigned int Width,[In] unsigned int Height,[In] DXGI_FORMAT Format,[In] DXGI_SWAP_CHAIN_FLAG SwapChainFlags,[In, Buffer] const unsigned int* pCreationNodeMask,[In, Buffer] const IUnknown** ppPresentQueue) + IDXGISwapChain3::ResizeBuffers1 +
    + + +

    Changes the swap chain's back buffer size, format, and number of buffers, where the swap chain was created using a D3D12 command queue as an input device. This should be called when the application window is resized.

    +
    +

    The number of buffers in the swap chain (including all back and front buffers). This number can be different from the number of buffers with which you created the swap chain. This number can't be greater than DXGI_MAX_SWAP_CHAIN_BUFFERS. Set this number to zero to preserve the existing number of buffers in the swap chain. You can't specify less than two buffers for the flip presentation model.

    +

    The new width of the back buffer. If you specify zero, DXGI will use the width of the client area of the target window. You can't specify the width as zero if you called the method to create the swap chain for a composition surface.

    +

    The new height of the back buffer. If you specify zero, DXGI will use the height of the client area of the target window. You can't specify the height as zero if you called the method to create the swap chain for a composition surface.

    +

    A -typed value for the new format of the back buffer. Set this value to to preserve the existing format of the back buffer. The flip presentation model supports a more restricted set of formats than the bit-block transfer (bitblt) model.

    +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for swap-chain behavior.

    +

    An array of UINTs, of total size BufferCount, where the value indicates which node the back buffer should be created on. Buffers created using ResizeBuffers1 with a non-null pCreationNodeMask array are visible to all nodes.

    +

    An array of command queues ( instances), of total size BufferCount. Each queue provided must match the corresponding creation node mask specified in the pCreationNodeMask array. When Present() is called, in addition to rotating to the next buffer for the next frame, the swapchain will also rotate through these command queues. This allows the app to control which queue requires synchronization for a given present operation.

    +

    Returns if successful; an error code otherwise. For a list of error codes, see DXGI_ERROR.

    + +

    This method is only valid to call when the swapchain was created using a D3D12 command queue () as an input device.

    When a swapchain is created on a multi-GPU adapter, the backbuffers are all created on node 1 and only a single command queue is supported. ResizeBuffers1 enables applications to create backbuffers on different nodes, allowing a different command queue to be used with each node. These capabilities enable Alternate Frame Rendering (AFR) techniques to be used with the swapchain. See Direct3D 12 Multi-Adapters.

    The only difference between in Windows?8 versus Windows?7 is with flip presentation model swap chains that you create with the or value set. In Windows?8, you must call ResizeBuffers to realize a transition between full-screen mode and windowed mode; otherwise, your next call to the method fails.

    Also see the Remarks section in , all of which is relevant to ResizeBuffers1.

    +
    + + mt403341 + HRESULT IDXGISwapChain3::ResizeBuffers1([In] unsigned int BufferCount,[In] unsigned int Width,[In] unsigned int Height,[In] DXGI_FORMAT Format,[In] DXGI_SWAP_CHAIN_FLAG SwapChainFlags,[In, Buffer] const unsigned int* pCreationNodeMask,[In, Buffer] const IUnknown** ppPresentQueue) + IDXGISwapChain3::ResizeBuffers1 +
    + + +

    An interface implements one or more surfaces for storing rendered data before presenting it to an output.

    +
    + +

    You can create a swap chain by + calling , , or . You can also create a swap chain when you call D3D11CreateDeviceAndSwapChain; however, you can then only access the sub-set of swap-chain functionality that the interface provides.

    +
    + + bb174569 + IDXGISwapChain4 + IDXGISwapChain4 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    This method sets High Dynamic Range (HDR) and Wide Color Gamut (WCG) header metadata.

    +
    +

    Specifies one member of the enum.

    +

    Specifies the size of pMetaData, in bytes.

    +

    Specifies a void reference that references the metadata, if it exists. Refer to the structure.

    +

    This method returns an success or error code.

    + +

    This method sets metadata to enable a monitor's output to be adjusted depending on its capabilities.

    +
    + + mt732708 + HRESULT IDXGISwapChain4::SetHDRMetaData([In] DXGI_HDR_METADATA_TYPE Type,[In] unsigned int Size,[In, Buffer, Optional] void* pMetaData) + IDXGISwapChain4::SetHDRMetaData +
    + + +

    This swap chain interface allows desktop media applications to request a seamless change to a specific refresh rate.

    For example, a media application presenting video at a typical framerate of 23.997 frames per second can request a custom refresh rate of 24 or 48 Hz to eliminate jitter. If the request is approved, the app starts presenting frames at the custom refresh rate immediately - without the typical 'mode switch' a user would experience when changing the refresh rate themselves by using the control panel.

    +
    + +

    Seamless changes to custom framerates can only be done on integrated panels. Custom frame rates cannot be applied to external displays. If the DXGI output adapter is attached to an external display then CheckPresentDurationSupport will return (0, 0) for upper and lower bounds, indicating that the device does not support seamless refresh rate changes.

    Custom refresh rates can be used when displaying video with a dynamic framerate. However, the refresh rate change should be kept imperceptible to the user. A best practice for keeping the refresh rate transition imperceptible is to only set the custom framerate if the app determines it can present at that rate for least 5 seconds.

    +
    + + dn384131 + IDXGISwapChainMedia + IDXGISwapChainMedia +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Queries the system for a structure that indicates whether a custom refresh rate is currently approved by the system.

    +
    + + dn384133 + GetFrameStatisticsMedia + GetFrameStatisticsMedia + HRESULT IDXGISwapChainMedia::GetFrameStatisticsMedia([Out] DXGI_FRAME_STATISTICS_MEDIA* pStats) +
    + + +

    Requests a custom presentation duration (custom refresh rate).

    +
    + + dn384134 + SetPresentDuration + SetPresentDuration + HRESULT IDXGISwapChainMedia::SetPresentDuration([In] unsigned int Duration) +
    + + +

    Queries the system for a structure that indicates whether a custom refresh rate is currently approved by the system.

    +
    + No documentation. +

    This method returns on success, or a DXGI error code on failure.

    + + dn384133 + HRESULT IDXGISwapChainMedia::GetFrameStatisticsMedia([Out] DXGI_FRAME_STATISTICS_MEDIA* pStats) + IDXGISwapChainMedia::GetFrameStatisticsMedia +
    + + +

    Requests a custom presentation duration (custom refresh rate).

    +
    +

    The custom presentation duration, specified in hundreds of nanoseconds.

    +

    This method returns on success, or a DXGI error code on failure.

    + + dn384134 + HRESULT IDXGISwapChainMedia::SetPresentDuration([In] unsigned int Duration) + IDXGISwapChainMedia::SetPresentDuration +
    + + +

    Queries the graphics driver for a supported frame present duration corresponding to a custom refresh rate.

    +
    +

    Indicates the frame duration to check. This value is the duration of one frame at the desired refresh rate, specified in hundreds of nanoseconds. For example, set this field to 167777 to check for 60 Hz refresh rate support.

    +

    A variable that will be set to the closest supported frame present duration that's smaller than the requested value, or zero if the device does not support any lower duration.

    +

    A variable that will be set to the closest supported frame present duration that's larger than the requested value, or zero if the device does not support any higher duration.

    +

    This method returns on success, or a DXGI error code on failure.

    + +

    If the DXGI output adapter does not support custom refresh rates (for example, an external display) then the display driver will set upper and lower bounds to (0, 0).

    +
    + + dn384132 + HRESULT IDXGISwapChainMedia::CheckPresentDurationSupport([In] unsigned int DesiredPresentDuration,[Out] unsigned int* pClosestSmallerPresentDuration,[Out] unsigned int* pClosestLargerPresentDuration) + IDXGISwapChainMedia::CheckPresentDurationSupport +
    + + +

    Describes an adapter (or video card) by using DXGI 1.0.

    +
    + +

    The structure provides a description of an adapter. This structure is initialized by using the method.

    +
    + + bb173058 + DXGI_ADAPTER_DESC + DXGI_ADAPTER_DESC +
    + + +

    A string that contains the adapter description. On feature level 9 graphics hardware, GetDesc returns ?Software Adapter? for the description string.

    +
    + + bb173058 + wchar_t Description[128] + wchar_t Description +
    + + +

    The PCI ID of the hardware vendor. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the hardware vendor.

    +
    + + bb173058 + unsigned int VendorId + unsigned int VendorId +
    + + +

    The PCI ID of the hardware device. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the hardware device.

    +
    + + bb173058 + unsigned int DeviceId + unsigned int DeviceId +
    + + +

    The PCI ID of the sub system. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the sub system.

    +
    + + bb173058 + unsigned int SubSysId + unsigned int SubSysId +
    + + +

    The PCI ID of the revision number of the adapter. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the revision number of the adapter.

    +
    + + bb173058 + unsigned int Revision + unsigned int Revision +
    + + +

    The number of bytes of dedicated video memory that are not shared with the CPU.

    +
    + + bb173058 + SIZE_T DedicatedVideoMemory + SIZE_T DedicatedVideoMemory +
    + + +

    The number of bytes of dedicated system memory that are not shared with the CPU. This memory is allocated from available system memory at boot time.

    +
    + + bb173058 + SIZE_T DedicatedSystemMemory + SIZE_T DedicatedSystemMemory +
    + + +

    The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.

    +
    + + bb173058 + SIZE_T SharedSystemMemory + SIZE_T SharedSystemMemory +
    + + +

    A unique value that identifies the adapter. See for a definition of the structure. is defined in dxgi.h.

    +
    + + bb173058 + LUID AdapterLuid + LUID AdapterLuid +
    + + +

    Describes an adapter (or video card) using DXGI 1.1.

    +
    + +

    The structure provides a DXGI 1.1 description of an adapter. This structure is initialized by using the method.

    +
    + + ff471326 + DXGI_ADAPTER_DESC1 + DXGI_ADAPTER_DESC1 +
    + + +

    A string that contains the adapter description. On feature level 9 graphics hardware, GetDesc1 returns ?Software Adapter? for the description string.

    +
    + + ff471326 + wchar_t Description[128] + wchar_t Description +
    + + +

    The PCI ID of the hardware vendor. On feature level 9 graphics hardware, GetDesc1 returns zeros for the PCI ID of the hardware vendor.

    +
    + + ff471326 + unsigned int VendorId + unsigned int VendorId +
    + + +

    The PCI ID of the hardware device. On feature level 9 graphics hardware, GetDesc1 returns zeros for the PCI ID of the hardware device.

    +
    + + ff471326 + unsigned int DeviceId + unsigned int DeviceId +
    + + +

    The PCI ID of the sub system. On feature level 9 graphics hardware, GetDesc1 returns zeros for the PCI ID of the sub system.

    +
    + + ff471326 + unsigned int SubSysId + unsigned int SubSysId +
    + + +

    The PCI ID of the revision number of the adapter. On feature level 9 graphics hardware, GetDesc1 returns zeros for the PCI ID of the revision number of the adapter.

    +
    + + ff471326 + unsigned int Revision + unsigned int Revision +
    + + +

    The number of bytes of dedicated video memory that are not shared with the CPU.

    +
    + + ff471326 + SIZE_T DedicatedVideoMemory + SIZE_T DedicatedVideoMemory +
    + + +

    The number of bytes of dedicated system memory that are not shared with the CPU. This memory is allocated from available system memory at boot time.

    +
    + + ff471326 + SIZE_T DedicatedSystemMemory + SIZE_T DedicatedSystemMemory +
    + + +

    The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.

    +
    + + ff471326 + SIZE_T SharedSystemMemory + SIZE_T SharedSystemMemory +
    + + +

    A unique value that identifies the adapter. See for a definition of the structure. is defined in dxgi.h.

    +
    + + ff471326 + LUID AdapterLuid + LUID AdapterLuid +
    + + +

    A value of the enumerated type that describes the adapter type. The flag is reserved.

    +
    + + ff471326 + DXGI_ADAPTER_FLAG Flags + DXGI_ADAPTER_FLAG Flags +
    + + +

    Describes an adapter (or video card) that uses Microsoft DirectX Graphics Infrastructure (DXGI) 1.2.

    +
    + +

    The structure provides a DXGI 1.2 description of an adapter. This structure is initialized by using the method.

    +
    + + hh404493 + DXGI_ADAPTER_DESC2 + DXGI_ADAPTER_DESC2 +
    + + +

    A string that contains the adapter description.

    +
    + + hh404493 + wchar_t Description[128] + wchar_t Description +
    + + +

    The PCI ID of the hardware vendor.

    +
    + + hh404493 + unsigned int VendorId + unsigned int VendorId +
    + + +

    The PCI ID of the hardware device.

    +
    + + hh404493 + unsigned int DeviceId + unsigned int DeviceId +
    + + +

    The PCI ID of the sub system.

    +
    + + hh404493 + unsigned int SubSysId + unsigned int SubSysId +
    + + +

    The PCI ID of the revision number of the adapter.

    +
    + + hh404493 + unsigned int Revision + unsigned int Revision +
    + + +

    The number of bytes of dedicated video memory that are not shared with the CPU.

    +
    + + hh404493 + SIZE_T DedicatedVideoMemory + SIZE_T DedicatedVideoMemory +
    + + +

    The number of bytes of dedicated system memory that are not shared with the CPU. This memory is allocated from available system memory at boot time.

    +
    + + hh404493 + SIZE_T DedicatedSystemMemory + SIZE_T DedicatedSystemMemory +
    + + +

    The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.

    +
    + + hh404493 + SIZE_T SharedSystemMemory + SIZE_T SharedSystemMemory +
    + + +

    A unique value that identifies the adapter. See for a definition of the structure. is defined in dxgi.h.

    +
    + + hh404493 + LUID AdapterLuid + LUID AdapterLuid +
    + + +

    A value of the enumerated type that describes the adapter type. The flag is reserved.

    +
    + + hh404493 + DXGI_ADAPTER_FLAG Flags + DXGI_ADAPTER_FLAG Flags +
    + + +

    A value of the enumerated type that describes the granularity level at which the GPU can be preempted from performing its current graphics rendering task.

    +
    + + hh404493 + DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity + DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity +
    + + +

    A value of the enumerated type that describes the granularity level at which the GPU can be preempted from performing its current compute task.

    +
    + + hh404493 + DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity + DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity +
    + + +

    Describes an adapter (or video card) by using DXGI 1.0.

    +
    + +

    The structure provides a description of an adapter. This structure is initialized by using the method.

    +
    + + bb173058 + DXGI_ADAPTER_DESC3 + DXGI_ADAPTER_DESC3 +
    + + +

    A string that contains the adapter description. On feature level 9 graphics hardware, GetDesc returns ?Software Adapter? for the description string.

    +
    + + bb173058 + wchar_t Description[128] + wchar_t Description +
    + + +

    The PCI ID of the hardware vendor. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the hardware vendor.

    +
    + + bb173058 + unsigned int VendorId + unsigned int VendorId +
    + + +

    The PCI ID of the hardware device. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the hardware device.

    +
    + + bb173058 + unsigned int DeviceId + unsigned int DeviceId +
    + + +

    The PCI ID of the sub system. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the sub system.

    +
    + + bb173058 + unsigned int SubSysId + unsigned int SubSysId +
    + + +

    The PCI ID of the revision number of the adapter. On feature level 9 graphics hardware, GetDesc returns zeros for the PCI ID of the revision number of the adapter.

    +
    + + bb173058 + unsigned int Revision + unsigned int Revision +
    + + +

    The number of bytes of dedicated video memory that are not shared with the CPU.

    +
    + + bb173058 + SIZE_T DedicatedVideoMemory + SIZE_T DedicatedVideoMemory +
    + + +

    The number of bytes of dedicated system memory that are not shared with the CPU. This memory is allocated from available system memory at boot time.

    +
    + + bb173058 + SIZE_T DedicatedSystemMemory + SIZE_T DedicatedSystemMemory +
    + + +

    The number of bytes of shared system memory. This is the maximum value of system memory that may be consumed by the adapter during operation. Any incidental memory consumed by the driver as it manages and uses video memory is additional.

    +
    + + bb173058 + SIZE_T SharedSystemMemory + SIZE_T SharedSystemMemory +
    + + +

    A unique value that identifies the adapter. See for a definition of the structure. is defined in dxgi.h.

    +
    + + bb173058 + LUID AdapterLuid + LUID AdapterLuid +
    + + + No documentation. + + + bb173058 + DXGI_ADAPTER_FLAG3 Flags + DXGI_ADAPTER_FLAG3 Flags + + + + No documentation. + + + bb173058 + DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity + DXGI_GRAPHICS_PREEMPTION_GRANULARITY GraphicsPreemptionGranularity + + + + No documentation. + + + bb173058 + DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity + DXGI_COMPUTE_PREEMPTION_GRANULARITY ComputePreemptionGranularity + + + +

    Used with ::CreateDecodeSwapChainForCompositionSurfaceHandle to describe a decode swap chain.

    +
    + + dn384106 + DXGI_DECODE_SWAP_CHAIN_DESC + DXGI_DECODE_SWAP_CHAIN_DESC +
    + + + No documentation. + + + dn384106 + unsigned int Flags + unsigned int Flags + + + +

    Describes timing and presentation statistics for a frame.

    +
    + +

    You initialize the structure with the or method.

    You can only use for swap chains that either use the flip presentation model or draw in full-screen mode. You set the value in the SwapEffect member of the structure to specify that the swap chain uses the flip presentation model.

    The values in the PresentCount and PresentRefreshCount members indicate information about when a frame was presented on the display screen. You can use these values to determine whether a glitch occurred. The values in the SyncRefreshCount and SyncQPCTime members indicate timing information that you can use for audio and video synchronization or very precise animation. If the swap chain draws in full-screen mode, these values are based on when the computer booted. + If the swap chain draws in windowed mode, these values are based on when the swap chain is created.

    +
    + + bb173060 + DXGI_FRAME_STATISTICS + DXGI_FRAME_STATISTICS +
    + + +

    A value that represents the running total count of times that an image was presented to the monitor since the computer booted.

    Note??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called or . ?
    +
    + + bb173060 + unsigned int PresentCount + unsigned int PresentCount +
    + + +

    A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).

    +
    + + bb173060 + unsigned int PresentRefreshCount + unsigned int PresentRefreshCount +
    + + +

    A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling QueryPerformanceCounter and that have happened since the computer booted (for windowed mode, since the swap chain was created).

    +
    + + bb173060 + unsigned int SyncRefreshCount + unsigned int SyncRefreshCount +
    + + +

    A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the QueryPerformanceCounter function.

    +
    + + bb173060 + LARGE_INTEGER SyncQPCTime + LARGE_INTEGER SyncQPCTime +
    + + +

    Reserved. Always returns 0.

    +
    + + bb173060 + LARGE_INTEGER SyncGPUTime + LARGE_INTEGER SyncGPUTime +
    + + +

    Used to verify system approval for the app's custom present duration (custom refresh rate). Approval should be continuously verified on a frame-by-frame basis.

    +
    + +

    This structure is used with the GetFrameStatisticsMedia method.

    +
    + + dn384108 + DXGI_FRAME_STATISTICS_MEDIA + DXGI_FRAME_STATISTICS_MEDIA +
    + + +

    A value that represents the running total count of times that an image was presented to the monitor since the computer booted.

    Note??The number of times that an image was presented to the monitor is not necessarily the same as the number of times that you called or . ?
    +
    + + dn384108 + unsigned int PresentCount + unsigned int PresentCount +
    + + +

    A value that represents the running total count of v-blanks at which the last image was presented to the monitor and that have happened since the computer booted (for windowed mode, since the swap chain was created).

    +
    + + dn384108 + unsigned int PresentRefreshCount + unsigned int PresentRefreshCount +
    + + +

    A value that represents the running total count of v-blanks when the scheduler last sampled the machine time by calling QueryPerformanceCounter and that have happened since the computer booted (for windowed mode, since the swap chain was created).

    +
    + + dn384108 + unsigned int SyncRefreshCount + unsigned int SyncRefreshCount +
    + + +

    A value that represents the high-resolution performance counter timer. This value is the same as the value returned by the QueryPerformanceCounter function.

    +
    + + dn384108 + LARGE_INTEGER SyncQPCTime + LARGE_INTEGER SyncQPCTime +
    + + +

    Reserved. Always returns 0.

    +
    + + dn384108 + LARGE_INTEGER SyncGPUTime + LARGE_INTEGER SyncGPUTime +
    + + +

    A value indicating the composition presentation mode. This value is used to determine whether the app should continue to use the decode swap chain. See .

    +
    + + dn384108 + DXGI_FRAME_PRESENTATION_MODE CompositionMode + DXGI_FRAME_PRESENTATION_MODE CompositionMode +
    + + +

    If the system approves an app's custom present duration request, this field is set to the approved custom present duration.

    If the app's custom present duration request is not approved, this field is set to zero.

    +
    + + dn384108 + unsigned int ApprovedPresentDuration + unsigned int ApprovedPresentDuration +
    + + +

    Controls the settings of a gamma curve.

    +
    + +

    The structure is used by the method.

    For info about using gamma correction, see Using gamma correction.

    +
    + + bb173061 + DXGI_GAMMA_CONTROL + DXGI_GAMMA_CONTROL +
    + + +

    A structure with scalar values that are applied to rgb values before being sent to the gamma look up table.

    +
    + + bb173061 + DXGI_RGB Scale + DXGI_RGB Scale +
    + + +

    A structure with offset values that are applied to the rgb values before being sent to the gamma look up table.

    +
    + + bb173061 + DXGI_RGB Offset + DXGI_RGB Offset +
    + + +

    An array of structures that control the points of a gamma curve.

    +
    + + bb173061 + DXGI_RGB GammaCurve[1025] + DXGI_RGB GammaCurve +
    + + +

    Controls the gamma capabilities of an adapter.

    +
    + +

    To get a list of the capabilities for controlling gamma correction, call .

    For info about using gamma correction, see Using gamma correction.

    +
    + + bb173062 + DXGI_GAMMA_CONTROL_CAPABILITIES + DXGI_GAMMA_CONTROL_CAPABILITIES +
    + + +

    True if scaling and offset operations are supported during gamma correction; otherwise, false.

    +
    + + bb173062 + BOOL ScaleAndOffsetSupported + BOOL ScaleAndOffsetSupported +
    + + +

    A value describing the maximum range of the control-point positions.

    +
    + + bb173062 + float MaxConvertedValue + float MaxConvertedValue +
    + + +

    A value describing the minimum range of the control-point positions.

    +
    + + bb173062 + float MinConvertedValue + float MinConvertedValue +
    + + +

    A value describing the number of control points in the array.

    +
    + + bb173062 + unsigned int NumGammaControlPoints + unsigned int NumGammaControlPoints +
    + + +

    An array of values describing control points; the maximum length of control points is 1025.

    +
    + + bb173062 + float ControlPointPositions[1025] + float ControlPointPositions +
    + + +

    Describes the 10 bit display metadata, and is usually used for video. This is used to adjust the output to best match a display's capabilities.

    +
    + +

    The X and Y coordinates of the parameters mean the xy chromacity coordinate in the CIE1931 color space. The values are normalized to 50000, so to get a value between 0.0 and 1.0, divide by 50000.

    This structure is used in conjunction with the SetHDRMetaData method.

    +
    + + mt732700 + DXGI_HDR_METADATA_HDR10 + DXGI_HDR_METADATA_HDR10 +
    + + +

    The chromaticity coordinates of the 1.0 red value. Index 0 contains the X coordinate and index 1 contains the Y coordinate.

    +
    + + mt732700 + unsigned short RedPrimary[2] + unsigned short RedPrimary +
    + + +

    The chromaticity coordinates of the 1.0 green value. Index 0 contains the X coordinate and index 1 contains the Y coordinate.

    +
    + + mt732700 + unsigned short GreenPrimary[2] + unsigned short GreenPrimary +
    + + +

    The chromaticity coordinates of the 1.0 blue value. Index 0 contains the X coordinate and index 1 contains the Y coordinate.

    +
    + + mt732700 + unsigned short BluePrimary[2] + unsigned short BluePrimary +
    + + +

    The chromaticity coordinates of the white point. Index 0 contains the X coordinate and index 1 contains the Y coordinate.

    +
    + + mt732700 + unsigned short WhitePoint[2] + unsigned short WhitePoint +
    + + +

    The maximum number of nits of the display used to master the content. Units are 0.0001 nit, so if the value is 1 nit, the value should be 10,000.

    +
    + + mt732700 + unsigned int MaxMasteringLuminance + unsigned int MaxMasteringLuminance +
    + + +

    The minimum number of nits (in units of 0.00001 nit) of the display used to master the content.

    +
    + + mt732700 + unsigned int MinMasteringLuminance + unsigned int MinMasteringLuminance +
    + + +

    The maximum nit value (in units of 0.00001 nit) used anywhere in the content.

    +
    + + mt732700 + unsigned short MaxContentLightLevel + unsigned short MaxContentLightLevel +
    + + +

    The per-frame average of the maximum nit values (in units of 0.00001 nit).

    +
    + + mt732700 + unsigned short MaxFrameAverageLightLevel + unsigned short MaxFrameAverageLightLevel +
    + + +

    Describes a JPEG AC huffman table.

    +
    + + dn903662 + DXGI_JPEG_AC_HUFFMAN_TABLE + DXGI_JPEG_AC_HUFFMAN_TABLE +
    + + +

    The number of codes for each code length.

    +
    + + dn903662 + unsigned char CodeCounts[16] + unsigned char CodeCounts +
    + + +

    The Huffman code values, in order of increasing code length.

    +
    + + dn903662 + unsigned char CodeValues[162] + unsigned char CodeValues +
    + + +

    Describes a JPEG DC huffman table.

    +
    + + dn903663 + DXGI_JPEG_DC_HUFFMAN_TABLE + DXGI_JPEG_DC_HUFFMAN_TABLE +
    + + +

    The number of codes for each code length.

    +
    + + dn903663 + unsigned char CodeCounts[12] + unsigned char CodeCounts +
    + + +

    The Huffman code values, in order of increasing code length.

    +
    + + dn903663 + unsigned char CodeValues[12] + unsigned char CodeValues +
    + + +

    Describes a JPEG quantization table.

    +
    + + dn903664 + DXGI_JPEG_QUANTIZATION_TABLE + DXGI_JPEG_QUANTIZATION_TABLE +
    + + +

    An array of bytes containing the elements of the quantization table.

    +
    + + dn903664 + unsigned char Elements[64] + unsigned char Elements +
    + + +

    Describes a mapped rectangle that is used to access a surface.

    +
    + +

    The structure is initialized by the method.

    +
    + + bb173063 + DXGI_MAPPED_RECT + DXGI_MAPPED_RECT +
    + + +

    A value that describes the width, in bytes, of the surface.

    +
    + + bb173063 + int Pitch + int Pitch +
    + + +

    A reference to the image buffer of the surface.

    +
    + + bb173063 + unsigned char* pBits + unsigned char pBits +
    + + +

    Describes a display mode.

    +
    + +

    This structure is used by the GetDisplayModeList and FindClosestMatchingMode methods.

    The following format values are valid for display modes and when you create a bit-block transfer (bitblt) model swap chain. The valid values depend on the feature level that you are working with.

    • Feature level >= 9.1

      • (except 10.x on Windows?Vista)
      • (except 10.x on Windows?Vista)
    • Feature level >= 10.0

    • Feature level >= 11.0

    You can pass one of these format values to to determine if it is a valid format for displaying on screen. If returns in the bit field to which the pFormatSupport parameter points, the format is valid for displaying on screen.

    Starting with Windows?8 for a flip model swap chain (that is, a swap chain that has the value set in the SwapEffect member of ), you must set the Format member of to , , or .

    Because of the relaxed render target creation rules that Direct3D 11 has for back buffers, applications can create a render target view from a swap chain so they can use automatic color space conversion when they render the swap chain.

    +
    + + bb173064 + DXGI_MODE_DESC + DXGI_MODE_DESC +
    + + +

    A value that describes the resolution width. If you specify the width as zero when you call the method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the method to retrieve the assigned width value.

    +
    + + bb173064 + unsigned int Width + unsigned int Width +
    + + +

    A value describing the resolution height. If you specify the height as zero when you call the method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the method to retrieve the assigned height value.

    +
    + + bb173064 + unsigned int Height + unsigned int Height +
    + + +

    A structure describing the refresh rate in hertz

    +
    + + bb173064 + DXGI_RATIONAL RefreshRate + DXGI_RATIONAL RefreshRate +
    + + +

    A structure describing the display format.

    +
    + + bb173064 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    A member of the enumerated type describing the scanline drawing mode.

    +
    + + bb173064 + DXGI_MODE_SCANLINE_ORDER ScanlineOrdering + DXGI_MODE_SCANLINE_ORDER ScanlineOrdering +
    + + +

    A member of the enumerated type describing the scaling mode.

    +
    + + bb173064 + DXGI_MODE_SCALING Scaling + DXGI_MODE_SCALING Scaling +
    + + + Initializes a new instance of the structure. + + The width. + The height. + The refresh rate. + The format. + + + + Initializes a new instance of the struct. + + The format. + + + +

    Describes a display mode and whether the display mode supports stereo.

    +
    + +

    is identical to except that includes the Stereo member.

    This structure is used by the GetDisplayModeList1 and FindClosestMatchingMode1 methods.

    +
    + + hh404507 + DXGI_MODE_DESC1 + DXGI_MODE_DESC1 +
    + + +

    A value that describes the resolution width.

    +
    + + hh404507 + unsigned int Width + unsigned int Width +
    + + +

    A value that describes the resolution height.

    +
    + + hh404507 + unsigned int Height + unsigned int Height +
    + + +

    A structure that describes the refresh rate in hertz.

    +
    + + hh404507 + DXGI_RATIONAL RefreshRate + DXGI_RATIONAL RefreshRate +
    + + +

    A -typed value that describes the display format.

    +
    + + hh404507 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    A -typed value that describes the scan-line drawing mode.

    +
    + + hh404507 + DXGI_MODE_SCANLINE_ORDER ScanlineOrdering + DXGI_MODE_SCANLINE_ORDER ScanlineOrdering +
    + + +

    A -typed value that describes the scaling mode.

    +
    + + hh404507 + DXGI_MODE_SCALING Scaling + DXGI_MODE_SCALING Scaling +
    + + +

    Specifies whether the full-screen display mode is stereo. TRUE if stereo; otherwise, .

    +
    + + hh404507 + BOOL Stereo + BOOL Stereo +
    + + +

    Describes an output or physical connection between the adapter (video card) and a device.

    +
    + +

    The structure is initialized by the method.

    +
    + + bb173068 + DXGI_OUTPUT_DESC + DXGI_OUTPUT_DESC +
    + + +

    A string that contains the name of the output device.

    +
    + + bb173068 + wchar_t DeviceName[32] + wchar_t DeviceName +
    + + +

    A structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch (DPI) of the desktop. + For info about writing DPI-aware Win32 apps, see High DPI.

    +
    + + bb173068 + RECT DesktopCoordinates + RECT DesktopCoordinates +
    + + +

    True if the output is attached to the desktop; otherwise, false.

    +
    + + bb173068 + BOOL AttachedToDesktop + BOOL AttachedToDesktop +
    + + +

    A member of the enumerated type describing on how an image is rotated by the output.

    +
    + + bb173068 + DXGI_MODE_ROTATION Rotation + DXGI_MODE_ROTATION Rotation +
    + + +

    An handle that represents the display monitor. For more information, see and the Device Context.

    +
    + + bb173068 + HMONITOR Monitor + HMONITOR Monitor +
    + + +

    Describes an output or physical connection between the adapter (video card) and a device.

    +
    + +

    The structure is initialized by the method.

    +
    + + bb173068 + DXGI_OUTPUT_DESC1 + DXGI_OUTPUT_DESC1 +
    + + +

    A string that contains the name of the output device.

    +
    + + bb173068 + wchar_t DeviceName[32] + wchar_t DeviceName +
    + + +

    A structure containing the bounds of the output in desktop coordinates. Desktop coordinates depend on the dots per inch (DPI) of the desktop. + For info about writing DPI-aware Win32 apps, see High DPI.

    +
    + + bb173068 + RECT DesktopCoordinates + RECT DesktopCoordinates +
    + + +

    True if the output is attached to the desktop; otherwise, false.

    +
    + + bb173068 + BOOL AttachedToDesktop + BOOL AttachedToDesktop +
    + + +

    A member of the enumerated type describing on how an image is rotated by the output.

    +
    + + bb173068 + DXGI_MODE_ROTATION Rotation + DXGI_MODE_ROTATION Rotation +
    + + +

    An handle that represents the display monitor. For more information, see and the Device Context.

    +
    + + bb173068 + HMONITOR Monitor + HMONITOR Monitor +
    + + + No documentation. + + + bb173068 + unsigned int BitsPerColor + unsigned int BitsPerColor + + + + No documentation. + + + bb173068 + DXGI_COLOR_SPACE_TYPE ColorSpace + DXGI_COLOR_SPACE_TYPE ColorSpace + + + + No documentation. + + + bb173068 + float RedPrimary[2] + float RedPrimary + + + + No documentation. + + + bb173068 + float GreenPrimary[2] + float GreenPrimary + + + + No documentation. + + + bb173068 + float BluePrimary[2] + float BluePrimary + + + + No documentation. + + + bb173068 + float WhitePoint[2] + float WhitePoint + + + + No documentation. + + + bb173068 + float MinLuminance + float MinLuminance + + + + No documentation. + + + bb173068 + float MaxLuminance + float MaxLuminance + + + + No documentation. + + + bb173068 + float MaxFullFrameLuminance + float MaxFullFrameLuminance + + + +

    The structure describes the dimension of the output and the surface that contains the desktop image. The format of the desktop image is always .

    +
    + +

    This structure is used by GetDesc.

    +
    + + hh404510 + DXGI_OUTDUPL_DESC + DXGI_OUTDUPL_DESC +
    + + + No documentation. + + + hh404510 + DXGI_MODE_DESC ModeDesc + DXGI_MODE_DESC ModeDesc + + + + No documentation. + + + hh404510 + DXGI_MODE_ROTATION Rotation + DXGI_MODE_ROTATION Rotation + + + + No documentation. + + + hh404510 + BOOL DesktopImageInSystemMemory + BOOL DesktopImageInSystemMemory + + + +

    The structure describes the current desktop image.

    +
    + +

    A non-zero LastMouseUpdateTime indicates an update to either a mouse reference position or a mouse reference position and shape. That is, the mouse reference position is always valid for a non-zero LastMouseUpdateTime; however, the application must check the value of the PointerShapeBufferSize member to determine whether the shape was updated too.

    If only the reference was updated (that is, the desktop image was not updated), the AccumulatedFrames, TotalMetadataBufferSize, and LastPresentTime members are set to zero.

    An AccumulatedFrames value of one indicates that the application completed processing the last frame before a new desktop image was presented. If the AccumulatedFrames value is greater than one, more desktop image updates have occurred while the application processed the last desktop update. In this situation, the operating system accumulated the update regions. For more information about desktop updates, see Desktop Update Data.

    A non-zero TotalMetadataBufferSize indicates the total size of the buffers that are required to store all the desktop update metadata. An application cannot determine the size of each type of metadata. The application must call the , , or method to obtain information about each type of metadata.

    Note??To correct visual effects, an application must process the move region data before it processes the dirty rectangles.? +
    + + hh404512 + DXGI_OUTDUPL_FRAME_INFO + DXGI_OUTDUPL_FRAME_INFO +
    + + +

    The time stamp of the last update of the desktop image. The operating system calls the QueryPerformanceCounter function to obtain the value. A zero value indicates that the desktop image was not updated since an application last called the method to acquire the next frame of the desktop image.

    +
    + + hh404512 + LARGE_INTEGER LastPresentTime + LARGE_INTEGER LastPresentTime +
    + + +

    The time stamp of the last update to the mouse. The operating system calls the QueryPerformanceCounter function to obtain the value. A zero value indicates that the position or shape of the mouse was not updated since an application last called the method to acquire the next frame of the desktop image. The mouse position is always supplied for a mouse update. A new reference shape is indicated by a non-zero value in the PointerShapeBufferSize member.

    +
    + + hh404512 + LARGE_INTEGER LastMouseUpdateTime + LARGE_INTEGER LastMouseUpdateTime +
    + + +

    The number of frames that the operating system accumulated in the desktop image surface since the calling application processed the last desktop image. For more information about this number, see Remarks.

    +
    + + hh404512 + unsigned int AccumulatedFrames + unsigned int AccumulatedFrames +
    + + +

    Specifies whether the operating system accumulated updates by coalescing dirty regions. Therefore, the dirty regions might contain unmodified pixels. TRUE if dirty regions were accumulated; otherwise, .

    +
    + + hh404512 + BOOL RectsCoalesced + BOOL RectsCoalesced +
    + + +

    Specifies whether the desktop image might contain protected content that was already blacked out in the desktop image. TRUE if protected content was already blacked; otherwise, . The application can use this information to notify the remote user that some of the desktop content might be protected and therefore not visible.

    +
    + + hh404512 + BOOL ProtectedContentMaskedOut + BOOL ProtectedContentMaskedOut +
    + + +

    A structure that describes the most recent mouse position if the LastMouseUpdateTime member is a non-zero value; otherwise, this value is ignored. This value provides the coordinates of the location where the top-left-hand corner of the reference shape is drawn; this value is not the desktop position of the hot spot.

    +
    + + hh404512 + DXGI_OUTDUPL_POINTER_POSITION PointerPosition + DXGI_OUTDUPL_POINTER_POSITION PointerPosition +
    + + +

    Size in bytes of the buffers to store all the desktop update metadata for this frame. For more information about this size, see Remarks.

    +
    + + hh404512 + unsigned int TotalMetadataBufferSize + unsigned int TotalMetadataBufferSize +
    + + +

    Size in bytes of the buffer to hold the new pixel data for the mouse shape. For more information about this size, see Remarks.

    +
    + + hh404512 + unsigned int PointerShapeBufferSize + unsigned int PointerShapeBufferSize +
    + + +

    The structure describes the movement of a rectangle.

    +
    + +

    This structure is used by GetFrameMoveRects.

    +
    + + hh404514 + DXGI_OUTDUPL_MOVE_RECT + DXGI_OUTDUPL_MOVE_RECT +
    + + +

    The starting position of a rectangle.

    +
    + + hh404514 + POINT SourcePoint + POINT SourcePoint +
    + + +

    The target region to which to move a rectangle.

    +
    + + hh404514 + RECT DestinationRect + RECT DestinationRect +
    + + +

    The structure describes the position of the hardware cursor.

    +
    + +

    The Position member is valid only if the Visible member?s value is set to TRUE.

    +
    + + hh404516 + DXGI_OUTDUPL_POINTER_POSITION + DXGI_OUTDUPL_POINTER_POSITION +
    + + +

    The position of the hardware cursor relative to the top-left of the adapter output.

    +
    + + hh404516 + POINT Position + POINT Position +
    + + +

    Specifies whether the hardware cursor is visible. TRUE if visible; otherwise, . If the hardware cursor is not visible, the calling application does not display the cursor in the client.

    +
    + + hh404516 + BOOL Visible + BOOL Visible +
    + + +

    The structure describes information about the cursor shape.

    +
    + +

    An application draws the cursor shape with the top-left-hand corner drawn at the position that the Position member of the structure specifies; the application does not use the hot spot to draw the cursor shape.

    An application calls the method to retrieve cursor shape information in a structure.

    +
    + + hh404518 + DXGI_OUTDUPL_POINTER_SHAPE_INFO + DXGI_OUTDUPL_POINTER_SHAPE_INFO +
    + + +

    A -typed value that specifies the type of cursor shape.

    +
    + + hh404518 + unsigned int Type + unsigned int Type +
    + + +

    The width in pixels of the mouse cursor.

    +
    + + hh404518 + unsigned int Width + unsigned int Width +
    + + +

    The height in scan lines of the mouse cursor.

    +
    + + hh404518 + unsigned int Height + unsigned int Height +
    + + +

    The width in bytes of the mouse cursor.

    +
    + + hh404518 + unsigned int Pitch + unsigned int Pitch +
    + + +

    The position of the cursor's hot spot relative to its upper-left pixel. An application does not use the hot spot when it determines where to draw the cursor shape.

    +
    + + hh404518 + POINT HotSpot + POINT HotSpot +
    + + +

    Describes information about present that helps the operating system optimize presentation.

    +
    + +

    This structure is used by the Present1 method.

    The scroll rectangle and the list of dirty rectangles could overlap. In this situation, the dirty rectangles take priority. Applications can then have pieces of dynamic content on top of a scrolled area. For example, an application could scroll a page and play video at the same time.

    The following diagram and coordinates illustrate this example.

    DirtyRectsCount = 2 + pDirtyRects[ 0 ] = { 10, 30, 40, 50 } // Video + pDirtyRects[ 1 ] = { 0, 70, 50, 80 } // New line + *pScrollRect = { 0, 0, 50, 70 } + *pScrollOffset = { 0, -10 } +

    Parts of the previous frame and content that the application renders are combined to produce the final frame that the operating system presents on the display screen. Most of the window is scrolled from the previous frame. The application must update the video frame with the new chunk of content that appears due to scrolling.

    The dashed rectangle shows the scroll rectangle in the current frame. The scroll rectangle is specified by the pScrollRect member. + The arrow shows the scroll offset. The scroll offset is specified by the pScrollOffset member. + Filled rectangles show dirty rectangles that the application updated with new content. The filled rectangles are specified by the DirtyRectsCount and pDirtyRects members.

    The scroll rectangle and offset are not supported for the or present option. Dirty rectangles and scroll rectangle are not supported for multisampled swap chains.

    The actual implementation of composition and necessary bitblts is different for the bitblt model and the flip model. For more info about these models, see DXGI Flip Model.

    For more info about the flip-model swap chain and optimizing presentation, see Enhancing presentation with the flip model, dirty rectangles, and scrolled areas.

    +
    + + hh404522 + DXGI_PRESENT_PARAMETERS + DXGI_PRESENT_PARAMETERS +
    + + +

    The number of updated rectangles that you update in the back buffer for the presented frame. The operating system uses this information to optimize presentation. You can set this member to 0 to indicate that you update the whole frame.

    +
    + + hh404522 + unsigned int DirtyRectsCount + unsigned int DirtyRectsCount +
    + + +

    A list of updated rectangles that you update in the back buffer for the presented frame. An application must update every single pixel in each rectangle that it reports to the runtime; the application cannot assume that the pixels are saved from the previous frame. For more information about updating dirty rectangles, see Remarks. You can set this member to null if DirtyRectsCount is 0. An application must not update any pixel outside of the dirty rectangles.

    +
    + + hh404522 + RECT* pDirtyRects + RECT pDirtyRects +
    + + +

    A reference to the scrolled rectangle. The scrolled rectangle is the rectangle of the previous frame from which the runtime bit-block transfers (bitblts) content. The runtime also uses the scrolled rectangle to optimize presentation in terminal server and indirect display scenarios.

    The scrolled rectangle also describes the destination rectangle, that is, the region on the current frame that is filled with scrolled content. You can set this member to null to indicate that no content is scrolled from the previous frame.

    +
    + + hh404522 + RECT* pScrollRect + RECT pScrollRect +
    + + +

    A reference to the offset of the scrolled area that goes from the source rectangle (of previous frame) to the destination rectangle (of current frame). You can set this member to null to indicate no offset.

    +
    + + hh404522 + POINT* pScrollOffset + POINT pScrollOffset +
    + + + A list of updated rectangles that you update in the back buffer for the presented frame. An application must update every single pixel in each rectangle that it reports to the runtime; the application cannot assume that the pixels are saved from the previous frame. For more information about updating dirty rectangles, see Remarks. You can set this member to null if DirtyRectsCount is 0. An application must not update any pixel outside of the dirty rectangles. + + RECT* pDirtyRects + + + + A reference to the scrolled rectangle. The scrolled rectangle is the rectangle of the previous frame from which the runtime bit-block transfers (bitblts) content. The runtime also uses the scrolled rectangle to optimize presentation in terminal server and indirect display scenarios. + The scrolled rectangle also describes the destination rectangle, that is, the region on the current frame that is filled with scrolled content. You can set this member to null to indicate that no content is scrolled from the previous frame. + + RECT* pScrollRect + + + + A reference to the offset of the scrolled area that goes from the source rectangle (of previous frame) to the destination rectangle (of current frame). You can set this member to null to indicate no offset. + + POINT* pScrollOffset + + + +

    Describes the current video memory budgeting parameters.

    +
    + +

    Use this structure with QueryVideoMemoryInfo.

    Refer to the remarks for .

    +
    + + dn933220 + DXGI_QUERY_VIDEO_MEMORY_INFO + DXGI_QUERY_VIDEO_MEMORY_INFO +
    + + +

    Specifies the OS-provided video memory budget, in bytes, that the application should target. If CurrentUsage is greater than Budget, the application may incur stuttering or performance penalties due to background activity by the OS to provide other applications with a fair usage of video memory.

    +
    + + dn933220 + unsigned longlong Budget + unsigned longlong Budget +
    + + +

    Specifies the application?s current video memory usage, in bytes.

    +
    + + dn933220 + unsigned longlong CurrentUsage + unsigned longlong CurrentUsage +
    + + +

    The amount of video memory, in bytes, that the application has available for reservation. To reserve this video memory, the application should call .

    +
    + + dn933220 + unsigned longlong AvailableForReservation + unsigned longlong AvailableForReservation +
    + + +

    The amount of video memory, in bytes, that is reserved by the application. The OS uses the reservation as a hint to determine the application?s minimum working set. Applications should attempt to ensure that their video memory usage can be trimmed to meet this requirement.

    +
    + + dn933220 + unsigned longlong CurrentReservation + unsigned longlong CurrentReservation +
    + + +

    Represents a rational number.

    +
    + +

    This structure is a member of the structure.

    The structure operates under the following rules:

    • 0/0 is legal and will be interpreted as 0/1.
    • 0/anything is interpreted as zero.
    • If you are representing a whole number, the denominator should be 1.
    +
    + + bb173069 + DXGI_RATIONAL + DXGI_RATIONAL +
    + + +

    An unsigned integer value representing the top of the rational number.

    +
    + + bb173069 + unsigned int Numerator + unsigned int Numerator +
    + + +

    An unsigned integer value representing the bottom of the rational number.

    +
    + + bb173069 + unsigned int Denominator + unsigned int Denominator +
    + + + An empty rational that can be used for comparisons. + + + + + Initializes a new instance of the structure. + + The numerator of the rational pair. + The denominator of the rational pair. + + + +

    Describes multi-sampling parameters for a resource.

    +
    + +

    This structure is a member of the structure.

    The default sampler mode, with no anti-aliasing, has a count of 1 and a quality level of 0.

    If multi-sample antialiasing is being used, all bound render targets and depth buffers must have the same sample counts and quality levels.

    Differences between Direct3D 10.0 and Direct3D 10.1 and between Direct3D 10.0 and Direct3D 11:

    Direct3D 10.1 has defined two standard quality levels: D3D10_STANDARD_MULTISAMPLE_PATTERN and D3D10_CENTER_MULTISAMPLE_PATTERN in the D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS enumeration in D3D10_1.h.

    Direct3D 11 has defined two standard quality levels: and in the enumeration in D3D11.h.

    ?

    +
    + + bb173072 + DXGI_SAMPLE_DESC + DXGI_SAMPLE_DESC +
    + + +

    The number of multisamples per pixel.

    +
    + + bb173072 + unsigned int Count + unsigned int Count +
    + + +

    The image quality level. The higher the quality, the lower the performance. The valid range is between zero and one less than the level returned by ID3D10Device::CheckMultisampleQualityLevels for Direct3D 10 or for Direct3D 11.

    For Direct3D 10.1 and Direct3D 11, you can use two special quality level values. For more information about these quality level values, see Remarks.

    +
    + + bb173072 + unsigned int Quality + unsigned int Quality +
    + + + Initializes a new instance of the structure. + + The sample count. + The sample quality. + + + +

    Represents a handle to a shared resource.

    +
    + +

    To create a shared surface, pass a shared-resource handle into the method.

    +
    + + bb173073 + DXGI_SHARED_RESOURCE + DXGI_SHARED_RESOURCE +
    + + +

    A handle to a shared resource.

    +
    + + bb173073 + void* Handle + void Handle +
    + + +

    Describes a surface.

    +
    + +

    This structure is used by the GetDesc and CreateSurface methods.

    +
    + + bb173074 + DXGI_SURFACE_DESC + DXGI_SURFACE_DESC +
    + + +

    A value describing the surface width.

    +
    + + bb173074 + unsigned int Width + unsigned int Width +
    + + +

    A value describing the surface height.

    +
    + + bb173074 + unsigned int Height + unsigned int Height +
    + + +

    A member of the enumerated type that describes the surface format.

    +
    + + bb173074 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    A member of the structure that describes multi-sampling parameters for the surface.

    +
    + + bb173074 + DXGI_SAMPLE_DESC SampleDesc + DXGI_SAMPLE_DESC SampleDesc +
    + + +

    Describes a swap chain.

    +
    + +

    This structure is used by the GetDesc and CreateSwapChain methods.

    In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.

    If you create a swap chain with one buffer, specifying does not cause the contents of the single buffer to be swapped with the front buffer.

    For performance information about flipping swap-chain buffers in full-screen application, see Full-Screen Application Performance Hints.

    +
    + + bb173075 + DXGI_SWAP_CHAIN_DESC + DXGI_SWAP_CHAIN_DESC +
    + + +

    A structure that describes the backbuffer display mode.

    +
    + + bb173075 + DXGI_MODE_DESC BufferDesc + DXGI_MODE_DESC BufferDesc +
    + + +

    A structure that describes multi-sampling parameters.

    +
    + + bb173075 + DXGI_SAMPLE_DESC SampleDesc + DXGI_SAMPLE_DESC SampleDesc +
    + + +

    A member of the DXGI_USAGE enumerated type that describes the surface usage and CPU access options for the back buffer. The back buffer can be used for shader input or render-target output.

    +
    + + bb173075 + DXGI_USAGE_ENUM BufferUsage + DXGI_USAGE_ENUM BufferUsage +
    + + +

    A value that describes the number of buffers in the swap chain. When you call to create a full-screen swap chain, you typically include the front buffer in this value. For more information about swap-chain buffers, see Remarks.

    +
    + + bb173075 + unsigned int BufferCount + unsigned int BufferCount +
    + + +

    An handle to the output window. This member must not be null.

    +
    + + bb173075 + HWND OutputWindow + HWND OutputWindow +
    + + +

    A Boolean value that specifies whether the output is in windowed mode. TRUE if the output is in windowed mode; otherwise, .

    We recommend that you create a windowed swap chain and allow the end user to change the swap chain to full screen through ; that is, do not set this member to to force the swap chain to be full screen. However, if you create the swap chain as full screen, also provide the end user with a list of supported display modes through the BufferDesc member because a swap chain that is created with an unsupported display mode might cause the display to go black and prevent the end user from seeing anything.

    For more information about choosing windowed verses full screen, see .

    +
    + + bb173075 + BOOL Windowed + BOOL Windowed +
    + + +

    A member of the enumerated type that describes options for handling the contents of the presentation buffer after presenting a surface.

    +
    + + bb173075 + DXGI_SWAP_EFFECT SwapEffect + DXGI_SWAP_EFFECT SwapEffect +
    + + +

    A member of the enumerated type that describes options for swap-chain behavior.

    +
    + + bb173075 + DXGI_SWAP_CHAIN_FLAG Flags + DXGI_SWAP_CHAIN_FLAG Flags +
    + + +

    Describes a swap chain.

    +
    + +

    This structure is used by the CreateSwapChainForHwnd, CreateSwapChainForCoreWindow, CreateSwapChainForComposition, CreateSwapChainForCompositionSurfaceHandle, and GetDesc1 methods.

    Note??You cannot cast a to a and vice versa. An application must explicitly use the method to retrieve the newer version of the swap-chain description structure.?

    In full-screen mode, there is a dedicated front buffer; in windowed mode, the desktop is the front buffer.

    For a flip-model swap chain (that is, a swap chain that has the value set in the SwapEffect member), you must set the Format member to , , or ; you must set the Count member of the structure that the SampleDesc member specifies to one and the Quality member of to zero because multiple sample antialiasing (MSAA) is not supported; you must set the BufferCount member to from two to sixteen. For more info about flip-model swap chain, see DXGI Flip Model.

    +
    + + hh404528 + DXGI_SWAP_CHAIN_DESC1 + DXGI_SWAP_CHAIN_DESC1 +
    + + +

    A value that describes the resolution width. If you specify the width as zero when you call the method to create a swap chain, the runtime obtains the width from the output window and assigns this width value to the swap-chain description. You can subsequently call the method to retrieve the assigned width value. You cannot specify the width as zero when you call the method.

    +
    + + hh404528 + unsigned int Width + unsigned int Width +
    + + +

    A value that describes the resolution height. If you specify the height as zero when you call the method to create a swap chain, the runtime obtains the height from the output window and assigns this height value to the swap-chain description. You can subsequently call the method to retrieve the assigned height value. You cannot specify the height as zero when you call the method.

    +
    + + hh404528 + unsigned int Height + unsigned int Height +
    + + +

    A structure that describes the display format.

    +
    + + hh404528 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    Specifies whether the full-screen display mode or the swap-chain back buffer is stereo. TRUE if stereo; otherwise, . If you specify stereo, you must also specify a flip-model swap chain (that is, a swap chain that has the value set in the SwapEffect member).

    +
    + + hh404528 + BOOL Stereo + BOOL Stereo +
    + + +

    A structure that describes multi-sampling parameters. This member is valid only with bit-block transfer (bitblt) model swap chains.

    +
    + + hh404528 + DXGI_SAMPLE_DESC SampleDesc + DXGI_SAMPLE_DESC SampleDesc +
    + + +

    A DXGI_USAGE-typed value that describes the surface usage and CPU access options for the back buffer. The back buffer can be used for shader input or render-target output.

    +
    + + hh404528 + DXGI_USAGE_ENUM BufferUsage + DXGI_USAGE_ENUM BufferUsage +
    + + +

    A value that describes the number of buffers in the swap chain. When you create a full-screen swap chain, you typically include the front buffer in this value.

    +
    + + hh404528 + unsigned int BufferCount + unsigned int BufferCount +
    + + +

    A -typed value that identifies resize behavior if the size of the back buffer is not equal to the target output.

    +
    + + hh404528 + DXGI_SCALING Scaling + DXGI_SCALING Scaling +
    + + +

    A -typed value that describes the presentation model that is used by the swap chain and options for handling the contents of the presentation buffer after presenting a surface. You must specify the value when you call the method because this method supports only flip presentation model.

    +
    + + hh404528 + DXGI_SWAP_EFFECT SwapEffect + DXGI_SWAP_EFFECT SwapEffect +
    + + +

    A -typed value that identifies the transparency behavior of the swap-chain back buffer.

    +
    + + hh404528 + DXGI_ALPHA_MODE AlphaMode + DXGI_ALPHA_MODE AlphaMode +
    + + +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies options for swap-chain behavior.

    +
    + + hh404528 + DXGI_SWAP_CHAIN_FLAG Flags + DXGI_SWAP_CHAIN_FLAG Flags +
    + + +

    Describes full-screen mode for a swap chain.

    +
    + +

    This structure is used by the CreateSwapChainForHwnd and GetFullscreenDesc methods.

    +
    + + hh404531 + DXGI_SWAP_CHAIN_FULLSCREEN_DESC + DXGI_SWAP_CHAIN_FULLSCREEN_DESC +
    + + +

    A structure that describes the refresh rate in hertz.

    +
    + + hh404531 + DXGI_RATIONAL RefreshRate + DXGI_RATIONAL RefreshRate +
    + + +

    A member of the enumerated type that describes the scan-line drawing mode.

    +
    + + hh404531 + DXGI_MODE_SCANLINE_ORDER ScanlineOrdering + DXGI_MODE_SCANLINE_ORDER ScanlineOrdering +
    + + +

    A member of the enumerated type that describes the scaling mode.

    +
    + + hh404531 + DXGI_MODE_SCALING Scaling + DXGI_MODE_SCALING Scaling +
    + + +

    A Boolean value that specifies whether the swap chain is in windowed mode. TRUE if the swap chain is in windowed mode; otherwise, .

    +
    + + hh404531 + BOOL Windowed + BOOL Windowed +
    + + + Internal class used to initialize this assembly. + + + + + Initializes this assembly. + + + This method is called when the assembly is loaded. + + + + + The namespace provides a managed DXGI API. + + hh404534 + DXGI + DXGI + + + + Internal VirtualSurfaceUpdatesCallbackNative Callback + + + + + Get a native callback pointer from a managed callback. + + The geometry sink. + A pointer to the unmanaged geometry sink counterpart + + + diff --git a/RenderHookAPI/bin/SharpDX.Desktop.dll b/RenderHookAPI/bin/SharpDX.Desktop.dll new file mode 100644 index 0000000000000000000000000000000000000000..b2d9dd08db5edc681581a7fe13786966c0a49891 GIT binary patch literal 46592 zcmeFa2Ut|c_cuOw8_Uv*fCvJjvML}*M?`4~DxzYKi6X3u0*kv~uZbmUiqXWFuIb-2 zOEemL7kk&Ju_Ve`6OAS&ChB=VGxshMW! zFF-I4@u!0vR>|$=6yARE1WSy89yvn-Uma#J<}Uu%`UHBgfu%`^(Wq1pbq+wRft-SV z1Z4vEj7V#kq(unnRTFr?=!G=RTcQDtP)|4bsKH}0fX3kCr1O-F$Y@X*p)@*oCg>_p zl^IzL5nd`Q(&?OKs@{wS8T4v1GU(139Kv-vBU)kj9)(L#85I<-Z3Z)NUU^**$$wv0 zcnAtcr8@ltl&J~#lU%DMtMpP8=#SrrzB_PeQofRTs1}r76FaXL-<;w zCwvEk%%2&3YjAGm@2N6+^Jr#n052Q?qYnZu=UO7h7omu==UhEi4}DN|BeNd}-^(pi zYqY4MA^2+P*i!Dpt}M*Tzy)I?RFe^7Fmje6RH~Lne+0~p09vy2$r#xNu78H9T$P{# zY>2TjQ2!XcO3hoVYY88%)$zCyN}QugtudmJJW^vsOAwo^Qb(wLT1mdVslXe{gP`S5 zl`#kfs)BXFjQJV?pr#>!C@@`RY=Tg@1L_EsNz5zCfh|T|P)`q#p$bUPQzg9!s%ioV zng}121??>dd2^bNwHab3ak|>v96@6kfY}IO0R!a*nW~esnp=SGRF7mtOAOXl04ifR z;7E+72>AU`JnQh3${48-Th|iJunvZnZB&+asKJN^2>EaukcUkCQ5oAHiArsb;a+es zIxV=LiZN>}aAO=N`WoX!oGQ3hGJ{c+F@ckPCLvaXL`kA_UN+heOU3oBEusuMCkM4L z5os$RtVYhNiJYo;;KrwwLFW*2p7+_`#NOIx4wVR2eCeZKTiGU z`fBslt?%FSr9QDfPW|WlYV*~t@89#ae`0-{`p@;%=Br!ZKjnkDgT8dAUmui+>kFr% zK4|6R`toQ#QQv=&Pu9=0`t>RL$*KR$Uv0j+{QY~r^e5KGssCJGZN9qo{d>NQC)UTQ z|6E^fzPj~2DPLpN1PpCW%WJZ)j*P-0f>W?a;GPkK-Jnt#QI0OcRi;I#eOqb#TS-1f zj4&8jl#$8HXo9RF0DCY86Cvyi)*?m>3tj@W)i4PLiIboauw*|X1f9bC#8Za*t0stO zk&-8oEjFa2gOySWLmvqnh`NjjbMwxgQB8pH(x7>=eMi+CZ#h6Ufe(>z7ukoAL|MoI zI#*>*=YCx}7ZIm(zb>5*ZBFNYT{<^~oX-8abZ&Y$o%?m^yvsSA`*rDD^*EjTb?K0T zpmQH|Gz;zLYmprA%^$D~kt-sMNK#EeM`^GYdrXv#AwwQluO}vFA+M23ShnFRrcyD6 z)rN=K*bz}qn4>zuH>izRz#5$OL6f5z>KjG2)dvN%4V17151QO|GyKGz90~RWY&%K> zgL$yG2>PMSwmd3vF@Vl@M2s)GNK89&13G}3I300nBlt3Ss`=_c*W7VJXJC#Kx&Zc1 zD&l$lM#LnjCh)AjF-|HucN*v_zq;jdhU)T}$mc3uaudKOW)}Jvktyq_EIOfo5sq?l zzZj!^o)mJO+!ZYnDUuHGKJXQiP29@E@_d^34Z^x`ccqEwB3`Gy zDI|znr}nkx@{+p&wA2NTh_Nb>=!5!^>R`THuA4ge7GdQy$e;@@{{?|aM_q6S9*Aje z#ahAOrBQikcqi&SH0JIgg!`)H6`QC`sR#O{gGTk>^J?7`4X)s zkFl@0l9dgJ+K3vUL9hehLW8xknhghY{EToZ$xi@IxP8Nu#+}a1>@vt?#GRU46hc-=s>c}=o1W>nEl#X>o zpXn1l7mKh`oZYL5$J(6yhy2z>M#UXrR>0$2bs_7hvS1_l-{@ zC^M;>@C?Gi&!UVN2Ss35n#-$ym2Scy#LBCGAcHv~b^t(lK6x7eq<|w>T^sa#Ko3D6 z!X3+g7c{0hd{^05+UR4%zDJjwO++%g5e{;fwe*EfG*McCAi~~C&oivc`R>@D_A#P& zpbLCYhtA^rTn|-*lclAEjw?cn@oHePHJHk50#U^^S=UTshUV!Et+4lkRCPKt)J+$0 z`*UVppomaQPgH*hT&j#i zk;^y?z&sqlS`09iClV=nUH+3{eXwI`tePqUBY5xVEN`O(5n~>KEEQO?qaHpdp%`IH zu}{$$%Mhnf{Ea9ZF+2^jJd#GH#H;wsifMJEoS?a}1OcCiYBVHXWh_T&YJN_@GdETn zC-9KJaf~1UpD5#F1>VLu4!+7dNnqf^I9`POjiZI13N1pvt1ygU%rw|zOyIuRs-zzd zlXYOv&5h7b_6l4{{y1xesWh^u$!e~&6q>9xp`NCKB9kRNxYSx`wv-eP2@mdLvRI4F zW$j`kqxiq@;Ec+Wib{*AU74w}!ctHY9^AchNJ(*F7t^?2=8>kdc0&>p3gQam;-iyd zVogzrNuiHdR#{e2Txzn{o^Ps9p;5eX+znOIXIcuz6qgN)%qcXNg$LIs{+~1}DrRWh z(1fAU(M54l1u+GYp=QXKu@Gp724G5e_6a6^_%zgE%jYJnsJA^Zz7JR|1C*Uut;Zz`>RW z4jc}HGj86zwb{CL8v-|N+8lKJ_~EQmr;g>EJ$o|y!ud1VKmKqw`^O*8W&iNQ`Rof9 z&S#%Le=hsnx%%$MAAjh4{`{rLx^?_h`26{cDL?%1L(Ze+{1eX8U%h$-+l>0p`t=(m zI43x7xB$3dIOE!N>%(^LsxlrpaKL!$)-RYHYoFH9YZfpz?KWdmsxfNd#{P(doYOGA zXM&qlP)L&z6xL!G#l{V$wDf_LoBK5N@BcIn88VoPi;JkFWEk8C8aZ+V4Ie(7rc54B z@4T~$uR{K-=fe+I@0dDeg2+2!#0dI3$ICA%DMq|W)Hi$fi?_TyQ-)wcFp9CTml=!r zl(FdbjK%H3!v8R1?N2e5ah9=;;3*5PlMQLEEL*k~>z&#suluQ2nY8CO#;UF`)$S_@ z!#{Y9NjtCU4IA#Ow5y1zz9uGp2)78~=ZR^?kyc+sE^b}PuVE53YaT&SQ4tgy)0#SU z>OfPcEPJ8;^SjLi=tMoBB*g-G_M!{LGGS=<-^5q-i>$WC0 z@6-ZGwd)S}wJ{ZURW?bz*T$sn)y}S4?&+O2kk(;6+&6Hm;MR~vzn(M*t946BK5}G<(EIqfXbO*rBaa68q;{G_8mE^~_iWNT%mDxB zZ{0MwDQL?iG8m?i-tjrK8#YUt4E`Ylp#x*#*Oh@?53CCR8|&$RUhahj8tL#IH9G|U zkJu#Xq)jCqM0p3R^$y2wI=NJ#&h_LV_}&bDF&=>Hbe#Xyz*nP<-;hqfk{leDgZE|R z?7o`xu3IrCU;b6E&saNo%1cfDP8WXv{r46VCr2B@V_^DS*lzGY1w3O62pMo4;4*+yaXHxeuK@qu(f{@N z@0NRUfm%9#M`Fiq8r2D#R{fn#!;aci>=^hz{gaFHZq&UAb#H|Xw!zYJ%NN65u zou`8DH%adf-rW}$iXm&9CR~C5B`M=v{T7ZKb2gZX8ggVXTj@K@X2KWJ>YVX zl(C@Vw!l6Pp3HxbTpRd54gOEt9ChE>beiv=2jAHoG~ZP_8BSeuaoR_E?RM0?6LQ#r zc5D~?>vWqSkBvev9AFdldi1$r4csb>+trvGHr>@YY_8ThZMUf$mi>ZN>E0PHE)059 z02i*=RQY{gIHh%d5xl-fjvjB2qxb;I>5LswD-T=7FMGFdpy?vz49+DaCG?Yj!tvR=IM6aX3(CpX{6IO zcb5}3XZ@)wu1<#^I5}29-c=ZPRcHfb0X=XK`mh;&F3UjgxQ-kh*TStq|9?wv?wjvv z9k$sVTsGTuu8@J@%R744+_lgCXEAnwjJ!i*?JvFaj>~%Ru6Nr3w+FiT=5NiS`eLmjKLaa2jbqXq z7aIhv{L|h46LM>afxVj}%fMkK{ORQ4It$}))^*07 zgAJHwQ){2a+>LR->Wl&CfuzPbP>%-xJs<1;K~JAw;Md^D9e=+=w&0+HHV==NPeh1uka&p`X-nU>*+DtC)o5|T@ zBYF95duVXoeZ|prkIl(-m(9^_yUpNxonc$0(2H@6xDt-9^$ z{~vPk{g9k}-X|xY#pKfPJ#zMYo17p6gBRBWIOlng^&H3?w!q;z!M{%T{7({_QLWL; zu&LC_7^s;K#z7wx{#CsHALrjxcy>Wh;GsKVP50TFHrWpyIAm)PwpaMRK1ZsXHQWDN zVBk(_&|n97x$hz`*D7)~aQ^p@v*T{q;a%ix*a_ZuK<{^e|E=Wev6;Mmcan?8f$Ij> zz11$BRW>L09X2P=oi=BmEk8MX4yp1B9siQvZS^e|-*wduf>+=2Zu|wgH~fTL{XQZW zzYoc+(GqgcD`+VrxT*!PTWPtv6ejfF|@QX$>yIQT90i9QDp<)N| zrXDmt7jQc`7X0Tw*8jtc&b-nrWbd7D<1SlRlfAaE(7m?S;Z?Taz=O7CP4-tCoA19J z+GGd$H{3>n0b9w>cL#a9Rgt^XUdUk|+OQYna1Z)oH*DSxjQj26?zNp7G_1lre&8o3 zxBb|H>HPc93BXWUzs( z@(Sj^YjxLu_wN0vp84Flw+8k-`D>pZN3W!}JANfS^}vl_URC7ly@z}n?8BOTAGv~mcX!Cevx>YL>?9xmo#fT< zz%OoIhc0{h?Z4{PaPL)5-`!We8&zHP397p46|m!~XW-VWJ|SDL_yldb;TQ7tL$AOu z$OGfRyYVNG#Yg1k|30~59Ju&G2ENb%KghuQRg5*R1G8ZNpN9lk?0g9-gzV`1;Mf8fJX)7lYHVUq1h03*NBF&o96H61jBg+B+}3xa8s7 zIUnAiHDl@h=Vz_HKXLrd`_@qh?++e$^nPah{STsAZK38(Hc*q`%@h)}m4X^?r+~&g zC?H@LHS*sBIqWBIuf62uwU0c#_Fzx6i~PX9Z$Q;U|DZkh1DouA&^UD0gGM3SA2e>Z z?LkoUZ4UyPZFvyTeA9!FR+}C)YWnR1za}fd_ZQS4_%rei`Bd=l-snSe_g_M;{*VD| zfpbIf@3Ro=t5=|Nb76O8VeHLFKGIl9EX6+qWei&d%;c`T2dR zuy8b4M!iiHqc+mOzWXUYriwy?HdAQm7HVePPC+3U7mcbYr12h%jeX?Z0CIpn_%_^4 z{(+D|qaEbiXdC$jZlgw_+sHp;3k4asP)N%y6xe(NHEywKmXLvpFjVHNBlM@IpV#9poy z@Ce8xodyju)98vXXy}jwl$^L5YgNb~Y&*^dc2IC|6$J(FqX7Q{t0 z8C$(UDeXp5Vq#nD9V6i$KR@96$%KS>nmKdo{gjlKTG)B6>n~rv{Ii^#oPXrsE*D;2 z>!@%_PD!BBk{MKPK16Ne_E2-^Kv)>p3Git=Kp{;JP-v?|6p?n6!ZVIgSmJ(a9V;;0SIC!(UmssDf?8Z)Mf5|Z~*%ZMEqFT1H__+E-?dzd0pj*>C{7)7)@LM;*x zP>Xi^sYNPuq5XbpmA#)La`#i~+&vVYy^C68ZlhLdo2f z)X4Y+HEf1CA?QQ$4gHM5TF;@l_!OMSwT6rPTi)$*;A6VHd^jbyorSZq$Di-M`>tf* zz=8kBe;n$mb@6gIKAu`fM^Jw6ryzqp=#SkPBUKdL_5dYhAEnkw$1%Q-QbeZ{6qR?9 zqI#XA=m96G^;5?wy6`x~jyO(n#Yd^l;6oJs)IN&ov5T6=!xluYfsOccL{`~o_{M?f3id|pqva9P0 z{=sv6Vgkh{Bv4$U9FD@+dwNhQjTm{9q7(K~YS)95(Ebp`XC0x~ZYL=+?-a$2I7=xL zE>PP^=P4O3W%>o`@Zyh@I_Cl0* zRm%JF2K8KigSvfrjXHm5qs;jiD6Skj^VA+{(P=A1W^SOcxNoRAY(a~5D<~-Zb7~pY z59exag#6=R)9T6K3FoHvzT^Do=4R8-p)^>7oRV9dhYCVA@_M% zyw3QiF6<>bc@) zD%^dWh9AC70u@;s$aucoexf1-iwZd2Kb-)P29_h{D7-2F+jZ~iI#DOY}{;fH>qyw5HRJxCaZ zd9@$6i5sX{B5YyI7Zj7#mlE4@{!u^L5Xajg zct=q{qed0e#~*+6V9Ao*jUVNo<3IoWb8pyzk!Q}FdCaZdy}k6E)yqn(V@97(O-&Ux zCk}P&iwR;z8|8yVfJ#-2Uo_LP3MxUqbc{a*he1rO}yiH>++@iyx#!k;Jc{>Hc&)z33bTLqNMC})G7DBz3=Vze`rw=eX@1!6X*B;hPVGF&C)gB zywIn2Z;Z2ATfl7~?~}IOI#RnF=m5q^;j_D_*Gtv(%vU$4Y|kBf>BgV*-fs_R`R@#zdzXg;N8 zrBiZthLE{D2DlC2x-Z-8A%h0f2OGb^RgM4oXU*xu5-;`hE$c=O8C+10f3AmI588Il zpp>jm)Gjxd22R>YJ?GeHz^B)#bl0!6@aA9iIr!gq?*Uy0&-d`+pTGS71Fjl))t?U$ zf1h5y`RBtam+w-aFRxO{B&-*n*+)%NKc*<$2};fEDC*#IO^ppuY+xJA+r4}Bq7POs zec^wed&ah0I4Su5V$YUt=F&2G&0(JlYWUBjl#ZP!rArs;XI)2KCS9a%^DonoZ*S4u zYxn2_=>EY!9uhpl|C;CLheZ3q|Ciu@4)kO~_1%a4mR_Uw&z+)}q1ZcQenf3jJ5&2k zIg|n&OR$fBE(dN0Ap@?DU19q^`r@x=gu5-Cny)gVy{)v#;Kx_rUlr==pVYJj77b|Cb<)UEu#y z@IM!G!uaanALf5_g_6f(&G^iI3Qbu8{m+v7zYEqrPw0QXX35OVq*vd4yXyZ2|MoJ! zI-v^pNw<=cT#xUOs>D(pjCoz5mlb_}4r;WBSo{?b?BV%mJb;vi(c$+L7A#>Q3$R z22oeEJAKqy%AR$Rdc1RuMpXSu^TFS{nD>@K2AiM8P}6KK);eYrpa@km;>zg5Bx*_lb{z^!`?h}`n!hz zr+gnhdi1$v%a(2W@WT%`e)Q2t8?h$Zh_iu>AAI=1#w8zou;Hb7^EN&;aNw;Z^f#aX zc|V9XFdviYX_V5d3uSblL>+s7M=66(QHOERfkoG7;HqC}?CIa>m0N$&e7M))-UiQ$ zpc4xao`-eN6dUIMLwBg}r`PVcn|S(R>jLZ%bGMT*eJvT=45tpgI#W^_pZ}9#1CnLg z^YstLVQeh=0)F@I-5<=HIkO7wU(egm-Fxr7zwxcN-m7t|R;}K6=guA68+`oPw{PF# zXP$Y6_*n=aPjy`ua86GKuVU}R=N>Ktt^*hki5=3YZO@L>A@5_#>~@0M_dP-BSpQ|u zy-eNT|B0T49WWpIjh?;y2hF_k2hGAdaQbzG;U-t#rDCjsa~58t>{l;P+H=?=_QqbY z?RpA}S&Q}0v(zRlm6G{dGo`JN0k;EU4UDyjeGilfTgb;jMn*^^PATw|MQ<|;Od)HwEY&99=J_KJ8#j@oj0jB=DS{>UZ(V! zXQ<7vgA_AlAI10IK@nL0N5p(fO<)6pTBO6y%41Hffw1lnvPT>2Yanh19&K-3ob$!` z1E09U`S^3{)Tsdl1qGsvzuyNc=Ky@~A?83?28l^=)FEvyr4{VM8sIR+;oK*++jo@s z)LDuzJx{66U81a)ZPaPLjdI?&Ou6q|p{y5vq?|>UC}Yk!N}KgPrHnmBt@~9`Sn5Wc zoqUV&zMfilT1!E3%gM{Xgu+`#K?cw_@GP%=`1;50{{1X~%Yx67+qP|c>v8TG`{}2j z+MCU0v7Y`X{<*wGy$b&cNjP_lFQVMUEtJ`HCnfgXONp6BDL&%_#buwQIM{=PVP`0z zR-w^Mx17Vy7L?0tjVevNaFFDN7u=RVl)?05K#sciIc@p<9yyncAbDf`s^R)JS^?aqyxcFGC zd)rV%>u%Jl#fKCXxrdC#J(SjJAGO6fZ%EQUYMy+U!rSBgtKBi2V}b9q0~FnUFU6$q z!THE;it4b7qSALjK0By&CeA$4!Fw8Xztei;Ur7Nt^J$3lPruMlaR&Gw@;81)o(*T= ze4U@wM^ZxK|33eGo_z7e7q2~d@WAs?9e_+!@4ox)32sCGmVfkrJkG$|#I~X4&7Yz$ zoJY0_+e^kUjN2A_D6;u}N^ZKBLfY=byA7NJN8?Nj=RskRhcN+u4ARE!#+iQ=&VcbQ zAZ{!49B04nH&a;qjb!YI{chWDD5&L9YKXG^LjOYzaQ5dN{2|W5KOnz=CFJRicYf}j zsCif`aSj-dwMe}_`kV2L-@Ooy?6(L_aAr%ln}5VbJjlci`-AaO{=Ie-VFpt!^Q8UrtL7V zrS7B_==%?@-b=Q`0oO3u?0(??1k##>Qnr-y4E=e(uT7|Gn`3!vpUC8~D7A z_sTf`_k4w%Tn0fGVsI}oyhaYZoqs0_`DXe*W3JENurokVRvFT1~8MYJe0`Yz)U^m{0f?uEg2l!c`(~e! ze{+83{V{pr+}qQCF?o0`!h6NwF?jzFj(%$mS@3rr ze4fIY7~T!=zN~u|#@9Gl1K>-Q$De(B_e?G;9Znsyu%2m~N|Di-6xL<{)*@4(Z(mY4 z_-PTcn?gBHc=s6${sZv-)7um8J@F3M6YoF+y)m{S58v4R(BCTP>^5rHcnjWzZiGBG zQe(Ivy!#7ix)x`;Yv8ZOx%L_g#5+L$rYpeza_Ih-$cuL$A^bh~61+!$i#%};#1(g< zTwLdotJ_PsWAGw>_e;)BvvD72Ebf8y$2-yX zm%N+dJ-PoD+y&S~zJVL@PHgL+jY78F4Gi0Uw^7qAck%xBZlh-F;jgr2r67t!}~@a}g8IT@aV4ot^=0Dd=W z67Hi}|8md|{ms>_-`#+K?svl@dfrV>A8@xv&w{)C`VIbh>CzR;Y&Kg>|MwcY=Z(OG zB^1)(vpY>v*WYLnzvEKN#DkYYlaF6&(*DS$;EsnbHST)ol3(DFOP(}Y8|#?21fnnfM3wMgD)^N%@X^GiBx^UpeDYnXl5=H+|B z=Au1S?dov)nz#EAa&g=%?!P$UexS1pzx#swE^hqJ%T{WIJ1~C6o#cjh#2yXSkz0dr z$;)po`2}tJ-PLcq%`bSzweU7o*Kqgava`=xo3rm~n`^^WHW$B@HYcCuHkXFWF8hZ3 z=f1la^xo@r^!=+S{}t3T5B(1QasPwgfzdlWi~DEO;NwoLZX)hSO+*`>`%~g~0c-9+ z@q1vn6RDbj`!Bt5|D*o>$HBwSEoc~c_>Ld$JNbkhu{CUQ#1a z^;`q@4fJ?5`2=nH)6r|o&EQrWzJ2MPlNBlHRX4S6t1cTFtb{&%ZFBNnW-~NcYIF4Z z!sgTPqdz@7Ux!XDAUD`N7nhgOzjM*o{LT;OeFp9T!r?xkgKjcxzn@nrj2cuS(&%_w3y7zGxJ>?vBP~na$CAxy|6c)Ta0T(&pgwakY1Y z#lL%bzYc!p3*KFE-@y@gARYPLC;fA{4>=9|;=U-q4-Cie#OfR-ApMkwYW1Y6xcgMC zQrEo?{^a{_y`H+bz^UQMJ5GToY>pu(Z4P1I*$k~u+B{N@*&Nc)=c%V`Dn~f*jytiC z!O?10=l#DsJ8nTAY(zUY!EMAiTn~r4f6jP+i93MqnDd;1){>L^*W~22f}9&HCl8E) zn5d;zu& zI*M+2^Xpp24{dt=dp5oH?P^!2H-GWKy-yc$*9muD_0L29W&Rz&JMVM7(EADC9p7UJ zHyUGcJZ!?Go45yyJCV5mhWmf=9cX_4_woC$xrLV&NTH|hux6)hECQ|#T=I7|b*Ixd z9dtorhsAwxi5OShyK$FlBl_T5xHYJc-+jg%aNPa%!X4;f=zzZIx1{%6 zhI^~a$;Auno1ho)4sryYId`gu()~5w?ma&Z=#;bmhFW^(x<-1_rd2JfcG55U*&TDe zlep{lJoG71bF9;e-FXG2jLEPSlOOxoqpHP&My4B5Pt6+cm5r4 z=U>n7|F58ix)tOLezn1%Ie&#U;VNnxHjkpC5@_JSK2%k;dsGeMbporux%f=4o@=k` zwQt~?j#sN4w69&`{5zuG`IzVTJslK#&&NEU>$SQGki$6C&-;J0;NQ_O8sl*MuekFF z{&DZG<{OB=>HqTc3#5d@cUbCS@O{+AlJNb55C0Yb{NkGc`CEu8gm)o~?_=1mYOTYL z8_q8L?)yr}Uq(ym@8Hh-ylc*emmcWFU0?97-22vQdB0+r$g9rsjX<@f2GI(4F@OP4OI z$Mhq})hoX>S^Vya53)Ngz2)sSpH%EweDlM8EO z0b~D?YVQ5pzklK1|2+QvOK#Db1uCyScbFRdGVlo})$q&thAcSm(iXVQ2ye1U+Rc}p z+`qlAH7q5`;Y*VAUt*qHLD7xYQd0Ysl#(+M_p2Hq7fT=@3h zj7~fM_1mz8uO03(Yu2XftgIzi)6c^zl_ zRBNv}x~#eH>VdPnL#r{ zE@gZb{2`w62w%0~s-)d`U1Qkz zliqdnEf8pJ8z_S+IMPjVb$$H1@BYuKI3q|qz`3erci2!SnAL| ziPCWIGA*sX>(HSsWo31s`SWK#Ov~CF@2jW~if%5XY;+sqUo#jl- zBdP`GjsL_PMWq2uNxL!99}&2;)s#cFP4pb{$hE_+>0fn;L7J*EGgw~c8wcZGW%kg z`Gt#%m#nzhsmn(EP}sjeIoV4F%$xV##StS=$B4-nhYufrv3SIUi)Qn*i=#)saBz=bsIaoOQFg@!6X#!)M%b za(?Fa=U;59x&O>taH;wa;}1Xlo_67f-&5h*pFMjw>Fl|?txuo%t=Y+wzxp0MdPn!9 zmahKxnzV7#PYxS4%5Lk1pB%PtxaqKA$1R5q+u?8eS&rjrgaZ!RdZhnm%{BfN`@cRb zSDsaE*zlvnh7CW!T~OS4hxHrIIjmp*y~CzW-#hHsan51?{vREV4XWuM{Up{`!5{TSI<=Bc$%gg{^1u5`Nmt|lA=l3y^*1YY#jlY^U3{u6C%gP= z*ot4H=bkTH zlKEM>?wj|V`%ifHj{tSp)3LWBmfBhwq7Dpj@HzWekHo^KzW;7Qlf6#Aw{_Xr;^FlM zmIo_zH#$D&)MD%zRaK>XdVc40{v#IrafTbsf4n3nDkeIKQ?v}fe!;4I84I0^qZ>bb zLI@X{Utz(|jaYe#iBXJwitM4i^I6k2@^9dVcIusziMUwcv7v}dFEKxQ^B1cRL*GH) z1Uhml{3*roU(VpI=nKcc&clzgFjUE2hvO@iDR8Kob%x{V42tgvUjxVeU?r@D9{|VG z@vz;OS3GuZb?gT=fa#zfT1m$SN?OUl3Z+O;o|EQ+QYG=&!_p~)+pBn*v8n;6_f1tK zb7SwLFdg$!4?x4asPomXY>9e>TE~v5wUR4SX}mP9tg(QR0=5%yy=D*S(YjQfj?LEb z@;`Op@S1>udLC{GXkg{~Nc?=#OZqMdFF@G9J_Ph(oAkT&2KKX{cslYlp^jYuqXo@_LuL z@$|XwJpDL81N+IHQ&b+V9y-?9gVVbU_zWQ0>A_>q3(6GFmpyfCnI})P3(%FF^1KO( zzt>GqA2!5mx88?M5bzzZm0miw&x=da&6~@ojW*bOMNCf>DXMKe07-g9yCSA zz7mu@KD?*S`TXvqV;;V|F2v{WGGy&fgaJztK1^m^Qx6Q{dimMgd$pJKl|8r*t zSq3ym))aSkQ_V3wcr!>IY%(U}{=fp63X1iH17lA^+hi;ZlWGBeUpG*c(o;WJUkWTl zV5=Ml>zA-*z*m?dQwwY$n}(l!y6SbuON(>` zOaf+T5ZEA4>dH#d7I)ScvgnVvN%)Q4D{Lcb3YK;OwiYl}+JkU=ge8_M9RRdQCm_28 zx*(N~y)EEJ0xlJBi-1Q3{87MP1pHG#tpm^HCtxdwCI}}8m@Z&<0S7uX1KlK`MZn1d zzRaQSOXTe{HB4;;T!r7o>@#(ffO`ZyB;Yv#F9S+!qJEgF$J8B;L4f-OJR{&W0q+T@ zGw@h10hv?g*%L;^9UD zwsq1Y_H6+_7jUhBy9GSugK1B*nKxnadPLdA)p7d zdcLOdV2eH9)P%4ipJ%n*gSj3~^P42$w=>upfh}ZORfvS&Z4Tja3t1~*8n#Ga(^wx> zCyaqA1#1P&f$5v@l+)N;)hTFdqJo8~U&61SUlG_V>_zokk~7o5KI50J{H~~%OY*NI zOl1p#|5C52!4?KD(`=W#c``PYEezIb4@wPdFn8@KDX<0$0oIuLi82?mWbGvha~>X^ zubcL|BpM0qmEgXJtHp)^3l(z(=kIy#O{rN;z9rhWS zR=K_|tXB;dpzgw!$(a64=PBy0?23Xd2bRl%g=l8#cL3|g`YG6V!1CBU1^XFTcUGlf zlFJlz55}5{`t-iQda^_XYY8l$l`B{WV7=I<3f2o)Z+1b!M!Kw3_hEivaw!vl^<~`^ z>?Ne^$DUWP_ki_hn-%P9U<2463bq5-Q!Gk!=uG`-U<2831-l09X|`Cw9=Obro?)LV zSSQy=^)u{}f<5gzM;gR#C|DWd2C+W`ww+CJ-LD?Z0>r0g+u4i23Rph{`vlk!R-|CO zR|?rgflXsyA+CtMs$iRdnb;Q!b{N=Dwq3!_0~^M^SFl^ahO=K4jDQt0=ayVb)0n&4 ze)R~}RKbFQjbteb*4pj5x`g!-*ml+qai#1F1q)N_G-YgkI4@;8d)LiHV`j$$ChJQ% z`@RMX(3GGNY^{5w+QKHv7<_D2miLNkUHi9xqe@8daMBfnX&j~qM3 zN6slWkr$6q#YfI8O)ZwDe_1n`O&6s+C&u3t_JY6`=tI3WX{NBv3YOrN0IW*EGQ4&G zJEUO!y^d+7vKsxCLyig1ysVtabr=Uco*Saq|SW zodu~Q)i__m!&|+n!6fagHQ12`%ca+9u=Dk>oAoe9pSmdn>R}N+leD#^WB^;p7Kz$< zZ_d=d&OQ~GtV@efpM({P9jcg*>e28pL6Ko=HQxcm0;*XepoX;vw3m>l;j#Sy)oduB zhLriw8_B@~iTclAT{dWkf7%xrD&LON}HvqNl&wq%ObJ?NXl5DNLb`|@lu$nED zQ=&!{`}~ny7zK4=Pt^%u{+pCMJ=zbssf9E&LK<4TG}QPFV>Up?+crwT`wl$4S}$5F z+VBJ!K9R0viO8j6yab7L5ha8;@~{j?IrH%6{~y7+E%~1czwO33S}EYK0@mg39S<%^ zxvnY^J_IPSKb5e%yPA=p)Rj4xp{kw?t6A71lqbaw|C=;h1pRvf z+cn@N_ZD!PfU5-DBVeM~XUp^=A4lvPu*bsgnXh`B1#H1SlP<9&c1^m^yxA?u32VRm zlDCBQk}3es%xwV`$oVmDibKX5q4(B zR3oGS_M>XN6vBR1O#z)$GeI$^=ST&xSEukR-yPMvSTP%_UMLl_vFe%9D7I6*7`0E5 zK0*1>+6!neZ}V05mVTt_DqDg1^>+3cXTn}+mX?m~`Zn=<{1(g4= z32s5E|FCBPbCB{O)|itdF6WtU*Vri0+ELOgZgbE-d_|Ea@s-3Ipy#RXu>tO3nyYLC zRs~By2>=(z-DgVo*agu4Bi(afjvC)^?IA6fLOl{REm)$*1!;@a*Q1?g3GB~h)e=_b zv5PH%{oybX@IO+eM<>l;X|+cm%_*hK-#pMq(kjpQH1{OQ>r>5D$;E5A<_E;C2F&x? zr*TwGk}hZ(0^Zkz0G?vJmM+?85l#{?O~4$$&$ayl1Jnh8k?LX*9wp#70jCK#TfkQY zd_%w`0{%z9S$ahB-EL^2$V_7udMEu^co=s(K0jIMLfX}lmz!z9&z*pHSz(s5= z;M;5y;9|BN@I&aeo_)#=0Di%a0xo0U0j^|c0oOp&9oc$z4REu_yPe$xy^8$`xR2cf zJcQCztXi^a!q{KxO*mnitA0Tn$rh+DYa-cO>Ji7VMCUDaJ0}j8 zICH4OY0X>ekvOe+OMM6@G>G-&aETX(4h;m|m%|Z09KPZo$*!v_nnbdT0-jM9BYafA zz3SEoZ&RxP-%_`37|GVDe+!9ZpQ{%EexRNY_?Eg^Fo)kZ<}fdi!(SRjvai(_5PL^G zyUA|$6xx4Pz(SmpgN zwF@}ieF8XY>cOENbLOi}Zn8+JuQX1Tte&g>T^*@0X(}~(SY-Sps1uHPaEid;=K`)3 zaJPV`a0bV4ioj!4&K$Y}@|=#C@tsh%GeUR)>gJ7g%K-rw=qDo_;>jtAo_x(S#q%`a zJg-}Ti@fdv-t~SC^*6_ylW^=vO@Q<>0g@2qa75+)KTllBgCE;IZn;K}4 z?k9Fc_&3>k;s3&J3jYps^x^Tpu>j%!&LV_=k7aOws(h}^^+tA>zR^py&j&b5uM=PsPTiH^q99jPG z0!w*jzsO9Jb!3IPJhG^yTj4sA+*0WBgijI|KqIuoT#XJ(?&oq^oh80wpSWO_;Tvp6WRZ8nM+=Ab@ z$D1CO#j~(pmT@SkPeDngiKP`4v8=Jh6+BSCjiq(P2-%gIN1GI{e!`rrvdU7ErC>;j z37lq_%PIOCR1s>YZlMQ6dgPXkv!dhZ7-6f0 zmh{4S%QZn03YjoTy~dTBSVd{J{5KmaO4F=`ob!rO%uY&3n8mV!lCFwbt0>JHi~g-g zNgHj-fX4OZe*glRa|_1SMf=)I&l_#B3-RXRKS&*mE!GNN z6vAB#YJ$q>QzFtatVSx~oC=t>LZt2u^}rt(DTC3kD8;My%EFO(m7KBe#n3J2eaC{* z;*xP7@SNxoR;vv{DBPg2(cEkg8pN`5%B<*tLKDm8Juji^iZEA=Aq9ma zS)o0URaT^=#&pc>Xir|hg--<*bL~<>X2;5Si|lbjkw(m6*5YAh!a8&WMa&{1E3Bd5 zNl7mdlu%xT;i(|pDw@lY0__E3ao(ri|t0bj!&F*^Z|5dj!qT&g-irP3xDPlbOX!OUvk$(+oQ&%CtEjI{h-oRXW>t#?LtT2E1R|NM-++}yNonXG$yuR&?ubJ2v}xp4X2 zvucSwdS~_QZ>QyF49d;xmV<_hvKjFFjGkFp-SX4=h!$k#y*WEyJZZ@ z=$e_r<(kkm$eg&V=xJ>He#a6C$P~+n9d?5tQHIJ!BDYn-3 zzZm0O;#jEh8ZaKqhM9``7Gsc9!UUoalNci`t-L%9%dyd@66+|gFtUlWV7jfd<-I}TMh znaZpMuyHWxuoWe>ZIZ`|oI`0vekBYaw7*6!;3*}?+Oe{v#41Wk9XV(amlEpgSZpeh z*I?X!iJS)1z6yj{G#8FUZJd2rvaGR% zLgK8TsAy0<5ew_bEMhTQKSoJfS6H>l>QZ^aN5rTke1ysqJ|bWx;UiR@@KMn#DIX>C zq;-2mNmiF6l8EJ_(mD1tb!oMU?44FGm7U0w)$L6sQC$+ZF=>yD2HszoGK)*Orklr# z{^LU`-E4ub$+quNoacGGBwl`99gbaGVgE5PV}sJm3@yhpi<9_bllx*5lWwl4F!T6wAs1c)rcWL%k5}9eQg#d2N|cy~ z;ZKe+I4ic)JoK)-il7VxJgOAV!D^ z%NH!`@VB|l!hBdCGXtW%a`E+ypnag$Y<79VoZ7uF77bV%VZD#tBd-AC-Xt~=LKyZ| z@Jvr`h)DJ~Q9PHzD<1_lO{l{Uvopk$Kk$}QHq>ml$enQ45se!!8YXJczP=;-s z_;YZ40nb-}m}X+yWLYej^3ls!i7WFoA0GwSO3FUEada`p4ufUm`#fb!B5$%8-*k3_ zreK*M%dw`tR$@+h-4>H08jFr@){!v#cV19+Pgtff-+T)=vMA zM96CwdqE;=&6*(ti`m+YHA~$hQ>M8z(!OrMDZr4*VUS`sv#^2nGj%T>E1$2`b`3V@ zg%vTG@{(T+Z`QM5j99>?cj}o2o#IQ`GOn4Jnc-owwqo6ZV4B5JP`ii68BLL#KOeij z0t?Rkm@rQ0^`XVs_6%dDGR}NQ?D7@mQqDt4#>r{00LYBV?4H%L;~+5?$i>-7HRan0 zwe^g#ju%_WIx+S$1haA|VUI%Ra3N!Ro@0Hy`ab#gHN0JpbtF}Ll%ovJ^a87ip_BNb zgs4BmTt2R=jPt{fisCY1J!;~6nTKJ=oZUN-7@~9y5yL8HOizq^(wi+DL(@R zw{GpTluS>T%z`2FB(}^N5^X;%7zvXtCVN0 z+7fG{%g0&xpPYO=3bwG&QY@76@kp*HN;4jhwhhHYi{+j26Kqeua*W5ATL#|jl(1qpgjoPtt9<wiXA!$iv*~r)3HC)fqAmI!K8q+9zm^Or%08vd$+SDN=lxju$GKr}|LP!WAjj0kK0UKJXZk6_* z-}By`n>1nj;(eLU$-Vdf|MPp_JKy>FJ7%OcAB?%a*-V=b0`j~{Uj_Rh7 z;ddzX#%q;et|PvISg+5lW8FTlYoCgn-~3Fzc&@kf-6z$7HP-wYSnNz{LQ5J_Ad-?% z`0#i!MN%fB&5!Q?%QuQQ4!wKF>zDrex1W6W+b{LK{olW!cw#@M?*{{G9`FTQze{owe({8jtn zKddtocfR(EE4Th&^!TOU#drSjt%=&h2WQ{;PvdChnaI@xPb}S+KK}5(u0Hil^UU1- z^YU-+pPt-dUV2FW%}Z-njvcw-vV3muSH7kEx$`zT)~9xenktJiEfQ0;IKtZnRS~fR zxXuJW1WBl-?vQjr(7NK0poA(z??LGA7UO=5tczj~>+TWax+wIp9`LdSp`S8osuI-& zB+7BYYoG&_^{F=?8xnk1RnVp!#eT$^wmmK>gUVo^vIo7?I$v(>OIvfglr%e-K&>(N5S3zb-sLg*ScHt`F z>zJ;bepJsV^XGs84gOmlkm7=RlMH#k+E7Uu1Yy21MQH$agVuQ z71RW^`G(Sb)APVjRWI{PG=Vek$7QsRY^$iGAN^V7kr$#ex_Fs7t}J)R0@w%i;jydS zy+Bi&NbD0>CU^`8UN@2xb91$N5-)L(>C{fsi-8k-O@5&go3GCmR-lqq|&yTPTP5uu#Iv) zopB46l}}l2xol%6^n5;3tyoUgb<*WZu23oDZMR|?Ic!Ouaw=IXovLPC+s>z}*l(ts z&RgkxHk;3yPSq(CEZae&m2$O!2C%1kHj}pUMirLxDrMKqSXMP_nq>$)Q95l~u9?kQ zu2FW4e9A5uRXc0uDpuKab8fZb+ElTTv0ZG3o-^|WH*e*0nKaCvmR+lwgQ-&2GT^D2 znX=8;^1Z1UYa3`J$?!;4Ipk~4q+|Cs|4SXj9 ze2Ew-Qz&F9H2YqIy3g|^c}}V_94>kMEdJM8oDgL)*^o{rk|1L>QLaAn+>sU zC)QiMRD-EEGv9!QR0wu^WlvEOX|n?Y+nGE#I?>`R4f%ARVY2E8F=3*&l|)punthr` zSlv`cZ>8vFufRT0thq}doG!Tf7!>Wmx9JjC{4g{|iMz&z1a=FN);L*7AE*rKX$S%L zz{%;GN)`lW1`H>Cp3_-DmePxdN_Bm~C4D(ZU!2o@wx>?2d&F3RCUd92q9ig+F-CoA zUAUfD!b^8&_rUZhYd(<_n&0tdvH`;=dB|NjIaBBK&14XHEw05`8qxzTvDB#N`3!krtkBzZRwK5OK!ilxiOi9*9;UVwke+S-GO83670_sO~e2EK4QW* z$;M$jU=n1h!|;`0q2M6GCAd(w;yEu!uf6AK&PxbWE8cl8PxV5cbl;D_X#|IWT8V*n zJ7$QeTqO{;hfp}= zfr|`eJpdaB0_VA%gX0C7$A7j6`-D195B-KHMcR zXH-5IvqwLxa4hCGVD-U7HCz|m@}0&E(fW?ps7#o8xqps=$JV4$Bq>`eVR4 zhUd#6?!)jp#QT1i-v-SkwH%C_LPQdTsRd3-449FdiG9Hsy!rEJeh%gZ3Z(0h_^^8D xS_Co1rwIn-uSb79_7<#l2wSYs|6hjYE&P1!5qRFSC%*Q%kNrr)0d9f7{{VeSJ5vAv literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/SharpDX.Desktop.xml b/RenderHookAPI/bin/SharpDX.Desktop.xml new file mode 100644 index 0000000..fcaa30c --- /dev/null +++ b/RenderHookAPI/bin/SharpDX.Desktop.xml @@ -0,0 +1,469 @@ + + + + SharpDX.Desktop + + + + + Helper class to allow programmatic capturing of graphics information that can be loaded later in Visual Studio. + This is a managed implementation of the VsDbg class (http://msdn.microsoft.com/en-us/library/vstudio/dn440549.aspx). + Requires to have installed VS Remote Tools. + http://msdn.microsoft.com/en-us/library/vstudio/hh708963.aspx + http://msdn.microsoft.com/en-us/library/vstudio/hh780905.aspx + + + + + Helper structure to ease the begin/end graphics capturing + + + var debugger = new VSGraphicsDebugger(); + using(debugger.BeginCapture()) + { + ... + } + + + + + Creates a new instance of the structure. + + The attanched graphics debugger. + + + + Ends the capture by calling . + + + + + Creates a new instance of the class and prepares the in-app component of graphics diagnostics to actively capture and record graphics information.. + + The destination filename for log writing. + + + + Copies the contents of the active graphics log (.vsglog) file into a new file. + + The new log file name. + + + + Toggles the graphics diagnostics HUD overlay on or off. + + + + + Adds a custom message to the graphics diagnostics HUD (Head-Up Display). + + The message to add. + + + + Captures the remainder of the current frame to the graphics log file. + + + + + Begins a capture interval that will end with . + + A instance that once disposed, calls automatically the method. + + + + Ends a capture interval that was started with . + + + + + Finalizes the graphics log file, closes it, and frees resources that were used while the app was actively recording graphics information. + + Ignored. + + + + Helper class for PIX. + + + + + Marks the beginning of a user-defined event. PIX can use this event to trigger an action. + + The Event color. + The Event Name. + The zero-based level of the hierarchy that this event is starting in. If an error occurs, the return value will be negative. + D3DPERF_BeginEvent + + + + Marks the beginning of a user-defined event. PIX can use this event to trigger an action. + + The Event color. + The Event formatted Name. + The parameters to use for the formatted name. + + The zero-based level of the hierarchy that this event is starting in. If an error occurs, the return value will be negative. + + D3DPERF_BeginEvent + + + + Mark the end of a user-defined event. PIX can use this event to trigger an action. + + The level of the hierarchy in which the event is ending. If an error occurs, this value is negative. + D3DPERF_EndEvent + + + + Mark an instantaneous event. PIX can use this event to trigger an action. + + The color. + The name. + D3DPERF_SetMarker + + + + Mark an instantaneous event. PIX can use this event to trigger an action. + + The color. + The name to format. + The parameters to use to format the name. + D3DPERF_SetMarker + + + + Set this to false to notify PIX that the target program does not give permission to be profiled. + + if set to true PIX profiling is authorized. Default to true. + D3DPERF_SetOptions + + + + Gets a value indicating whether this instance is currently profiled by PIX. + + + true if this instance is currently profiled; otherwise, false. + + D3DPERF_GetStatus + + + + Provides a hook to WndProc of an existing window handle using . + + + + + Initializes a new instance of the class. + + The HWND. + + + + Adds a message filter to a window. + + The handle of the window. + The message filter. + + + + Removes a message filter associated with a window. + + The handle of the window. + The message filter. + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized resource of type System.Drawing.Icon similar to (Icon). + + + + + A Renderable UserControl. + + + + + Initializes a new instance of the class. + + + + + Paints the background of the control. + + A that contains the event data. + + + + Raises the event. + + A that contains the event data. + + + + Default Rendering Form. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The text. + + + + Occurs when [app activated]. + + + + + Occurs when [app deactivated]. + + + + + Occurs when [monitor changed]. + + + + + Occurs when [pause rendering]. + + + + + Occurs when [resume rendering]. + + + + + Occurs when [screensaver]. + + + + + Occurs when [system resume]. + + + + + Occurs when [system suspend]. + + + + + Occurs when [user resized]. + + + + + Gets or sets a value indicating whether this form can be resized by the user. See remarks. + + + This property alters , + for true value it is , + for false - . + + true if this form can be resized by the user (by default); otherwise, false. + + + + Gets or sets a value indicationg whether the current render form is in fullscreen mode. See remarks. + + + If Toolkit is used, this property is set automatically, + otherwise user should maintain it himself as it affects the behavior of property. + + + + + Raises the event. + + A that contains the event data. + + + + Raises the event. + + A that contains the event data. + + + + Raises the event. + + An that contains the event data. + + + + Paints the background of the control. + + A that contains the event data. + + + + Raises the Pause Rendering event. + + The instance containing the event data. + + + + Raises the Resume Rendering event. + + The instance containing the event data. + + + + Raises the User resized event. + + The instance containing the event data. + + + + Raises the On App Activated event. + + The instance containing the event data. + + + + Raises the App Deactivated event + + The instance containing the event data. + + + + Raises the System Suspend event + + The instance containing the event data. + + + + Raises the System Resume event + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Override windows message loop handling. + + The Windows to process. + + + + RenderLoop provides a rendering loop infrastructure. See remarks for usage. + + + Use static + method to directly use a renderloop with a render callback or use your own loop: + + control.Show(); + using (var loop = new RenderLoop(control)) + { + while (loop.NextFrame()) + { + // Perform draw operations here. + } + } + + Note that the main control can be changed at anytime inside the loop. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the control to associate with the current render loop. + + The control. + Control is already disposed + + + + Gets or sets a value indicating whether the render loop should use the default instead of a custom window message loop lightweight for GC. Default is false. + + true if the render loop should use the default instead of a custom window message loop (default false); otherwise, false. + By default, RenderLoop is using a custom window message loop that is more lightweight than to process windows event message. + Set this parameter to true to use the default . + + + + Calls this method on each frame. + + true if if the control is still active, false otherwise. + An error occured + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Delegate for the rendering loop. + + + + + Runs the specified main loop in the specified context. + + + + + Runs the specified main loop for the specified windows form. + + The form. + The rendering callback. + if set to true indicating whether the render loop should use the default instead of a custom window message loop lightweight for GC. Default is false. + form + or + renderCallback + + + + Gets a value indicating whether this instance is application idle. + + + true if this instance is application idle; otherwise, false. + + + + + Internal class to interact with Native Message + + + + diff --git a/RenderHookAPI/bin/SharpDX.Direct2D1.dll b/RenderHookAPI/bin/SharpDX.Direct2D1.dll new file mode 100644 index 0000000000000000000000000000000000000000..deb1c0ee9ebeb63b3b4ca7e4fb1b5126ecf2bc9c GIT binary patch literal 507904 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 literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/SharpDX.Direct2D1.xml b/RenderHookAPI/bin/SharpDX.Direct2D1.xml new file mode 100644 index 0000000..115e814 --- /dev/null +++ b/RenderHookAPI/bin/SharpDX.Direct2D1.xml @@ -0,0 +1,56530 @@ + + + + SharpDX.Direct2D1 + + + + +

    Supplies data to an analysis effect.

    +
    + +

    This interface can be implemented by either an or an .

    +
    + + hh404347 + ID2D1AnalysisTransform + ID2D1AnalysisTransform +
    + + + Supplies the analysis data to an analysis transform. + + The data that the transform will analyze. + + The output of the transform will be copied to CPU-accessible memory by the imaging effects system before being passed to the implementation.If this call fails, the corresponding instance is placed into an error state and fails to draw. + + HRESULT ID2D1AnalysisTransform::ProcessAnalysisResults([In, Buffer] const unsigned char* analysisData,[In] unsigned int analysisDataCount) + + + + Supplies the analysis data to an analysis transform. + + The data that the transform will analyze. + + The output of the transform will be copied to CPU-accessible memory by the imaging effects system before being passed to the implementation.If this call fails, the corresponding instance is placed into an error state and fails to draw. + + HRESULT ID2D1AnalysisTransform::ProcessAnalysisResults([In, Buffer] const unsigned char* analysisData,[In] unsigned int analysisDataCount) + + + + Supplies the analysis data to an analysis transform. + + The data that the transform will analyze. + + The output of the transform will be copied to CPU-accessible memory by the imaging effects system before being passed to the implementation.If this call fails, the corresponding instance is placed into an error state and fails to draw. + + HRESULT ID2D1AnalysisTransform::ProcessAnalysisResults([In, Buffer] const unsigned char* analysisData,[In] unsigned int analysisDataCount) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Supplies the analysis data to an analysis transform.

    +
    +

    The data that the transform will analyze.

    +

    The size of the analysis data.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    The output of the transform will be copied to CPU-accessible memory by the imaging effects system before being passed to the implementation.

    If this call fails, the corresponding instance is placed into an error state and fails to draw.

    +
    + + hh404348 + HRESULT ID2D1AnalysisTransform::ProcessAnalysisResults([In, Buffer] const void* analysisData,[In] unsigned int analysisDataCount) + ID2D1AnalysisTransform::ProcessAnalysisResults +
    + + + The assembly provides managed API for , and . + + ee663274 + Direct2D1 / DirectWrite + Direct2D1 / DirectWrite + + + +

    Represents a bitmap that has been bound to an .

    +
    + + dd371109 + ID2D1Bitmap + ID2D1Bitmap +
    + + + Creates a Direct2D bitmap from a pointer to in-memory source data. + + an instance of + The dimension of the bitmap to create in pixels. + dd371800 + HRESULT ID2D1RenderTarget::CreateBitmap([In] D2D_SIZE_U size,[In, Optional] const void* srcData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateBitmap + + + + Creates a Direct2D bitmap from a pointer to in-memory source data. + + an instance of + The dimension of the bitmap to create in pixels. + The pixel format and dots per inch (DPI) of the bitmap to create. + dd371800 + HRESULT ID2D1RenderTarget::CreateBitmap([In] D2D_SIZE_U size,[In, Optional] const void* srcData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateBitmap + + + + Creates a Direct2D bitmap from a pointer to in-memory source data. + + an instance of + The dimension of the bitmap to create in pixels. + A pointer to the memory location of the image data, or NULL to create an uninitialized bitmap. + The byte count of each scanline, which is equal to (the image width in pixels * the number of bytes per pixel) + memory padding. If srcData is NULL, this value is ignored. (Note that pitch is also sometimes called stride.) + dd371800 + HRESULT ID2D1RenderTarget::CreateBitmap([In] D2D_SIZE_U size,[In, Optional] const void* srcData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateBitmap + + + + Creates a Direct2D bitmap from a pointer to in-memory source data. + + an instance of + The dimension of the bitmap to create in pixels. + A pointer to the memory location of the image data, or NULL to create an uninitialized bitmap. + The byte count of each scanline, which is equal to (the image width in pixels * the number of bytes per pixel) + memory padding. If srcData is NULL, this value is ignored. (Note that pitch is also sometimes called stride.) + The pixel format and dots per inch (DPI) of the bitmap to create. + dd371800 + HRESULT ID2D1RenderTarget::CreateBitmap([In] D2D_SIZE_U size,[In, Optional] const void* srcData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateBitmap + + + + Creates an whose data is shared with another resource. + + an instance of + An that contains the data to share with the new ID2D1Bitmap. For more information, see the Remarks section. + dd371865 + HRESULT ID2D1RenderTarget::CreateSharedBitmap([In] const GUID& riid,[In] void* data,[In, Optional] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateSharedBitmap + + + + Creates an whose data is shared with another resource. + + an instance of + An that contains the data to share with the new ID2D1Bitmap. For more information, see the Remarks section. + The pixel format and DPI of the bitmap to create . The portion of the pixel format must match the of data or the method will fail, but the alpha modes don't have to match. To prevent a mismatch, you can pass NULL or the value obtained from the {{D2D1::PixelFormat}} helper function. The DPI settings do not have to match those of data. If both dpiX and dpiY are 0.0f, the default DPI, 96, is used. + dd371865 + HRESULT ID2D1RenderTarget::CreateSharedBitmap([In] const GUID& riid,[In] void* data,[In, Optional] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateSharedBitmap + + + + Creates an whose data is shared with another resource. + + an instance of + An that contains the data to share with the new ID2D1Bitmap. For more information, see the Remarks section. + dd371865 + HRESULT ID2D1RenderTarget::CreateSharedBitmap([In] const GUID& riid,[In] void* data,[In, Optional] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateSharedBitmap + + + + Creates an whose data is shared with another resource. + + an instance of + An that contains the data to share with the new ID2D1Bitmap. For more information, see the Remarks section. + The pixel format and DPI of the bitmap to create . The portion of the pixel format must match the of data or the method will fail, but the alpha modes don't have to match. To prevent a mismatch, you can pass NULL or the value obtained from the {{D2D1::PixelFormat}} helper function. The DPI settings do not have to match those of data. If both dpiX and dpiY are 0.0f, the default DPI, 96, is used. + dd371865 + HRESULT ID2D1RenderTarget::CreateSharedBitmap([In] const GUID& riid,[In] void* data,[In, Optional] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateSharedBitmap + + + + Creates an that points to the bitmap data already stored in the . + + An instance of . + An that contains the data to share with the new . + dd371865 + HRESULT ID2D1RenderTarget::CreateSharedBitmap([In] const GUID& riid,[In] void* data,[In, Optional] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateSharedBitmap + + + + Creates an that points to the bitmap data already stored in the . + + An instance of . + An that contains the data to share with the new . + The pixel format and DPI of the bitmap to create . The portion of the pixel format must match the of data or the method will fail, but the alpha modes don't have to match. To prevent a mismatch, you can pass NULL or the value obtained from the {{D2D1::PixelFormat}} helper function. The DPI settings do not have to match those of data. If both dpiX and dpiY are 0.0f, the default DPI, 96, is used. + dd371865 + HRESULT ID2D1RenderTarget::CreateSharedBitmap([In] const GUID& riid,[In] void* data,[In, Optional] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateSharedBitmap + + + + Creates a Direct2D bitmap from a pointer to in-memory source data. + + an instance of + The dimension of the bitmap to create in pixels. + A pointer to an array of pixel data. The size of the array must be equal to sizeof(pixel) * Size.Width * Height. + The pixel format and dots per inch (DPI) of the bitmap to create. + dd371800 + HRESULT ID2D1RenderTarget::CreateBitmap([In] D2D_SIZE_U size,[In, Optional] const void* srcData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateBitmap + + + + Creates a Bitmap from a WIC bitmap. + + The render target. + A reference to a WIC bitmap. + + dd371797 + HRESULT ID2D1RenderTarget::CreateBitmapFromWicBitmap([In] IWICBitmapSource* wicBitmapSource,[In, Optional] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateBitmapFromWicBitmap + + + + Creates a Bitmap from a WIC bitmap. + + The render target. + The WIC bitmap. + The bitmap properties. + + dd371797 + HRESULT ID2D1RenderTarget::CreateBitmapFromWicBitmap([In] IWICBitmapSource* wicBitmapSource,[In, Optional] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateBitmapFromWicBitmap + + + + Copies the specified region from the specified bitmap into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The bitmap to copy from. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371152 + HRESULT ID2D1Bitmap::CopyFromBitmap([In, Optional] const D2D_POINT_2U* destPoint,[In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_U* srcRect) + ID2D1Bitmap::CopyFromBitmap + + + + Copies the specified region from the specified bitmap into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The bitmap to copy from. + In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371152 + HRESULT ID2D1Bitmap::CopyFromBitmap([In, Optional] const D2D_POINT_2U* destPoint,[In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_U* srcRect) + ID2D1Bitmap::CopyFromBitmap + + + + Copies the specified region from the specified bitmap into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The bitmap to copy from. + The area of bitmap to copy. + In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371152 + HRESULT ID2D1Bitmap::CopyFromBitmap([In, Optional] const D2D_POINT_2U* destPoint,[In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_U* srcRect) + ID2D1Bitmap::CopyFromBitmap + + + + Copies the specified region from memory into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. Passing this method invalid input, such as an invalid destination rectangle, can produce unpredictable results, such as a distorted image or device failure. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The data to copy. + The stride, or pitch, of the source bitmap stored in srcData. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371155 + HRESULT ID2D1Bitmap::CopyFromMemory([In, Optional] const D2D_RECT_U* dstRect,[In] const void* srcData,[In] unsigned int pitch) + ID2D1Bitmap::CopyFromMemory + + + + Copies the specified region from memory into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. Passing this method invalid input, such as an invalid destination rectangle, can produce unpredictable results, such as a distorted image or device failure. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The data to copy. + The stride, or pitch, of the source bitmap stored in srcData. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371155 + HRESULT ID2D1Bitmap::CopyFromMemory([In, Optional] const D2D_RECT_U* dstRect,[In] const void* srcData,[In] unsigned int pitch) + ID2D1Bitmap::CopyFromMemory + + + + Copies the specified region from memory into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. Passing this method invalid input, such as an invalid destination rectangle, can produce unpredictable results, such as a distorted image or device failure. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The data to copy. + The stride, or pitch, of the source bitmap stored in srcData. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371155 + HRESULT ID2D1Bitmap::CopyFromMemory([In, Optional] const D2D_RECT_U* dstRect,[In] const void* srcData,[In] unsigned int pitch) + ID2D1Bitmap::CopyFromMemory + + + + Copies the specified region from memory into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. Passing this method invalid input, such as an invalid destination rectangle, can produce unpredictable results, such as a distorted image or device failure. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The data to copy. + The stride, or pitch, of the source bitmap stored in srcData. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding. + In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371155 + HRESULT ID2D1Bitmap::CopyFromMemory([In, Optional] const D2D_RECT_U* dstRect,[In] const void* srcData,[In] unsigned int pitch) + ID2D1Bitmap::CopyFromMemory + + + + Copies the specified region from memory into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. Passing this method invalid input, such as an invalid destination rectangle, can produce unpredictable results, such as a distorted image or device failure. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The data to copy. + The stride, or pitch, of the source bitmap stored in srcData. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding. + In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371155 + HRESULT ID2D1Bitmap::CopyFromMemory([In, Optional] const D2D_RECT_U* dstRect,[In] const void* srcData,[In] unsigned int pitch) + ID2D1Bitmap::CopyFromMemory + + + + Copies the specified region from memory into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. Passing this method invalid input, such as an invalid destination rectangle, can produce unpredictable results, such as a distorted image or device failure. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The data to copy. + The stride, or pitch, of the source bitmap stored in srcData. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding. + In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371155 + HRESULT ID2D1Bitmap::CopyFromMemory([In, Optional] const D2D_RECT_U* dstRect,[In] const void* srcData,[In] unsigned int pitch) + ID2D1Bitmap::CopyFromMemory + + + + Copies the specified region from the specified render target into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. All clips and layers must be popped off of the render target before calling this method. The method returns {{D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT}} if any clips or layers are currently applied to the render target. + + The render target that contains the region to copy. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371158 + HRESULT ID2D1Bitmap::CopyFromRenderTarget([In, Optional] const D2D_POINT_2U* destPoint,[In] ID2D1RenderTarget* renderTarget,[In, Optional] const D2D_RECT_U* srcRect) + ID2D1Bitmap::CopyFromRenderTarget + + + + Copies the specified region from the specified render target into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. All clips and layers must be popped off of the render target before calling this method. The method returns {{D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT}} if any clips or layers are currently applied to the render target. + + The render target that contains the region to copy. + In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371158 + HRESULT ID2D1Bitmap::CopyFromRenderTarget([In, Optional] const D2D_POINT_2U* destPoint,[In] ID2D1RenderTarget* renderTarget,[In, Optional] const D2D_RECT_U* srcRect) + ID2D1Bitmap::CopyFromRenderTarget + + + + Copies the specified region from the specified render target into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. All clips and layers must be popped off of the render target before calling this method. The method returns {{D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT}} if any clips or layers are currently applied to the render target. + + The render target that contains the region to copy. + In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied. + The area of renderTarget to copy. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371158 + HRESULT ID2D1Bitmap::CopyFromRenderTarget([In, Optional] const D2D_POINT_2U* destPoint,[In] ID2D1RenderTarget* renderTarget,[In, Optional] const D2D_RECT_U* srcRect) + ID2D1Bitmap::CopyFromRenderTarget + + + + Copies the specified region from a stream into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. Passing this method invalid input, such as an invalid destination rectangle, can produce unpredictable results, such as a distorted image or device failure. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The stream to copy the data from. + Length in bytes of the data to copy from the stream. + The stride, or pitch, of the source bitmap stored in srcData. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371155 + HRESULT ID2D1Bitmap::CopyFromMemory([In, Optional] const D2D_RECT_U* dstRect,[In] const void* srcData,[In] unsigned int pitch) + ID2D1Bitmap::CopyFromMemory + + + + Copies the specified region from a stream into the current bitmap. + + + This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match. Passing this method invalid input, such as an invalid destination rectangle, can produce unpredictable results, such as a distorted image or device failure. Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to {{EndDraw}} or {{Flush}}. + + The stream to copy the data from. + Length in bytes of the data to copy from the stream. + The stride, or pitch, of the source bitmap stored in srcData. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding. + In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + dd371155 + HRESULT ID2D1Bitmap::CopyFromMemory([In, Optional] const D2D_RECT_U* dstRect,[In] const void* srcData,[In] unsigned int pitch) + ID2D1Bitmap::CopyFromMemory + + + + Return the dots per inch (DPI) of the bitmap. + + The dots per inch (DPI) of the bitmap. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the size, in device-independent pixels (DIPs), of the bitmap.

    +
    + +

    A DIP is 1/96?of an inch. To retrieve the size in device pixels, use the method.

    +
    + + dd371170 + GetSize + GetSize + D2D_SIZE_F ID2D1Bitmap::GetSize() +
    + + +

    Returns the size, in device-dependent units (pixels), of the bitmap.

    +
    + + dd371167 + GetPixelSize + GetPixelSize + D2D_SIZE_U ID2D1Bitmap::GetPixelSize() +
    + + +

    Retrieves the pixel format and alpha mode of the bitmap.

    +
    + + dd371164 + GetPixelFormat + GetPixelFormat + D2D1_PIXEL_FORMAT ID2D1Bitmap::GetPixelFormat() +
    + + +

    Returns the size, in device-independent pixels (DIPs), of the bitmap.

    +
    +

    The size, in DIPs, of the bitmap.

    + +

    A DIP is 1/96?of an inch. To retrieve the size in device pixels, use the method.

    +
    + + dd371170 + D2D_SIZE_F ID2D1Bitmap::GetSize() + ID2D1Bitmap::GetSize +
    + + +

    Returns the size, in device-dependent units (pixels), of the bitmap.

    +
    +

    The size, in pixels, of the bitmap.

    + + dd371167 + D2D_SIZE_U ID2D1Bitmap::GetPixelSize() + ID2D1Bitmap::GetPixelSize +
    + + +

    Retrieves the pixel format and alpha mode of the bitmap.

    +
    +

    The pixel format and alpha mode of the bitmap.

    + + dd371164 + D2D1_PIXEL_FORMAT ID2D1Bitmap::GetPixelFormat() + ID2D1Bitmap::GetPixelFormat +
    + + +

    Return the dots per inch (DPI) of the bitmap.

    +
    +

    The horizontal DPI of the image. You must allocate storage for this parameter.

    +

    The vertical DPI of the image. You must allocate storage for this parameter.

    + + dd371161 + void ID2D1Bitmap::GetDpi([Out] float* dpiX,[Out] float* dpiY) + ID2D1Bitmap::GetDpi +
    + + +

    Copies the specified region from the specified bitmap into the current bitmap.

    +
    +

    In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied.

    +

    The bitmap to copy from.

    +

    The area of bitmap to copy.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match.

    Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to EndDraw or Flush.

    Starting with Windows?8.1, this method supports block compressed bitmaps. If you are using a block compressed format, the end coordinates of the srcRect parameter must be multiples of 4 or the method returns E_INVALIDARG.

    +
    + + dd371152 + HRESULT ID2D1Bitmap::CopyFromBitmap([In, Optional] const D2D_POINT_2U* destPoint,[In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_U* srcRect) + ID2D1Bitmap::CopyFromBitmap +
    + + +

    Copies the specified region from the specified render target into the current bitmap.

    +
    +

    In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied.

    +

    The render target that contains the region to copy.

    +

    The area of renderTarget to copy.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion, and will fail if the bitmap formats do not match.

    Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to EndDraw or Flush.

    All clips and layers must be popped off of the render target before calling this method. The method returns if any clips or layers are currently applied to the render target.

    +
    + + dd371158 + HRESULT ID2D1Bitmap::CopyFromRenderTarget([In, Optional] const D2D_POINT_2U* destPoint,[In] ID2D1RenderTarget* renderTarget,[In, Optional] const D2D_RECT_U* srcRect) + ID2D1Bitmap::CopyFromRenderTarget +
    + + +

    Copies the specified region from memory into the current bitmap.

    +
    +

    In the current bitmap, the upper-left corner of the area to which the region specified by srcRect is copied.

    +

    The data to copy.

    +

    The stride, or pitch, of the source bitmap stored in srcData. The stride is the byte count of a scanline (one row of pixels in memory). The stride can be computed from the following formula: pixel width * bytes per pixel + memory padding.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method does not update the size of the current bitmap. If the contents of the source bitmap do not fit in the current bitmap, this method fails. Also, note that this method does not perform format conversion; the two bitmap formats should match.

    If this method is passed invalid input (such as an invalid destination rectangle), can produce unpredictable results, such as a distorted image or device failure.

    Calling this method may cause the current batch to flush if the bitmap is active in the batch. If the batch that was flushed does not complete successfully, this method fails. However, this method does not clear the error state of the render target on which the batch was flushed. The failing and tag state will be returned at the next call to EndDraw or Flush.

    Starting with Windows?8.1, this method supports block compressed bitmaps. If you are using a block compressed format, the end coordinates of the srcRect parameter must be multiples of 4 or the method returns E_INVALIDARG.

    +
    + + dd371155 + HRESULT ID2D1Bitmap::CopyFromMemory([In, Optional] const D2D_RECT_U* dstRect,[In] const void* srcData,[In] unsigned int pitch) + ID2D1Bitmap::CopyFromMemory +
    + + +

    Represents a bitmap that can be used as a surface for an or mapped into system memory, and can contain additional color context information.

    +
    + + hh404349 + ID2D1Bitmap1 + ID2D1Bitmap1 +
    + + + Creates a Direct2D bitmap from a pointer to in-memory source data. + + an instance of + The dimension of the bitmap to create in pixels. + HRESULT ID2D1DeviceContext::CreateBitmap([In] D2D_SIZE_U size,[In, Buffer, Optional] const void* sourceData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out, Fast] ID2D1Bitmap1** bitmap) + + + + Creates a Direct2D bitmap from a pointer to in-memory source data. + + an instance of + The dimension of the bitmap to create in pixels. + The pixel format and dots per inch (DPI) of the bitmap to create. + HRESULT ID2D1DeviceContext::CreateBitmap([In] D2D_SIZE_U size,[In, Buffer, Optional] const void* sourceData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out, Fast] ID2D1Bitmap1** bitmap) + + + + Creates a Direct2D bitmap from a pointer to in-memory source data. + + an instance of + The dimension of the bitmap to create in pixels. + A pointer to the memory location of the image data, or NULL to create an uninitialized bitmap. + The byte count of each scanline, which is equal to (the image width in pixels * the number of bytes per pixel) + memory padding. If srcData is NULL, this value is ignored. (Note that pitch is also sometimes called stride.) + HRESULT ID2D1DeviceContext::CreateBitmap([In] D2D_SIZE_U size,[In, Buffer, Optional] const void* sourceData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out, Fast] ID2D1Bitmap1** bitmap) + + + + Creates a Direct2D bitmap from a pointer to in-memory source data. + + an instance of + The dimension of the bitmap to create in pixels. + A pointer to the memory location of the image data, or NULL to create an uninitialized bitmap. + The byte count of each scanline, which is equal to (the image width in pixels * the number of bytes per pixel) + memory padding. If srcData is NULL, this value is ignored. (Note that pitch is also sometimes called stride.) + The pixel format and dots per inch (DPI) of the bitmap to create. + HRESULT ID2D1DeviceContext::CreateBitmap([In] D2D_SIZE_U size,[In, Buffer, Optional] const void* sourceData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out, Fast] ID2D1Bitmap1** bitmap) + + + + Creates an whose data is shared with another resource. + + an instance of + An that contains the data to share with the new ID2D1Bitmap. For more information, see the Remarks section. + HRESULT ID2D1DeviceContext::CreateBitmapFromDxgiSurface([In] IDXGISurface* surface,[In, Optional] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out, Fast] ID2D1Bitmap1** bitmap1) + + + + Creates an whose data is shared with another resource. + + an instance of + An that contains the data to share with the new ID2D1Bitmap. For more information, see the Remarks section. + The pixel format and DPI of the bitmap to create . The portion of the pixel format must match the of data or the method will fail, but the alpha modes don't have to match. To prevent a mismatch, you can pass NULL or the value obtained from the {{D2D1::PixelFormat}} helper function. The DPI settings do not have to match those of data. If both dpiX and dpiY are 0.0f, the default DPI, 96, is used. + HRESULT ID2D1DeviceContext::CreateBitmapFromDxgiSurface([In] IDXGISurface* surface,[In, Optional] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out, Fast] ID2D1Bitmap1** bitmap1) + + + + Creates a Bitmap from a WIC bitmap. + + The render target. + A reference to a WIC bitmap. + + HRESULT ID2D1DeviceContext::CreateBitmapFromWicBitmap([In] IWICBitmapSource* wicBitmapSource,[In, Optional] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out] ID2D1Bitmap1** bitmap) + + + + Creates a Bitmap from a WIC bitmap. + + The render target. + The WIC bitmap. + The bitmap properties. + + HRESULT ID2D1DeviceContext::CreateBitmapFromWicBitmap([In] IWICBitmapSource* wicBitmapSource,[In, Optional] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out] ID2D1Bitmap1** bitmap) + + + + Maps the given bitmap into memory. + + The options used in mapping the bitmap into memory. + a reference to the rectangle that is mapped into memory + + The bitmap must have been created with the flag specified.The caller should try to unmap the memory as quickly as is feasible to release occupied DMA aperture memory. + + + HRESULT ID2D1Bitmap1::Map([In] D2D1_MAP_OPTIONS options,[Out] D2D1_MAPPED_RECT* mappedRect) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the color context information associated with the bitmap.

    +
    + +

    If the bitmap was created without specifying a color context, the returned context is null.

    +
    + + hh404350 + GetColorContext + GetColorContext + void ID2D1Bitmap1::GetColorContext([Out, Optional] ID2D1ColorContext** colorContext) +
    + + +

    Gets the options used in creating the bitmap.

    +
    + + hh404351 + GetOptions + GetOptions + D2D1_BITMAP_OPTIONS ID2D1Bitmap1::GetOptions() +
    + + +

    Gets either the surface that was specified when the bitmap was created, or the default surface created when the bitmap was created.

    +
    + +

    The bitmap used must have been created from a DXGI surface render target, a derived render target, or a device context created from an .

    The returned surface can be used with Microsoft Direct3D or any other API that interoperates with shared surfaces. The application must transitively ensure that the surface is usable on the Direct3D device that is used in this context. For example, if using the surface with Direct2D then the Direct2D render target must have been created through or on a device context created on the same device.

    +
    + + hh404355 + GetSurface + GetSurface + HRESULT ID2D1Bitmap1::GetSurface([Out, Optional] IDXGISurface** dxgiSurface) +
    + + +

    Gets the color context information associated with the bitmap.

    +
    +

    When this method returns, contains the address of a reference to the color context interface associated with the bitmap.

    + +

    If the bitmap was created without specifying a color context, the returned context is null.

    +
    + + hh404350 + void ID2D1Bitmap1::GetColorContext([Out, Optional] ID2D1ColorContext** colorContext) + ID2D1Bitmap1::GetColorContext +
    + + +

    Gets the options used in creating the bitmap.

    +
    +

    This method returns the options used.

    + + hh404351 + D2D1_BITMAP_OPTIONS ID2D1Bitmap1::GetOptions() + ID2D1Bitmap1::GetOptions +
    + + +

    Gets either the surface that was specified when the bitmap was created, or the default surface created when the bitmap was created.

    +
    +

    The underlying DXGI surface for the bitmap.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    Cannot draw with a bitmap that is currently bound as the target bitmap.

    ?

    + +

    The bitmap used must have been created from a DXGI surface render target, a derived render target, or a device context created from an .

    The returned surface can be used with Microsoft Direct3D or any other API that interoperates with shared surfaces. The application must transitively ensure that the surface is usable on the Direct3D device that is used in this context. For example, if using the surface with Direct2D then the Direct2D render target must have been created through or on a device context created on the same device.

    +
    + + hh404355 + HRESULT ID2D1Bitmap1::GetSurface([Out, Optional] IDXGISurface** dxgiSurface) + ID2D1Bitmap1::GetSurface +
    + + +

    Maps the given bitmap into memory.

    +
    +

    The options used in mapping the bitmap into memory.

    +

    When this method returns, contains a reference to the rectangle that is mapped into memory.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_INVALIDARGOne or more arguments are not valid
    D3DERR_DEVICELOSTThe device has been lost but cannot be reset at this time.

    ?

    + + Note??You can't use bitmaps for some purposes while mapped. Particularly, the method doesn't work if either the source or destination bitmap is mapped.?

    The bitmap must have been created with the flag specified.

    +
    + + hh404357 + HRESULT ID2D1Bitmap1::Map([In] D2D1_MAP_OPTIONS options,[Out] D2D1_MAPPED_RECT* mappedRect) + ID2D1Bitmap1::Map +
    + + +

    Unmaps the bitmap from memory.

    +
    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_INVALIDARGOne or more arguments are not valid.
    E_POINTERPointer is not valid.

    ?

    + +

    Any memory returned from the Map call is now invalid and may be reclaimed by the operating system or used for other purposes.

    The bitmap must have been previously mapped.

    +
    + + hh404359 + HRESULT ID2D1Bitmap1::Unmap() + ID2D1Bitmap1::Unmap +
    + + +

    Paints an area with a bitmap.

    +
    + +

    A bitmap brush is used to fill a geometry with a bitmap. Like all brushes, it defines an infinite plane of content. Because bitmaps are finite, the brush relies on an "extend mode" to determine how the plane is filled horizontally and vertically.

    +
    + + dd371122 + ID2D1BitmapBrush + ID2D1BitmapBrush +
    + + + Creates an from the specified bitmap. + + an instance of + The bitmap contents of the new brush. + HRESULT ID2D1RenderTarget::CreateBitmapBrush([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_BITMAP_BRUSH_PROPERTIES* bitmapBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1BitmapBrush** bitmapBrush) + + + + Creates an from the specified bitmap. + + an instance of + The bitmap contents of the new brush. + The extend modes and interpolation mode of the new brush, or NULL. If this parameter is NULL, the brush defaults to the horizontal and vertical extend modes and the interpolation mode. + HRESULT ID2D1RenderTarget::CreateBitmapBrush([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_BITMAP_BRUSH_PROPERTIES* bitmapBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1BitmapBrush** bitmapBrush) + + + + Creates an from the specified bitmap. + + an instance of + The bitmap contents of the new brush. + The opacity and transform of the new brush, or NULL. If this parameter is NULL, the brush defaults to an opacity of 1.0f and its transform is the identity matrix. + HRESULT ID2D1RenderTarget::CreateBitmapBrush([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_BITMAP_BRUSH_PROPERTIES* bitmapBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1BitmapBrush** bitmapBrush) + + + + Creates an from the specified bitmap. + + an instance of + The bitmap contents of the new brush. + The extend modes and interpolation mode of the new brush, or NULL. If this parameter is NULL, the brush defaults to the horizontal and vertical extend modes and the interpolation mode. + The opacity and transform of the new brush, or NULL. If this parameter is NULL, the brush defaults to an opacity of 1.0f and its transform is the identity matrix. + HRESULT ID2D1RenderTarget::CreateBitmapBrush([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_BITMAP_BRUSH_PROPERTIES* bitmapBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1BitmapBrush** bitmapBrush) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the method by which the brush horizontally tiles those areas that extend past its bitmap.

    +
    + +

    Like all brushes, defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.

    +
    + + dd371128 + GetExtendModeX / SetExtendModeX + GetExtendModeX + D2D1_EXTEND_MODE ID2D1BitmapBrush::GetExtendModeX() +
    + + +

    Gets or sets the method by which the brush vertically tiles those areas that extend past its bitmap.

    +
    + +

    Like all brushes, defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.

    +
    + + dd371132 + GetExtendModeY / SetExtendModeY + GetExtendModeY + D2D1_EXTEND_MODE ID2D1BitmapBrush::GetExtendModeY() +
    + + +

    Gets or sets the interpolation method used when the brush bitmap is scaled or rotated.

    +
    + +

    This method gets the interpolation mode of a bitmap, which is specified by the enumeration type. represents nearest neighbor filtering. It looks up the bitmap pixel nearest to the current rendering pixel and chooses its exact color. represents linear filtering, and interpolates a color from the four nearest bitmap pixels.

    The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, linear interpolation positions the bitmap more precisely to the application request, but blurs the bitmap in the process.

    +
    + + dd371134 + GetInterpolationMode / SetInterpolationMode + GetInterpolationMode + D2D1_BITMAP_INTERPOLATION_MODE ID2D1BitmapBrush::GetInterpolationMode() +
    + + +

    Gets or sets the bitmap source that this brush uses to paint.

    +
    + + dd371124 + GetBitmap / SetBitmap + GetBitmap + void ID2D1BitmapBrush::GetBitmap([Out, Optional] ID2D1Bitmap** bitmap) +
    + + +

    Specifies how the brush horizontally tiles those areas that extend past its bitmap.

    +
    +

    A value that specifies how the brush horizontally tiles those areas that extend past its bitmap.

    + +

    Sometimes, the bitmap for a bitmap brush doesn't completely fill the area being painted. When this happens, Direct2D uses the brush's horizontal (SetExtendModeX) and vertical (SetExtendModeY) extend mode settings to determine how to fill the remaining area.

    The following illustration shows the results from every possible combination of the extend modes for an : (CLAMP), (WRAP), and D2D1_EXTEND_MIRROR (MIRROR).

    + + + dd371139 + void ID2D1BitmapBrush::SetExtendModeX([In] D2D1_EXTEND_MODE extendModeX) + ID2D1BitmapBrush::SetExtendModeX + + +

    +

    Specifies how the brush vertically tiles those areas that extend past its bitmap.

    +
    +

    A value that specifies how the brush vertically tiles those areas that extend past its bitmap.

    + +

    Sometimes, the bitmap for a bitmap brush doesn't completely fill the area being painted. When this happens, Direct2D uses the brush's horizontal (SetExtendModeX) and vertical (SetExtendModeY) extend mode settings to determine how to fill the remaining area.

    The following illustration shows the results from every possible combination of the extend modes for an : (CLAMP), (WRAP), and D2D1_EXTEND_MIRROR (MIRROR).

    + + + dd371142 + void ID2D1BitmapBrush::SetExtendModeY([In] D2D1_EXTEND_MODE extendModeY) + ID2D1BitmapBrush::SetExtendModeY + + +

    +

    Specifies the interpolation mode used when the brush bitmap is scaled or rotated.

    +
    +

    The interpolation mode used when the brush bitmap is scaled or rotated.

    + +

    This method sets the interpolation mode for a bitmap, which is an enum value that is specified in the enumeration type. represents nearest neighbor filtering. It looks up the nearest bitmap pixel to the current rendering pixel and chooses its exact color. represents linear filtering, and interpolates a color from the four nearest bitmap pixels.

    The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, bilinear interpolation positions the bitmap more precisely to the application requests, but blurs the bitmap in the process.

    +
    + + dd371145 + void ID2D1BitmapBrush::SetInterpolationMode([In] D2D1_BITMAP_INTERPOLATION_MODE interpolationMode) + ID2D1BitmapBrush::SetInterpolationMode +
    + + +

    Specifies the bitmap source that this brush uses to paint.

    +
    +

    The bitmap source used by the brush.

    + +

    This method specifies the bitmap source that this brush uses to paint. The bitmap is not resized or rescaled automatically to fit the geometry that it fills. The bitmap stays at its native size. To resize or translate the bitmap, use the SetTransform method to apply a transform to the brush.

    The native size of a bitmap is the width and height in bitmap pixels, divided by the bitmap DPI. This native size forms the base tile of the brush. To tile a subregion of the bitmap, you must generate a new bitmap containing this subregion and use SetBitmap to apply it to the brush. +

    +
    + + dd371136 + void ID2D1BitmapBrush::SetBitmap([In, Optional] ID2D1Bitmap* bitmap) + ID2D1BitmapBrush::SetBitmap +
    + + +

    Gets the method by which the brush horizontally tiles those areas that extend past its bitmap.

    +
    +

    A value that specifies how the brush horizontally tiles those areas that extend past its bitmap.

    + +

    Like all brushes, defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.

    +
    + + dd371128 + D2D1_EXTEND_MODE ID2D1BitmapBrush::GetExtendModeX() + ID2D1BitmapBrush::GetExtendModeX +
    + + +

    Gets the method by which the brush vertically tiles those areas that extend past its bitmap.

    +
    +

    A value that specifies how the brush vertically tiles those areas that extend past its bitmap.

    + +

    Like all brushes, defines an infinite plane of content. Because bitmaps are finite, it relies on an extend mode to determine how the plane is filled horizontally and vertically.

    +
    + + dd371132 + D2D1_EXTEND_MODE ID2D1BitmapBrush::GetExtendModeY() + ID2D1BitmapBrush::GetExtendModeY +
    + + +

    Gets the interpolation method used when the brush bitmap is scaled or rotated.

    +
    +

    The interpolation method used when the brush bitmap is scaled or rotated.

    + +

    This method gets the interpolation mode of a bitmap, which is specified by the enumeration type. represents nearest neighbor filtering. It looks up the bitmap pixel nearest to the current rendering pixel and chooses its exact color. represents linear filtering, and interpolates a color from the four nearest bitmap pixels.

    The interpolation mode of a bitmap also affects subpixel translations. In a subpixel translation, linear interpolation positions the bitmap more precisely to the application request, but blurs the bitmap in the process.

    +
    + + dd371134 + D2D1_BITMAP_INTERPOLATION_MODE ID2D1BitmapBrush::GetInterpolationMode() + ID2D1BitmapBrush::GetInterpolationMode +
    + + +

    Gets the bitmap source that this brush uses to paint.

    +
    +

    When this method returns, contains the address to a reference to the bitmap with which this brush paints.

    + + dd371124 + void ID2D1BitmapBrush::GetBitmap([Out, Optional] ID2D1Bitmap** bitmap) + ID2D1BitmapBrush::GetBitmap +
    + + +

    Paints an area with a bitmap.

    +
    + + hh871447 + ID2D1BitmapBrush1 + ID2D1BitmapBrush1 +
    + + + Creates an from the specified bitmap. + + an instance of + The bitmap contents of the new brush. + HRESULT ID2D1DeviceContext::CreateBitmapBrush([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_BITMAP_BRUSH_PROPERTIES1* bitmapBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1BitmapBrush1** bitmapBrush) + + + + Creates an from the specified bitmap. + + an instance of + The bitmap contents of the new brush. + The extend modes and interpolation mode of the new brush, or NULL. If this parameter is NULL, the brush defaults to the horizontal and vertical extend modes and the interpolation mode. + HRESULT ID2D1DeviceContext::CreateBitmapBrush([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_BITMAP_BRUSH_PROPERTIES1* bitmapBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1BitmapBrush1** bitmapBrush) + + + + Creates an from the specified bitmap. + + an instance of + The bitmap contents of the new brush. + The opacity and transform of the new brush, or NULL. If this parameter is NULL, the brush defaults to an opacity of 1.0f and its transform is the identity matrix. + HRESULT ID2D1DeviceContext::CreateBitmapBrush([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_BITMAP_BRUSH_PROPERTIES1* bitmapBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1BitmapBrush1** bitmapBrush) + + + + Creates an from the specified bitmap. + + an instance of + The bitmap contents of the new brush. + The extend modes and interpolation mode of the new brush, or NULL. If this parameter is NULL, the brush defaults to the horizontal and vertical extend modes and the interpolation mode. + The opacity and transform of the new brush, or NULL. If this parameter is NULL, the brush defaults to an opacity of 1.0f and its transform is the identity matrix. + HRESULT ID2D1DeviceContext::CreateBitmapBrush([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_BITMAP_BRUSH_PROPERTIES1* bitmapBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1BitmapBrush1** bitmapBrush) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns or sets the current interpolation mode of the brush.

    +
    + + hh871448 + GetInterpolationMode1 / SetInterpolationMode1 + GetInterpolationMode1 + D2D1_INTERPOLATION_MODE ID2D1BitmapBrush1::GetInterpolationMode1() +
    + + +

    Sets the interpolation mode for the brush.

    +
    +

    The mode to use.

    + + hh871449 + void ID2D1BitmapBrush1::SetInterpolationMode1([In] D2D1_INTERPOLATION_MODE interpolationMode) + ID2D1BitmapBrush1::SetInterpolationMode1 +
    + + +

    Returns the current interpolation mode of the brush.

    +
    +

    The current interpolation mode.

    + + hh871448 + D2D1_INTERPOLATION_MODE ID2D1BitmapBrush1::GetInterpolationMode1() + ID2D1BitmapBrush1::GetInterpolationMode1 +
    + + +

    Describes the pixel format and dpi of a bitmap.

    +
    + + dd368075 + D2D1_BITMAP_PROPERTIES + D2D1_BITMAP_PROPERTIES +
    + + + Initializes a new instance of the struct. + + The pixel format. + + + + Initializes a new instance of the struct. + + The pixel format. + The dpi X. + The dpi Y. + + + +

    The bitmap's pixel format and alpha mode.

    +
    + + dd368075 + D2D1_PIXEL_FORMAT pixelFormat + D2D1_PIXEL_FORMAT pixelFormat +
    + + +

    The horizontal dpi of the bitmap.

    +
    + + dd368075 + float dpiX + float dpiX +
    + + +

    The vertical dpi of the bitmap.

    +
    + + dd368075 + float dpiY + float dpiY +
    + + +

    This structure allows a to be created with bitmap options and color context information available. +

    +
    + +

    If both dpiX and dpiY are 0, the dpi of the bitmap will be set to the desktop dpi if the device context is a windowed context, or 96 dpi for any other device context.

    +
    + + hh404275 + D2D1_BITMAP_PROPERTIES1 + D2D1_BITMAP_PROPERTIES1 +
    + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the struct. + + The pixel format. + + + + Initializes a new instance of the struct. + + The pixel format. + The dpi X. + The dpi Y. + + + + Initializes a new instance of the class. + + The pixel format. + The dpi X. + The dpi Y. + The bitmap options. + + + + Initializes a new instance of the class. + + The pixel format. + The dpi X. + The dpi Y. + The bitmap options. + The color context. + + + + Gets or sets the color context. + + + The color context. + + + + + No documentation. + + + hh404275 + D2D1_PIXEL_FORMAT pixelFormat + D2D1_PIXEL_FORMAT pixelFormat + + + + No documentation. + + + hh404275 + float dpiX + float dpiX + + + + No documentation. + + + hh404275 + float dpiY + float dpiY + + + + No documentation. + + + hh404275 + D2D1_BITMAP_OPTIONS bitmapOptions + D2D1_BITMAP_OPTIONS bitmapOptions + + + + No documentation. + + + hh404275 + ID2D1ColorContext* colorContext + ID2D1ColorContext colorContext + + + +

    Renders to an intermediate texture created by the CreateCompatibleRenderTarget method.

    +
    + +

    An writes to an intermediate texture. It's useful for creating patterns for use with an or caching drawing data that will be used repeatedly.

    To write directly to a WIC bitmap instead, use the method. This method returns an that writes to the specified WIC bitmap.

    +
    + + dd371146 + ID2D1BitmapRenderTarget + ID2D1BitmapRenderTarget +
    + + + Creates a bitmap render target for use during intermediate offscreen drawing that is compatible with the current render target with same size, pixel size and pixel format. + + an instance of + A value that specifies whether the new render target must be compatible with GDI. + HRESULT CreateCompatibleRenderTarget([In, Optional] const D2D1_SIZE_F* desiredSize,[In, Optional] const D2D1_SIZE_U* desiredPixelSize,[In, Optional] const D2D1_PIXEL_FORMAT* desiredFormat,[None] D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,[Out] ID2D1BitmapRenderTarget** bitmapRenderTarget) + + + + Creates a bitmap render target for use during intermediate offscreen drawing that is compatible with the current render target with same pixel size and pixel format. + + an instance of + A value that specifies whether the new render target must be compatible with GDI. + The desired size of the new render target in device-independent pixels if it should be different from the original render target. For more information, see the Remarks section. + HRESULT CreateCompatibleRenderTarget([In, Optional] const D2D1_SIZE_F* desiredSize,[In, Optional] const D2D1_SIZE_U* desiredPixelSize,[In, Optional] const D2D1_PIXEL_FORMAT* desiredFormat,[None] D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,[Out] ID2D1BitmapRenderTarget** bitmapRenderTarget) + + + + Creates a bitmap render target for use during intermediate offscreen drawing that is compatible with the current render target with same size and pixel size. + + an instance of + The desired pixel format and alpha mode of the new render target. If the pixel format is set to DXGI_FORMAT_UNKNOWN, the new render target uses the same pixel format as the original render target. If the alpha mode is , the alpha mode of the new render target defaults to D2D1_ALPHA_MODE_PREMULTIPLIED. For information about supported pixel formats, see {{Supported Pixel Formats and Alpha Modes}}. + A value that specifies whether the new render target must be compatible with GDI. + HRESULT CreateCompatibleRenderTarget([In, Optional] const D2D1_SIZE_F* desiredSize,[In, Optional] const D2D1_SIZE_U* desiredPixelSize,[In, Optional] const D2D1_PIXEL_FORMAT* desiredFormat,[None] D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,[Out] ID2D1BitmapRenderTarget** bitmapRenderTarget) + + + + Creates a bitmap render target for use during intermediate offscreen drawing that is compatible with the current render target. + + + The pixel size and DPI of the new render target can be altered by specifying values for desiredSize or desiredPixelSize: If desiredSize is specified but desiredPixelSize is not, the pixel size is computed from the desired size using the parent target DPI. If the desiredSize maps to a integer-pixel size, the DPI of the compatible render target is the same as the DPI of the parent target. If desiredSize maps to a fractional-pixel size, the pixel size is rounded up to the nearest integer and the DPI for the compatible render target is slightly higher than the DPI of the parent render target. In all cases, the coordinate (desiredSize.width, desiredSize.height) maps to the lower-right corner of the compatible render target.If the desiredPixelSize is specified and desiredSize is not, the DPI of the new render target is the same as the original render target.If both desiredSize and desiredPixelSize are specified, the DPI of the new render target is computed to account for the difference in scale.If neither desiredSize nor desiredPixelSize is specified, the new render target size and DPI match the original render target. + + an instance of + The desired size of the new render target in device-independent pixels if it should be different from the original render target. For more information, see the Remarks section. + The desired size of the new render target in pixels if it should be different from the original render target. For more information, see the Remarks section. + The desired pixel format and alpha mode of the new render target. If the pixel format is set to DXGI_FORMAT_UNKNOWN, the new render target uses the same pixel format as the original render target. If the alpha mode is , the alpha mode of the new render target defaults to D2D1_ALPHA_MODE_PREMULTIPLIED. For information about supported pixel formats, see {{Supported Pixel Formats and Alpha Modes}}. + A value that specifies whether the new render target must be compatible with GDI. + HRESULT CreateCompatibleRenderTarget([In, Optional] const D2D1_SIZE_F* desiredSize,[In, Optional] const D2D1_SIZE_U* desiredPixelSize,[In, Optional] const D2D1_PIXEL_FORMAT* desiredFormat,[None] D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,[Out] ID2D1BitmapRenderTarget** bitmapRenderTarget) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the bitmap for this render target. The returned bitmap can be used for drawing operations.

    +
    + +

    The DPI for the obtained from GetBitmap will be the DPI of the when the render target was created. Changing the DPI of the by calling SetDpi doesn't affect the DPI of the bitmap, even if SetDpi is called before GetBitmap. Using SetDpi to change the DPI of the does affect how contents are rendered into the bitmap: it just doesn't affect the DPI of the bitmap retrieved by GetBitmap.

    +
    + + dd371150 + GetBitmap + GetBitmap + HRESULT ID2D1BitmapRenderTarget::GetBitmap([Out] ID2D1Bitmap** bitmap) +
    + + +

    Retrieves the bitmap for this render target. The returned bitmap can be used for drawing operations.

    +
    +

    When this method returns, contains the address of a reference to the bitmap for this render target. This bitmap can be used for drawing operations.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The DPI for the obtained from GetBitmap will be the DPI of the when the render target was created. Changing the DPI of the by calling SetDpi doesn't affect the DPI of the bitmap, even if SetDpi is called before GetBitmap. Using SetDpi to change the DPI of the does affect how contents are rendered into the bitmap: it just doesn't affect the DPI of the bitmap retrieved by GetBitmap.

    +
    + + dd371150 + HRESULT ID2D1BitmapRenderTarget::GetBitmap([Out] ID2D1Bitmap** bitmap) + ID2D1BitmapRenderTarget::GetBitmap +
    + + +

    Provides methods to allow a blend operation to be inserted into a transform graph.

    The image output of the blend transform is the same as rendering an image effect graph with these steps:

    • Copy the first input to the destination image.
    • Render the next input on top using the blend description.
    • Continue for each additional input.
    +
    + + hh404361 + ID2D1BlendTransform + ID2D1BlendTransform +
    + + + Initializes a new instance of class + + The effect context + The number of inputs. + The blend description + + + + Initializes a new instance of class + + The effect context + The number of inputs. + The blend description + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the blend description of the corresponding blend transform object.

    +
    + + hh404363 + GetDescription / SetDescription + GetDescription + void ID2D1BlendTransform::GetDescription([Out] D2D1_BLEND_DESCRIPTION* description) +
    + + +

    Changes the blend description of the corresponding blend transform object.

    +
    +

    The new blend description specified for the blend transform.

    + + hh404365 + void ID2D1BlendTransform::SetDescription([In] const D2D1_BLEND_DESCRIPTION* description) + ID2D1BlendTransform::SetDescription +
    + + +

    Gets the blend description of the corresponding blend transform object.

    +
    +

    When this method returns, contains the blend description specified for the blend transform.

    + + hh404363 + void ID2D1BlendTransform::GetDescription([Out] D2D1_BLEND_DESCRIPTION* description) + ID2D1BlendTransform::GetDescription +
    + + +

    Extends the input rectangle to infinity using the specified extend modes.

    +
    + + hh404367 + ID2D1BorderTransform + ID2D1BorderTransform +
    + + + Initializes a new instance of class + + The effect context + The extend mode for X coordinates + The extend mode for Y coordinates + HRESULT ID2D1EffectContext::CreateBorderTransform([In] D2D1_EXTEND_MODE extendModeX,[In] D2D1_EXTEND_MODE extendModeY,[Out, Fast] ID2D1BorderTransform** transform) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the extend mode in the x direction.

    +
    + + hh404381 + GetExtendModeX / SetExtendModeX + GetExtendModeX + D2D1_EXTEND_MODE ID2D1BorderTransform::GetExtendModeX() +
    + + +

    Gets or sets the extend mode in the y direction.

    +
    + + hh404383 + GetExtendModeY / SetExtendModeY + GetExtendModeY + D2D1_EXTEND_MODE ID2D1BorderTransform::GetExtendModeY() +
    + + +

    Sets the extend mode in the x direction.

    +
    +

    The extend mode in the x direction.

    + +

    If the extend mode enumeration is invalid, this operation is ignored.

    +
    + + hh404385 + void ID2D1BorderTransform::SetExtendModeX([In] D2D1_EXTEND_MODE extendMode) + ID2D1BorderTransform::SetExtendModeX +
    + + +

    Sets the extend mode in the y direction.

    +
    +

    The extend mode in the y direction.

    + +

    If the extend mode enumeration is invalid, this operation is ignored.

    +
    + + hh404387 + void ID2D1BorderTransform::SetExtendModeY([In] D2D1_EXTEND_MODE extendMode) + ID2D1BorderTransform::SetExtendModeY +
    + + +

    Gets the extend mode in the x direction.

    +
    +

    This method returns the extend mode in the x direction.

    + + hh404381 + D2D1_EXTEND_MODE ID2D1BorderTransform::GetExtendModeX() + ID2D1BorderTransform::GetExtendModeX +
    + + +

    Gets the extend mode in the y direction.

    +
    +

    This method returns the extend mode in the y direction.

    + + hh404383 + D2D1_EXTEND_MODE ID2D1BorderTransform::GetExtendModeY() + ID2D1BorderTransform::GetExtendModeY +
    + + +

    A support transform for effects to modify the output rectangle of the previous effect or bitmap.

    +
    + +

    The support transform can be used for two different reasons.

    • To indicate that a region of its input image is already transparent black. The expanded area will be treated as transparent black.

      This can increase efficiency for rendering bitmaps.

    • To increase the size of the input image.

    ?

    ?

    +
    + + hh847963 + ID2D1BoundsAdjustmentTransform + ID2D1BoundsAdjustmentTransform +
    + + + Initializes a new instance of class + + The effect context + The output rectangle region used for this transformation + HRESULT ID2D1EffectContext::CreateBoundsAdjustmentTransform([In] const RECT* outputRectangle,[Out, Fast] ID2D1BoundsAdjustmentTransform** transform) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    This sets the output bounds for the support transform.

    +
    +

    The output bounds.

    + + hh847965 + void ID2D1BoundsAdjustmentTransform::SetOutputBounds([In] const RECT* outputBounds) + ID2D1BoundsAdjustmentTransform::SetOutputBounds +
    + + +

    Returns the output rectangle of the support transform.

    +
    +

    The output bounds.

    + + hh847964 + void ID2D1BoundsAdjustmentTransform::GetOutputBounds([Out] RECT* outputBounds) + ID2D1BoundsAdjustmentTransform::GetOutputBounds +
    + + +

    Represents a color context that can be used with an object.

    +
    + + hh404388 + ID2D1ColorContext + ID2D1ColorContext +
    + + + Initializes a new instance of class from a color profile. + + The effect context. + The space of color context to create. + No documentation. + HRESULT ID2D1EffectContext::CreateColorContext([In] D2D1_COLOR_SPACE space,[In, Buffer, Optional] const unsigned char* profile,[In] unsigned int profileSize,[Out] ID2D1ColorContext** colorContext) + + + + Initializes a new instance of class from a filename. + + The effect context. + The path to the file containing the profile bytes to initialize the color context with.. + HRESULT ID2D1EffectContext::CreateColorContextFromFilename([In] const wchar_t* filename,[Out] ID2D1ColorContext** colorContext) + + + + Initializes a new instance of class from WIC color context. + + No documentation. + No documentation. + HRESULT ID2D1EffectContext::CreateColorContextFromWicColorContext([In] IWICColorContext* wicColorContext,[Out] ID2D1ColorContext** colorContext) + + + + Gets the profile data. + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the color space of the color context.

    +
    + + dn890780 + GetColorSpace + GetColorSpace + D2D1_COLOR_SPACE ID2D1ColorContext::GetColorSpace() +
    + + +

    Gets the size of the color profile associated with the bitmap.

    +
    + +

    This can be used to allocate a buffer to receive the color profile bytes associated with the context.

    +
    + + hh404390 + GetProfileSize + GetProfileSize + unsigned int ID2D1ColorContext::GetProfileSize() +
    + + +

    Gets the color space of the color context.

    +
    +

    This method returns the color space of the contained ICC profile.

    + + dn890780 + D2D1_COLOR_SPACE ID2D1ColorContext::GetColorSpace() + ID2D1ColorContext::GetColorSpace +
    + + +

    Gets the size of the color profile associated with the bitmap.

    +
    +

    This method returns the size of the profile in bytes.

    + +

    This can be used to allocate a buffer to receive the color profile bytes associated with the context.

    +
    + + hh404390 + unsigned int ID2D1ColorContext::GetProfileSize() + ID2D1ColorContext::GetProfileSize +
    + + +

    Gets the color profile bytes for an .

    +
    + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    The supplied buffer was too small to accomodate the data.

    ?

    + +

    If profileSize is insufficient to store the entire profile, profile is zero-initialized before this method fails.

    +
    + + hh404389 + HRESULT ID2D1ColorContext::GetProfile([Out, Buffer] unsigned char* profile,[In] unsigned int profileSize) + ID2D1ColorContext::GetProfile +
    + + +

    This interface performs all the same functions as the interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.

    +
    + + dn890789 + ID2D1ColorContext1 + ID2D1ColorContext1 +
    + + + Initializes a new instance of class from ColorSpaceType. + + No documentation. + No documentation. + HRESULT ID2D1DeviceContext5::CreateColorContextFromDxgiColorSpace([In] DXGI_COLOR_SPACE_TYPE colorSpace,[Out, Fast] ID2D1ColorContext1** colorContext) + + + + Initializes a new instance of class from SimpleColorProfile. + + No documentation. + No documentation. + HRESULT ID2D1DeviceContext5::CreateColorContextFromDxgiColorSpace([In] DXGI_COLOR_SPACE_TYPE colorSpace,[Out, Fast] ID2D1ColorContext1** colorContext) + + + + Initializes a new instance of class from ColorSpaceType. + + No documentation. + No documentation. + HRESULT ID2D1DeviceContext5::CreateColorContextFromDxgiColorSpace([In] DXGI_COLOR_SPACE_TYPE colorSpace,[Out, Fast] ID2D1ColorContext1** colorContext) + + + + Initializes a new instance of class from SimpleColorProfile. + + No documentation. + No documentation. + HRESULT ID2D1DeviceContext5::CreateColorContextFromDxgiColorSpace([In] DXGI_COLOR_SPACE_TYPE colorSpace,[Out, Fast] ID2D1ColorContext1** colorContext) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Represents a color context to be used with the Color Management Effect.

    +
    + + mt797797 + GetColorContextType + GetColorContextType + D2D1_COLOR_CONTEXT_TYPE ID2D1ColorContext1::GetColorContextType() +
    + + + No documentation. + + + GetDXGIColorSpace + GetDXGIColorSpace + DXGI_COLOR_SPACE_TYPE ID2D1ColorContext1::GetDXGIColorSpace() + + + + No documentation. + + + GetSimpleColorProfile + GetSimpleColorProfile + HRESULT ID2D1ColorContext1::GetSimpleColorProfile([Out] D2D1_SIMPLE_COLOR_PROFILE* simpleProfile) + + + +

    Represents a color context to be used with the Color Management Effect.

    +
    + No documentation. + + mt797797 + D2D1_COLOR_CONTEXT_TYPE ID2D1ColorContext1::GetColorContextType() + ID2D1ColorContext1::GetColorContextType +
    + + + No documentation. + + No documentation. + + DXGI_COLOR_SPACE_TYPE ID2D1ColorContext1::GetDXGIColorSpace() + ID2D1ColorContext1::GetDXGIColorSpace + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1ColorContext1::GetSimpleColorProfile([Out] D2D1_SIMPLE_COLOR_PROFILE* simpleProfile) + ID2D1ColorContext1::GetSimpleColorProfile + + + +

    Represents a sequence of commands that can be recorded and played back.

    +
    + +

    The command list does not include static copies of resources with the recorded set of commands. All bitmaps, effects, and geometries are stored as references to the actual resource and all the brushes are stored by value. All the resource creation and destruction happens outside of the command list. The following table lists resources and how they are treated inside of a command list.

    ResourceHow it is treated by the command list
    Solid-color brushPassed by value.
    Bitmap brushThe brush is passed by value but the bitmap that is used to create the brush is in fact referenced.
    Gradient brushes ? both linear and radial gradientThe brush is passed by value but the gradient stop collection itself is referenced. The gradient stop collection object is immutable.
    BitmapsPassed by reference.
    Drawing state blockThe actual state on the device context is converted into set functions like set transform and is passed by value.
    GeometryImmutable object passed by value.
    Stroke styleImmutable object passed by value.
    MeshImmutable object passed by value.

    ?

    +
    + + hh404392 + ID2D1CommandList + ID2D1CommandList +
    + + + Initializes a new instance of the class. + + The device context. + + + + Streams the contents of the command list to the specified command sink. + + The sink into which the command list will be streamed. + + + + Streams the contents of the command list to the specified command sink. + + The sink into which the command list will be streamed. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Streams the contents of the command list to the specified command sink.

    +
    +

    The sink into which the command list will be streamed.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    The return value indicates any failures the command sink implementation returns through its EndDraw method.

    + +

    The command sink can be implemented by any caller of the API.

    If the caller makes any design-time failure calls while a command list is selected as a target, the command list is placed in an error state. The stream call fails without making any calls to the passed in sink.

    Sample use:

    Class MyCommandSink : public 	
    +            {	
    +            public: // All of the  methods implemented here.	
    +            }; 	
    +            StreamToMyCommandSink( __in  *pCommandList  )	
    +            {  hr = ; MyCommandSink *pCommandSink = new MyCommandSink(); hr = pCommandSink ?  : E_OUTOFMEMORY; if (SUCCEEDED(hr)) { // Receive the contents of the command sink streamed to the sink. hr = pCommandList->Stream(pCommandSink); } SafeRelease(&pCommandSink); return hr; }
    +
    + + hh404393 + HRESULT ID2D1CommandList::Stream([In] ID2D1CommandSink* sink) + ID2D1CommandList::Stream +
    + + +

    Instructs the command list to stop accepting commands so that you can use it as an input to an effect or in a call to . You should call the method after it has been attached to an and written to but before the command list is used.

    +
    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    Close has already been called on the command list.

    ?

    Note??If the device context associated with the command list has an error, the command list returns the same error.?
    + +

    This method returns if it has already been called on the command list. If an error occurred on the device context during population, the method returns that error. Otherwise, the method returns .

    If the Close method returns an error, any future use of the command list results in the same error.

    +
    + + hh871450 + HRESULT ID2D1CommandList::Close() + ID2D1CommandList::Close +
    + + +

    The command sink is implemented by you for an application when you want to receive a playback of the commands recorded in a command list. A typical usage will be for transforming the command list into another format such as XPS when some degree of conversion between the Direct2D primitives and the target format is required.

    The command sink interface doesn't have any resource creation methods on it. The resources are still logically bound to the Direct2D device on which the command list was created and will be passed in to the command sink implementation.

    +
    + +

    The can be implemented to receive a play-back of the commands recorded in a command list. This interface is typically used for transforming the command list into another format where some degree of conversion between the Direct2D primitives and the target format is required.

    The interface does not have any resource creation methods. The resources are logically bound to the Direct2D device on which the was created and will be passed in to the implementation.

    Not all methods implemented by are present.

    +
    + + hh404394 + ID2D1CommandSink + ID2D1CommandSink +
    + + + Begins a draw sequence. + + HRESULT ID2D1CommandSink::BeginDraw() + + + + Ends a draw sequence. + + HRESULT ID2D1CommandSink::EndDraw() + + + + Sets the antialias mode. + + HRESULT ID2D1CommandSink::SetAntialiasMode([In] D2D1_ANTIALIAS_MODE antialiasMode) + + + + Sets tags. + + HRESULT ID2D1CommandSink::SetTags([In] unsigned longlong tag1,[In] unsigned longlong tag2) + + + + Sets the text antialias mode. + + HRESULT ID2D1CommandSink::SetTextAntialiasMode([In] D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) + + + + Sets the parameters for text rendering. + + HRESULT ID2D1CommandSink::SetTextRenderingParams([In, Optional] IDWriteRenderingParams* textRenderingParams) + + + + Sets the matrix transform. + + + The transform will be applied to the corresponding device context. + + HRESULT ID2D1CommandSink::SetTransform([In] const D2D_MATRIX_3X2_F* transform) + + + + Sets the blending for primitives. + + HRESULT ID2D1CommandSink::SetPrimitiveBlend([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + + + + Sets the unit mode + + HRESULT ID2D1CommandSink::SetUnitMode([In] D2D1_UNIT_MODE unitMode) + + + + [This documentation is preliminary and is subject to change.] + + The color to which the command sink should be cleared. + + The clear color is restricted by the currently selected clip and layer bounds.If no color is specified, the color should be interpreted by context. Examples include but are not limited to:Transparent black for a premultiplied bitmap target. Opaque black for an ignore bitmap target. Containing no content (or white) for a printer page. + + HRESULT ID2D1CommandSink::Clear([In, Optional] const D2D_COLOR_F* color) + + + + [This documentation is preliminary and is subject to change.] + + The sequence of glyphs to be sent. + Additional non-rendering information about the glyphs. + The brush used to fill the glyphs. + The measuring mode to apply to the glyphs. + No documentation. + HRESULT ID2D1CommandSink::DrawGlyphRun([In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[In] ID2D1Brush* foregroundBrush,[In] DWRITE_MEASURING_MODE measuringMode) + + + + [This documentation is preliminary and is subject to change.] + + The start point of the line. + The end point of the line. + The brush used to fill the line. + The width of the stroke to fill the line. + The style of the stroke. If not specified, the stroke is solid. + + Additional References + + HRESULT ID2D1CommandSink::DrawLine([In] D2D_POINT_2F point0,[In] D2D_POINT_2F point1,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + [This documentation is preliminary and is subject to change.] + + The geometry to be stroked. + The brush that will be used to fill the stroked geometry. + The width of the stroke. + The style of the stroke. + + You must convert ellipses and rounded rectangles to the corresponding ellipse and rounded rectangle geometries before calling into the DrawGeometry method.Additional ReferencesID2D1CommandList::Stream, RequirementsMinimum supported operating systemSame as Interface / Class Highest IRQL levelN/A (user mode) Callable from DlllMain()No Callable from services and session 0Yes Callable from UI threadYes? + + HRESULT ID2D1CommandSink::DrawGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + HRESULT ID2D1CommandSink::DrawRectangle([In] const D2D_RECT_F* rect,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + HRESULT ID2D1CommandSink::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_F* destinationRectangle,[In] float opacity,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D_RECT_F* sourceRectangle,[In, Optional] const D2D_MATRIX_4X4_F* perspectiveTransform) + + + + [This documentation is preliminary and is subject to change.] + + The image to be drawn to the command sink. + This defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image will be rendered to the corresponding destination. If not specified, the destination origin will be (0, 0). The top-left corner of the image will be mapped to the target offset. This will not necessarily be the origin. + The corresponding rectangle in the image space will be mapped to the provided origins when processing the image. + The interpolation mode that will be used to scale the image if necessary. + If specified, the composite mode that will be applied to the limits of the currently selected clip. + + Because the image can itself be a command list or contain an effect graph that in turn contains a command list, this method can result in recursive processing. + + HRESULT ID2D1CommandSink::DrawImage([In] ID2D1Image* image,[In, Optional] const D2D_POINT_2F* targetOffset,[In, Optional] const D2D_RECT_F* imageRectangle,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In] D2D1_COMPOSITE_MODE compositeMode) + + + + No documentation. + + No documentation. + No documentation. + HRESULT ID2D1CommandSink::DrawGdiMetafile([In] ID2D1GdiMetafile* gdiMetafile,[In, Optional] const D2D_POINT_2F* targetOffset) + + + + [This documentation is preliminary and is subject to change.] + + The mesh object to be filled. + The brush with which to fill the mesh. + HRESULT ID2D1CommandSink::FillMesh([In] ID2D1Mesh* mesh,[In] ID2D1Brush* brush) + + + + [This documentation is preliminary and is subject to change.] + + The bitmap whose alpha channel will be sampled to define the opacity mask. + The brush with which to fill the mask. + The type of content that the mask represents. + The destination rectangle in which to fill the mask. If not specified, this is the origin. + + The opacity mask bitmap must be considered to be clamped on each axis. + + HRESULT ID2D1CommandSink::FillOpacityMask([In] ID2D1Bitmap* opacityMask,[In] ID2D1Brush* brush,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + + + + [This documentation is preliminary and is subject to change.] + + The geometry that should be filled. + The primary brush used to fill the geometry. + A brush whose alpha channel is used to modify the opacity of the primary fill brush. + + If the opacity brush is specified, the primary brush will be a bitmap brush fixed on both the x-axis and the y-axis.Ellipses and rounded rectangles are converted to the corresponding geometry before being passed to FillGeometry. + + HRESULT ID2D1CommandSink::FillGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In, Optional] ID2D1Brush* opacityBrush) + + + + [This documentation is preliminary and is subject to change.] + + The rectangle to fill. + The brush with which to fill the rectangle. + HRESULT ID2D1CommandSink::FillRectangle([In] const D2D_RECT_F* rect,[In] ID2D1Brush* brush) + + + + [This documentation is preliminary and is subject to change.] + + The rectangle that defines the clip. + Whether the given clip should be antialiased. + + If the current world transform is not preserving the axis, clipRectangle is transformed and the bounds of the transformed rectangle are used instead. + + HRESULT ID2D1CommandSink::PushAxisAlignedClip([In] const D2D_RECT_F* clipRect,[In] D2D1_ANTIALIAS_MODE antialiasMode) + + + + No documentation. + + No documentation. + No documentation. + HRESULT ID2D1CommandSink::PushLayer([In] const D2D1_LAYER_PARAMETERS1* layerParameters1,[In, Optional] ID2D1Layer* layer) + + + + [This documentation is preliminary and is subject to change.] + + HRESULT ID2D1CommandSink::PopAxisAlignedClip() + + + + No documentation. + + HRESULT ID2D1CommandSink::PopLayer() + + + +

    This interface performs all the same functions as the existing interface. It also enables access to the new primitive blend modes, MIN and ADD, through its SetPrimitiveBlend1 method.

    +
    + + dn280436 + ID2D1CommandSink1 + ID2D1CommandSink1 +
    + + +

    Enables access to the new primitive blend modes, MIN and ADD.

    +
    + No documentation. + No documentation. + + dn280436 + HRESULT ID2D1CommandSink1::SetPrimitiveBlend1([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + ID2D1CommandSink1::SetPrimitiveBlend1 +
    + + +

    This interface performs all the same functions as the existing interface. It also enables access to the new primitive blend modes, MIN and ADD, through its SetPrimitiveBlend1 method.

    +
    + + dn280436 + ID2D1CommandSink1 + ID2D1CommandSink1 +
    + + +

    Enables access to the new primitive blend modes, MIN and ADD.

    +
    + No documentation. + No documentation. + + dn280436 + HRESULT ID2D1CommandSink1::SetPrimitiveBlend1([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + ID2D1CommandSink1::SetPrimitiveBlend1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets a new primitive blend mode.

    +
    +

    The primitive blend that will apply to subsequent primitives.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + dn280438 + HRESULT ID2D1CommandSink1::SetPrimitiveBlend1([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + ID2D1CommandSink1::SetPrimitiveBlend1 +
    + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + + Sets the blending for primitives. + + HRESULT ID2D1CommandSink1::SetPrimitiveBlend1([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + + + +

    This interface performs all the same functions as the existing interface. It also enables access to ink rendering and gradient mesh rendering.

    +
    + + dn890781 + ID2D1CommandSink2 + ID2D1CommandSink2 +
    + + + No documentation for Direct3D12 + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1CommandSink2::DrawInk([In] ID2D1Ink* ink,[In] ID2D1Brush* brush,[In, Optional] ID2D1InkStyle* inkStyle) + ID2D1CommandSink2::DrawInk + + + + No documentation for Direct3D12 + + No documentation. + No documentation. + + HRESULT ID2D1CommandSink2::DrawGradientMesh([In] ID2D1GradientMesh* gradientMesh) + ID2D1CommandSink2::DrawGradientMesh + + + + No documentation for Direct3D12 + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1CommandSink2::DrawGdiMetafile([In] ID2D1GdiMetafile* gdiMetafile,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + ID2D1CommandSink2::DrawGdiMetafile + + + +

    This interface performs all the same functions as the existing interface. It also enables access to ink rendering and gradient mesh rendering.

    +
    + + dn890781 + ID2D1CommandSink2 + ID2D1CommandSink2 +
    + + + No documentation for Direct3D12 + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1CommandSink2::DrawInk([In] ID2D1Ink* ink,[In] ID2D1Brush* brush,[In, Optional] ID2D1InkStyle* inkStyle) + ID2D1CommandSink2::DrawInk + + + + No documentation for Direct3D12 + + No documentation. + No documentation. + + HRESULT ID2D1CommandSink2::DrawGradientMesh([In] ID2D1GradientMesh* gradientMesh) + ID2D1CommandSink2::DrawGradientMesh + + + + No documentation for Direct3D12 + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1CommandSink2::DrawGdiMetafile([In] ID2D1GdiMetafile* gdiMetafile,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + ID2D1CommandSink2::DrawGdiMetafile + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Renders the given ink object using the given brush and ink style.

    +
    +

    The ink object to be rendered.

    +

    The brush with which to render the ink object.

    +

    The ink style to use when rendering the ink object.

    +

    This method does not return a value.

    + + dn890784 + HRESULT ID2D1CommandSink2::DrawInk([In] ID2D1Ink* ink,[In] ID2D1Brush* brush,[In, Optional] ID2D1InkStyle* inkStyle) + ID2D1CommandSink2::DrawInk +
    + + +

    Renders a given gradient mesh to the target.

    +
    +

    The gradient mesh to be rendered.

    +

    This method does not return a value.

    + + dn890783 + HRESULT ID2D1CommandSink2::DrawGradientMesh([In] ID2D1GradientMesh* gradientMesh) + ID2D1CommandSink2::DrawGradientMesh +
    + + +

    Draws a metafile to the command sink using the given source and destination rectangles.

    +
    +

    The metafile to draw.

    +

    The rectangle in the target where the metafile will be drawn, relative to the upper left corner (defined in DIPs). If null is specified, the destination rectangle is the size of the target.

    +

    The rectangle of the source metafile that will be drawn, relative to the upper left corner (defined in DIPs). If null is specified, the source rectangle is the value returned by .

    +

    This method does not return a value.

    + + dn890782 + HRESULT ID2D1CommandSink2::DrawGdiMetafile([In] ID2D1GdiMetafile* gdiMetafile,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + ID2D1CommandSink2::DrawGdiMetafile +
    + + +

    This interface performs all the same functions as the existing interface. It also enables access to sprite batch rendering.

    +
    + + mt619822 + ID2D1CommandSink3 + ID2D1CommandSink3 +
    + + +

    Renders part or all of the given sprite batch to the device context using the specified drawing options.

    +
    +

    The sprite batch to draw.

    +

    The index of the first sprite in the sprite batch to draw.

    +

    The number of sprites to draw.

    +

    The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.

    +

    The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.

    +

    The additional drawing options, if any, to be used for this sprite batch.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt619823 + HRESULT ID2D1CommandSink3::DrawSpriteBatch([In] ID2D1SpriteBatch* spriteBatch,[In] unsigned int startIndex,[In] unsigned int spriteCount,[In] ID2D1Bitmap* bitmap,[In] D2D1_BITMAP_INTERPOLATION_MODE interpolationMode,[In] D2D1_SPRITE_OPTIONS spriteOptions) + ID2D1CommandSink3::DrawSpriteBatch +
    + + +

    This interface performs all the same functions as the existing interface. It also enables access to sprite batch rendering.

    +
    + + mt619822 + ID2D1CommandSink3 + ID2D1CommandSink3 +
    + + +

    Renders part or all of the given sprite batch to the device context using the specified drawing options.

    +
    +

    The sprite batch to draw.

    +

    The index of the first sprite in the sprite batch to draw.

    +

    The number of sprites to draw.

    +

    The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.

    +

    The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.

    +

    The additional drawing options, if any, to be used for this sprite batch.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt619823 + HRESULT ID2D1CommandSink3::DrawSpriteBatch([In] ID2D1SpriteBatch* spriteBatch,[In] unsigned int startIndex,[In] unsigned int spriteCount,[In] ID2D1Bitmap* bitmap,[In] D2D1_BITMAP_INTERPOLATION_MODE interpolationMode,[In] D2D1_SPRITE_OPTIONS spriteOptions) + ID2D1CommandSink3::DrawSpriteBatch +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Renders part or all of the given sprite batch to the device context using the specified drawing options.

    +
    +

    The sprite batch to draw.

    +

    The index of the first sprite in the sprite batch to draw.

    +

    The number of sprites to draw.

    +

    The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.

    +

    The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.

    +

    The additional drawing options, if any, to be used for this sprite batch.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt619823 + HRESULT ID2D1CommandSink3::DrawSpriteBatch([In] ID2D1SpriteBatch* spriteBatch,[In] unsigned int startIndex,[In] unsigned int spriteCount,[In] ID2D1Bitmap* bitmap,[In] D2D1_BITMAP_INTERPOLATION_MODE interpolationMode,[In] D2D1_SPRITE_OPTIONS spriteOptions) + ID2D1CommandSink3::DrawSpriteBatch +
    + + +

    This interface performs all the same functions as the existing interface. It also enables access to the new primitive blend mode, MAX, through the SetPrimitiveBlend2 method.

    +
    + + mt797801 + ID2D1CommandSink4 + ID2D1CommandSink4 +
    + + +

    Sets a new primitive blend mode. Allows access to the MAX primitive blend mode.

    +
    + The primitive blend that will apply to subsequent primitives. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt797802 + HRESULT ID2D1CommandSink4::SetPrimitiveBlend2([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + ID2D1CommandSink4::SetPrimitiveBlend2 +
    + + +

    This interface performs all the same functions as the existing interface. It also enables access to the new primitive blend mode, MAX, through the SetPrimitiveBlend2 method.

    +
    + + mt797801 + ID2D1CommandSink4 + ID2D1CommandSink4 +
    + + +

    Sets a new primitive blend mode. Allows access to the MAX primitive blend mode.

    +
    + The primitive blend that will apply to subsequent primitives. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt797802 + HRESULT ID2D1CommandSink4::SetPrimitiveBlend2([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + ID2D1CommandSink4::SetPrimitiveBlend2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1CommandSink4::SetPrimitiveBlend2([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + ID2D1CommandSink4::SetPrimitiveBlend2 + + + +

    The command sink is implemented by you for an application when you want to receive a playback of the commands recorded in a command list. A typical usage will be for transforming the command list into another format such as XPS when some degree of conversion between the Direct2D primitives and the target format is required.

    The command sink interface doesn't have any resource creation methods on it. The resources are still logically bound to the Direct2D device on which the command list was created and will be passed in to the command sink implementation.

    +
    + +

    The can be implemented to receive a play-back of the commands recorded in a command list. This interface is typically used for transforming the command list into another format where some degree of conversion between the Direct2D primitives and the target format is required.

    The interface does not have any resource creation methods. The resources are logically bound to the Direct2D device on which the was created and will be passed in to the implementation.

    Not all methods implemented by are present.

    +
    + + hh404394 + ID2D1CommandSink + ID2D1CommandSink +
    + + HRESULT ID2D1CommandSink::BeginDraw() + + + HRESULT ID2D1CommandSink::EndDraw() + + + HRESULT ID2D1CommandSink::SetAntialiasMode([In] D2D1_ANTIALIAS_MODE antialiasMode) + + + HRESULT ID2D1CommandSink::SetTags([In] unsigned longlong tag1,[In] unsigned longlong tag2) + + + HRESULT ID2D1CommandSink::SetTextAntialiasMode([In] D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) + + + HRESULT ID2D1CommandSink::SetTextRenderingParams([In, Optional] IDWriteRenderingParams* textRenderingParams) + + + HRESULT ID2D1CommandSink::SetTransform([In] const D2D_MATRIX_3X2_F* transform) + + + HRESULT ID2D1CommandSink::SetPrimitiveBlend([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + + + HRESULT ID2D1CommandSink::SetUnitMode([In] D2D1_UNIT_MODE unitMode) + + + HRESULT ID2D1CommandSink::Clear([In, Optional] const D2D_COLOR_F* color) + + + HRESULT ID2D1CommandSink::DrawGlyphRun([In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[In] ID2D1Brush* foregroundBrush,[In] DWRITE_MEASURING_MODE measuringMode) + + + HRESULT ID2D1CommandSink::DrawLine([In] D2D_POINT_2F point0,[In] D2D_POINT_2F point1,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + HRESULT ID2D1CommandSink::DrawGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + HRESULT ID2D1CommandSink::DrawRectangle([In] const D2D_RECT_F* rect,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + HRESULT ID2D1CommandSink::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_F* destinationRectangle,[In] float opacity,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D_RECT_F* sourceRectangle,[In, Optional] const D2D_MATRIX_4X4_F* perspectiveTransform) + + + HRESULT ID2D1CommandSink::DrawImage([In] ID2D1Image* image,[In, Optional] const D2D_POINT_2F* targetOffset,[In, Optional] const D2D_RECT_F* imageRectangle,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In] D2D1_COMPOSITE_MODE compositeMode) + + + HRESULT ID2D1CommandSink::DrawGdiMetafile([In] ID2D1GdiMetafile* gdiMetafile,[In, Optional] const D2D_POINT_2F* targetOffset) + + + HRESULT ID2D1CommandSink::FillMesh([In] ID2D1Mesh* mesh,[In] ID2D1Brush* brush) + + + HRESULT ID2D1CommandSink::FillOpacityMask([In] ID2D1Bitmap* opacityMask,[In] ID2D1Brush* brush,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + + + HRESULT ID2D1CommandSink::FillGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In, Optional] ID2D1Brush* opacityBrush) + + + HRESULT ID2D1CommandSink::FillRectangle([In] const D2D_RECT_F* rect,[In] ID2D1Brush* brush) + + + HRESULT ID2D1CommandSink::PushAxisAlignedClip([In] const D2D_RECT_F* clipRect,[In] D2D1_ANTIALIAS_MODE antialiasMode) + + + HRESULT ID2D1CommandSink::PushLayer([In] const D2D1_LAYER_PARAMETERS1* layerParameters1,[In, Optional] ID2D1Layer* layer) + + + + [This documentation is preliminary and is subject to change.] + + HRESULT ID2D1CommandSink::PopAxisAlignedClip() + + + + No documentation. + + HRESULT ID2D1CommandSink::PopLayer() + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Notifies the implementation of the command sink that drawing is about to commence.

    +
    +

    This method always returns .

    + + hh404395 + HRESULT ID2D1CommandSink::BeginDraw() + ID2D1CommandSink::BeginDraw +
    + + +

    Indicates when processing has completed.

    +
    +

    If the method/function succeeds, it returns . If it fails, it returns an error code.

    + +

    The active at the end of the command list will be returned.

    It allows the calling function or method to indicate a failure back to the stream implementation.

    +
    + + hh404409 + HRESULT ID2D1CommandSink::EndDraw() + ID2D1CommandSink::EndDraw +
    + + +

    Sets the antialiasing mode that will be used to render any subsequent geometry.

    +
    +

    The antialiasing mode selected for the command list.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404420 + HRESULT ID2D1CommandSink::SetAntialiasMode([In] D2D1_ANTIALIAS_MODE antialiasMode) + ID2D1CommandSink::SetAntialiasMode +
    + + +

    Sets the tags that correspond to the tags in the command sink.

    +
    +

    The first tag to associate with the primitive.

    +

    The second tag to associate with the primitive.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404422 + HRESULT ID2D1CommandSink::SetTags([In] unsigned longlong tag1,[In] unsigned longlong tag2) + ID2D1CommandSink::SetTags +
    + + +

    Indicates the new default antialiasing mode for text.

    +
    +

    The antialiasing mode for the text.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404423 + HRESULT ID2D1CommandSink::SetTextAntialiasMode([In] D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) + ID2D1CommandSink::SetTextAntialiasMode +
    + + +

    Indicates more detailed text rendering parameters.

    +
    +

    The parameters to use for text rendering.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404424 + HRESULT ID2D1CommandSink::SetTextRenderingParams([In, Optional] IDWriteRenderingParams* textRenderingParams) + ID2D1CommandSink::SetTextRenderingParams +
    + + +

    Sets a new transform.

    +
    +

    The transform to be set.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    The transform will be applied to the corresponding device context.

    +
    + + hh404425 + HRESULT ID2D1CommandSink::SetTransform([In] const D2D_MATRIX_3X2_F* transform) + ID2D1CommandSink::SetTransform +
    + + +

    Sets a new primitive blend mode.

    +
    +

    The primitive blend that will apply to subsequent primitives.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404421 + HRESULT ID2D1CommandSink::SetPrimitiveBlend([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + ID2D1CommandSink::SetPrimitiveBlend +
    + + +

    The unit mode changes the meaning of subsequent units from device-independent pixels (DIPs) to pixels or the other way. The command sink does not record a DPI, this is implied by the playback context or other playback interface such as .

    +
    + No documentation. +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    The unit mode changes the interpretation of units from DIPs to pixels or vice versa.

    +
    + + hh404426 + HRESULT ID2D1CommandSink::SetUnitMode([In] D2D1_UNIT_MODE unitMode) + ID2D1CommandSink::SetUnitMode +
    + + +

    Clears the drawing area to the specified color.

    +
    +

    The color to which the command sink should be cleared.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    The clear color is restricted by the currently selected clip and layer bounds.

    If no color is specified, the color should be interpreted by context. Examples include but are not limited to:

    • Transparent black for a premultiplied bitmap target.
    • Opaque black for an ignore bitmap target.
    • Containing no content (or white) for a printer page.
    +
    + + hh404397 + HRESULT ID2D1CommandSink::Clear([In, Optional] const D2D_COLOR_F* color) + ID2D1CommandSink::Clear +
    + + +

    Indicates the glyphs to be drawn.

    +
    +

    The upper left corner of the baseline.

    +

    The glyphs to render.

    +

    Additional non-rendering information about the glyphs.

    +

    The brush used to fill the glyphs.

    +

    The measuring mode to apply to the glyphs.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    DrawText and DrawTextLayout are broken down into glyph runs and rectangles by the time the command sink is processed. So, these methods aren't available on the command sink. Since the application may require additional callback processing when calling DrawTextLayout, this semantic can't be easily preserved in the command list.

    +
    + + hh404401 + HRESULT ID2D1CommandSink::DrawGlyphRun([In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[In] ID2D1Brush* foregroundBrush,[In] DWRITE_MEASURING_MODE measuringMode) + ID2D1CommandSink::DrawGlyphRun +
    + + +

    Draws a line drawn between two points.

    +
    +

    The start point of the line.

    +

    The end point of the line.

    +

    The brush used to fill the line.

    +

    The width of the stroke to fill the line.

    +

    The style of the stroke. If not specified, the stroke is solid.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404405 + HRESULT ID2D1CommandSink::DrawLine([In] D2D_POINT_2F point0,[In] D2D_POINT_2F point1,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + ID2D1CommandSink::DrawLine +
    + + +

    Indicates the geometry to be drawn to the command sink.

    +
    +

    The geometry to be stroked.

    +

    The brush that will be used to fill the stroked geometry.

    +

    The width of the stroke.

    +

    The style of the stroke.

    +

    An .

    + +

    Ellipses and rounded rectangles are converted to the corresponding ellipse and rounded rectangle geometries before calling into the DrawGeometry method. +

    +
    + + hh404399 + HRESULT ID2D1CommandSink::DrawGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + ID2D1CommandSink::DrawGeometry +
    + + +

    Draws a rectangle.

    +
    +

    The rectangle to be drawn to the command sink.

    +

    The brush used to stroke the geometry.

    +

    The width of the stroke.

    +

    The style of the stroke.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404407 + HRESULT ID2D1CommandSink::DrawRectangle([In] const D2D_RECT_F* rect,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + ID2D1CommandSink::DrawRectangle +
    + + +

    Draws a bitmap to the render target.

    +
    +

    The bitmap to draw.

    +

    The destination rectangle. The default is the size of the bitmap and the location is the upper left corner of the render target.

    +

    The opacity of the bitmap.

    +

    The interpolation mode to use.

    +

    An optional source rectangle.

    +

    An optional perspective transform.

    +

    This method does not return a value.

    + +

    The destinationRectangle parameter defines the rectangle in the target where the bitmap will appear (in device-independent pixels (DIPs)). This is affected by the currently set transform and the perspective transform, if set. If you specify null, then the destination rectangle is (left=0, top=0, right = width(sourceRectangle), bottom = height(sourceRectangle).

    The sourceRectangle defines the sub-rectangle of the source bitmap (in DIPs). DrawBitmap clips this rectangle to the size of the source bitmap, so it's impossible to sample outside of the bitmap. If you specify null, then the source rectangle is taken to be the size of the source bitmap.

    The perspectiveTransform is specified in addition to the transform on device context. +

    +
    + + hh847972 + HRESULT ID2D1CommandSink::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_F* destinationRectangle,[In] float opacity,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D_RECT_F* sourceRectangle,[In, Optional] const D2D_MATRIX_4X4_F* perspectiveTransform) + ID2D1CommandSink::DrawBitmap +
    + + +

    Draws the provided image to the command sink.

    +
    +

    The image to be drawn to the command sink.

    +

    This defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image will be rendered to the corresponding destination. If not specified, the destination origin will be (0, 0). The top-left corner of the image will be mapped to the target offset. This will not necessarily be the origin.

    +

    The corresponding rectangle in the image space will be mapped to the provided origins when processing the image.

    +

    The interpolation mode to use to scale the image if necessary.

    +

    If specified, the composite mode that will be applied to the limits of the currently selected clip.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    Because the image can itself be a command list or contain an effect graph that in turn contains a command list, this method can result in recursive processing.

    +
    + + hh404403 + HRESULT ID2D1CommandSink::DrawImage([In] ID2D1Image* image,[In, Optional] const D2D_POINT_2F* targetOffset,[In, Optional] const D2D_RECT_F* imageRectangle,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In] D2D1_COMPOSITE_MODE compositeMode) + ID2D1CommandSink::DrawImage +
    + + +

    Draw a metafile to the device context.

    +
    +

    The metafile to draw.

    +

    The offset from the upper left corner of the render target.

    +

    This method does not return a value.

    + +

    The targetOffset defines the offset in the destination space that the image will be rendered to. The entire logical extent of the image is rendered to the corresponding destination. If you don't specify the offset, the destination origin will be (0, 0). The top, left corner of the image will be mapped to the target offset. This will not necessarily be the origin. +

    +
    + + hh847973 + HRESULT ID2D1CommandSink::DrawGdiMetafile([In] ID2D1GdiMetafile* gdiMetafile,[In, Optional] const D2D_POINT_2F* targetOffset) + ID2D1CommandSink::DrawGdiMetafile +
    + + +

    Indicates a mesh to be filled by the command sink.

    +
    +

    The mesh object to be filled.

    +

    The brush with which to fill the mesh.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404413 + HRESULT ID2D1CommandSink::FillMesh([In] ID2D1Mesh* mesh,[In] ID2D1Brush* brush) + ID2D1CommandSink::FillMesh +
    + + +

    Fills an opacity mask on the command sink.

    +
    +

    The bitmap whose alpha channel will be sampled to define the opacity mask.

    +

    The brush with which to fill the mask.

    +

    The destination rectangle in which to fill the mask. If not specified, this is the origin.

    +

    The source rectangle within the opacity mask. If not specified, this is the entire mask.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    The opacity mask bitmap must be considered to be clamped on each axis.

    +
    + + hh404414 + HRESULT ID2D1CommandSink::FillOpacityMask([In] ID2D1Bitmap* opacityMask,[In] ID2D1Brush* brush,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + ID2D1CommandSink::FillOpacityMask +
    + + +

    Indicates to the command sink a geometry to be filled.

    +
    +

    The geometry that should be filled.

    +

    The primary brush used to fill the geometry.

    +

    A brush whose alpha channel is used to modify the opacity of the primary fill brush.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    If the opacity brush is specified, the primary brush will be a bitmap brush fixed on both the x-axis and the y-axis.

    Ellipses and rounded rectangles are converted to the corresponding geometry before being passed to FillGeometry.

    +
    + + hh404411 + HRESULT ID2D1CommandSink::FillGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In, Optional] ID2D1Brush* opacityBrush) + ID2D1CommandSink::FillGeometry +
    + + +

    Indicates to the command sink a rectangle to be filled.

    +
    +

    The rectangle to fill.

    +

    The brush with which to fill the rectangle.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404415 + HRESULT ID2D1CommandSink::FillRectangle([In] const D2D_RECT_F* rect,[In] ID2D1Brush* brush) + ID2D1CommandSink::FillRectangle +
    + + +

    Pushes a clipping rectangle onto the clip and layer stack.

    +
    +

    The rectangle that defines the clip.

    +

    The antialias mode for the clip.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    If the current world transform is not preserving the axis, clipRectangle is transformed and the bounds of the transformed rectangle are used instead.

    +
    + + hh404418 + HRESULT ID2D1CommandSink::PushAxisAlignedClip([In] const D2D_RECT_F* clipRect,[In] D2D1_ANTIALIAS_MODE antialiasMode) + ID2D1CommandSink::PushAxisAlignedClip +
    + + +

    Pushes a layer onto the clip and layer stack.

    +
    +

    The parameters that define the layer.

    +

    The layer resource that receives subsequent drawing operations.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404419 + HRESULT ID2D1CommandSink::PushLayer([In] const D2D1_LAYER_PARAMETERS1* layerParameters1,[In, Optional] ID2D1Layer* layer) + ID2D1CommandSink::PushLayer +
    + + +

    Removes an axis-aligned clip from the layer and clip stack.

    +
    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404416 + HRESULT ID2D1CommandSink::PopAxisAlignedClip() + ID2D1CommandSink::PopAxisAlignedClip +
    + + +

    Removes a layer from the layer and clip stack.

    +
    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh404417 + HRESULT ID2D1CommandSink::PopLayer() + ID2D1CommandSink::PopLayer +
    + + + Internal CommandSink Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT ID2D1CommandSink::BeginDraw() + + + HRESULT ID2D1CommandSink::EndDraw() + + + HRESULT ID2D1CommandSink::SetAntialiasMode([In] D2D1_ANTIALIAS_MODE antialiasMode) + + + HRESULT ID2D1CommandSink::SetTags([In] unsigned longlong tag1,[In] unsigned longlong tag2) + + + HRESULT ID2D1CommandSink::SetTextAntialiasMode([In] D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) + + + HRESULT ID2D1CommandSink::SetTextRenderingParams([In, Optional] IDWriteRenderingParams* textRenderingParams) + + + HRESULT ID2D1CommandSink::SetTransform([In] const D2D_MATRIX_3X2_F* transform) + + + + Sets the blending for primitives. + + HRESULT ID2D1CommandSink::SetPrimitiveBlend([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + + + + Sets the unit mode + + HRESULT ID2D1CommandSink::SetUnitMode([In] D2D1_UNIT_MODE unitMode) + + + HRESULT ID2D1CommandSink::Clear([In, Optional] const D2D_COLOR_F* color) + + + HRESULT ID2D1CommandSink::DrawGlyphRun([In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[In] ID2D1Brush* foregroundBrush,[In] DWRITE_MEASURING_MODE measuringMode) + + + HRESULT ID2D1CommandSink::DrawLine([In] D2D_POINT_2F point0,[In] D2D_POINT_2F point1,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + HRESULT ID2D1CommandSink::DrawGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + HRESULT ID2D1CommandSink::DrawRectangle([In] const D2D_RECT_F* rect,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + HRESULT ID2D1CommandSink::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_F* destinationRectangle,[In] float opacity,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D_RECT_F* sourceRectangle,[In, Optional] const D2D_MATRIX_4X4_F* perspectiveTransform) + + + HRESULT ID2D1CommandSink::DrawImage([In] ID2D1Image* image,[In, Optional] const D2D_POINT_2F* targetOffset,[In, Optional] const D2D_RECT_F* imageRectangle,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In] D2D1_COMPOSITE_MODE compositeMode) + + + HRESULT ID2D1CommandSink::DrawGdiMetafile([In] ID2D1GdiMetafile* gdiMetafile,[In, Optional] const D2D_POINT_2F* targetOffset) + + + + [This documentation is preliminary and is subject to change.] + + The mesh object to be filled. + The brush with which to fill the mesh. + HRESULT ID2D1CommandSink::FillMesh([In] ID2D1Mesh* mesh,[In] ID2D1Brush* brush) + + + HRESULT ID2D1CommandSink::FillOpacityMask([In] ID2D1Bitmap* opacityMask,[In] ID2D1Brush* brush,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + + + HRESULT ID2D1CommandSink::FillGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In, Optional] ID2D1Brush* opacityBrush) + + + HRESULT ID2D1CommandSink::FillRectangle([In] const D2D_RECT_F* rect,[In] ID2D1Brush* brush) + + + + [This documentation is preliminary and is subject to change.] + + The rectangle that defines the clip. + Whether the given clip should be antialiased. + + If the current world transform is not preserving the axis, clipRectangle is transformed and the bounds of the transformed rectangle are used instead. + + HRESULT ID2D1CommandSink::PushAxisAlignedClip([In] const D2D_RECT_F* clipRect,[In] D2D1_ANTIALIAS_MODE antialiasMode) + + + + No documentation. + + No documentation. + No documentation. + HRESULT ID2D1CommandSink::PushLayer([In] const D2D1_LAYER_PARAMETERS1* layerParameters1,[In, Optional] ID2D1Layer* layer) + + + + [This documentation is preliminary and is subject to change.] + + HRESULT ID2D1CommandSink::PopAxisAlignedClip() + + + + No documentation. + + HRESULT ID2D1CommandSink::PopLayer() + + + +

    Enables specification of information for a compute-shader rendering pass.

    +
    + +

    The transform changes the state on this render information to specify the compute shader and its dependent resources.

    +
    + + hh847966 + ID2D1ComputeInfo + ID2D1ComputeInfo +
    + + + Sets the constant buffer data from a . + + The DataStream that contains the constant buffer data + + + + Sets the constant buffer data from a struct value. + + Type of the constant buffer + Value of the constant buffer + HRESULT ID2D1ComputeInfo::SetComputeShaderConstantBuffer([In, Buffer] const void* buffer,[In] unsigned int bufferCount) + + + + Sets the constant buffer data from a struct value. + + Type of the constant buffer + Value of the constant buffer + HRESULT ID2D1ComputeInfo::SetComputeShaderConstantBuffer([In, Buffer] const void* buffer,[In] unsigned int bufferCount) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + +

    Establishes or changes the constant buffer data for this transform.

    +
    +

    The data applied to the constant buffer.

    +

    The number of bytes of data in the constant buffer.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh847968 + HRESULT ID2D1ComputeInfo::SetComputeShaderConstantBuffer([In, Buffer] const void* buffer,[In] unsigned int bufferCount) + ID2D1ComputeInfo::SetComputeShaderConstantBuffer +
    + + +

    Sets the compute shader to the given shader resource. The resource must be loaded before this call is made.

    +
    +

    The of the shader.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + + hh847967 + HRESULT ID2D1ComputeInfo::SetComputeShader([In] const GUID& shaderId) + ID2D1ComputeInfo::SetComputeShader +
    + + +

    Sets the resource texture corresponding to the given shader texture index to the given texture resource. The texture resource must already have been loaded with method. This call will fail if the specified index overlaps with any input. The input indices always precede the texture LUT indices. +

    +
    + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + + hh847969 + HRESULT ID2D1ComputeInfo::SetResourceTexture([In] unsigned int textureIndex,[In] ID2D1ResourceTexture* resourceTexture) + ID2D1ComputeInfo::SetResourceTexture +
    + + +

    This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.

    +
    + +

    If this call fails, the corresponding instance is placed into an error state and fails to draw.

    +
    + + hh404437 + ID2D1ComputeTransform + ID2D1ComputeTransform +
    + + + No documentation. + + No documentation. + HRESULT ID2D1ComputeTransform::SetComputeInfo([In] ID2D1ComputeInfo* computeInfo) + + + + [This documentation is preliminary and is subject to change.] + + The output rectangle that will be filled by the compute transform. + An containing the number of threads of x,y,z dimensions. + + If this call fails, the corresponding instance is placed into an error state and fails to draw. + + HRESULT ID2D1ComputeTransform::CalculateThreadgroups([In] const RECT* outputRect,[Out] unsigned int* dimensionX,[Out] unsigned int* dimensionY,[Out] unsigned int* dimensionZ) + + + +

    This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.

    +
    + +

    If this call fails, the corresponding instance is placed into an error state and fails to draw.

    +
    + + hh404437 + ID2D1ComputeTransform + ID2D1ComputeTransform +
    + + + + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the render information used to specify the compute shader pass.

    +
    +

    The render information object to set.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    If this method fails, fails.

    +
    + + hh404450 + HRESULT ID2D1ComputeTransform::SetComputeInfo([In] ID2D1ComputeInfo* computeInfo) + ID2D1ComputeTransform::SetComputeInfo +
    + + +

    This method allows a compute-shader?based transform to select the number of thread groups to execute based on the number of output pixels it needs to fill.

    +
    +

    The output rectangle that will be filled by the compute transform.

    +

    The number of threads in the x dimension.

    +

    The number of threads in the y dimension.

    +

    The number of threads in the z dimension.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    If this call fails, the corresponding instance is placed into an error state and fails to draw.

    +
    + + hh404437 + HRESULT ID2D1ComputeTransform::CalculateThreadgroups([In] const RECT* outputRect,[Out] unsigned int* dimensionX,[Out] unsigned int* dimensionY,[Out] unsigned int* dimensionZ) + ID2D1ComputeTransform::CalculateThreadgroups +
    + + + Internal ComputeTransform Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT ID2D1ComputeTransform::SetComputeInfo([In] ID2D1ComputeInfo* computeInfo) + + + HRESULT ID2D1ComputeTransform::CalculateThreadgroups([In] const RECT* outputRect,[Out] unsigned int* dimensionX,[Out] unsigned int* dimensionY,[Out] unsigned int* dimensionZ) + + + + Custom Effect interface. Equivalent of C++ ID2D1EffectImpl. + + ID2D1EffectImpl + +

    Allows a custom effect's interface and behavior to be specified by the effect author.

    +
    + +

    This interface is created by the effect author from a static factory registered through the ID2D1Factory::RegisterEffect method.

    +
    + + hh404568 + ID2D1EffectImpl + ID2D1EffectImpl +
    + + + Creates any resources used repeatedly during subsequent rendering calls. + + An internal factory interface that creates and returns effect author centric types. + No documentation. + + This moves resource creation cost to the CreateEffect call, rather than during rendering.If the implementation fails this call, the corresponding call also fails.The following example shows an effect implementing an initialize method. + + HRESULT ID2D1EffectImpl::Initialize([In] ID2D1EffectContext* effectContext,[In] ID2D1TransformGraph* transformGraph) + + + + Prepares an effect for the rendering process. + + Indicates the type of change the effect should expect. + + This method is called by the renderer when the effect is within an effect graph that is drawn.The method will be called:If the effect has been initialized but has not previously been drawn. If an effect property has been set since the last draw call. If the context state has changed since the effect was last drawn.The method will not otherwise be called. The transforms created by the effect will be called to handle their input and output rectangles for every draw call.Most effects defer creating any resources or specifying a topology until this call is made. They store their properties and map them to a concrete set of rendering techniques when first drawn. + + HRESULT ID2D1EffectImpl::PrepareForRender([In] D2D1_CHANGE_TYPE changeType) + + + + The renderer calls this method to provide the effect implementation with a way to specify its transform graph and transform graph changes. + The renderer calls this method when: 1) When the effect is first initialized. 2) If the number of inputs to the effect changes. + + The graph to which the effect describes its transform topology through the SetDescription call.. + HRESULT ID2D1EffectImpl::SetGraph([In] ID2D1TransformGraph* transformGraph) + + + + Global attribute for description. + + + + + Initializes a new instance of class. + + Description of the custom effect + Category of the custom effect + Author of the custom effect + + + + Gets the DisplayName name. + + + + + Gets the Description name. + + + + + Gets the Category name. + + + + + Gets the Author name. + + + + + Base abstract class for interface. + + + + + + + + + + + + + + Delegate used by to create a custom effect. + + A new instance of custom effect + + + + Internal class used to keep reference to factory. + + + + + Converts custom effect to an xml description + + + + + + Initializes the property bindings + + + + + Initializes the xml descriptor for this effect. + + + + HRESULT ID2D1EffectImpl::Initialize([In] ID2D1EffectContext* effectContext,[In] ID2D1TransformGraph* transformGraph) + + + + Input attribute for description. + + + + + Initializes a new instance of attribute. + + + + + + Gets the Input name. + + + + +

    Allows a custom effect's interface and behavior to be specified by the effect author.

    +
    + +

    This interface is created by the effect author from a static factory registered through the ID2D1Factory::RegisterEffect method.

    +
    + + hh404568 + ID2D1EffectImpl + ID2D1EffectImpl +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    The effect can use this method to do one time initialization tasks. If this method is not needed, the method can just return .

    +
    +

    An internal context interface that creates and returns effect author?centric types.

    +

    The effect can populate the transform graph with a topology and can update it later.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    This moves resource creation cost to the CreateEffect call, rather than during rendering.

    If the implementation fails this call, the corresponding call also fails.

    The following example shows an effect implementing an initialize method.

    +
    + + hh404570 + HRESULT ID2D1EffectImpl::Initialize([In] ID2D1EffectContext* effectContext,[In] ID2D1TransformGraph* transformGraph) + ID2D1EffectImpl::Initialize +
    + + +

    Prepares an effect for the rendering process.

    +
    +

    Indicates the type of change the effect should expect.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    This method is called by the renderer when the effect is within an effect graph that is drawn.

    The method will be called:

    • If the effect has been initialized but has not previously been drawn.
    • If an effect property has been set since the last draw call.
    • If the context state has changed since the effect was last drawn.

    The method will not otherwise be called. The transforms created by the effect will be called to handle their input and output rectangles for every draw call.

    Most effects defer creating any resources or specifying a topology until this call is made. They store their properties and map them to a concrete set of rendering techniques when first drawn.

    +
    + + hh404572 + HRESULT ID2D1EffectImpl::PrepareForRender([In] D2D1_CHANGE_TYPE changeType) + ID2D1EffectImpl::PrepareForRender +
    + + +

    The renderer calls this method to provide the effect implementation with a way to specify its transform graph and transform graph changes.

    The renderer calls this method when:

    • When the effect is first initialized.
    • If the number of inputs to the effect changes.
    +
    +

    The graph to which the effect describes its transform topology through the SetDescription call.

    +

    An error that prevents the effect from being initialized if called as part of the CreateEffect call. If the effect fails a subsequent SetGraph call:

    • The error will be returned from the property method that caused the number of inputs to the effect to change.
    • The effect object will be placed into an error state, if subsequently used to render, the context will be placed into a temporary error state, that particular effect will fail to render and the failure will be returned on the next EndDraw or Flush call.
    + + hh871459 + HRESULT ID2D1EffectImpl::SetGraph([In] ID2D1TransformGraph* transformGraph) + ID2D1EffectImpl::SetGraph +
    + + + Internal CustomEffect Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT ID2D1EffectImpl::Initialize([In] ID2D1EffectContext* effectContext,[In] ID2D1TransformGraph* transformGraph) + + + HRESULT ID2D1EffectImpl::PrepareForRender([In] D2D1_CHANGE_TYPE changeType) + + + + The renderer calls this method to provide the effect implementation with a way to specify its transform graph and transform graph changes. + The renderer calls this method when: 1) When the effect is first initialized. 2) If the number of inputs to the effect changes. + + The graph to which the effect describes its transform topology through the SetDescription call.. + HRESULT ID2D1EffectImpl::SetGraph([In] ID2D1TransformGraph* transformGraph) + + + +

    Defines a vertex shader and the input element description to define the input layout. The combination is used to allow a custom vertex effect to create a custom vertex shader and pass it a custom layout.

    +
    + +

    The vertex shader will be loaded by the CreateVertexBuffer call that accepts the vertex buffer properties.

    This structure does not need to be specified if one of the standard vertex shaders is used.

    +
    + + hh404301 + D2D1_CUSTOM_VERTEX_BUFFER_PROPERTIES + D2D1_CUSTOM_VERTEX_BUFFER_PROPERTIES +
    + + + Initializes a new instance of class. + + + + + Initializes a new instance of class. + + + + + + + + The vertex shader bytecode to use as a signature. + + const unsigned char* shaderBufferWithInputSignature + + + + The input elements in the vertex shader. + + const D2D1_INPUT_ELEMENT_DESC* inputElements + + + +

    The unique ID of the vertex shader.

    +
    + + hh404301 + const unsigned char* shaderBufferWithInputSignature + unsigned char shaderBufferWithInputSignature +
    + + +

    An array of input assembler stage data types.

    +
    + + hh404301 + unsigned int shaderBufferSize + unsigned int shaderBufferSize +
    + + +

    An array of input assembler stage data types.

    +
    + + hh404301 + const D2D1_INPUT_ELEMENT_DESC* inputElements + D2D1_INPUT_ELEMENT_DESC inputElements +
    + + +

    The number of input elements in the vertex shader.

    +
    + + hh404301 + unsigned int elementCount + unsigned int elementCount +
    + + +

    The vertex stride.

    +
    + + hh404301 + unsigned int stride + unsigned int stride +
    + + + Functions + + + + + + The default tolerance for geometric flattening operations. + http://msdn.microsoft.com/en-us/library/windows/desktop/dd370975%28v=vs.85%29.aspx + + + + + The default DPI value. + + + + + Computes the appropriate flattening tolerance to pass to APIs that take a flattening tolerance (for instance, ). + + The matrix that will be applied subsequently to the geometry being flattened. + The horizontal DPI of the render target that the geometry will be rendered onto (a choice of 96 implies no DPI correction). + The vertical DPI of the render target that the geometry will be rendered onto (a choice of 96 implies no DPI correction). + The maximum amount of additional scaling (on top of any scaling implied by the matrix or the DPI) that will be applied to the geometry. + The flattening tolerance. + + + +

    Creates a factory object that can be used to create Direct2D resources.

    +
    +

    The threading model of the factory and the resources it creates.

    +

    A reference to the IID of that is obtained by using __uuidof().

    +

    The level of detail provided to the debugging layer.

    +

    When this method returns, contains the address to a reference to the new factory.

    +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + +

    The interface provides the starting point for Direct2D. In general, objects created from a single instance of a factory object can be used with other resources created from that instance, but not with resources created by other factory instances.

    +
    + + dd368034 + HRESULT D2D1CreateFactory([In] D2D1_FACTORY_TYPE factoryType,[In] const GUID& riid,[In, Optional] const D2D1_FACTORY_OPTIONS* pFactoryOptions,[Out] void** ppIFactory) + D2D1CreateFactory +
    + + +

    Creates a rotation transformation that rotates by the specified angle about the specified point.

    +
    +

    The clockwise rotation angle, in degrees.

    +

    The point about which to rotate.

    +

    When this method returns, contains the new rotation transformation. You must allocate storage for this parameter.

    + +

    Rotation occurs in the plane of the 2-D surface.

    +
    + + dd368049 + void D2D1MakeRotateMatrix([In] float angle,[In] D2D_POINT_2F center,[Out] D2D_MATRIX_3X2_F* matrix) + D2D1MakeRotateMatrix +
    + + +

    Creates a skew transformation that has the specified x-axis angle, y-axis angle, and center point.

    +
    +

    The x-axis skew angle, which is measured in degrees counterclockwise from the y-axis.

    +

    The y-axis skew angle, which is measured in degrees counterclockwise from the x-axis.

    +

    The center point of the skew operation.

    +

    When this method returns, contains the rotation transformation. You must allocate storate for this parameter.

    + + dd368052 + void D2D1MakeSkewMatrix([In] float angleX,[In] float angleY,[In] D2D_POINT_2F center,[Out] D2D_MATRIX_3X2_F* matrix) + D2D1MakeSkewMatrix +
    + + +

    Indicates whether the specified matrix is invertible.

    +
    +

    The matrix to test.

    +

    true if the matrix was inverted; otherwise, false.

    + + dd368045 + BOOL D2D1IsMatrixInvertible([In] const D2D_MATRIX_3X2_F* matrix) + D2D1IsMatrixInvertible +
    + + +

    Tries to invert the specified matrix.

    +
    +

    The matrix to invert.

    +

    true if the matrix was inverted; otherwise, false.

    + + dd368044 + BOOL D2D1InvertMatrix([InOut] D2D_MATRIX_3X2_F* matrix) + D2D1InvertMatrix +
    + + +

    Creates a new Direct2D device associated with the provided DXGI device.

    +
    +

    The DXGI device the Direct2D device is associated with.

    +

    The properties to apply to the Direct2D device.

    +

    When this function returns, contains the address of a reference to a Direct2D device.

    +

    The function returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    This function will also create a new that can be retrieved through .

    If the creation properties are not specified, then d2dDevice will inherit its threading mode from dxgiDevice and debug tracing will not be enabled.

    +
    + + hh404272 + HRESULT D2D1CreateDevice([In] IDXGIDevice* dxgiDevice,[In, Optional] const D2D1_CREATION_PROPERTIES* creationProperties,[Out, Fast] ID2D1Device** d2dDevice) + D2D1CreateDevice +
    + + +

    Creates a new Direct2D device context associated with a DXGI surface.

    +
    +

    The DXGI surface the Direct2D device context is associated with.

    +

    The properties to apply to the Direct2D device context.

    +

    When this function returns, contains the address of a reference to a Direct2D device context.

    +

    The function returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    This function will also create a new that can be retrieved through .

    This function will also create a new that can be retrieved through .

    The DXGI device will be specified implicitly through dxgiSurface.

    If creationProperties are not specified, the Direct2D device will inherit its threading mode from the DXGI device implied by dxgiSurface and debug tracing will not be enabled.

    +
    + + hh404273 + HRESULT D2D1CreateDeviceContext([In] IDXGISurface* dxgiSurface,[In, Optional] const D2D1_CREATION_PROPERTIES* creationProperties,[Out, Fast] ID2D1DeviceContext** d2dDeviceContext) + D2D1CreateDeviceContext +
    + + +

    Converts the given color from one colorspace to another.

    +
    +

    The source color space.

    +

    The destination color space.

    +

    The source color.

    +

    The converted color.

    + + hh847939 + D2D_COLOR_F D2D1ConvertColorSpace([In] D2D1_COLOR_SPACE sourceColorSpace,[In] D2D1_COLOR_SPACE destinationColorSpace,[In] const D2D_COLOR_F* color) + D2D1ConvertColorSpace +
    + + +

    Returns the sine and cosine of an angle.

    +
    +

    The angle to calculate.

    +

    The sine of the angle.

    +

    The cosine of the angle.

    + + hh847940 + void D2D1SinCos([In] float angle,[Out] float* s,[Out] float* c) + D2D1SinCos +
    + + +

    Returns the tangent of an angle.

    +
    +

    The angle to calculate the tangent for.

    +

    The tangent of the angle.

    + + hh847941 + float D2D1Tan([In] float angle) + D2D1Tan +
    + + +

    Returns the length of a 3 dimensional vector.

    +
    +

    The x value of the vector.

    +

    The y value of the vector.

    +

    The z value of the vector.

    +

    The length of the vector.

    + + hh847942 + float D2D1Vec3Length([In] float x,[In] float y,[In] float z) + D2D1Vec3Length +
    + + +

    Computes the maximum factor by which a given transform can stretch any vector.

    +
    +

    The input transform matrix.

    +

    The scale factor.

    + +

    Formally, if M is the input matrix, this method will return the maximum value of |V * M| / |V| for all vectors V, where |.| denotes length.

    Note??Since this describes how M affects vectors (rather than points), the translation components (_31 and _32) of M are ignored.? +
    + + dn280381 + float D2D1ComputeMaximumScaleFactor([In] const D2D_MATRIX_3X2_F* matrix) + D2D1ComputeMaximumScaleFactor +
    + + +

    Returns the interior points for a gradient mesh patch based on the points defining a Coons patch.

    Note??

    This function is called by the GradientMeshPatchFromCoonsPatch function and is not intended to be used directly.

    ? +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    This function is called by the GradientMeshPatchFromCoonsPatch function and is not intended to be used directly.

    +
    + + mt149083 + void D2D1GetGradientMeshInteriorPointsFromCoonsPatch([In] const D2D_POINT_2F* pPoint0,[In] const D2D_POINT_2F* pPoint1,[In] const D2D_POINT_2F* pPoint2,[In] const D2D_POINT_2F* pPoint3,[In] const D2D_POINT_2F* pPoint4,[In] const D2D_POINT_2F* pPoint5,[In] const D2D_POINT_2F* pPoint6,[In] const D2D_POINT_2F* pPoint7,[In] const D2D_POINT_2F* pPoint8,[In] const D2D_POINT_2F* pPoint9,[In] const D2D_POINT_2F* pPoint10,[In] const D2D_POINT_2F* pPoint11,[Out] D2D_POINT_2F* pTensorPoint11,[Out] D2D_POINT_2F* pTensorPoint12,[Out] D2D_POINT_2F* pTensorPoint21,[Out] D2D_POINT_2F* pTensorPoint22) + D2D1GetGradientMeshInteriorPointsFromCoonsPatch +
    + + +

    Represents a resource domain whose objects and device contexts can be used together.

    +
    + + hh404478 + ID2D1Device + ID2D1Device +
    + + + Initializes a new instance of the class. + + The device. + HRESULT D2D1CreateDevice([In] IDXGIDevice* dxgiDevice,[In, Optional] const D2D1_CREATION_PROPERTIES* creationProperties,[Out] ID2D1Device** d2dDevice) + + + + Initializes a new instance of the class. + + The device. + The creation properties. + HRESULT D2D1CreateDevice([In] IDXGIDevice* dxgiDevice,[In, Optional] const D2D1_CREATION_PROPERTIES* creationProperties,[Out] ID2D1Device** d2dDevice) + + + + Initializes a new instance of the class. + + The object used when creating the . + The object used when creating the . + + Each call to CreateDevice returns a unique object.The object is obtained by calling QueryInterface on an ID3D10Device or an ID3D11Device. + + HRESULT ID2D1Factory1::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out] ID2D1Device** d2dDevice) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.

    +
    + + hh847984 + GetMaximumTextureMemory / SetMaximumTextureMemory + GetMaximumTextureMemory + unsigned longlong ID2D1Device::GetMaximumTextureMemory() +
    + + +

    Creates a new device context from a Direct2D device.

    +
    +

    The options to be applied to the created device context.

    +

    When this method returns, contains the address of a reference to the new device context.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context.

    +
    + + hh404545 + HRESULT ID2D1Device::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out, Fast] ID2D1DeviceContext** deviceContext) + ID2D1Device::CreateDeviceContext +
    + + +

    Creates an object that converts Direct2D primitives stored in into a fixed page representation. The print sub-system then consumes the primitives.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_FAILGeneric failure code.
    The print format is not supported by the document target.

    ?

    + + Note??This is a blocking or synchronous function and might not return immediately. How quickly this function returns depends on run-time factors such as network status, print server configuration, and printer driver implementation?factors that are difficult to predict when writing an application. Calling this function from a thread that manages interaction with the user interface could make the application appear to be unresponsive.? + + + hh404550 + HRESULT ID2D1Device::CreatePrintControl([In] IWICImagingFactory* wicFactory,[In] IPrintDocumentPackageTarget* documentTarget,[In, Optional] const D2D1_PRINT_CONTROL_PROPERTIES* printControlProperties,[Out, Fast] ID2D1PrintControl** printControl) + ID2D1Device::CreatePrintControl +
    + + +

    Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.

    +
    +

    The new maximum texture memory in bytes.

    + + Note??Direct2D may exceed the maximum texture memory you set with this method for a single frame if necessary to render the frame.? + + + hh847985 + void ID2D1Device::SetMaximumTextureMemory([In] unsigned longlong maximumInBytes) + ID2D1Device::SetMaximumTextureMemory +
    + + +

    Sets the maximum amount of texture memory Direct2D accumulates before it purges the image caches and cached texture allocations.

    +
    +

    The maximum amount of texture memory in bytes.

    + + hh847984 + unsigned longlong ID2D1Device::GetMaximumTextureMemory() + ID2D1Device::GetMaximumTextureMemory +
    + + +

    Clears all of the rendering resources used by Direct2D.

    +
    +

    Discards only resources that haven't been used for greater than the specified time in milliseconds. The default is 0 milliseconds.

    + + hh404542 + void ID2D1Device::ClearResources([In] unsigned int millisecondsSinceUse) + ID2D1Device::ClearResources +
    + + +

    Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing interface. It also enables control of the device's rendering priority.

    +
    + + dn280458 + ID2D1Device1 + ID2D1Device1 +
    + + + Initializes a new instance of the class. + + The object used when creating the . + The object used when creating the . + + Each call to CreateDevice returns a unique object.The object is obtained by calling QueryInterface on an ID3D10Device or an ID3D11Device. + + HRESULT ID2D1Factory2::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out] ID2D1Device1** d2dDevice1) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves or sets the current rendering priority of the device.

    +
    + + dn280459 + GetRenderingPriority / SetRenderingPriority + GetRenderingPriority + D2D1_RENDERING_PRIORITY ID2D1Device1::GetRenderingPriority() +
    + + +

    Retrieves the current rendering priority of the device.

    +
    +

    The current rendering priority of the device.

    + + dn280459 + D2D1_RENDERING_PRIORITY ID2D1Device1::GetRenderingPriority() + ID2D1Device1::GetRenderingPriority +
    + + +

    Sets the priority of Direct2D rendering operations performed on any device context associated with the device.

    +
    +

    The desired rendering priority for the device and associated contexts.

    + +

    Calling this method affects the rendering priority of all device contexts associated with the device. This method can be called at any time, but is not guaranteed to take effect until the beginning of the next frame. The recommended usage is to call this method outside of BeginDraw and EndDraw blocks. Cycling this property frequently within drawing blocks will effectively reduce the benefits of any throttling that is applied.

    +
    + + dn280460 + void ID2D1Device1::SetRenderingPriority([In] D2D1_RENDERING_PRIORITY renderingPriority) + ID2D1Device1::SetRenderingPriority +
    + + +

    Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing interface. It also enables control of the device's rendering priority.

    +
    + No documentation. + No documentation. + No documentation. + + dn280458 + HRESULT ID2D1Device1::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out, Fast] ID2D1DeviceContext1** deviceContext1) + ID2D1Device1::CreateDeviceContext +
    + + +

    Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the existing interface. It also enables the creation of objects.

    +
    + + dn890786 + ID2D1Device2 + ID2D1Device2 +
    + + + Initializes a new instance of the class. + + The object used when creating the . + The object used when creating the . + + Each call to CreateDevice returns a unique object.The object is obtained by calling QueryInterface on an ID3D10Device or an ID3D11Device. + + HRESULT ID2D1Factory3::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out] ID2D1Device2** d2dDevice2) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the DXGI device associated with this Direct2D device.

    +
    + + dn917489 + GetDxgiDevice + GetDxgiDevice + HRESULT ID2D1Device2::GetDxgiDevice([Out] IDXGIDevice** dxgiDevice) +
    + + +

    Creates a new from a Direct2D device.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890787 + HRESULT ID2D1Device2::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out, Fast] ID2D1DeviceContext2** deviceContext2) + ID2D1Device2::CreateDeviceContext +
    + + +

    Flush all device contexts that reference a given bitmap.

    +
    +

    The bitmap, created on this device, for which all referencing device contexts will be flushed.

    + + dn890788 + void ID2D1Device2::FlushDeviceContexts([In] ID2D1Bitmap* bitmap) + ID2D1Device2::FlushDeviceContexts +
    + + +

    Returns the DXGI device associated with this Direct2D device.

    +
    +

    The DXGI device associated with this Direct2D device.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn917489 + HRESULT ID2D1Device2::GetDxgiDevice([Out] IDXGIDevice** dxgiDevice) + ID2D1Device2::GetDxgiDevice +
    + + +

    Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the interface. It also enables the creation of objects.

    +
    + + mt619824 + ID2D1Device3 + ID2D1Device3 +
    + + + Initializes a new instance of the class. + + The object used when creating the . + The object used when creating the . + + Each call to CreateDevice returns a unique object.The object is obtained by calling QueryInterface on an ID3D10Device or an ID3D11Device. + + HRESULT ID2D1Factory3::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out] ID2D1Device2** d2dDevice2) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a new from this Direct2D device.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt619825 + HRESULT ID2D1Device3::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out, Fast] ID2D1DeviceContext3** deviceContext3) + ID2D1Device3::CreateDeviceContext +
    + + +

    Represents a resource domain whose objects and device contexts can be used together. This interface performs all the same functions as the interface. It also enables the creation of objects.

    +
    + + mt736464 + ID2D1Device4 + ID2D1Device4 +
    + + + Initializes a new instance of the class. + + The object used when creating the . + The object used when creating the . + + Each call to CreateDevice returns a unique object.The object is obtained by calling QueryInterface on an ID3D10Device or an ID3D11Device. + + HRESULT ID2D1Factory5::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out] ID2D1Device5** d2dDevice4) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the maximum capacity of the color glyph cache.

    +
    + + mt736466 + GetMaximumColorGlyphCacheMemory / SetMaximumColorGlyphCacheMemory + GetMaximumColorGlyphCacheMemory + unsigned longlong ID2D1Device4::GetMaximumColorGlyphCacheMemory() +
    + + +

    Creates a new device context from a Direct2D device.

    +
    +

    The options to be applied to the created device context.

    +

    When this method returns, contains the address of a reference to the new device context.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context.

    +
    + + hh404545 + HRESULT ID2D1Device4::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out, Fast] ID2D1DeviceContext4** deviceContext4) + ID2D1Device4::CreateDeviceContext +
    + + +

    Sets the maximum capacity of the color glyph cache.

    +
    +

    The maximum capacity of the color glyph cache.

    + +

    The color glyph cache is used to store color bitmap glyphs and SVG glyphs, enabling faster performance if the same glyphs are needed again. The capacity determines the amount of memory that D2D may use to store glyphs that the application does not already reference. If the application references a glyph using GetColorBitmapGlyphImage or GetSvgGlyphImage, after it has been evicted, this glyph does not count toward the cache capacity.

    +
    + + mt736467 + void ID2D1Device4::SetMaximumColorGlyphCacheMemory([In] unsigned longlong maximumInBytes) + ID2D1Device4::SetMaximumColorGlyphCacheMemory +
    + + +

    Gets the maximum capacity of the color glyph cache.

    +
    +

    Returns the maximum capacity of the color glyph cache in bytes.

    + + mt736466 + unsigned longlong ID2D1Device4::GetMaximumColorGlyphCacheMemory() + ID2D1Device4::GetMaximumColorGlyphCacheMemory +
    + + +

    Represents a resource domain whose objects and device contexts can be used together.

    +
    + + hh404478 + ID2D1Device5 + ID2D1Device5 +
    + + + Initializes a new instance of the class. + + The object used when creating the . + The object used when creating the . + + Each call to CreateDevice returns a unique object.The object is obtained by calling QueryInterface on an ID3D10Device or an ID3D11Device. + + HRESULT ID2D1Factory3::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out] ID2D1Device2** d2dDevice2) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1Device5::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out, Fast] ID2D1DeviceContext5** deviceContext5) + ID2D1Device5::CreateDeviceContext + + + +

    Represents a set of state and command buffers that are used to render to a target.

    The device context can render to a target bitmap or a command list. +

    +
    + +

    Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device.

    +
    + + hh404479 + ID2D1DeviceContext + ID2D1DeviceContext +
    + + + Initializes a new instance of the class. + + The surface. + HRESULT D2D1CreateDeviceContext([In] IDXGISurface* dxgiSurface,[In, Optional] const D2D1_CREATION_PROPERTIES* creationProperties,[Out] ID2D1DeviceContext** d2dDeviceContext) + + + + Initializes a new instance of the class. + + The surface. + The creation properties. + HRESULT D2D1CreateDeviceContext([In] IDXGISurface* dxgiSurface,[In, Optional] const D2D1_CREATION_PROPERTIES* creationProperties,[Out] ID2D1DeviceContext** d2dDeviceContext) + + + + Initializes a new instance of the class using an existing . + + The device. + The options to be applied to the created device context. + + The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context. + + HRESULT ID2D1Device::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out] ID2D1DeviceContext** deviceContext) + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + void ID2D1DeviceContext::DrawImage([In] ID2D1Image* image,[In, Optional] const D2D_POINT_2F* targetOffset,[In, Optional] const D2D_RECT_F* imageRectangle,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In] D2D1_COMPOSITE_MODE compositeMode) + + + + No documentation. + + No documentation. + No documentation. + No documentation. + void ID2D1DeviceContext::DrawImage([In] ID2D1Image* image,[In, Optional] const D2D_POINT_2F* targetOffset,[In, Optional] const D2D_RECT_F* imageRectangle,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In] D2D1_COMPOSITE_MODE compositeMode) + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + void ID2D1DeviceContext::DrawImage([In] ID2D1Image* image,[In, Optional] const D2D_POINT_2F* targetOffset,[In, Optional] const D2D_RECT_F* imageRectangle,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In] D2D1_COMPOSITE_MODE compositeMode) + + + + No documentation. + + No documentation. + No documentation. + No documentation. + void ID2D1DeviceContext::DrawImage([In] ID2D1Image* image,[In, Optional] const D2D_POINT_2F* targetOffset,[In, Optional] const D2D_RECT_F* imageRectangle,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In] D2D1_COMPOSITE_MODE compositeMode) + + + + Draws the bitmap. + + The bitmap. + The opacity. + The interpolation mode. + void ID2D1DeviceContext::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_F* destinationRectangle,[In] float opacity,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D_RECT_F* sourceRectangle,[In, Optional] const D2D_MATRIX_4X4_F* perspectiveTransform) + + + + Draws the bitmap. + + The bitmap. + The opacity. + The interpolation mode. + The perspective transform ref. + void ID2D1DeviceContext::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_F* destinationRectangle,[In] float opacity,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D_RECT_F* sourceRectangle,[In, Optional] const D2D_MATRIX_4X4_F* perspectiveTransform) + + + + Draws the bitmap. + + The bitmap. + The opacity. + The interpolation mode. + The source rectangle. + The perspective transform ref. + void ID2D1DeviceContext::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_F* destinationRectangle,[In] float opacity,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D_RECT_F* sourceRectangle,[In, Optional] const D2D_MATRIX_4X4_F* perspectiveTransform) + + + + No documentation. + + No documentation. + No documentation. + void ID2D1DeviceContext::PushLayer([In] const D2D1_LAYER_PARAMETERS1* layerParameters,[In, Optional] ID2D1Layer* layer) + + + + Gets the effect invalid rectangles. + + The effect. + + HRESULT ID2D1DeviceContext::GetEffectInvalidRectangles([In] ID2D1Effect* effect,[Out, Buffer] D2D_RECT_F* rectangles,[In] unsigned int rectanglesCount) + + + + Gets the effect required input rectangles. + + The render effect. + The input descriptions. + + HRESULT ID2D1DeviceContext::GetEffectRequiredInputRectangles([In] ID2D1Effect* renderEffect,[In, Optional] const D2D_RECT_F* renderImageRectangle,[In, Buffer] const D2D1_EFFECT_INPUT_DESCRIPTION* inputDescriptions,[Out, Buffer] D2D_RECT_F* requiredInputRects,[In] unsigned int inputCount) + + + + Gets the effect required input rectangles. + + The render effect. + The render image rectangle. + The input descriptions. + + HRESULT ID2D1DeviceContext::GetEffectRequiredInputRectangles([In] ID2D1Effect* renderEffect,[In, Optional] const D2D_RECT_F* renderImageRectangle,[In, Buffer] const D2D1_EFFECT_INPUT_DESCRIPTION* inputDescriptions,[Out, Buffer] D2D_RECT_F* requiredInputRects,[In] unsigned int inputCount) + + + + No documentation. + + No documentation. + No documentation. + void ID2D1DeviceContext::FillOpacityMask([In] ID2D1Bitmap* opacityMask,[In] ID2D1Brush* brush,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the device associated with a device context.

    +
    + +

    The application can retrieve the device even if it is created from an earlier render target code-path. The application must use an interface and then call GetDevice. Some functionality for controlling all of the resources for a set of device contexts is maintained only on an object.

    +
    + + hh404513 + GetDevice + GetDevice + void ID2D1DeviceContext::GetDevice([Out] ID2D1Device** device) +
    + + +

    Gets or sets the target currently associated with the device context.

    +
    + +

    If a target is not associated with the device context, target will contain null when the methods returns.

    If the currently selected target is a bitmap rather than a command list, the application can gain access to the initial bitmaps created by using one of the following methods:

    • CreateHwndRenderTarget
    • CreateDxgiSurfaceRenderTarget
    • CreateWicBitmapRenderTarget
    • CreateDCRenderTarget
    • CreateCompatibleRenderTarget

    It is not possible for an application to destroy these bitmaps. All of these bitmaps are bindable as bitmap targets. However not all of these bitmaps can be used as bitmap sources for methods.

    CreateDxgiSurfaceRenderTarget will create a bitmap that is usable as a bitmap source if the DXGI surface is bindable as a shader resource view.

    CreateCompatibleRenderTarget will always create bitmaps that are usable as a bitmap source.

    will copy from the to the original bitmap associated with it. will copy from the original bitmap to the .

    objects will be locked in the following circumstances:

    • BeginDraw has been called and the currently selected target bitmap is a WIC bitmap.
    • A WIC bitmap is set as the target of a device context after BeginDraw has been called and before EndDraw has been called.
    • Any of the ID2D1Bitmap::Copy* methods are called with a WIC bitmap as either the source or destination.

    objects will be unlocked in the following circumstances:

    • EndDraw is called and the currently selected target bitmap is a WIC bitmap.
    • A WIC bitmap is removed as the target of a device context between the calls to BeginDraw and EndDraw.
    • Any of the ID2D1Bitmap::Copy* methods are called with a WIC bitmap as either the source or destination.

    Direct2D will only lock bitmaps that are not currently locked.

    Calling QueryInterface for will always succeed. will return a device context corresponding to the currently bound target bitmap. GetDC will fail if the target bitmap was not created with the GDI_COMPATIBLE flag set.

    will return if there are any outstanding references to the original target bitmap associated with the render target.

    Although the target can be a command list, it cannot be any other type of image. It cannot be the output image of an effect.

    +
    + + hh404523 + GetTarget / SetTarget + GetTarget + void ID2D1DeviceContext::GetTarget([Out, Optional] ID2D1Image** image) +
    + + +

    Gets or sets the rendering controls that have been applied to the context.

    +
    + + hh404519 + GetRenderingControls / SetRenderingControls + GetRenderingControls + void ID2D1DeviceContext::GetRenderingControls([Out] D2D1_RENDERING_CONTROLS* renderingControls) +
    + + +

    Returns or sets the currently set primitive blend used by the device context.

    +
    + + hh404517 + GetPrimitiveBlend / SetPrimitiveBlend + GetPrimitiveBlend + D2D1_PRIMITIVE_BLEND ID2D1DeviceContext::GetPrimitiveBlend() +
    + + +

    Gets or sets the mode that is being used to interpret values by the device context.

    +
    + + hh404525 + GetUnitMode / SetUnitMode + GetUnitMode + D2D1_UNIT_MODE ID2D1DeviceContext::GetUnitMode() +
    + + +

    Creates a bitmap that can be used as a target surface, for reading back to the CPU, or as a source for the DrawBitmap and APIs. In addition, color context information can be passed to the bitmap.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.
    D3DERR_OUTOFVIDEOMEMORYDirect3D does not have enough display memory to perform the operation.

    ?

    + +

    The new bitmap can be used as a target for SetTarget if it is created with .

    +
    + + hh404480 + HRESULT ID2D1DeviceContext::CreateBitmap([In] D2D_SIZE_U size,[In, Optional] const void* sourceData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out, Fast] ID2D1Bitmap1** bitmap) + ID2D1DeviceContext::CreateBitmap +
    + + +

    Creates a Direct2D bitmap by copying a WIC bitmap.

    +
    +

    The WIC bitmap source to copy from.

    +

    A bitmap properties structure that specifies bitmap creation options.

    +

    The address of the newly created bitmap object.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    Starting with Windows?8.1, the bitmapProperties parameter is optional. When it is not specified, the created bitmap inherits the pixel format and alpha mode from wicBitmapSource. For a list of supported pixel formats and alpha modes, see Supported Pixel Formats and Alpha Modes.

    When the bitmapProperties parameter is specified, the value in bitmapProperties->pixelFormat must either be or must match the WIC pixel format in wicBitmapSource.

    When bitmapProperties->pixelFormat.alphaMode is set to , the newly created bitmap inherits the alpha mode from wicBitmapSource. When bitmapProperties->pixelFormat.alphaMode is set to , , or , this forces the newly created bitmap to use the specified alpha mode.

    +
    + + hh847971 + HRESULT ID2D1DeviceContext::CreateBitmapFromWicBitmap([In] IWICBitmapSource* wicBitmapSource,[In, Optional] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out] ID2D1Bitmap1** bitmap) + ID2D1DeviceContext::CreateBitmapFromWicBitmap +
    + + +

    Creates a color context.

    +
    +

    The space of color context to create.

    +

    A buffer containing the ICC profile bytes used to initialize the color context when space is . For other types, the parameter is ignored and should be set to null.

    +

    The size in bytes of Profile.

    +

    When this method returns, contains the address of a reference to a new color context object.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    The new color context can be used in to initialize the color context of a created bitmap.

    When space is , profile and profileSize must be specified. Otherwise, these parameters should be set to null and zero respectively. When the space is , the model field of the profile header is inspected to determine if this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space remains custom.

    +
    + + hh404485 + HRESULT ID2D1DeviceContext::CreateColorContext([In] D2D1_COLOR_SPACE space,[In, Buffer, Optional] const unsigned char* profile,[In] unsigned int profileSize,[Out, Fast] ID2D1ColorContext** colorContext) + ID2D1DeviceContext::CreateColorContext +
    + + +

    Creates a color context by loading it from the specified filename. The profile bytes are the contents of the file specified by Filename.

    +
    +

    The path to the file containing the profile bytes to initialize the color context with.

    +

    When this method returns, contains the address of a reference to a new color context.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    The new color context can be used in to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.

    +
    + + hh404488 + HRESULT ID2D1DeviceContext::CreateColorContextFromFilename([In] const wchar_t* filename,[Out, Fast] ID2D1ColorContext** colorContext) + ID2D1DeviceContext::CreateColorContextFromFilename +
    + + +

    Creates a color context from an . The D2D1ColorContext space of the resulting context varies, see Remarks for more info.

    +
    + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    The new color context can be used in to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.

    +
    + + hh404491 + HRESULT ID2D1DeviceContext::CreateColorContextFromWicColorContext([In] IWICColorContext* wicColorContext,[Out, Fast] ID2D1ColorContext** colorContext) + ID2D1DeviceContext::CreateColorContextFromWicColorContext +
    + + +

    Creates a bitmap from a DXGI surface that can be set as a target surface or have additional color context information specified.

    +
    +

    The DXGI surface from which the bitmap can be created.

    Note??The DXGI surface must have been created from the same Direct3D device that the Direct2D device context is associated with. ?
    +

    The bitmap properties specified in addition to the surface.

    +

    When this method returns, contains the address of a reference to a new bitmap object.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.
    D3DERR_OUTOFVIDEOMEMORYDirect3D does not have enough display memory to perform the operation.

    ?

    + +

    If the bitmap properties are not specified, the following information is assumed:

    • The bitmap DPI is 96.
    • The pixel format matches that of the surface.
    • The returned bitmap will inherit the bind flags of the DXGI surface.
      • However, only the subset of flags meaningful to Direct2D will be inherited. For example, D3D10_USAGE_DYNAMIC is not compatible with any public Direct2D flags.
    • The color context is unknown.
    • The alpha mode of the bitmap will be premultiplied (common case) or straight (A8). +

    If the bitmap properties are specified, the bitmap properties will be used as follows:

    • The bitmap DPI will be specified by the bitmap properties.
    • If both dpiX and dpiY are 0, the bitmap DPI will be 96.
    • The pixel format must be compatible with the shader resource view or render target view of the surface.
    • The bitmap options must be compatible with the bind flags of the DXGI surface. However, they may be a subset. This will influence what resource views are created by the bitmap.
    • The color context information will be used from the bitmap properties, if specified.
    +
    + + hh404482 + HRESULT ID2D1DeviceContext::CreateBitmapFromDxgiSurface([In] IDXGISurface* surface,[In, Optional] const D2D1_BITMAP_PROPERTIES1* bitmapProperties,[Out, Fast] ID2D1Bitmap1** bitmap) + ID2D1DeviceContext::CreateBitmapFromDxgiSurface +
    + + +

    Creates an effect for the specified class ID.

    +
    +

    The class ID of the effect to create. See Built-in Effects for a list of effect IDs.

    +

    When this method returns, contains the address of a reference to a new effect.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.
    D3DERR_OUTOFVIDEOMEMORYDirect3D does not have enough display memory to perform the operation.
    The specified effect is not registered by the system.
    The effect requires capabilities not supported by the D2D device.

    ?

    + +

    If the created effect is a custom effect that is implemented in a DLL, this doesn't increment the reference count for that DLL. If the application deletes an effect while that effect is loaded, the resulting behavior is unpredictable.

    +
    + + hh404500 + HRESULT ID2D1DeviceContext::CreateEffect([In] const GUID& effectId,[Out, Fast] ID2D1Effect** effect) + ID2D1DeviceContext::CreateEffect +
    + + +

    Creates a gradient stop collection, enabling the gradient to contain color channels with values outside of [0,1] and also enabling rendering to a high-color render target with interpolation in sRGB space.

    +
    +

    An array of color values and offsets.

    +

    The number of elements in the gradientStops array.

    +

    Specifies both the input color space and the space in which the color interpolation occurs.

    +

    The color space that colors will be converted to after interpolation occurs.

    +

    The precision of the texture used to hold interpolated values.

    Note??This method will fail if the underlying Direct3D device does not support the requested buffer precision. Use to determine what is supported. ?
    +

    Defines how colors outside of the range defined by the stop collection are determined.

    +

    Defines how colors are interpolated. is the default, see Remarks for more info.

    +

    The new gradient stop collection.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    This method linearly interpolates between the color stops. An optional color space conversion is applied post-interpolation. Whether and how this gamma conversion is applied is determined by the pre- and post-interpolation. This method will fail if the device context does not support the requested buffer precision.

    In order to get the desired result, you need to ensure that the inputs are specified in the correct color space. +

    You must always specify colors in straight alpha, regardless of interpolation mode being premultiplied or straight. The interpolation mode only affects the interpolated values. Likewise, the stops returned by will always have straight alpha.

    If you specify , then all stops are premultiplied before interpolation, and then un-premultiplied before color conversion. +

    Starting with Windows?8, the interpolation behavior of this method has changed.

    The table here shows the behavior in Windows?7 and earlier.

    GammaBefore Interpolation BehaviorAfter Interpolation BehaviorGetColorInteroplationGamma + (output color space) +
    1.0Clamps the inputs and then converts from sRGB to scRGB.Converts from scRGB to sRGB post-interpolation.1.0
    2.2Clamps the inputs.No Operation2.2

    ?

    The table here shows the behavior in Windows?8 and later.

    GammaBefore Interpolation BehaviorAfter Interpolation BehaviorGetColorInteroplationGamma + (output color space) +
    sRGB to scRGBNo OperationClamps the outputs and then converts from sRGB to scRGB.1.0
    scRGB to sRGBNo OperationClamps the outputs and then converts from sRGB to scRGB.2.2
    sRGB to sRGBNo OperationNo Operation2.2
    scRGB to scRGBNo OperationNo Operation1.0

    ?

    +
    + + hh404502 + HRESULT ID2D1DeviceContext::CreateGradientStopCollection([In, Buffer] const D2D1_GRADIENT_STOP* straightAlphaGradientStops,[In] unsigned int straightAlphaGradientStopsCount,[In] D2D1_COLOR_SPACE preInterpolationSpace,[In] D2D1_COLOR_SPACE postInterpolationSpace,[In] D2D1_BUFFER_PRECISION bufferPrecision,[In] D2D1_EXTEND_MODE extendMode,[In] D2D1_COLOR_INTERPOLATION_MODE colorInterpolationMode,[Out, Fast] ID2D1GradientStopCollection1** gradientStopCollection1) + ID2D1DeviceContext::CreateGradientStopCollection +
    + + +

    Creates an image brush. The input image can be any type of image, including a bitmap, effect, or a command list. +

    +
    +

    The image to be used as a source for the image brush.

    +

    The properties specific to an image brush.

    +

    Properties common to all brushes.

    +

    When this method returns, contains the address of a reference to the input rectangles.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    The image brush can be used to fill an arbitrary geometry, an opacity mask or text.

    This sample illustrates drawing a rectangle with an image brush.

    	
    +            CreatePatternBrush( __in  *pDeviceContext, __deref_out  **ppImageBrush )	
    +            {  hr = ;  *pOldTarget = null; pDeviceContext->GetTarget(&pOldTarget);  *pCommandList = null; hr = pDeviceContext->CreateCommandList(&pCommandList); if (SUCCEEDED(hr)) {    pDeviceContext->SetTarget(pCommandList); hr = RenderPatternToCommandList(pDeviceContext); } pDeviceContext->SetTarget(pOldTarget);  *pImageBrush = null; if (SUCCEEDED(hr)) {         hr = pDeviceContext->CreateImageBrush( pCommandList, D2D1::ImageBrushProperties( D2D1::RectF(198, 298, 370, 470), , ,  ), &pImageBrush ); } // Fill a rectangle with the image brush. if (SUCCEEDED(hr)) { pDeviceContext->FillRectangle( D2D1::RectF(0, 0, 100, 100), pImageBrush); } SafeRelease(&pImageBrush); SafeRelease(&pCommandList); SafeRelease(&pOldTarget); return hr;	
    +            }
    +
    + + hh404506 + HRESULT ID2D1DeviceContext::CreateImageBrush([In, Optional] ID2D1Image* image,[In] const D2D1_IMAGE_BRUSH_PROPERTIES* imageBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1ImageBrush** imageBrush) + ID2D1DeviceContext::CreateImageBrush +
    + + +

    Creates a bitmap brush, the input image is a Direct2D bitmap object.

    +
    +

    The bitmap to use as the brush.

    +

    A bitmap brush properties structure.

    +

    A brush properties structure.

    +

    The address of the newly created bitmap brush object.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + + hh847970 + HRESULT ID2D1DeviceContext::CreateBitmapBrush([In, Optional] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_BITMAP_BRUSH_PROPERTIES1* bitmapBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1BitmapBrush1** bitmapBrush) + ID2D1DeviceContext::CreateBitmapBrush +
    + + +

    Creates a object.

    +
    + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.

    ?

    + +

    A can store Direct2D commands to be displayed later through or through an image brush.

    +
    + + hh404494 + HRESULT ID2D1DeviceContext::CreateCommandList([Out, Fast] ID2D1CommandList** commandList) + ID2D1DeviceContext::CreateCommandList +
    + + +

    Indicates whether the format is supported by the device context. The formats supported are usually determined by the underlying hardware.

    +
    +

    The DXGI format to check.

    +

    Returns TRUE if the format is supported. Returns if the format is not supported.

    + +

    You can use supported formats in the structure to create bitmaps and render targets. Direct2D doesn't support all DXGI formats, even though they may have some level of Direct3D support by the hardware. +

    +
    + + hh847982 + BOOL ID2D1DeviceContext::IsDxgiFormatSupported([In] DXGI_FORMAT format) + ID2D1DeviceContext::IsDxgiFormatSupported +
    + + +

    Indicates whether the buffer precision is supported by the underlying Direct3D device.

    +
    + No documentation. +

    Returns TRUE if the buffer precision is supported. Returns if the buffer precision is not supported.

    + + dn441541 + BOOL ID2D1DeviceContext::IsBufferPrecisionSupported([In] D2D1_BUFFER_PRECISION bufferPrecision) + ID2D1DeviceContext::IsBufferPrecisionSupported +
    + + +

    Gets the bounds of an image without the world transform of the context applied.

    +
    +

    The image whose bounds will be calculated.

    +

    When this method returns, contains a reference to the bounds of the image in device independent pixels (DIPs) and in local space.

    + +

    The image bounds don't include multiplication by the world transform. They do reflect the current DPI, unit mode, and interpolation mode of the context. To get the bounds that include the world transform, use .

    The returned bounds reflect which pixels would be impacted by calling DrawImage with a target offset of (0,0) and an identity world transform matrix. They do not reflect the current clip rectangle set on the device context or the extent of the context's current target image.

    +
    + + hh404515 + HRESULT ID2D1DeviceContext::GetImageLocalBounds([In] ID2D1Image* image,[Out] D2D_RECT_F* localBounds) + ID2D1DeviceContext::GetImageLocalBounds +
    + + +

    Gets the bounds of an image with the world transform of the context applied.

    +
    +

    The image whose bounds will be calculated.

    +

    When this method returns, contains a reference to the bounds of the image in device independent pixels (DIPs).

    + +

    The image bounds reflect the current DPI, unit mode, and world transform of the context. To get bounds which don't include the world transform, use .

    The returned bounds reflect which pixels would be impacted by calling DrawImage with the same image and a target offset of (0,0). They do not reflect the current clip rectangle set on the device context or the extent of the context?s current target image. +

    +
    + + hh847979 + HRESULT ID2D1DeviceContext::GetImageWorldBounds([In] ID2D1Image* image,[Out] D2D_RECT_F* worldBounds) + ID2D1DeviceContext::GetImageWorldBounds +
    + + +

    Gets the world-space bounds in DIPs of the glyph run using the device context DPI.

    +
    +

    The origin of the baseline for the glyph run.

    +

    The glyph run to render.

    +

    The DirectWrite measuring mode that indicates how glyph metrics are used to measure text when it is formatted.

    +

    The bounds of the glyph run in DIPs and in world space.

    + +

    The image bounds reflect the current DPI, unit mode, and world transform of the context.

    +
    + + hh847978 + HRESULT ID2D1DeviceContext::GetGlyphRunWorldBounds([In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In] DWRITE_MEASURING_MODE measuringMode,[Out] D2D_RECT_F* bounds) + ID2D1DeviceContext::GetGlyphRunWorldBounds +
    + + +

    Gets the device associated with a device context.

    +
    +

    When this method returns, contains the address of a reference to a Direct2D device associated with this device context.

    + +

    The application can retrieve the device even if it is created from an earlier render target code-path. The application must use an interface and then call GetDevice. Some functionality for controlling all of the resources for a set of device contexts is maintained only on an object.

    +
    + + hh404513 + void ID2D1DeviceContext::GetDevice([Out] ID2D1Device** device) + ID2D1DeviceContext::GetDevice +
    + + +

    The bitmap or command list to which the Direct2D device context will now render.

    +
    + No documentation. + +

    The target can be changed at any time, including while the context is drawing.

    The target can be either a bitmap created with the flag, or it can be a command list. Other kinds of images cannot be set as a target. For example, you cannot set the output of an effect as target. If the target is not valid the context will enter the error state.

    You cannot use SetTarget to render to a bitmap/command list from multiple device contexts simultaneously. An image is considered ?being rendered to? if it has ever been set on a device context within a BeginDraw/EndDraw timespan. If an attempt is made to render to an image through multiple device contexts, all subsequent device contexts after the first will enter an error state.

    Callers wishing to attach an image to a second device context should first call EndDraw on the first device context. +

    Here is an example of the correct calling order.

    pDC1->BeginDraw();	
    +            pDC1->SetTarget(pImage);	
    +            // ?	
    +            pDC1->EndDraw(); pDC2->BeginDraw();	
    +            pDC2->SetTarget(pImage);	
    +            // ?	
    +            pDC2->EndDraw();	
    +            

    Here is an example of the incorrect calling order.

    pDC1->BeginDraw();	
    +            pDC2->BeginDraw(); pDC1->SetTarget(pImage); // ... pDC1->SetTarget(null); pDC2->SetTarget(pImage); // This call is invalid, even though pImage is no longer set on pDC1. // ... pDC1->EndDraw(); // This EndDraw SUCCEEDs.	
    +            pDC2->EndDraw(); // This EndDraw FAILs 
    Note??Changing the target does not change the bitmap that an render target presents from, nor does it change the bitmap that a DC render target blts to/from.?

    This API makes it easy for an application to use a bitmap as a source (like in DrawBitmap) and as a destination at the same time. Attempting to use a bitmap as a source on the same device context to which it is bound as a target will put the device context into the error state.

    It is acceptable to have a bitmap bound as a target bitmap on multiple render targets at once. Applications that do this must properly synchronize rendering with Flush or EndDraw.

    You can change the target at any time, including while the context is drawing.

    You can set the target to null, in which case drawing calls will put the device context into an error state with . Calling SetTarget with a null target does not restore the original target bitmap to the device context.

    If the device context has an outstanding , the context will enter the error state. The target will not be changed.

    If the bitmap and the device context are not in the same resource domain, the context will enter \ error state. The target will not be changed.

    returns the size of the current target bitmap (or 0, 0) if there is no bitmap bound). + returns the pixel size of the current bitmap scaled by the DPI of the render target. + SetTarget does not affect the DPI of the render target. +

    returns the pixel format of the current target bitmap (or , if there is none).

    copies from the currently bound target bitmap.

    +
    + + hh404533 + void ID2D1DeviceContext::SetTarget([In, Optional] ID2D1Image* image) + ID2D1DeviceContext::SetTarget +
    + + +

    Gets the target currently associated with the device context.

    +
    +

    When this method returns, contains the address of a reference to the target currently associated with the device context.

    + +

    If a target is not associated with the device context, target will contain null when the methods returns.

    If the currently selected target is a bitmap rather than a command list, the application can gain access to the initial bitmaps created by using one of the following methods:

    • CreateHwndRenderTarget
    • CreateDxgiSurfaceRenderTarget
    • CreateWicBitmapRenderTarget
    • CreateDCRenderTarget
    • CreateCompatibleRenderTarget

    It is not possible for an application to destroy these bitmaps. All of these bitmaps are bindable as bitmap targets. However not all of these bitmaps can be used as bitmap sources for methods.

    CreateDxgiSurfaceRenderTarget will create a bitmap that is usable as a bitmap source if the DXGI surface is bindable as a shader resource view.

    CreateCompatibleRenderTarget will always create bitmaps that are usable as a bitmap source.

    will copy from the to the original bitmap associated with it. will copy from the original bitmap to the .

    objects will be locked in the following circumstances:

    • BeginDraw has been called and the currently selected target bitmap is a WIC bitmap.
    • A WIC bitmap is set as the target of a device context after BeginDraw has been called and before EndDraw has been called.
    • Any of the ID2D1Bitmap::Copy* methods are called with a WIC bitmap as either the source or destination.

    objects will be unlocked in the following circumstances:

    • EndDraw is called and the currently selected target bitmap is a WIC bitmap.
    • A WIC bitmap is removed as the target of a device context between the calls to BeginDraw and EndDraw.
    • Any of the ID2D1Bitmap::Copy* methods are called with a WIC bitmap as either the source or destination.

    Direct2D will only lock bitmaps that are not currently locked.

    Calling QueryInterface for will always succeed. will return a device context corresponding to the currently bound target bitmap. GetDC will fail if the target bitmap was not created with the GDI_COMPATIBLE flag set.

    will return if there are any outstanding references to the original target bitmap associated with the render target.

    Although the target can be a command list, it cannot be any other type of image. It cannot be the output image of an effect.

    +
    + + hh404523 + void ID2D1DeviceContext::GetTarget([Out, Optional] ID2D1Image** image) + ID2D1DeviceContext::GetTarget +
    + + +

    Sets the rendering controls for the given device context.

    +
    +

    The rendering controls to be applied.

    + +

    The rendering controls allow the application to tune the precision, performance, and resource usage of rendering operations.

    +
    + + hh404530 + void ID2D1DeviceContext::SetRenderingControls([In] const D2D1_RENDERING_CONTROLS* renderingControls) + ID2D1DeviceContext::SetRenderingControls +
    + + +

    Gets the rendering controls that have been applied to the context.

    +
    +

    When this method returns, contains a reference to the rendering controls for this context.

    + + hh404519 + void ID2D1DeviceContext::GetRenderingControls([Out] D2D1_RENDERING_CONTROLS* renderingControls) + ID2D1DeviceContext::GetRenderingControls +
    + + +

    Changes the primitive blend mode that is used for all rendering operations in the device context.

    +
    +

    The primitive blend to use.

    + +

    The primitive blend will apply to all of the primitive drawn on the context, unless this is overridden with the compositeMode parameter on the DrawImage API.

    The primitive blend applies to the interior of any primitives drawn on the context. In the case of DrawImage, this will be implied by the image rectangle, offset and world transform.

    If the primitive blend is anything other than then ClearType rendering will be turned off. If the application explicitly forces ClearType rendering in these modes, the drawing context will be placed in an error state. will be returned from either EndDraw or Flush. +

    +
    + + hh404527 + void ID2D1DeviceContext::SetPrimitiveBlend([In] D2D1_PRIMITIVE_BLEND primitiveBlend) + ID2D1DeviceContext::SetPrimitiveBlend +
    + + +

    Returns the currently set primitive blend used by the device context.

    +
    +

    The current primitive blend. The default value is .

    + + hh404517 + D2D1_PRIMITIVE_BLEND ID2D1DeviceContext::GetPrimitiveBlend() + ID2D1DeviceContext::GetPrimitiveBlend +
    + + +

    Sets what units will be used to interpret values passed into the device context.

    +

    +

    An enumeration defining how passed-in units will be interpreted by the device context.

    + +

    This method will affect all properties and parameters affected by SetDpi and GetDpi. This affects all coordinates, lengths, and other properties that are not explicitly defined as being in another unit. For example:

    • SetUnitMode will affect a coordinate passed into ID2D1DeviceContext::DrawLine, and the scaling of a geometry passed into ID2D1DeviceContext::FillGeometry.
    • SetUnitMode will not affect the value returned by .
    +
    + + hh404539 + void ID2D1DeviceContext::SetUnitMode([In] D2D1_UNIT_MODE unitMode) + ID2D1DeviceContext::SetUnitMode +
    + + +

    Gets the mode that is being used to interpret values by the device context.

    +
    +

    The unit mode.

    + + hh404525 + D2D1_UNIT_MODE ID2D1DeviceContext::GetUnitMode() + ID2D1DeviceContext::GetUnitMode +
    + + +

    Draws a series of glyphs to the device context.

    +
    +

    Origin of first glyph in the series.

    +

    The glyphs to render.

    +

    Supplementary glyph series information.

    +

    The brush that defines the text color.

    +

    The measuring mode of the glyph series, used to determine the advances and offsets. The default value is .

    + +

    The glyphRunDescription is ignored when rendering, but can be useful for printing and serialization of rendering commands, such as to an XPS or SVG file. This extends , which lacked the glyph run description.

    +
    + + hh404508 + void ID2D1DeviceContext::DrawGlyphRun([In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[In] ID2D1Brush* foregroundBrush,[In] DWRITE_MEASURING_MODE measuringMode) + ID2D1DeviceContext::DrawGlyphRun +
    + + +

    A command list cannot reference effects which are part of effect graphs that consume the command list.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + jj835880 + void ID2D1DeviceContext::DrawImage([In] ID2D1Image* image,[In, Optional] const D2D_POINT_2F* targetOffset,[In, Optional] const D2D_RECT_F* imageRectangle,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In] D2D1_COMPOSITE_MODE compositeMode) + ID2D1DeviceContext::DrawImage +
    + + +

    Draw a metafile to the device context.

    +
    +

    The metafile to draw.

    +

    The offset from the upper left corner of the render target.

    + + jj841147 + void ID2D1DeviceContext::DrawGdiMetafile([In] ID2D1GdiMetafile* gdiMetafile,[In, Optional] const D2D_POINT_2F* targetOffset) + ID2D1DeviceContext::DrawGdiMetafile +
    + + +

    Draws a bitmap to the render target.

    +
    +

    The bitmap to draw.

    +

    The destination rectangle. The default is the size of the bitmap and the location is the upper left corner of the render target.

    +

    The opacity of the bitmap.

    +

    The interpolation mode to use.

    +

    An optional source rectangle.

    +

    An optional perspective transform.

    + +

    The destinationRectangle parameter defines the rectangle in the target where the bitmap will appear (in device-independent pixels (DIPs)). This is affected by the currently set transform and the perspective transform, if set. If null is specified, then the destination rectangle is (left=0, top=0, right = width(sourceRectangle), bottom = height(sourceRectangle)).

    The sourceRectangle parameter defines the sub-rectangle of the source bitmap (in DIPs). DrawBitmap will clip this rectangle to the size of the source bitmap, thus making it impossible to sample outside of the bitmap. If null is specified, then the source rectangle is taken to be the size of the source bitmap.

    If you specify perspectiveTransform it is applied to the rect in addition to the transform set on the render target.

    +
    + + jj841144 + void ID2D1DeviceContext::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_F* destinationRectangle,[In] float opacity,[In] D2D1_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D_RECT_F* sourceRectangle,[In, Optional] const D2D_MATRIX_4X4_F* perspectiveTransform) + ID2D1DeviceContext::DrawBitmap +
    + + +

    Push a layer onto the clip and layer stack of the device context.

    +
    +

    The parameters that defines the layer.

    +

    The layer resource to push on the device context that receives subsequent drawing operations.

    Note??If a layer is not specified, Direct2D manages the layer resource automatically. ?
    + + hh847983 + void ID2D1DeviceContext::PushLayer([In] const D2D1_LAYER_PARAMETERS1* layerParameters,[In, Optional] ID2D1Layer* layer) + ID2D1DeviceContext::PushLayer +
    + + +

    This indicates that a portion of an effect's input is invalid. This method can be called many times.

    You can use this method to propagate invalid rectangles through an effect graph. You can query Direct2D using the GetEffectInvalidRectangles method.

    Note??Direct2D does not automatically use these invalid rectangles to reduce the region of an effect that is rendered.?

    You can also use this method to invalidate caches that have accumulated while rendering effects that have the property set to true.

    +
    + No documentation. + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + + hh847980 + HRESULT ID2D1DeviceContext::InvalidateEffectInputRectangle([In] ID2D1Effect* effect,[In] unsigned int input,[In] const D2D_RECT_F* inputRectangle) + ID2D1DeviceContext::InvalidateEffectInputRectangle +
    + + +

    Gets the number of invalid output rectangles that have accumulated on the effect.

    +
    +

    The effect to count the invalid rectangles on.

    +

    The returned rectangle count.

    + + hh847975 + HRESULT ID2D1DeviceContext::GetEffectInvalidRectangleCount([In] ID2D1Effect* effect,[Out] unsigned int* rectangleCount) + ID2D1DeviceContext::GetEffectInvalidRectangleCount +
    + + +

    Gets the invalid rectangles that have accumulated since the last time the effect was drawn and EndDraw was then called on the device context.

    +
    + No documentation. + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    Note??Direct2D does not automatically use these invalid rectangles to reduce the region of an effect that is rendered.?

    You can use the InvalidateEffectInputRectangle method to specify invalidated rectangles for Direct2D to propagate through an effect graph.

    If multiple invalid rectangles are requested, the rectangles that this method returns may overlap. When this is the case, the rectangle count might be lower than the count that GetEffectInvalidRectangleCount.

    +
    + + hh847976 + HRESULT ID2D1DeviceContext::GetEffectInvalidRectangles([In] ID2D1Effect* effect,[Out, Buffer] D2D_RECT_F* rectangles,[In] unsigned int rectanglesCount) + ID2D1DeviceContext::GetEffectInvalidRectangles +
    + + +

    Returns the input rectangles that are required to be supplied by the caller to produce the given output rectangle.

    +
    +

    The image whose output is being rendered.

    +

    The portion of the output image whose inputs are being inspected.

    +

    A list of the inputs whos rectangles are being queried.

    +

    The input rectangles returned to the caller.

    +

    The number of inputs.

    +

    A failure code, this will typically only be because an effect in the chain returned some error.

    + +

    The caller should be very careful not to place a reliance on the required input rectangles returned. Small changes for correctness to an effect's behavior can result in different rectangles being returned. In addition, different kinds of optimization applied inside the render can also influence the result.

    +
    + + hh847977 + HRESULT ID2D1DeviceContext::GetEffectRequiredInputRectangles([In] ID2D1Effect* renderEffect,[In, Optional] const D2D_RECT_F* renderImageRectangle,[In, Buffer] const D2D1_EFFECT_INPUT_DESCRIPTION* inputDescriptions,[Out, Buffer] D2D_RECT_F* requiredInputRects,[In] unsigned int inputCount) + ID2D1DeviceContext::GetEffectRequiredInputRectangles +
    + + +

    Fill using the alpha channel of the supplied opacity mask bitmap. The brush opacity will be modulated by the mask. The render target antialiasing mode must be set to aliased.

    +
    +

    The bitmap that acts as the opacity mask

    +

    The brush to use for filling the primitive.

    +

    The destination rectangle to output to in the render target

    +

    The source rectangle from the opacity mask bitmap.

    + + hh847974 + void ID2D1DeviceContext::FillOpacityMask([In] ID2D1Bitmap* opacityMask,[In] ID2D1Brush* brush,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + ID2D1DeviceContext::FillOpacityMask +
    + + +

    Enables creation and drawing of geometry realization objects.

    +
    + + dn280461 + ID2D1DeviceContext1 + ID2D1DeviceContext1 +
    + + + Initializes a new instance of the class using an existing . + + The device. + The options to be applied to the created device context. + + The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context. + + HRESULT ID2D1Device1::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out] ID2D1DeviceContext1** deviceContext1) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a device-dependent representation of the fill of the geometry that can be subsequently rendered.

    +
    +

    The geometry to realize.

    +

    The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.

    +

    When this method returns, contains the address of a reference to a new geometry realization object.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    This method is used in conjunction with . The D2D1::ComputeFlatteningTolerance helper API may be used to determine the proper flattening tolerance.

    If the provided stroke style specifies a stroke transform type other than , then the stroke will be realized assuming the identity transform and a DPI of 96.

    +
    + + dn280462 + HRESULT ID2D1DeviceContext1::CreateFilledGeometryRealization([In] ID2D1Geometry* geometry,[In] float flatteningTolerance,[Out, Fast] ID2D1GeometryRealization** geometryRealization) + ID2D1DeviceContext1::CreateFilledGeometryRealization +
    + + +

    Creates a device-dependent representation of the stroke of a geometry that can be subsequently rendered.

    +
    +

    The geometry to realize.

    +

    The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.

    +

    The width of the stroke. This parameter shares the same units as the coordinates of the geometry.

    +

    The stroke style (optional).

    +

    When this method returns, contains the address of a reference to a new geometry realization object.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    This method is used in conjunction with . The D2D1::ComputeFlatteningTolerance helper API may be used to determine the proper flattening tolerance.

    If the provided stroke style specifies a stroke transform type other than , then the stroke will be realized assuming the identity transform and a DPI of 96.

    +
    + + dn280463 + HRESULT ID2D1DeviceContext1::CreateStrokedGeometryRealization([In] ID2D1Geometry* geometry,[In] float flatteningTolerance,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[Out, Fast] ID2D1GeometryRealization** geometryRealization) + ID2D1DeviceContext1::CreateStrokedGeometryRealization +
    + + +

    Renders a given geometry realization to the target with the specified brush.

    +
    +

    The geometry realization to be rendered.

    +

    The brush to render the realization with.

    + +

    This method respects all currently set state (transform, DPI, unit mode, target image, clips, layers); however, artifacts such as faceting may appear when rendering the realizations with a large effective scale (either via the transform or the DPI). Callers should create their realizations with an appropriate flattening tolerance using either D2D1_DEFAULT_FLATTENING_TOLERANCE or ComputeFlatteningTolerance to compensate for this.

    Additionally, callers should be aware of the safe render bounds when creating geometry realizations. If a geometry extends outside of [-524,287, 524,287] DIPs in either the X- or the Y- direction in its original (pre-transform) coordinate space, then it may be clipped to those bounds when it is realized. This clipping will be visible even if the realization is subsequently transformed to fit within the safe render bounds.

    +
    + + dn280464 + void ID2D1DeviceContext1::DrawGeometryRealization([In] ID2D1GeometryRealization* geometryRealization,[In] ID2D1Brush* brush) + ID2D1DeviceContext1::DrawGeometryRealization +
    + + +

    This interface performs all the same functions as the interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.

    +
    + + dn890789 + ID2D1DeviceContext2 + ID2D1DeviceContext2 +
    + + + Initializes a new instance of the class using an existing . + + The device. + The options to be applied to the created device context. + + The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context. + + HRESULT ID2D1Device2::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out] ID2D1DeviceContext2** deviceContext2) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a new object that starts at the given point.

    +
    + No documentation. + No documentation. +

    if successful, otherwise a failure .

    + + dn900368 + HRESULT ID2D1DeviceContext2::CreateInk([In] const D2D1_INK_POINT* startPoint,[Out, Fast] ID2D1Ink** ink) + ID2D1DeviceContext2::CreateInk +
    + + +

    Creates a new object, for use with ink rendering methods such as DrawInk.

    +
    + No documentation. + No documentation. +

    if successful, otherwise a failure .

    + + dn900369 + HRESULT ID2D1DeviceContext2::CreateInkStyle([In, Optional] const D2D1_INK_STYLE_PROPERTIES* inkStyleProperties,[Out, Fast] ID2D1InkStyle** inkStyle) + ID2D1DeviceContext2::CreateInkStyle +
    + + +

    Creates a new instance using the given array of patches.

    +
    + No documentation. + No documentation. + No documentation. +

    if successful, otherwise a failure .

    + + dn890790 + HRESULT ID2D1DeviceContext2::CreateGradientMesh([In, Buffer] const D2D1_GRADIENT_MESH_PATCH* patches,[In] unsigned int patchesCount,[Out, Fast] ID2D1GradientMesh** gradientMesh) + ID2D1DeviceContext2::CreateGradientMesh +
    + + +

    Creates an image source object from a WIC bitmap source, while populating all pixel memory within the image source. The image is loaded and stored while using a minimal amount of memory.

    +
    +

    The WIC bitmap source to create the image source from.

    +

    Options for creating the image source. Default options are used if null.

    +

    Receives the new image source instance.

    +

    Receives the new image source instance.

    +

    if successful, otherwise a failure .

    + +

    This method creates an image source which can be used to draw the image.

    This method supports images that exceed the maximum texture size. Large images are internally stored within a sparse tile cache.

    This API supports the same set of pixel formats and alpha modes supported by CreateBitmapFromWicBitmap. If the GPU does not support a given pixel format, this method will return . This method does not apply adjustments such as gamma or alpha premultiplication which affect the appearance of the image.

    This method automatically selects an appropriate storage format to minimize GPU memory usage., such as using separate luminance and chrominance textures for JPEG images.

    If the loadingOptions argument is null, D2D uses .

    +
    + + dn890793 + HRESULT ID2D1DeviceContext2::CreateImageSourceFromWic([In] IWICBitmapSource* wicBitmapSource,[In] D2D1_IMAGE_SOURCE_LOADING_OPTIONS loadingOptions,[In] D2D1_ALPHA_MODE alphaMode,[Out, Fast] ID2D1ImageSourceFromWic** imageSource) + ID2D1DeviceContext2::CreateImageSourceFromWic +
    + + +

    Creates a 3D lookup table for mapping a 3-channel input to a 3-channel output. The table data must be provided in 4-channel format.

    +
    +

    Precision of the input lookup table data.

    +

    Number of lookup table elements per dimension (X, Y, Z).

    +

    Buffer holding the lookup table data.

    +

    Size of the lookup table data buffer.

    +

    An array containing two values. The first value is the size in bytes from one row (X dimension) of LUT data to the next. The second value is the size in bytes from one LUT data plane (X and Y dimensions) to the next.

    +

    Receives the new lookup table instance.

    +

    if successful, otherwise a failure .

    + + dn900373 + HRESULT ID2D1DeviceContext2::CreateLookupTable3D([In] D2D1_BUFFER_PRECISION precision,[In, Buffer] const unsigned int* extents,[In, Buffer] const unsigned char* data,[In] unsigned int dataCount,[In, Buffer] const unsigned int* strides,[Out, Fast] ID2D1LookupTable3D** lookupTable) + ID2D1DeviceContext2::CreateLookupTable3D +
    + + +

    Creates an image source from a set of DXGI surface(s). The YCbCr surface(s) are converted to RGBA automatically during subsequent drawing.

    +
    +

    The DXGI surfaces to create the image source from.

    +

    The number of surfaces provided; must be between one and three.

    +

    The color space of the input.

    +

    Options controlling color space conversions.

    +

    Receives the new image source instance.

    +

    if successful, otherwise a failure .

    + +

    This method creates an image source which can be used to draw the image. This method supports surfaces that use a limited set of DXGI formats and DXGI color space types. Only the below set of combinations of color space types, surface formats, and surface counts are supported:

    Color Space TypeSurface Count(s)Surface Format(s)
    1 Standard D2D-supported pixel formats:
    1, 2, 3 When Surface count is 1:

    When Surface Count is 2:

    • {DXGI_FORMAT_R8_UNORM, }

    When Surface Count is 3:

    • {DXGI_FORMAT_R8_UNORM, , }

    1,2,3

    When Surface count is 1:

    When Surface Count is 2:

    • {DXGI_FORMAT_R8_UNORM, }

    When Surface Count is 3:

    • {DXGI_FORMAT_R8_UNORM, , }

    ?

    The GPU must also have sufficient support for a pixel format to be supported by D2D. To determine whether D2D supports a format, call IsDxgiFormatSupported.

    This API converts YCbCr formats to sRGB using the provided color space type and options. RGBA data is assumed to be in the desired space, and D2D does not apply any conversion.

    If multiple surfaces are provided, this method infers whether chroma planes are subsampled (by 2x) from the relative sizes of each corresponding source rectangle (or if the source rectangles parameter is null, the bounds of each surface). The second and third rectangle must each be equal in size to the first rectangle, or to the first rectangle with one or both dimensions scaled by 0.5 (while rounding up).

    If provided, the source rectangles must be within the bounds of the corresponding surface. The source rectangles may have different origins. In this case, this method shifts the data from each plane to align with one another.

    +
    + + dn890791 + HRESULT ID2D1DeviceContext2::CreateImageSourceFromDxgi([In, Buffer] IDXGISurface** surfaces,[In] unsigned int surfaceCount,[In] DXGI_COLOR_SPACE_TYPE colorSpace,[In] D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,[Out, Fast] ID2D1ImageSource** imageSource) + ID2D1DeviceContext2::CreateImageSourceFromDxgi +
    + + +

    Creates an image source from a set of DXGI surface(s). The YCbCr surface(s) are converted to RGBA automatically during subsequent drawing.

    +
    +

    The DXGI surfaces to create the image source from.

    +

    The number of surfaces provided; must be between one and three.

    +

    The color space of the input.

    +

    Options controlling color space conversions.

    +

    Receives the new image source instance.

    +

    if successful, otherwise a failure .

    + +

    This method creates an image source which can be used to draw the image. This method supports surfaces that use a limited set of DXGI formats and DXGI color space types. Only the below set of combinations of color space types, surface formats, and surface counts are supported:

    Color Space TypeSurface Count(s)Surface Format(s)
    1 Standard D2D-supported pixel formats:
    1, 2, 3 When Surface count is 1:

    When Surface Count is 2:

    • {DXGI_FORMAT_R8_UNORM, }

    When Surface Count is 3:

    • {DXGI_FORMAT_R8_UNORM, , }

    1,2,3

    When Surface count is 1:

    When Surface Count is 2:

    • {DXGI_FORMAT_R8_UNORM, }

    When Surface Count is 3:

    • {DXGI_FORMAT_R8_UNORM, , }

    ?

    The GPU must also have sufficient support for a pixel format to be supported by D2D. To determine whether D2D supports a format, call IsDxgiFormatSupported.

    This API converts YCbCr formats to sRGB using the provided color space type and options. RGBA data is assumed to be in the desired space, and D2D does not apply any conversion.

    If multiple surfaces are provided, this method infers whether chroma planes are subsampled (by 2x) from the relative sizes of each corresponding source rectangle (or if the source rectangles parameter is null, the bounds of each surface). The second and third rectangle must each be equal in size to the first rectangle, or to the first rectangle with one or both dimensions scaled by 0.5 (while rounding up).

    If provided, the source rectangles must be within the bounds of the corresponding surface. The source rectangles may have different origins. In this case, this method shifts the data from each plane to align with one another.

    +
    + + dn890791 + HRESULT ID2D1DeviceContext2::CreateImageSourceFromDxgi([In, Buffer] IDXGISurface** surfaces,[In] unsigned int surfaceCount,[In] DXGI_COLOR_SPACE_TYPE colorSpace,[In] D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,[Out, Fast] ID2D1ImageSource** imageSource) + ID2D1DeviceContext2::CreateImageSourceFromDxgi +
    + + +

    Creates an image source from a set of DXGI surface(s). The YCbCr surface(s) are converted to RGBA automatically during subsequent drawing.

    +
    +

    The DXGI surfaces to create the image source from.

    +

    The number of surfaces provided; must be between one and three.

    +

    The color space of the input.

    +

    Options controlling color space conversions.

    +

    Receives the new image source instance.

    +

    if successful, otherwise a failure .

    + +

    This method creates an image source which can be used to draw the image. This method supports surfaces that use a limited set of DXGI formats and DXGI color space types. Only the below set of combinations of color space types, surface formats, and surface counts are supported:

    Color Space TypeSurface Count(s)Surface Format(s)
    1 Standard D2D-supported pixel formats:
    1, 2, 3 When Surface count is 1:

    When Surface Count is 2:

    • {DXGI_FORMAT_R8_UNORM, }

    When Surface Count is 3:

    • {DXGI_FORMAT_R8_UNORM, , }

    1,2,3

    When Surface count is 1:

    When Surface Count is 2:

    • {DXGI_FORMAT_R8_UNORM, }

    When Surface Count is 3:

    • {DXGI_FORMAT_R8_UNORM, , }

    ?

    The GPU must also have sufficient support for a pixel format to be supported by D2D. To determine whether D2D supports a format, call IsDxgiFormatSupported.

    This API converts YCbCr formats to sRGB using the provided color space type and options. RGBA data is assumed to be in the desired space, and D2D does not apply any conversion.

    If multiple surfaces are provided, this method infers whether chroma planes are subsampled (by 2x) from the relative sizes of each corresponding source rectangle (or if the source rectangles parameter is null, the bounds of each surface). The second and third rectangle must each be equal in size to the first rectangle, or to the first rectangle with one or both dimensions scaled by 0.5 (while rounding up).

    If provided, the source rectangles must be within the bounds of the corresponding surface. The source rectangles may have different origins. In this case, this method shifts the data from each plane to align with one another.

    +
    + + dn890791 + HRESULT ID2D1DeviceContext2::CreateImageSourceFromDxgi([In, Buffer] IDXGISurface** surfaces,[In] unsigned int surfaceCount,[In] DXGI_COLOR_SPACE_TYPE colorSpace,[In] D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS options,[Out, Fast] ID2D1ImageSource** imageSource) + ID2D1DeviceContext2::CreateImageSourceFromDxgi +
    + + +

    Returns the world bounds of a given gradient mesh.

    +
    +

    The gradient mesh whose world bounds will be calculated.

    +

    When this method returns, contains a reference to the bounds of the gradient mesh, in device independent pixels (DIPs).

    +

    if successful, otherwise a failure .

    + +

    The world bounds reflect the current DPI, unit mode, and world transform of the context. They indicate which pixels would be impacted by calling DrawGradientMesh with the given gradient mesh. + They do not reflect the current clip rectangle set on the device context or the extent of the context?s current target.

    +
    + + dn900380 + HRESULT ID2D1DeviceContext2::GetGradientMeshWorldBounds([In] ID2D1GradientMesh* gradientMesh,[Out] D2D_RECT_F* pBounds) + ID2D1DeviceContext2::GetGradientMeshWorldBounds +
    + + +

    Renders the given ink object using the given brush and ink style.

    +
    +

    The ink object to be rendered.

    +

    The brush with which to render the ink object.

    +

    The ink style to use when rendering the ink object.

    + + dn900379 + void ID2D1DeviceContext2::DrawInk([In] ID2D1Ink* ink,[In] ID2D1Brush* brush,[In, Optional] ID2D1InkStyle* inkStyle) + ID2D1DeviceContext2::DrawInk +
    + + +

    Renders a given gradient mesh to the target.

    +
    +

    The gradient mesh to be rendered.

    + + dn900378 + void ID2D1DeviceContext2::DrawGradientMesh([In] ID2D1GradientMesh* gradientMesh) + ID2D1DeviceContext2::DrawGradientMesh +
    + + +

    Draws a metafile to the device context using the given source and destination rectangles.

    +
    +

    The metafile to draw.

    +

    The rectangle in the target where the metafile will be drawn, relative to the upper left corner (defined in DIPs) of the render target. If null is specified, the destination rectangle is {0, 0, w, h}, where w and h are the width and height of the metafile as reported by .

    +

    The rectangle of the source metafile that will be drawn, relative to the upper left corner (defined in DIPs) of the metafile. If null is specified, the source rectangle is the value returned by .

    + + dn900375 + void ID2D1DeviceContext2::DrawGdiMetafile([In] ID2D1GdiMetafile* gdiMetafile,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + ID2D1DeviceContext2::DrawGdiMetafile +
    + + +

    Creates an image source which shares resources with an original.

    +
    +

    The original image.

    +

    Properties for the source image.

    +

    Receives the new image source.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn934381 + HRESULT ID2D1DeviceContext2::CreateTransformedImageSource([In] ID2D1ImageSource* imageSource,[In] const D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES* properties,[Out, Fast] ID2D1TransformedImageSource** transformedImageSource) + ID2D1DeviceContext2::CreateTransformedImageSource +
    + + +

    This interface performs all the same functions as the interface, plus it enables functionality for creating and drawing sprite batches.

    +
    + + mt619826 + ID2D1DeviceContext3 + ID2D1DeviceContext3 +
    + + + Initializes a new instance of the class using an existing . + + The device. + The options to be applied to the created device context. + + The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context. + + HRESULT ID2D1Device3::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out] ID2D1DeviceContext3** deviceContext3) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a new, empty sprite batch. After creating a sprite batch, use to add sprites to it, then use to draw it.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt619827 + HRESULT ID2D1DeviceContext3::CreateSpriteBatch([Out, Fast] ID2D1SpriteBatch** spriteBatch) + ID2D1DeviceContext3::CreateSpriteBatch +
    + + +

    Renders all sprites in the given sprite batch to the device context using the specified drawing options.

    +
    +

    The sprite batch to draw.

    +

    The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.

    +

    The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.

    +

    The bitmap from which the sprites are to be sourced. Each sprite?s source rectangle refers to a portion of this bitmap.

    +

    The interpolation mode to use when drawing this sprite batch. This determines how Direct2D interpolates pixels within the drawn sprites if scaling is performed.

    +

    The additional drawing options, if any, to be used for this sprite batch.

    + + mt619829 + void ID2D1DeviceContext3::DrawSpriteBatch([In] ID2D1SpriteBatch* spriteBatch,[In] unsigned int startIndex,[In] unsigned int spriteCount,[In] ID2D1Bitmap* bitmap,[In] D2D1_BITMAP_INTERPOLATION_MODE interpolationMode,[In] D2D1_SPRITE_OPTIONS spriteOptions) + ID2D1DeviceContext3::DrawSpriteBatch +
    + + +

    This interface performs all the same functions as the interface, plus it enables functionality for handling new types of color font glyphs.

    +
    + + mt736468 + ID2D1DeviceContext4 + ID2D1DeviceContext4 +
    + + + Initializes a new instance of the class using an existing . + + The device. + The options to be applied to the created device context. + + The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context. + + HRESULT ID2D1Device4::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out] ID2D1DeviceContext4** DeviceContext4) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates an SVG glyph style object.

    +
    +

    On completion points to the created object.

    +

    This method returns an success or error code.

    + + mt750183 + HRESULT ID2D1DeviceContext4::CreateSvgGlyphStyle([Out] ID2D1SvgGlyphStyle** svgGlyphStyle) + ID2D1DeviceContext4::CreateSvgGlyphStyle +
    + + +

    Represents a set of state and command buffers that are used to render to a target.

    The device context can render to a target bitmap or a command list. +

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device.

    +
    + + hh404479 + void ID2D1DeviceContext4::DrawTextW([In, Buffer] const wchar_t* string,[In] unsigned int stringLength,[In] IDWriteTextFormat* textFormat,[In] const D2D_RECT_F* layoutRect,[In, Optional] ID2D1Brush* defaultFillBrush,[In, Optional] ID2D1SvgGlyphStyle* svgGlyphStyle,[In] unsigned int colorPaletteIndex,[In] D2D1_DRAW_TEXT_OPTIONS options,[In] DWRITE_MEASURING_MODE measuringMode) + ID2D1DeviceContext4::DrawTextW +
    + + +

    Draws a text layout object. If the layout is not subsequently changed, this can be more efficient than DrawText when drawing the same layout repeatedly.

    +
    +

    The point, described in device-independent pixels, at which the upper-left corner of the text described by textLayout is drawn.

    +

    The formatted text to draw. Any drawing effects that do not inherit from are ignored. If there are drawing effects that inherit from that are not brushes, this method fails and the render target is put in an error state.

    +

    The brush used to paint the text.

    +

    The values for context-fill, context-stroke, and context-value that are used when rendering SVG glyphs.

    +

    The index used to select a color palette within a color font.

    +

    A value that indicates whether the text should be snapped to pixel boundaries and whether the text should be clipped to the layout rectangle. The default value is , which indicates that text should be snapped to pixel boundaries and it should not be clipped to the layout rectangle.

    + + mt750187 + void ID2D1DeviceContext4::DrawTextLayout([In] D2D_POINT_2F origin,[In] IDWriteTextLayout* textLayout,[In, Optional] ID2D1Brush* defaultFillBrush,[In, Optional] ID2D1SvgGlyphStyle* svgGlyphStyle,[In] unsigned int colorPaletteIndex,[In] D2D1_DRAW_TEXT_OPTIONS options) + ID2D1DeviceContext4::DrawTextLayout +
    + + +

    Draws a color bitmap glyph run using one of the bitmap formats.

    +
    +

    Specifies the format of the glyph image. Supported formats are , , , or . This method will result in an error if the color glyph run does not contain the requested format.

    Only one format can be specified at a time, combinations of flags are not valid input.

    +

    The origin of the baseline for the glyph run.

    +

    The glyphs to render.

    +

    Indicates the measuring method.

    +

    Specifies the pixel snapping policy when rendering color bitmap glyphs.

    + + mt750184 + void ID2D1DeviceContext4::DrawColorBitmapGlyphRun([In] DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat,[In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In] DWRITE_MEASURING_MODE measuringMode,[In] D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION bitmapSnapOption) + ID2D1DeviceContext4::DrawColorBitmapGlyphRun +
    + + +

    Draws a color glyph run that has the format of .

    +
    +

    The origin of the baseline for the glyph run.

    +

    The glyphs to render.

    +

    The brush used to paint the specified glyphs.

    +

    Values for context-fill, context-stroke, and context-value that are used when rendering SVG glyphs.

    +

    The index used to select a color palette within a color font. Note that this not the same as the paletteIndex in the struct, which is not relevant for SVG glyphs.

    +

    Indicates the measuring method used for text layout.

    + + mt750185 + void ID2D1DeviceContext4::DrawSvgGlyphRun([In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] ID2D1Brush* defaultFillBrush,[In, Optional] ID2D1SvgGlyphStyle* svgGlyphStyle,[In] unsigned int colorPaletteIndex,[In] DWRITE_MEASURING_MODE measuringMode) + ID2D1DeviceContext4::DrawSvgGlyphRun +
    + + +

    Retrieves an image of the color bitmap glyph from the color glyph cache. If the cache does not already contain the requested resource, it will be created. This method may be used to extend the lifetime of a glyph image even after it is evicted from the color glyph cache.

    +
    +

    The format for the glyph image. If there is no image data in the requested format for the requested glyph, this method will return an error.

    +

    The origin for the glyph.

    +

    Reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.

    +

    The specified font size affects the choice of which bitmap to use from the font. It also affects the output glyphTransform, causing it to properly scale the glyph.

    +

    Index of the glyph.

    +

    If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways as true and rotating the entire run 90 degrees to the right via a rotate transform.

    +

    The transform to apply to the image. This input transform affects the choice of which bitmap to use from the font. It is also factored into the output glyphTransform.

    +

    Dots per inch along the x-axis.

    +

    Dots per inch along the y-axis.

    +

    Output transform, which transforms from the glyph's space to the same output space as the worldTransform. This includes the input glyphOrigin, the glyph's offset from the glyphOrigin, and any other required transformations.

    +

    On completion contains the retrieved glyph image.

    +

    This method returns an success or error code.

    + + mt750189 + HRESULT ID2D1DeviceContext4::GetColorBitmapGlyphImage([In] DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat,[In] D2D_POINT_2F glyphOrigin,[In] IDWriteFontFace* fontFace,[In] float fontEmSize,[In] unsigned short glyphIndex,[In] BOOL isSideways,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float dpiX,[In] float dpiY,[Out] D2D_MATRIX_3X2_F* glyphTransform,[Out] ID2D1Image** glyphImage) + ID2D1DeviceContext4::GetColorBitmapGlyphImage +
    + + +

    Retrieves an image of the SVG glyph from the color glyph cache. If the cache does not already contain the requested resource, it will be created. This method may be used to extend the lifetime of a glyph image even after it is evicted from the color glyph cache.

    +
    +

    Origin of the glyph.

    +

    Reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.

    +

    The specified font size affects the output glyphTransform, causing it to properly scale the glyph.

    +

    Index of the glyph to retrieve.

    +

    If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways as true and rotating the entire run 90 degrees to the right via a rotate transform.

    +

    The transform to apply to the image.

    +

    Describes how the area is painted.

    +

    The values for context-fill, context-stroke, and context-value that are used when rendering SVG glyphs.

    +

    The index used to select a color palette within a color font. Note that this not the same as the paletteIndex in the struct, which is not relevant for SVG glyphs.

    +

    Output transform, which transforms from the glyph's space to the same output space as the worldTransform. This includes the input glyphOrigin, the glyph's offset from the glyphOrigin, and any other required transformations.

    +

    On completion, contains the retrieved glyph image.

    +

    This method returns an success or error code.

    + + mt750190 + HRESULT ID2D1DeviceContext4::GetSvgGlyphImage([In] D2D_POINT_2F glyphOrigin,[In] IDWriteFontFace* fontFace,[In] float fontEmSize,[In] unsigned short glyphIndex,[In] BOOL isSideways,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In, Optional] ID2D1Brush* defaultFillBrush,[In, Optional] ID2D1SvgGlyphStyle* svgGlyphStyle,[In] unsigned int colorPaletteIndex,[Out] D2D_MATRIX_3X2_F* glyphTransform,[Out] ID2D1CommandList** glyphImage) + ID2D1DeviceContext4::GetSvgGlyphImage +
    + + +

    Represents a set of state and command buffers that are used to render to a target.

    The device context can render to a target bitmap or a command list. +

    +
    + +

    Any resource created from a device context can be shared with any other resource created from a device context when both contexts are created on the same device.

    +
    + + hh404479 + ID2D1DeviceContext5 + ID2D1DeviceContext5 +
    + + + Initializes a new instance of the class using an existing . + + The device. + The options to be applied to the created device context. + + The new device context will not have a selected target bitmap. The caller must create and select a bitmap as the target surface of the context. + + HRESULT ID2D1Device5::CreateDeviceContext([In] D2D1_DEVICE_CONTEXT_OPTIONS options,[Out] ID2D1DeviceContext5** DeviceContext5) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1DeviceContext5::CreateSvgDocument([In, Optional] IStream* inputXmlStream,[In] D2D_SIZE_F viewportSize,[Out] ID2D1SvgDocument** svgDocument) + ID2D1DeviceContext5::CreateSvgDocument + + + + No documentation. + + No documentation. + + void ID2D1DeviceContext5::DrawSvgDocument([In] ID2D1SvgDocument* svgDocument) + ID2D1DeviceContext5::DrawSvgDocument + + + +

    Creates a color context from a DXGI color space type. It is only valid to use this with the Color Management Effect in 'Best' mode.

    +
    +

    The color space to create the color context from.

    +

    The created color context.

    +

    This method returns an success or error code.

    + + mt797807 + HRESULT ID2D1DeviceContext5::CreateColorContextFromDxgiColorSpace([In] DXGI_COLOR_SPACE_TYPE colorSpace,[Out, Fast] ID2D1ColorContext1** colorContext) + ID2D1DeviceContext5::CreateColorContextFromDxgiColorSpace +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1DeviceContext5::CreateColorContextFromSimpleColorProfile([In] const D2D1_SIMPLE_COLOR_PROFILE* simpleProfile,[Out, Fast] ID2D1ColorContext1** colorContext) + ID2D1DeviceContext5::CreateColorContextFromSimpleColorProfile + + + +

    Issues drawing commands to a GDI device context.

    +
    + + dd371213 + ID2D1DCRenderTarget + ID2D1DCRenderTarget +
    + + + Creates a render target that draws to a Windows Graphics Device Interface (GDI) device context. + + + Before you can render with a DC render target, you must use the render target's {{BindDC}} method to associate it with a GDI DC. Do this for each different DC and whenever there is a change in the size of the area you want to draw to.To enable the DC render target to work with GDI, set the render target's DXGI format to and alpha mode to or D2D1_ALPHA_MODE_IGNORE.Your application should create render targets once and hold on to them for the life of the application or until the render target's {{EndDraw}} method returns the {{D2DERR_RECREATE_TARGET}} error. When you receive this error, recreate the render target (and any resources it created). + + an instance of + The rendering mode, pixel format, remoting options, DPI information, and the minimum DirectX support required for hardware rendering. To enable the device context (DC) render target to work with GDI, set the DXGI format to and the alpha mode to or D2D1_ALPHA_MODE_IGNORE. For more information about pixel formats, see {{Supported Pixel Formats and Alpha Modes}}. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Binds the render target to the device context to which it issues drawing commands.

    +
    +

    The device context to which the render target issues drawing commands.

    +

    The dimensions of the handle to a device context () to which the render target is bound.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Before you can render with the DC render target, you must use its BindDC method to associate it with a GDI DC. You do this each time you use a different DC, or the size of the area you want to draw to changes.

    +
    + + dd371214 + HRESULT ID2D1DCRenderTarget::BindDC([In] const HDC hDC,[In] const RECT* pSubRect) + ID2D1DCRenderTarget::BindDC +
    + + +

    This interface is used to describe a GPU rendering pass on a vertex or pixel shader. It is passed to .

    +
    + + hh847986 + ID2D1DrawInfo + ID2D1DrawInfo +
    + + + Sets the constant buffer data from a for the Vertex stage. + + The DataStream that contains the constant buffer data + + + + Sets the constant buffer data from a struct value for the Vertex stage. + + Type of the constant buffer + Value of the constant buffer + HRESULT ID2D1ComputeInfo::SetComputeShaderConstantBuffer([In, Buffer] const void* buffer,[In] unsigned int bufferCount) + + + + Sets the constant buffer data from a struct value for the Vertex Stage. + + Type of the constant buffer + Value of the constant buffer + HRESULT ID2D1ComputeInfo::SetComputeShaderConstantBuffer([In, Buffer] const void* buffer,[In] unsigned int bufferCount) + + + + Sets the constant buffer data from a for the Pixel stage. + + The DataStream that contains the constant buffer data + + + + Sets the constant buffer data from a struct value for the Pixel stage. + + Type of the constant buffer + Value of the constant buffer + HRESULT ID2D1ComputeInfo::SetComputeShaderConstantBuffer([In, Buffer] const void* buffer,[In] unsigned int bufferCount) + + + + Sets the constant buffer data from a struct value for the Pixel Stage. + + Type of the constant buffer + Value of the constant buffer + HRESULT ID2D1ComputeInfo::SetComputeShaderConstantBuffer([In, Buffer] const void* buffer,[In] unsigned int bufferCount) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the constant buffer for this transform's pixel shader.

    +
    +

    The data applied to the constant buffer.

    +

    The number of bytes of data in the constant buffer

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh847988 + HRESULT ID2D1DrawInfo::SetPixelShaderConstantBuffer([In, Buffer] const void* buffer,[In] unsigned int bufferCount) + ID2D1DrawInfo::SetPixelShaderConstantBuffer +
    + + +

    Sets the resource texture corresponding to the given shader texture index.

    +
    +

    The index of the texture to be bound to the pixel shader.

    +

    The created resource texture.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh847989 + HRESULT ID2D1DrawInfo::SetResourceTexture([In] unsigned int textureIndex,[In] ID2D1ResourceTexture* resourceTexture) + ID2D1DrawInfo::SetResourceTexture +
    + + +

    Sets the constant buffer for this transform's vertex shader.

    +
    +

    The data applied to the constant buffer

    +

    The number of bytes of data in the constant buffer.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + + hh847991 + HRESULT ID2D1DrawInfo::SetVertexShaderConstantBuffer([In, Buffer] const void* buffer,[In] unsigned int bufferCount) + ID2D1DrawInfo::SetVertexShaderConstantBuffer +
    + + +

    Set the shader instructions for this transform.

    +
    +

    The resource id for the shader.

    +

    Additional information provided to the renderer to indicate the operations the pixel shader does.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    If this call fails, the corresponding instance is placed into an error state and will fail to Draw, it will place the context into an error state which can be retrieved through the ID2D1DeviceContext::EndDraw call.

    Specifying pixelOptions other than can enable the renderer to perform certain optimizations such as combining various parts of the effect graph together. If this information does not accurately describe the shader, indeterminate rendering artifacts can result. +

    +
    + + hh847987 + HRESULT ID2D1DrawInfo::SetPixelShader([In] const GUID& shaderId,[In] D2D1_PIXEL_OPTIONS pixelOptions) + ID2D1DrawInfo::SetPixelShader +
    + + +

    Sets a vertex buffer, a corresponding vertex shader, and options to control how the vertices are to be handled by the Direct2D context.

    +
    +

    The vertex buffer, if this is cleared, the default vertex shader and mapping to the transform rectangles will be used.

    +

    Options that influence how the renderer will interact with the vertex shader.

    +

    How the vertices will be blended with the output texture.

    +

    The set of vertices to use from the buffer.

    +

    The of the vertex shader.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    The vertex shaders associated with the vertex buffer through the vertex shader must have been loaded through the method before this call is made.

    If you pass the vertex option , then the method fails unless the blend description is exactly this:

     blendDesc =  { , , , , , , { 1.0f, 1.0f, 1.0f, 1.0f } };

    If this call fails, the corresponding instance is placed into an error state and fails to draw.

    If blendDescription is null, a foreground-over blend mode is used.

    +
    + + hh847990 + HRESULT ID2D1DrawInfo::SetVertexProcessing([In, Optional] ID2D1VertexBuffer* vertexBuffer,[In] D2D1_VERTEX_OPTIONS vertexOptions,[In, Optional] const D2D1_BLEND_DESCRIPTION* blendDescription,[In, Optional] const D2D1_VERTEX_RANGE* vertexRange,[In, Optional] const GUID* vertexShader) + ID2D1DrawInfo::SetVertexProcessing +
    + + +

    Represents the drawing state of a render target: the antialiasing mode, transform, tags, and text-rendering options.

    +
    + + dd371218 + ID2D1DrawingStateBlock + ID2D1DrawingStateBlock +
    + + + Creates an that can be used with the {{SaveDrawingState}} and {{RestoreDrawingState}} methods of a render target. + + an instance of + + + + Creates an that can be used with the {{SaveDrawingState}} and {{RestoreDrawingState}} methods of a render target. + + an instance of + A structure that contains antialiasing, transform, and tags information. + + + + Creates an that can be used with the {{SaveDrawingState}} and {{RestoreDrawingState}} methods of a render target. + + an instance of + Optional text parameters that indicate how text should be rendered. + + + + Creates an that can be used with the {{SaveDrawingState}} and {{RestoreDrawingState}} methods of a render target. + + an instance of + A structure that contains antialiasing, transform, and tags information. + Optional text parameters that indicate how text should be rendered. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves or sets the antialiasing mode, transform, and tags portion of the drawing state.

    +
    + + dd371223 + GetDescription / SetDescription + GetDescription + void ID2D1DrawingStateBlock::GetDescription([Out] D2D1_DRAWING_STATE_DESCRIPTION* stateDescription) +
    + + +

    Retrieves or sets the text-rendering configuration of the drawing state.

    +
    + + dd371227 + GetTextRenderingParams / SetTextRenderingParams + GetTextRenderingParams + void ID2D1DrawingStateBlock::GetTextRenderingParams([Out, Optional] IDWriteRenderingParams** textRenderingParams) +
    + + +

    Retrieves the antialiasing mode, transform, and tags portion of the drawing state.

    +
    +

    When this method returns, contains the antialiasing mode, transform, and tags portion of the drawing state. You must allocate storage for this parameter.

    + + dd371223 + void ID2D1DrawingStateBlock::GetDescription([Out] D2D1_DRAWING_STATE_DESCRIPTION* stateDescription) + ID2D1DrawingStateBlock::GetDescription +
    + + +

    Specifies the antialiasing mode, transform, and tags portion of the drawing state.

    +
    +

    The antialiasing mode, transform, and tags portion of the drawing state.

    + + dd371231 + void ID2D1DrawingStateBlock::SetDescription([In] const D2D1_DRAWING_STATE_DESCRIPTION* stateDescription) + ID2D1DrawingStateBlock::SetDescription +
    + + +

    Specifies the text-rendering configuration of the drawing state.

    +
    +

    The text-rendering configuration of the drawing state, or null to use default settings.

    + + dd371237 + void ID2D1DrawingStateBlock::SetTextRenderingParams([In, Optional] IDWriteRenderingParams* textRenderingParams) + ID2D1DrawingStateBlock::SetTextRenderingParams +
    + + +

    Retrieves the text-rendering configuration of the drawing state.

    +
    +

    When this method returns, contains the address of a reference to an object that describes the text-rendering configuration of the drawing state.

    + + dd371227 + void ID2D1DrawingStateBlock::GetTextRenderingParams([Out, Optional] IDWriteRenderingParams** textRenderingParams) + ID2D1DrawingStateBlock::GetTextRenderingParams +
    + + +

    Implementation of a drawing state block that adds the functionality of primitive blend in addition to already existing antialias mode, transform, tags and text rendering mode.

    Note??You can get an using the method or you can use the QueryInterface method on an object.? +
    + + hh871452 + ID2D1DrawingStateBlock1 + ID2D1DrawingStateBlock1 +
    + + + Creates an that can be used with the {{SaveDrawingState}} and {{RestoreDrawingState}} methods of a render target. + + an instance of + + + + Creates an that can be used with the {{SaveDrawingState}} and {{RestoreDrawingState}} methods of a render target. + + an instance of + A structure that contains antialiasing, transform, and tags information. + + + + Creates an that can be used with the {{SaveDrawingState}} and {{RestoreDrawingState}} methods of a render target. + + an instance of + Optional text parameters that indicate how text should be rendered. + + + + Creates an that can be used with the {{SaveDrawingState}} and {{RestoreDrawingState}} methods of a render target. + + an instance of + A structure that contains antialiasing, transform, and tags information. + Optional text parameters that indicate how text should be rendered. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state.

    +
    + + hh871453 + GetDescription / SetDescription + GetDescription + void ID2D1DrawingStateBlock1::GetDescription([Out] D2D1_DRAWING_STATE_DESCRIPTION1* stateDescription) +
    + + +

    Gets the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state.

    +
    +

    When this method returns, contains the antialiasing mode, transform, tags, primitive blend, and unit mode portion of the drawing state. You must allocate storage for this parameter.

    + + hh871453 + void ID2D1DrawingStateBlock1::GetDescription([Out] D2D1_DRAWING_STATE_DESCRIPTION1* stateDescription) + ID2D1DrawingStateBlock1::GetDescription +
    + + +

    Sets the associated with this drawing state block.

    +
    + No documentation. + + hh871454 + void ID2D1DrawingStateBlock1::SetDescription([In] const D2D1_DRAWING_STATE_DESCRIPTION1* stateDescription) + ID2D1DrawingStateBlock1::SetDescription +
    + + +

    A specialized implementation of the Shantzis calculations to a transform implemented on the GPU. These calculations are described in the paper A model for efficient and flexible image computing.

    The information required to specify a ?Pass? in the rendering algorithm on a Pixel Shader is passed to the implementation through the SetDrawInfo method.

    +
    + + hh847992 + ID2D1DrawTransform + ID2D1DrawTransform +
    + + + Sets the GPU render information for the transform. + + The interface to specify the GPU-based transform pass.. + HRESULT ID2D1DrawTransform::SetDrawInfo([In] ID2D1DrawInfo* drawInfo) + + + +

    A specialized implementation of the Shantzis calculations to a transform implemented on the GPU. These calculations are described in the paper A model for efficient and flexible image computing.

    The information required to specify a ?Pass? in the rendering algorithm on a Pixel Shader is passed to the implementation through the SetDrawInfo method.

    +
    + + hh847992 + ID2D1DrawTransform + ID2D1DrawTransform +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Provides the GPU render info interface to the transform implementation.

    +
    +

    The interface supplied back to the calling method to allow it to specify the GPU based transform pass.

    +

    Any value can be returned when implementing this method. A failure will be returned from the corresponding ID2D1DeviceContext::EndDraw call.

    + +

    The transform can maintain a reference to this interface for its lifetime. If any properties change on the transform, it can apply these changes to the corresponding drawInfo interface.

    This is also used to determine that the corresponding nodes in the graph are dirty.

    +
    + + hh847993 + HRESULT ID2D1DrawTransform::SetDrawInfo([In] ID2D1DrawInfo* drawInfo) + ID2D1DrawTransform::SetDrawInfo +
    + + + Internal DrawTransform Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT ID2D1DrawTransform::SetDrawInfo([In] ID2D1DrawInfo* drawInfo) + + + +

    Represents a basic image-processing construct in Direct2D.

    +
    + +

    An effect takes zero or more input images, and has an output image. The images that are input into and output from an effect are lazily evaluated. This definition is sufficient to allow an arbitrary graph of effects to be created from the application by feeding output images into the input image of the next effect in the chain.

    +
    + + hh404566 + ID2D1Effect + ID2D1Effect +
    + + + Initializes a new instance of the class. + + The device context. + The class ID of the effect to create. + If no sufficient memory to complete the call, or if it does not have enough display memory to perform the operation, or if the specified effect is not registered by the system. + + The created effect does not increment the reference count for the dynamic-link library (DLL) from which the effect was created. If the application deletes an effect while that effect is loaded, the resulting behavior will be unpredictable. + + HRESULT ID2D1DeviceContext::CreateEffect([In] const GUID& effectId,[Out, Fast] ID2D1Effect** effect) + + + + Initializes a new instance of the class. + + The effect context. + The class ID of the effect to create. + No documentation. + + HRESULT ID2D1EffectContext::CreateEffect([In] const GUID& effectId,[Out] ID2D1Effect** effect) + + + + Sets the input by using the output of a given effect. + + Index of the input + Effect output to use as input + To invalidate + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant ArithmeticComposite. + CLSID_D2D1ArithmeticComposite + + + Constant Atlas. + CLSID_D2D1Atlas + + + Constant BitmapSource. + CLSID_D2D1BitmapSource + + + Constant Blend. + CLSID_D2D1Blend + + + Constant Border. + CLSID_D2D1Border + + + Constant Brightness. + CLSID_D2D1Brightness + + + Constant ColorManagement. + CLSID_D2D1ColorManagement + + + Constant ColorMatrix. + CLSID_D2D1ColorMatrix + + + Constant Composite. + CLSID_D2D1Composite + + + Constant ConvolveMatrix. + CLSID_D2D1ConvolveMatrix + + + Constant Crop. + CLSID_D2D1Crop + + + Constant DirectionalBlur. + CLSID_D2D1DirectionalBlur + + + Constant DiscreteTransfer. + CLSID_D2D1DiscreteTransfer + + + Constant DisplacementMap. + CLSID_D2D1DisplacementMap + + + Constant DistantDiffuse. + CLSID_D2D1DistantDiffuse + + + Constant DistantSpecular. + CLSID_D2D1DistantSpecular + + + Constant DpiCompensation. + CLSID_D2D1DpiCompensation + + + Constant Flood. + CLSID_D2D1Flood + + + Constant GammaTransfer. + CLSID_D2D1GammaTransfer + + + Constant GaussianBlur. + CLSID_D2D1GaussianBlur + + + Constant Scale. + CLSID_D2D1Scale + + + Constant Histogram. + CLSID_D2D1Histogram + + + Constant HueRotation. + CLSID_D2D1HueRotation + + + Constant LinearTransfer. + CLSID_D2D1LinearTransfer + + + Constant LuminanceToAlpha. + CLSID_D2D1LuminanceToAlpha + + + Constant Morphology. + CLSID_D2D1Morphology + + + Constant OpacityMetadata. + CLSID_D2D1OpacityMetadata + + + Constant PointDiffuse. + CLSID_D2D1PointDiffuse + + + Constant PointSpecular. + CLSID_D2D1PointSpecular + + + Constant Premultiply. + CLSID_D2D1Premultiply + + + Constant Saturation. + CLSID_D2D1Saturation + + + Constant Shadow. + CLSID_D2D1Shadow + + + Constant SpotDiffuse. + CLSID_D2D1SpotDiffuse + + + Constant SpotSpecular. + CLSID_D2D1SpotSpecular + + + Constant TableTransfer. + CLSID_D2D1TableTransfer + + + Constant Tile. + CLSID_D2D1Tile + + + Constant Turbulence. + CLSID_D2D1Turbulence + + + Constant UnPremultiply. + CLSID_D2D1UnPremultiply + + + Constant YCbCr. + CLSID_D2D1YCbCr + + + Constant Contrast. + CLSID_D2D1Contrast + + + Constant RgbToHue. + CLSID_D2D1RgbToHue + + + Constant HueToRgb. + CLSID_D2D1HueToRgb + + + Constant ChromaKey. + CLSID_D2D1ChromaKey + + + Constant Emboss. + CLSID_D2D1Emboss + + + Constant Exposure. + CLSID_D2D1Exposure + + + Constant Grayscale. + CLSID_D2D1Grayscale + + + Constant Invert. + CLSID_D2D1Invert + + + Constant Posterize. + CLSID_D2D1Posterize + + + Constant Sepia. + CLSID_D2D1Sepia + + + Constant Sharpen. + CLSID_D2D1Sharpen + + + Constant Straighten. + CLSID_D2D1Straighten + + + Constant TemperatureTint. + CLSID_D2D1TemperatureTint + + + Constant Vignette. + CLSID_D2D1Vignette + + + Constant EdgeDetection. + CLSID_D2D1EdgeDetection + + + Constant HighlightsShadows. + CLSID_D2D1HighlightsShadows + + + Constant LookupTable3D. + CLSID_D2D1LookupTable3D + + + Constant Opacity. + CLSID_D2D1Opacity + + + Constant AlphaMask. + CLSID_D2D1AlphaMask + + + Constant CrossFade. + CLSID_D2D1CrossFade + + + Constant Tint. + CLSID_D2D1Tint + + + Constant AffineTransform2D. + CLSID_D2D12DAffineTransform + + + Constant PerspectiveTransform3D. + CLSID_D2D13DPerspectiveTransform + + + Constant Transform3D. + CLSID_D2D13DTransform + + + +

    Gets or sets the number of inputs to the effect.

    +
    + + hh404582 + GetInputCount / SetInputCount + GetInputCount + unsigned int ID2D1Effect::GetInputCount() +
    + + +

    Gets the output image from the effect.

    +
    + +

    The output image can be set as an input to another effect, or can be directly passed into the in order to render the effect.

    It is also possible to use QueryInterface to retrieve the same output image.

    +
    + + hh404585 + GetOutput + GetOutput + void ID2D1Effect::GetOutput([Out] ID2D1Image** outputImage) +
    + + +

    Sets the given input image by index.

    +
    +

    The index of the image to set.

    +

    The input image to set.

    +

    Whether to invalidate the graph at the location of the effect input

    + +

    If the input index is out of range, the input image is ignored.

    +
    + + hh404591 + void ID2D1Effect::SetInput([In] unsigned int index,[In, Optional] ID2D1Image* input,[In] BOOL invalidate) + ID2D1Effect::SetInput +
    + + +

    Allows the application to change the number of inputs to an effect.

    +
    +

    The number of inputs to the effect.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_INVALIDARGOne or more arguments are invalid.
    E_OUTOFMEMORYFailed to allocate necessary memory.

    ?

    + +

    Most effects do not support a variable number of inputs. Use with the and values to determine the number of inputs supported by an effect.

    If the input count is less than the minimum or more than the maximum supported inputs, the call will fail.

    If the input count is unchanged, the call will succeed with .

    Any inputs currently selected on the effect will be unaltered by this call unless the number of inputs is made smaller. If the number of inputs is made smaller, inputs beyond the selected range will be released.

    If the method fails, the existing input and input count will remain unchanged.

    +
    + + hh404594 + HRESULT ID2D1Effect::SetInputCount([In] unsigned int inputCount) + ID2D1Effect::SetInputCount +
    + + +

    Represents a basic image-processing construct in Direct2D.

    +
    + No documentation. + +

    An effect takes zero or more input images, and has an output image. The images that are input into and output from an effect are lazily evaluated. This definition is sufficient to allow an arbitrary graph of effects to be created from the application by feeding output images into the input image of the next effect in the chain.

    +
    + + hh404566 + void ID2D1Effect::GetInput([In] unsigned int index,[Out, Optional] ID2D1Image** input) + ID2D1Effect::GetInput +
    + + +

    Gets the number of inputs to the effect.

    +
    +

    This method returns the number of inputs to the effect.

    + + hh404582 + unsigned int ID2D1Effect::GetInputCount() + ID2D1Effect::GetInputCount +
    + + +

    Gets the output image from the effect.

    +
    +

    When this method returns, contains the address of a reference to the output image for the effect.

    + +

    The output image can be set as an input to another effect, or can be directly passed into the in order to render the effect.

    It is also possible to use QueryInterface to retrieve the same output image.

    +
    + + hh404585 + void ID2D1Effect::GetOutput([Out] ID2D1Image** outputImage) + ID2D1Effect::GetOutput +
    + + + Class used to instantiate custom effects. + + Type of the custom effect + + + + Initializes a new instance of a custom class. + + The device context. + If no sufficient memory to complete the call, or if it does not have enough display memory to perform the operation, or if the specified effect is not registered by the system. + + The created effect does not increment the reference count for the dynamic-link library (DLL) from which the effect was created. If the application deletes an effect while that effect is loaded, the resulting behavior will be unpredictable. + + HRESULT ID2D1DeviceContext::CreateEffect([In] const GUID& effectId,[Out, Fast] ID2D1Effect** effect) + + + + Initializes a new instance of a custom class. + + The device context. + Effect ID. + If no sufficient memory to complete the call, or if it does not have enough display memory to perform the operation, or if the specified effect is not registered by the system. + + The created effect does not increment the reference count for the dynamic-link library (DLL) from which the effect was created. If the application deletes an effect while that effect is loaded, the resulting behavior will be unpredictable. + + HRESULT ID2D1DeviceContext::CreateEffect([In] const GUID& effectId,[Out, Fast] ID2D1Effect** effect) + + + + Initializes a new instance of the class. + + The effect context. + No documentation. + + HRESULT ID2D1EffectContext::CreateEffect([In] const GUID& effectId,[Out] ID2D1Effect** effect) + + + +

    Provides factory methods and other state management for effect and transform authors.

    +
    + +

    This interface is passed to an effect implementation through the method. In order to prevent applications casually gaining access to this interface, and to separate reference counts between the public and private interfaces, it is not possible to call QueryInterface between the and the .

    Each call to ID2D1Effect::Initialize will be provided a different interface. This interface tracks resource allocations for the effect. When the effect is released, the corresponding allocations will also be released.

    +
    + + hh404459 + ID2D1EffectContext + ID2D1EffectContext +
    + + + Gets the DPI. + + + + + Gets the maximum feature level supported by this instance. + + An array of feature levels + The maximum feature level selected from the array + + + + Loads a pixel shader. + + An unique identifier associated with the shader bytecode. + The bytecode of the shader. + HRESULT ID2D1EffectContext::LoadPixelShader([In] const GUID& shaderId,[In, Buffer] const unsigned char* shaderBuffer,[In] unsigned int shaderBufferCount) + + + + Loads a vertex shader. + + An unique identifier associated with the shader bytecode. + The bytecode of the shader. + HRESULT ID2D1EffectContext::LoadVertexShader([In] const GUID& resourceId,[In, Buffer] const unsigned char* shaderBuffer,[In] unsigned int shaderBufferCount) + + + + Loads a compute shader. + + An unique identifier associated with the shader bytecode. + The bytecode of the shader. + HRESULT ID2D1EffectContext::LoadComputeShader([In] const GUID& resourceId,[In, Buffer] const unsigned char* shaderBuffer,[In] unsigned int shaderBufferCount) + + + + Check if this device is supporting a feature. + + The feature to check. + + Returns true if this device supports this feature, otherwise false. + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the unit mapping that an effect will use for properties that could be in either dots per inch (dpi) or pixels.

    +
    +

    The dpi on the x-axis.

    +

    The dpi on the y-axis.

    + +

    If the is , both dpiX and dpiY will be set to 96.

    +
    + + hh404472 + void ID2D1EffectContext::GetDpi([Out] float* dpiX,[Out] float* dpiY) + ID2D1EffectContext::GetDpi +
    + + +

    Creates a Direct2D effect for the specified class ID. This is the same as so custom effects can create other effects and wrap them in a transform.

    +
    + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.
    D3DERR_OUTOFVIDEOMEMORYDirect3D does not have enough display memory to perform the operation.
    The specified effect is not registered by the system.

    ?

    + +

    The created effect does not reference count the DLL from which the effect was created. If the caller unregisters an effect while this effect is loaded, the resulting behavior is unpredictable.

    +
    + + hh404467 + HRESULT ID2D1EffectContext::CreateEffect([In] const GUID& effectId,[Out, Fast] ID2D1Effect** effect) + ID2D1EffectContext::CreateEffect +
    + + +

    This indicates the maximum feature level from the provided list which is supported by the device. If none of the provided levels are supported, then this API fails with .

    +
    +

    The feature levels provided by the application.

    +

    The count of feature levels provided by the application

    +

    The maximum feature level from the featureLevels list which is supported by the D2D device.

    + + hh404473 + HRESULT ID2D1EffectContext::GetMaximumSupportedFeatureLevel([In, Buffer] const D3D_FEATURE_LEVEL* featureLevels,[In] unsigned int featureLevelsCount,[Out] D3D_FEATURE_LEVEL* maximumSupportedFeatureLevel) + ID2D1EffectContext::GetMaximumSupportedFeatureLevel +
    + + +

    Wraps an effect graph into a single transform node and then inserted into a transform graph. This allows an effect to aggregate other effects. This will typically be done in order to allow the effect properties to be re-expressed with a different contract, or to allow different components to integrate each-other?s effects.

    +
    +

    The effect to be wrapped in a transform node.

    +

    The returned transform node that encapsulates the effect graph.

    + + hh404470 + HRESULT ID2D1EffectContext::CreateTransformNodeFromEffect([In] ID2D1Effect* effect,[Out] ID2D1TransformNode** transformNode) + ID2D1EffectContext::CreateTransformNodeFromEffect +
    + + +

    This creates a blend transform that can be inserted into a transform graph.

    +
    +

    The number of inputs to the blend transform.

    +

    Describes the blend transform that is to be created.

    +

    The returned blend transform.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + + hh404461 + HRESULT ID2D1EffectContext::CreateBlendTransform([In] unsigned int numInputs,[In] const D2D1_BLEND_DESCRIPTION* blendDescription,[Out, Fast] ID2D1BlendTransform** transform) + ID2D1EffectContext::CreateBlendTransform +
    + + +

    Creates a transform that extends its input infinitely in every direction based on the passed in extend mode.

    +
    +

    The extend mode in the X-axis direction.

    +

    The extend mode in the Y-axis direction.

    +

    The returned transform.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + + hh404463 + HRESULT ID2D1EffectContext::CreateBorderTransform([In] D2D1_EXTEND_MODE extendModeX,[In] D2D1_EXTEND_MODE extendModeY,[Out, Fast] ID2D1BorderTransform** transform) + ID2D1EffectContext::CreateBorderTransform +
    + + +

    Creates and returns an offset transform.

    +
    +

    The offset amount.

    +

    When this method returns, contains the address of a reference to an offset transform object.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    An offset transform is used to offset an input bitmap without having to insert a rendering pass. An offset transform is automatically inserted by an Affine transform if the transform evaluates to a pixel-aligned transform.

    +
    + + hh404468 + HRESULT ID2D1EffectContext::CreateOffsetTransform([In] POINT offset,[Out, Fast] ID2D1OffsetTransform** transform) + ID2D1EffectContext::CreateOffsetTransform +
    + + +

    Creates and returns a bounds adjustment transform.

    +
    +

    The initial output rectangle for the bounds adjustment transform.

    +

    The returned bounds adjustment transform.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    A support transform can be used for two different reasons.

    • To indicate that a region of its input image is already transparent black. This can increase efficiency for rendering bitmaps. Note??If the indicated region does NOT contain only transparent black pixels, then rendering results are undefined. ?
    • To increase the size of the input image. The expanded area will be treated as transparent black +
    +
    + + hh871456 + HRESULT ID2D1EffectContext::CreateBoundsAdjustmentTransform([In] const RECT* outputRectangle,[Out, Fast] ID2D1BoundsAdjustmentTransform** transform) + ID2D1EffectContext::CreateBoundsAdjustmentTransform +
    + + +

    Loads the given shader by its unique ID. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to JIT, if it hasn?t been already.

    +
    +

    The unique id that identifies the shader.

    +

    The buffer that contains the shader to register.

    +

    The size of the shader buffer in bytes.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    The shader you specify must be compiled, not in raw HLSL code.

    +
    + + hh404476 + HRESULT ID2D1EffectContext::LoadPixelShader([In] const GUID& shaderId,[In, Buffer] const unsigned char* shaderBuffer,[In] unsigned int shaderBufferCount) + ID2D1EffectContext::LoadPixelShader +
    + + +

    Loads the given shader by its unique ID. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to JIT, if it hasn?t been already.

    +
    +

    The unique id that identifies the shader.

    +

    The buffer that contains the shader to register.

    +

    The size of the shader buffer in bytes.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    The shader you specify must be compiled, not in raw HLSL code.

    +
    + + hh404477 + HRESULT ID2D1EffectContext::LoadVertexShader([In] const GUID& resourceId,[In, Buffer] const unsigned char* shaderBuffer,[In] unsigned int shaderBufferCount) + ID2D1EffectContext::LoadVertexShader +
    + + +

    Loads the given shader by its unique ID. Loading the shader multiple times is ignored. When the shader is loaded it is also handed to the driver to JIT, if it hasn?t been already.

    +
    +

    The unique id that identifies the shader.

    +

    The buffer that contains the shader to register.

    +

    The size of the shader buffer in bytes.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    The shader you specify must be compiled, not in raw HLSL code.

    +
    + + hh404475 + HRESULT ID2D1EffectContext::LoadComputeShader([In] const GUID& resourceId,[In, Buffer] const unsigned char* shaderBuffer,[In] unsigned int shaderBufferCount) + ID2D1EffectContext::LoadComputeShader +
    + + +

    This tests to see if the given shader is loaded.

    +
    +

    The unique id that identifies the shader.

    +

    Whether the shader is loaded.

    + + hh404474 + BOOL ID2D1EffectContext::IsShaderLoaded([In] const GUID& shaderId) + ID2D1EffectContext::IsShaderLoaded +
    + + +

    Creates or finds the given resource texture, depending on whether a resource id is specified. It also optionally initializes the texture with the specified data.

    +
    +

    An optional reference to the unique id that identifies the lookup table.

    +

    The properties used to create the resource texture.

    +

    The optional data to be loaded into the resource texture.

    +

    An optional reference to the stride to advance through the resource texture, according to dimension.

    +

    The size, in bytes, of the data.

    +

    The returned texture that can be used as a resource in a Direct2D effect.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + + hh404469 + HRESULT ID2D1EffectContext::CreateResourceTexture([In, Optional] const GUID* resourceId,[In] const void* resourceTextureProperties,[In, Buffer, Optional] const unsigned char* data,[In, Buffer, Optional] const unsigned int* strides,[In] unsigned int dataSize,[Out, Fast] ID2D1ResourceTexture** resourceTexture) + ID2D1EffectContext::CreateResourceTexture +
    + + +

    Finds the given resource texture if it has already been created with with the same .

    +
    + No documentation. + No documentation. + + hh871457 + HRESULT ID2D1EffectContext::FindResourceTexture([In] const GUID* resourceId,[Out] ID2D1ResourceTexture** resourceTexture) + ID2D1EffectContext::FindResourceTexture +
    + + +

    Creates a vertex buffer or finds a standard vertex buffer and optionally initializes it with vertices. The returned buffer can be specified in the render info to specify both a vertex shader and or to pass custom vertices to the standard vertex shader used by Direct2D.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + + hh404471 + HRESULT ID2D1EffectContext::CreateVertexBuffer([In] const D2D1_VERTEX_BUFFER_PROPERTIES* vertexBufferProperties,[In, Optional] const GUID* resourceId,[In, Optional] const void* customVertexBufferProperties,[Out, Fast] ID2D1VertexBuffer** buffer) + ID2D1EffectContext::CreateVertexBuffer +
    + + +

    This finds the given vertex buffer if it has already been created with with the same .

    +
    + No documentation. + No documentation. + + hh871458 + HRESULT ID2D1EffectContext::FindVertexBuffer([In] const GUID* resourceId,[Out] ID2D1VertexBuffer** buffer) + ID2D1EffectContext::FindVertexBuffer +
    + + +

    Creates a color context from a color space.

    If the color space is Custom, the context is initialized from the profile and profileSize parameters.

    If the color space is not Custom, the context is initialized with the profile bytes associated with the color space. The profile and profileSize parameters are ignored.

    +
    +

    The space of color context to create.

    +

    A buffer containing the ICC profile bytes used to initialize the color context when space is . For other types, the parameter is ignored and should be set to null.

    +

    The size in bytes of Profile.

    +

    When this method returns, contains the address of a reference to a new color context object.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + + hh404464 + HRESULT ID2D1EffectContext::CreateColorContext([In] D2D1_COLOR_SPACE space,[In, Buffer, Optional] const unsigned char* profile,[In] unsigned int profileSize,[Out, Fast] ID2D1ColorContext** colorContext) + ID2D1EffectContext::CreateColorContext +
    + + +

    Creates a color context by loading it from the specified filename. The profile bytes are the contents of the file specified by filename.

    +
    +

    The path to the file containing the profile bytes to initialize the color context with.

    +

    When this method returns, contains the address of a reference to a new color context.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + + hh404465 + HRESULT ID2D1EffectContext::CreateColorContextFromFilename([In] const wchar_t* filename,[Out, Fast] ID2D1ColorContext** colorContext) + ID2D1EffectContext::CreateColorContextFromFilename +
    + + +

    Creates a color context from an . The D2D1ColorContext space of the resulting context varies, see Remarks for more info.

    +
    + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    The new color context can be used in to initialize the color context of a created bitmap. The model field of the profile header is inspected to determine whether this profile is sRGB or scRGB and the color space is updated respectively. Otherwise the space is custom.

    +
    + + hh404466 + HRESULT ID2D1EffectContext::CreateColorContextFromWicColorContext([In] IWICColorContext* wicColorContext,[Out, Fast] ID2D1ColorContext** colorContext) + ID2D1EffectContext::CreateColorContextFromWicColorContext +
    + + +

    This indicates whether an optional capability is supported by the D3D device.

    +
    +

    The feature to query support for.

    +

    A structure indicating information about how or if the feature is supported.

    +

    The size of the featureSupportData parameter.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + + hh871455 + HRESULT ID2D1EffectContext::CheckFeatureSupport([In] D2D1_FEATURE feature,[Out, Buffer] void* featureSupportData,[In] unsigned int featureSupportDataSize) + ID2D1EffectContext::CheckFeatureSupport +
    + + +

    Indicates whether the buffer precision is supported by the underlying Direct2D device.

    +
    + No documentation. +

    Returns TRUE if the buffer precision is supported. Returns if the buffer precision is not supported.

    + + hh847981 + BOOL ID2D1EffectContext::IsBufferPrecisionSupported([In] D2D1_BUFFER_PRECISION bufferPrecision) + ID2D1EffectContext::IsBufferPrecisionSupported +
    + + +

    Describes features of an effect.

    +
    + + Note??The caller should not rely heavily on the input rectangles returned by this structure. They can change due to subtle changes in effect implementations and due to optimization changes in the effect rendering system.? + + + hh404305 + D2D1_EFFECT_INPUT_DESCRIPTION + D2D1_EFFECT_INPUT_DESCRIPTION +
    + + + Gets or sets the effect. + + + + +

    The effect whose input connection is being specified.

    +
    + + hh404305 + ID2D1Effect* effect + ID2D1Effect effect +
    + + +

    The input index of the effect that is being considered.

    +
    + + hh404305 + unsigned int inputIndex + unsigned int inputIndex +
    + + +

    The amount of data that would be available on the input. This can be used to query this information when the data is not yet available.

    +
    + + hh404305 + D2D_RECT_F inputRectangle + D2D_RECT_F inputRectangle +
    + + + Built in AffineTransform2D effect. + + + + + Initializes a new instance of effect. + + + + + + The interpolation mode used to scale the image. There are 6 scale modes that range in quality and speed. + If you don't select a mode, the effect uses the interpolation mode of the device context. + See for more info. + + + + + The mode used to calculate the border of the image, soft or hard. See modes for more info. + + + + + The 3x2 matrix to transform the image using the Direct2D matrix transform. + + + + + In the high quality cubic interpolation mode, the sharpness level of the scaling filter as a float between 0 and 1. + The values are unitless. You can use sharpness to adjust the quality of an image when you scale the image. + The sharpness factor affects the shape of the kernel. The higher the sharpness factor, the smaller the kernel. + + + This property affects only the high quality cubic interpolation mode. + + + + + Built in ArithmeticComposite effect. + + + + + Initializes a new instance of effect. + + + + + + The coefficients for the equation used to composite the two input images. The coefficients are unitless and unbounded. + + + + + Whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. The effect clamps the values before it premultiplies the alpha. + if you set this to TRUE the effect will clamp the values. If you set this to FALSE, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. + + + + + Built in Atlas effect. + + + + + Initializes a new instance of effect. + + + + + + The portion of the image passed to the next effect. + + + + + The portion of the image passed to the next effect. + + + + + Built in BitmapSource effect. + + + + + Initializes a new instance of effect. + + + + + + The containing the image data to be loaded. + + + + + The scale amount in the X and Y direction. + The effect multiplies the width by the X value and the height by the Y value. + This property is a defined as: (X scale, Y scale). The scale amounts are FLOAT, unitless, and must be positive or 0. + + + + + The interpolation mode used to scale the image. See Interpolation modes for more info. + If the mode disables the mipmap, then BitmapSouce will cache the image at the resolution determined by the Scale and EnableDPICorrection properties. + + + + + If you set this to true, the effect will scale the input image to convert the DPI reported by IWICBitmapSource to the DPI of the device context. + The effect uses the interpolation mode you set with the InterpolationMode property. + If you set this to false, the effect uses a DPI of 96.0 for the output image. + + + + + The alpha mode of the output. This can be either premultiplied or straight. See Alpha modes for more info. + + + + + A flip and/or rotation operation to be performed on the image. See Orientation for more info. + + + + + Built in Blend effect. + + + + + Initializes a new instance of effect. + + + + + + The blend mode used for the effect. See Blend modes for more info. + + + + + Built in Border effect. + + + + + Initializes a new instance of effect. + + + + + + The edge mode in the X direction for the effect. You can set this to clamp, wrap, or mirror. See Edge modes for more info. + + + + + The edge mode in the Y direction for the effect. You can set this to clamp, wrap, or mirror. See Edge modes for more info. + + + + + Built in Brightness effect. + + + + + Initializes a new instance of effect. + + + + + + The upper portion of the brightness transfer curve. The white point adjusts the appearance of the brighter portions of the image. This property is for both the x value and the y value, in that order. Each of the values of this property are between 0 and 1, inclusive. + + + + + The lower portion of the brightness transfer curve. The black point adjusts the appearance of the darker portions of the image. This property is for both the x value and the y value, in that order. Each of the values of this property are between 0 and 1, inclusive. + + + + + Built in ColorManagement effect. + + + + + Initializes a new instance of effect. + + + + + + The source color context. Default null + + + + + The rendering intent for the source context. + + + + + The destination color context. Default null + + + + + The rendering intent for the destination context. + + + + + The alpha mode of this color management. + + + + + Built in ColorMatrix effect. + + + + + Initializes a new instance of effect. + + + + + + A 5x4 matrix of float values. The elements in the matrix are not bounded and are unitless. + The default is the identity matrix. + + + + + The alpha mode of the output. This can be either premultiplied or straight. See Alpha modes for more info. + + + + + Whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. The effect clamps the values before it premultiplies the alpha . + if you set this to TRUE the effect will clamp the values. + If you set this to FALSE, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. + + + + + Built in Composite effect. + + + + + Initializes a new instance of effect. + + + + + + The mode used for the effect. + + + + + Built in ConvolveMatrix effect. + + + + + Initializes a new instance of effect. + + + + + + The size of one unit in the kernel. The units are in (DIPs/kernel unit), where a kernel unit is the size of the element in the convolution kernel. A value of 1 (DIP/kernel unit) corresponds to one pixel in a image at 96 DPI. + + + + + The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed. If you don't select a mode, the effect uses the interpolation mode of the device context. See Scale modes for more info + + + + + The width of the kernel matrix. The units are specified in kernel units. + + + + + The height of the kernel matrix. The units are specified in kernel units. + + + + + The kernel matrix to be applied to the image. The kernel elements aren't bounded and are specified as floats. + The first set of KernelSizeX numbers in the FLOAT[] corresponds to the first row in the kernel. + The second set of KernelSizeX numbers correspond to the second row, and so on up to KernelSizeY rows. + + + + + The kernel matrix is applied to a pixel and then the result is divided by this value. 0 behaves as a value of float epsilon. + + + + + The effect applies the kernel matrix, the divisor, and then the bias is added to the result. The bias is unbounded and unitless. + + + + + Shifts the convolution kernel from a centered position on the output pixel to a position you specify left/right and up/down. The offset is defined in kernel units. + With some offsets and kernel sizes, the convolution kernel’s samples won't land on a pixel image center. The pixel values for the kernel sample are computed by bilinear interpolation. + + + + + Specifies whether the convolution kernel is applied to the alpha channel or only the color channels. + If you set this to TRUE the convolution kernel is applied only to the color channels. + If you set this to FALSE the convolution kernel is applied to all channels. + + + + + The mode used to calculate the border of the image, soft or hard. See modes for more info. + + + + + Whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. The effect clamps the values before it premultiplies the alpha . + if you set this to TRUE the effect will clamp the values. + If you set this to FALSE, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. + + + + + Built in Crop effect. + + + + + Initializes a new instance of effect. + + + + + + The region to be cropped specified as a vector in the form (left, top, width, height). The units are in DIPs. + + + The rectangle will be truncated if it overlaps the edge boundaries of the input image. + + + + + Built in DirectionalBlur effect. + + + + + Initializes a new instance of effect. + + + + + + Gets or sets the amount of blur to be applied to the image. Default: 1.0f + + + You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are DIPs. A value of zero DIPs disables this effect entirely. + + + + + The angle of the blur relative to the x-axis, in the counterclockwise direction. The units are specified in degrees. + The blur kernel is first generated using the same process as for the Gaussian Blur effect. The kernel values are then transformed according to the blur angle using this equation and then applied to the bitmap. + offset2D – amount of transformation introduced in the blur kernel as a result of the blur angle. + dist – distance from the center of the kernel to the current position in the kernel. offset2d = (dist * cos(⁡θ), dist * sin(⁡θ) ) + + + You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are DIPs. A value of zero DIPs disables this effect entirely. + + + + + The optimization mode. See modes for more info. + + + Default value is . + + + + + The mode used to calculate the border of the image, soft or hard. See modes for more info. + + + + + Built in DiscreteTransfer effect. + + + + + Initializes a new instance of effect. + + + + + + The list of values used to define the transfer function for the Red channel. + + + + + If you set this to TRUE the effect does not apply the transfer function to the Red channel. If you set this to FALSE the effect applies the RedDiscreteTransfer function to the Red channel. + + + + + The list of values that define the transfer function for the Green channel. + + + + + If you set this to TRUE the effect does not apply the transfer function to the Green channel. If you set this to FALSE the effect applies the GreenDiscreteTransfer function to the Green channel. + + + + + The list of values that define the transfer function for the Blue channel. + + + + + If you set this to TRUE the effect does not apply the transfer function to the Blue channel. If you set this to FALSE the effect applies the BlueDiscreteTransfer function to the Blue channel. + + + + + The list of values that define the transfer function for the Alpha channel. + + + + + If you set this to TRUE the effect does not apply the transfer function to the Alpha channel. If you set this to FALSE the effect applies the AlphaDiscreteTransfer function to the Alpha channel. + + + + + Whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. The effect clamps the values before it premultiplies the alpha . + if you set this to TRUE the effect will clamp the values. + If you set this to FALSE, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. + + + + + Built in DisplacementMap effect. + + + + + Initializes a new instance of effect. + + + + + + Multiplies the intensity of the selected channel from the displacement image. The higher you set this property, the more the effect displaces the pixels + + + + + The effect extracts the intensity from this color channel and uses it to spatially displace the image in the X direction. See Color channels for more info. + + + + + The effect extracts the intensity from this color channel and uses it to spatially displace the image in the Y direction. See Color channels for more info. + + + + + Built in DistantDiffuse effect. + + + + + Initializes a new instance of effect. + + + + + + The direction angle of the light source in the XY plane relative to the X-axis in the counter clock wise direction. The units are in degrees and must be between 0 and 360 degrees. + + + + + The direction angle of the light source in the YZ plane relative to the Y-axis in the counter clock wise direction. The units are in degrees and must be between 0 and 360 degrees. + + + + + The ratio of diffuse reflection to amount of incoming light. This property must be between 0 and 10,000 and is unitless. + + + + + The scale factor in the Z direction. The value is unitless and must be between 0 and 10,000. + + + + + The color of the incoming light. This property is exposed as a – (R, G, B) and used to compute LR, LG, LB. + + + + + The size of an element in the Sobel kernel used to generate the surface normal in the X and Y direction. + This property maps to the dx and dy values in the Sobel gradient. + This property is a (Kernel Unit Length X, Kernel Unit Length Y) and is defined in (device-independent pixels (DIPs)/Kernel Unit). + The effect uses bilinear interpolation to scale the bitmap to match size of kernel elements. + + + + + The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. + There are six scale modes that range in quality and speed. + If you don't select a mode, the effect uses the interpolation mode of the device context. + See Scale modes for more info. + + + + + Built in DistantSpecular effect. + + + + + Initializes a new instance of effect. + + + + + + The direction angle of the light source in the XY plane relative to the X-axis in the counter clock wise direction. The units are in degrees and must be between 0 and 360 degrees. + + + + + The direction angle of the light source in the YZ plane relative to the Y-axis in the counter clock wise direction. The units are in degrees and must be between 0 and 360 degrees. + + + + + The exponent for the specular term in the Phong lighting equation. A larger value corresponds to a more reflective surface. The value is unitless and must be between 1.0 and 128. + + + + + The ratio of specular reflection to the incoming light. The value is unitless and must be between 0 and 10,000. + + + + + The scale factor in the Z direction. The value is unitless and must be between 0 and 10,000. + + + + + The color of the incoming light. This property is exposed as a – (R, G, B) and used to compute LR, LG, LB. + + + + + The size of an element in the Sobel kernel used to generate the surface normal in the X and Y direction. + This property maps to the dx and dy values in the Sobel gradient. + This property is a (Kernel Unit Length X, Kernel Unit Length Y) and is defined in (device-independent pixels (DIPs)/Kernel Unit). + The effect uses bilinear interpolation to scale the bitmap to match size of kernel elements. + + + + + The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed. If you don't select a mode, the effect uses the interpolation mode of the device context. See Scale modes for more info. + + + + + Built in DpiCompensation effect. + + + + + Initializes a new instance of effect. + + + + + + The Dpi interpolation mode. + + + + + The mode used to calculate the border of the image, soft or hard. See modes for more info. + + + + + The input dpi. + + + + + Built in Flood effect. + + + + + Initializes a new instance of effect. + + + + + + The color and opacity of the bitmap. This property is a . + The individual values for each channel are of type FLOAT, unbounded and unitless. + The effect doesn't modify the values for the channels. + The RGBA values for each channel range from 0 to 1. + + + + + Built in GammaTransfer effect. + + + + + Initializes a new instance of effect. + + + + + + The amplitude of the gamma transfer function for the Red channel. + + + + + The exponent of the gamma transfer function for the Red channel. + + + + + The offset of the gamma transfer function for the Red channel. + + + + + If you set this to TRUE it does not apply the transfer function to the Red channel. An identity transfer function is used. If you set this to FALSE it applies the gamma transfer function to the Red channel. + + + + + The amplitude of the gamma transfer function for the Green channel. + + + + + The exponent of the gamma transfer function for the Green channel. + + + + + The offset of the gamma transfer function for the Green channel. + + + + + If you set this to TRUE it does not apply the transfer function to the Green channel. An identity transfer function is used. If you set this to FALSE it applies the gamma transfer function to the Green channel. + + + + + The amplitude of the gamma transfer function for the Blue channel. + + + + + The exponent of the gamma transfer function for the Blue channel. + + + + + The offset of the gamma transfer function for the Blue channel. + + + + + If you set this to TRUE it does not apply the transfer function to the Blue channel. An identity transfer function is used. If you set this to FALSE it applies the gamma transfer function to the Blue channel. + + + + + The amplitude of the gamma transfer function for the Alpha channel. + + + + + The exponent of the gamma transfer function for the Alpha channel. + + + + + The offset of the gamma transfer function for the Alpha channel. + + + + + If you set this to TRUE it does not apply the transfer function to the Alpha channel. An identity transfer function is used. If you set this to FALSE it applies the gamma transfer function to the Alpha channel. + + + + + Whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. The effect clamps the values before it premultiplies the alpha . + if you set this to TRUE the effect will clamp the values. + If you set this to FALSE, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. + + + + + Built in GaussianBlur effect. + + + + + Initializes a new instance of effect. + + + + + + Gets or sets the amount of blur to be applied to the image. Default: 1.0f + + + You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are DIPs. A value of zero DIPs disables this effect entirely. + + + + + The optimization mode. See modes for more info. + + + Default value is . + + + + + The mode used to calculate the border of the image, soft or hard. See modes for more info. + + + + + Built in Histogram effect. + + + + + Initializes a new instance of effect. + + + + + + Specifies the number of bins used for the histogram. The range of intensity values that fall into a particular bucket depend on the number of specified buckets. + + + + + Specifies the channel used to generate the histogram. This effect has a single data output corresponding to the specified channel. See Channel selectors for more info. + + + + + The output array. + + + + + Built in HueRotate effect. + + + + + Initializes a new instance of effect. + + + + + + The angle to rotate the hue, in degrees. + + + + + Built in LinearTransfer effect. + + + + + Initializes a new instance of effect. + + + + + + TThe Y-intercept of the linear function for the Red channel. + + + + + The slope of the linear function for the Red channel. + + + + + If you set this to TRUE it does not apply the transfer function to the Red channel. An identity transfer function is used. If you set this to FALSE it applies the gamma transfer function to the Red channel. + + + + + The Y-intercept of the linear function for the Green channel. + + + + + The slope of the linear function for the Green channel. + + + + + If you set this to TRUE it does not apply the transfer function to the Green channel. An identity transfer function is used. If you set this to FALSE it applies the gamma transfer function to the Green channel. + + + + + The Y-intercept of the linear function for the Blue channel. + + + + + The slope of the linear function for the Blue channel. + + + + + If you set this to TRUE it does not apply the transfer function to the Blue channel. An identity transfer function is used. If you set this to FALSE it applies the gamma transfer function to the Blue channel. + + + + + The Y-intercept of the linear function for the Alpha channel. + + + + + The slope of the linear function for the Alpha channel. + + + + + If you set this to TRUE it does not apply the transfer function to the Alpha channel. An identity transfer function is used. If you set this to FALSE it applies the gamma transfer function to the Alpha channel. + + + + + Whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. The effect clamps the values before it premultiplies the alpha . + if you set this to TRUE the effect will clamp the values. + If you set this to FALSE, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. + + + + + Built in LuminanceToAlpha effect. + + + + + Initializes a new instance of effect. + + + + + + Built in Morphology effect. + + + + + Initializes a new instance of effect. + + + + + + The morphology mode. The available modes are erode (flatten) and dilate (thicken). + See Morphology modes for more info. + + + + + Size of the kernel in the X direction. The units are in DIPs. + + + + + Size of the kernel in the Y direction. The units are in DIPs. + + + + + The namespace provides a managed Direct2D1 built in Effects API. + + hh706327 + Direct2D1 Effects + Direct2D1 Effects + + + + Marks an area of an input image as opaque, so internal rendering optimizations to the graph are possible. + + + This effect doesn't modify the image itself to be opaque. It modifies data associated with the image so the renderer assumes the specified region is opaque. + + + + + Creates a new instance of the class. + + The device context where this effect is attached to. + + + + The portion of the source image that is opaque. The default is the entire input image. + + + + + Rotates the image in 3 dimensions as if viewed from a distance. + + + The is more convenient than the effect, but only exposes a subset of the functionality. You can compute a full 3D transformation matrix and apply a more arbitrary transform matrix to an image using the effect. + + + + + Creates a new instance of the class. + + The device context where this effect is attached to. + + + + Image interpolation mode. + + + + + The border mode. + + + + + The perspective depth. + + + + + The perspective origin. + + + + + The transformation local offset. + + + + + The transformation global offset. + + + + + The transformation rotation origin. + + + + + The transformation rotation. + + + + + Built in PointDiffuse effect. + + + + + Initializes a new instance of effect. + + + + + + The light position of the point light source. The property is a D2D1_VECTOR_3F defined as (x, y, z). The units are in device-independent pixels (DIPs) and the values are unitless and unbounded. + + + + + The ratio of diffuse reflection to amount of incoming light. This property must be between 0 and 10,000 and is unitless. + + + + + The scale factor in the Z direction. The value is unitless and must be between 0 and 10,000. + + + + + The color of the incoming light. This property is exposed as a – (R, G, B) and used to compute LR, LG, LB. + + + + + The size of an element in the Sobel kernel used to generate the surface normal in the X and Y direction. + This property maps to the dx and dy values in the Sobel gradient. + This property is a (Kernel Unit Length X, Kernel Unit Length Y) and is defined in (device-independent pixels (DIPs)/Kernel Unit). + The effect uses bilinear interpolation to scale the bitmap to match size of kernel elements. + + + + + The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. + There are six scale modes that range in quality and speed. + If you don't select a mode, the effect uses the interpolation mode of the device context. + See Scale modes for more info. + + + + + Built in PointSpecular effect. + + + + + Initializes a new instance of effect. + + + + + + The light position of the point light source. The property is a D2D1_VECTOR_3F defined as (x, y, z). The units are in device-independent pixels (DIPs) and the values are unitless and unbounded. + + + + + The exponent for the specular term in the Phong lighting equation. A larger value corresponds to a more reflective surface. The value is unitless and must be between 1.0 and 128. + + + + + The ratio of specular reflection to the incoming light. The value is unitless and must be between 0 and 10,000. + + + + + The scale factor in the Z direction. The value is unitless and must be between 0 and 10,000. + + + + + The color of the incoming light. This property is exposed as a – (R, G, B) and used to compute LR, LG, LB. + + + + + The size of an element in the Sobel kernel used to generate the surface normal in the X and Y direction. + This property maps to the dx and dy values in the Sobel gradient. + This property is a (Kernel Unit Length X, Kernel Unit Length Y) and is defined in (device-independent pixels (DIPs)/Kernel Unit). + The effect uses bilinear interpolation to scale the bitmap to match size of kernel elements. + + + + + The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed. If you don't select a mode, the effect uses the interpolation mode of the device context. See Scale modes for more info. + + + + + Built in Premultiply effect. + + + + + Initializes a new instance of effect. + + + + + + Built in Saturation effect. + + + + + Initializes a new instance of effect. + + + + + + The saturation of the image. You can set the saturation to a value between 0 and 1. If you set it to 1 the output image is fully saturated. If you set it to 0 the output image is monochrome. The saturation value is unitless. + + + + + Built in Scale effect. + + + + + Initializes a new instance of effect. + + + + + + The scale amount in the X and Y direction as a ratio of the output size to the input size. This property a defined as: (X scale, Y scale). The scale amounts are FLOAT, unitless, and must be positive or 0. + + + + + The image scaling center point. This property is a defined as: (point X, point Y). The units are in DIPs. + Use the center point property to scale around a point other than the upper-left corner. + + + + + The mode used to calculate the border of the image, soft or hard. See Border modes for more info. + + + + + In the high quality cubic interpolation mode, the sharpness level of the scaling filter as a float between 0 and 1. The values are unitless. You can use sharpness to adjust the quality of an image when you scale the image down. + The sharpness factor affects the shape of the kernel. The higher the sharpness factor, the smaller the kernel. + + + This property affects only the high quality cubic interpolation mode. + + + + + The interpolation mode the effect uses to scale the image. + There are 6 scale modes that range in quality and speed. + If you don't select a mode, the effect uses the interpolation mode of the device context. See Interpolation modes for more info. + + + + + Built in Shadow effect. + + + + + Initializes a new instance of effect. + + + + + + The amount of blur to be applied to the alpha channel of the image. You can compute the blur radius of the kernel by multiplying the standard deviation by 3. The units of both the standard deviation and blur radius are DIPs. + This property is the same as the Gaussian Blur standard deviation property. + + + + + The color of the drop shadow. This property is a defined as: (R, G, B, A). + + + + + The level of performance optimization. + + + + + Builtin SpotDiffuse effect. + + + + + Initializes a new instance of effect. + + + + + + The light position of the point light source. The property is a defined as (x, y, z). The units are in device-independent pixels (DIPs) and the values are unitless and unbounded. + + + + + Where the spot light is focused. The property is exposed as a with – (x, y, z). The units are in DIPs and the values are unbounded. + + + + + The focus of the spot light. This property is unitless and is defined between 0 and 200. + + + + + The cone angle that restricts the region where the light is projected. No light is projected outside the cone. The limiting cone angle is the angle between the spot light axis (the axis between the LightPosition and PointsAt properties) and the spot light cone. This property is defined in degrees and must be between 0 to 90 degrees. + + + + + The ratio of diffuse reflection to amount of incoming light. This property must be between 0 and 10,000 and is unitless. + + + + + The scale factor in the Z direction. The value is unitless and must be between 0 and 10,000. + + + + + The color of the incoming light. This property is exposed as a – (R, G, B) and used to compute LR, LG, LB. + + + + + The size of an element in the Sobel kernel used to generate the surface normal in the X and Y direction. + This property maps to the dx and dy values in the Sobel gradient. + This property is a (Kernel Unit Length X, Kernel Unit Length Y) and is defined in (device-independent pixels (DIPs)/Kernel Unit). + The effect uses bilinear interpolation to scale the bitmap to match size of kernel elements. + + + + + The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. + There are six scale modes that range in quality and speed. + If you don't select a mode, the effect uses the interpolation mode of the device context. + See Scale modes for more info. + + + + + Built in SpotSpecular effect. + + + + + Initializes a new instance of effect. + + + + + + The light position of the point light source. The property is a D2D1_VECTOR_3F defined as (x, y, z). The units are in device-independent pixels (DIPs) and the values are unitless and unbounded. + + + + + Where the spot light is focused. The property is exposed as a with – (x, y, z). The units are in DIPs and the values are unbounded. + + + + + The focus of the spot light. This property is unitless and is defined between 0 and 200. + + + + + The cone angle that restricts the region where the light is projected. No light is projected outside the cone. The limiting cone angle is the angle between the spot light axis (the axis between the LightPosition and PointsAt properties) and the spot light cone. This property is defined in degrees and must be between 0 to 90 degrees. + + + + + The exponent for the specular term in the Phong lighting equation. A larger value corresponds to a more reflective surface. The value is unitless and must be between 1.0 and 128. + + + + + The ratio of specular reflection to the incoming light. The value is unitless and must be between 0 and 10,000. + + + + + The scale factor in the Z direction. The value is unitless and must be between 0 and 10,000. + + + + + The color of the incoming light. This property is exposed as a – (R, G, B) and used to compute LR, LG, LB. + + + + + The size of an element in the Sobel kernel used to generate the surface normal in the X and Y direction. + This property maps to the dx and dy values in the Sobel gradient. + This property is a (Kernel Unit Length X, Kernel Unit Length Y) and is defined in (device-independent pixels (DIPs)/Kernel Unit). + The effect uses bilinear interpolation to scale the bitmap to match size of kernel elements. + + + + + The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed. If you don't select a mode, the effect uses the interpolation mode of the device context. See Scale modes for more info. + + + + + Built in TableTransfer effect. + + + + + Initializes a new instance of effect. + + + + + + The list of values used to define the transfer function for the Red channel. + + + + + If you set this to TRUE the effect does not apply the transfer function to the Red channel. If you set this to FALSE the effect applies the RedTableTransfer function to the Red channel. + + + + + The list of values that define the transfer function for the Green channel. + + + + + If you set this to TRUE the effect does not apply the transfer function to the Green channel. If you set this to FALSE the effect applies the GreenTableTransfer function to the Green channel. + + + + + The list of values that define the transfer function for the Blue channel. + + + + + If you set this to TRUE the effect does not apply the transfer function to the Blue channel. If you set this to FALSE the effect applies the BlueTableTransfer function to the Blue channel. + + + + + The list of values that define the transfer function for the Alpha channel. + + + + + If you set this to TRUE the effect does not apply the transfer function to the Alpha channel. If you set this to FALSE the effect applies the AlphaTableTransfer function to the Alpha channel. + + + + + Whether the effect clamps color values to between 0 and 1 before the effect passes the values to the next effect in the graph. The effect clamps the values before it premultiplies the alpha . + if you set this to TRUE the effect will clamp the values. + If you set this to FALSE, the effect will not clamp the color values, but other effects and the output surface may clamp the values if they are not of high enough precision. + + + + + Built in Tile effect. + + + + + Initializes a new instance of effect. + + + + + + The region to be tiled specified as a vector in the form (left, top, width, height). The units are in DIPs. + + + + + Built in Transform3D effect. + + + + + Initializes a new instance of effect. + + + + + + The interpolation mode used to scale the image. There are 6 scale modes that range in quality and speed. + If you don't select a mode, the effect uses the interpolation mode of the device context. + See for more info. + + + + + The mode used to calculate the border of the image, soft or hard. See modes for more info. + + + + + A 4x4 transform matrix applied to the projection plane. + + + + + Built in Turbulence effect. + + + + + Initializes a new instance of effect. + + + + + + The coordinates where the turbulence output is generated. + The algorithm used to generate the Perlin noise is position dependent, so a different offset results in a different output. This property is not bounded and the units are specified in DIPs + + + The offset does not have the same effect as a translation because the noise function output is infinite and the function will wrap around the tile. + + + + + The base frequencies in the X and Y direction.. This property is a float and must be greater than 0. The units are specified in 1/DIPs. + A value of 1 (1/DIPs) for the base frequency results in the Perlin noise completing an entire cycle between two pixels. The ease interpolation for these pixels results in completely random pixels, since there is no correlation between the pixels. + A value of 0.1(1/DIPs) for the base frequency, the Perlin noise function repeats every 10 DIPs. This results in correlation between pixels and the typical turbulence effect is visible + + + + + The number of octaves for the noise function. This property is an int and must be greater than 0. + + + + + The seed for the pseudo random generator. This property is unbounded. + + + + + The turbulence noise mode. This property can be either fractal sum or turbulence. Indicates whether to generate a bitmap based on Fractal Noise or the Turbulence function. See Noise modes for more info. + + + + + Turns stitching on or off. The base frequency is adjusted so that output bitmap can be stitched. This is useful if you want to tile multiple copies of the turbulence effect output. + true: The output bitmap can be tiled (using the tile effect) without the appearance of seams. The base frequency is adjusted so that output bitmap can be stitched. + false: The base frequency is not adjusted, so seams may appear between tiles if the bitmap is tiled. + + + + + Built in Premultiply effect. + + + + + Initializes a new instance of effect. + + + + + + The built-in YCbCr effect. + + + + + Initializes a new instance of the effect. + + The device context where this effect instance is attached to. + + + + Gets or sets the chroma subsampling of the input chroma image. + + + + + Gets or sets the axis-aligned affine transform of the image. Axis aligned transforms include Scale, Flips, and 90 degree rotations. + + + + + Gets or sets the interpolation mode. + + + + +

    Contains the center point, x-radius, and y-radius of an ellipse.

    +
    + + dd368097 + D2D1_ELLIPSE + D2D1_ELLIPSE +
    + + + Initializes a new instance of the struct. + + The center. + The radius X. + The radius Y. + + + +

    The center point of the ellipse.

    +
    + + dd368097 + D2D_POINT_2F point + D2D_POINT_2F point +
    + + +

    The X-radius of the ellipse.

    +
    + + dd368097 + float radiusX + float radiusX +
    + + +

    The Y-radius of the ellipse.

    +
    + + dd368097 + float radiusY + float radiusY +
    + + +

    Represents an ellipse.

    +
    + + dd371239 + ID2D1EllipseGeometry + ID2D1EllipseGeometry +
    + + + Creates an . + + an instance of + A value that describes the center point, x-radius, and y-radius of the ellipse geometry. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the structure that describes this ellipse geometry.

    +
    + + dd371243 + GetEllipse + GetEllipse + void ID2D1EllipseGeometry::GetEllipse([Out] D2D1_ELLIPSE* ellipse) +
    + + +

    Gets the structure that describes this ellipse geometry.

    +
    + No documentation. + + dd371243 + void ID2D1EllipseGeometry::GetEllipse([Out] D2D1_ELLIPSE* ellipse) + ID2D1EllipseGeometry::GetEllipse +
    + + +

    Creates Direct2D resources.

    +
    + +

    The interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes.

    A factory defines a set of CreateResource methods that can produce the following drawing resources:

    • Render targets: objects that render drawing commands.
    • Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.
    • Geometries: objects that represent simple and potentially complex shapes.

    To create an , you use one of the CreateFactory methods. You should retain the instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.

    +
    + + dd371246 + ID2D1Factory + ID2D1Factory +
    + + + Default Constructor for a . + + + + + Default Constructor for a . + + + + + Default Constructor for a . + + + + + Retrieves the current desktop dots per inch (DPI). To refresh this value, call {{ReloadSystemMetrics}}. + + + Use this method to obtain the system DPI when setting physical pixel values, such as when you specify the size of a window. + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Forces the factory to refresh any system defaults that it might have changed since factory creation.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    You should call this method before calling the GetDesktopDpi method, to ensure that the system DPI is current.

    +
    + + dd371319 + HRESULT ID2D1Factory::ReloadSystemMetrics() + ID2D1Factory::ReloadSystemMetrics +
    + + +

    Retrieves the current desktop dots per inch (DPI). To refresh this value, call ReloadSystemMetrics.

    +
    + No documentation. + No documentation. + +

    Use this method to obtain the system DPI when setting physical pixel values, such as when you specify the size of a window.

    +
    + + dd371316 + void ID2D1Factory::GetDesktopDpi([Out] float* dpiX,[Out] float* dpiY) + ID2D1Factory::GetDesktopDpi +
    + + +

    Creates an .

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371289 + HRESULT ID2D1Factory::CreateRectangleGeometry([In] const D2D_RECT_F* rectangle,[Out, Fast] ID2D1RectangleGeometry** rectangleGeometry) + ID2D1Factory::CreateRectangleGeometry +
    + + +

    Creates an .

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371293 + HRESULT ID2D1Factory::CreateRoundedRectangleGeometry([In] const D2D1_ROUNDED_RECT* roundedRectangle,[Out, Fast] ID2D1RoundedRectangleGeometry** roundedRectangleGeometry) + ID2D1Factory::CreateRoundedRectangleGeometry +
    + + +

    Creates an .

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371270 + HRESULT ID2D1Factory::CreateEllipseGeometry([In] const D2D1_ELLIPSE* ellipse,[Out, Fast] ID2D1EllipseGeometry** ellipseGeometry) + ID2D1Factory::CreateEllipseGeometry +
    + + +

    Creates an , which is an object that holds other geometries.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. To create a object, call the CreateGeometryGroup method on the object, passing in the fillMode with possible values of (alternate) and , an array of geometry objects to add to the geometry group, and the number of elements in this array.

    +
    + + dd371273 + HRESULT ID2D1Factory::CreateGeometryGroup([In] D2D1_FILL_MODE fillMode,[In, Buffer] ID2D1Geometry** geometries,[In] unsigned int geometriesCount,[Out, Fast] ID2D1GeometryGroup** geometryGroup) + ID2D1Factory::CreateGeometryGroup +
    + + +

    Creates an , which is an object that holds other geometries.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. To create a object, call the CreateGeometryGroup method on the object, passing in the fillMode with possible values of (alternate) and , an array of geometry objects to add to the geometry group, and the number of elements in this array.

    +
    + + dd371273 + HRESULT ID2D1Factory::CreateGeometryGroup([In] D2D1_FILL_MODE fillMode,[In, Buffer] ID2D1Geometry** geometries,[In] unsigned int geometriesCount,[Out, Fast] ID2D1GeometryGroup** geometryGroup) + ID2D1Factory::CreateGeometryGroup +
    + + +

    Creates an , which is an object that holds other geometries.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. To create a object, call the CreateGeometryGroup method on the object, passing in the fillMode with possible values of (alternate) and , an array of geometry objects to add to the geometry group, and the number of elements in this array.

    +
    + + dd371273 + HRESULT ID2D1Factory::CreateGeometryGroup([In] D2D1_FILL_MODE fillMode,[In, Buffer] ID2D1Geometry** geometries,[In] unsigned int geometriesCount,[Out, Fast] ID2D1GeometryGroup** geometryGroup) + ID2D1Factory::CreateGeometryGroup +
    + + +

    Transforms the specified geometry and stores the result as an object.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Like other resources, a transformed geometry inherits the resource space and threading policy of the factory that created it. This object is immutable.

    When stroking a transformed geometry with the DrawGeometry method, the stroke width is not affected by the transform applied to the geometry. The stroke width is only affected by the world transform.

    +
    + + dd371307 + HRESULT ID2D1Factory::CreateTransformedGeometry([In] ID2D1Geometry* sourceGeometry,[In] const D2D_MATRIX_3X2_F* transform,[Out, Fast] ID2D1TransformedGeometry** transformedGeometry) + ID2D1Factory::CreateTransformedGeometry +
    + + +

    Creates an empty .

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371282 + HRESULT ID2D1Factory::CreatePathGeometry([Out, Fast] ID2D1PathGeometry** pathGeometry) + ID2D1Factory::CreatePathGeometry +
    + + +

    Creates an that describes start cap, dash pattern, and other features of a stroke.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371301 + HRESULT ID2D1Factory::CreateStrokeStyle([In] const D2D1_STROKE_STYLE_PROPERTIES* strokeStyleProperties,[In, Buffer, Optional] const float* dashes,[In] unsigned int dashesCount,[Out, Fast] ID2D1StrokeStyle** strokeStyle) + ID2D1Factory::CreateStrokeStyle +
    + + +

    Creates an that can be used with the SaveDrawingState and RestoreDrawingState methods of a render target.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371253 + HRESULT ID2D1Factory::CreateDrawingStateBlock([In, Optional] const D2D1_DRAWING_STATE_DESCRIPTION* drawingStateDescription,[In, Optional] IDWriteRenderingParams* textRenderingParams,[Out, Fast] ID2D1DrawingStateBlock** drawingStateBlock) + ID2D1Factory::CreateDrawingStateBlock +
    + + +

    Creates a render target that renders to a Microsoft Windows Imaging Component (WIC) bitmap.

    +
    +

    The bitmap that receives the rendering output of the render target.

    +

    The rendering mode, pixel format, remoting options, DPI information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see Supported Pixel Formats and Alpha Modes.

    +

    When this method returns, contains the address of the reference to the object created by this method.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    You must use for the minLevel member of the renderTargetProperties parameter with this method.

    Your application should create render targets once and hold onto them for the life of the application or until the error is received. When you receive this error, you need to recreate the render target (and any resources it created).

    Note?? This method isn't supported on Windows Phone and will fail when called on a device with error code 0x8899000b (?There is no hardware rendering device available for this operation?). Because the Windows Phone Emulator supports WARP rendering, this method will fail when called on the emulator with a different error code, 0x88982f80 (wincodec_err_unsupportedpixelformat).

    +
    + + dd371309 + HRESULT ID2D1Factory::CreateWicBitmapRenderTarget([In] IWICBitmap* target,[In] const D2D1_RENDER_TARGET_PROPERTIES* renderTargetProperties,[Out, Fast] ID2D1RenderTarget** renderTarget) + ID2D1Factory::CreateWicBitmapRenderTarget +
    + + +

    Creates an , a render target that renders to a window.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    When you create a render target and hardware acceleration is available, you allocate resources on the computer's GPU. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the error is received. When you receive this error, you need to recreate the render target (and any resources it created).

    +
    + + dd371279 + HRESULT ID2D1Factory::CreateHwndRenderTarget([In] const D2D1_RENDER_TARGET_PROPERTIES* renderTargetProperties,[In] const D2D1_HWND_RENDER_TARGET_PROPERTIES* hwndRenderTargetProperties,[Out, Fast] ID2D1HwndRenderTarget** hwndRenderTarget) + ID2D1Factory::CreateHwndRenderTarget +
    + + +

    Creates a render target that draws to a DirectX Graphics Infrastructure (DXGI) surface.

    +
    +

    The to which the render target will draw.

    +

    The rendering mode, pixel format, remoting options, DPI information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see Supported Pixel Formats and Alpha Modes.

    +

    When this method returns, contains the address of the reference to the object created by this method.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    To write to a Direct3D surface, you obtain an and pass it to the CreateDxgiSurfaceRenderTarget method to create a DXGI surface render target; you can then use the DXGI surface render target to draw 2-D content to the DXGI surface.

    A DXGI surface render target is a type of . Like other Direct2D render targets, you can use it to create resources and issue drawing commands.

    The DXGI surface render target and the DXGI surface must use the same DXGI format. If you specify the DXGI_FORMAT_UNKOWN format when you create the render target, it will automatically use the surface's format.

    The DXGI surface render target does not perform DXGI surface synchronization.

    For more information about creating and using DXGI surface render targets, see the Direct2D and Direct3D Interoperability Overview.

    To work with Direct2D, the Direct3D device that provides the must be created with the D3D10_CREATE_DEVICE_BGRA_SUPPORT flag.

    When you create a render target and hardware acceleration is available, you allocate resources on the computer's GPU. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the render target's EndDraw method returns the error. When you receive this error, you need to recreate the render target (and any resources it created).

    + + + dd371264 + HRESULT ID2D1Factory::CreateDxgiSurfaceRenderTarget([In] IDXGISurface* dxgiSurface,[In] const D2D1_RENDER_TARGET_PROPERTIES* renderTargetProperties,[Out, Fast] ID2D1RenderTarget** renderTarget) + ID2D1Factory::CreateDxgiSurfaceRenderTarget + + +

    +

    Creates a render target that draws to a Windows Graphics Device Interface (GDI) device context.

    +
    +

    The rendering mode, pixel format, remoting options, DPI information, and the minimum DirectX support required for hardware rendering. To enable the device context (DC) render target to work with GDI, set the DXGI format to and the alpha mode to or . For more information about pixel formats, see Supported Pixel Formats and Alpha Modes.

    +

    When this method returns, dcRenderTarget contains the address of the reference to the created by the method.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Before you can render with a DC render target, you must use the render target's BindDC method to associate it with a GDI DC. Do this for each different DC and whenever there is a change in the size of the area you want to draw to.

    To enable the DC render target to work with GDI, set the render target's DXGI format to and alpha mode to or .

    Your application should create render targets once and hold on to them for the life of the application or until the render target's EndDraw method returns the error. When you receive this error, recreate the render target (and any resources it created).

    +
    + + dd371248 + HRESULT ID2D1Factory::CreateDCRenderTarget([In] const D2D1_RENDER_TARGET_PROPERTIES* renderTargetProperties,[Out, Fast] ID2D1DCRenderTarget** dcRenderTarget) + ID2D1Factory::CreateDCRenderTarget +
    + + +

    Creates Direct2D resources.

    +
    + +

    The interface is used to create devices, register and unregister effects, and enumerate effects properties. Effects are registered and unregistered globally. The registration APIs are placed on this interface for convenience.

    +
    + + hh404596 + ID2D1Factory1 + ID2D1Factory1 +
    + + + Default Constructor for a . + + + + + Default Constructor for a . + + + + + Default Constructor for a . + + + + + Get the effects registered + + HRESULT ID2D1Factory1::GetRegisteredEffects([Out, Buffer, Optional] GUID* effects,[In] unsigned int effectsCount,[Out, Optional] unsigned int* effectsReturned,[Out, Optional] unsigned int* effectsRegistered) + + + + Register a factory. + + + + + + + Register a factory. + + + + + + + + Register a . + + Type of + + + + Register a . + + Type of + + + + + Unregister a . + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a object.

    +
    + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.
    D3DERR_OUTOFVIDEOMEMORYDirect3D does not have enough display memory to perform the operation.

    ?

    + +

    The Direct2D device defines a resource domain in which a set of Direct2D objects and Direct2D device contexts can be used together. Each call to CreateDevice returns a unique object, even if you pass the same multiple times.

    +
    + + hh404599 + HRESULT ID2D1Factory1::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out, Fast] ID2D1Device** d2dDevice) + ID2D1Factory1::CreateDevice +
    + + +

    Creates a object.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    It is valid to specify a dash array only if is also specified.

    +
    + + hh404605 + HRESULT ID2D1Factory1::CreateStrokeStyle([In] const D2D1_STROKE_STYLE_PROPERTIES1* strokeStyleProperties,[In, Buffer, Optional] const float* dashes,[In] unsigned int dashesCount,[Out, Fast] ID2D1StrokeStyle1** strokeStyle) + ID2D1Factory1::CreateStrokeStyle +
    + + +

    Creates an object.

    +
    + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.

    ?

    + + hh404602 + HRESULT ID2D1Factory1::CreatePathGeometry([Out, Fast] ID2D1PathGeometry1** pathGeometry) + ID2D1Factory1::CreatePathGeometry +
    + + +

    Creates a new drawing state block, this can be used in subsequent SaveDrawingState and RestoreDrawingState operations on the render target.

    +
    +

    The drawing state description structure.

    +

    The address of the newly created drawing state block.

    +

    The address of the newly created drawing state block.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + + jj841162 + HRESULT ID2D1Factory1::CreateDrawingStateBlock([In, Optional] const D2D1_DRAWING_STATE_DESCRIPTION1* drawingStateDescription,[In, Optional] IDWriteRenderingParams* textRenderingParams,[Out, Fast] ID2D1DrawingStateBlock1** drawingStateBlock) + ID2D1Factory1::CreateDrawingStateBlock +
    + + +

    Creates a new object that you can use to replay metafile content.

    +
    + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + + hh847995 + HRESULT ID2D1Factory1::CreateGdiMetafile([In] IStream* metafileStream,[Out] ID2D1GdiMetafile** metafile) + ID2D1Factory1::CreateGdiMetafile +
    + + +

    Registers an effect within the factory instance with the property XML specified as a stream.

    +
    +

    The identifier of the effect to be registered.

    +

    A list of the effect properties, types, and metadata.

    +

    An array of properties and methods.

    This binds a property by name to a particular method implemented by the effect author to handle the property. The name must be found in the corresponding propertyXml.

    +

    The number of bindings in the binding array.

    +

    The static factory that is used to create the corresponding effect.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    Direct2D effects must define their properties at registration time via registration XML. An effect declares several required system properties, and can also declare custom properties. See Custom effects for more information about formatting the propertyXml parameter.

    RegisterEffect is both atomic and reference counted. To unregister an effect, call UnregisterEffect with the classId of the effect.

    Important??RegisterEffect does not hold a reference to the DLL or executable file in which the effect is contained. The application must independently make sure that the lifetime of the DLL or executable file completely contains all instances of each registered and created effect.?

    Aside from the built-in effects that are globally registered, this API registers effects only for this factory, derived device, and device context interfaces.

    +
    + + hh847996 + HRESULT ID2D1Factory1::RegisterEffectFromStream([In] const GUID& classId,[In] IStream* propertyXml,[In, Buffer, Optional] const D2D1_PROPERTY_BINDING* bindings,[In] unsigned int bindingsCount,[In] const __function__stdcall* effectFactory) + ID2D1Factory1::RegisterEffectFromStream +
    + + +

    Registers an effect within the factory instance with the property XML specified as a string.

    +
    +

    The identifier of the effect to be registered.

    +

    A list of the effect properties, types, and metadata.

    +

    An array of properties and methods.

    This binds a property by name to a particular method implemented by the effect author to handle the property. The name must be found in the corresponding propertyXml.

    +

    The number of bindings in the binding array.

    +

    The static factory that is used to create the corresponding effect.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    Direct2D effects must define their properties at registration time via registration XML. An effect declares several required system properties, and can also declare custom properties. See Custom effects for more information about formatting the propertyXml parameter.

    RegisterEffect is both atomic and reference counted. To unregister an effect, call UnregisterEffect with the classId of the effect.

    Important??RegisterEffect does not hold a reference to the DLL or executable file in which the effect is contained. The application must independently make sure that the lifetime of the DLL or executable file completely contains all instances of each registered and created effect.?

    Aside from the built-in effects that are globally registered, this API registers effects only for this factory and derived device and device context interfaces.

    +
    + + hh404614 + HRESULT ID2D1Factory1::RegisterEffectFromString([In] const GUID& classId,[In] const wchar_t* propertyXml,[In, Buffer, Optional] const D2D1_PROPERTY_BINDING* bindings,[In] unsigned int bindingsCount,[In] const __function__stdcall* effectFactory) + ID2D1Factory1::RegisterEffectFromString +
    + + +

    Unregisters an effect within the factory instance that corresponds to the classId provided.

    +
    +

    The identifier of the effect to be unregistered.

    +

    if the effect is not registered, otherwise.

    + +

    In order for the effect to be fully unloaded, you must call UnregisterEffect the same number of times that you have registered the effect.

    The UnregisterEffect method unregisters only those effects that are registered on the same factory. It cannot be used to unregister a built-in effect.

    +
    + + hh404617 + HRESULT ID2D1Factory1::UnregisterEffect([In] const GUID& classId) + ID2D1Factory1::UnregisterEffect +
    + + +

    Returns the class IDs of the currently registered effects and global effects on this factory.

    +
    +

    When this method returns, contains an array of effects. null if no effects are retrieved.

    +

    The capacity of the effects array.

    +

    When this method returns, contains the number of effects copied into effects.

    +

    When this method returns, contains the number of effects currently registered in the system.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    HRESULT_FROM_WIN32()effectsRegistered is larger than effectCount.

    ?

    + +

    The set of class IDs will be atomically returned by the API. The set will not be interrupted by other threads registering or unregistering effects.

    If effectsRegistered is larger than effectCount, the supplied array will still be filled to capacity with the current set of registered effects. This method returns the CLSIDs for all global effects and all effects registered to this factory.

    +
    + + hh404612 + HRESULT ID2D1Factory1::GetRegisteredEffects([Out, Buffer, Optional] GUID* effects,[In] unsigned int effectsCount,[Out, Optional] unsigned int* effectsReturned,[Out, Optional] unsigned int* effectsRegistered) + ID2D1Factory1::GetRegisteredEffects +
    + + +

    Retrieves the properties of an effect.

    +
    +

    The ID of the effect to retrieve properties from.

    +

    When this method returns, contains the address of a reference to the property interface that can be used to query the metadata of the effect.

    + +

    The returned effect properties will have all the mutable properties for the effect set to a default of null, or an empty value.

    • Value types will be zero-filled.
    • Blob and string types will be zero-length.
    • Array types will have length 1 and the element of the array will conform to the previous rules.

    This method cannot be used to return the properties for any effect not visible to .

    +
    + + hh404608 + HRESULT ID2D1Factory1::GetEffectProperties([In] const GUID& effectId,[Out] ID2D1Properties** properties) + ID2D1Factory1::GetEffectProperties +
    + + +

    Creates Direct2D resources.

    This interface also enables the creation of objects.

    +
    + + dn280481 + ID2D1Factory2 + ID2D1Factory2 +
    + + + Creates a new instance of the class. + + + + + Creates a new instance of the class with the specified . + + The factory threading type. + + + + Creates a new instance of the class with the specified and . + + The factory threading type. + The factory debug level. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates an object.

    +
    + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.
    D3DERR_OUTOFVIDEOMEMORYDirect3D does not have enough display memory to perform the operation.

    ?

    + +

    The Direct2D device defines a resource domain in which a set of Direct2D objects and Direct2D device contexts can be used together. Each call to CreateDevice returns a unique object, even if you pass the same multiple times.

    +
    + + dn280482 + HRESULT ID2D1Factory2::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out, Fast] ID2D1Device1** d2dDevice1) + ID2D1Factory2::CreateDevice +
    + + +

    Provides access to an device context that can accept GDI drawing commands.

    +
    + +

    You don't create an object directly; instead, you use the QueryInterface method of an existing render target instance to provide an version of that render target.

    Not all render targets support the interface. The render target must be GDI-compatible (the flag was specified when creating the render target), use the pixel format, and use the or alpha mode.

    Note that the QueryInterface method always succeeds; if the render target doesn't support the interface, calling GetDC will fail. (For render targets created through the CreateCompatibleRenderTarget method, the render target that created it must have these settings.)

    To test whether a given render target supports the interface, create a that specifies GDI compatibility and the appropriate pixel format, then call the render target's IsSupported method to see whether the render target is GDI-compatible.

    +
    + + dd371321 + ID2D1GdiInteropRenderTarget + ID2D1GdiInteropRenderTarget +
    + + + Indicates that drawing with the device context retrieved using the {{GetDC}} method is finished. + + + ReleaseDC must be called once for each call to {{GetDC}}. + + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT ID2D1GdiInteropRenderTarget::ReleaseDC([In, Optional] const RECT* update) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the device context associated with this render target.

    +
    +

    A value that specifies whether the device context should be cleared.

    +

    When this method returns, contains the device context associated with this render target. You must allocate storage for this parameter.

    + +

    Calling this method flushes the render target.

    This command can be called only after BeginDraw and before EndDraw.

    Note??In Windows?7 and earlier, you should not call GetDC between PushAxisAlignedClip/PopAxisAlignedClip commands or between PushLayer/PopLayer. However, this restriction does not apply to Windows?8 and later.?

    ReleaseDC must be called once for each call to GetDC.

    +
    + + dd371323 + HRESULT ID2D1GdiInteropRenderTarget::GetDC([In] D2D1_DC_INITIALIZE_MODE mode,[Out] HDC* hdc) + ID2D1GdiInteropRenderTarget::GetDC +
    + + +

    Indicates that drawing with the device context retrieved using the GetDC method is finished.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    ReleaseDC must be called once for each call to GetDC.

    +
    + + dd371327 + HRESULT ID2D1GdiInteropRenderTarget::ReleaseDC([In, Optional] const RECT* update) + ID2D1GdiInteropRenderTarget::ReleaseDC +
    + + +

    The interpolation mode to be used with the 2D affine transform effect to scale the image. There are 6 scale modes that range in quality and speed.

    +
    + + dn934205 + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE +
    + + +

    Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.

    +
    + + dn934205 + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR +
    + + +

    Uses a four point sample and linear interpolation. This mode uses more processing time than the nearest neighbor mode, but outputs a higher quality image.

    +
    + + dn934205 + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_LINEAR +
    + + +

    Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image.

    +
    + + dn934205 + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_CUBIC +
    + + +

    Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.

    +
    + + dn934205 + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR +
    + + +

    Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.

    +
    + + dn934205 + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC +
    + + +

    Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.

    +
    + + dn934205 + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC + D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC +
    + + +

    Identifiers for properties of the 2D affine transform effect.

    +
    + + dn934206 + D2D1_2DAFFINETRANSFORM_PROP + D2D1_2DAFFINETRANSFORM_PROP +
    + + + No documentation. + + + dn934206 + D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE + D2D1_2DAFFINETRANSFORM_PROP_INTERPOLATION_MODE + + + + No documentation. + + + dn934206 + D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE + D2D1_2DAFFINETRANSFORM_PROP_BORDER_MODE + + + + No documentation. + + + dn934206 + D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX + D2D1_2DAFFINETRANSFORM_PROP_TRANSFORM_MATRIX + + + + No documentation. + + + dn934206 + D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS + D2D1_2DAFFINETRANSFORM_PROP_SHARPNESS + + + +

    Specifies how the alpha value of a bitmap or render target should be treated.

    +
    + +

    The enumeration is used with the enumeration to specify the alpha mode of a render target or bitmap. Different render targets and bitmaps support different alpha modes. For a list, see Supported Pixel Formats and Alpha Modes.

    +
    + + dd368058 + D2D1_ALPHA_MODE + D2D1_ALPHA_MODE +
    + + +

    The alpha value might not be meaningful.

    +
    + + dd368058 + D2D1_ALPHA_MODE_UNKNOWN + D2D1_ALPHA_MODE_UNKNOWN +
    + + +

    The alpha value has been premultiplied. Each color is first scaled by the alpha value. The alpha value itself is the same in both straight and premultiplied alpha. Typically, no color channel value is greater than the alpha channel value. If a color channel value in a premultiplied format is greater than the alpha channel, the standard source-over blending math results in an additive blend.

    +
    + + dd368058 + D2D1_ALPHA_MODE_PREMULTIPLIED + D2D1_ALPHA_MODE_PREMULTIPLIED +
    + + +

    The alpha value has not been premultiplied. The alpha channel indicates the transparency of the color.

    +
    + + dd368058 + D2D1_ALPHA_MODE_STRAIGHT + D2D1_ALPHA_MODE_STRAIGHT +
    + + +

    The alpha value is ignored.

    +
    + + dd368058 + D2D1_ALPHA_MODE_IGNORE + D2D1_ALPHA_MODE_IGNORE +
    + + +

    Specifies how the edges of nontext primitives are rendered.

    +
    + + dd368061 + D2D1_ANTIALIAS_MODE + D2D1_ANTIALIAS_MODE +
    + + +

    Edges are antialiased using the Direct2D per-primitive method of high-quality antialiasing.

    +
    + + dd368061 + D2D1_ANTIALIAS_MODE_PER_PRIMITIVE + D2D1_ANTIALIAS_MODE_PER_PRIMITIVE +
    + + +

    Objects are aliased in most cases. Objects are antialiased only when they are drawn to a render target created by the CreateDxgiSurfaceRenderTarget method and Direct3D multisampling has been enabled on the backing DirectX Graphics Infrastructure (DXGI) surface.

    +
    + + dd368061 + D2D1_ANTIALIAS_MODE_ALIASED + D2D1_ANTIALIAS_MODE_ALIASED +
    + + +

    Specifies whether an arc should be greater than 180 degrees.

    +
    + + dd368068 + D2D1_ARC_SIZE + D2D1_ARC_SIZE +
    + + +

    An arc's sweep should be 180 degrees or less.

    +
    + + dd368068 + D2D1_ARC_SIZE_SMALL + D2D1_ARC_SIZE_SMALL +
    + + +

    An arc's sweep should be 180 degrees or greater.

    +
    + + dd368068 + D2D1_ARC_SIZE_LARGE + D2D1_ARC_SIZE_LARGE +
    + + +

    Identifiers for the properties of the Arithmetic composite effect.

    +
    + + dn934211 + D2D1_ARITHMETICCOMPOSITE_PROP + D2D1_ARITHMETICCOMPOSITE_PROP +
    + + + No documentation. + + + dn934211 + D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS + D2D1_ARITHMETICCOMPOSITE_PROP_COEFFICIENTS + + + + No documentation. + + + dn934211 + D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT + D2D1_ARITHMETICCOMPOSITE_PROP_CLAMP_OUTPUT + + + +

    Identifiers for properties of the Atlas effect.

    +
    + + dn934212 + D2D1_ATLAS_PROP + D2D1_ATLAS_PROP +
    + + + No documentation. + + + dn934212 + D2D1_ATLAS_PROP_INPUT_RECT + D2D1_ATLAS_PROP_INPUT_RECT + + + + No documentation. + + + dn934212 + D2D1_ATLAS_PROP_INPUT_PADDING_RECT + D2D1_ATLAS_PROP_INPUT_PADDING_RECT + + + +

    Specifies the algorithm that is used when images are scaled or rotated.

    Note??Starting in Windows?8, more interpolations modes are available. See for more info.? +
    + +

    To stretch an image, each pixel in the original image must be mapped to a group of pixels in the larger image. To shrink an image, groups of pixels in the original image must be mapped to single pixels in the smaller image. The effectiveness of the algorithms that perform these mappings determines the quality of a scaled image. Algorithms that produce higher-quality scaled images tend to require more processing time. provides faster but lower-quality interpolation, while provides higher-quality interpolation.

    +
    + + dd368073 + D2D1_BITMAP_INTERPOLATION_MODE + D2D1_BITMAP_INTERPOLATION_MODE +
    + + + No documentation. + + + dd368073 + D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR + D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dd368073 + D2D1_BITMAP_INTERPOLATION_MODE_LINEAR + D2D1_BITMAP_INTERPOLATION_MODE_LINEAR + + + +

    Specifies how a bitmap can be used.

    +
    + +

    implies that none of the flags are set. This means that the bitmap can be used for drawing from, cannot be set as a target and cannot be read from by the CPU.

    means that the bitmap can be specified as a target in . If you also specify the flag the bitmap can be used a target but, it cannot be drawn from. Attempting to draw with a bitmap that has both flags set will result in the device context being put into an error state with .

    means that the bitmap can be mapped by using . This flag requires and cannot be combined with any other flags. The bitmap must be updated with the CopyFromBitmap or CopyFromRenderTarget methods.

    Note??You should only use is when the purpose of the bitmap is to be a target only or when the bitmap will be mapped .?

    means that it is possible to get a DC associated with this bitmap. This must be used in conjunction with . The must be either or .

    +
    + + hh446984 + D2D1_BITMAP_OPTIONS + D2D1_BITMAP_OPTIONS +
    + + +

    The bitmap is created with default properties.

    +
    + + hh446984 + D2D1_BITMAP_OPTIONS_NONE + D2D1_BITMAP_OPTIONS_NONE +
    + + +

    The bitmap can be used as a device context target.

    +
    + + hh446984 + D2D1_BITMAP_OPTIONS_TARGET + D2D1_BITMAP_OPTIONS_TARGET +
    + + +

    The bitmap cannot be used as an input.

    +
    + + hh446984 + D2D1_BITMAP_OPTIONS_CANNOT_DRAW + D2D1_BITMAP_OPTIONS_CANNOT_DRAW +
    + + +

    The bitmap can be read from the CPU.

    +
    + + hh446984 + D2D1_BITMAP_OPTIONS_CPU_READ + D2D1_BITMAP_OPTIONS_CPU_READ +
    + + +

    The bitmap works with .

    Note??This flag is not available in Windows Store apps. ?
    +
    + + hh446984 + D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE + D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE +
    + + +

    Specifies the alpha mode of the output of the Bitmap source effect.

    +
    + + dn934213 + D2D1_BITMAPSOURCE_ALPHA_MODE + D2D1_BITMAPSOURCE_ALPHA_MODE +
    + + + No documentation. + + + dn934213 + D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED + D2D1_BITMAPSOURCE_ALPHA_MODE_PREMULTIPLIED + + + + No documentation. + + + dn934213 + D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT + D2D1_BITMAPSOURCE_ALPHA_MODE_STRAIGHT + + + +

    The interpolation mode used to scale the image in the Bitmap source effect. If the mode disables the mipmap, then BitmapSouce will cache the image at the resolution determined by the Scale and EnableDPICorrection properties.

    +
    + + dn934214 + D2D1_BITMAPSOURCE_INTERPOLATION_MODE + D2D1_BITMAPSOURCE_INTERPOLATION_MODE +
    + + + No documentation. + + + dn934214 + D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR + D2D1_BITMAPSOURCE_INTERPOLATION_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934214 + D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR + D2D1_BITMAPSOURCE_INTERPOLATION_MODE_LINEAR + + + + No documentation. + + + dn934214 + D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC + D2D1_BITMAPSOURCE_INTERPOLATION_MODE_CUBIC + + + + No documentation. + + + dn934214 + D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT + D2D1_BITMAPSOURCE_INTERPOLATION_MODE_FANT + + + + No documentation. + + + dn934214 + D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR + D2D1_BITMAPSOURCE_INTERPOLATION_MODE_MIPMAP_LINEAR + + + +

    Speficies whether a flip and/or rotation operation should be performed by the Bitmap source effect

    +
    + + dn934215 + D2D1_BITMAPSOURCE_ORIENTATION + D2D1_BITMAPSOURCE_ORIENTATION +
    + + + No documentation. + + + dn934215 + D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT + D2D1_BITMAPSOURCE_ORIENTATION_DEFAULT + + + + No documentation. + + + dn934215 + D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL + D2D1_BITMAPSOURCE_ORIENTATION_FLIP_HORIZONTAL + + + + No documentation. + + + dn934215 + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180 + + + + No documentation. + + + dn934215 + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL + + + + No documentation. + + + dn934215 + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL + + + + No documentation. + + + dn934215 + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90 + + + + No documentation. + + + dn934215 + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL + + + + No documentation. + + + dn934215 + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 + D2D1_BITMAPSOURCE_ORIENTATION_ROTATE_CLOCKWISE270 + + + +

    Identifiers for properties of the Bitmap source effect.

    +
    + + dn934216 + D2D1_BITMAPSOURCE_PROP + D2D1_BITMAPSOURCE_PROP +
    + + + No documentation. + + + dn934216 + D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE + D2D1_BITMAPSOURCE_PROP_WIC_BITMAP_SOURCE + + + + No documentation. + + + dn934216 + D2D1_BITMAPSOURCE_PROP_SCALE + D2D1_BITMAPSOURCE_PROP_SCALE + + + + No documentation. + + + dn934216 + D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE + D2D1_BITMAPSOURCE_PROP_INTERPOLATION_MODE + + + + No documentation. + + + dn934216 + D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION + D2D1_BITMAPSOURCE_PROP_ENABLE_DPI_CORRECTION + + + + No documentation. + + + dn934216 + D2D1_BITMAPSOURCE_PROP_ALPHA_MODE + D2D1_BITMAPSOURCE_PROP_ALPHA_MODE + + + + No documentation. + + + dn934216 + D2D1_BITMAPSOURCE_PROP_ORIENTATION + D2D1_BITMAPSOURCE_PROP_ORIENTATION + + + +

    Specifies how one of the color sources is to be derived and optionally specifies a preblend operation on the color source.

    +
    + +

    This enumeration has the same numeric values as D3D10_BLEND.

    +
    + + hh404276 + D2D1_BLEND + D2D1_BLEND +
    + + +

    The data source is black (0, 0, 0, 0). There is no preblend operation.

    +
    + + hh404276 + D2D1_BLEND_ZERO + D2D1_BLEND_ZERO +
    + + +

    The data source is white (1, 1, 1, 1). There is no preblend operation.

    +
    + + hh404276 + D2D1_BLEND_ONE + D2D1_BLEND_ONE +
    + + +

    The data source is color data (RGB) from the second input of the blend transform. There is not a preblend operation.

    +
    + + hh404276 + D2D1_BLEND_SRC_COLOR + D2D1_BLEND_SRC_COLOR +
    + + +

    The data source is color data (RGB) from second input of the blend transform. The preblend operation inverts the data, generating 1 - RGB.

    +
    + + hh404276 + D2D1_BLEND_INV_SRC_COLOR + D2D1_BLEND_INV_SRC_COLOR +
    + + +

    The data source is alpha data (A) from second input of the blend transform. There is no preblend operation.

    +
    + + hh404276 + D2D1_BLEND_SRC_ALPHA + D2D1_BLEND_SRC_ALPHA +
    + + +

    The data source is alpha data (A) from the second input of the blend transform. The preblend operation inverts the data, generating 1 - A.

    +
    + + hh404276 + D2D1_BLEND_INV_SRC_ALPHA + D2D1_BLEND_INV_SRC_ALPHA +
    + + +

    The data source is alpha data (A) from the first input of the blend transform. There is no preblend operation.

    +
    + + hh404276 + D2D1_BLEND_DEST_ALPHA + D2D1_BLEND_DEST_ALPHA +
    + + +

    The data source is alpha data (A) from the first input of the blend transform. The preblend operation inverts the data, generating 1 - A.

    +
    + + hh404276 + D2D1_BLEND_INV_DEST_ALPHA + D2D1_BLEND_INV_DEST_ALPHA +
    + + +

    The data source is color data from the first input of the blend transform. There is no preblend operation.

    +
    + + hh404276 + D2D1_BLEND_DEST_COLOR + D2D1_BLEND_DEST_COLOR +
    + + +

    The data source is color data from the first input of the blend transform. The preblend operation inverts the data, generating 1 - RGB.

    +
    + + hh404276 + D2D1_BLEND_INV_DEST_COLOR + D2D1_BLEND_INV_DEST_COLOR +
    + + +

    The data source is alpha data from the second input of the blend transform. The preblend operation clamps the data to 1 or less.

    +
    + + hh404276 + D2D1_BLEND_SRC_ALPHA_SAT + D2D1_BLEND_SRC_ALPHA_SAT +
    + + +

    The data source is the blend factor. There is no preblend operation.

    +
    + + hh404276 + D2D1_BLEND_BLEND_FACTOR + D2D1_BLEND_BLEND_FACTOR +
    + + +

    The data source is the blend factor. The preblend operation inverts the blend factor, generating 1 - blend_factor.

    +
    + + hh404276 + D2D1_BLEND_INV_BLEND_FACTOR + D2D1_BLEND_INV_BLEND_FACTOR +
    + + +

    The blend mode used for the Blend effect.

    +
    + + dn934217 + D2D1_BLEND_MODE + D2D1_BLEND_MODE +
    + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_MULTIPLY + D2D1_BLEND_MODE_MULTIPLY + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_SCREEN + D2D1_BLEND_MODE_SCREEN + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_DARKEN + D2D1_BLEND_MODE_DARKEN + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_LIGHTEN + D2D1_BLEND_MODE_LIGHTEN + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_DISSOLVE + D2D1_BLEND_MODE_DISSOLVE + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_COLOR_BURN + D2D1_BLEND_MODE_COLOR_BURN + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_LINEAR_BURN + D2D1_BLEND_MODE_LINEAR_BURN + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_DARKER_COLOR + D2D1_BLEND_MODE_DARKER_COLOR + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_LIGHTER_COLOR + D2D1_BLEND_MODE_LIGHTER_COLOR + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_COLOR_DODGE + D2D1_BLEND_MODE_COLOR_DODGE + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_LINEAR_DODGE + D2D1_BLEND_MODE_LINEAR_DODGE + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_OVERLAY + D2D1_BLEND_MODE_OVERLAY + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_SOFT_LIGHT + D2D1_BLEND_MODE_SOFT_LIGHT + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_HARD_LIGHT + D2D1_BLEND_MODE_HARD_LIGHT + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_VIVID_LIGHT + D2D1_BLEND_MODE_VIVID_LIGHT + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_LINEAR_LIGHT + D2D1_BLEND_MODE_LINEAR_LIGHT + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_PIN_LIGHT + D2D1_BLEND_MODE_PIN_LIGHT + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_HARD_MIX + D2D1_BLEND_MODE_HARD_MIX + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_DIFFERENCE + D2D1_BLEND_MODE_DIFFERENCE + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_EXCLUSION + D2D1_BLEND_MODE_EXCLUSION + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_HUE + D2D1_BLEND_MODE_HUE + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_SATURATION + D2D1_BLEND_MODE_SATURATION + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_COLOR + D2D1_BLEND_MODE_COLOR + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_LUMINOSITY + D2D1_BLEND_MODE_LUMINOSITY + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_SUBTRACT + D2D1_BLEND_MODE_SUBTRACT + + + + No documentation. + + + dn934217 + D2D1_BLEND_MODE_DIVISION + D2D1_BLEND_MODE_DIVISION + + + +

    Specifies the blend operation on two color sources.

    +
    + +

    This enumeration has the same numeric values as D3D10_BLEND_OP.

    +
    + + hh404278 + D2D1_BLEND_OPERATION + D2D1_BLEND_OPERATION +
    + + +

    Add source 1 and source 2.

    +
    + + hh404278 + D2D1_BLEND_OPERATION_ADD + D2D1_BLEND_OPERATION_ADD +
    + + +

    Subtract source 1 from source 2.

    +
    + + hh404278 + D2D1_BLEND_OPERATION_SUBTRACT + D2D1_BLEND_OPERATION_SUBTRACT +
    + + +

    Subtract source 2 from source 1.

    +
    + + hh404278 + D2D1_BLEND_OPERATION_REV_SUBTRACT + D2D1_BLEND_OPERATION_REV_SUBTRACT +
    + + +

    Find the minimum of source 1 and source 2.

    +
    + + hh404278 + D2D1_BLEND_OPERATION_MIN + D2D1_BLEND_OPERATION_MIN +
    + + +

    Find the maximum of source 1 and source 2.

    +
    + + hh404278 + D2D1_BLEND_OPERATION_MAX + D2D1_BLEND_OPERATION_MAX +
    + + +

    Identifiers for properties of the Blend effect.

    +
    + + dn934218 + D2D1_BLEND_PROP + D2D1_BLEND_PROP +
    + + + No documentation. + + + dn934218 + D2D1_BLEND_PROP_MODE + D2D1_BLEND_PROP_MODE + + + +

    The edge mode for the Border effect.

    +
    + + dn934219 + D2D1_BORDER_EDGE_MODE + D2D1_BORDER_EDGE_MODE +
    + + + No documentation. + + + dn934219 + D2D1_BORDER_EDGE_MODE_CLAMP + D2D1_BORDER_EDGE_MODE_CLAMP + + + + No documentation. + + + dn934219 + D2D1_BORDER_EDGE_MODE_WRAP + D2D1_BORDER_EDGE_MODE_WRAP + + + + No documentation. + + + dn934219 + D2D1_BORDER_EDGE_MODE_MIRROR + D2D1_BORDER_EDGE_MODE_MIRROR + + + +

    Specifies how the Crop effect handles the crop rectangle falling on fractional pixel coordinates.

    +
    + + dn934220 + D2D1_BORDER_MODE + D2D1_BORDER_MODE +
    + + + No documentation. + + + dn934220 + D2D1_BORDER_MODE_SOFT + D2D1_BORDER_MODE_SOFT + + + + No documentation. + + + dn934220 + D2D1_BORDER_MODE_HARD + D2D1_BORDER_MODE_HARD + + + +

    Identifiers for properties of the Border effect.

    +
    + + dn934221 + D2D1_BORDER_PROP + D2D1_BORDER_PROP +
    + + + No documentation. + + + dn934221 + D2D1_BORDER_PROP_EDGE_MODE_X + D2D1_BORDER_PROP_EDGE_MODE_X + + + + No documentation. + + + dn934221 + D2D1_BORDER_PROP_EDGE_MODE_Y + D2D1_BORDER_PROP_EDGE_MODE_Y + + + +

    Identifiers for the properties of the Brightness effect.

    +
    + + dn934223 + D2D1_BRIGHTNESS_PROP + D2D1_BRIGHTNESS_PROP +
    + + + No documentation. + + + dn934223 + D2D1_BRIGHTNESS_PROP_WHITE_POINT + D2D1_BRIGHTNESS_PROP_WHITE_POINT + + + + No documentation. + + + dn934223 + D2D1_BRIGHTNESS_PROP_BLACK_POINT + D2D1_BRIGHTNESS_PROP_BLACK_POINT + + + +

    Represents the bit depth of the imaging pipeline in Direct2D.

    +
    + + Note?? Feature level 9 may or may not support precision types other than 8BPC.? + + + hh446986 + D2D1_BUFFER_PRECISION + D2D1_BUFFER_PRECISION +
    + + +

    The buffer precision is not specified.

    +
    + + hh446986 + D2D1_BUFFER_PRECISION_UNKNOWN + D2D1_BUFFER_PRECISION_UNKNOWN +
    + + +

    Use 8-bit normalized integer per channel.

    +
    + + hh446986 + D2D1_BUFFER_PRECISION_8BPC_UNORM + D2D1_BUFFER_PRECISION_8BPC_UNORM +
    + + +

    Use 8-bit normalized integer standard RGB data per channel.

    +
    + + hh446986 + D2D1_BUFFER_PRECISION_8BPC_UNORM_SRGB + D2D1_BUFFER_PRECISION_8BPC_UNORM_SRGB +
    + + +

    Use 16-bit normalized integer per channel.

    +
    + + hh446986 + D2D1_BUFFER_PRECISION_16BPC_UNORM + D2D1_BUFFER_PRECISION_16BPC_UNORM +
    + + +

    Use 16-bit floats per channel.

    +
    + + hh446986 + D2D1_BUFFER_PRECISION_16BPC_FLOAT + D2D1_BUFFER_PRECISION_16BPC_FLOAT +
    + + +

    Use 32-bit floats per channel.

    +
    + + hh446986 + D2D1_BUFFER_PRECISION_32BPC_FLOAT + D2D1_BUFFER_PRECISION_32BPC_FLOAT +
    + + +

    Describes the shape at the end of a line or segment.

    +
    + +

    The following illustration shows the available cap styles for lines or segments. The red portion of the line shows the extra area added by the line cap setting.

    +
    + + dd368079 + D2D1_CAP_STYLE + D2D1_CAP_STYLE +
    + + +

    A cap that does not extend past the last point of the line. Comparable to cap used for objects other than lines.

    +
    + + dd368079 + D2D1_CAP_STYLE_FLAT + D2D1_CAP_STYLE_FLAT +
    + + +

    Half of a square that has a length equal to the line thickness.

    +
    + + dd368079 + D2D1_CAP_STYLE_SQUARE + D2D1_CAP_STYLE_SQUARE +
    + + +

    A semicircle that has a diameter equal to the line thickness.

    +
    + + dd368079 + D2D1_CAP_STYLE_ROUND + D2D1_CAP_STYLE_ROUND +
    + + +

    An isosceles right triangle whose hypotenuse is equal in length to the thickness of the line.

    +
    + + dd368079 + D2D1_CAP_STYLE_TRIANGLE + D2D1_CAP_STYLE_TRIANGLE +
    + + +

    Describes flags that influence how the renderer interacts with a custom vertex shader.

    +
    + + hh404280 + D2D1_CHANGE_TYPE + D2D1_CHANGE_TYPE +
    + + +

    There were no changes.

    +
    + + hh404280 + D2D1_CHANGE_TYPE_NONE + D2D1_CHANGE_TYPE_NONE +
    + + +

    The properties of the effect changed.

    +
    + + hh404280 + D2D1_CHANGE_TYPE_PROPERTIES + D2D1_CHANGE_TYPE_PROPERTIES +
    + + +

    The context state changed.

    +
    + + hh404280 + D2D1_CHANGE_TYPE_CONTEXT + D2D1_CHANGE_TYPE_CONTEXT +
    + + +

    The effect?s transform graph has changed. This happens only when an effect supports a variable input count.

    +
    + + hh404280 + D2D1_CHANGE_TYPE_GRAPH + D2D1_CHANGE_TYPE_GRAPH +
    + + +

    Allows a caller to control the channel depth of a stage in the rendering pipeline.

    +
    + + hh404281 + D2D1_CHANNEL_DEPTH + D2D1_CHANNEL_DEPTH +
    + + +

    The channel depth is the default. It is inherited from the inputs.

    +
    + + hh404281 + D2D1_CHANNEL_DEPTH_DEFAULT + D2D1_CHANNEL_DEPTH_DEFAULT +
    + + +

    The channel depth is 1.

    +
    + + hh404281 + D2D1_CHANNEL_DEPTH_1 + D2D1_CHANNEL_DEPTH_1 +
    + + +

    The channel depth is 4.

    +
    + + hh404281 + D2D1_CHANNEL_DEPTH_4 + D2D1_CHANNEL_DEPTH_4 +
    + + +

    Specifies the color channel the Displacement map effect extracts the intensity from and uses it to spatially displace the image in the X or Y direction.

    +
    + + dn934224 + D2D1_CHANNEL_SELECTOR + D2D1_CHANNEL_SELECTOR +
    + + + No documentation. + + + dn934224 + D2D1_CHANNEL_SELECTOR_R + D2D1_CHANNEL_SELECTOR_R + + + + No documentation. + + + dn934224 + D2D1_CHANNEL_SELECTOR_G + D2D1_CHANNEL_SELECTOR_G + + + + No documentation. + + + dn934224 + D2D1_CHANNEL_SELECTOR_B + D2D1_CHANNEL_SELECTOR_B + + + + No documentation. + + + dn934224 + D2D1_CHANNEL_SELECTOR_A + D2D1_CHANNEL_SELECTOR_A + + + +

    Identifiers for properties of the Chroma-key effect.

    +
    + + dn890719 + D2D1_CHROMAKEY_PROP + D2D1_CHROMAKEY_PROP +
    + + + No documentation. + + + dn890719 + D2D1_CHROMAKEY_PROP_COLOR + D2D1_CHROMAKEY_PROP_COLOR + + + + No documentation. + + + dn890719 + D2D1_CHROMAKEY_PROP_TOLERANCE + D2D1_CHROMAKEY_PROP_TOLERANCE + + + + No documentation. + + + dn890719 + D2D1_CHROMAKEY_PROP_INVERT_ALPHA + D2D1_CHROMAKEY_PROP_INVERT_ALPHA + + + + No documentation. + + + dn890719 + D2D1_CHROMAKEY_PROP_FEATHER + D2D1_CHROMAKEY_PROP_FEATHER + + + +

    Specifies the pixel snapping policy when rendering color bitmap glyphs.

    +
    + + mt736463 + D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION + D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION +
    + + +

    Color bitmap glyph positions are snapped to the nearest pixel if the bitmap resolution matches that of the device context.

    +
    + + mt736463 + D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DEFAULT + D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DEFAULT +
    + + +

    Color bitmap glyph positions are not snapped.

    +
    + + mt736463 + D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DISABLE + D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DISABLE +
    + + +

    Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.

    +
    + +

    Not every render target supports hardware rendering. For more information, see the Render Targets Overview.

    +
    + + dd756630 + D2D1_COLOR_CONTEXT_TYPE + D2D1_COLOR_CONTEXT_TYPE +
    + + +

    The render target uses hardware rendering, if available; otherwise, it uses software rendering.

    +
    + + dd756630 + D2D1_COLOR_CONTEXT_TYPE_ICC + D2D1_COLOR_CONTEXT_TYPE_ICC +
    + + +

    The render target uses software rendering only.

    +
    + + dd756630 + D2D1_COLOR_CONTEXT_TYPE_SIMPLE + D2D1_COLOR_CONTEXT_TYPE_SIMPLE +
    + + +

    The render target uses hardware rendering only.

    +
    + + dd756630 + D2D1_COLOR_CONTEXT_TYPE_DXGI + D2D1_COLOR_CONTEXT_TYPE_DXGI +
    + + +

    Defines how to interpolate between colors.

    +
    + + hh871441 + D2D1_COLOR_INTERPOLATION_MODE + D2D1_COLOR_INTERPOLATION_MODE +
    + + +

    Colors are interpolated with straight alpha.

    +
    + + hh871441 + D2D1_COLOR_INTERPOLATION_MODE_STRAIGHT + D2D1_COLOR_INTERPOLATION_MODE_STRAIGHT +
    + + +

    Colors are interpolated with premultiplied alpha.

    +
    + + hh871441 + D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED + D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED +
    + + +

    Indicates how the Color management effect should interpret alpha data that is contained in the input image.

    +
    + + dn934225 + D2D1_COLORMANAGEMENT_ALPHA_MODE + D2D1_COLORMANAGEMENT_ALPHA_MODE +
    + + + No documentation. + + + dn934225 + D2D1_COLORMANAGEMENT_ALPHA_MODE_PREMULTIPLIED + D2D1_COLORMANAGEMENT_ALPHA_MODE_PREMULTIPLIED + + + + No documentation. + + + dn934225 + D2D1_COLORMANAGEMENT_ALPHA_MODE_STRAIGHT + D2D1_COLORMANAGEMENT_ALPHA_MODE_STRAIGHT + + + +

    Identifiers for the properties of the Color management effect.

    +
    + + dn934226 + D2D1_COLORMANAGEMENT_PROP + D2D1_COLORMANAGEMENT_PROP +
    + + + No documentation. + + + dn934226 + D2D1_COLORMANAGEMENT_PROP_SOURCE_COLOR_CONTEXT + D2D1_COLORMANAGEMENT_PROP_SOURCE_COLOR_CONTEXT + + + + No documentation. + + + dn934226 + D2D1_COLORMANAGEMENT_PROP_SOURCE_RENDERING_INTENT + D2D1_COLORMANAGEMENT_PROP_SOURCE_RENDERING_INTENT + + + + No documentation. + + + dn934226 + D2D1_COLORMANAGEMENT_PROP_DESTINATION_COLOR_CONTEXT + D2D1_COLORMANAGEMENT_PROP_DESTINATION_COLOR_CONTEXT + + + + No documentation. + + + dn934226 + D2D1_COLORMANAGEMENT_PROP_DESTINATION_RENDERING_INTENT + D2D1_COLORMANAGEMENT_PROP_DESTINATION_RENDERING_INTENT + + + + No documentation. + + + dn934226 + D2D1_COLORMANAGEMENT_PROP_ALPHA_MODE + D2D1_COLORMANAGEMENT_PROP_ALPHA_MODE + + + + No documentation. + + + dn934226 + D2D1_COLORMANAGEMENT_PROP_QUALITY + D2D1_COLORMANAGEMENT_PROP_QUALITY + + + +

    The quality level of the transform for the Color management effect.

    +
    + + dn934227 + D2D1_COLORMANAGEMENT_QUALITY + D2D1_COLORMANAGEMENT_QUALITY +
    + + + No documentation. + + + dn934227 + D2D1_COLORMANAGEMENT_QUALITY_PROOF + D2D1_COLORMANAGEMENT_QUALITY_PROOF + + + + No documentation. + + + dn934227 + D2D1_COLORMANAGEMENT_QUALITY_NORMAL + D2D1_COLORMANAGEMENT_QUALITY_NORMAL + + + + No documentation. + + + dn934227 + D2D1_COLORMANAGEMENT_QUALITY_BEST + D2D1_COLORMANAGEMENT_QUALITY_BEST + + + +

    Specifies which ICC rendering intent the Color management effect should use.

    +
    + + dn934228 + D2D1_COLORMANAGEMENT_RENDERING_INTENT + D2D1_COLORMANAGEMENT_RENDERING_INTENT +
    + + + No documentation. + + + dn934228 + D2D1_COLORMANAGEMENT_RENDERING_INTENT_PERCEPTUAL + D2D1_COLORMANAGEMENT_RENDERING_INTENT_PERCEPTUAL + + + + No documentation. + + + dn934228 + D2D1_COLORMANAGEMENT_RENDERING_INTENT_RELATIVE_COLORIMETRIC + D2D1_COLORMANAGEMENT_RENDERING_INTENT_RELATIVE_COLORIMETRIC + + + + No documentation. + + + dn934228 + D2D1_COLORMANAGEMENT_RENDERING_INTENT_SATURATION + D2D1_COLORMANAGEMENT_RENDERING_INTENT_SATURATION + + + + No documentation. + + + dn934228 + D2D1_COLORMANAGEMENT_RENDERING_INTENT_ABSOLUTE_COLORIMETRIC + D2D1_COLORMANAGEMENT_RENDERING_INTENT_ABSOLUTE_COLORIMETRIC + + + +

    The alpha mode of the output of the Color matrix effect.

    +
    + + dn934229 + D2D1_COLORMATRIX_ALPHA_MODE + D2D1_COLORMATRIX_ALPHA_MODE +
    + + + No documentation. + + + dn934229 + D2D1_COLORMATRIX_ALPHA_MODE_PREMULTIPLIED + D2D1_COLORMATRIX_ALPHA_MODE_PREMULTIPLIED + + + + No documentation. + + + dn934229 + D2D1_COLORMATRIX_ALPHA_MODE_STRAIGHT + D2D1_COLORMATRIX_ALPHA_MODE_STRAIGHT + + + +

    Identifiers for the properties of the Color matrix effect.

    +
    + + dn934230 + D2D1_COLORMATRIX_PROP + D2D1_COLORMATRIX_PROP +
    + + + No documentation. + + + dn934230 + D2D1_COLORMATRIX_PROP_COLOR_MATRIX + D2D1_COLORMATRIX_PROP_COLOR_MATRIX + + + + No documentation. + + + dn934230 + D2D1_COLORMATRIX_PROP_ALPHA_MODE + D2D1_COLORMATRIX_PROP_ALPHA_MODE + + + + No documentation. + + + dn934230 + D2D1_COLORMATRIX_PROP_CLAMP_OUTPUT + D2D1_COLORMATRIX_PROP_CLAMP_OUTPUT + + + +

    Defines options that should be applied to the color space.

    +
    + + hh446992 + D2D1_COLOR_SPACE + D2D1_COLOR_SPACE +
    + + +

    The color space is otherwise described, such as with a color profile.

    +
    + + hh446992 + D2D1_COLOR_SPACE_CUSTOM + D2D1_COLOR_SPACE_CUSTOM +
    + + +

    The color space is sRGB.

    +
    + + hh446992 + D2D1_COLOR_SPACE_SRGB + D2D1_COLOR_SPACE_SRGB +
    + + +

    The color space is scRGB.

    +
    + + hh446992 + D2D1_COLOR_SPACE_SCRGB + D2D1_COLOR_SPACE_SCRGB +
    + + +

    Specifies the different methods by which two geometries can be combined.

    +
    + +

    The following illustration shows the different geometry combine modes. +

    +
    + + dd368083 + D2D1_COMBINE_MODE + D2D1_COMBINE_MODE +
    + + +

    The two regions are combined by taking the union of both. Given two geometries, A and B, the resulting geometry is geometry A + geometry B.

    +
    + + dd368083 + D2D1_COMBINE_MODE_UNION + D2D1_COMBINE_MODE_UNION +
    + + +

    The two regions are combined by taking their intersection. The new area consists of the overlapping region between the two geometries.

    +
    + + dd368083 + D2D1_COMBINE_MODE_INTERSECT + D2D1_COMBINE_MODE_INTERSECT +
    + + +

    The two regions are combined by taking the area that exists in the first region but not the second and the area that exists in the second region but not the first. Given two geometries, A and B, the new region consists of (A-B) + (B-A).

    +
    + + dd368083 + D2D1_COMBINE_MODE_XOR + D2D1_COMBINE_MODE_XOR +
    + + +

    The second region is excluded from the first. Given two geometries, A and B, the area of geometry B is removed from the area of geometry A, producing a region that is A-B.

    +
    + + dd368083 + D2D1_COMBINE_MODE_EXCLUDE + D2D1_COMBINE_MODE_EXCLUDE +
    + + +

    Specifies additional features supportable by a compatible render target when it is created. This enumeration allows a bitwise combination of its member values.

    +
    + +

    Use this enumeration when creating a compatible render target with the CreateCompatibleRenderTarget method. For more information about compatible render targets, see the Render Targets Overview.

    The option may only be requested if the parent render target was created with (for most render targets) or (for render targets created by the CreateCompatibleRenderTarget method).

    +
    + + dd368085 + D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS + D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS +
    + + +

    The render target supports no additional features.

    +
    + + dd368085 + D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE + D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE +
    + + +

    The render target supports interoperability with the Windows Graphics Device Interface (GDI).

    +
    + + dd368085 + D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE + D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE +
    + + +

    Used to specify the blend mode for all of the Direct2D blending operations.

    +
    + +

    The figure here shows an example of each of the modes with images that have an opacity of 1.0 or 0.5.

    There can be slightly different interpretations of these enumeration values depending on where the value is used.

    • With a composite effect: +

      D2D1_COMPOSITE_MODE_DESTINATION_COPY is equivalent to with the inputs inverted.
    • As a parameter to :

      D2D1_COMPOSITE_MODE_DESTINATION_COPY is a no-op since the destination is already in the selected target.
    +
    + + hh446995 + D2D1_COMPOSITE_MODE + D2D1_COMPOSITE_MODE +
    + + +

    The standard source-over-destination blend mode.

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_SOURCE_OVER + D2D1_COMPOSITE_MODE_SOURCE_OVER +
    + + +

    The destination is rendered over the source.

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_DESTINATION_OVER + D2D1_COMPOSITE_MODE_DESTINATION_OVER +
    + + +

    Performs a logical clip of the source pixels against the destination pixels.

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_SOURCE_IN + D2D1_COMPOSITE_MODE_SOURCE_IN +
    + + +

    The inverse of the operation.

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_DESTINATION_IN + D2D1_COMPOSITE_MODE_DESTINATION_IN +
    + + +

    This is the logical inverse to .

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_SOURCE_OUT + D2D1_COMPOSITE_MODE_SOURCE_OUT +
    + + +

    The is the logical inverse to .

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_DESTINATION_OUT + D2D1_COMPOSITE_MODE_DESTINATION_OUT +
    + + +

    Writes the source pixels over the destination where there are destination pixels.

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_SOURCE_ATOP + D2D1_COMPOSITE_MODE_SOURCE_ATOP +
    + + +

    The logical inverse of .

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_DESTINATION_ATOP + D2D1_COMPOSITE_MODE_DESTINATION_ATOP +
    + + +

    The source is inverted with the destination.

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_XOR + D2D1_COMPOSITE_MODE_XOR +
    + + +

    The channel components are summed.

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_PLUS + D2D1_COMPOSITE_MODE_PLUS +
    + + +

    The source is copied to the destination; the destination pixels are ignored.

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_SOURCE_COPY + D2D1_COMPOSITE_MODE_SOURCE_COPY +
    + + +

    Equivalent to , but pixels outside of the source bounds are unchanged. +

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY + D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY +
    + + +

    Destination colors are inverted according to a source mask. +

    +
    + + hh446995 + D2D1_COMPOSITE_MODE_MASK_INVERT + D2D1_COMPOSITE_MODE_MASK_INVERT +
    + + +

    Identifiers for properties of the Composite effect.

    +
    + + dn934231 + D2D1_COMPOSITE_PROP + D2D1_COMPOSITE_PROP +
    + + + No documentation. + + + dn934231 + D2D1_COMPOSITE_PROP_MODE + D2D1_COMPOSITE_PROP_MODE + + + +

    Identifiers for properties of the Contrast effect.

    +
    + + dn890720 + D2D1_CONTRAST_PROP + D2D1_CONTRAST_PROP +
    + + + No documentation. + + + dn890720 + D2D1_CONTRAST_PROP_CONTRAST + D2D1_CONTRAST_PROP_CONTRAST + + + + No documentation. + + + dn890720 + D2D1_CONTRAST_PROP_CLAMP_INPUT + D2D1_CONTRAST_PROP_CLAMP_INPUT + + + +

    Identifiers for properties of the Convolve matrix effect.

    +
    + + dn934232 + D2D1_CONVOLVEMATRIX_PROP + D2D1_CONVOLVEMATRIX_PROP +
    + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH + D2D1_CONVOLVEMATRIX_PROP_KERNEL_UNIT_LENGTH + + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE + D2D1_CONVOLVEMATRIX_PROP_SCALE_MODE + + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X + D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_X + + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y + D2D1_CONVOLVEMATRIX_PROP_KERNEL_SIZE_Y + + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX + D2D1_CONVOLVEMATRIX_PROP_KERNEL_MATRIX + + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_DIVISOR + D2D1_CONVOLVEMATRIX_PROP_DIVISOR + + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_BIAS + D2D1_CONVOLVEMATRIX_PROP_BIAS + + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET + D2D1_CONVOLVEMATRIX_PROP_KERNEL_OFFSET + + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA + D2D1_CONVOLVEMATRIX_PROP_PRESERVE_ALPHA + + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE + D2D1_CONVOLVEMATRIX_PROP_BORDER_MODE + + + + No documentation. + + + dn934232 + D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT + D2D1_CONVOLVEMATRIX_PROP_CLAMP_OUTPUT + + + +

    The interpolation mode the Convolve matrix effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.

    +
    + + dn934233 + D2D1_CONVOLVEMATRIX_SCALE_MODE + D2D1_CONVOLVEMATRIX_SCALE_MODE +
    + + + No documentation. + + + dn934233 + D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR + D2D1_CONVOLVEMATRIX_SCALE_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934233 + D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR + D2D1_CONVOLVEMATRIX_SCALE_MODE_LINEAR + + + + No documentation. + + + dn934233 + D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC + D2D1_CONVOLVEMATRIX_SCALE_MODE_CUBIC + + + + No documentation. + + + dn934233 + D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR + D2D1_CONVOLVEMATRIX_SCALE_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934233 + D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC + D2D1_CONVOLVEMATRIX_SCALE_MODE_ANISOTROPIC + + + + No documentation. + + + dn934233 + D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC + D2D1_CONVOLVEMATRIX_SCALE_MODE_HIGH_QUALITY_CUBIC + + + +

    Identifiers for properties of the Crop effect.

    +
    + + dn934234 + D2D1_CROP_PROP + D2D1_CROP_PROP +
    + + + No documentation. + + + dn934234 + D2D1_CROP_PROP_RECT + D2D1_CROP_PROP_RECT + + + + No documentation. + + + dn934234 + D2D1_CROP_PROP_BORDER_MODE + D2D1_CROP_PROP_BORDER_MODE + + + +

    This effect combines two images by adding weighted pixels from input images. It has two inputs, named Destination and Source.

    The cross fade formula is output = weight * Destination + (1 - weight) * Source.

    The CLSID for this effect is .

    +
    + + mt745030 + D2D1_CROSSFADE_PROP + D2D1_CROSSFADE_PROP +
    + + + No documentation. + + + mt745030 + D2D1_CROSSFADE_PROP_WEIGHT + D2D1_CROSSFADE_PROP_WEIGHT + + + +

    Describes the sequence of dashes and gaps in a stroke.

    +
    + +

    The following illustration shows several available dash styles.

    +
    + + dd368087 + D2D1_DASH_STYLE + D2D1_DASH_STYLE +
    + + +

    A solid line with no breaks.

    +
    + + dd368087 + D2D1_DASH_STYLE_SOLID + D2D1_DASH_STYLE_SOLID +
    + + +

    A dash followed by a gap of equal length. The dash and the gap are each twice as long as the stroke thickness.

    The equivalent dash array for is {2, 2}.

    +
    + + dd368087 + D2D1_DASH_STYLE_DASH + D2D1_DASH_STYLE_DASH +
    + + +

    A dot followed by a longer gap.

    The equivalent dash array for is {0, 2}.

    +
    + + dd368087 + D2D1_DASH_STYLE_DOT + D2D1_DASH_STYLE_DOT +
    + + +

    A dash, followed by a gap, followed by a dot, followed by another gap.

    The equivalent dash array for is {2, 2, 0, 2}.

    +
    + + dd368087 + D2D1_DASH_STYLE_DASH_DOT + D2D1_DASH_STYLE_DASH_DOT +
    + + +

    A dash, followed by a gap, followed by a dot, followed by another gap, followed by another dot, followed by another gap.

    The equivalent dash array for is {2, 2, 0, 2, 0, 2}.

    +
    + + dd368087 + D2D1_DASH_STYLE_DASH_DOT_DOT + D2D1_DASH_STYLE_DASH_DOT_DOT +
    + + +

    The dash pattern is specified by an array of floating-point values.

    +
    + + dd368087 + D2D1_DASH_STYLE_CUSTOM + D2D1_DASH_STYLE_CUSTOM +
    + + +

    Indicates the type of information provided by the Direct2D Debug Layer.

    +
    + +

    To receive debugging messages, you must install the Direct2D Debug Layer.

    +
    + + dd368090 + D2D1_DEBUG_LEVEL + D2D1_DEBUG_LEVEL +
    + + + No documentation. + + + dd368090 + D2D1_DEBUG_LEVEL_NONE + D2D1_DEBUG_LEVEL_NONE + + + + No documentation. + + + dd368090 + D2D1_DEBUG_LEVEL_ERROR + D2D1_DEBUG_LEVEL_ERROR + + + + No documentation. + + + dd368090 + D2D1_DEBUG_LEVEL_WARNING + D2D1_DEBUG_LEVEL_WARNING + + + + No documentation. + + + dd368090 + D2D1_DEBUG_LEVEL_INFORMATION + D2D1_DEBUG_LEVEL_INFORMATION + + + +

    Specifies how a device context is initialized for GDI rendering when it is retrieved from the render target.

    +
    + +

    Use this enumeration with the method to specify how the device context is initialized for GDI rendering.

    +
    + + dd368088 + D2D1_DC_INITIALIZE_MODE + D2D1_DC_INITIALIZE_MODE +
    + + +

    The current contents of the render target are copied to the device context when it is initialized.

    +
    + + dd368088 + D2D1_DC_INITIALIZE_MODE_COPY + D2D1_DC_INITIALIZE_MODE_COPY +
    + + +

    The device context is cleared to transparent black when it is initialized.

    +
    + + dd368088 + D2D1_DC_INITIALIZE_MODE_CLEAR + D2D1_DC_INITIALIZE_MODE_CLEAR +
    + + +

    This specifies options that apply to the device context for its lifetime.

    +
    + + hh446998 + D2D1_DEVICE_CONTEXT_OPTIONS + D2D1_DEVICE_CONTEXT_OPTIONS +
    + + +

    The device context is created with default options.

    +
    + + hh446998 + D2D1_DEVICE_CONTEXT_OPTIONS_NONE + D2D1_DEVICE_CONTEXT_OPTIONS_NONE +
    + + +

    Distribute rendering work across multiple threads. Refer to Improving the performance of Direct2D apps for additional notes on the use of this flag.

    +
    + + hh446998 + D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS + D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS +
    + + +

    Specifies the optimization mode for the Directional blur effect.

    +
    + + dn934235 + D2D1_DIRECTIONALBLUR_OPTIMIZATION + D2D1_DIRECTIONALBLUR_OPTIMIZATION +
    + + + No documentation. + + + dn934235 + D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED + D2D1_DIRECTIONALBLUR_OPTIMIZATION_SPEED + + + + No documentation. + + + dn934235 + D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED + D2D1_DIRECTIONALBLUR_OPTIMIZATION_BALANCED + + + + No documentation. + + + dn934235 + D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY + D2D1_DIRECTIONALBLUR_OPTIMIZATION_QUALITY + + + +

    Identifiers for properties of the Directional blur effect.

    +
    + + dn934236 + D2D1_DIRECTIONALBLUR_PROP + D2D1_DIRECTIONALBLUR_PROP +
    + + + No documentation. + + + dn934236 + D2D1_DIRECTIONALBLUR_PROP_STANDARD_DEVIATION + D2D1_DIRECTIONALBLUR_PROP_STANDARD_DEVIATION + + + + No documentation. + + + dn934236 + D2D1_DIRECTIONALBLUR_PROP_ANGLE + D2D1_DIRECTIONALBLUR_PROP_ANGLE + + + + No documentation. + + + dn934236 + D2D1_DIRECTIONALBLUR_PROP_OPTIMIZATION + D2D1_DIRECTIONALBLUR_PROP_OPTIMIZATION + + + + No documentation. + + + dn934236 + D2D1_DIRECTIONALBLUR_PROP_BORDER_MODE + D2D1_DIRECTIONALBLUR_PROP_BORDER_MODE + + + +

    Identifiers for properties of the Discrete transfer effect.

    +
    + + dn934237 + D2D1_DISCRETETRANSFER_PROP + D2D1_DISCRETETRANSFER_PROP +
    + + + No documentation. + + + dn934237 + D2D1_DISCRETETRANSFER_PROP_RED_TABLE + D2D1_DISCRETETRANSFER_PROP_RED_TABLE + + + + No documentation. + + + dn934237 + D2D1_DISCRETETRANSFER_PROP_RED_DISABLE + D2D1_DISCRETETRANSFER_PROP_RED_DISABLE + + + + No documentation. + + + dn934237 + D2D1_DISCRETETRANSFER_PROP_GREEN_TABLE + D2D1_DISCRETETRANSFER_PROP_GREEN_TABLE + + + + No documentation. + + + dn934237 + D2D1_DISCRETETRANSFER_PROP_GREEN_DISABLE + D2D1_DISCRETETRANSFER_PROP_GREEN_DISABLE + + + + No documentation. + + + dn934237 + D2D1_DISCRETETRANSFER_PROP_BLUE_TABLE + D2D1_DISCRETETRANSFER_PROP_BLUE_TABLE + + + + No documentation. + + + dn934237 + D2D1_DISCRETETRANSFER_PROP_BLUE_DISABLE + D2D1_DISCRETETRANSFER_PROP_BLUE_DISABLE + + + + No documentation. + + + dn934237 + D2D1_DISCRETETRANSFER_PROP_ALPHA_TABLE + D2D1_DISCRETETRANSFER_PROP_ALPHA_TABLE + + + + No documentation. + + + dn934237 + D2D1_DISCRETETRANSFER_PROP_ALPHA_DISABLE + D2D1_DISCRETETRANSFER_PROP_ALPHA_DISABLE + + + + No documentation. + + + dn934237 + D2D1_DISCRETETRANSFER_PROP_CLAMP_OUTPUT + D2D1_DISCRETETRANSFER_PROP_CLAMP_OUTPUT + + + +

    Identifiers for properties of the Displacement map effect.

    +
    + + dn934238 + D2D1_DISPLACEMENTMAP_PROP + D2D1_DISPLACEMENTMAP_PROP +
    + + + No documentation. + + + dn934238 + D2D1_DISPLACEMENTMAP_PROP_SCALE + D2D1_DISPLACEMENTMAP_PROP_SCALE + + + + No documentation. + + + dn934238 + D2D1_DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT + D2D1_DISPLACEMENTMAP_PROP_X_CHANNEL_SELECT + + + + No documentation. + + + dn934238 + D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT + D2D1_DISPLACEMENTMAP_PROP_Y_CHANNEL_SELECT + + + +

    Identifiers for properties of the Distant-diffuse lighting effect.

    +
    + + dn934239 + D2D1_DISTANTDIFFUSE_PROP + D2D1_DISTANTDIFFUSE_PROP +
    + + + No documentation. + + + dn934239 + D2D1_DISTANTDIFFUSE_PROP_AZIMUTH + D2D1_DISTANTDIFFUSE_PROP_AZIMUTH + + + + No documentation. + + + dn934239 + D2D1_DISTANTDIFFUSE_PROP_ELEVATION + D2D1_DISTANTDIFFUSE_PROP_ELEVATION + + + + No documentation. + + + dn934239 + D2D1_DISTANTDIFFUSE_PROP_DIFFUSE_CONSTANT + D2D1_DISTANTDIFFUSE_PROP_DIFFUSE_CONSTANT + + + + No documentation. + + + dn934239 + D2D1_DISTANTDIFFUSE_PROP_SURFACE_SCALE + D2D1_DISTANTDIFFUSE_PROP_SURFACE_SCALE + + + + No documentation. + + + dn934239 + D2D1_DISTANTDIFFUSE_PROP_COLOR + D2D1_DISTANTDIFFUSE_PROP_COLOR + + + + No documentation. + + + dn934239 + D2D1_DISTANTDIFFUSE_PROP_KERNEL_UNIT_LENGTH + D2D1_DISTANTDIFFUSE_PROP_KERNEL_UNIT_LENGTH + + + + No documentation. + + + dn934239 + D2D1_DISTANTDIFFUSE_PROP_SCALE_MODE + D2D1_DISTANTDIFFUSE_PROP_SCALE_MODE + + + +

    The interpolation mode the effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.

    +
    + + dn934240 + D2D1_DISTANTDIFFUSE_SCALE_MODE + D2D1_DISTANTDIFFUSE_SCALE_MODE +
    + + +

    Samples the nearest single point and uses that. This mode uses less processing time, but outputs the lowest quality image.

    +
    + + dn934240 + D2D1_DISTANTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR + D2D1_DISTANTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR +
    + + +

    Uses a four point sample and linear interpolation. This mode outputs a higher quality image than nearest neighbor.

    +
    + + dn934240 + D2D1_DISTANTDIFFUSE_SCALE_MODE_LINEAR + D2D1_DISTANTDIFFUSE_SCALE_MODE_LINEAR +
    + + +

    Uses a 16 sample cubic kernel for interpolation. This mode uses the most processing time, but outputs a higher quality image.

    +
    + + dn934240 + D2D1_DISTANTDIFFUSE_SCALE_MODE_CUBIC + D2D1_DISTANTDIFFUSE_SCALE_MODE_CUBIC +
    + + +

    Uses 4 linear samples within a single pixel for good edge anti-aliasing. This mode is good for scaling down by small amounts on images with few pixels.

    +
    + + dn934240 + D2D1_DISTANTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR + D2D1_DISTANTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR +
    + + +

    Uses anisotropic filtering to sample a pattern according to the transformed shape of the bitmap.

    +
    + + dn934240 + D2D1_DISTANTDIFFUSE_SCALE_MODE_ANISOTROPIC + D2D1_DISTANTDIFFUSE_SCALE_MODE_ANISOTROPIC +
    + + +

    Uses a variable size high quality cubic kernel to perform a pre-downscale the image if downscaling is involved in the transform matrix. Then uses the cubic interpolation mode for the final output.

    +
    + + dn934240 + D2D1_DISTANTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC + D2D1_DISTANTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC +
    + + +

    Identifiers for properties of the Distant-specular lighting effect.

    +
    + + dn934241 + D2D1_DISTANTSPECULAR_PROP + D2D1_DISTANTSPECULAR_PROP +
    + + + No documentation. + + + dn934241 + D2D1_DISTANTSPECULAR_PROP_AZIMUTH + D2D1_DISTANTSPECULAR_PROP_AZIMUTH + + + + No documentation. + + + dn934241 + D2D1_DISTANTSPECULAR_PROP_ELEVATION + D2D1_DISTANTSPECULAR_PROP_ELEVATION + + + + No documentation. + + + dn934241 + D2D1_DISTANTSPECULAR_PROP_SPECULAR_EXPONENT + D2D1_DISTANTSPECULAR_PROP_SPECULAR_EXPONENT + + + + No documentation. + + + dn934241 + D2D1_DISTANTSPECULAR_PROP_SPECULAR_CONSTANT + D2D1_DISTANTSPECULAR_PROP_SPECULAR_CONSTANT + + + + No documentation. + + + dn934241 + D2D1_DISTANTSPECULAR_PROP_SURFACE_SCALE + D2D1_DISTANTSPECULAR_PROP_SURFACE_SCALE + + + + No documentation. + + + dn934241 + D2D1_DISTANTSPECULAR_PROP_COLOR + D2D1_DISTANTSPECULAR_PROP_COLOR + + + + No documentation. + + + dn934241 + D2D1_DISTANTSPECULAR_PROP_KERNEL_UNIT_LENGTH + D2D1_DISTANTSPECULAR_PROP_KERNEL_UNIT_LENGTH + + + + No documentation. + + + dn934241 + D2D1_DISTANTSPECULAR_PROP_SCALE_MODE + D2D1_DISTANTSPECULAR_PROP_SCALE_MODE + + + +

    The interpolation mode the Distant-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.

    +
    + + dn934242 + D2D1_DISTANTSPECULAR_SCALE_MODE + D2D1_DISTANTSPECULAR_SCALE_MODE +
    + + + No documentation. + + + dn934242 + D2D1_DISTANTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR + D2D1_DISTANTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934242 + D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR + D2D1_DISTANTSPECULAR_SCALE_MODE_LINEAR + + + + No documentation. + + + dn934242 + D2D1_DISTANTSPECULAR_SCALE_MODE_CUBIC + D2D1_DISTANTSPECULAR_SCALE_MODE_CUBIC + + + + No documentation. + + + dn934242 + D2D1_DISTANTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR + D2D1_DISTANTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934242 + D2D1_DISTANTSPECULAR_SCALE_MODE_ANISOTROPIC + D2D1_DISTANTSPECULAR_SCALE_MODE_ANISOTROPIC + + + + No documentation. + + + dn934242 + D2D1_DISTANTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC + D2D1_DISTANTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC + + + +

    The interpolation mode the DPI compensation effect uses to scale the image.

    +
    + + dn934243 + D2D1_DPICOMPENSATION_INTERPOLATION_MODE + D2D1_DPICOMPENSATION_INTERPOLATION_MODE +
    + + + No documentation. + + + dn934243 + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_NEAREST_NEIGHBOR + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934243 + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_LINEAR + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_LINEAR + + + + No documentation. + + + dn934243 + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_CUBIC + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_CUBIC + + + + No documentation. + + + dn934243 + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934243 + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_ANISOTROPIC + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_ANISOTROPIC + + + + No documentation. + + + dn934243 + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC + D2D1_DPICOMPENSATION_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC + + + +

    Identifiers for properties of the DPI compensation effect.

    +
    + + dn934244 + D2D1_DPICOMPENSATION_PROP + D2D1_DPICOMPENSATION_PROP +
    + + + No documentation. + + + dn934244 + D2D1_DPICOMPENSATION_PROP_INTERPOLATION_MODE + D2D1_DPICOMPENSATION_PROP_INTERPOLATION_MODE + + + + No documentation. + + + dn934244 + D2D1_DPICOMPENSATION_PROP_BORDER_MODE + D2D1_DPICOMPENSATION_PROP_BORDER_MODE + + + + No documentation. + + + dn934244 + D2D1_DPICOMPENSATION_PROP_INPUT_DPI + D2D1_DPICOMPENSATION_PROP_INPUT_DPI + + + +

    Specifies whether text snapping is suppressed or clipping to the layout rectangle is enabled. This enumeration allows a bitwise combination of its member values.

    +
    + + dd368095 + D2D1_DRAW_TEXT_OPTIONS + D2D1_DRAW_TEXT_OPTIONS +
    + + +

    Text is not vertically snapped to pixel boundaries. This setting is recommended for text that is being animated.

    +
    + + dd368095 + D2D1_DRAW_TEXT_OPTIONS_NO_SNAP + D2D1_DRAW_TEXT_OPTIONS_NO_SNAP +
    + + +

    Text is clipped to the layout rectangle.

    +
    + + dd368095 + D2D1_DRAW_TEXT_OPTIONS_CLIP + D2D1_DRAW_TEXT_OPTIONS_CLIP +
    + + +

    In Windows?8.1 and later, text is rendered using color versions of glyphs, if defined by the font.

    +
    + + dd368095 + D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT + D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT +
    + + +

    Bitmap origins of color glyph bitmaps are not snapped.

    +
    + + dd368095 + D2D1_DRAW_TEXT_OPTIONS_DISABLE_COLOR_BITMAP_SNAPPING + D2D1_DRAW_TEXT_OPTIONS_DISABLE_COLOR_BITMAP_SNAPPING +
    + + +

    Text is vertically snapped to pixel boundaries and is not clipped to the layout rectangle.

    +
    + + dd368095 + D2D1_DRAW_TEXT_OPTIONS_NONE + D2D1_DRAW_TEXT_OPTIONS_NONE +
    + + +

    Values for the property of the Edge Detection effect.

    +
    + + dn890722 + D2D1_EDGEDETECTION_MODE + D2D1_EDGEDETECTION_MODE +
    + + + No documentation. + + + dn890722 + D2D1_EDGEDETECTION_MODE_SOBEL + D2D1_EDGEDETECTION_MODE_SOBEL + + + + No documentation. + + + dn890722 + D2D1_EDGEDETECTION_MODE_PREWITT + D2D1_EDGEDETECTION_MODE_PREWITT + + + +

    Identifiers for properties of the Edge Detection effect.

    +
    + + dn890723 + D2D1_EDGEDETECTION_PROP + D2D1_EDGEDETECTION_PROP +
    + + +

    The property is a float value modulating the response of the edge detection filter. A low strength value means that weaker edges will get filtered out, while a high value means stronger edges will get filtered out. The allowed range is 0.0 to 1.0. The default value is 0.5.

    +
    + + dn890723 + D2D1_EDGEDETECTION_PROP_STRENGTH + D2D1_EDGEDETECTION_PROP_STRENGTH +
    + + +

    The property is a float value specifying the amount of blur to apply. Applying blur is used to remove high frequencies and reduce phantom edges. The allowed range is 0.0 to 10.0. The default value is 0.0 (no blur applied).

    +
    + + dn890723 + D2D1_EDGEDETECTION_PROP_BLUR_RADIUS + D2D1_EDGEDETECTION_PROP_BLUR_RADIUS +
    + + +

    The property is a enumeration value which mode to use for edge detection. The default value is .

    +
    + + dn890723 + D2D1_EDGEDETECTION_PROP_MODE + D2D1_EDGEDETECTION_PROP_MODE +
    + + +

    The property is a boolean value. Edge detection only applies to the RGB channels, the alpha channel is ignored for purposes of detecting edges. If is false, the output edges is fully opaque. If is true, the input opacity is preserved. The default value is false.

    +
    + + dn890723 + D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES + D2D1_EDGEDETECTION_PROP_OVERLAY_EDGES +
    + + +

    The property is a enumeration value indicating the alpha mode of the input file. If the input is not opaque, this value is used to determine whether to unpremultiply the inputs. See the About Alpha Modes section of the Supported Pixel Formats and Alpha Modes topic for additional information. The default value is .

    +
    + + dn890723 + D2D1_EDGEDETECTION_PROP_ALPHA_MODE + D2D1_EDGEDETECTION_PROP_ALPHA_MODE +
    + + +

    Identifiers for properties of the Emboss effect.

    +
    + + dn890724 + D2D1_EMBOSS_PROP + D2D1_EMBOSS_PROP +
    + + + No documentation. + + + dn890724 + D2D1_EMBOSS_PROP_HEIGHT + D2D1_EMBOSS_PROP_HEIGHT + + + + No documentation. + + + dn890724 + D2D1_EMBOSS_PROP_DIRECTION + D2D1_EMBOSS_PROP_DIRECTION + + + +

    Identifiers for properties of the Exposure effect.

    +
    + + dn890725 + D2D1_EXPOSURE_PROP + D2D1_EXPOSURE_PROP +
    + + + No documentation. + + + dn890725 + D2D1_EXPOSURE_PROP_EXPOSURE_VALUE + D2D1_EXPOSURE_PROP_EXPOSURE_VALUE + + + +

    Specifies how a brush paints areas outside of its normal content area.

    +
    + +

    For an , the brush's content is the brush's bitmap. For an , the brush's content area is the gradient axis. For an , the brush's content is the area within the gradient ellipse.

    +
    + + dd368100 + D2D1_EXTEND_MODE + D2D1_EXTEND_MODE +
    + + +

    Repeat the edge pixels of the brush's content for all regions outside the normal content area.

    +
    + + dd368100 + D2D1_EXTEND_MODE_CLAMP + D2D1_EXTEND_MODE_CLAMP +
    + + +

    Repeat the brush's content.

    +
    + + dd368100 + D2D1_EXTEND_MODE_WRAP + D2D1_EXTEND_MODE_WRAP +
    + + +

    The same as , except that alternate tiles of the brush's content are flipped. (The brush's normal content is drawn untransformed.)

    +
    + + dd368100 + D2D1_EXTEND_MODE_MIRROR + D2D1_EXTEND_MODE_MIRROR +
    + + +

    Specifies whether Direct2D provides synchronization for an and the resources it creates, so that they may be safely accessed from multiple threads.

    +
    + +

    When you create a factory, you can specify whether it is multithreaded or singlethreaded. A singlethreaded factory provides no serialization against any other single threaded instance within Direct2D, so this mechanism provides a very large degree of scaling on the CPU.

    You can also create a multithreaded factory instance. In this case, the factory and all derived objects can be used from any thread, and each render target can be rendered to independently. Direct2D serializes calls to these objects, so a single multithreaded Direct2D instance won't scale as well on the CPU as many single threaded instances. However, the resources can be shared within the multithreaded instance.

    Note the qualifier "On the CPU": GPUs generally take advantage of fine-grained parallelism more so than CPUs. For example, multithreaded calls from the CPU might still end up being serialized when being sent to the GPU; however, a whole bank of pixel and vertex shaders will run in parallel to perform the rendering.

    +
    + + dd368104 + D2D1_FACTORY_TYPE + D2D1_FACTORY_TYPE +
    + + + No documentation. + + + dd368104 + D2D1_FACTORY_TYPE_SINGLE_THREADED + D2D1_FACTORY_TYPE_SINGLE_THREADED + + + + No documentation. + + + dd368104 + D2D1_FACTORY_TYPE_MULTI_THREADED + D2D1_FACTORY_TYPE_MULTI_THREADED + + + +

    Defines capabilities of the underlying Direct3D device which may be queried using .

    +
    + + hh871443 + D2D1_FEATURE + D2D1_FEATURE +
    + + + No documentation. + + + hh871443 + D2D1_FEATURE_DOUBLES + D2D1_FEATURE_DOUBLES + + + + No documentation. + + + hh871443 + D2D1_FEATURE_D3D10_X_HARDWARE_OPTIONS + D2D1_FEATURE_D3D10_X_HARDWARE_OPTIONS + + + +

    Describes the minimum DirectX support required for hardware rendering by a render target.

    +
    + + dd756628 + D2D1_FEATURE_LEVEL + D2D1_FEATURE_LEVEL +
    + + +

    Direct2D determines whether the video card provides adequate hardware rendering support.

    +
    + + dd756628 + D2D1_FEATURE_LEVEL_DEFAULT + D2D1_FEATURE_LEVEL_DEFAULT +
    + + +

    The video card must support DirectX 9.

    +
    + + dd756628 + D2D1_FEATURE_LEVEL_9 + D2D1_FEATURE_LEVEL_9 +
    + + +

    The video card must support DirectX 10.

    +
    + + dd756628 + D2D1_FEATURE_LEVEL_10 + D2D1_FEATURE_LEVEL_10 +
    + + +

    Indicates whether a specific figure is filled or hollow.

    +
    + + dd368106 + D2D1_FIGURE_BEGIN + D2D1_FIGURE_BEGIN +
    + + + No documentation. + + + dd368106 + D2D1_FIGURE_BEGIN_FILLED + D2D1_FIGURE_BEGIN_FILLED + + + + No documentation. + + + dd368106 + D2D1_FIGURE_BEGIN_HOLLOW + D2D1_FIGURE_BEGIN_HOLLOW + + + +

    Indicates whether a specific figure is open or closed.

    +
    + + dd368108 + D2D1_FIGURE_END + D2D1_FIGURE_END +
    + + + No documentation. + + + dd368108 + D2D1_FIGURE_END_OPEN + D2D1_FIGURE_END_OPEN + + + + No documentation. + + + dd368108 + D2D1_FIGURE_END_CLOSED + D2D1_FIGURE_END_CLOSED + + + +

    Specifies how the intersecting areas of geometries or figures are combined to form the area of the composite geometry.

    +
    + +

    Use the enumeration when creating an with the CreateGeometryGroup method, or when modifying the fill mode of an with the method.

    Direct2D fills the interior of a path by using one of the two fill modes specified by this enumeration: (alternate) or (winding). Because the modes determine how to fill the interior of a closed shape, all shapes are treated as closed when they are filled. If there is a gap in a segment in a shape, draw an imaginary line to close it.

    To see the difference between the winding and alternate fill modes, assume that you have four circles with the same center and a different radius, as shown in the following illustration. The first one has the radius of 25, the second 50, the third 75, and the fourth 100.

    The following illustration shows the shape filled by using the alternate fill mode. Notice that the center and third ring are not filled. This is because a ray drawn from any point in either of those two rings passes through an even number of segments.

    The following illustration explains this process.

    The following illustration shows how the same shape is filled when the winding fill mode is specified.

    Notice that all the rings are filled. This is because all the segments run in the same direction, so a ray drawn from any point will cross one or more segments, and the sum of the crossings will not equal zero.

    The following illustration explains this process. The red arrows represent the direction in which the segments are drawn and the black arrow represents an arbitrary ray that runs from a point in the innermost ring. Starting with a value of zero, for each segment that the ray crosses, a value of one is added for every clockwise intersection. All points lie in the fill region in this illustration, because the count does not equal zero.

    +
    + + dd368110 + D2D1_FILL_MODE + D2D1_FILL_MODE +
    + + +

    Determines whether a point is in the fill region by drawing a ray from that point to infinity in any direction, and then counting the number of path segments within the given shape that the ray crosses. If this number is odd, the point is in the fill region; if even, the point is outside the fill region.

    +
    + + dd368110 + D2D1_FILL_MODE_ALTERNATE + D2D1_FILL_MODE_ALTERNATE +
    + + +

    Determines whether a point is in the fill region of the path by drawing a ray from that point to infinity in any direction, and then examining the places where a segment of the shape crosses the ray. Starting with a count of zero, add one each time a segment crosses the ray from left to right and subtract one each time a path segment crosses the ray from right to left, as long as left and right are seen from the perspective of the ray. After counting the crossings, if the result is zero, then the point is outside the path. Otherwise, it is inside the path.

    +
    + + dd368110 + D2D1_FILL_MODE_WINDING + D2D1_FILL_MODE_WINDING +
    + + +

    Represents filtering modes that a transform may select to use on input textures.

    +
    + +

    This enumeration has the same numeric values as .

    +
    + + hh404306 + D2D1_FILTER + D2D1_FILTER +
    + + +

    Use point sampling for minification, magnification, and mip-level sampling.

    +
    + + hh404306 + D2D1_FILTER_MIN_MAG_MIP_POINT + D2D1_FILTER_MIN_MAG_MIP_POINT +
    + + +

    Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.

    +
    + + hh404306 + D2D1_FILTER_MIN_MAG_POINT_MIP_LINEAR + D2D1_FILTER_MIN_MAG_POINT_MIP_LINEAR +
    + + +

    Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.

    +
    + + hh404306 + D2D1_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT + D2D1_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT +
    + + +

    Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.

    +
    + + hh404306 + D2D1_FILTER_MIN_POINT_MAG_MIP_LINEAR + D2D1_FILTER_MIN_POINT_MAG_MIP_LINEAR +
    + + +

    Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.

    +
    + + hh404306 + D2D1_FILTER_MIN_LINEAR_MAG_MIP_POINT + D2D1_FILTER_MIN_LINEAR_MAG_MIP_POINT +
    + + +

    Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.

    +
    + + hh404306 + D2D1_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR + D2D1_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR +
    + + +

    Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.

    +
    + + hh404306 + D2D1_FILTER_MIN_MAG_LINEAR_MIP_POINT + D2D1_FILTER_MIN_MAG_LINEAR_MIP_POINT +
    + + +

    Use linear interpolation for minification, magnification, and mip-level sampling.

    +
    + + hh404306 + D2D1_FILTER_MIN_MAG_MIP_LINEAR + D2D1_FILTER_MIN_MAG_MIP_LINEAR +
    + + +

    Use anisotropic interpolation for minification, magnification, and mip-level sampling.

    +
    + + hh404306 + D2D1_FILTER_ANISOTROPIC + D2D1_FILTER_ANISOTROPIC +
    + + +

    Identifiers for properties of the Flood effect.

    +
    + + dn934245 + D2D1_FLOOD_PROP + D2D1_FLOOD_PROP +
    + + + No documentation. + + + dn934245 + D2D1_FLOOD_PROP_COLOR + D2D1_FLOOD_PROP_COLOR + + + +

    Specifies which gamma is used for interpolation.

    +
    + +

    Interpolating in a linear gamma space () can avoid changes in perceived brightness caused by the effect of gamma correction in spaces where the gamma is not 1.0, such as the default sRGB color space, where the gamma is 2.2. For an example of the differences between these two blending modes, consider the following illustration, which shows two gradients, each of which blends from red to blue to green:

    The first gradient is interpolated linearly in the space of the render target (sRGB in this case), and one can see the dark bands between each color. The second gradient uses a gamma-correct linear interpolation, and thus does not exhibit the same variations in brightness.

    +
    + + dd368113 + D2D1_GAMMA + D2D1_GAMMA +
    + + +

    Interpolation is performed in the standard RGB (sRGB) gamma.

    +
    + + dd368113 + D2D1_GAMMA_2_2 + D2D1_GAMMA_2_2 +
    + + +

    Interpolation is performed in the linear-gamma color space.

    +
    + + dd368113 + D2D1_GAMMA_1_0 + D2D1_GAMMA_1_0 +
    + + +

    Specifies which gamma is used for interpolation.

    +
    + +

    Interpolating in a linear gamma space () can avoid changes in perceived brightness caused by the effect of gamma correction in spaces where the gamma is not 1.0, such as the default sRGB color space, where the gamma is 2.2. For an example of the differences between these two blending modes, consider the following illustration, which shows two gradients, each of which blends from red to blue to green:

    The first gradient is interpolated linearly in the space of the render target (sRGB in this case), and one can see the dark bands between each color. The second gradient uses a gamma-correct linear interpolation, and thus does not exhibit the same variations in brightness.

    +
    + + dd368113 + D2D1_GAMMA1 + D2D1_GAMMA1 +
    + + +

    Interpolation is performed in the standard RGB (sRGB) gamma.

    +
    + + dd368113 + D2D1_GAMMA1_G22 + D2D1_GAMMA1_G22 +
    + + +

    Interpolation is performed in the linear-gamma color space.

    +
    + + dd368113 + D2D1_GAMMA1_G10 + D2D1_GAMMA1_G10 +
    + + + No documentation. + + + dd368113 + D2D1_GAMMA1_G2084 + D2D1_GAMMA1_G2084 + + + +

    Identifiers for properties of the Gamma transfer effect.

    +
    + + dn934246 + D2D1_GAMMATRANSFER_PROP + D2D1_GAMMATRANSFER_PROP +
    + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_RED_AMPLITUDE + D2D1_GAMMATRANSFER_PROP_RED_AMPLITUDE + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_RED_EXPONENT + D2D1_GAMMATRANSFER_PROP_RED_EXPONENT + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_RED_OFFSET + D2D1_GAMMATRANSFER_PROP_RED_OFFSET + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_RED_DISABLE + D2D1_GAMMATRANSFER_PROP_RED_DISABLE + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_GREEN_AMPLITUDE + D2D1_GAMMATRANSFER_PROP_GREEN_AMPLITUDE + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_GREEN_EXPONENT + D2D1_GAMMATRANSFER_PROP_GREEN_EXPONENT + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_GREEN_OFFSET + D2D1_GAMMATRANSFER_PROP_GREEN_OFFSET + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_GREEN_DISABLE + D2D1_GAMMATRANSFER_PROP_GREEN_DISABLE + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_BLUE_AMPLITUDE + D2D1_GAMMATRANSFER_PROP_BLUE_AMPLITUDE + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_BLUE_EXPONENT + D2D1_GAMMATRANSFER_PROP_BLUE_EXPONENT + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_BLUE_OFFSET + D2D1_GAMMATRANSFER_PROP_BLUE_OFFSET + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_BLUE_DISABLE + D2D1_GAMMATRANSFER_PROP_BLUE_DISABLE + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_ALPHA_AMPLITUDE + D2D1_GAMMATRANSFER_PROP_ALPHA_AMPLITUDE + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_ALPHA_EXPONENT + D2D1_GAMMATRANSFER_PROP_ALPHA_EXPONENT + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_ALPHA_OFFSET + D2D1_GAMMATRANSFER_PROP_ALPHA_OFFSET + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_ALPHA_DISABLE + D2D1_GAMMATRANSFER_PROP_ALPHA_DISABLE + + + + No documentation. + + + dn934246 + D2D1_GAMMATRANSFER_PROP_CLAMP_OUTPUT + D2D1_GAMMATRANSFER_PROP_CLAMP_OUTPUT + + + +

    The optimization mode for the Gaussian blur effect.

    +
    + + dn934247 + D2D1_GAUSSIANBLUR_OPTIMIZATION + D2D1_GAUSSIANBLUR_OPTIMIZATION +
    + + + No documentation. + + + dn934247 + D2D1_GAUSSIANBLUR_OPTIMIZATION_SPEED + D2D1_GAUSSIANBLUR_OPTIMIZATION_SPEED + + + + No documentation. + + + dn934247 + D2D1_GAUSSIANBLUR_OPTIMIZATION_BALANCED + D2D1_GAUSSIANBLUR_OPTIMIZATION_BALANCED + + + + No documentation. + + + dn934247 + D2D1_GAUSSIANBLUR_OPTIMIZATION_QUALITY + D2D1_GAUSSIANBLUR_OPTIMIZATION_QUALITY + + + +

    Identifiers for properties of the Gaussian blur effect.

    +
    + + dn934248 + D2D1_GAUSSIANBLUR_PROP + D2D1_GAUSSIANBLUR_PROP +
    + + + No documentation. + + + dn934248 + D2D1_GAUSSIANBLUR_PROP_STANDARD_DEVIATION + D2D1_GAUSSIANBLUR_PROP_STANDARD_DEVIATION + + + + No documentation. + + + dn934248 + D2D1_GAUSSIANBLUR_PROP_OPTIMIZATION + D2D1_GAUSSIANBLUR_PROP_OPTIMIZATION + + + + No documentation. + + + dn934248 + D2D1_GAUSSIANBLUR_PROP_BORDER_MODE + D2D1_GAUSSIANBLUR_PROP_BORDER_MODE + + + +

    Describes how one geometry object is spatially related to another geometry object.

    +
    + + dd368115 + D2D1_GEOMETRY_RELATION + D2D1_GEOMETRY_RELATION +
    + + +

    The relationship between the two geometries cannot be determined. This value is never returned by any D2D method.

    +
    + + dd368115 + D2D1_GEOMETRY_RELATION_UNKNOWN + D2D1_GEOMETRY_RELATION_UNKNOWN +
    + + +

    The two geometries do not intersect at all.

    +
    + + dd368115 + D2D1_GEOMETRY_RELATION_DISJOINT + D2D1_GEOMETRY_RELATION_DISJOINT +
    + + +

    The instance geometry is entirely contained by the passed-in geometry.

    +
    + + dd368115 + D2D1_GEOMETRY_RELATION_IS_CONTAINED + D2D1_GEOMETRY_RELATION_IS_CONTAINED +
    + + +

    The instance geometry entirely contains the passed-in geometry.

    +
    + + dd368115 + D2D1_GEOMETRY_RELATION_CONTAINS + D2D1_GEOMETRY_RELATION_CONTAINS +
    + + +

    The two geometries overlap but neither completely contains the other.

    +
    + + dd368115 + D2D1_GEOMETRY_RELATION_OVERLAP + D2D1_GEOMETRY_RELATION_OVERLAP +
    + + +

    Specifies how a geometry is simplified to an .

    +
    + + dd368117 + D2D1_GEOMETRY_SIMPLIFICATION_OPTION + D2D1_GEOMETRY_SIMPLIFICATION_OPTION +
    + + + No documentation. + + + dd368117 + D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES + D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES + + + + No documentation. + + + dd368117 + D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES + D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES + + + +

    Specifies which formats are supported in the font, either at a font-wide level or per glyph.

    +
    + + mt725308 + DWRITE_GLYPH_IMAGE_FORMATS + DWRITE_GLYPH_IMAGE_FORMATS +
    + + +

    Indicates no data is available for this glyph.

    +
    + + mt725308 + DWRITE_GLYPH_IMAGE_FORMATS_NONE + DWRITE_GLYPH_IMAGE_FORMATS_NONE +
    + + +

    The glyph has TrueType outlines.

    +
    + + mt725308 + DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE + DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE +
    + + +

    The glyph has CFF outlines.

    +
    + + mt725308 + DWRITE_GLYPH_IMAGE_FORMATS_CFF + DWRITE_GLYPH_IMAGE_FORMATS_CFF +
    + + +

    The glyph has multilayered COLR data.

    +
    + + mt725308 + DWRITE_GLYPH_IMAGE_FORMATS_COLR + DWRITE_GLYPH_IMAGE_FORMATS_COLR +
    + + +

    The glyph has SVG outlines as standard XML. Fonts may store the content gzip'd rather than plain text, indicated by the first two bytes as gzip header {0x1F 0x8B}.

    +
    + + mt725308 + DWRITE_GLYPH_IMAGE_FORMATS_SVG + DWRITE_GLYPH_IMAGE_FORMATS_SVG +
    + + +

    The glyph has PNG image data, with standard PNG IHDR.

    +
    + + mt725308 + DWRITE_GLYPH_IMAGE_FORMATS_PNG + DWRITE_GLYPH_IMAGE_FORMATS_PNG +
    + + +

    The glyph has JPEG image data, with standard JIFF SOI header.

    +
    + + mt725308 + DWRITE_GLYPH_IMAGE_FORMATS_JPEG + DWRITE_GLYPH_IMAGE_FORMATS_JPEG +
    + + +

    The glyph has TIFF image data.

    +
    + + mt725308 + DWRITE_GLYPH_IMAGE_FORMATS_TIFF + DWRITE_GLYPH_IMAGE_FORMATS_TIFF +
    + + +

    The glyph has raw 32-bit premultiplied BGRA data.

    +
    + + mt725308 + DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 + DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 +
    + + +

    Values for the property of the Highlights and Shadows effect.

    +
    + + dn890727 + D2D1_HIGHLIGHTSANDSHADOWS_INPUT_GAMMA + D2D1_HIGHLIGHTSANDSHADOWS_INPUT_GAMMA +
    + + + No documentation. + + + dn890727 + D2D1_HIGHLIGHTSANDSHADOWS_INPUT_GAMMA_LINEAR + D2D1_HIGHLIGHTSANDSHADOWS_INPUT_GAMMA_LINEAR + + + + No documentation. + + + dn890727 + D2D1_HIGHLIGHTSANDSHADOWS_INPUT_GAMMA_SRGB + D2D1_HIGHLIGHTSANDSHADOWS_INPUT_GAMMA_SRGB + + + +

    Identifiers for properties of the Highlights and Shadows effect.

    +
    + + dn890728 + D2D1_HIGHLIGHTSANDSHADOWS_PROP + D2D1_HIGHLIGHTSANDSHADOWS_PROP +
    + + + No documentation. + + + dn890728 + D2D1_HIGHLIGHTSANDSHADOWS_PROP_HIGHLIGHTS + D2D1_HIGHLIGHTSANDSHADOWS_PROP_HIGHLIGHTS + + + + No documentation. + + + dn890728 + D2D1_HIGHLIGHTSANDSHADOWS_PROP_SHADOWS + D2D1_HIGHLIGHTSANDSHADOWS_PROP_SHADOWS + + + + No documentation. + + + dn890728 + D2D1_HIGHLIGHTSANDSHADOWS_PROP_CLARITY + D2D1_HIGHLIGHTSANDSHADOWS_PROP_CLARITY + + + + No documentation. + + + dn890728 + D2D1_HIGHLIGHTSANDSHADOWS_PROP_INPUT_GAMMA + D2D1_HIGHLIGHTSANDSHADOWS_PROP_INPUT_GAMMA + + + + No documentation. + + + dn890728 + D2D1_HIGHLIGHTSANDSHADOWS_PROP_MASK_BLUR_RADIUS + D2D1_HIGHLIGHTSANDSHADOWS_PROP_MASK_BLUR_RADIUS + + + +

    Identifiers for properties of the Histogram effect.

    +
    + + dn934249 + D2D1_HISTOGRAM_PROP + D2D1_HISTOGRAM_PROP +
    + + + No documentation. + + + dn934249 + D2D1_HISTOGRAM_PROP_NUM_BINS + D2D1_HISTOGRAM_PROP_NUM_BINS + + + + No documentation. + + + dn934249 + D2D1_HISTOGRAM_PROP_CHANNEL_SELECT + D2D1_HISTOGRAM_PROP_CHANNEL_SELECT + + + + No documentation. + + + dn934249 + D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT + D2D1_HISTOGRAM_PROP_HISTOGRAM_OUTPUT + + + +

    Identifiers for properties of the Hue rotate effect.

    +
    + + dn934250 + D2D1_HUEROTATION_PROP + D2D1_HUEROTATION_PROP +
    + + + No documentation. + + + dn934250 + D2D1_HUEROTATION_PROP_ANGLE + D2D1_HUEROTATION_PROP_ANGLE + + + +

    Values for the property of the Hue to RGB effect.

    +
    + + dn890729 + D2D1_HUETORGB_INPUT_COLOR_SPACE + D2D1_HUETORGB_INPUT_COLOR_SPACE +
    + + + No documentation. + + + dn890729 + D2D1_HUETORGB_INPUT_COLOR_SPACE_HUE_SATURATION_VALUE + D2D1_HUETORGB_INPUT_COLOR_SPACE_HUE_SATURATION_VALUE + + + + No documentation. + + + dn890729 + D2D1_HUETORGB_INPUT_COLOR_SPACE_HUE_SATURATION_LIGHTNESS + D2D1_HUETORGB_INPUT_COLOR_SPACE_HUE_SATURATION_LIGHTNESS + + + +

    Identifiers for properties of the Hue to RGB effect.

    +
    + + dn890730 + D2D1_HUETORGB_PROP + D2D1_HUETORGB_PROP +
    + + + No documentation. + + + dn890730 + D2D1_HUETORGB_PROP_INPUT_COLOR_SPACE + D2D1_HUETORGB_PROP_INPUT_COLOR_SPACE + + + +

    Option flags controlling primary conversion performed by CreateImageSourceFromDxgi, if any.

    +
    + + dn890733 + D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS + D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS +
    + + + No documentation. + + + dn890733 + D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS_NONE + D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS_NONE + + + + No documentation. + + + dn890733 + D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS_LOW_QUALITY_PRIMARY_CONVERSION + D2D1_IMAGE_SOURCE_FROM_DXGI_OPTIONS_LOW_QUALITY_PRIMARY_CONVERSION + + + +

    Controls option flags for a new when it is created.

    +
    + +

    ?

    D2D1_IMAGE_SOURCE_CREATION_OPTIONS_RELEASE_SOURCE causes the image source to not retain a reference to the source object used to create it. It can decrease the quality and efficiency of printing.

    +
    + + dn890734 + D2D1_IMAGE_SOURCE_LOADING_OPTIONS + D2D1_IMAGE_SOURCE_LOADING_OPTIONS +
    + + +

    No options are used.

    +
    + + dn890734 + D2D1_IMAGE_SOURCE_LOADING_OPTIONS_NONE + D2D1_IMAGE_SOURCE_LOADING_OPTIONS_NONE +
    + + +

    Indicates the image source should release its reference to the WIC bitmap source after it has initialized. By default, the image source retains a reference to the WIC bitmap source for the lifetime of the object to enable quality and speed optimizations for printing. This option disables that optimization. +

    +
    + + dn890734 + D2D1_IMAGE_SOURCE_LOADING_OPTIONS_RELEASE_SOURCE + D2D1_IMAGE_SOURCE_LOADING_OPTIONS_RELEASE_SOURCE +
    + + +

    Indicates the image source should only populate subregions of the image cache on-demand. You can control this behavior using the EnsureCached and TrimCache methods. This options provides the ability to improve memory usage by only keeping needed portions of the image in memory. This option requires that the image source has a reference to the WIC bitmap source, and is incompatible with .

    +
    + + dn890734 + D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND + D2D1_IMAGE_SOURCE_LOADING_OPTIONS_CACHE_ON_DEMAND +
    + + +

    Specifies the appearance of the ink nib (pen tip) as part of an structure.

    +
    + + dn890735 + D2D1_INK_NIB_SHAPE + D2D1_INK_NIB_SHAPE +
    + + + No documentation. + + + dn890735 + D2D1_INK_NIB_SHAPE_ROUND + D2D1_INK_NIB_SHAPE_ROUND + + + + No documentation. + + + dn890735 + D2D1_INK_NIB_SHAPE_SQUARE + D2D1_INK_NIB_SHAPE_SQUARE + + + +

    This is used to specify the quality of image scaling with and with the 2D affine transform effect.

    +
    + + hh447004 + D2D1_INTERPOLATION_MODE + D2D1_INTERPOLATION_MODE +
    + + + No documentation. + + + hh447004 + D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR + D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + hh447004 + D2D1_INTERPOLATION_MODE_LINEAR + D2D1_INTERPOLATION_MODE_LINEAR + + + + No documentation. + + + hh447004 + D2D1_INTERPOLATION_MODE_CUBIC + D2D1_INTERPOLATION_MODE_CUBIC + + + + No documentation. + + + hh447004 + D2D1_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + D2D1_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + hh447004 + D2D1_INTERPOLATION_MODE_ANISOTROPIC + D2D1_INTERPOLATION_MODE_ANISOTROPIC + + + + No documentation. + + + hh447004 + D2D1_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC + D2D1_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC + + + + No documentation. + + + D2D1_ENUM_0 + D2D1_ENUM_0 + + + + No documentation. + + + D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR + D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR + + + + No documentation. + + + D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR + D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR + + + + No documentation. + + + D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC + D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC + + + + No documentation. + + + D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR + D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC + D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC + + + + No documentation. + + + D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC + D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC + + + + No documentation. + + + D2D1_INTERPOLATION_MODE_DEFINITION_FANT + D2D1_INTERPOLATION_MODE_DEFINITION_FANT + + + + No documentation. + + + D2D1_INTERPOLATION_MODE_DEFINITION_MIPMAP_LINEAR + D2D1_INTERPOLATION_MODE_DEFINITION_MIPMAP_LINEAR + + + +

    Specifies options that can be applied when a layer resource is applied to create a layer.

    Note??Starting in Windows?8, the option is no longer supported. See for Windows?8 layer options.? +
    + +

    ClearType antialiasing must use the current contents of the render target to blend properly. When a pushed layer requests initializing for ClearType, Direct2D copies the current contents of the render target into the layer so that ClearType antialiasing can be performed. Rendering ClearType text into a transparent layer does not produce the desired results.

    A small performance hit from re-copying content occurs when is called.

    +
    + + dd368124 + D2D1_LAYER_OPTIONS + D2D1_LAYER_OPTIONS +
    + + + No documentation. + + + dd368124 + D2D1_LAYER_OPTIONS_NONE + D2D1_LAYER_OPTIONS_NONE + + + + No documentation. + + + dd368124 + D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE + D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE + + + +

    Specifies how the layer contents should be prepared. +

    +
    + + hh997712 + D2D1_LAYER_OPTIONS1 + D2D1_LAYER_OPTIONS1 +
    + + +

    Default layer behavior. A premultiplied layer target is pushed and its contents are cleared to transparent black. +

    +
    + + hh997712 + D2D1_LAYER_OPTIONS1_NONE + D2D1_LAYER_OPTIONS1_NONE +
    + + +

    The layer is not cleared to transparent black.

    +
    + + hh997712 + D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND + D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND +
    + + +

    The layer is always created as ignore alpha. All content rendered into the layer will be treated as opaque.

    +
    + + hh997712 + D2D1_LAYER_OPTIONS1_IGNORE_ALPHA + D2D1_LAYER_OPTIONS1_IGNORE_ALPHA +
    + + +

    Identifiers for properties of the Linear transfer effect.

    +
    + + dn934251 + D2D1_LINEARTRANSFER_PROP + D2D1_LINEARTRANSFER_PROP +
    + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_RED_Y_INTERCEPT + D2D1_LINEARTRANSFER_PROP_RED_Y_INTERCEPT + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_RED_SLOPE + D2D1_LINEARTRANSFER_PROP_RED_SLOPE + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_RED_DISABLE + D2D1_LINEARTRANSFER_PROP_RED_DISABLE + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_GREEN_Y_INTERCEPT + D2D1_LINEARTRANSFER_PROP_GREEN_Y_INTERCEPT + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_GREEN_SLOPE + D2D1_LINEARTRANSFER_PROP_GREEN_SLOPE + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_GREEN_DISABLE + D2D1_LINEARTRANSFER_PROP_GREEN_DISABLE + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_BLUE_Y_INTERCEPT + D2D1_LINEARTRANSFER_PROP_BLUE_Y_INTERCEPT + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_BLUE_SLOPE + D2D1_LINEARTRANSFER_PROP_BLUE_SLOPE + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_BLUE_DISABLE + D2D1_LINEARTRANSFER_PROP_BLUE_DISABLE + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_ALPHA_Y_INTERCEPT + D2D1_LINEARTRANSFER_PROP_ALPHA_Y_INTERCEPT + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_ALPHA_SLOPE + D2D1_LINEARTRANSFER_PROP_ALPHA_SLOPE + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_ALPHA_DISABLE + D2D1_LINEARTRANSFER_PROP_ALPHA_DISABLE + + + + No documentation. + + + dn934251 + D2D1_LINEARTRANSFER_PROP_CLAMP_OUTPUT + D2D1_LINEARTRANSFER_PROP_CLAMP_OUTPUT + + + +

    Describes the shape that joins two lines or segments.

    +
    + +

    A miter limit affects how sharp miter joins are allowed to be. If the line join style is , then the join will be mitered with regular angular vertices if it doesn't extend beyond the miter limit; otherwise, the line join will be beveled.

    The following illustration shows different line join settings for the same stroked path geometry.

    + + + dd368130 + D2D1_LINE_JOIN + D2D1_LINE_JOIN + + +

    +

    Regular angular vertices.

    +
    + + dd368130 + D2D1_LINE_JOIN_MITER + D2D1_LINE_JOIN_MITER +
    + + +

    Beveled vertices.

    +
    + + dd368130 + D2D1_LINE_JOIN_BEVEL + D2D1_LINE_JOIN_BEVEL +
    + + +

    Rounded vertices.

    +
    + + dd368130 + D2D1_LINE_JOIN_ROUND + D2D1_LINE_JOIN_ROUND +
    + + +

    Regular angular vertices unless the join would extend beyond the miter limit; otherwise, beveled vertices.

    +
    + + dd368130 + D2D1_LINE_JOIN_MITER_OR_BEVEL + D2D1_LINE_JOIN_MITER_OR_BEVEL +
    + + +

    Identifiers for the properties of the 3D Lookup Table effect.

    +
    + + dn890738 + D2D1_LOOKUPTABLE3D_PROP + D2D1_LOOKUPTABLE3D_PROP +
    + + +

    The property is a reference to an object. The default value is null.

    +
    + + dn890738 + D2D1_LOOKUPTABLE3D_PROP_LUT + D2D1_LOOKUPTABLE3D_PROP_LUT +
    + + +

    The property is a value indicating the alpha mode of the input file. See the About Alpha Modes section of the Supported Pixel Formats and Alpha Modes topic for additional information.

    +
    + + dn890738 + D2D1_LOOKUPTABLE3D_PROP_ALPHA_MODE + D2D1_LOOKUPTABLE3D_PROP_ALPHA_MODE +
    + + +

    Specifies how the memory to be mapped from the corresponding should be treated.

    +
    + +

    The option can be used only if the bitmap was created with the flag.

    These flags will be not be able to be used on bitmaps created by the . However, the will receive bitmaps for which these flags are valid.

    can only be used with . Both of these options are only available through the effect author API, not through the Direct2D rendering API. +

    +
    + + hh447006 + D2D1_MAP_OPTIONS + D2D1_MAP_OPTIONS +
    + + + No documentation. + + + hh447006 + D2D1_MAP_OPTIONS_NONE + D2D1_MAP_OPTIONS_NONE + + + + No documentation. + + + hh447006 + D2D1_MAP_OPTIONS_READ + D2D1_MAP_OPTIONS_READ + + + + No documentation. + + + hh447006 + D2D1_MAP_OPTIONS_WRITE + D2D1_MAP_OPTIONS_WRITE + + + + No documentation. + + + hh447006 + D2D1_MAP_OPTIONS_DISCARD + D2D1_MAP_OPTIONS_DISCARD + + + +

    Indicates the measuring method used for text layout.

    +
    + + dd368133 + DWRITE_MEASURING_MODE + DWRITE_MEASURING_MODE +
    + + +

    Specifies that text is measured using glyph ideal metrics whose values are independent to the current display resolution.

    +
    + + dd368133 + DWRITE_MEASURING_MODE_NATURAL + DWRITE_MEASURING_MODE_NATURAL +
    + + +

    Specifies that text is measured using glyph display-compatible metrics whose values tuned for the current display resolution.

    +
    + + dd368133 + DWRITE_MEASURING_MODE_GDI_CLASSIC + DWRITE_MEASURING_MODE_GDI_CLASSIC +
    + + +

    Specifies that text is measured using the same glyph display metrics as text measured by GDI using a font created with CLEARTYPE_NATURAL_QUALITY.

    +
    + + dd368133 + DWRITE_MEASURING_MODE_GDI_NATURAL + DWRITE_MEASURING_MODE_GDI_NATURAL +
    + + +

    The mode for the Morphology effect.

    +
    + + dn934252 + D2D1_MORPHOLOGY_MODE + D2D1_MORPHOLOGY_MODE +
    + + + No documentation. + + + dn934252 + D2D1_MORPHOLOGY_MODE_ERODE + D2D1_MORPHOLOGY_MODE_ERODE + + + + No documentation. + + + dn934252 + D2D1_MORPHOLOGY_MODE_DILATE + D2D1_MORPHOLOGY_MODE_DILATE + + + +

    Identifiers for properties of the Morphology effect.

    +
    + + dn934253 + D2D1_MORPHOLOGY_PROP + D2D1_MORPHOLOGY_PROP +
    + + + No documentation. + + + dn934253 + D2D1_MORPHOLOGY_PROP_MODE + D2D1_MORPHOLOGY_PROP_MODE + + + + No documentation. + + + dn934253 + D2D1_MORPHOLOGY_PROP_WIDTH + D2D1_MORPHOLOGY_PROP_WIDTH + + + + No documentation. + + + dn934253 + D2D1_MORPHOLOGY_PROP_HEIGHT + D2D1_MORPHOLOGY_PROP_HEIGHT + + + +

    Describes whether an opacity mask contains graphics or text. Direct2D uses this information to determine which gamma space to use when blending the opacity mask.

    +
    + + dd756629 + D2D1_OPACITY_MASK_CONTENT + D2D1_OPACITY_MASK_CONTENT +
    + + +

    The opacity mask contains graphics. The opacity mask is blended in the gamma 2.2 color space.

    +
    + + dd756629 + D2D1_OPACITY_MASK_CONTENT_GRAPHICS + D2D1_OPACITY_MASK_CONTENT_GRAPHICS +
    + + +

    The opacity mask contains non-GDI text. The gamma space used for blending is obtained from the render target's text rendering parameters. ().

    +
    + + dd756629 + D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL + D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL +
    + + +

    The opacity mask contains text rendered using the GDI-compatible rendering mode. The opacity mask is blended using the gamma for GDI rendering.

    +
    + + dd756629 + D2D1_OPACITY_MASK_CONTENT_TEXT_GDI_COMPATIBLE + D2D1_OPACITY_MASK_CONTENT_TEXT_GDI_COMPATIBLE +
    + + +

    Identifiers for properties of the Opacity metadata effect.

    +
    + + dn934254 + D2D1_OPACITYMETADATA_PROP + D2D1_OPACITYMETADATA_PROP +
    + + + No documentation. + + + dn934254 + D2D1_OPACITYMETADATA_PROP_INPUT_OPAQUE_RECT + D2D1_OPACITYMETADATA_PROP_INPUT_OPAQUE_RECT + + + +

    This effect adjusts the opacity of an image by multiplying the alpha channel of the input by the specified opacity value. It has a single input.

    The CLSID for this effect is .

    +
    + + mt745076 + D2D1_OPACITY_PROP + D2D1_OPACITY_PROP +
    + + + No documentation. + + + mt745076 + D2D1_OPACITY_PROP_OPACITY + D2D1_OPACITY_PROP_OPACITY + + + +

    Specifies the flip and rotation at which an image appears.

    +
    + + dn890739 + D2D1_ORIENTATION + D2D1_ORIENTATION +
    + + +

    The orientation is unchanged.

    +
    + + dn890739 + D2D1_ORIENTATION_DEFAULT + D2D1_ORIENTATION_DEFAULT +
    + + +

    The image is flipped horizontally.

    +
    + + dn890739 + D2D1_ORIENTATION_FLIP_HORIZONTAL + D2D1_ORIENTATION_FLIP_HORIZONTAL +
    + + +

    The image is rotated clockwise 180 degrees.

    +
    + + dn890739 + D2D1_ORIENTATION_ROTATE_CLOCKWISE180 + D2D1_ORIENTATION_ROTATE_CLOCKWISE180 +
    + + +

    The image is rotated clockwise 180 degrees, then flipped horizontally.

    +
    + + dn890739 + D2D1_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL + D2D1_ORIENTATION_ROTATE_CLOCKWISE180_FLIP_HORIZONTAL +
    + + +

    The image is rotated clockwise 90 degrees, then flipped horizontally.

    +
    + + dn890739 + D2D1_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL + D2D1_ORIENTATION_ROTATE_CLOCKWISE90_FLIP_HORIZONTAL +
    + + +

    The image is rotated clockwise 270 degrees.

    +
    + + dn890739 + D2D1_ORIENTATION_ROTATE_CLOCKWISE270 + D2D1_ORIENTATION_ROTATE_CLOCKWISE270 +
    + + +

    The image is rotated clockwise 270 degrees, then flipped horizontally.

    +
    + + dn890739 + D2D1_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL + D2D1_ORIENTATION_ROTATE_CLOCKWISE270_FLIP_HORIZONTAL +
    + + +

    The image is rotated clockwise 90 degrees.

    +
    + + dn890739 + D2D1_ORIENTATION_ROTATE_CLOCKWISE90 + D2D1_ORIENTATION_ROTATE_CLOCKWISE90 +
    + + +

    Specifies how to render gradient mesh edges.

    +
    + + dn986881 + D2D1_PATCH_EDGE_MODE + D2D1_PATCH_EDGE_MODE +
    + + +

    Render this patch edge aliased. Use this value for the internal edges of your gradient mesh.

    +
    + + dn986881 + D2D1_PATCH_EDGE_MODE_ALIASED + D2D1_PATCH_EDGE_MODE_ALIASED +
    + + +

    Render this patch edge antialiased. Use this value for the external (boundary) edges of your mesh.

    +
    + + dn986881 + D2D1_PATCH_EDGE_MODE_ANTIALIASED + D2D1_PATCH_EDGE_MODE_ANTIALIASED +
    + + +

    Render this patch edge aliased and also slightly inflated. Use this for the internal edges of your gradient mesh when there could be t-junctions among patches. Inflating the internal edges mitigates seams that can appear along those junctions.

    +
    + + dn986881 + D2D1_PATCH_EDGE_MODE_ALIASED_INFLATED + D2D1_PATCH_EDGE_MODE_ALIASED_INFLATED +
    + + +

    Indicates whether a segment should be stroked and whether the join between this segment and the previous one should be smooth. This enumeration allows a bitwise combination of its member values.

    +
    + + dd368136 + D2D1_PATH_SEGMENT + D2D1_PATH_SEGMENT +
    + + +

    The segment is joined as specified by the interface, and it is stroked.

    +
    + + dd368136 + D2D1_PATH_SEGMENT_NONE + D2D1_PATH_SEGMENT_NONE +
    + + +

    The segment is not stroked.

    +
    + + dd368136 + D2D1_PATH_SEGMENT_FORCE_UNSTROKED + D2D1_PATH_SEGMENT_FORCE_UNSTROKED +
    + + +

    The segment is always joined with the one preceding it using a round line join, regardless of which enumeration is specified by the interface. If this segment is the first segment and the figure is closed, a round line join is used to connect the closing segment with the first segment. If the figure is not closed, this setting has no effect on the first segment of the figure. If is called just before , the join between the closing segment and the last explicitly specified segment is affected.

    +
    + + dd368136 + D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN + D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN +
    + + +

    The interpolation mode the 3D perspective transform effect uses on the image. There are 5 scale modes that range in quality and speed.

    +
    + + dn934207 + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE +
    + + + No documentation. + + + dn934207 + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934207 + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_LINEAR + + + + No documentation. + + + dn934207 + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_CUBIC + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_CUBIC + + + + No documentation. + + + dn934207 + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934207 + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC + D2D1_3DPERSPECTIVETRANSFORM_INTERPOLATION_MODE_ANISOTROPIC + + + +

    Identifiers for the properties of the 3D perspective transform effect.

    +
    + + dn934208 + D2D1_3DPERSPECTIVETRANSFORM_PROP + D2D1_3DPERSPECTIVETRANSFORM_PROP +
    + + + No documentation. + + + dn934208 + D2D1_3DPERSPECTIVETRANSFORM_PROP_INTERPOLATION_MODE + D2D1_3DPERSPECTIVETRANSFORM_PROP_INTERPOLATION_MODE + + + + No documentation. + + + dn934208 + D2D1_3DPERSPECTIVETRANSFORM_PROP_BORDER_MODE + D2D1_3DPERSPECTIVETRANSFORM_PROP_BORDER_MODE + + + + No documentation. + + + dn934208 + D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH + D2D1_3DPERSPECTIVETRANSFORM_PROP_DEPTH + + + + No documentation. + + + dn934208 + D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN + D2D1_3DPERSPECTIVETRANSFORM_PROP_PERSPECTIVE_ORIGIN + + + + No documentation. + + + dn934208 + D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET + D2D1_3DPERSPECTIVETRANSFORM_PROP_LOCAL_OFFSET + + + + No documentation. + + + dn934208 + D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET + D2D1_3DPERSPECTIVETRANSFORM_PROP_GLOBAL_OFFSET + + + + No documentation. + + + dn934208 + D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN + D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION_ORIGIN + + + + No documentation. + + + dn934208 + D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION + D2D1_3DPERSPECTIVETRANSFORM_PROP_ROTATION + + + +

    Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame).

    +
    + +

    If the shader specifies , it must still correctly implement the region of interest calculations in and .

    +
    + + hh404316 + D2D1_PIXEL_OPTIONS + D2D1_PIXEL_OPTIONS +
    + + +

    The pixel shader is not restricted in its sampling.

    +
    + + hh404316 + D2D1_PIXEL_OPTIONS_NONE + D2D1_PIXEL_OPTIONS_NONE +
    + + +

    The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.

    +
    + + hh404316 + D2D1_PIXEL_OPTIONS_TRIVIAL_SAMPLING + D2D1_PIXEL_OPTIONS_TRIVIAL_SAMPLING +
    + + +

    Identifiers for properties of the Point-diffuse lighting effect.

    +
    + + dn934255 + D2D1_POINTDIFFUSE_PROP + D2D1_POINTDIFFUSE_PROP +
    + + + No documentation. + + + dn934255 + D2D1_POINTDIFFUSE_PROP_LIGHT_POSITION + D2D1_POINTDIFFUSE_PROP_LIGHT_POSITION + + + + No documentation. + + + dn934255 + D2D1_POINTDIFFUSE_PROP_DIFFUSE_CONSTANT + D2D1_POINTDIFFUSE_PROP_DIFFUSE_CONSTANT + + + + No documentation. + + + dn934255 + D2D1_POINTDIFFUSE_PROP_SURFACE_SCALE + D2D1_POINTDIFFUSE_PROP_SURFACE_SCALE + + + + No documentation. + + + dn934255 + D2D1_POINTDIFFUSE_PROP_COLOR + D2D1_POINTDIFFUSE_PROP_COLOR + + + + No documentation. + + + dn934255 + D2D1_POINTDIFFUSE_PROP_KERNEL_UNIT_LENGTH + D2D1_POINTDIFFUSE_PROP_KERNEL_UNIT_LENGTH + + + + No documentation. + + + dn934255 + D2D1_POINTDIFFUSE_PROP_SCALE_MODE + D2D1_POINTDIFFUSE_PROP_SCALE_MODE + + + +

    The interpolation mode the Point-diffuse lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed

    +
    + + dn934256 + D2D1_POINTDIFFUSE_SCALE_MODE + D2D1_POINTDIFFUSE_SCALE_MODE +
    + + + No documentation. + + + dn934256 + D2D1_POINTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR + D2D1_POINTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934256 + D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR + D2D1_POINTDIFFUSE_SCALE_MODE_LINEAR + + + + No documentation. + + + dn934256 + D2D1_POINTDIFFUSE_SCALE_MODE_CUBIC + D2D1_POINTDIFFUSE_SCALE_MODE_CUBIC + + + + No documentation. + + + dn934256 + D2D1_POINTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR + D2D1_POINTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934256 + D2D1_POINTDIFFUSE_SCALE_MODE_ANISOTROPIC + D2D1_POINTDIFFUSE_SCALE_MODE_ANISOTROPIC + + + + No documentation. + + + dn934256 + D2D1_POINTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC + D2D1_POINTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC + + + +

    Identifiers for properties of the Point-specular lighting effect.

    +
    + + dn934257 + D2D1_POINTSPECULAR_PROP + D2D1_POINTSPECULAR_PROP +
    + + + No documentation. + + + dn934257 + D2D1_POINTSPECULAR_PROP_LIGHT_POSITION + D2D1_POINTSPECULAR_PROP_LIGHT_POSITION + + + + No documentation. + + + dn934257 + D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT + D2D1_POINTSPECULAR_PROP_SPECULAR_EXPONENT + + + + No documentation. + + + dn934257 + D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT + D2D1_POINTSPECULAR_PROP_SPECULAR_CONSTANT + + + + No documentation. + + + dn934257 + D2D1_POINTSPECULAR_PROP_SURFACE_SCALE + D2D1_POINTSPECULAR_PROP_SURFACE_SCALE + + + + No documentation. + + + dn934257 + D2D1_POINTSPECULAR_PROP_COLOR + D2D1_POINTSPECULAR_PROP_COLOR + + + + No documentation. + + + dn934257 + D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH + D2D1_POINTSPECULAR_PROP_KERNEL_UNIT_LENGTH + + + + No documentation. + + + dn934257 + D2D1_POINTSPECULAR_PROP_SCALE_MODE + D2D1_POINTSPECULAR_PROP_SCALE_MODE + + + +

    The interpolation mode the Point-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.

    +
    + + dn934258 + D2D1_POINTSPECULAR_SCALE_MODE + D2D1_POINTSPECULAR_SCALE_MODE +
    + + + No documentation. + + + dn934258 + D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR + D2D1_POINTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934258 + D2D1_POINTSPECULAR_SCALE_MODE_LINEAR + D2D1_POINTSPECULAR_SCALE_MODE_LINEAR + + + + No documentation. + + + dn934258 + D2D1_POINTSPECULAR_SCALE_MODE_CUBIC + D2D1_POINTSPECULAR_SCALE_MODE_CUBIC + + + + No documentation. + + + dn934258 + D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR + D2D1_POINTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934258 + D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC + D2D1_POINTSPECULAR_SCALE_MODE_ANISOTROPIC + + + + No documentation. + + + dn934258 + D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC + D2D1_POINTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC + + + +

    Identifiers for properties of the Posterize effect.

    +
    + + dn890742 + D2D1_POSTERIZE_PROP + D2D1_POSTERIZE_PROP +
    + + + No documentation. + + + dn890742 + D2D1_POSTERIZE_PROP_RED_VALUE_COUNT + D2D1_POSTERIZE_PROP_RED_VALUE_COUNT + + + + No documentation. + + + dn890742 + D2D1_POSTERIZE_PROP_GREEN_VALUE_COUNT + D2D1_POSTERIZE_PROP_GREEN_VALUE_COUNT + + + + No documentation. + + + dn890742 + D2D1_POSTERIZE_PROP_BLUE_VALUE_COUNT + D2D1_POSTERIZE_PROP_BLUE_VALUE_COUNT + + + +

    Describes how a render target behaves when it presents its content. This enumeration allows a bitwise combination of its member values.

    +
    + + dd368144 + D2D1_PRESENT_OPTIONS + D2D1_PRESENT_OPTIONS +
    + + +

    The render target waits until the display refreshes to present and discards the frame upon presenting.

    +
    + + dd368144 + D2D1_PRESENT_OPTIONS_NONE + D2D1_PRESENT_OPTIONS_NONE +
    + + +

    The render target does not discard the frame upon presenting.

    +
    + + dd368144 + D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS + D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS +
    + + +

    The render target does not wait until the display refreshes to present.

    +
    + + dd368144 + D2D1_PRESENT_OPTIONS_IMMEDIATELY + D2D1_PRESENT_OPTIONS_IMMEDIATELY +
    + + +

    Used to specify the geometric blend mode for all Direct2D primitives.

    +
    + + hh447008 + D2D1_PRIMITIVE_BLEND + D2D1_PRIMITIVE_BLEND +
    + + +

    The standard source-over-destination blend mode.

    +
    + + hh447008 + D2D1_PRIMITIVE_BLEND_SOURCE_OVER + D2D1_PRIMITIVE_BLEND_SOURCE_OVER +
    + + +

    The source is copied to the destination; the destination pixels are ignored.

    +
    + + hh447008 + D2D1_PRIMITIVE_BLEND_COPY + D2D1_PRIMITIVE_BLEND_COPY +
    + + +

    The resulting pixel values use the minimum of the source and destination pixel values. Available in Windows?8 and later.

    +
    + + hh447008 + D2D1_PRIMITIVE_BLEND_MIN + D2D1_PRIMITIVE_BLEND_MIN +
    + + +

    The resulting pixel values are the sum of the source and destination pixel values. Available in Windows?8 and later.

    +
    + + hh447008 + D2D1_PRIMITIVE_BLEND_ADD + D2D1_PRIMITIVE_BLEND_ADD +
    + + + No documentation. + + + hh447008 + D2D1_PRIMITIVE_BLEND_MAX + D2D1_PRIMITIVE_BLEND_MAX + + + +

    Defines when font resources should be subset during printing.

    +
    + + hh871442 + D2D1_PRINT_FONT_SUBSET_MODE + D2D1_PRINT_FONT_SUBSET_MODE +
    + + +

    Uses a heuristic strategy to decide when to subset fonts.

    Note??If the print driver has requested archive-optimized content, then Direct2D will subset fonts once, for the entire document. ?
    +
    + + hh871442 + D2D1_PRINT_FONT_SUBSET_MODE_DEFAULT + D2D1_PRINT_FONT_SUBSET_MODE_DEFAULT +
    + + +

    Subsets and embeds font resources in each page, then discards that font subset after the page is printed out.

    +
    + + hh871442 + D2D1_PRINT_FONT_SUBSET_MODE_EACHPAGE + D2D1_PRINT_FONT_SUBSET_MODE_EACHPAGE +
    + + +

    Sends out the original font resources without subsetting along with the page that first uses the font, and re-uses the font resources for later pages without resending them.

    +
    + + hh871442 + D2D1_PRINT_FONT_SUBSET_MODE_NONE + D2D1_PRINT_FONT_SUBSET_MODE_NONE +
    + + +

    Specifies the indices of the system properties present on the interface for an .

    +
    + +

    Under normal circumstances the minimum and maximum number of inputs to the effect are the same. If the effect supports a variable number of inputs, the ID2D1Effect::SetNumberOfInputs method can be used to choose the number that the application will enable.

    +
    + + hh447010 + D2D1_PROPERTY + D2D1_PROPERTY +
    + + + No documentation. + + + hh447010 + D2D1_PROPERTY_CLSID + D2D1_PROPERTY_CLSID + + + + No documentation. + + + hh447010 + D2D1_PROPERTY_DISPLAYNAME + D2D1_PROPERTY_DISPLAYNAME + + + + No documentation. + + + hh447010 + D2D1_PROPERTY_AUTHOR + D2D1_PROPERTY_AUTHOR + + + + No documentation. + + + hh447010 + D2D1_PROPERTY_CATEGORY + D2D1_PROPERTY_CATEGORY + + + + No documentation. + + + hh447010 + D2D1_PROPERTY_DESCRIPTION + D2D1_PROPERTY_DESCRIPTION + + + + No documentation. + + + hh447010 + D2D1_PROPERTY_INPUTS + D2D1_PROPERTY_INPUTS + + + + No documentation. + + + hh447010 + D2D1_PROPERTY_CACHED + D2D1_PROPERTY_CACHED + + + + No documentation. + + + hh447010 + D2D1_PROPERTY_PRECISION + D2D1_PROPERTY_PRECISION + + + + No documentation. + + + hh447010 + D2D1_PROPERTY_MIN_INPUTS + D2D1_PROPERTY_MIN_INPUTS + + + + No documentation. + + + hh447010 + D2D1_PROPERTY_MAX_INPUTS + D2D1_PROPERTY_MAX_INPUTS + + + +

    Specifies the types of properties supported by the Direct2D property interface.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE + D2D1_PROPERTY_TYPE +
    + + +

    An unknown property.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_UNKNOWN + D2D1_PROPERTY_TYPE_UNKNOWN +
    + + +

    An arbitrary-length string.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_STRING + D2D1_PROPERTY_TYPE_STRING +
    + + +

    A 32-bit integer value constrained to be either 0 or 1.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_BOOL + D2D1_PROPERTY_TYPE_BOOL +
    + + +

    An unsigned 32-bit integer.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_UINT32 + D2D1_PROPERTY_TYPE_UINT32 +
    + + +

    A signed 32-bit integer.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_INT32 + D2D1_PROPERTY_TYPE_INT32 +
    + + +

    A 32-bit float.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_FLOAT + D2D1_PROPERTY_TYPE_FLOAT +
    + + +

    Two 32-bit float values.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_VECTOR2 + D2D1_PROPERTY_TYPE_VECTOR2 +
    + + +

    Three 32-bit float values.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_VECTOR3 + D2D1_PROPERTY_TYPE_VECTOR3 +
    + + +

    Four 32-bit float values.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_VECTOR4 + D2D1_PROPERTY_TYPE_VECTOR4 +
    + + +

    An arbitrary number of bytes.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_BLOB + D2D1_PROPERTY_TYPE_BLOB +
    + + +

    A returned COM or nano-COM interface.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_IUNKNOWN + D2D1_PROPERTY_TYPE_IUNKNOWN +
    + + +

    An enumeration. The value should be treated as a UINT32 with a defined array of fields to specify the bindings to human-readable strings.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_ENUM + D2D1_PROPERTY_TYPE_ENUM +
    + + +

    An enumeration. The value is the count of sub-properties in the array. The set of array elements will be contained in the sub-property.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_ARRAY + D2D1_PROPERTY_TYPE_ARRAY +
    + + +

    A CLSID.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_CLSID + D2D1_PROPERTY_TYPE_CLSID +
    + + +

    A 3x2 matrix of float values.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_MATRIX_3X2 + D2D1_PROPERTY_TYPE_MATRIX_3X2 +
    + + +

    A 4x2 matrix of float values.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_MATRIX_4X3 + D2D1_PROPERTY_TYPE_MATRIX_4X3 +
    + + +

    A 4x4 matrix of float values.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_MATRIX_4X4 + D2D1_PROPERTY_TYPE_MATRIX_4X4 +
    + + +

    A 5x4 matrix of float values.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_MATRIX_5X4 + D2D1_PROPERTY_TYPE_MATRIX_5X4 +
    + + +

    A nano-COM color context interface reference.

    +
    + + hh447012 + D2D1_PROPERTY_TYPE_COLOR_CONTEXT + D2D1_PROPERTY_TYPE_COLOR_CONTEXT +
    + + +

    The rendering priority affects the extent to which Direct2D will throttle its rendering workload.

    +
    + + dn280382 + D2D1_RENDERING_PRIORITY + D2D1_RENDERING_PRIORITY +
    + + + No documentation. + + + dn280382 + D2D1_RENDERING_PRIORITY_NORMAL + D2D1_RENDERING_PRIORITY_NORMAL + + + + No documentation. + + + dn280382 + D2D1_RENDERING_PRIORITY_LOW + D2D1_RENDERING_PRIORITY_LOW + + + +

    Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.

    +
    + +

    Not every render target supports hardware rendering. For more information, see the Render Targets Overview.

    +
    + + dd756630 + D2D1_RENDER_TARGET_TYPE + D2D1_RENDER_TARGET_TYPE +
    + + +

    The render target uses hardware rendering, if available; otherwise, it uses software rendering.

    +
    + + dd756630 + D2D1_RENDER_TARGET_TYPE_DEFAULT + D2D1_RENDER_TARGET_TYPE_DEFAULT +
    + + +

    The render target uses software rendering only.

    +
    + + dd756630 + D2D1_RENDER_TARGET_TYPE_SOFTWARE + D2D1_RENDER_TARGET_TYPE_SOFTWARE +
    + + +

    The render target uses hardware rendering only.

    +
    + + dd756630 + D2D1_RENDER_TARGET_TYPE_HARDWARE + D2D1_RENDER_TARGET_TYPE_HARDWARE +
    + + +

    Describes how a render target is remoted and whether it should be GDI-compatible. This enumeration allows a bitwise combination of its member values.

    +
    + + dd368157 + D2D1_RENDER_TARGET_USAGE + D2D1_RENDER_TARGET_USAGE +
    + + +

    The render target attempts to use Direct3D command-stream remoting and uses bitmap remoting if stream remoting fails. The render target is not GDI-compatible.

    +
    + + dd368157 + D2D1_RENDER_TARGET_USAGE_NONE + D2D1_RENDER_TARGET_USAGE_NONE +
    + + +

    The render target renders content locally and sends it to the terminal services client as a bitmap.

    +
    + + dd368157 + D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING + D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING +
    + + +

    The render target can be used efficiently with GDI.

    +
    + + dd368157 + D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE + D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE +
    + + +

    Values for the property of the RGB to Hue effect.

    +
    + + dn890743 + D2D1_RGBTOHUE_OUTPUT_COLOR_SPACE + D2D1_RGBTOHUE_OUTPUT_COLOR_SPACE +
    + + + No documentation. + + + dn890743 + D2D1_RGBTOHUE_OUTPUT_COLOR_SPACE_HUE_SATURATION_VALUE + D2D1_RGBTOHUE_OUTPUT_COLOR_SPACE_HUE_SATURATION_VALUE + + + + No documentation. + + + dn890743 + D2D1_RGBTOHUE_OUTPUT_COLOR_SPACE_HUE_SATURATION_LIGHTNESS + D2D1_RGBTOHUE_OUTPUT_COLOR_SPACE_HUE_SATURATION_LIGHTNESS + + + +

    Indentifiers for properties of the RGB to Hue effect.

    +
    + + dn890744 + D2D1_RGBTOHUE_PROP + D2D1_RGBTOHUE_PROP +
    + + + No documentation. + + + dn890744 + D2D1_RGBTOHUE_PROP_OUTPUT_COLOR_SPACE + D2D1_RGBTOHUE_PROP_OUTPUT_COLOR_SPACE + + + +

    Identifiers for properties of the Saturation effect.

    +
    + + dn934259 + D2D1_SATURATION_PROP + D2D1_SATURATION_PROP +
    + + + No documentation. + + + dn934259 + D2D1_SATURATION_PROP_SATURATION + D2D1_SATURATION_PROP_SATURATION + + + +

    The interpolation mode the Scale effect uses to scale the image. There are 6 scale modes that range in quality and speed.

    +
    + + dn934260 + D2D1_SCALE_INTERPOLATION_MODE + D2D1_SCALE_INTERPOLATION_MODE +
    + + + No documentation. + + + dn934260 + D2D1_SCALE_INTERPOLATION_MODE_NEAREST_NEIGHBOR + D2D1_SCALE_INTERPOLATION_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934260 + D2D1_SCALE_INTERPOLATION_MODE_LINEAR + D2D1_SCALE_INTERPOLATION_MODE_LINEAR + + + + No documentation. + + + dn934260 + D2D1_SCALE_INTERPOLATION_MODE_CUBIC + D2D1_SCALE_INTERPOLATION_MODE_CUBIC + + + + No documentation. + + + dn934260 + D2D1_SCALE_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + D2D1_SCALE_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934260 + D2D1_SCALE_INTERPOLATION_MODE_ANISOTROPIC + D2D1_SCALE_INTERPOLATION_MODE_ANISOTROPIC + + + + No documentation. + + + dn934260 + D2D1_SCALE_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC + D2D1_SCALE_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC + + + +

    Identifiers for properties of the Scale effect.

    +
    + + dn934261 + D2D1_SCALE_PROP + D2D1_SCALE_PROP +
    + + + No documentation. + + + dn934261 + D2D1_SCALE_PROP_SCALE + D2D1_SCALE_PROP_SCALE + + + + No documentation. + + + dn934261 + D2D1_SCALE_PROP_CENTER_POINT + D2D1_SCALE_PROP_CENTER_POINT + + + + No documentation. + + + dn934261 + D2D1_SCALE_PROP_INTERPOLATION_MODE + D2D1_SCALE_PROP_INTERPOLATION_MODE + + + + No documentation. + + + dn934261 + D2D1_SCALE_PROP_BORDER_MODE + D2D1_SCALE_PROP_BORDER_MODE + + + + No documentation. + + + dn934261 + D2D1_SCALE_PROP_SHARPNESS + D2D1_SCALE_PROP_SHARPNESS + + + +

    Identifiers for properties of the Sepia effect.

    +
    + + dn890745 + D2D1_SEPIA_PROP + D2D1_SEPIA_PROP +
    + + + No documentation. + + + dn890745 + D2D1_SEPIA_PROP_INTENSITY + D2D1_SEPIA_PROP_INTENSITY + + + + No documentation. + + + dn890745 + D2D1_SEPIA_PROP_ALPHA_MODE + D2D1_SEPIA_PROP_ALPHA_MODE + + + +

    The level of performance optimization for the Shadow effect.

    +
    + + dn934262 + D2D1_SHADOW_OPTIMIZATION + D2D1_SHADOW_OPTIMIZATION +
    + + + No documentation. + + + dn934262 + D2D1_SHADOW_OPTIMIZATION_SPEED + D2D1_SHADOW_OPTIMIZATION_SPEED + + + + No documentation. + + + dn934262 + D2D1_SHADOW_OPTIMIZATION_BALANCED + D2D1_SHADOW_OPTIMIZATION_BALANCED + + + + No documentation. + + + dn934262 + D2D1_SHADOW_OPTIMIZATION_QUALITY + D2D1_SHADOW_OPTIMIZATION_QUALITY + + + +

    Identifiers for properties of the Shadow effect.

    +
    + + dn934263 + D2D1_SHADOW_PROP + D2D1_SHADOW_PROP +
    + + + No documentation. + + + dn934263 + D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION + D2D1_SHADOW_PROP_BLUR_STANDARD_DEVIATION + + + + No documentation. + + + dn934263 + D2D1_SHADOW_PROP_COLOR + D2D1_SHADOW_PROP_COLOR + + + + No documentation. + + + dn934263 + D2D1_SHADOW_PROP_OPTIMIZATION + D2D1_SHADOW_PROP_OPTIMIZATION + + + +

    Identifiers for properties of the Sharpen effect.

    +
    + + dn890746 + D2D1_SHARPEN_PROP + D2D1_SHARPEN_PROP +
    + + + No documentation. + + + dn890746 + D2D1_SHARPEN_PROP_SHARPNESS + D2D1_SHARPEN_PROP_SHARPNESS + + + + No documentation. + + + dn890746 + D2D1_SHARPEN_PROP_THRESHOLD + D2D1_SHARPEN_PROP_THRESHOLD + + + +

    Identifiers for properties of the Spot-diffuse lighting effect.

    +
    + + dn934264 + D2D1_SPOTDIFFUSE_PROP + D2D1_SPOTDIFFUSE_PROP +
    + + + No documentation. + + + dn934264 + D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION + D2D1_SPOTDIFFUSE_PROP_LIGHT_POSITION + + + + No documentation. + + + dn934264 + D2D1_SPOTDIFFUSE_PROP_POINTS_AT + D2D1_SPOTDIFFUSE_PROP_POINTS_AT + + + + No documentation. + + + dn934264 + D2D1_SPOTDIFFUSE_PROP_FOCUS + D2D1_SPOTDIFFUSE_PROP_FOCUS + + + + No documentation. + + + dn934264 + D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE + D2D1_SPOTDIFFUSE_PROP_LIMITING_CONE_ANGLE + + + + No documentation. + + + dn934264 + D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT + D2D1_SPOTDIFFUSE_PROP_DIFFUSE_CONSTANT + + + + No documentation. + + + dn934264 + D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE + D2D1_SPOTDIFFUSE_PROP_SURFACE_SCALE + + + + No documentation. + + + dn934264 + D2D1_SPOTDIFFUSE_PROP_COLOR + D2D1_SPOTDIFFUSE_PROP_COLOR + + + + No documentation. + + + dn934264 + D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH + D2D1_SPOTDIFFUSE_PROP_KERNEL_UNIT_LENGTH + + + + No documentation. + + + dn934264 + D2D1_SPOTDIFFUSE_PROP_SCALE_MODE + D2D1_SPOTDIFFUSE_PROP_SCALE_MODE + + + +

    The interpolation mode the Spot-diffuse lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.

    +
    + + dn934265 + D2D1_SPOTDIFFUSE_SCALE_MODE + D2D1_SPOTDIFFUSE_SCALE_MODE +
    + + + No documentation. + + + dn934265 + D2D1_SPOTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR + D2D1_SPOTDIFFUSE_SCALE_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934265 + D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR + D2D1_SPOTDIFFUSE_SCALE_MODE_LINEAR + + + + No documentation. + + + dn934265 + D2D1_SPOTDIFFUSE_SCALE_MODE_CUBIC + D2D1_SPOTDIFFUSE_SCALE_MODE_CUBIC + + + + No documentation. + + + dn934265 + D2D1_SPOTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR + D2D1_SPOTDIFFUSE_SCALE_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934265 + D2D1_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC + D2D1_SPOTDIFFUSE_SCALE_MODE_ANISOTROPIC + + + + No documentation. + + + dn934265 + D2D1_SPOTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC + D2D1_SPOTDIFFUSE_SCALE_MODE_HIGH_QUALITY_CUBIC + + + +

    Identifiers for properties of the Spot-specular lighting effect.

    +
    + + dn934266 + D2D1_SPOTSPECULAR_PROP + D2D1_SPOTSPECULAR_PROP +
    + + + No documentation. + + + dn934266 + D2D1_SPOTSPECULAR_PROP_LIGHT_POSITION + D2D1_SPOTSPECULAR_PROP_LIGHT_POSITION + + + + No documentation. + + + dn934266 + D2D1_SPOTSPECULAR_PROP_POINTS_AT + D2D1_SPOTSPECULAR_PROP_POINTS_AT + + + + No documentation. + + + dn934266 + D2D1_SPOTSPECULAR_PROP_FOCUS + D2D1_SPOTSPECULAR_PROP_FOCUS + + + + No documentation. + + + dn934266 + D2D1_SPOTSPECULAR_PROP_LIMITING_CONE_ANGLE + D2D1_SPOTSPECULAR_PROP_LIMITING_CONE_ANGLE + + + + No documentation. + + + dn934266 + D2D1_SPOTSPECULAR_PROP_SPECULAR_EXPONENT + D2D1_SPOTSPECULAR_PROP_SPECULAR_EXPONENT + + + + No documentation. + + + dn934266 + D2D1_SPOTSPECULAR_PROP_SPECULAR_CONSTANT + D2D1_SPOTSPECULAR_PROP_SPECULAR_CONSTANT + + + + No documentation. + + + dn934266 + D2D1_SPOTSPECULAR_PROP_SURFACE_SCALE + D2D1_SPOTSPECULAR_PROP_SURFACE_SCALE + + + + No documentation. + + + dn934266 + D2D1_SPOTSPECULAR_PROP_COLOR + D2D1_SPOTSPECULAR_PROP_COLOR + + + + No documentation. + + + dn934266 + D2D1_SPOTSPECULAR_PROP_KERNEL_UNIT_LENGTH + D2D1_SPOTSPECULAR_PROP_KERNEL_UNIT_LENGTH + + + + No documentation. + + + dn934266 + D2D1_SPOTSPECULAR_PROP_SCALE_MODE + D2D1_SPOTSPECULAR_PROP_SCALE_MODE + + + +

    The interpolation mode the Spot-specular lighting effect uses to scale the image to the corresponding kernel unit length. There are six scale modes that range in quality and speed.

    +
    + + dn934267 + D2D1_SPOTSPECULAR_SCALE_MODE + D2D1_SPOTSPECULAR_SCALE_MODE +
    + + + No documentation. + + + dn934267 + D2D1_SPOTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR + D2D1_SPOTSPECULAR_SCALE_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934267 + D2D1_SPOTSPECULAR_SCALE_MODE_LINEAR + D2D1_SPOTSPECULAR_SCALE_MODE_LINEAR + + + + No documentation. + + + dn934267 + D2D1_SPOTSPECULAR_SCALE_MODE_CUBIC + D2D1_SPOTSPECULAR_SCALE_MODE_CUBIC + + + + No documentation. + + + dn934267 + D2D1_SPOTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR + D2D1_SPOTSPECULAR_SCALE_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934267 + D2D1_SPOTSPECULAR_SCALE_MODE_ANISOTROPIC + D2D1_SPOTSPECULAR_SCALE_MODE_ANISOTROPIC + + + + No documentation. + + + dn934267 + D2D1_SPOTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC + D2D1_SPOTSPECULAR_SCALE_MODE_HIGH_QUALITY_CUBIC + + + +

    Specifies additional aspects of how a sprite batch is to be drawn, as part of a call to .

    +
    + + mt619821 + D2D1_SPRITE_OPTIONS + D2D1_SPRITE_OPTIONS +
    + + + No documentation. + + + mt619821 + D2D1_SPRITE_OPTIONS_NONE + D2D1_SPRITE_OPTIONS_NONE + + + + No documentation. + + + mt619821 + D2D1_SPRITE_OPTIONS_CLAMP_TO_SOURCE_RECTANGLE + D2D1_SPRITE_OPTIONS_CLAMP_TO_SOURCE_RECTANGLE + + + +

    Identifiers for properties of the Straighten effect.

    +
    + + dn890747 + D2D1_STRAIGHTEN_PROP + D2D1_STRAIGHTEN_PROP +
    + + + No documentation. + + + dn890747 + D2D1_STRAIGHTEN_PROP_ANGLE + D2D1_STRAIGHTEN_PROP_ANGLE + + + + No documentation. + + + dn890747 + D2D1_STRAIGHTEN_PROP_MAINTAIN_SIZE + D2D1_STRAIGHTEN_PROP_MAINTAIN_SIZE + + + + No documentation. + + + dn890747 + D2D1_STRAIGHTEN_PROP_SCALE_MODE + D2D1_STRAIGHTEN_PROP_SCALE_MODE + + + +

    Values for the property of the Straighten effect.

    +
    + + dn890748 + D2D1_STRAIGHTEN_SCALE_MODE + D2D1_STRAIGHTEN_SCALE_MODE +
    + + + No documentation. + + + dn890748 + D2D1_STRAIGHTEN_SCALE_MODE_NEAREST_NEIGHBOR + D2D1_STRAIGHTEN_SCALE_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn890748 + D2D1_STRAIGHTEN_SCALE_MODE_LINEAR + D2D1_STRAIGHTEN_SCALE_MODE_LINEAR + + + + No documentation. + + + dn890748 + D2D1_STRAIGHTEN_SCALE_MODE_CUBIC + D2D1_STRAIGHTEN_SCALE_MODE_CUBIC + + + + No documentation. + + + dn890748 + D2D1_STRAIGHTEN_SCALE_MODE_MULTI_SAMPLE_LINEAR + D2D1_STRAIGHTEN_SCALE_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn890748 + D2D1_STRAIGHTEN_SCALE_MODE_ANISOTROPIC + D2D1_STRAIGHTEN_SCALE_MODE_ANISOTROPIC + + + +

    Defines how the world transform, dots per inch (dpi), and stroke width affect the shape of the pen used to stroke a primitive.

    +
    + +

    If you specify the stroke isn't affected by the world transform.

    If you specify the application has the same behavior in Windows 7 and later.

    If you specify the stroke is always 1 pixel wide.

    Apart from the stroke, any value derived from the stroke width is not affected when the transformType is either fixed or hairline. This includes miters, line caps and so on.

    It is important to distinguish between the geometry being stroked and the shape of the stroke pen. When or is specified, the geometry still respects the transform and dpi, but the pen that traces the geometry will not.

    Here is an illustration of a stroke with dashing and a skew and stretch transform.

    And here is an illustration of a fixed width stroke which does not get transformed.

    +
    + + hh447016 + D2D1_STROKE_TRANSFORM_TYPE + D2D1_STROKE_TRANSFORM_TYPE +
    + + +

    The stroke respects the currently set world transform, the dpi, and the stroke width.

    +
    + + hh447016 + D2D1_STROKE_TRANSFORM_TYPE_NORMAL + D2D1_STROKE_TRANSFORM_TYPE_NORMAL +
    + + +

    The stroke does not respect the world transform but it does respect the dpi and stroke width.

    +
    + + hh447016 + D2D1_STROKE_TRANSFORM_TYPE_FIXED + D2D1_STROKE_TRANSFORM_TYPE_FIXED +
    + + +

    The stroke is forced to 1 pixel wide (in device space) and does not respect the world transform, the dpi, or the stroke width.

    +
    + + hh447016 + D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE + D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE +
    + + +

    Specifies the indices of the system sub-properties that may be present in any property.

    +
    + + hh447018 + D2D1_SUBPROPERTY + D2D1_SUBPROPERTY +
    + + +

    The name for the parent property.

    +
    + + hh447018 + D2D1_SUBPROPERTY_DISPLAYNAME + D2D1_SUBPROPERTY_DISPLAYNAME +
    + + +

    A Boolean indicating whether the parent property is writeable.

    +
    + + hh447018 + D2D1_SUBPROPERTY_ISREADONLY + D2D1_SUBPROPERTY_ISREADONLY +
    + + +

    The minimum value that can be set to the parent property.

    +
    + + hh447018 + D2D1_SUBPROPERTY_MIN + D2D1_SUBPROPERTY_MIN +
    + + +

    The maximum value that can be set to the parent property.

    +
    + + hh447018 + D2D1_SUBPROPERTY_MAX + D2D1_SUBPROPERTY_MAX +
    + + +

    The default value of the parent property.

    +
    + + hh447018 + D2D1_SUBPROPERTY_DEFAULT + D2D1_SUBPROPERTY_DEFAULT +
    + + +

    An array of name/index pairs that indicate the possible values that can be set to the parent property.

    +
    + + hh447018 + D2D1_SUBPROPERTY_FIELDS + D2D1_SUBPROPERTY_FIELDS +
    + + +

    An index sub-property used by the elements of the array.

    +
    + + hh447018 + D2D1_SUBPROPERTY_INDEX + D2D1_SUBPROPERTY_INDEX +
    + + +

    Describes how a render target behaves when it presents its content. This enumeration allows a bitwise combination of its member values.

    +
    + + dd368144 + D2D1_SVG_ASPECT_ALIGN + D2D1_SVG_ASPECT_ALIGN +
    + + +

    The render target waits until the display refreshes to present and discards the frame upon presenting.

    +
    + + dd368144 + D2D1_SVG_ASPECT_ALIGN_NONE + D2D1_SVG_ASPECT_ALIGN_NONE +
    + + +

    The render target does not discard the frame upon presenting.

    +
    + + dd368144 + D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MIN + D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MIN +
    + + +

    The render target does not wait until the display refreshes to present.

    +
    + + dd368144 + D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MIN + D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MIN +
    + + + No documentation. + + + dd368144 + D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MIN + D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MIN + + + + No documentation. + + + dd368144 + D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MID + D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MID + + + + No documentation. + + + dd368144 + D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MID + D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MID + + + + No documentation. + + + dd368144 + D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MID + D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MID + + + + No documentation. + + + dd368144 + D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MAX + D2D1_SVG_ASPECT_ALIGN_X_MIN_Y_MAX + + + + No documentation. + + + dd368144 + D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MAX + D2D1_SVG_ASPECT_ALIGN_X_MID_Y_MAX + + + + No documentation. + + + dd368144 + D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MAX + D2D1_SVG_ASPECT_ALIGN_X_MAX_Y_MAX + + + +

    Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame).

    +
    + +

    If the shader specifies , it must still correctly implement the region of interest calculations in and .

    +
    + + hh404316 + D2D1_SVG_ASPECT_SCALING + D2D1_SVG_ASPECT_SCALING +
    + + +

    The pixel shader is not restricted in its sampling.

    +
    + + hh404316 + D2D1_SVG_ASPECT_SCALING_MEET + D2D1_SVG_ASPECT_SCALING_MEET +
    + + +

    The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.

    +
    + + hh404316 + D2D1_SVG_ASPECT_SCALING_SLICE + D2D1_SVG_ASPECT_SCALING_SLICE +
    + + +

    Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.

    +
    + +

    Not every render target supports hardware rendering. For more information, see the Render Targets Overview.

    +
    + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE + D2D1_SVG_ATTRIBUTE_POD_TYPE +
    + + +

    The render target uses hardware rendering, if available; otherwise, it uses software rendering.

    +
    + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_FLOAT + D2D1_SVG_ATTRIBUTE_POD_TYPE_FLOAT +
    + + +

    The render target uses software rendering only.

    +
    + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_COLOR + D2D1_SVG_ATTRIBUTE_POD_TYPE_COLOR +
    + + +

    The render target uses hardware rendering only.

    +
    + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_FILL_MODE + D2D1_SVG_ATTRIBUTE_POD_TYPE_FILL_MODE +
    + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_DISPLAY + D2D1_SVG_ATTRIBUTE_POD_TYPE_DISPLAY + + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_OVERFLOW + D2D1_SVG_ATTRIBUTE_POD_TYPE_OVERFLOW + + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_LINE_CAP + D2D1_SVG_ATTRIBUTE_POD_TYPE_LINE_CAP + + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_LINE_JOIN + D2D1_SVG_ATTRIBUTE_POD_TYPE_LINE_JOIN + + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_VISIBILITY + D2D1_SVG_ATTRIBUTE_POD_TYPE_VISIBILITY + + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_MATRIX + D2D1_SVG_ATTRIBUTE_POD_TYPE_MATRIX + + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_UNIT_TYPE + D2D1_SVG_ATTRIBUTE_POD_TYPE_UNIT_TYPE + + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_EXTEND_MODE + D2D1_SVG_ATTRIBUTE_POD_TYPE_EXTEND_MODE + + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_PRESERVE_ASPECT_RATIO + D2D1_SVG_ATTRIBUTE_POD_TYPE_PRESERVE_ASPECT_RATIO + + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_VIEWBOX + D2D1_SVG_ATTRIBUTE_POD_TYPE_VIEWBOX + + + + No documentation. + + + dd756630 + D2D1_SVG_ATTRIBUTE_POD_TYPE_LENGTH + D2D1_SVG_ATTRIBUTE_POD_TYPE_LENGTH + + + +

    Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.

    +
    + +

    Not every render target supports hardware rendering. For more information, see the Render Targets Overview.

    +
    + + dd756630 + D2D1_SVG_ATTRIBUTE_STRING_TYPE + D2D1_SVG_ATTRIBUTE_STRING_TYPE +
    + + +

    The render target uses hardware rendering, if available; otherwise, it uses software rendering.

    +
    + + dd756630 + D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG + D2D1_SVG_ATTRIBUTE_STRING_TYPE_SVG +
    + + +

    The render target uses software rendering only.

    +
    + + dd756630 + D2D1_SVG_ATTRIBUTE_STRING_TYPE_ID + D2D1_SVG_ATTRIBUTE_STRING_TYPE_ID +
    + + +

    Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.

    +
    + +

    Not every render target supports hardware rendering. For more information, see the Render Targets Overview.

    +
    + + dd756630 + D2D1_SVG_DISPLAY + D2D1_SVG_DISPLAY +
    + + +

    The render target uses hardware rendering, if available; otherwise, it uses software rendering.

    +
    + + dd756630 + D2D1_SVG_DISPLAY_INLINE + D2D1_SVG_DISPLAY_INLINE +
    + + +

    The render target uses software rendering only.

    +
    + + dd756630 + D2D1_SVG_DISPLAY_NONE + D2D1_SVG_DISPLAY_NONE +
    + + +

    Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.

    +
    + +

    Not every render target supports hardware rendering. For more information, see the Render Targets Overview.

    +
    + + dd756630 + D2D1_SVG_LENGTH_UNITS + D2D1_SVG_LENGTH_UNITS +
    + + +

    The render target uses hardware rendering, if available; otherwise, it uses software rendering.

    +
    + + dd756630 + D2D1_SVG_LENGTH_UNITS_NUMBER + D2D1_SVG_LENGTH_UNITS_NUMBER +
    + + +

    The render target uses software rendering only.

    +
    + + dd756630 + D2D1_SVG_LENGTH_UNITS_PERCENTAGE + D2D1_SVG_LENGTH_UNITS_PERCENTAGE +
    + + +

    Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.

    +
    + +

    Not every render target supports hardware rendering. For more information, see the Render Targets Overview.

    +
    + + dd756630 + D2D1_SVG_LINE_CAP + D2D1_SVG_LINE_CAP +
    + + +

    The render target uses hardware rendering, if available; otherwise, it uses software rendering.

    +
    + + dd756630 + D2D1_SVG_LINE_CAP_BUTT + D2D1_SVG_LINE_CAP_BUTT +
    + + +

    The render target uses software rendering only.

    +
    + + dd756630 + D2D1_SVG_LINE_CAP_SQUARE + D2D1_SVG_LINE_CAP_SQUARE +
    + + +

    The render target uses hardware rendering only.

    +
    + + dd756630 + D2D1_SVG_LINE_CAP_ROUND + D2D1_SVG_LINE_CAP_ROUND +
    + + +

    Indicates how pixel shader sampling will be restricted. This indicates whether the vertex buffer is large and tends to change infrequently or smaller and changes frequently (typically frame over frame).

    +
    + +

    If the shader specifies , it must still correctly implement the region of interest calculations in and .

    +
    + + hh404316 + D2D1_SVG_LINE_JOIN + D2D1_SVG_LINE_JOIN +
    + + +

    The pixel shader is not restricted in its sampling.

    +
    + + hh404316 + D2D1_SVG_LINE_JOIN_BEVEL + D2D1_SVG_LINE_JOIN_BEVEL +
    + + +

    The pixel shader samples inputs only at the same scene coordinate as the output pixel and returns transparent black whenever the input pixels are also transparent black.

    +
    + + hh404316 + D2D1_SVG_LINE_JOIN_MITER + D2D1_SVG_LINE_JOIN_MITER +
    + + + No documentation. + + + hh404316 + D2D1_SVG_LINE_JOIN_ROUND + D2D1_SVG_LINE_JOIN_ROUND + + + +

    Describes the shape at the end of a line or segment.

    +
    + +

    The following illustration shows the available cap styles for lines or segments. The red portion of the line shows the extra area added by the line cap setting.

    +
    + + dd368079 + D2D1_SVG_OVERFLOW + D2D1_SVG_OVERFLOW +
    + + +

    A cap that does not extend past the last point of the line. Comparable to cap used for objects other than lines.

    +
    + + dd368079 + D2D1_SVG_OVERFLOW_VISIBLE + D2D1_SVG_OVERFLOW_VISIBLE +
    + + +

    Half of a square that has a length equal to the line thickness.

    +
    + + dd368079 + D2D1_SVG_OVERFLOW_HIDDEN + D2D1_SVG_OVERFLOW_HIDDEN +
    + + +

    Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.

    +
    + +

    Not every render target supports hardware rendering. For more information, see the Render Targets Overview.

    +
    + + dd756630 + D2D1_SVG_PAINT_TYPE + D2D1_SVG_PAINT_TYPE +
    + + +

    The render target uses hardware rendering, if available; otherwise, it uses software rendering.

    +
    + + dd756630 + D2D1_SVG_PAINT_TYPE_NONE + D2D1_SVG_PAINT_TYPE_NONE +
    + + +

    The render target uses software rendering only.

    +
    + + dd756630 + D2D1_SVG_PAINT_TYPE_COLOR + D2D1_SVG_PAINT_TYPE_COLOR +
    + + +

    The render target uses hardware rendering only.

    +
    + + dd756630 + D2D1_SVG_PAINT_TYPE_CURRENT_COLOR + D2D1_SVG_PAINT_TYPE_CURRENT_COLOR +
    + + + No documentation. + + + dd756630 + D2D1_SVG_PAINT_TYPE_URI + D2D1_SVG_PAINT_TYPE_URI + + + + No documentation. + + + dd756630 + D2D1_SVG_PAINT_TYPE_URI_NONE + D2D1_SVG_PAINT_TYPE_URI_NONE + + + + No documentation. + + + dd756630 + D2D1_SVG_PAINT_TYPE_URI_COLOR + D2D1_SVG_PAINT_TYPE_URI_COLOR + + + + No documentation. + + + dd756630 + D2D1_SVG_PAINT_TYPE_URI_CURRENT_COLOR + D2D1_SVG_PAINT_TYPE_URI_CURRENT_COLOR + + + +

    Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.

    +
    + +

    Not every render target supports hardware rendering. For more information, see the Render Targets Overview.

    +
    + + dd756630 + D2D1_SVG_PATH_COMMAND + D2D1_SVG_PATH_COMMAND +
    + + +

    The render target uses hardware rendering, if available; otherwise, it uses software rendering.

    +
    + + dd756630 + D2D1_SVG_PATH_COMMAND_CLOSE_PATH + D2D1_SVG_PATH_COMMAND_CLOSE_PATH +
    + + +

    The render target uses software rendering only.

    +
    + + dd756630 + D2D1_SVG_PATH_COMMAND_MOVE_ABSOLUTE + D2D1_SVG_PATH_COMMAND_MOVE_ABSOLUTE +
    + + +

    The render target uses hardware rendering only.

    +
    + + dd756630 + D2D1_SVG_PATH_COMMAND_MOVE_RELATIVE + D2D1_SVG_PATH_COMMAND_MOVE_RELATIVE +
    + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_LINE_ABSOLUTE + D2D1_SVG_PATH_COMMAND_LINE_ABSOLUTE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_LINE_RELATIVE + D2D1_SVG_PATH_COMMAND_LINE_RELATIVE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_CUBIC_ABSOLUTE + D2D1_SVG_PATH_COMMAND_CUBIC_ABSOLUTE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_CUBIC_RELATIVE + D2D1_SVG_PATH_COMMAND_CUBIC_RELATIVE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_QUADRADIC_ABSOLUTE + D2D1_SVG_PATH_COMMAND_QUADRADIC_ABSOLUTE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_QUADRADIC_RELATIVE + D2D1_SVG_PATH_COMMAND_QUADRADIC_RELATIVE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_ARC_ABSOLUTE + D2D1_SVG_PATH_COMMAND_ARC_ABSOLUTE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_ARC_RELATIVE + D2D1_SVG_PATH_COMMAND_ARC_RELATIVE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_HORIZONTAL_ABSOLUTE + D2D1_SVG_PATH_COMMAND_HORIZONTAL_ABSOLUTE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_HORIZONTAL_RELATIVE + D2D1_SVG_PATH_COMMAND_HORIZONTAL_RELATIVE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_VERTICAL_ABSOLUTE + D2D1_SVG_PATH_COMMAND_VERTICAL_ABSOLUTE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_VERTICAL_RELATIVE + D2D1_SVG_PATH_COMMAND_VERTICAL_RELATIVE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_CUBIC_SMOOTH_ABSOLUTE + D2D1_SVG_PATH_COMMAND_CUBIC_SMOOTH_ABSOLUTE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_CUBIC_SMOOTH_RELATIVE + D2D1_SVG_PATH_COMMAND_CUBIC_SMOOTH_RELATIVE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_QUADRADIC_SMOOTH_ABSOLUTE + D2D1_SVG_PATH_COMMAND_QUADRADIC_SMOOTH_ABSOLUTE + + + + No documentation. + + + dd756630 + D2D1_SVG_PATH_COMMAND_QUADRADIC_SMOOTH_RELATIVE + D2D1_SVG_PATH_COMMAND_QUADRADIC_SMOOTH_RELATIVE + + + +

    Describes whether a render target uses hardware or software rendering, or if Direct2D should select the rendering mode.

    +
    + +

    Not every render target supports hardware rendering. For more information, see the Render Targets Overview.

    +
    + + dd756630 + D2D1_SVG_UNIT_TYPE + D2D1_SVG_UNIT_TYPE +
    + + +

    The render target uses hardware rendering, if available; otherwise, it uses software rendering.

    +
    + + dd756630 + D2D1_SVG_UNIT_TYPE_USER_SPACE_ON_USE + D2D1_SVG_UNIT_TYPE_USER_SPACE_ON_USE +
    + + +

    The render target uses software rendering only.

    +
    + + dd756630 + D2D1_SVG_UNIT_TYPE_OBJECT_BOUNDING_BOX + D2D1_SVG_UNIT_TYPE_OBJECT_BOUNDING_BOX +
    + + +

    Defines options that should be applied to the color space.

    +
    + + hh446992 + D2D1_SVG_VISIBILITY + D2D1_SVG_VISIBILITY +
    + + +

    The color space is otherwise described, such as with a color profile.

    +
    + + hh446992 + D2D1_SVG_VISIBILITY_VISIBLE + D2D1_SVG_VISIBILITY_VISIBLE +
    + + +

    The color space is sRGB.

    +
    + + hh446992 + D2D1_SVG_VISIBILITY_HIDDEN + D2D1_SVG_VISIBILITY_HIDDEN +
    + + +

    Defines the direction that an elliptical arc is drawn.

    +
    + + dd368166 + D2D1_SWEEP_DIRECTION + D2D1_SWEEP_DIRECTION +
    + + +

    Arcs are drawn in a counterclockwise (negative-angle) direction.

    +
    + + dd368166 + D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE + D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE +
    + + +

    Arcs are drawn in a clockwise (positive-angle) direction.

    +
    + + dd368166 + D2D1_SWEEP_DIRECTION_CLOCKWISE + D2D1_SWEEP_DIRECTION_CLOCKWISE +
    + + +

    Identifiers for properties of the Table transfer effect.

    +
    + + dn934268 + D2D1_TABLETRANSFER_PROP + D2D1_TABLETRANSFER_PROP +
    + + + No documentation. + + + dn934268 + D2D1_TABLETRANSFER_PROP_RED_TABLE + D2D1_TABLETRANSFER_PROP_RED_TABLE + + + + No documentation. + + + dn934268 + D2D1_TABLETRANSFER_PROP_RED_DISABLE + D2D1_TABLETRANSFER_PROP_RED_DISABLE + + + + No documentation. + + + dn934268 + D2D1_TABLETRANSFER_PROP_GREEN_TABLE + D2D1_TABLETRANSFER_PROP_GREEN_TABLE + + + + No documentation. + + + dn934268 + D2D1_TABLETRANSFER_PROP_GREEN_DISABLE + D2D1_TABLETRANSFER_PROP_GREEN_DISABLE + + + + No documentation. + + + dn934268 + D2D1_TABLETRANSFER_PROP_BLUE_TABLE + D2D1_TABLETRANSFER_PROP_BLUE_TABLE + + + + No documentation. + + + dn934268 + D2D1_TABLETRANSFER_PROP_BLUE_DISABLE + D2D1_TABLETRANSFER_PROP_BLUE_DISABLE + + + + No documentation. + + + dn934268 + D2D1_TABLETRANSFER_PROP_ALPHA_TABLE + D2D1_TABLETRANSFER_PROP_ALPHA_TABLE + + + + No documentation. + + + dn934268 + D2D1_TABLETRANSFER_PROP_ALPHA_DISABLE + D2D1_TABLETRANSFER_PROP_ALPHA_DISABLE + + + + No documentation. + + + dn934268 + D2D1_TABLETRANSFER_PROP_CLAMP_OUTPUT + D2D1_TABLETRANSFER_PROP_CLAMP_OUTPUT + + + +

    Identifiers for properties of the Temperature and Tint effect.

    +
    + + dn890749 + D2D1_TEMPERATUREANDTINT_PROP + D2D1_TEMPERATUREANDTINT_PROP +
    + + + No documentation. + + + dn890749 + D2D1_TEMPERATUREANDTINT_PROP_TEMPERATURE + D2D1_TEMPERATUREANDTINT_PROP_TEMPERATURE + + + + No documentation. + + + dn890749 + D2D1_TEMPERATUREANDTINT_PROP_TINT + D2D1_TEMPERATUREANDTINT_PROP_TINT + + + +

    Describes the antialiasing mode used for drawing text.

    +
    + +

    This enumeration is used with the SetTextAntialiasMode of an to specify how text and glyphs are antialiased.

    By default, Direct2D renders text in ClearType mode. Factors that can downgrade the default quality to grayscale or aliased:

    • If the value is , then the default text antialiasing mode is aliased. To change the DirectWrite rendering mode of an , use the method.
    • If the value is , then the default text antialiasing mode is grayscale.
    • If the render target has an alpha channel and is not set to , then the default text antialiasing mode is grayscale.
    • If is called without (and the corresponding PopLayer has not been called yet), then the default text antialiasing mode is grayscale.
    +
    + + dd368170 + D2D1_TEXT_ANTIALIAS_MODE + D2D1_TEXT_ANTIALIAS_MODE +
    + + +

    Use the system default. See Remarks.

    +
    + + dd368170 + D2D1_TEXT_ANTIALIAS_MODE_DEFAULT + D2D1_TEXT_ANTIALIAS_MODE_DEFAULT +
    + + +

    Use ClearType antialiasing.

    +
    + + dd368170 + D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE + D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE +
    + + +

    Use grayscale antialiasing.

    +
    + + dd368170 + D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE + D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE +
    + + +

    Do not use antialiasing.

    +
    + + dd368170 + D2D1_TEXT_ANTIALIAS_MODE_ALIASED + D2D1_TEXT_ANTIALIAS_MODE_ALIASED +
    + + +

    Specifies the threading mode used while simultaneously creating the device, factory, and device context. +

    +
    + + hh447020 + D2D1_THREADING_MODE + D2D1_THREADING_MODE +
    + + +

    Resources may only be invoked serially. Device context state is not protected from multi-threaded access.

    +
    + + hh447020 + D2D1_THREADING_MODE_SINGLE_THREADED + D2D1_THREADING_MODE_SINGLE_THREADED +
    + + +

    Resources may be invoked from multiple threads. Resources use interlocked reference counting and their state is protected. +

    +
    + + hh447020 + D2D1_THREADING_MODE_MULTI_THREADED + D2D1_THREADING_MODE_MULTI_THREADED +
    + + +

    Identifiers for properties of the Tile effect.

    +
    + + dn934269 + D2D1_TILE_PROP + D2D1_TILE_PROP +
    + + + No documentation. + + + dn934269 + D2D1_TILE_PROP_RECT + D2D1_TILE_PROP_RECT + + + +

    This effect tints the source image by multiplying the source image by the specified color. It has a single input.

    The CLSID for this effect is .

    +
    + + mt745077 + D2D1_TINT_PROP + D2D1_TINT_PROP +
    + + + No documentation. + + + mt745077 + D2D1_TINT_PROP_COLOR + D2D1_TINT_PROP_COLOR + + + + No documentation. + + + mt745077 + D2D1_TINT_PROP_CLAMP_OUTPUT + D2D1_TINT_PROP_CLAMP_OUTPUT + + + +

    The interpolation mode the 3D transform effect uses on the image. There are 5 scale modes that range in quality and speed.

    +
    + + dn934209 + D2D1_3DTRANSFORM_INTERPOLATION_MODE + D2D1_3DTRANSFORM_INTERPOLATION_MODE +
    + + + No documentation. + + + dn934209 + D2D1_3DTRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR + D2D1_3DTRANSFORM_INTERPOLATION_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934209 + D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR + D2D1_3DTRANSFORM_INTERPOLATION_MODE_LINEAR + + + + No documentation. + + + dn934209 + D2D1_3DTRANSFORM_INTERPOLATION_MODE_CUBIC + D2D1_3DTRANSFORM_INTERPOLATION_MODE_CUBIC + + + + No documentation. + + + dn934209 + D2D1_3DTRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + D2D1_3DTRANSFORM_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934209 + D2D1_3DTRANSFORM_INTERPOLATION_MODE_ANISOTROPIC + D2D1_3DTRANSFORM_INTERPOLATION_MODE_ANISOTROPIC + + + +

    Identifiers for properties of the 3D transform effect.

    +
    + + dn934210 + D2D1_3DTRANSFORM_PROP + D2D1_3DTRANSFORM_PROP +
    + + + No documentation. + + + dn934210 + D2D1_3DTRANSFORM_PROP_INTERPOLATION_MODE + D2D1_3DTRANSFORM_PROP_INTERPOLATION_MODE + + + + No documentation. + + + dn934210 + D2D1_3DTRANSFORM_PROP_BORDER_MODE + D2D1_3DTRANSFORM_PROP_BORDER_MODE + + + + No documentation. + + + dn934210 + D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX + D2D1_3DTRANSFORM_PROP_TRANSFORM_MATRIX + + + +

    Option flags for transformed image sources.

    +
    + + dn934270 + D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS + D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS +
    + + +

    No option flags.

    +
    + + dn934270 + D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS_NONE + D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS_NONE +
    + + +

    Prevents the image source from being automatically scaled (by a ratio of the context DPI divided by 96) while drawn.

    +
    + + dn934270 + D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS_DISABLE_DPI_SCALE + D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS_DISABLE_DPI_SCALE +
    + + +

    The turbulence noise mode for the Turbulence effect. Indicates whether to generate a bitmap based on Fractal Noise or the Turbulence function.

    +
    + + dn934353 + D2D1_TURBULENCE_NOISE + D2D1_TURBULENCE_NOISE +
    + + + No documentation. + + + dn934353 + D2D1_TURBULENCE_NOISE_FRACTAL_SUM + D2D1_TURBULENCE_NOISE_FRACTAL_SUM + + + + No documentation. + + + dn934353 + D2D1_TURBULENCE_NOISE_TURBULENCE + D2D1_TURBULENCE_NOISE_TURBULENCE + + + +

    Identifiers for properties of the Turbulence effect.

    +
    + + dn934355 + D2D1_TURBULENCE_PROP + D2D1_TURBULENCE_PROP +
    + + + No documentation. + + + dn934355 + D2D1_TURBULENCE_PROP_OFFSET + D2D1_TURBULENCE_PROP_OFFSET + + + + No documentation. + + + dn934355 + D2D1_TURBULENCE_PROP_SIZE + D2D1_TURBULENCE_PROP_SIZE + + + + No documentation. + + + dn934355 + D2D1_TURBULENCE_PROP_BASE_FREQUENCY + D2D1_TURBULENCE_PROP_BASE_FREQUENCY + + + + No documentation. + + + dn934355 + D2D1_TURBULENCE_PROP_NUM_OCTAVES + D2D1_TURBULENCE_PROP_NUM_OCTAVES + + + + No documentation. + + + dn934355 + D2D1_TURBULENCE_PROP_SEED + D2D1_TURBULENCE_PROP_SEED + + + + No documentation. + + + dn934355 + D2D1_TURBULENCE_PROP_NOISE + D2D1_TURBULENCE_PROP_NOISE + + + + No documentation. + + + dn934355 + D2D1_TURBULENCE_PROP_STITCHABLE + D2D1_TURBULENCE_PROP_STITCHABLE + + + +

    Specifies how units in Direct2D will be interpreted.

    +
    + +

    Setting the unit mode to is similar to setting the dots per inch (dpi) to 96. However, Direct2D still checks the dpi to determine the threshold for enabling vertical antialiasing for text, and when the unit mode is restored, the dpi will be remembered.

    +
    + + hh447022 + D2D1_UNIT_MODE + D2D1_UNIT_MODE +
    + + +

    Units will be interpreted as device-independent pixels (1/96").

    +
    + + hh447022 + D2D1_UNIT_MODE_DIPS + D2D1_UNIT_MODE_DIPS +
    + + +

    Units will be interpreted as pixels.

    +
    + + hh447022 + D2D1_UNIT_MODE_PIXELS + D2D1_UNIT_MODE_PIXELS +
    + + +

    Describes flags that influence how the renderer interacts with a custom vertex shader.

    +
    + + hh404332 + D2D1_VERTEX_OPTIONS + D2D1_VERTEX_OPTIONS +
    + + +

    The logical equivalent of having no flags set.

    +
    + + hh404332 + D2D1_VERTEX_OPTIONS_NONE + D2D1_VERTEX_OPTIONS_NONE +
    + + +

    If this flag is set, the renderer assumes that the vertex shader will cover the entire region of interest with vertices and need not clear the destination render target. If this flag is not set, the renderer assumes that the vertices do not cover the entire region interest and must clear the render target to transparent black first.

    +
    + + hh404332 + D2D1_VERTEX_OPTIONS_DO_NOT_CLEAR + D2D1_VERTEX_OPTIONS_DO_NOT_CLEAR +
    + + +

    The renderer will use a depth buffer when rendering custom vertices. The depth buffer will be used for calculating occlusion information. This can result in the renderer output being draw-order dependent if it contains transparency.

    +
    + + hh404332 + D2D1_VERTEX_OPTIONS_USE_DEPTH_BUFFER + D2D1_VERTEX_OPTIONS_USE_DEPTH_BUFFER +
    + + +

    Indicates that custom vertices do not overlap each other.

    +
    + + hh404332 + D2D1_VERTEX_OPTIONS_ASSUME_NO_OVERLAP + D2D1_VERTEX_OPTIONS_ASSUME_NO_OVERLAP +
    + + +

    Indicates whether the vertex buffer changes infrequently or frequently.

    +
    + +

    If a dynamic vertex buffer is created, Direct2D will not necessarily map the buffer directly to a Direct3D vertex buffer. Instead, a system memory copy can be copied to the rendering engine vertex buffer as the effects are rendered.

    +
    + + hh404337 + D2D1_VERTEX_USAGE + D2D1_VERTEX_USAGE +
    + + +

    The created vertex buffer is updated infrequently.

    +
    + + hh404337 + D2D1_VERTEX_USAGE_STATIC + D2D1_VERTEX_USAGE_STATIC +
    + + +

    The created vertex buffer is changed frequently.

    +
    + + hh404337 + D2D1_VERTEX_USAGE_DYNAMIC + D2D1_VERTEX_USAGE_DYNAMIC +
    + + +

    Identifiers for properties of the Vignette effect.

    +
    + + dn890750 + D2D1_VIGNETTE_PROP + D2D1_VIGNETTE_PROP +
    + + + No documentation. + + + dn890750 + D2D1_VIGNETTE_PROP_COLOR + D2D1_VIGNETTE_PROP_COLOR + + + + No documentation. + + + dn890750 + D2D1_VIGNETTE_PROP_TRANSITION_SIZE + D2D1_VIGNETTE_PROP_TRANSITION_SIZE + + + + No documentation. + + + dn890750 + D2D1_VIGNETTE_PROP_STRENGTH + D2D1_VIGNETTE_PROP_STRENGTH + + + +

    Describes whether a window is occluded.

    +
    + +

    If the window was occluded the last time EndDraw was called, the next time the render target calls CheckWindowState, it returns regardless of the current window state. If you want to use CheckWindowState to check the current window state, call CheckWindowState after every EndDraw call and ignore its return value. This will ensure that your next call to CheckWindowState state returns the actual window state.

    +
    + + dd368174 + D2D1_WINDOW_STATE + D2D1_WINDOW_STATE +
    + + +

    The window is not occluded.

    +
    + + dd368174 + D2D1_WINDOW_STATE_NONE + D2D1_WINDOW_STATE_NONE +
    + + +

    The window is occluded.

    +
    + + dd368174 + D2D1_WINDOW_STATE_OCCLUDED + D2D1_WINDOW_STATE_OCCLUDED +
    + + +

    Specifies the chroma subsampling of the input chroma image used by the YCbCr effect.

    +
    + + dn934357 + D2D1_YCBCR_CHROMA_SUBSAMPLING + D2D1_YCBCR_CHROMA_SUBSAMPLING +
    + + + No documentation. + + + dn934357 + D2D1_YCBCR_CHROMA_SUBSAMPLING_AUTO + D2D1_YCBCR_CHROMA_SUBSAMPLING_AUTO + + + + No documentation. + + + dn934357 + D2D1_YCBCR_CHROMA_SUBSAMPLING_420 + D2D1_YCBCR_CHROMA_SUBSAMPLING_420 + + + + No documentation. + + + dn934357 + D2D1_YCBCR_CHROMA_SUBSAMPLING_422 + D2D1_YCBCR_CHROMA_SUBSAMPLING_422 + + + + No documentation. + + + dn934357 + D2D1_YCBCR_CHROMA_SUBSAMPLING_444 + D2D1_YCBCR_CHROMA_SUBSAMPLING_444 + + + + No documentation. + + + dn934357 + D2D1_YCBCR_CHROMA_SUBSAMPLING_440 + D2D1_YCBCR_CHROMA_SUBSAMPLING_440 + + + +

    Specifies the interpolation mode for the YCbCr effect.

    +
    + + dn934359 + D2D1_YCBCR_INTERPOLATION_MODE + D2D1_YCBCR_INTERPOLATION_MODE +
    + + + No documentation. + + + dn934359 + D2D1_YCBCR_INTERPOLATION_MODE_NEAREST_NEIGHBOR + D2D1_YCBCR_INTERPOLATION_MODE_NEAREST_NEIGHBOR + + + + No documentation. + + + dn934359 + D2D1_YCBCR_INTERPOLATION_MODE_LINEAR + D2D1_YCBCR_INTERPOLATION_MODE_LINEAR + + + + No documentation. + + + dn934359 + D2D1_YCBCR_INTERPOLATION_MODE_CUBIC + D2D1_YCBCR_INTERPOLATION_MODE_CUBIC + + + + No documentation. + + + dn934359 + D2D1_YCBCR_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + D2D1_YCBCR_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR + + + + No documentation. + + + dn934359 + D2D1_YCBCR_INTERPOLATION_MODE_ANISOTROPIC + D2D1_YCBCR_INTERPOLATION_MODE_ANISOTROPIC + + + + No documentation. + + + dn934359 + D2D1_YCBCR_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC + D2D1_YCBCR_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC + + + +

    Identifiers for properties of the YCbCr effect.

    +
    + + dn934361 + D2D1_YCBCR_PROP + D2D1_YCBCR_PROP +
    + + + No documentation. + + + dn934361 + D2D1_YCBCR_PROP_CHROMA_SUBSAMPLING + D2D1_YCBCR_PROP_CHROMA_SUBSAMPLING + + + + No documentation. + + + dn934361 + D2D1_YCBCR_PROP_TRANSFORM_MATRIX + D2D1_YCBCR_PROP_TRANSFORM_MATRIX + + + + No documentation. + + + dn934361 + D2D1_YCBCR_PROP_INTERPOLATION_MODE + D2D1_YCBCR_PROP_INTERPOLATION_MODE + + + + Functions + + + + + Constant WrongState. + D2DERR_WRONG_STATE + + + Constant NotInitializeD. + D2DERR_NOT_INITIALIZED + + + Constant UnsupportedOperation. + D2DERR_UNSUPPORTED_OPERATION + + + Constant ScannerFailed. + D2DERR_SCANNER_FAILED + + + Constant ScreenAccessDenied. + D2DERR_SCREEN_ACCESS_DENIED + + + Constant DisplayStateInvalid. + D2DERR_DISPLAY_STATE_INVALID + + + Constant ZeroVector. + D2DERR_ZERO_VECTOR + + + Constant InternalError. + D2DERR_INTERNAL_ERROR + + + Constant DisplayFormatNotSupported. + D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED + + + Constant InvalidCall. + D2DERR_INVALID_CALL + + + Constant NoHardwareDevice. + D2DERR_NO_HARDWARE_DEVICE + + + Constant RecreateTarget. + D2DERR_RECREATE_TARGET + + + Constant TooManyShaderElements. + D2DERR_TOO_MANY_SHADER_ELEMENTS + + + Constant ShaderCompileFailed. + D2DERR_SHADER_COMPILE_FAILED + + + Constant MaximumTextureSizeExceeded. + D2DERR_MAX_TEXTURE_SIZE_EXCEEDED + + + Constant UnsupportedVersion. + D2DERR_UNSUPPORTED_VERSION + + + Constant BadNumber. + D2DERR_BAD_NUMBER + + + Constant WrongFactory. + D2DERR_WRONG_FACTORY + + + Constant LayerAlreadyInUse. + D2DERR_LAYER_ALREADY_IN_USE + + + Constant PopCallDidNotMatchPush. + D2DERR_POP_CALL_DID_NOT_MATCH_PUSH + + + Constant WrongResourceDomain. + D2DERR_WRONG_RESOURCE_DOMAIN + + + Constant PushPopUnbalanced. + D2DERR_PUSH_POP_UNBALANCED + + + Constant RenderTargetHasLayerOrCliprect. + D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT + + + Constant IncompatibleBrushTypes. + D2DERR_INCOMPATIBLE_BRUSH_TYPES + + + Constant Win32Error. + D2DERR_WIN32_ERROR + + + Constant TargetNotGdiCompatible. + D2DERR_TARGET_NOT_GDI_COMPATIBLE + + + Constant TextEffectIsWrongType. + D2DERR_TEXT_EFFECT_IS_WRONG_TYPE + + + Constant TextRendererNotReleased. + D2DERR_TEXT_RENDERER_NOT_RELEASED + + + Constant ExceedsMaximumBitmapSize. + D2DERR_EXCEEDS_MAX_BITMAP_SIZE + + + Constant InvalidGraphConfiguration. + D2DERR_INVALID_GRAPH_CONFIGURATION + + + Constant InvalidInternalGraphConfiguration. + D2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION + + + Constant CyclicGraph. + D2DERR_CYCLIC_GRAPH + + + Constant BitmapCannotDraw. + D2DERR_BITMAP_CANNOT_DRAW + + + Constant OutstandingBitmapReferences. + D2DERR_OUTSTANDING_BITMAP_REFERENCES + + + Constant OriginalTargetNotBound. + D2DERR_ORIGINAL_TARGET_NOT_BOUND + + + Constant InvalidTarget. + D2DERR_INVALID_TARGET + + + Constant BitmapBoundAsTarget. + D2DERR_BITMAP_BOUND_AS_TARGET + + + Constant InsufficientDeviceCapabilities. + D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES + + + Constant IntermediateTooLarge. + D2DERR_INTERMEDIATE_TOO_LARGE + + + Constant EffectIsNotRegistered. + D2DERR_EFFECT_IS_NOT_REGISTERED + + + Constant InvalidProperty. + D2DERR_INVALID_PROPERTY + + + Constant NoSubProperties. + D2DERR_NO_SUBPROPERTIES + + + Constant PrintJobClosed. + D2DERR_PRINT_JOB_CLOSED + + + Constant PrintFormatNotSupported. + D2DERR_PRINT_FORMAT_NOT_SUPPORTED + + + Constant TooManyTransformInputs. + D2DERR_TOO_MANY_TRANSFORM_INPUTS + + + Constant InvalidGlyphImage. + D2DERR_INVALID_GLYPH_IMAGE + + + Constant UnsupportedPixelFormat. + D2DERR_UNSUPPORTED_PIXEL_FORMAT + + + Constant InsufficientBuffer. + D2DERR_INSUFFICIENT_BUFFER + + + Constant FileNotFound. + D2DERR_FILE_NOT_FOUND + + + +

    Defines an object that paints an area. Interfaces that derive from describe how the area is painted.

    +
    + +

    An is a device-dependent resource: your application should create bitmap brushes after it initializes the render target with which the bitmap brush will be used, and recreate the bitmap brush whenever the render target needs recreated. (For more information about resources, see Resources Overview.)

    Brush space in Direct2D is specified differently than in XPS and Windows Presentation Foundation (WPF). In Direct2D, brush space is not relative to the object being drawn, but rather is the current coordinate system of the render target, transformed by the brush transform, if present. To paint an object as it would be painted by a WPF brush, you must translate the brush space origin to the upper-left corner of the object's bounding box, and then scale the brush space so that the base tile fills the bounding box of the object.

    For more information about brushes, see the Brushes Overview.

    +
    + + dd371173 + ID2D1Brush + ID2D1Brush +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the degree of opacity of this brush.

    +
    + + dd371176 + GetOpacity / SetOpacity + GetOpacity + float ID2D1Brush::GetOpacity() +
    + + +

    Gets or sets the transform applied to this brush.

    +
    + +

    When the brush transform is the identity matrix, the brush appears in the same coordinate space as the render target in which it is drawn.

    +
    + + dd371179 + GetTransform / SetTransform + GetTransform + void ID2D1Brush::GetTransform([Out] D2D_MATRIX_3X2_F* transform) +
    + + +

    Sets the degree of opacity of this brush.

    +
    +

    A value between zero and 1 that indicates the opacity of the brush. This value is a constant multiplier that linearly scales the alpha value of all pixels filled by the brush. The opacity values are clamped in the range 0?1 before they are multipled together.

    + + dd371181 + void ID2D1Brush::SetOpacity([In] float opacity) + ID2D1Brush::SetOpacity +
    + + +

    Sets the transformation applied to the brush.

    +
    +

    The transformation to apply to this brush.

    + +

    When you paint with a brush, it paints in the coordinate space of the render target. Brushes do not automatically position themselves to align with the object being painted; by default, they begin painting at the origin (0, 0) of the render target.

    You can "move" the gradient defined by an to a target area by setting its start point and end point. Likewise, you can move the gradient defined by an by changing its center and radii.

    To align the content of an to the area being painted, you can use the SetTransform method to translate the bitmap to the desired location. This transform only affects the brush; it does not affect any other content drawn by the render target.

    The following illustrations show the effect of using an to fill a rectangle located at (100, 100). The illustration on the left illustration shows the result of filling the rectangle without transforming the brush: the bitmap is drawn at the render target's origin. As a result, only a portion of the bitmap appears in the rectangle.

    The illustration on the right shows the result of transforming the so that its content is shifted 50 pixels to the right and 50 pixels down. The bitmap now fills the rectangle.

    + + + dd371186 + void ID2D1Brush::SetTransform([In] const D2D_MATRIX_3X2_F* transform) + ID2D1Brush::SetTransform + + +

    +

    Gets the degree of opacity of this brush.

    +
    +

    A value between zero and 1 that indicates the opacity of the brush. This value is a constant multiplier that linearly scales the alpha value of all pixels filled by the brush. The opacity values are clamped in the range 0?1 before they are multipled together.

    + + dd371176 + float ID2D1Brush::GetOpacity() + ID2D1Brush::GetOpacity +
    + + +

    Gets the transform applied to this brush.

    +
    +

    The transform applied to this brush.

    + +

    When the brush transform is the identity matrix, the brush appears in the same coordinate space as the render target in which it is drawn.

    +
    + + dd371179 + void ID2D1Brush::GetTransform([Out] D2D_MATRIX_3X2_F* transform) + ID2D1Brush::GetTransform +
    + + +

    Represents the set of transforms implemented by the effect-rendering system, which provides fixed-functionality.

    +
    + + hh404452 + ID2D1ConcreteTransform + ID2D1ConcreteTransform +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the properties of the output buffer of the specified transform node.

    +
    +

    The number of bits and the type of the output buffer.

    +

    The number of channels in the output buffer (1 or 4).

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_INVALIDARGOne or more arguments are not valid

    ?

    + +

    You can use the method to see if buffer precision is supported.

    The available channel depth and precision depend on the capabilities of the underlying Microsoft Direct3D device.

    +
    + + hh404456 + HRESULT ID2D1ConcreteTransform::SetOutputBuffer([In] D2D1_BUFFER_PRECISION bufferPrecision,[In] D2D1_CHANNEL_DEPTH channelDepth) + ID2D1ConcreteTransform::SetOutputBuffer +
    + + +

    Sets whether the output of the specified transform is cached.

    +
    +

    TRUE if the output should be cached; otherwise, .

    + + hh404454 + void ID2D1ConcreteTransform::SetCached([In] BOOL isCached) + ID2D1ConcreteTransform::SetCached +
    + + +

    Provides factory methods and other state management for effect and transform authors.

    +
    + + dn949338 + ID2D1EffectContext1 + ID2D1EffectContext1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a 3D lookup table for mapping a 3-channel input to a 3-channel output. The table data must be provided in 4-channel format.

    +
    +

    Precision of the input lookup table data.

    +

    Number of lookup table elements per dimension (X, Y, Z).

    +

    Buffer holding the lookup table data.

    +

    Size of the lookup table data buffer.

    +

    An array containing two values. The first value is the size in bytes from one row (X dimension) of LUT data to the next. The second value is the size in bytes from one LUT data plane (X and Y dimensions) to the next.

    +

    Receives the new lookup table instance.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn949339 + HRESULT ID2D1EffectContext1::CreateLookupTable3D([In] D2D1_BUFFER_PRECISION precision,[In, Buffer] const unsigned int* extents,[In, Buffer] const unsigned char* data,[In] unsigned int dataCount,[In, Buffer] const unsigned int* strides,[Out] ID2D1LookupTable3D** lookupTable) + ID2D1EffectContext1::CreateLookupTable3D +
    + + + No documentation. + + + ID2D1EffectContext2 + ID2D1EffectContext2 + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1EffectContext2::CreateColorContextFromDxgiColorSpace([In] DXGI_COLOR_SPACE_TYPE colorSpace,[Out, Fast] ID2D1ColorContext1** colorContext) + ID2D1EffectContext2::CreateColorContextFromDxgiColorSpace + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1EffectContext2::CreateColorContextFromSimpleColorProfile([In] const D2D1_SIMPLE_COLOR_PROFILE* simpleProfile,[Out, Fast] ID2D1ColorContext1** colorContext) + ID2D1EffectContext2::CreateColorContextFromSimpleColorProfile + + + +

    Creates Direct2D resources. This interface also enables the creation of objects.

    +
    + + dn900394 + ID2D1Factory3 + ID2D1Factory3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates an object.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900395 + HRESULT ID2D1Factory3::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out, Fast] ID2D1Device2** d2dDevice2) + ID2D1Factory3::CreateDevice +
    + + +

    Creates Direct2D resources. This interface also enables the creation of objects.

    +
    + + mt619831 + ID2D1Factory4 + ID2D1Factory4 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates an object.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt619832 + HRESULT ID2D1Factory4::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out, Fast] ID2D1Device3** d2dDevice3) + ID2D1Factory4::CreateDevice +
    + + +

    Creates Direct2D resources. This interface also enables the creation of objects.

    +
    + + mt750191 + ID2D1Factory5 + ID2D1Factory5 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates an object.

    +
    + No documentation. + No documentation. +

    This method returns an success or error code.

    + + mt750192 + HRESULT ID2D1Factory5::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out, Fast] ID2D1Device4** d2dDevice4) + ID2D1Factory5::CreateDevice +
    + + +

    Creates Direct2D resources.

    +
    + +

    The interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes.

    A factory defines a set of CreateResource methods that can produce the following drawing resources:

    • Render targets: objects that render drawing commands.
    • Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.
    • Geometries: objects that represent simple and potentially complex shapes.

    To create an , you use one of the CreateFactory methods. You should retain the instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.

    +
    + + dd371246 + ID2D1Factory6 + ID2D1Factory6 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates Direct2D resources.

    +
    + No documentation. + No documentation. + No documentation. + +

    The interface is the starting point for using Direct2D; it's what you use to create other Direct2D resources that you can use to draw or describe shapes.

    A factory defines a set of CreateResource methods that can produce the following drawing resources:

    • Render targets: objects that render drawing commands.
    • Drawing state blocks: objects that store drawing state information, such as the current transformation and antialiasing mode.
    • Geometries: objects that represent simple and potentially complex shapes.

    To create an , you use one of the CreateFactory methods. You should retain the instance for as long as you use Direct2D resources; in general, you shouldn't need to recreate it when the application is running. For more information about Direct2D resources, see the Resources Overview.

    +
    + + dd371246 + HRESULT ID2D1Factory6::CreateDevice([In] IDXGIDevice* dxgiDevice,[Out, Fast] ID2D1Device5** d2dDevice5) + ID2D1Factory6::CreateDevice +
    + + +

    A Direct2D resource that wraps a WMF, EMF, or EMF+ metafile.

    +
    + + hh871460 + ID2D1GdiMetafile + ID2D1GdiMetafile +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the bounds of the metafile, in device-independent pixels (DIPs), as reported in the metafile?s header.

    +
    + + hh871463 + GetBounds + GetBounds + HRESULT ID2D1GdiMetafile::GetBounds([Out] D2D_RECT_F* bounds) +
    + + +

    This method streams the contents of the command to the given metafile sink.

    +
    +

    The sink into which Direct2D will call back.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + + hh871464 + HRESULT ID2D1GdiMetafile::Stream([In] ID2D1GdiMetafileSink* sink) + ID2D1GdiMetafile::Stream +
    + + +

    Gets the bounds of the metafile, in device-independent pixels (DIPs), as reported in the metafile?s header.

    +
    +

    The bounds, in DIPs, of the metafile.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + + hh871463 + HRESULT ID2D1GdiMetafile::GetBounds([Out] D2D_RECT_F* bounds) + ID2D1GdiMetafile::GetBounds +
    + + +

    This interface performs all the same functions as the existing interface. It also enables accessing the metafile DPI and bounds.

    +
    + + dn900400 + ID2D1GdiMetafile1 + ID2D1GdiMetafile1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the bounds of the metafile in source space in DIPs. This corresponds to the frame rect in an EMF/EMF+.

    +
    + + dn900402 + GetSourceBounds + GetSourceBounds + HRESULT ID2D1GdiMetafile1::GetSourceBounds([Out] D2D_RECT_F* bounds) +
    + + +

    Gets the DPI reported by the metafile.

    +
    +

    Receives the horizontal DPI reported by the metafile.

    +

    Receives the vertical DPI reported by the metafile.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900401 + HRESULT ID2D1GdiMetafile1::GetDpi([Out] float* dpiX,[Out] float* dpiY) + ID2D1GdiMetafile1::GetDpi +
    + + +

    Gets the bounds of the metafile in source space in DIPs. This corresponds to the frame rect in an EMF/EMF+.

    +
    +

    The bounds, in DIPs, of the metafile.

    +

    if successful, otherwise a failure .

    + + dn900402 + HRESULT ID2D1GdiMetafile1::GetSourceBounds([Out] D2D_RECT_F* bounds) + ID2D1GdiMetafile1::GetSourceBounds +
    + + +

    A developer implemented interface that allows a metafile to be replayed.

    +
    + + hh871461 + ID2D1GdiMetafileSink + ID2D1GdiMetafileSink +
    + + +

    This interface performs all the same functions as the existing interface. It also enables access to metafile records.

    +
    + + dn900403 + ID2D1GdiMetafileSink1 + ID2D1GdiMetafileSink1 +
    + + +

    This interface performs all the same functions as the existing interface. It also enables access to metafile records.

    +
    + + dn900403 + ID2D1GdiMetafileSink1 + ID2D1GdiMetafileSink1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Provides access to metafile records, including their type, data, and flags.

    +
    +

    The type of metafile record being processed. Please see MS-EMF and MS-EMFPLUS for a list of record types.

    +

    The data contained in this record. Please see MS-EMF and MS-EMFPLUS for information on record data layouts.

    +

    TThe size of the data pointed to by recordData.

    +

    The set of flags set for this record. Please see MS-EMF and MS-EMFPLUS for information on record flags.

    +

    if successful, otherwise a failure .

    + +

    For details on the EMF and EMF+ formats, please see Microsoft technical documents MS-EMF and MS-EMFPLUS.

    +
    + + dn900404 + HRESULT ID2D1GdiMetafileSink1::ProcessRecord([In] unsigned int recordType,[In, Optional] const void* recordData,[In] unsigned int recordDataSize,[In] unsigned int flags) + ID2D1GdiMetafileSink1::ProcessRecord +
    + + +

    A developer implemented interface that allows a metafile to be replayed.

    +
    + + hh871461 + ID2D1GdiMetafileSink + ID2D1GdiMetafileSink +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    This method is called once for each record stored in a metafile.

    +
    +

    The type of the record.

    +

    The data for the record.

    +

    The byte size of the record data.

    +

    Return true if the record is successfully.

    + + hh871462 + HRESULT ID2D1GdiMetafileSink::ProcessRecord([In] unsigned int recordType,[In, Optional] const void* recordData,[In] unsigned int recordDataSize) + ID2D1GdiMetafileSink::ProcessRecord +
    + + +

    Represents a geometry resource and defines a set of helper methods for manipulating and measuring geometric shapes. Interfaces that inherit from define specific shapes.

    +
    + +

    There are several types of Direct2D geometry objects: a simple geometry (, , or ), a path geometry (), or a composite geometry ( and ).

    Direct2D geometries enable you to describe two-dimensional figures and also offer many uses, such as defining hit-test regions, clip regions, and even animation paths.

    Direct2D geometries are immutable and device-independent resources created by . In general, you should create geometries once and retain them for the life of the application, or until they need to be modified. For more information about device-independent and device-dependent resources, see the Resources Overview.

    +
    + + dd316578 + ID2D1Geometry + ID2D1Geometry +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Retrieves the bounds of the geometry. + + No documentation. + No documentation. + + dd742751 + HRESULT ID2D1Geometry::GetBounds([In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[Out] D2D_RECT_F* bounds) + ID2D1Geometry::GetBounds + + + +

    Gets the bounds of the geometry after it has been widened by the specified stroke width and style and transformed by the specified matrix.

    +
    +

    The amount by which to widen the geometry by stroking its outline.

    +

    The style of the stroke that widens the geometry.

    +

    A transform to apply to the geometry after the geometry is transformed and after the geometry has been stroked.

    +

    When this method returns, contains the bounds of the widened geometry. You must allocate storage for this parameter.

    +

    When this method returns, contains the bounds of the widened geometry. You must allocate storage for this parameter.

    + + dd316714 + HRESULT ID2D1Geometry::GetWidenedBounds([In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[Out] D2D_RECT_F* bounds) + ID2D1Geometry::GetWidenedBounds +
    + + +

    Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform.

    +
    +

    The point to test for containment.

    +

    The thickness of the stroke to apply.

    +

    The style of stroke to apply.

    +

    The transform to apply to the stroked geometry.

    +

    The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the stroke by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution.

    +

    When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter.

    + + dd316744 + HRESULT ID2D1Geometry::StrokeContainsPoint([In] D2D_POINT_2F point,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[Out] BOOL* contains) + ID2D1Geometry::StrokeContainsPoint +
    + + +

    Indicates whether the area filled by the geometry would contain the specified point given the specified flattening tolerance.

    +
    +

    The point to test.

    +

    The transform to apply to the geometry prior to testing for containment, or null.

    +

    The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the fill by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution.

    +

    When this method returns, contains a value that is TRUE if the area filled by the geometry contains point; otherwise, .You must allocate storage for this parameter.

    + + dd316687 + HRESULT ID2D1Geometry::FillContainsPoint([In] D2D_POINT_2F point,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[Out] BOOL* contains) + ID2D1Geometry::FillContainsPoint +
    + + +

    Describes the intersection between this geometry and the specified geometry. The comparison is performed by using the specified flattening tolerance.

    +
    +

    The geometry to test.

    +

    The transform to apply to inputGeometry, or null.

    +

    The maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution.

    +

    When this method returns, contains a reference to a value that describes how this geometry is related to inputGeometry. You must allocate storage for this parameter.

    + +

    When interpreting the returned relation value, it is important to remember that the member of the enumeration type means that this geometry is contained inside inputGeometry, not that this geometry contains inputGeometry.

    For more information about how to interpret other possible return values, see .

    +
    + + dd316630 + HRESULT ID2D1Geometry::CompareWithGeometry([In] ID2D1Geometry* inputGeometry,[In, Optional] const D2D_MATRIX_3X2_F* inputGeometryTransform,[In] float flatteningTolerance,[Out] D2D1_GEOMETRY_RELATION* relation) + ID2D1Geometry::CompareWithGeometry +
    + + +

    Creates a simplified version of the geometry that contains only lines and (optionally) cubic Bezier curves and writes the result to an .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316730 + HRESULT ID2D1Geometry::Simplify([In] D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + ID2D1Geometry::Simplify +
    + + +

    Creates a set of clockwise-wound triangles that cover the geometry after it has been transformed using the specified matrix and flattened using the default tolerance.

    +
    +

    The transform to apply to this geometry.

    +

    The to which the tessellated is appended.

    +

    The to which the tessellated is appended.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316762 + HRESULT ID2D1Geometry::Tessellate([In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[In] ID2D1TessellationSink* tessellationSink) + ID2D1Geometry::Tessellate +
    + + +

    Combines this geometry with the specified geometry and stores the result in an .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316617 + HRESULT ID2D1Geometry::CombineWithGeometry([In] ID2D1Geometry* inputGeometry,[In] D2D1_COMBINE_MODE combineMode,[In, Optional] const D2D_MATRIX_3X2_F* inputGeometryTransform,[In] float flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + ID2D1Geometry::CombineWithGeometry +
    + + +

    Computes the outline of the geometry and writes the result to an .

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316722 + HRESULT ID2D1Geometry::Outline([In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + ID2D1Geometry::Outline +
    + + +

    Computes the area of the geometry after it has been transformed by the specified matrix and flattened using the specified tolerance.

    +
    +

    The transform to apply to this geometry before computing its area.

    +

    The maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution.

    +

    When this method returns, contains a reference to the area of the transformed, flattened version of this geometry. You must allocate storage for this parameter.

    + + dd316648 + HRESULT ID2D1Geometry::ComputeArea([In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[Out] float* area) + ID2D1Geometry::ComputeArea +
    + + + Calculates the length of the geometry as though each segment were unrolled into a line. + + No documentation. + No documentation. + No documentation. + + dd742744 + HRESULT ID2D1Geometry::ComputeLength([In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[Out] float* length) + ID2D1Geometry::ComputeLength + + + +

    Calculates the point and tangent vector at the specified distance along the geometry after it has been transformed by the specified matrix and flattened using the default tolerance.

    +
    +

    The distance along the geometry of the point and tangent to find. If this distance is less then 0, this method calculates the first point in the geometry. If this distance is greater than the length of the geometry, this method calculates the last point in the geometry.

    +

    The transform to apply to the geometry before calculating the specified point and tangent.

    +

    The location at the specified distance along the geometry. If the geometry is empty, this point contains NaN as its x and y values.

    +

    When this method returns, contains a reference to the tangent vector at the specified distance along the geometry. If the geometry is empty, this vector contains NaN as its x and y values. You must allocate storage for this parameter.

    +

    The location at the specified distance along the geometry. If the geometry is empty, this point contains NaN as its x and y values.

    + + dd316686 + HRESULT ID2D1Geometry::ComputePointAtLength([In] float length,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[Out, Optional] D2D_POINT_2F* point,[Out, Optional] D2D_POINT_2F* unitTangentVector) + ID2D1Geometry::ComputePointAtLength +
    + + +

    Widens the geometry by the specified stroke and writes the result to an after it has been transformed by the specified matrix and flattened using the specified tolerance.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316766 + HRESULT ID2D1Geometry::Widen([In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + ID2D1Geometry::Widen +
    + + + Default flattening tolerance used for all methods that are not explicitly using it. Default is set to 0.25f. + + + + + Get or set the default flattening tolerance used for all methods that are not explicitly using it. Default is set to 0.25f. + + + + + Combines this geometry with the specified geometry and stores the result in an . + + The geometry to combine with this instance. + The type of combine operation to perform. + The result of the combine operation. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT CombineWithGeometry([In] ID2D1Geometry* inputGeometry,[None] D2D1_COMBINE_MODE combineMode,[In, Optional] const D2D1_MATRIX_3X2_F* inputGeometryTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Combines this geometry with the specified geometry and stores the result in an . + + The geometry to combine with this instance. + The type of combine operation to perform. + The maximum bounds on the distance between points in the polygonal approximation of the geometries. Smaller values produce more accurate results but cause slower execution. + The result of the combine operation. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT CombineWithGeometry([In] ID2D1Geometry* inputGeometry,[None] D2D1_COMBINE_MODE combineMode,[In, Optional] const D2D1_MATRIX_3X2_F* inputGeometryTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Combines this geometry with the specified geometry and stores the result in an . + + The geometry to combine with this instance. + The type of combine operation to perform. + The transform to apply to inputGeometry before combining, or NULL. + The maximum bounds on the distance between points in the polygonal approximation of the geometries. Smaller values produce more accurate results but cause slower execution. + The result of the combine operation. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT CombineWithGeometry([In] ID2D1Geometry* inputGeometry,[None] D2D1_COMBINE_MODE combineMode,[In, Optional] const D2D1_MATRIX_3X2_F* inputGeometryTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Describes the intersection between this geometry and the specified geometry. The comparison is performed by using the specified flattening tolerance. + + + When interpreting the returned relation value, it is important to remember that the member of the D2D1_GEOMETRY_RELATION enumeration type means that this geometry is contained inside inputGeometry, not that this geometry contains inputGeometry. For more information about how to interpret other possible return values, see . + + The geometry to test. + When this method returns, contains a reference to a value that describes how this geometry is related to inputGeometry. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::CompareWithGeometry([In] ID2D1Geometry* inputGeometry,[In, Optional] const D2D1_MATRIX_3X2_F* inputGeometryTransform,[None] float flatteningTolerance,[Out] D2D1_GEOMETRY_RELATION* relation) + + + + Describes the intersection between this geometry and the specified geometry. The comparison is performed by using the specified flattening tolerance. + + + When interpreting the returned relation value, it is important to remember that the member of the D2D1_GEOMETRY_RELATION enumeration type means that this geometry is contained inside inputGeometry, not that this geometry contains inputGeometry. For more information about how to interpret other possible return values, see . + + The geometry to test. + The maximum bounds on the distance between points in the polygonal approximation of the geometries. Smaller values produce more accurate results but cause slower execution. + When this method returns, contains a reference to a value that describes how this geometry is related to inputGeometry. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::CompareWithGeometry([In] ID2D1Geometry* inputGeometry,[In, Optional] const D2D1_MATRIX_3X2_F* inputGeometryTransform,[None] float flatteningTolerance,[Out] D2D1_GEOMETRY_RELATION* relation) + + + + Computes the area of the geometry after it has been transformed by the specified matrix and flattened using the specified tolerance. + + When this this method returns, contains a reference to the area of the transformed, flattened version of this geometry. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::ComputeArea([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] float* area) + + + + Computes the area of the geometry after it has been transformed by the specified matrix and flattened using the specified tolerance. + + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + When this this method returns, contains a reference to the area of the transformed, flattened version of this geometry. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::ComputeArea([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] float* area) + + + + Calculates the length of the geometry as though each segment were unrolled into a line. + + When this method returns, contains a reference to the length of the geometry. For closed geometries, the length includes an implicit closing segment. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::ComputeLength([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] float* length) + + + + Calculates the length of the geometry as though each segment were unrolled into a line. + + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + When this method returns, contains a reference to the length of the geometry. For closed geometries, the length includes an implicit closing segment. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::ComputeLength([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] float* length) + + + + Calculates the point and tangent vector at the specified distance along the geometry after it has been transformed by the specified matrix and flattened using the specified tolerance. + + The distance along the geometry of the point and tangent to find. If this distance is less then 0, this method calculates the first point in the geometry. If this distance is greater than the length of the geometry, this method calculates the last point in the geometry. + When this method returns, contains a reference to the tangent vector at the specified distance along the geometry. If the geometry is empty, this vector contains NaN as its x and y values. You must allocate storage for this parameter. + The location at the specified distance along the geometry. If the geometry is empty, this point contains NaN as its x and y values. + HRESULT ID2D1Geometry::ComputePointAtLength([None] float length,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out, Optional] D2D1_POINT_2F* point,[Out, Optional] D2D1_POINT_2F* unitTangentVector) + + + + Calculates the point and tangent vector at the specified distance along the geometry after it has been transformed by the specified matrix and flattened using the specified tolerance. + + The distance along the geometry of the point and tangent to find. If this distance is less then 0, this method calculates the first point in the geometry. If this distance is greater than the length of the geometry, this method calculates the last point in the geometry. + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + When this method returns, contains a reference to the tangent vector at the specified distance along the geometry. If the geometry is empty, this vector contains NaN as its x and y values. You must allocate storage for this parameter. + The location at the specified distance along the geometry. If the geometry is empty, this point contains NaN as its x and y values. + HRESULT ID2D1Geometry::ComputePointAtLength([None] float length,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out, Optional] D2D1_POINT_2F* point,[Out, Optional] D2D1_POINT_2F* unitTangentVector) + + + + Indicates whether the area filled by the geometry would contain the specified point given the specified flattening tolerance. + + The point to test. + When this method returns, contains a bool value that is true if the area filled by the geometry contains point; otherwise, false.You must allocate storage for this parameter. + HRESULT ID2D1Geometry::FillContainsPoint([None] D2D1_POINT_2F point,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Indicates whether the area filled by the geometry would contain the specified point given the specified flattening tolerance. + + The point to test. + When this method returns, contains a bool value that is true if the area filled by the geometry contains point; otherwise, false.You must allocate storage for this parameter. + HRESULT ID2D1Geometry::FillContainsPoint([None] D2D1_POINT_2F point,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Indicates whether the area filled by the geometry would contain the specified point given the specified flattening tolerance. + + The point to test. + The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the fill by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution. + When this method returns, contains a bool value that is true if the area filled by the geometry contains point; otherwise, false.You must allocate storage for this parameter. + HRESULT ID2D1Geometry::FillContainsPoint([None] D2D1_POINT_2F point,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Indicates whether the area filled by the geometry would contain the specified point given the specified flattening tolerance. + + The point to test. + The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the fill by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution. + When this method returns, contains a bool value that is true if the area filled by the geometry contains point; otherwise, false.You must allocate storage for this parameter. + HRESULT ID2D1Geometry::FillContainsPoint([None] D2D1_POINT_2F point,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Indicates whether the area filled by the geometry would contain the specified point given the specified flattening tolerance. + + The point to test. + The transform to apply to the geometry prior to testing for containment, or NULL. + The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the fill by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution. + When this method returns, contains a bool value that is true if the area filled by the geometry contains point; otherwise, false.You must allocate storage for this parameter. + HRESULT ID2D1Geometry::FillContainsPoint([None] D2D1_POINT_2F point,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Retrieves the bounds of the geometry. + + When this method returns, contains the bounds of this geometry. If the bounds are empty, this will be a rect where bounds.left > bounds.right. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::GetBounds([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[Out] D2D1_RECT_F* bounds) + + + + Gets the bounds of the geometry after it has been widened by the specified stroke width and style and transformed by the specified matrix. + + The amount by which to widen the geometry by stroking its outline. + When this method returns, contains the bounds of the widened geometry. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::GetWidenedBounds([None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] D2D1_RECT_F* bounds) + + + + Gets the bounds of the geometry after it has been widened by the specified stroke width and style and transformed by the specified matrix. + + The amount by which to widen the geometry by stroking its outline. + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + When this method returns, contains the bounds of the widened geometry. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::GetWidenedBounds([None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] D2D1_RECT_F* bounds) + + + + Gets the bounds of the geometry after it has been widened by the specified stroke width and style and transformed by the specified matrix. + + The amount by which to widen the geometry by stroking its outline. + The style of the stroke that widens the geometry. + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + When this method returns, contains the bounds of the widened geometry. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::GetWidenedBounds([None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] D2D1_RECT_F* bounds) + + + + Computes the outline of the geometry and writes the result to an . + + + The {{Outline}} method allows the caller to produce a geometry with an equivalent fill to the input geometry, with the following additional properties: The output geometry contains no transverse intersections; that is, segments may touch, but they never cross.The outermost figures in the output geometry are all oriented counterclockwise. The output geometry is fill-mode invariant; that is, the fill of the geometry does not depend on the choice of the fill mode. For more information about the fill mode, see .Additionally, the {{Outline}} method can be useful in removing redundant portions of said geometries to simplify complex geometries. It can also be useful in combination with to create unions among several geometries simultaneously. + + The to which the geometry's transformed outline is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Outline([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Computes the outline of the geometry and writes the result to an . + + + The {{Outline}} method allows the caller to produce a geometry with an equivalent fill to the input geometry, with the following additional properties: The output geometry contains no transverse intersections; that is, segments may touch, but they never cross.The outermost figures in the output geometry are all oriented counterclockwise. The output geometry is fill-mode invariant; that is, the fill of the geometry does not depend on the choice of the fill mode. For more information about the fill mode, see .Additionally, the {{Outline}} method can be useful in removing redundant portions of said geometries to simplify complex geometries. It can also be useful in combination with to create unions among several geometries simultaneously. + + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + The to which the geometry's transformed outline is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Outline([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Computes the outline of the geometry and writes the result to an . + + + The {{Outline}} method allows the caller to produce a geometry with an equivalent fill to the input geometry, with the following additional properties: The output geometry contains no transverse intersections; that is, segments may touch, but they never cross.The outermost figures in the output geometry are all oriented counterclockwise. The output geometry is fill-mode invariant; that is, the fill of the geometry does not depend on the choice of the fill mode. For more information about the fill mode, see .Additionally, the {{Outline}} method can be useful in removing redundant portions of said geometries to simplify complex geometries. It can also be useful in combination with to create unions among several geometries simultaneously. + + The transform to apply to the geometry outline, or NULL. + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + The to which the geometry's transformed outline is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Outline([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Creates a simplified version of the geometry that contains only lines and (optionally) cubic Bezier curves and writes the result to an . + + A value that specifies whether the simplified geometry should contain curves. + The to which the simplified geometry is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Simplify([None] D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Creates a simplified version of the geometry that contains only lines and (optionally) cubic Bezier curves and writes the result to an . + + A value that specifies whether the simplified geometry should contain curves. + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + The to which the simplified geometry is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Simplify([None] D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Creates a simplified version of the geometry that contains only lines and (optionally) cubic Bezier curves and writes the result to an . + + A value that specifies whether the simplified geometry should contain curves. + The transform to apply to the simplified geometry, or NULL. + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + The to which the simplified geometry is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Simplify([None] D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. + + The point to test for containment. + The thickness of the stroke to apply. + When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::StrokeContainsPoint([None] D2D1_POINT_2F point,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. + + The point to test for containment. + The thickness of the stroke to apply. + When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::StrokeContainsPoint([None] D2D1_POINT_2F point,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. + + The point to test for containment. + The thickness of the stroke to apply. + The style of stroke to apply. + When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::StrokeContainsPoint([None] D2D1_POINT_2F point,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. + + The point to test for containment. + The thickness of the stroke to apply. + The style of stroke to apply. + When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::StrokeContainsPoint([None] D2D1_POINT_2F point,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. + + The point to test for containment. + The thickness of the stroke to apply. + The style of stroke to apply. + The transform to apply to the stroked geometry. + When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::StrokeContainsPoint([None] D2D1_POINT_2F point,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. + + The point to test for containment. + The thickness of the stroke to apply. + The style of stroke to apply. + The transform to apply to the stroked geometry. + When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::StrokeContainsPoint([None] D2D1_POINT_2F point,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Determines whether the geometry's stroke contains the specified point given the specified stroke thickness, style, and transform. + + The point to test for containment. + The thickness of the stroke to apply. + The style of stroke to apply. + The transform to apply to the stroked geometry. + The numeric accuracy with which the precise geometric path and path intersection is calculated. Points missing the stroke by less than the tolerance are still considered inside. Smaller values produce more accurate results but cause slower execution. + When this method returns, contains a boolean value set to true if the geometry's stroke contains the specified point; otherwise, false. You must allocate storage for this parameter. + HRESULT ID2D1Geometry::StrokeContainsPoint([None] D2D1_POINT_2F point,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] float flatteningTolerance,[Out] BOOL* contains) + + + + Creates a set of clockwise-wound triangles that cover the geometry after it has been transformed using the specified matrix and flattened using the specified tolerance + + The to which the tessellated is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Tessellate([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1TessellationSink* tessellationSink) + + + + Creates a set of clockwise-wound triangles that cover the geometry after it has been transformed using the specified matrix and flattened using the specified tolerance + + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + The to which the tessellated is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Tessellate([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1TessellationSink* tessellationSink) + + + + Creates a set of clockwise-wound triangles that cover the geometry after it has been transformed using the specified matrix and flattened using the specified tolerance + + The transform to apply to this geometry, or NULL. + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + The to which the tessellated is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Tessellate([In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1TessellationSink* tessellationSink) + + + + Widens the geometry by the specified stroke and writes the result to an after it has been transformed by the specified matrix and flattened using the specified tolerance. + + The amount by which to widen the geometry. + The to which the widened geometry is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Widen([None] FLOAT strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Widens the geometry by the specified stroke and writes the result to an after it has been transformed by the specified matrix and flattened using the specified tolerance. + + The amount by which to widen the geometry. + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + The to which the widened geometry is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Widen([None] FLOAT strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Widens the geometry by the specified stroke and writes the result to an after it has been transformed by the specified matrix and flattened using the specified tolerance. + + The amount by which to widen the geometry. + The style of stroke to apply to the geometry, or NULL. + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + The to which the widened geometry is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Widen([None] FLOAT strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + + Widens the geometry by the specified stroke and writes the result to an after it has been transformed by the specified matrix and flattened using the specified tolerance. + + The amount by which to widen the geometry. + The style of stroke to apply to the geometry, or NULL. + The transform to apply to the geometry after widening it, or NULL. + The maximum bounds on the distance between points in the polygonal approximation of the geometry. Smaller values produce more accurate results but cause slower execution. + The to which the widened geometry is appended. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Widen([None] FLOAT strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[In, Optional] const D2D1_MATRIX_3X2_F* worldTransform,[None] FLOAT flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + + + +

    Represents a composite geometry, composed of other objects.

    +
    + +

    Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one.

    +
    + + dd316581 + ID2D1GeometryGroup + ID2D1GeometryGroup +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Indicates how the intersecting areas of the geometries contained in this geometry group are combined.

    +
    + + dd316583 + GetFillMode + GetFillMode + D2D1_FILL_MODE ID2D1GeometryGroup::GetFillMode() +
    + + +

    Indicates the number of geometry objects in the geometry group.

    +
    + + dd316589 + GetSourceGeometryCount + GetSourceGeometryCount + unsigned int ID2D1GeometryGroup::GetSourceGeometryCount() +
    + + +

    Indicates how the intersecting areas of the geometries contained in this geometry group are combined.

    +
    +

    A value that indicates how the intersecting areas of the geometries contained in this geometry group are combined.

    + + dd316583 + D2D1_FILL_MODE ID2D1GeometryGroup::GetFillMode() + ID2D1GeometryGroup::GetFillMode +
    + + +

    Indicates the number of geometry objects in the geometry group.

    +
    +

    The number of geometries in the .

    + + dd316589 + unsigned int ID2D1GeometryGroup::GetSourceGeometryCount() + ID2D1GeometryGroup::GetSourceGeometryCount +
    + + +

    Retrieves the geometries in the geometry group.

    +
    +

    When this method returns, contains the address of a reference to an array of geometries to be filled by this method. The length of the array is specified by the geometryCount parameter. If the array is null, then this method performs no operation. You must allocate the memory for this array.

    +

    A value indicating the number of geometries to return in the geometries array. If this value is less than the number of geometries in the geometry group, the remaining geometries are omitted. If this value is larger than the number of geometries in the geometry group, the extra geometries are set to null. To obtain the number of geometries currently in the geometry group, use the GetSourceGeometryCount method.

    + +

    The returned geometries are referenced and counted, and the caller must release them.

    +
    + + dd316586 + void ID2D1GeometryGroup::GetSourceGeometries([Out, Buffer] ID2D1Geometry** geometries,[In] unsigned int geometriesCount) + ID2D1GeometryGroup::GetSourceGeometries +
    + + + Creates an , which is an object that holds other geometries. + + + Geometry groups are a convenient way to group several geometries simultaneously so all figures of several distinct geometries are concatenated into one. To create a object, call the CreateGeometryGroup method on the object, passing in the fillMode with possible values of (alternate) and D2D1_FILL_MODE_WINDING, an array of geometry objects to add to the geometry group, and the number of elements in this array. + + an instance of + A value that specifies the rule that a composite shape uses to determine whether a given point is part of the geometry. + An array containing the geometry objects to add to the geometry group. The number of elements in this array is indicated by the geometriesCount parameter. + + + + Retrieves the geometries in the geometry group. + + + The returned geometries are referenced and counted, and the caller must release them. + + an array of geometries to be filled by this method. The length of the array is specified by the geometryCount parameter. + void ID2D1GeometryGroup::GetSourceGeometries([Out, Buffer] ID2D1Geometry** geometries,[None] int geometriesCount) + + + + Retrieves the geometries in the geometry group. + + + The returned geometries are referenced and counted, and the caller must release them. + + A value indicating the number of geometries to return in the geometries array. If this value is less than the number of geometries in the geometry group, the remaining geometries are omitted. If this value is larger than the number of geometries in the geometry group, the extra geometries are set to NULL. To obtain the number of geometries currently in the geometry group, use the {{GetSourceGeometryCount}} method. + an array of geometries to be filled by this method. The length of the array is specified by the geometryCount parameter. + void ID2D1GeometryGroup::GetSourceGeometries([Out, Buffer] ID2D1Geometry** geometries,[None] int geometriesCount) + + + +

    Encapsulates a device- and transform-dependent representation of a filled or stroked geometry. Callers should consider creating a geometry realization when they wish to accelerate repeated rendering of a given geometry. This interface exposes no methods.

    +
    + + dn280515 + ID2D1GeometryRealization + ID2D1GeometryRealization + +

    Encapsulates a device- and transform-dependent representation of a filled or stroked geometry. Callers should consider creating a geometry realization when they wish to accelerate repeated rendering of a given geometry. This interface exposes no methods.

    +
    + + dn280515 + ID2D1GeometryRealization + ID2D1GeometryRealization +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a device-dependent representation of the fill of the geometry that can be subsequently rendered.

    +
    + The device context where the created instance should be attached to. +

    The geometry to realize.

    +

    The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    This method is used in conjunction with . The D2D1::ComputeFlatteningTolerance helper API may be used to determine the proper flattening tolerance.

    If the provided stroke style specifies a stroke transform type other than , then the stroke will be realized assuming the identity transform and a DPI of 96.

    +
    + + dn280462 + HRESULT ID2D1DeviceContext1::CreateFilledGeometryRealization([In] ID2D1Geometry* geometry,[In] float flatteningTolerance,[Out, Fast] ID2D1GeometryRealization** geometryRealization) + ID2D1DeviceContext1::CreateFilledGeometryRealization +
    + + +

    Creates a device-dependent representation of the stroke of a geometry that can be subsequently rendered.

    +
    + The device context where the created instance should be attached to. +

    The geometry to realize.

    +

    The flattening tolerance to use when converting Beziers to line segments. This parameter shares the same units as the coordinates of the geometry.

    +

    The width of the stroke. This parameter shares the same units as the coordinates of the geometry.

    +

    The stroke style (optional).

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid value was passed to the method.

    ?

    + +

    This method is used in conjunction with . The D2D1::ComputeFlatteningTolerance helper API may be used to determine the proper flattening tolerance.

    If the provided stroke style specifies a stroke transform type other than , then the stroke will be realized assuming the identity transform and a DPI of 96.

    +
    + + dn280463 + HRESULT ID2D1DeviceContext1::CreateStrokedGeometryRealization([In] ID2D1Geometry* geometry,[In] float flatteningTolerance,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle,[Out, Fast] ID2D1GeometryRealization** geometryRealization) + ID2D1DeviceContext1::CreateStrokedGeometryRealization +
    + + +

    Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves.

    +
    + +

    The interface extends the interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.

    A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the BeginFigure method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the EndFigure method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the Close method.

    +
    + + dd316592 + ID2D1GeometrySink + ID2D1GeometrySink +
    + + + Creates a line segment between the current point and the specified end point and adds it to the geometry sink. + + The end point of the line to draw. + void AddLine([None] D2D1_POINT_2F point) + + + + Creates a cubic Bezier curve between the current point and the specified endpoint. + + A structure that describes the control points and endpoint of the Bezier curve to add. + void AddBezier([In] const D2D1_BEZIER_SEGMENT* bezier) + + + + Creates a quadratic Bezier curve between the current point and the specified endpoint. + + A structure that describes the control point and the endpoint of the quadratic Bezier curve to add. + void AddQuadraticBezier([In] const D2D1_QUADRATIC_BEZIER_SEGMENT* bezier) + + + + Adds a sequence of quadratic Bezier segments as an array in a single call. + + An array of a sequence of quadratic Bezier segments. + void AddQuadraticBeziers([In, Buffer] const D2D1_QUADRATIC_BEZIER_SEGMENT* beziers,[None] UINT beziersCount) + + + + Adds a single arc to the path geometry. + + The arc segment to add to the figure. + void AddArc([In] const D2D1_ARC_SEGMENT* arc) + + + +

    Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves.

    +
    + +

    The interface extends the interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.

    A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the BeginFigure method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the EndFigure method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the Close method.

    +
    + + dd316592 + ID2D1GeometrySink + ID2D1GeometrySink +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a line segment between the current point and the specified end point and adds it to the geometry sink.

    +
    +

    The end point of the line to draw.

    + + dd316604 + void ID2D1GeometrySink::AddLine([In] D2D_POINT_2F point) + ID2D1GeometrySink::AddLine +
    + + + Creates a cubic Bezier curve between the current point and the specified end point and adds it to the geometry sink. + + No documentation. + + dd742735 + void ID2D1GeometrySink::AddBezier([In] const D2D1_BEZIER_SEGMENT* bezier) + ID2D1GeometrySink::AddBezier + + + +

    Creates a quadratic Bezier curve between the current point and the specified end point.

    +
    +

    A structure that describes the control point and the end point of the quadratic Bezier curve to add.

    + + dd316614 + void ID2D1GeometrySink::AddQuadraticBezier([In] const D2D1_QUADRATIC_BEZIER_SEGMENT* bezier) + ID2D1GeometrySink::AddQuadraticBezier +
    + + +

    Adds a sequence of quadratic Bezier segments as an array in a single call.

    +
    +

    An array of a sequence of quadratic Bezier segments.

    +

    A value indicating the number of quadratic Bezier segments in beziers.

    + + dd316608 + void ID2D1GeometrySink::AddQuadraticBeziers([In, Buffer] const D2D1_QUADRATIC_BEZIER_SEGMENT* beziers,[In] unsigned int beziersCount) + ID2D1GeometrySink::AddQuadraticBeziers +
    + + +

    Describes a geometric path that can contain lines, arcs, cubic Bezier curves, and quadratic Bezier curves.

    +
    + No documentation. + +

    The interface extends the interface to add support for arcs and quadratic beziers, as well as functions for adding single lines and cubic beziers.

    A geometry sink consists of one or more figures. Each figure is made up of one or more line, curve, or arc segments. To create a figure, call the BeginFigure method, specify the figure's start point, and then use its Add methods (such as AddLine and AddBezier) to add segments. When you are finished adding segments, call the EndFigure method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the Close method.

    +
    + + dd316592 + void ID2D1GeometrySink::AddArc([In] const D2D1_ARC_SEGMENT* arc) + ID2D1GeometrySink::AddArc +
    + + +

    Represents a device-dependent representation of a gradient mesh composed of patches. Use the method to create an instance of .

    +
    + + dn900410 + ID2D1GradientMesh + ID2D1GradientMesh +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the number of patches that make up this gradient mesh.

    +
    + + dn900411 + GetPatchCount + GetPatchCount + unsigned int ID2D1GradientMesh::GetPatchCount() +
    + + +

    Returns the number of patches that make up this gradient mesh.

    +
    +

    Returns the number of patches that make up this gradient mesh.

    + + dn900411 + unsigned int ID2D1GradientMesh::GetPatchCount() + ID2D1GradientMesh::GetPatchCount +
    + + +

    Returns a subset of the patches that make up this gradient mesh.

    +
    +

    Index of the first patch to return.

    +

    A reference to the array to be filled with the patch data.

    +

    The number of patches to be returned.

    +

    if successful, otherwise a failure .

    + + dn900412 + HRESULT ID2D1GradientMesh::GetPatches([In] unsigned int startIndex,[Out, Buffer] D2D1_GRADIENT_MESH_PATCH* patches,[In] unsigned int patchesCount) + ID2D1GradientMesh::GetPatches +
    + + + Initializes a new instance of the . + + + + +

    Represents an collection of objects for linear and radial gradient brushes.

    +
    + + dd316783 + ID2D1GradientStopCollection + ID2D1GradientStopCollection +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the number of gradient stops in the collection.

    +
    + + dd371454 + GetGradientStopCount + GetGradientStopCount + unsigned int ID2D1GradientStopCollection::GetGradientStopCount() +
    + + +

    Indicates the gamma space in which the gradient stops are interpolated.

    +
    + + dd316786 + GetColorInterpolationGamma + GetColorInterpolationGamma + D2D1_GAMMA ID2D1GradientStopCollection::GetColorInterpolationGamma() +
    + + +

    Indicates the behavior of the gradient outside the normalized gradient range.

    +
    + + dd316789 + GetExtendMode + GetExtendMode + D2D1_EXTEND_MODE ID2D1GradientStopCollection::GetExtendMode() +
    + + +

    Retrieves the number of gradient stops in the collection.

    +
    +

    The number of gradient stops in the collection.

    + + dd371454 + unsigned int ID2D1GradientStopCollection::GetGradientStopCount() + ID2D1GradientStopCollection::GetGradientStopCount +
    + + +

    Copies the gradient stops from the collection into an array of structures.

    +
    + No documentation. + No documentation. + +

    Gradient stops are copied in order of position, starting with the gradient stop with the smallest position value and progressing to the gradient stop with the largest position value.

    +
    + + dd371457 + void ID2D1GradientStopCollection::GetGradientStops([Out, Buffer] D2D1_GRADIENT_STOP* gradientStops,[In] unsigned int gradientStopsCount) + ID2D1GradientStopCollection::GetGradientStops +
    + + +

    Indicates the gamma space in which the gradient stops are interpolated.

    +
    +

    The gamma space in which the gradient stops are interpolated.

    + + dd316786 + D2D1_GAMMA ID2D1GradientStopCollection::GetColorInterpolationGamma() + ID2D1GradientStopCollection::GetColorInterpolationGamma +
    + + +

    Indicates the behavior of the gradient outside the normalized gradient range.

    +
    +

    The behavior of the gradient outside the [0,1] normalized gradient range.

    + + dd316789 + D2D1_EXTEND_MODE ID2D1GradientStopCollection::GetExtendMode() + ID2D1GradientStopCollection::GetExtendMode +
    + + + Creates an from the specified gradient stops, a Gamma StandardRgb, and ExtendMode.Clamp. + + an instance of + A pointer to an array of D2D1_GRADIENT_STOP structures. + HRESULT CreateGradientStopCollection([In, Buffer] const D2D1_GRADIENT_STOP* gradientStops,[None] UINT gradientStopsCount,[None] D2D1_GAMMA colorInterpolationGamma,[None] D2D1_EXTEND_MODE extendMode,[Out] ID2D1GradientStopCollection** gradientStopCollection) + + + + Creates an from the specified gradient stops, color Gamma.StandardRgb, and extend mode. + + an instance of + A pointer to an array of D2D1_GRADIENT_STOP structures. + The behavior of the gradient outside the [0,1] normalized range. + HRESULT CreateGradientStopCollection([In, Buffer] const D2D1_GRADIENT_STOP* gradientStops,[None] UINT gradientStopsCount,[None] D2D1_GAMMA colorInterpolationGamma,[None] D2D1_EXTEND_MODE extendMode,[Out] ID2D1GradientStopCollection** gradientStopCollection) + + + + Creates an from the specified gradient stops, color interpolation gamma, and ExtendMode.Clamp. + + an instance of + A pointer to an array of D2D1_GRADIENT_STOP structures. + The space in which color interpolation between the gradient stops is performed. + HRESULT CreateGradientStopCollection([In, Buffer] const D2D1_GRADIENT_STOP* gradientStops,[None] UINT gradientStopsCount,[None] D2D1_GAMMA colorInterpolationGamma,[None] D2D1_EXTEND_MODE extendMode,[Out] ID2D1GradientStopCollection** gradientStopCollection) + + + + Creates an from the specified gradient stops, color interpolation gamma, and extend mode. + + an instance of + A pointer to an array of D2D1_GRADIENT_STOP structures. + The space in which color interpolation between the gradient stops is performed. + The behavior of the gradient outside the [0,1] normalized range. + HRESULT CreateGradientStopCollection([In, Buffer] const D2D1_GRADIENT_STOP* gradientStops,[None] UINT gradientStopsCount,[None] D2D1_GAMMA colorInterpolationGamma,[None] D2D1_EXTEND_MODE extendMode,[Out] ID2D1GradientStopCollection** gradientStopCollection) + + + +

    Represents a collection of objects for linear and radial gradient brushes. It provides get methods for all the new parameters added to the gradient stop collection.

    +
    + + hh446792 + ID2D1GradientStopCollection1 + ID2D1GradientStopCollection1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the color space of the input colors as well as the space in which gradient stops are interpolated.

    +
    + +

    If this object was created using , this method returns the color space related to the color interpolation gamma.

    +
    + + hh446802 + GetPreInterpolationSpace + GetPreInterpolationSpace + D2D1_COLOR_SPACE ID2D1GradientStopCollection1::GetPreInterpolationSpace() +
    + + +

    Gets the color space after interpolation has occurred.

    +
    + +

    If you create using , this method returns .

    +
    + + hh446800 + GetPostInterpolationSpace + GetPostInterpolationSpace + D2D1_COLOR_SPACE ID2D1GradientStopCollection1::GetPostInterpolationSpace() +
    + + +

    Gets the precision of the gradient buffer.

    +
    + +

    If this object was created using , this method returns .

    +
    + + hh446796 + GetBufferPrecision + GetBufferPrecision + D2D1_BUFFER_PRECISION ID2D1GradientStopCollection1::GetBufferPrecision() +
    + + +

    Retrieves the color interpolation mode that the gradient stop collection uses.

    +
    + + hh871465 + GetColorInterpolationMode + GetColorInterpolationMode + D2D1_COLOR_INTERPOLATION_MODE ID2D1GradientStopCollection1::GetColorInterpolationMode() +
    + + +

    Copies the gradient stops from the collection into memory.

    +
    +

    When this method returns, contains a reference to a one-dimensional array of structures.

    +

    The number of gradient stops to copy.

    + +

    If the object was created using , this method returns the same values specified in the creation method. If the object was created using , the stops returned here will first be transformed into the gamma space specified by the colorInterpolationGamma parameter. See the method for more info about color space and gamma space.

    If gradientStopsCount is less than the number of gradient stops in the collection, the remaining gradient stops are omitted. If gradientStopsCount is larger than the number of gradient stops in the collection, the extra gradient stops are set to null. To obtain the number of gradient stops in the collection, use the GetGradientStopCount method.

    +
    + + hh446798 + void ID2D1GradientStopCollection1::GetGradientStops1([Out, Buffer] D2D1_GRADIENT_STOP* gradientStops,[In] unsigned int gradientStopsCount) + ID2D1GradientStopCollection1::GetGradientStops1 +
    + + +

    Gets the color space of the input colors as well as the space in which gradient stops are interpolated.

    +
    +

    This method returns the color space.

    + +

    If this object was created using , this method returns the color space related to the color interpolation gamma.

    +
    + + hh446802 + D2D1_COLOR_SPACE ID2D1GradientStopCollection1::GetPreInterpolationSpace() + ID2D1GradientStopCollection1::GetPreInterpolationSpace +
    + + +

    Gets the color space after interpolation has occurred.

    +
    +

    This method returns the color space.

    + +

    If you create using , this method returns .

    +
    + + hh446800 + D2D1_COLOR_SPACE ID2D1GradientStopCollection1::GetPostInterpolationSpace() + ID2D1GradientStopCollection1::GetPostInterpolationSpace +
    + + +

    Gets the precision of the gradient buffer.

    +
    +

    The buffer precision of the gradient buffer.

    + +

    If this object was created using , this method returns .

    +
    + + hh446796 + D2D1_BUFFER_PRECISION ID2D1GradientStopCollection1::GetBufferPrecision() + ID2D1GradientStopCollection1::GetBufferPrecision +
    + + +

    Retrieves the color interpolation mode that the gradient stop collection uses.

    +
    +

    The color interpolation mode.

    + + hh871465 + D2D1_COLOR_INTERPOLATION_MODE ID2D1GradientStopCollection1::GetColorInterpolationMode() + ID2D1GradientStopCollection1::GetColorInterpolationMode +
    + + + Initializes a new instance of the class. + + The context. + An array of color values and offsets. + Specifies both the input color space and the space in which the color interpolation occurs. + The color space that colors will be converted to after interpolation occurs. + The precision of the texture used to hold interpolated values. + Defines how colors outside of the range defined by the stop collection are determined. + The new gradient stop collection. + HRESULT ID2D1DeviceContext::CreateGradientStopCollection([In, Buffer] const D2D1_GRADIENT_STOP* straightAlphaGradientStops,[In] unsigned int straightAlphaGradientStopsCount,[In] D2D1_COLOR_SPACE preInterpolationSpace,[In] D2D1_COLOR_SPACE postInterpolationSpace,[In] D2D1_BUFFER_PRECISION bufferPrecision,[In] D2D1_EXTEND_MODE extendMode,[In] D2D1_COLOR_INTERPOLATION_MODE colorInterpolationMode,[Out, Fast] ID2D1GradientStopCollection1** gradientStopCollection1) + + This method linearly interpolates between the color stops. An optional color space conversion is applied after interpolation. Whether and how this gamma conversion is applied is determined before and after interpolation. This method will fail if the device context does not support the requested buffer precision.Additional ReferencesD2D1_GRADIENT_STOP, D2D1_GAMMA_CONVERSION, , , RequirementsMinimum supported operating systemSame as Interface / Class Highest IRQL levelN/A (user mode) Callable from DlllMain()No Callable from services and session 0Yes Callable from UI threadYes? + + + + +

    Represents a producer of pixels that can fill an arbitrary 2D plane.

    +
    + +

    An is abstract. Concrete instances can be created through and .

    Images are evaluated lazily. If the type of image passed in is concrete, then the image can be directly sampled from. Other images can act only as a source of pixels and can produce content only as a result of calling .

    +
    + + hh446803 + ID2D1Image + ID2D1Image +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Represents a brush based on an .

    +
    + + hh446804 + ID2D1ImageBrush + ID2D1ImageBrush +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the image associated with the image brush.

    +
    + + hh446807 + GetImage / SetImage + GetImage + void ID2D1ImageBrush::GetImage([Out, Optional] ID2D1Image** image) +
    + + +

    Gets or sets the extend mode of the image brush on the x-axis.

    +
    + + hh446805 + GetExtendModeX / SetExtendModeX + GetExtendModeX + D2D1_EXTEND_MODE ID2D1ImageBrush::GetExtendModeX() +
    + + +

    Gets or sets the extend mode of the image brush on the y-axis of the image.

    +
    + + hh446806 + GetExtendModeY / SetExtendModeY + GetExtendModeY + D2D1_EXTEND_MODE ID2D1ImageBrush::GetExtendModeY() +
    + + +

    Gets or sets the interpolation mode of the image brush.

    +
    + + hh446808 + GetInterpolationMode / SetInterpolationMode + GetInterpolationMode + D2D1_INTERPOLATION_MODE ID2D1ImageBrush::GetInterpolationMode() +
    + + +

    Gets or sets the rectangle that will be used as the bounds of the image when drawn as an image brush.

    +
    + + hh446809 + GetSourceRectangle / SetSourceRectangle + GetSourceRectangle + void ID2D1ImageBrush::GetSourceRectangle([Out] D2D_RECT_F* sourceRectangle) +
    + + +

    Sets the image associated with the provided image brush.

    +
    +

    The image to be associated with the image brush.

    + + hh446812 + void ID2D1ImageBrush::SetImage([In, Optional] ID2D1Image* image) + ID2D1ImageBrush::SetImage +
    + + +

    Sets how the content inside the source rectangle in the image brush will be extended on the x-axis.

    +
    +

    The extend mode on the x-axis of the image.

    + + hh446810 + void ID2D1ImageBrush::SetExtendModeX([In] D2D1_EXTEND_MODE extendModeX) + ID2D1ImageBrush::SetExtendModeX +
    + + +

    Sets the extend mode on the y-axis.

    +
    +

    The extend mode on the y-axis of the image.

    + + hh446811 + void ID2D1ImageBrush::SetExtendModeY([In] D2D1_EXTEND_MODE extendModeY) + ID2D1ImageBrush::SetExtendModeY +
    + + +

    Sets the interpolation mode for the image brush.

    +
    +

    How the contents of the image will be interpolated to handle the brush transform.

    + + hh446813 + void ID2D1ImageBrush::SetInterpolationMode([In] D2D1_INTERPOLATION_MODE interpolationMode) + ID2D1ImageBrush::SetInterpolationMode +
    + + +

    Sets the source rectangle in the image brush.

    +
    +

    The source rectangle that defines the portion of the image to tile.

    + +

    The top left corner of the sourceRectangle parameter maps to the brush space origin. That is, if the brush and world transforms are both identity, the portion of the image in the top left corner of the source rectangle will be rendered at (0,0) in the render target.

    The source rectangle will be expanded differently depending on whether the input image is based on pixels (a bitmap or effect) or by a command list.

    • If the input image is a bitmap or an effect, the rectangle will be expanded to encapsulate a full input pixel before being additionally down-scaled to ensure that the projected rectangle will be correct in the final scene-space.
    • If the input image is a command list, the command list will be slightly expanded to encapsulate a full input pixel. +
    +
    + + hh446815 + void ID2D1ImageBrush::SetSourceRectangle([In] const D2D_RECT_F* sourceRectangle) + ID2D1ImageBrush::SetSourceRectangle +
    + + +

    Gets the image associated with the image brush.

    +
    +

    When this method returns, contains the address of a reference to the image associated with this brush.

    + + hh446807 + void ID2D1ImageBrush::GetImage([Out, Optional] ID2D1Image** image) + ID2D1ImageBrush::GetImage +
    + + +

    Gets the extend mode of the image brush on the x-axis.

    +
    +

    This method returns the x-extend mode.

    + + hh446805 + D2D1_EXTEND_MODE ID2D1ImageBrush::GetExtendModeX() + ID2D1ImageBrush::GetExtendModeX +
    + + +

    Gets the extend mode of the image brush on the y-axis of the image.

    +
    +

    This method returns the y-extend mode.

    + + hh446806 + D2D1_EXTEND_MODE ID2D1ImageBrush::GetExtendModeY() + ID2D1ImageBrush::GetExtendModeY +
    + + +

    Gets the interpolation mode of the image brush.

    +
    +

    This method returns the interpolation mode.

    + + hh446808 + D2D1_INTERPOLATION_MODE ID2D1ImageBrush::GetInterpolationMode() + ID2D1ImageBrush::GetInterpolationMode +
    + + +

    Gets the rectangle that will be used as the bounds of the image when drawn as an image brush.

    +
    +

    When this method returns, contains the address of the output source rectangle.

    + + hh446809 + void ID2D1ImageBrush::GetSourceRectangle([Out] D2D_RECT_F* sourceRectangle) + ID2D1ImageBrush::GetSourceRectangle +
    + + + Initializes a new instance of the class. + + The context. + The image. + The image brush properties. + HRESULT ID2D1DeviceContext::CreateImageBrush([In] ID2D1Image* image,[In] const D2D1_IMAGE_BRUSH_PROPERTIES* imageBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1ImageBrush** imageBrush) + + + + Initializes a new instance of the class. + + The context. + The image. + The image brush properties. + The brush properties. + HRESULT ID2D1DeviceContext::CreateImageBrush([In] ID2D1Image* image,[In] const D2D1_IMAGE_BRUSH_PROPERTIES* imageBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1ImageBrush** imageBrush) + + + +

    Represents a producer of pixels that can fill an arbitrary 2D plane.

    +
    + + dn900413 + ID2D1ImageSource + ID2D1ImageSource +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Allows the operating system to free the video memory of resources by discarding their content.

    +
    +

    OfferResources returns:

    • if resources were successfully offered
    • E_INVALIDARG if a resource in the array or the priority is invalid
    + + mt591933 + HRESULT ID2D1ImageSource::OfferResources() + ID2D1ImageSource::OfferResources +
    + + +

    Restores access to resources that were previously offered by calling OfferResources.

    +
    + No documentation. +

    ReclaimResources returns:

    • if resources were successfully reclaimed
    • E_INVALIDARG if the resources are invalid
    + +

    After you call OfferResources to offer one or more resources, + you must call TryReclaimResources before you can use those resources again. + You must check the value in the resourcesDiscarded to determine whether the resource?s content was discarded. + If a resource?s content was discarded while it was offered, its current content is undefined. Therefore, you must overwrite the resource?s content before you use the resource.

    +
    + + dn952190 + HRESULT ID2D1ImageSource::TryReclaimResources([Out] BOOL* resourcesDiscarded) + ID2D1ImageSource::TryReclaimResources +
    + + + Initializes a new instance of the . + + + + +

    Produces 2D pixel data that has been sourced from WIC.

    +
    + +

    Create an an instance of using .

    +
    + + dn900414 + ID2D1ImageSourceFromWic + ID2D1ImageSourceFromWic +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the underlying bitmap image source from the Windows Imaging Component (WIC).

    +
    + + dn900422 + GetSource + GetSource + void ID2D1ImageSourceFromWic::GetSource([Out, Optional] IWICBitmapSource** wicBitmapSource) +
    + + +

    Ensures that a specified region of the image source cache is populated. This method can be used to minimize glitches by performing expensive work to populate caches outside of a rendering loop. This method can also be used to speculatively load image data before it is needed by drawing routines.

    +
    +

    Specifies the region of the image, in pixels, that should be populated in the cache. By default, this is the entire extent of the image.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This API loads image data into caches of image sources, if that data was not already cached. It does not trim pre-existing caches, if any. More areas within the cache can be populated than actually requested.

    ?

    The provided region must be constructed to include the scale with which the image source will subsequently be drawn. These coordinates must be provided in local coordinates. This means that they must be adjusted prior to calling the API according to the DPI and other relevant transforms, which can include the world transform and brush transforms.

    This operation is only supported when the image source has been initialized using the option.

    +
    + + dn900420 + HRESULT ID2D1ImageSourceFromWic::EnsureCached([In, Optional] const D2D_RECT_U* rectangleToFill) + ID2D1ImageSourceFromWic::EnsureCached +
    + + +

    This method trims the populated regions of the image source cache to just the specified rectangle.

    +
    +

    Specifies the region of the image, in pixels, which should be preserved in the image source cache. Regions which are outside of the rectangle are evicted from the cache. By default, this is an empty rectangle, meaning that the entire image is evicted from the cache.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The provided region must be constructed to include the scale at which the image source will be drawn at. These coordinates must be provided in local coordinates. This means that they must be adjusted prior to calling the API according to the DPI and other relevant transforms, which can include the world transform and brush transforms.

    ?

    This method will fail if on-demand caching was not requested when the image source was created.

    ?

    As with , the caller can need to subsequently issue a D3D flush before memory usage is reduced.

    This operation is only supported when the image source has been initialized using the option.

    +
    + + dn900424 + HRESULT ID2D1ImageSourceFromWic::TrimCache([In, Optional] const D2D_RECT_U* rectangleToPreserve) + ID2D1ImageSourceFromWic::TrimCache +
    + + +

    Retrieves the underlying bitmap image source from the Windows Imaging Component (WIC).

    +
    +

    On return contains the bitmap image source.

    + + dn900422 + void ID2D1ImageSourceFromWic::GetSource([Out, Optional] IWICBitmapSource** wicBitmapSource) + ID2D1ImageSourceFromWic::GetSource +
    + + + Initializes a new instance of the . + + + + +

    Represents a single continuous stroke of variable-width ink, as defined by a series of Bezier segments and widths.

    +
    + + dn900426 + ID2D1Ink + ID2D1Ink +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves or sets the starting point for this ink object.

    +
    + + dn900438 + GetStartPoint / SetStartPoint + GetStartPoint + D2D1_INK_POINT ID2D1Ink::GetStartPoint() +
    + + +

    Updates the last segment in this ink object with new control points.

    +
    + + dn900440 + SetSegmentAtEnd + SetSegmentAtEnd + HRESULT ID2D1Ink::SetSegmentAtEnd([In] const D2D1_INK_BEZIER_SEGMENT* segment) +
    + + +

    Returns the number of segments in this ink object.

    +
    + + dn900436 + GetSegmentCount + GetSegmentCount + unsigned int ID2D1Ink::GetSegmentCount() +
    + + +

    Sets the starting point for this ink object. This determines where this ink object will start rendering.

    +
    +

    The new starting point for this ink object.

    + + dn900445 + void ID2D1Ink::SetStartPoint([In] const D2D1_INK_POINT* startPoint) + ID2D1Ink::SetStartPoint +
    + + +

    Retrieves the starting point for this ink object.

    +
    +

    The starting point for this ink object.

    + + dn900438 + D2D1_INK_POINT ID2D1Ink::GetStartPoint() + ID2D1Ink::GetStartPoint +
    + + +

    Adds the given segments to the end of this ink object.

    +
    +

    A reference to an array of segments to be added to this ink object.

    +

    The number of segments to be added to this ink object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900434 + HRESULT ID2D1Ink::AddSegments([In, Buffer] const D2D1_INK_BEZIER_SEGMENT* segments,[In] unsigned int segmentsCount) + ID2D1Ink::AddSegments +
    + + +

    Removes the given number of segments from the end of this ink object.

    +
    +

    The number of segments to be removed from the end of this ink object. Note that segmentsCount must be less or equal to the number of segments in the ink object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900439 + HRESULT ID2D1Ink::RemoveSegmentsAtEnd([In] unsigned int segmentsCount) + ID2D1Ink::RemoveSegmentsAtEnd +
    + + +

    Updates the specified segments in this ink object with new control points.

    +
    +

    The index of the first segment in this ink object to update.

    +

    A reference to the array of segment data to be used in the update.

    +

    The number of segments in this ink object that will be updated with new data. Note that segmentsCount must be less than or equal to the number of segments in the ink object minus startSegment.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900443 + HRESULT ID2D1Ink::SetSegments([In] unsigned int startSegment,[In, Buffer] const D2D1_INK_BEZIER_SEGMENT* segments,[In] unsigned int segmentsCount) + ID2D1Ink::SetSegments +
    + + +

    Updates the last segment in this ink object with new control points.

    +
    +

    A reference to the segment data with which to overwrite this ink object's last segment. Note that if there are currently no segments in the ink object, SetSegmentsAtEnd will return an error.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900440 + HRESULT ID2D1Ink::SetSegmentAtEnd([In] const D2D1_INK_BEZIER_SEGMENT* segment) + ID2D1Ink::SetSegmentAtEnd +
    + + +

    Returns the number of segments in this ink object.

    +
    +

    Returns the number of segments in this ink object.

    + + dn900436 + unsigned int ID2D1Ink::GetSegmentCount() + ID2D1Ink::GetSegmentCount +
    + + +

    Retrieves the specified subset of segments stored in this ink object.

    +
    +

    The index of the first segment in this ink object to retrieve.

    +

    When this method returns, contains a reference to an array of retrieved segments.

    +

    The number of segments to retrieve. Note that segmentsCount must be less than or equal to the number of segments in the ink object minus startSegment.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900437 + HRESULT ID2D1Ink::GetSegments([In] unsigned int startSegment,[Out, Buffer] D2D1_INK_BEZIER_SEGMENT* segments,[In] unsigned int segmentsCount) + ID2D1Ink::GetSegments +
    + + +

    Retrieves a geometric representation of this ink object.

    +
    +

    The ink style to be used in determining the geometric representation.

    +

    The world transform to be used in determining the geometric representation.

    +

    The flattening tolerance to be used in determining the geometric representation.

    +

    The geometry sink to which the geometry representation will be streamed.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900449 + HRESULT ID2D1Ink::StreamAsGeometry([In, Optional] ID2D1InkStyle* inkStyle,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[In] ID2D1SimplifiedGeometrySink* geometrySink) + ID2D1Ink::StreamAsGeometry +
    + + +

    Retrieve the bounds of the geometry, with an optional applied transform.

    +
    +

    The ink style to be used in determining the bounds of this ink object.

    +

    The world transform to be used in determining the bounds of this ink object.

    +

    When this method returns, contains the bounds of this ink object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900435 + HRESULT ID2D1Ink::GetBounds([In, Optional] ID2D1InkStyle* inkStyle,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[Out] D2D_RECT_F* bounds) + ID2D1Ink::GetBounds +
    + + + Initializes a new instance of the . + + + + +

    Represents a collection of style properties to be used by methods like when rendering ink. The ink style defines the nib (pen tip) shape and transform.

    +
    + + dn900427 + ID2D1InkStyle + ID2D1InkStyle +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves or sets the transform to be applied to this style's nib shape.

    +
    + + dn900429 + GetNibTransform / SetNibTransform + GetNibTransform + void ID2D1InkStyle::GetNibTransform([Out] D2D_MATRIX_3X2_F* transform) +
    + + +

    Retrieves or sets the pre-transform nib shape for this style.

    +
    + + dn900428 + GetNibShape / SetNibShape + GetNibShape + D2D1_INK_NIB_SHAPE ID2D1InkStyle::GetNibShape() +
    + + +

    Sets the transform to apply to this style's nib shape.

    +
    +

    The transform to apply to this style?s nib shape. Note that the translation components of the transform matrix are ignored for the purposes of rendering.

    + + dn900431 + void ID2D1InkStyle::SetNibTransform([In] const D2D_MATRIX_3X2_F* transform) + ID2D1InkStyle::SetNibTransform +
    + + +

    Retrieves the transform to be applied to this style's nib shape.

    +
    +

    When this method returns, contains a reference to the transform to be applied to this style's nib shape.

    + + dn900429 + void ID2D1InkStyle::GetNibTransform([Out] D2D_MATRIX_3X2_F* transform) + ID2D1InkStyle::GetNibTransform +
    + + +

    Sets the pre-transform nib shape for this style.

    +
    +

    The pre-transform nib shape to use in this style.

    + + dn900430 + void ID2D1InkStyle::SetNibShape([In] D2D1_INK_NIB_SHAPE nibShape) + ID2D1InkStyle::SetNibShape +
    + + +

    Retrieves the pre-transform nib shape for this style.

    +
    +

    Returns the pre-transform nib shape for this style.

    + + dn900428 + D2D1_INK_NIB_SHAPE ID2D1InkStyle::GetNibShape() + ID2D1InkStyle::GetNibShape +
    + + + Initializes a new instance of the . + + + + + Initializes a new instance of the . + + + + +

    Represents the backing store required to render a layer.

    +
    + +

    To create a layer, call the CreateLayer method of the render target where the layer will be used. To draw to a layer, push the layer to the render target stack by calling the PushLayer method. After you have finished drawing to the layer, call the PopLayer method.

    Between PushLayer and PopLayer calls, the layer is in use and cannot be used by another render target.

    If the size of the layer is not specified, the corresponding PushLayer call determines the minimum layer size, based on the layer content bounds and the geometric mask. The layer resource can be larger than the size required by PushLayer without any rendering artifacts.

    If the size of a layer is specified, or if the layer has been used and the required backing store size as calculated during PushLayer is larger than the layer, then the layer resource is expanded on each axis monotonically to ensure that it is large enough. The layer resource never shrinks in size.

    +
    + + dd371483 + ID2D1Layer + ID2D1Layer +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the size of the layer in device-independent pixels.

    +
    + + dd371485 + GetSize + GetSize + D2D_SIZE_F ID2D1Layer::GetSize() +
    + + +

    Gets the size of the layer in device-independent pixels.

    +
    +

    The size of the layer in device-independent pixels.

    + + dd371485 + D2D_SIZE_F ID2D1Layer::GetSize() + ID2D1Layer::GetSize +
    + + + Creates a layer resource that can be used with this render target and its compatible render targets. The new layer has the specified initial size. The layer resource is allocated to the minimum size when {{PushLayer}} is called. + + + Regardless of whether a size is initially specified, the layer automatically resizes as needed. + + an instance of + HRESULT CreateLayer([In, Optional] const D2D1_SIZE_F* size,[Out] ID2D1Layer** layer) + + + + Creates a layer resource that can be used with this render target and its compatible render targets. The new layer has the specified initial size. + + + Regardless of whether a size is initially specified, the layer automatically resizes as needed. + + an instance of + If (0, 0) is specified, no backing store is created behind the layer resource. The layer resource is allocated to the minimum size when {{PushLayer}} is called. + HRESULT CreateLayer([In, Optional] const D2D1_SIZE_F* size,[Out] ID2D1Layer** layer) + + + +

    Paints an area with a linear gradient.

    +
    + +

    An paints an area with a linear gradient along a line between the brush start point and end point. The gradient, defined by the brush , is extruded perpendicular to this line, and then transformed by a brush transform (if specified).

    The start point and end point are described in the brush space and are mappped to the render target when the brush is used. Note the starting and ending coordinates are absolute, not relative to the render target size. A value of (0, 0) maps to the upper-left corner of the render target, while a value of (1, 1) maps one pixel diagonally away from (0, 0). If there is a nonidentity brush transform or render target transform, the brush start point and end point are also transformed.

    It is possible to specify a gradient axis that does not completely fill the area that is being painted. When this occurs, the , specified by the , determines how the remaining area is painted. +

    +
    + + dd371488 + ID2D1LinearGradientBrush + ID2D1LinearGradientBrush +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves or sets the starting coordinates of the linear gradient.

    +
    + +

    The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.

    +
    + + dd371497 + GetStartPoint / SetStartPoint + GetStartPoint + D2D_POINT_2F ID2D1LinearGradientBrush::GetStartPoint() +
    + + +

    Retrieves or sets the ending coordinates of the linear gradient.

    +
    + +

    The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.

    +
    + + dd371492 + GetEndPoint / SetEndPoint + GetEndPoint + D2D_POINT_2F ID2D1LinearGradientBrush::GetEndPoint() +
    + + +

    Retrieves the associated with this linear gradient brush.

    +
    + +

    contains an array of structures and information, such as the extend mode and the color interpolation mode.

    +
    + + dd371496 + GetGradientStopCollection + GetGradientStopCollection + void ID2D1LinearGradientBrush::GetGradientStopCollection([Out] ID2D1GradientStopCollection** gradientStopCollection) +
    + + +

    Sets the starting coordinates of the linear gradient in the brush's coordinate space.

    +
    +

    The starting two-dimensional coordinates of the linear gradient, in the brush's coordinate space.

    + +

    The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.

    +
    + + dd371505 + void ID2D1LinearGradientBrush::SetStartPoint([In] D2D_POINT_2F startPoint) + ID2D1LinearGradientBrush::SetStartPoint +
    + + +

    Sets the ending coordinates of the linear gradient in the brush's coordinate space.

    +
    +

    The ending two-dimensional coordinates of the linear gradient, in the brush's coordinate space.

    + +

    The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.

    +
    + + dd371501 + void ID2D1LinearGradientBrush::SetEndPoint([In] D2D_POINT_2F endPoint) + ID2D1LinearGradientBrush::SetEndPoint +
    + + +

    Retrieves the starting coordinates of the linear gradient.

    +
    +

    The starting two-dimensional coordinates of the linear gradient, in the brush's coordinate space.

    + +

    The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.

    +
    + + dd371497 + D2D_POINT_2F ID2D1LinearGradientBrush::GetStartPoint() + ID2D1LinearGradientBrush::GetStartPoint +
    + + +

    Retrieves the ending coordinates of the linear gradient.

    +
    +

    The ending two-dimensional coordinates of the linear gradient, in the brush's coordinate space.

    + +

    The start point and end point are described in the brush's space and are mapped to the render target when the brush is used. If there is a non-identity brush transform or render target transform, the brush's start point and end point are also transformed.

    +
    + + dd371492 + D2D_POINT_2F ID2D1LinearGradientBrush::GetEndPoint() + ID2D1LinearGradientBrush::GetEndPoint +
    + + +

    Retrieves the associated with this linear gradient brush.

    +
    + No documentation. + +

    contains an array of structures and information, such as the extend mode and the color interpolation mode.

    +
    + + dd371496 + void ID2D1LinearGradientBrush::GetGradientStopCollection([Out] ID2D1GradientStopCollection** gradientStopCollection) + ID2D1LinearGradientBrush::GetGradientStopCollection +
    + + + Creates an that contains the specified gradient stops and has the specified transform and base opacity. + + an instance of + The start and end points of the gradient. + A collection of structures that describe the colors in the brush's gradient and their locations along the gradient line. + HRESULT CreateLinearGradientBrush([In] const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES* linearGradientBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[In] ID2D1GradientStopCollection* gradientStopCollection,[Out] ID2D1LinearGradientBrush** linearGradientBrush) + + + + Creates an that contains the specified gradient stops and has the specified transform and base opacity. + + an instance of + The start and end points of the gradient. + The transform and base opacity of the new brush, or NULL. If this value is NULL, the brush defaults to a base opacity of 1.0f and the identity matrix as its transformation. + A collection of structures that describe the colors in the brush's gradient and their locations along the gradient line. + HRESULT CreateLinearGradientBrush([In] const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES* linearGradientBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[In] ID2D1GradientStopCollection* gradientStopCollection,[Out] ID2D1LinearGradientBrush** linearGradientBrush) + + + +

    A container for 3D lookup table data that can be passed to the LookupTable3D effect.

    An ID2DLookupTable3D instance is created using or .

    +
    + + dn900453 + ID2D1LookupTable3D + ID2D1LookupTable3D +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Initializes a new instance of the . + + + + +

    Represents a set of vertices that form a list of triangles.

    +
    + + dd371508 + ID2D1Mesh + ID2D1Mesh +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Opens the mesh for population.

    +
    +

    When this method returns, contains a reference to a reference to an that is used to populate the mesh. This parameter is passed uninitialized.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371510 + HRESULT ID2D1Mesh::Open([Out] ID2D1TessellationSink** tessellationSink) + ID2D1Mesh::Open +
    + + + Create a mesh that uses triangles to describe a shape. + + + To populate a mesh, use its {{Open}} method to obtain an . To draw the mesh, use the render target's {{FillMesh}} method. + + an instance of + HRESULT CreateMesh([Out] ID2D1Mesh** mesh) + + + + Create a mesh that uses triangles to describe a shape and populates it with triangles. + + an instance of + An array of structures that describe the triangles to add to this mesh. + HRESULT CreateMesh([Out] ID2D1Mesh** mesh) + + + + Opens the mesh for population. + + When this method returns, contains a pointer to a pointer to an that is used to populate the mesh. This parameter is passed uninitialized. + HRESULT Open([Out] ID2D1TessellationSink** tessellationSink) + + + +

    A locking mechanism from a Direct2D factory that Direct2D uses to control exclusive resource access in an app that is uses multiple threads.

    +
    + +

    You can get an object by querying for it from an object.

    You should use this lock while doing any operation on a Direct3D/DXGI surface. Direct2D will wait on any call until you leave the critical section.

    Note?? Normal rendering is guarded automatically by an internal Direct2D lock.? +
    + + hh997713 + ID2D1Multithread + ID2D1Multithread +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns whether the Direct2D factory was created with the flag.

    +
    + + hh997715 + GetMultithreadProtected + GetMultithreadProtected + BOOL ID2D1Multithread::GetMultithreadProtected() +
    + + +

    Returns whether the Direct2D factory was created with the flag.

    +
    +

    Returns true if the Direct2D factory was created as multi-threaded, or false if it was created as single-threaded.

    + + hh997715 + BOOL ID2D1Multithread::GetMultithreadProtected() + ID2D1Multithread::GetMultithreadProtected +
    + + +

    Enters the Direct2D API critical section, if it exists.

    +
    + + hh997714 + void ID2D1Multithread::Enter() + ID2D1Multithread::Enter +
    + + +

    Leaves the Direct2D API critical section, if it exists.

    +
    + + hh997716 + void ID2D1Multithread::Leave() + ID2D1Multithread::Leave +
    + + +

    Instructs the effect-rendering system to offset an input bitmap without inserting a rendering pass.

    +
    + +

    Because a rendering pass is not required, the interface derives from a transform node. This allows it to be inserted into a graph but does not allow an output buffer to be specified.

    +
    + + hh446820 + ID2D1OffsetTransform + ID2D1OffsetTransform +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the offset in the current offset transform.

    +
    +

    The new offset to apply to the offset transform.

    + + hh446824 + void ID2D1OffsetTransform::SetOffset([In] POINT offset) + ID2D1OffsetTransform::SetOffset +
    + + +

    Gets the offset currently in the offset transform.

    +
    +

    The current transform offset.

    + + hh446822 + POINT ID2D1OffsetTransform::GetOffset() + ID2D1OffsetTransform::GetOffset +
    + + + Initializes a new instance of class + + The effect context + The offset transformation + HRESULT ID2D1EffectContext::CreateOffsetTransform([In] POINT offset,[Out, Fast] ID2D1OffsetTransform** transform) + + + +

    Represents a complex shape that may be composed of arcs, curves, and lines.

    +
    + +

    An object enables you to describe a geometric path. To describe an object's path, use the object's Open method to retrieve an . Use the sink to populate the path geometry with figures and segments.

    +
    + + dd371512 + ID2D1PathGeometry + ID2D1PathGeometry +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the number of segments in the path geometry.

    +
    + + dd371520 + GetSegmentCount + GetSegmentCount + HRESULT ID2D1PathGeometry::GetSegmentCount([Out] unsigned int* count) +
    + + +

    Retrieves the number of figures in the path geometry.

    +
    + + dd371515 + GetFigureCount + GetFigureCount + HRESULT ID2D1PathGeometry::GetFigureCount([Out] unsigned int* count) +
    + + +

    Retrieves the geometry sink that is used to populate the path geometry with figures and segments.

    +
    +

    When this method returns, geometrySink contains the address of a reference to the geometry sink that is used to populate the path geometry with figures and segments. This parameter is passed uninitialized.

    + +

    Because path geometries are immutable and can only be populated once, it is an error to call Open on a path geometry more than once.

    Note that the fill mode defaults to . To set the fill mode, call SetFillMode before the first call to BeginFigure. Failure to do so will put the geometry sink in an error state.

    +
    + + dd371522 + HRESULT ID2D1PathGeometry::Open([Out] ID2D1GeometrySink** geometrySink) + ID2D1PathGeometry::Open +
    + + +

    Copies the contents of the path geometry to the specified .

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371525 + HRESULT ID2D1PathGeometry::Stream([In] ID2D1GeometrySink* geometrySink) + ID2D1PathGeometry::Stream +
    + + +

    Retrieves the number of segments in the path geometry.

    +
    +

    A reference that receives the number of segments in the path geometry when this method returns. You must allocate storage for this parameter.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371520 + HRESULT ID2D1PathGeometry::GetSegmentCount([Out] unsigned int* count) + ID2D1PathGeometry::GetSegmentCount +
    + + +

    Retrieves the number of figures in the path geometry.

    +
    +

    A reference that receives the number of figures in the path geometry when this method returns. You must allocate storage for this parameter.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371515 + HRESULT ID2D1PathGeometry::GetFigureCount([Out] unsigned int* count) + ID2D1PathGeometry::GetFigureCount +
    + + + Creates an empty . + + an instance of + + + + Copies the contents of the path geometry to the specified . + + The sink to which the path geometry's contents are copied. Modifying this sink does not change the contents of this path geometry. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Stream([In] ID2D1GeometrySink* geometrySink) + + + +

    The interface adds functionality to . In particular, it provides the path geometry-specific ComputePointAndSegmentAtLength method.

    +
    + +

    This interface adds functionality to .

    +
    + + hh446826 + ID2D1PathGeometry1 + ID2D1PathGeometry1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Computes the point that exists at a given distance along the path geometry along with the index of the segment the point is on and the directional vector at that point.

    +
    +

    The distance to walk along the path.

    +

    The index of the segment at which to begin walking. Note: This index is global to the entire path, not just a particular figure.

    +

    The transform to apply to the path prior to walking.

    +

    The flattening tolerance to use when walking along an arc or Bezier segment. The flattening tolerance is the maximum error allowed when constructing a polygonal approximation of the geometry. No point in the polygonal representation will diverge from the original geometry by more than the flattening tolerance. Smaller values produce more accurate results but cause slower execution.

    +

    When this method returns, contains a description of the point that can be found at the given location.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGOne of the inputs was in an invalid range.

    ?

    + + dn900454 + HRESULT ID2D1PathGeometry1::ComputePointAndSegmentAtLength([In] float length,[In] unsigned int startSegment,[In, Optional] const D2D_MATRIX_3X2_F* worldTransform,[In] float flatteningTolerance,[Out] D2D1_POINT_DESCRIPTION* pointDescription) + ID2D1PathGeometry1::ComputePointAndSegmentAtLength +
    + + + Initializes a new instance of the class. + + The factory. + HRESULT ID2D1Factory1::CreatePathGeometry([Out, Fast] ID2D1PathGeometry1** pathGeometry) + + + +

    Converts Direct2D primitives stored in an into a fixed page representation. The print sub-system then consumes the primitives.

    +
    + + hh847997 + ID2D1PrintControl + ID2D1PrintControl +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Converts Direct2D primitives in the passed-in command list into a fixed page representation for use by the print subsystem.

    +
    +

    The command list that contains the rendering operations.

    +

    The size of the page to add.

    +

    The print ticket stream.

    +

    Contains the first label for subsequent drawing operations. This parameter is passed uninitialized. If null is specified, no value is retrieved for this parameter.

    +

    Contains the second label for subsequent drawing operations. This parameter is passed uninitialized. If null is specified, no value is retrieved for this parameter.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.
    The print job is already finished.

    ?

    + + hh847998 + HRESULT ID2D1PrintControl::AddPage([In] ID2D1CommandList* commandList,[In] D2D_SIZE_F pageSize,[In, Optional] IStream* pagePrintTicketStream,[Out, Optional] unsigned longlong* tag1,[Out, Optional] unsigned longlong* tag2) + ID2D1PrintControl::AddPage +
    + + +

    Passes all remaining resources to the print sub-system, then clean up and close the current print job.

    +
    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.
    The print job is already finished.

    ?

    + + hh848001 + HRESULT ID2D1PrintControl::Close() + ID2D1PrintControl::Close +
    + + + Initializes a new instance of the class. + + The device. + The WIC factory. + The document target. + HRESULT ID2D1Device::CreatePrintControl([In] IWICImagingFactory* wicFactory,[In] IPrintDocumentPackageTarget* documentTarget,[In, Optional] const D2D1_PRINT_CONTROL_PROPERTIES* printControlProperties,[Out] ID2D1PrintControl** printControl) + + + HRESULT ID2D1Device::CreatePrintControl([In] IWICImagingFactory* wicFactory,[In] IPrintDocumentPackageTarget* documentTarget,[In, Optional] const D2D1_PRINT_CONTROL_PROPERTIES* printControlProperties,[Out] ID2D1PrintControl** printControl) + + + +

    [This documentation is preliminary and is subject to change.]

    Applies to: desktop apps | Metro style apps

    TBD

    +
    + No documentation. + No documentation. + No documentation. + hh847997 + HRESULT ID2D1PrintControl::AddPage([In] ID2D1CommandList* commandList,[In] D2D_SIZE_F pageSize,[In, Optional] IStream* pagePrintTicketStream,[Out, Optional] unsigned longlong* tag1,[Out, Optional] unsigned longlong* tag2) + ID2D1PrintControl::AddPage +
    + + +

    [This documentation is preliminary and is subject to change.]

    Applies to: desktop apps | Metro style apps

    TBD

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + hh847997 + HRESULT ID2D1PrintControl::AddPage([In] ID2D1CommandList* commandList,[In] D2D_SIZE_F pageSize,[In, Optional] IStream* pagePrintTicketStream,[Out, Optional] unsigned longlong* tag1,[Out, Optional] unsigned longlong* tag2) + ID2D1PrintControl::AddPage +
    + + +

    Represents a set of run-time bindable and discoverable properties that allow a data-driven application to modify the state of a Direct2D effect.

    +
    + +

    This interface supports access through either indices or property names. In addition to top-level properties, each property in an object may contain an object, which stores metadata describing the parent property.

    +
    + + hh446854 + ID2D1Properties + ID2D1Properties +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the number of top-level properties.

    +
    + +

    This method returns the number of custom properties on the interface. System properties and sub-properties are part of a closed set, and are enumerable by iterating over this closed set.

    +
    + + hh446857 + GetPropertyCount + GetPropertyCount + unsigned int ID2D1Properties::GetPropertyCount() +
    + + +

    Gets the number of top-level properties.

    +
    +

    This method returns the number of custom (non-system) properties that can be accessed by the object.

    + +

    This method returns the number of custom properties on the interface. System properties and sub-properties are part of a closed set, and are enumerable by iterating over this closed set.

    +
    + + hh446857 + unsigned int ID2D1Properties::GetPropertyCount() + ID2D1Properties::GetPropertyCount +
    + + + Gets the property name that corresponds to the given index. + + No documentation. + No documentation. + No documentation. + No documentation. + + jj151735 + HRESULT ID2D1Properties::GetPropertyName([In] unsigned int index,[Out, Buffer] wchar_t* name,[In] unsigned int nameCount) + ID2D1Properties::GetPropertyName + + + +

    Gets the number of characters for the given property name. This is a template overload. See Remarks.

    +
    +

    The index of the property name to retrieve.

    +

    This method returns the size in characters of the name corresponding to the given property index, or zero if the property index does not exist.

    + +

    The value returned by this method can be used to ensure that the buffer size for GetPropertyName is appropriate.

    template<typename U> UINT32 GetPropertyNameLength( U index ) CONST; +
    + + jj151733 + unsigned int ID2D1Properties::GetPropertyNameLength([In] unsigned int index) + ID2D1Properties::GetPropertyNameLength +
    + + +

    Gets the of the selected property.

    +
    + No documentation. +

    This method returns a -typed value for the type of the selected property.

    + +

    If the property does not exist, the method returns .

    +
    + + hh446873 + D2D1_PROPERTY_TYPE ID2D1Properties::GetType([In] unsigned int index) + ID2D1Properties::GetType +
    + + +

    Gets the index corresponding to the given property name.

    +
    +

    The name of the property to retrieve.

    +

    The index of the corresponding property name.

    + +

    If the property does not exist, this method returns D2D1_INVALID_PROPERTY_INDEX. This reserved value will never map to a valid index and will cause null or sentinel values to be returned from other parts of the property interface.

    +
    + + hh446861 + unsigned int ID2D1Properties::GetPropertyIndex([In] const wchar_t* name) + ID2D1Properties::GetPropertyIndex +
    + + + Sets the named property to the given value. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + hh997717 + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + ID2D1Properties::SetValueByName + + + +

    Sets the corresponding property by index. This is a template overload. See Remarks.

    +
    +

    The index of the property to set.

    +

    The data to set.

    + No documentation. + No documentation. +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    The specified property does not exist.
    E_OUTOFMEMORYFailed to allocate necessary memory.
    D3DERR_OUT_OF_VIDEO_MEMORYFailed to allocate required video memory.
    E_INVALIDARGOne or more arguments are invalid.
    E_FAILUnspecified failure.

    ?

    + +

    template<typename T, typename U> SetValue( U index, _In_ const T &value ); +
    + + jj151751 + HRESULT ID2D1Properties::SetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + ID2D1Properties::SetValue +
    + + +

    Gets the property value by name. This is a template overload. See Remarks.

    +
    +

    The property name to get.

    + No documentation. + No documentation. + No documentation. +

    Returns the value requested.

    + +

    If propertyName does not exist, no information is retrieved.

    Any error not in the standard set returned by a property implementation will be mapped into the standard error range.

    template<typename T> T GetValueByName( _In_ PCWSTR propertyName ) const; +
    + + jj151746 + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + ID2D1Properties::GetValueByName +
    + + +

    Gets the value of the property by index. This is a template overload. See Remarks.

    +
    +

    The index of the property from which the value is to be obtained.

    + No documentation. + No documentation. + No documentation. +

    Returns the value requested.

    + +

    template<typename T, typename U> T GetValue( U index ) const; +
    + + jj151743 + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + ID2D1Properties::GetValue +
    + + +

    Gets the size of the property value in bytes, using the property index. This is a template overload. See Remarks.

    +
    +

    The index of the property.

    +

    This method returns size of the value in bytes, using the property index

    + +

    This method returns zero if index does not exist.

    template<typename U> UINT32 GetValueSize( U index ) CONST; +
    + + jj151748 + unsigned int ID2D1Properties::GetValueSize([In] unsigned int index) + ID2D1Properties::GetValueSize +
    + + +

    Gets the sub-properties of the provided property by index. This is a template overload. See Remarks.

    +
    +

    The index of the sub-properties to be retrieved.

    +

    When this method returns, contains the address of a reference to the sub-properties.

    + +

    If there are no sub-properties, subProperties will be null, and will be returned.

    template<typename U> GetSubProperties( U index, _Outptr_opt_ **subProperties ) CONST; +
    + + jj151736 + HRESULT ID2D1Properties::GetSubProperties([In] unsigned int index,[Out, Optional] ID2D1Properties** subProperties) + ID2D1Properties::GetSubProperties +
    + + + Gets or sets Cached property. + + + + + Gets the number of characters for the given property name. + + The index of the property for which the name is being returned. + The name of the property + + This method returns an empty string if index is invalid. + + HRESULT ID2D1Properties::GetPropertyName([In] unsigned int index,[Out, Buffer] wchar_t* name,[In] unsigned int nameCount) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by index. + + The index of the property from which the data is to be obtained. + The value of the specified property by index. + HRESULT ID2D1Properties::GetValue([In] unsigned int index,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Gets the value of the specified property by name. + + The name of the property. + Specifies the type of property to get. + The value of the specified property by name. + HRESULT ID2D1Properties::GetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[Out, Buffer] void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Name of the property + Specifies the type of property to set. + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValueByName([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + + Sets the named property to the given value. + + Index of the property + Specifies the type of property to set. + Value of the property + HRESULT ID2D1Properties::SetValue([In] const wchar_t* name,[In] D2D1_PROPERTY_TYPE type,[In, Buffer] const void* data,[In] unsigned int dataSize) + + + +

    Paints an area with a radial gradient.

    +
    + +

    The is similar to the in that they both map a collection of gradient stops to a gradient. However, the linear gradient has a start and an end point to define the gradient vector, while the radial gradient uses an ellipse and a gradient origin to define its gradient behavior. To define the position and size of the ellipse, use the SetCenter, SetRadiusX, and SetRadiusY methods to specify the center, x-radius, and y-radius of the ellipse. The gradient origin is the center of the ellipse, unless a gradient offset is specified by using the SetGradientOriginOffset method.

    The brush maps the gradient stop position 0.0f of the gradient origin, and the position 1.0f is mapped to the ellipse boundary. When the gradient origin is within the ellipse, the contents of the ellipse enclose the entire [0, 1] range of the brush gradient stops. If the gradient origin is outside the bounds of the ellipse, the brush still works, but its gradient is not well-defined.

    The start point and end point are described in the brush space and are mappped to the render target when the brush is used. Note the starting and ending coordinates are absolute, not relative to the render target size. A value of (0, 0) maps to the upper-left corner of the render target, while a value of (1, 1) maps just one pixel diagonally away from (0, 0). If there is a nonidentity brush transform or render target transform, the brush ellipse and gradient origin are also transformed.

    It is possible to specify an ellipse that does not completely fill area being painted. When this occurs, the and setting (specified by the brush ) determines how the remaining area is painted. +

    +
    + + dd371529 + ID2D1RadialGradientBrush + ID2D1RadialGradientBrush +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves or sets the center of the gradient ellipse.

    +
    + + dd371532 + GetCenter / SetCenter + GetCenter + D2D_POINT_2F ID2D1RadialGradientBrush::GetCenter() +
    + + +

    Retrieves or sets the offset of the gradient origin relative to the gradient ellipse's center.

    +
    + + dd371535 + GetGradientOriginOffset / SetGradientOriginOffset + GetGradientOriginOffset + D2D_POINT_2F ID2D1RadialGradientBrush::GetGradientOriginOffset() +
    + + +

    Retrieves or sets the x-radius of the gradient ellipse.

    +
    + + dd371542 + GetRadiusX / SetRadiusX + GetRadiusX + float ID2D1RadialGradientBrush::GetRadiusX() +
    + + +

    Retrieves or sets the y-radius of the gradient ellipse.

    +
    + + dd371544 + GetRadiusY / SetRadiusY + GetRadiusY + float ID2D1RadialGradientBrush::GetRadiusY() +
    + + +

    Retrieves the associated with this radial gradient brush object.

    +
    + +

    contains an array of structures and additional information, such as the extend mode and the color interpolation mode.

    +
    + + dd371539 + GetGradientStopCollection + GetGradientStopCollection + void ID2D1RadialGradientBrush::GetGradientStopCollection([Out] ID2D1GradientStopCollection** gradientStopCollection) +
    + + +

    Specifies the center of the gradient ellipse in the brush's coordinate space.

    +
    +

    The center of the gradient ellipse, in the brush's coordinate space.

    + + dd371547 + void ID2D1RadialGradientBrush::SetCenter([In] D2D_POINT_2F center) + ID2D1RadialGradientBrush::SetCenter +
    + + +

    Specifies the offset of the gradient origin relative to the gradient ellipse's center.

    +
    +

    The offset of the gradient origin from the center of the gradient ellipse.

    + + dd371550 + void ID2D1RadialGradientBrush::SetGradientOriginOffset([In] D2D_POINT_2F gradientOriginOffset) + ID2D1RadialGradientBrush::SetGradientOriginOffset +
    + + +

    Specifies the x-radius of the gradient ellipse, in the brush's coordinate space.

    +
    +

    The x-radius of the gradient ellipse. This value is in the brush's coordinate space.

    + + dd371553 + void ID2D1RadialGradientBrush::SetRadiusX([In] float radiusX) + ID2D1RadialGradientBrush::SetRadiusX +
    + + +

    Specifies the y-radius of the gradient ellipse, in the brush's coordinate space.

    +
    +

    The y-radius of the gradient ellipse. This value is in the brush's coordinate space.

    + + dd371557 + void ID2D1RadialGradientBrush::SetRadiusY([In] float radiusY) + ID2D1RadialGradientBrush::SetRadiusY +
    + + +

    Retrieves the center of the gradient ellipse.

    +
    +

    The center of the gradient ellipse. This value is expressed in the brush's coordinate space.

    + + dd371532 + D2D_POINT_2F ID2D1RadialGradientBrush::GetCenter() + ID2D1RadialGradientBrush::GetCenter +
    + + +

    Retrieves the offset of the gradient origin relative to the gradient ellipse's center.

    +
    +

    The offset of the gradient origin from the center of the gradient ellipse. This value is expressed in the brush's coordinate space.

    + + dd371535 + D2D_POINT_2F ID2D1RadialGradientBrush::GetGradientOriginOffset() + ID2D1RadialGradientBrush::GetGradientOriginOffset +
    + + +

    Retrieves the x-radius of the gradient ellipse.

    +
    +

    The x-radius of the gradient ellipse. This value is expressed in the brush's coordinate space.

    + + dd371542 + float ID2D1RadialGradientBrush::GetRadiusX() + ID2D1RadialGradientBrush::GetRadiusX +
    + + +

    Retrieves the y-radius of the gradient ellipse.

    +
    +

    The y-radius of the gradient ellipse. This value is expressed in the brush's coordinate space.

    + + dd371544 + float ID2D1RadialGradientBrush::GetRadiusY() + ID2D1RadialGradientBrush::GetRadiusY +
    + + +

    Retrieves the associated with this radial gradient brush object.

    +
    + No documentation. + +

    contains an array of structures and additional information, such as the extend mode and the color interpolation mode.

    +
    + + dd371539 + void ID2D1RadialGradientBrush::GetGradientStopCollection([Out] ID2D1GradientStopCollection** gradientStopCollection) + ID2D1RadialGradientBrush::GetGradientStopCollection +
    + + + Creates an that contains the specified gradient stops and has the specified transform and base opacity. + + an instance of + The center, gradient origin offset, and x-radius and y-radius of the brush's gradient. + A collection of structures that describe the colors in the brush's gradient and their locations along the gradient. + HRESULT CreateRadialGradientBrush([In] const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES* radialGradientBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[In] ID2D1GradientStopCollection* gradientStopCollection,[Out] ID2D1RadialGradientBrush** radialGradientBrush) + + + + Creates an that contains the specified gradient stops and has the specified transform and base opacity. + + an instance of + The center, gradient origin offset, and x-radius and y-radius of the brush's gradient. + A collection of structures that describe the colors in the brush's gradient and their locations along the gradient. + HRESULT CreateRadialGradientBrush([In] const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES* radialGradientBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[In] ID2D1GradientStopCollection* gradientStopCollection,[Out] ID2D1RadialGradientBrush** radialGradientBrush) + + + + Creates an that contains the specified gradient stops and has the specified transform and base opacity. + + an instance of + The center, gradient origin offset, and x-radius and y-radius of the brush's gradient. + The transform and base opacity of the new brush, or NULL. If this value is NULL, the brush defaults to a base opacity of 1.0f and the identity matrix as its transformation. + A collection of structures that describe the colors in the brush's gradient and their locations along the gradient. + HRESULT CreateRadialGradientBrush([In] const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES* radialGradientBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[In] ID2D1GradientStopCollection* gradientStopCollection,[Out] ID2D1RadialGradientBrush** radialGradientBrush) + + + + Creates an that contains the specified gradient stops and has the specified transform and base opacity. + + an instance of + The center, gradient origin offset, and x-radius and y-radius of the brush's gradient. + The transform and base opacity of the new brush, or NULL. If this value is NULL, the brush defaults to a base opacity of 1.0f and the identity matrix as its transformation. + A collection of structures that describe the colors in the brush's gradient and their locations along the gradient. + HRESULT CreateRadialGradientBrush([In] const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES* radialGradientBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[In] ID2D1GradientStopCollection* gradientStopCollection,[Out] ID2D1RadialGradientBrush** radialGradientBrush) + + + +

    Describes a two-dimensional rectangle.

    +
    + + dd371561 + ID2D1RectangleGeometry + ID2D1RectangleGeometry +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the rectangle that describes the rectangle geometry's dimensions.

    +
    + + dd371762 + GetRect + GetRect + void ID2D1RectangleGeometry::GetRect([Out] D2D_RECT_F* rect) +
    + + +

    Retrieves the rectangle that describes the rectangle geometry's dimensions.

    +
    +

    Contains a reference to a rectangle that describes the rectangle geometry's dimensions when this method returns. You must allocate storage for this parameter.

    + + dd371762 + void ID2D1RectangleGeometry::GetRect([Out] D2D_RECT_F* rect) + ID2D1RectangleGeometry::GetRect +
    + + + Creates an . + + an instance of + The coordinates of the rectangle geometry. + + + +

    Describes the render information common to all of the various transform implementations.

    +
    + +

    This interface is used by a transform implementation to first describe and then indicate changes to the rendering pass that corresponds to the transform.

    +
    + + hh446890 + ID2D1RenderInfo + ID2D1RenderInfo +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Specifies that the output of the transform in which the render information is encapsulated is or is not cached.

    +
    + + hh446891 + SetCached + SetCached + void ID2D1RenderInfo::SetCached([In] BOOL isCached) +
    + + +

    Provides an estimated hint of shader execution cost to D2D.

    +
    + +

    The instruction count may be set according to the number of instructions in the shader. This information is used as a hint when rendering extremely large images. Calling this API is optional, but it may improve performance if you provide an accurate number.

    Note??Instructions that occur in a loop should be counted according to the number of loop iterations.? +
    + + hh871466 + SetInstructionCountHint + SetInstructionCountHint + void ID2D1RenderInfo::SetInstructionCountHint([In] unsigned int instructionCount) +
    + + +

    Sets how a specific input to the transform should be handled by the renderer in terms of sampling.

    +
    +

    The index of the input that will have the input description applied.

    +

    The description of the input to be applied to the transform.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    The input description must be matched correctly by the effect shader code.

    +
    + + hh446892 + HRESULT ID2D1RenderInfo::SetInputDescription([In] unsigned int inputIndex,[In] D2D1_INPUT_DESCRIPTION inputDescription) + ID2D1RenderInfo::SetInputDescription +
    + + +

    Allows a caller to control the output precision and channel-depth of the transform in which the render information is encapsulated.

    +
    +

    The type of buffer that should be used as an output from this transform.

    +

    The number of channels that will be used on the output buffer.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    If the output precision of the transform is not specified, then it will default to the precision specified on the Direct2D device context. The maximum of 16bpc UNORM and 16bpc FLOAT is 32bpc FLOAT.

    The output channel depth will match the maximum of the input channel depths if the channel depth is .

    There is no global output channel depth, this is always left to the control of the transforms.

    +
    + + hh446893 + HRESULT ID2D1RenderInfo::SetOutputBuffer([In] D2D1_BUFFER_PRECISION bufferPrecision,[In] D2D1_CHANNEL_DEPTH channelDepth) + ID2D1RenderInfo::SetOutputBuffer +
    + + +

    Specifies that the output of the transform in which the render information is encapsulated is or is not cached.

    +
    +

    TRUE if the output of the transform is cached; otherwise, .

    + + hh446891 + void ID2D1RenderInfo::SetCached([In] BOOL isCached) + ID2D1RenderInfo::SetCached +
    + + +

    Provides an estimated hint of shader execution cost to D2D.

    +
    +

    An approximate instruction count of the associated shader.

    + +

    The instruction count may be set according to the number of instructions in the shader. This information is used as a hint when rendering extremely large images. Calling this API is optional, but it may improve performance if you provide an accurate number.

    Note??Instructions that occur in a loop should be counted according to the number of loop iterations.? +
    + + hh871466 + void ID2D1RenderInfo::SetInstructionCountHint([In] unsigned int instructionCount) + ID2D1RenderInfo::SetInstructionCountHint +
    + + +

    Represents an object that can receive drawing commands. Interfaces that inherit from render the drawing commands they receive in different ways.

    +
    + +

    Your application should create render targets once and hold onto them for the life of the application or until the render target's EndDraw method returns the error. When you receive this error, you need to recreate the render target (and any resources it created).

    +
    + + dd371766 + ID2D1RenderTarget + ID2D1RenderTarget +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the current transform of the render target.

    +
    + + dd316845 + GetTransform / SetTransform + GetTransform + void ID2D1RenderTarget::GetTransform([Out] D2D_MATRIX_3X2_F* transform) +
    + + +

    Retrieves or sets the current antialiasing mode for nontext drawing operations.

    +
    + + dd316805 + GetAntialiasMode / SetAntialiasMode + GetAntialiasMode + D2D1_ANTIALIAS_MODE ID2D1RenderTarget::GetAntialiasMode() +
    + + +

    Gets or sets the current antialiasing mode for text and glyph drawing operations.

    +
    + + dd316835 + GetTextAntialiasMode / SetTextAntialiasMode + GetTextAntialiasMode + D2D1_TEXT_ANTIALIAS_MODE ID2D1RenderTarget::GetTextAntialiasMode() +
    + + +

    Retrieves or sets the render target's current text rendering options.

    +
    + +

    If the settings specified by textRenderingParams are incompatible with the render target's text antialiasing mode (specified by SetTextAntialiasMode), subsequent text and glyph drawing operations will fail and put the render target into an error state.

    +
    + + dd316841 + GetTextRenderingParams / SetTextRenderingParams + GetTextRenderingParams + void ID2D1RenderTarget::GetTextRenderingParams([Out, Optional] IDWriteRenderingParams** textRenderingParams) +
    + + +

    Retrieves the pixel format and alpha mode of the render target.

    +
    + + dd316814 + GetPixelFormat + GetPixelFormat + D2D1_PIXEL_FORMAT ID2D1RenderTarget::GetPixelFormat() +
    + + +

    Returns the size of the render target in device-independent pixels.

    +
    + + dd316823 + GetSize + GetSize + D2D_SIZE_F ID2D1RenderTarget::GetSize() +
    + + +

    Returns the size of the render target in device pixels.

    +
    + + dd316820 + GetPixelSize + GetPixelSize + D2D_SIZE_U ID2D1RenderTarget::GetPixelSize() +
    + + +

    Gets the maximum size, in device-dependent units (pixels), of any one bitmap dimension supported by the render target.

    +
    + +

    This method returns the maximum texture size of the Direct3D device.

    Note??The software renderer and WARP devices return the value of 16 megapixels (16*1024*1024). You can create a Direct2D texture that is this size, but not a Direct3D texture that is this size.? +
    + + dd742853 + GetMaximumBitmapSize + GetMaximumBitmapSize + unsigned int ID2D1RenderTarget::GetMaximumBitmapSize() +
    + + +

    Creates a Direct2D bitmap from a reference to in-memory source data.

    +
    +

    The dimension of the bitmap to create in pixels.

    +

    A reference to the memory location of the image data, or null to create an uninitialized bitmap.

    +

    The byte count of each scanline, which is equal to (the image width in pixels ? the number of bytes per pixel) + memory padding. If srcData is null, this value is ignored. (Note that pitch is also sometimes called stride.)

    +

    The pixel format and dots per inch (DPI) of the bitmap to create.

    +

    When this method returns, contains a reference to a reference to the new bitmap. This parameter is passed uninitialized.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371800 + HRESULT ID2D1RenderTarget::CreateBitmap([In] D2D_SIZE_U size,[In, Optional] const void* srcData,[In] unsigned int pitch,[In] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateBitmap +
    + + +

    Creates an by copying the specified Microsoft Windows Imaging Component (WIC) bitmap.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Before Direct2D can load a WIC bitmap, that bitmap must be converted to a supported pixel format and alpha mode. For a list of supported pixel formats and alpha modes, see Supported Pixel Formats and Alpha Modes.

    +
    + + dd371797 + HRESULT ID2D1RenderTarget::CreateBitmapFromWicBitmap([In] IWICBitmapSource* wicBitmapSource,[In, Optional] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateBitmapFromWicBitmap +
    + + +

    Creates an whose data is shared with another resource.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The CreateSharedBitmap method is useful for efficiently reusing bitmap data and can also be used to provide interoperability with Direct3D.

    +
    + + dd371865 + HRESULT ID2D1RenderTarget::CreateSharedBitmap([In] const GUID& riid,[In] void* data,[In, Optional] const D2D1_BITMAP_PROPERTIES* bitmapProperties,[Out, Fast] ID2D1Bitmap** bitmap) + ID2D1RenderTarget::CreateSharedBitmap +
    + + +

    Creates an from the specified bitmap.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371788 + HRESULT ID2D1RenderTarget::CreateBitmapBrush([In, Optional] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_BITMAP_BRUSH_PROPERTIES* bitmapBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1BitmapBrush** bitmapBrush) + ID2D1RenderTarget::CreateBitmapBrush +
    + + +

    Creates a new that has the specified color and a base opacity of 1.0f.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371871 + HRESULT ID2D1RenderTarget::CreateSolidColorBrush([In] const D2D_COLOR_F* color,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[Out, Fast] ID2D1SolidColorBrush** solidColorBrush) + ID2D1RenderTarget::CreateSolidColorBrush +
    + + +

    Creates an from the specified gradient stops that uses the color interpolation gamma and the clamp extend mode.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371832 + HRESULT ID2D1RenderTarget::CreateGradientStopCollection([In, Buffer] const D2D1_GRADIENT_STOP* gradientStops,[In] unsigned int gradientStopsCount,[In] D2D1_GAMMA colorInterpolationGamma,[In] D2D1_EXTEND_MODE extendMode,[Out, Fast] ID2D1GradientStopCollection** gradientStopCollection) + ID2D1RenderTarget::CreateGradientStopCollection +
    + + +

    Creates an that contains the specified gradient stops, has no transform, and has a base opacity of 1.0.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371845 + HRESULT ID2D1RenderTarget::CreateLinearGradientBrush([In] const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES* linearGradientBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[In] ID2D1GradientStopCollection* gradientStopCollection,[Out, Fast] ID2D1LinearGradientBrush** linearGradientBrush) + ID2D1RenderTarget::CreateLinearGradientBrush +
    + + +

    Creates an that contains the specified gradient stops, has no transform, and has a base opacity of 1.0.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371859 + HRESULT ID2D1RenderTarget::CreateRadialGradientBrush([In] const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES* radialGradientBrushProperties,[In, Optional] const D2D1_BRUSH_PROPERTIES* brushProperties,[In] ID2D1GradientStopCollection* gradientStopCollection,[Out, Fast] ID2D1RadialGradientBrush** radialGradientBrush) + ID2D1RenderTarget::CreateRadialGradientBrush +
    + + +

    Creates a new bitmap render target for use during intermediate offscreen drawing that is compatible with the current render target and has the same size, DPI, and pixel format (but not alpha mode) as the current render target.

    +
    +

    When this method returns, contains a reference to a reference to a new bitmap render target. This parameter is passed uninitialized.

    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The bitmap render target created by this method is not compatible with GDI and has an alpha mode of .

    +
    + + dd371825 + HRESULT ID2D1RenderTarget::CreateCompatibleRenderTarget([In, Optional] const D2D_SIZE_F* desiredSize,[In, Optional] const D2D_SIZE_U* desiredPixelSize,[In, Optional] const D2D1_PIXEL_FORMAT* desiredFormat,[In] D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,[Out, Fast] ID2D1BitmapRenderTarget** bitmapRenderTarget) + ID2D1RenderTarget::CreateCompatibleRenderTarget +
    + + +

    Creates a layer resource that can be used with this render target and its compatible render targets. The new layer has the specified initial size.

    +
    +

    If (0, 0) is specified, no backing store is created behind the layer resource. The layer resource is allocated to the minimum size when PushLayer is called.

    +

    When the method returns, contains a reference to a reference to the new layer. This parameter is passed uninitialized.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Regardless of whether a size is initially specified, the layer automatically resizes as needed.

    +
    + + dd371835 + HRESULT ID2D1RenderTarget::CreateLayer([In, Optional] const D2D_SIZE_F* size,[Out, Fast] ID2D1Layer** layer) + ID2D1RenderTarget::CreateLayer +
    + + +

    Create a mesh that uses triangles to describe a shape.

    +
    +

    When this method returns, contains a reference to a reference to the new mesh.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    To populate a mesh, use its Open method to obtain an . To draw the mesh, use the render target's FillMesh method.

    +
    + + dd371851 + HRESULT ID2D1RenderTarget::CreateMesh([Out, Fast] ID2D1Mesh** mesh) + ID2D1RenderTarget::CreateMesh +
    + + +

    Draws a line between the specified points using the specified stroke style.

    +
    +

    The start point of the line, in device-independent pixels.

    +

    The end point of the line, in device-independent pixels.

    +

    The brush used to paint the line's stroke.

    +

    The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.

    +

    The style of stroke to paint, or null to paint a solid line.

    + +

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawLine) failed, check the result returned by the or methods.

    +
    + + dd371895 + void ID2D1RenderTarget::DrawLine([In] D2D_POINT_2F point0,[In] D2D_POINT_2F point1,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + ID2D1RenderTarget::DrawLine +
    + + +

    Draws the outline of a rectangle that has the specified dimensions and stroke style.

    +
    +

    The dimensions of the rectangle to draw, in device-independent pixels.

    +

    The brush used to paint the rectangle's stroke.

    +

    The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.

    +

    The style of stroke to paint, or null to paint a solid stroke.

    + +

    When this method fails, it does not return an error code. To determine whether a drawing method (such as DrawRectangle) failed, check the result returned by the or method.

    +
    + + dd371902 + void ID2D1RenderTarget::DrawRectangle([In] const D2D_RECT_F* rect,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + ID2D1RenderTarget::DrawRectangle +
    + + +

    Paints the interior of the specified rectangle.

    +
    +

    The dimension of the rectangle to paint, in device-independent pixels.

    +

    The brush used to paint the rectangle's interior.

    + +

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as FillRectangle) failed, check the result returned by the or methods.

    +
    + + dd371954 + void ID2D1RenderTarget::FillRectangle([In] const D2D_RECT_F* rect,[In] ID2D1Brush* brush) + ID2D1RenderTarget::FillRectangle +
    + + +

    Draws the outline of the specified rounded rectangle using the specified stroke style.

    +
    +

    The dimensions of the rounded rectangle to draw, in device-independent pixels.

    +

    The brush used to paint the rounded rectangle's outline.

    +

    The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.

    +

    The style of the rounded rectangle's stroke, or null to paint a solid stroke. The default value is null.

    + +

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawRoundedRectangle) failed, check the result returned by the or methods.

    +
    + + dd371908 + void ID2D1RenderTarget::DrawRoundedRectangle([In] const D2D1_ROUNDED_RECT* roundedRect,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + ID2D1RenderTarget::DrawRoundedRectangle +
    + + +

    Paints the interior of the specified rounded rectangle.

    +
    +

    The dimensions of the rounded rectangle to paint, in device-independent pixels.

    +

    The brush used to paint the interior of the rounded rectangle.

    + +

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as FillRoundedRectangle) failed, check the result returned by the or methods.

    +
    + + dd371959 + void ID2D1RenderTarget::FillRoundedRectangle([In] const D2D1_ROUNDED_RECT* roundedRect,[In] ID2D1Brush* brush) + ID2D1RenderTarget::FillRoundedRectangle +
    + + +

    Draws the outline of the specified ellipse using the specified stroke style.

    +
    +

    The position and radius of the ellipse to draw, in device-independent pixels.

    +

    The brush used to paint the ellipse's outline.

    +

    The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.

    +

    The style of stroke to apply to the ellipse's outline, or null to paint a solid stroke.

    + +

    The DrawEllipse method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawEllipse) failed, check the result returned by the or methods.

    +
    + + dd371886 + void ID2D1RenderTarget::DrawEllipse([In] const D2D1_ELLIPSE* ellipse,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + ID2D1RenderTarget::DrawEllipse +
    + + +

    Paints the interior of the specified ellipse.

    +
    +

    The position and radius, in device-independent pixels, of the ellipse to paint.

    +

    The brush used to paint the interior of the ellipse.

    + +

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as FillEllipse) failed, check the result returned by the or methods.

    +
    + + dd371928 + void ID2D1RenderTarget::FillEllipse([In] const D2D1_ELLIPSE* ellipse,[In] ID2D1Brush* brush) + ID2D1RenderTarget::FillEllipse +
    + + +

    Draws the outline of the specified geometry using the specified stroke style.

    +
    +

    The geometry to draw.

    +

    The brush used to paint the geometry's stroke.

    +

    The width of the stroke, in device-independent pixels. The value must be greater than or equal to 0.0f. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line.

    +

    The style of stroke to apply to the geometry's outline, or null to paint a solid stroke.

    + +

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawGeometry) failed, check the result returned by the or methods.

    +
    + + dd371890 + void ID2D1RenderTarget::DrawGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + ID2D1RenderTarget::DrawGeometry +
    + + +

    Paints the interior of the specified geometry.

    +
    +

    The geometry to paint.

    +

    The brush used to paint the geometry's interior.

    +

    The opacity mask to apply to the geometry, or null for no opacity mask. If an opacity mask (the opacityBrush parameter) is specified, brush must be an that has its x- and y-extend modes set to . For more information, see the Remarks section.

    + +

    If the opacityBrush parameter is not null, the alpha value of each pixel of the mapped opacityBrush is used to determine the resulting opacity of each corresponding pixel of the geometry. Only the alpha value of each color in the brush is used for this processing; all other color information is ignored. The alpha value specified by the brush is multiplied by the alpha value of the geometry after the geometry has been painted by brush. +

    When this method fails, it does not return an error code. To determine whether a drawing operation (such as FillGeometry) failed, check the result returned by the or method.

    +
    + + dd371933 + void ID2D1RenderTarget::FillGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In, Optional] ID2D1Brush* opacityBrush) + ID2D1RenderTarget::FillGeometry +
    + + +

    Paints the interior of the specified mesh.

    +
    +

    The mesh to paint.

    +

    The brush used to paint the mesh.

    + +

    The current antialias mode of the render target must be when FillMesh is called. To change the render target's antialias mode, use the SetAntialiasMode method.

    FillMesh does not expect a particular winding order for the triangles in the ; both clockwise and counter-clockwise will work.

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as FillMesh) failed, check the result returned by the or methods.

    +
    + + dd371939 + void ID2D1RenderTarget::FillMesh([In] ID2D1Mesh* mesh,[In] ID2D1Brush* brush) + ID2D1RenderTarget::FillMesh +
    + + + Applies the opacity mask described by the specified bitmap to a brush and uses that brush to paint a region of the render target. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    For this method to work properly, the render target must be using the antialiasing mode. You can set the antialiasing mode by calling the method.

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as FillOpacityMask) failed, check the result returned by the or methods.

    +
    + + dd742850 + void ID2D1RenderTarget::FillOpacityMask([In] ID2D1Bitmap* opacityMask,[In] ID2D1Brush* brush,[In] D2D1_OPACITY_MASK_CONTENT content,[In, Optional] const D2D_RECT_F* destinationRectangle,[In, Optional] const D2D_RECT_F* sourceRectangle) + ID2D1RenderTarget::FillOpacityMask +
    + + +

    Draws the specified bitmap after scaling it to the size of the specified rectangle.

    +
    +

    The bitmap to render.

    +

    The size and position, in device-independent pixels in the render target's coordinate space, of the area to which the bitmap is drawn. If the rectangle is not well-ordered, nothing is drawn, but the render target does not enter an error state.

    +

    A value between 0.0f and 1.0f, inclusive, that specifies the opacity value to be applied to the bitmap; this value is multiplied against the alpha values of the bitmap's contents. Default is 1.0f.

    +

    The interpolation mode to use if the bitmap is scaled or rotated by the drawing operation. The default value is .

    +

    The size and position, in device-independent pixels in the bitmap's coordinate space, of the area within the bitmap to draw; null to draw the entire bitmap.

    + +

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawBitmap) failed, check the result returned by the or methods.

    +
    + + dd371878 + void ID2D1RenderTarget::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D_RECT_F* destinationRectangle,[In] float opacity,[In] D2D1_BITMAP_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D_RECT_F* sourceRectangle) + ID2D1RenderTarget::DrawBitmap +
    + + +

    Draws the specified text using the format information provided by an object.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    To create an object, create an and call its CreateTextFormat method.

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawText) failed, check the result returned by the or methods.

    +
    + + dd371919 + void ID2D1RenderTarget::DrawTextW([In, Buffer] const wchar_t* string,[In] unsigned int stringLength,[In] IDWriteTextFormat* textFormat,[In] const D2D_RECT_F* layoutRect,[In] ID2D1Brush* defaultFillBrush,[In] D2D1_DRAW_TEXT_OPTIONS options,[In] DWRITE_MEASURING_MODE measuringMode) + ID2D1RenderTarget::DrawTextW +
    + + +

    Draws the formatted text described by the specified object.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + +

    When drawing the same text repeatedly, using the DrawTextLayout method is more efficient than using the DrawText method because the text doesn't need to be formatted and the layout processed with each call.

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawTextLayout) failed, check the result returned by the or methods.

    +
    + + dd371913 + void ID2D1RenderTarget::DrawTextLayout([In] D2D_POINT_2F origin,[In] IDWriteTextLayout* textLayout,[In] ID2D1Brush* defaultFillBrush,[In] D2D1_DRAW_TEXT_OPTIONS options) + ID2D1RenderTarget::DrawTextLayout +
    + + +

    Draws the specified glyphs.

    +
    +

    The origin, in device-independent pixels, of the glyphs' baseline.

    +

    The glyphs to render.

    +

    The brush used to paint the specified glyphs.

    +

    A value that indicates how glyph metrics are used to measure text when it is formatted. The default value is .

    + +

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawGlyphRun) failed, check the result returned by the or methods.

    +
    + + dd371893 + void ID2D1RenderTarget::DrawGlyphRun([In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In] ID2D1Brush* foregroundBrush,[In] DWRITE_MEASURING_MODE measuringMode) + ID2D1RenderTarget::DrawGlyphRun +
    + + + Applies the specified transform to the render target, replacing the existing transformation. All subsequent drawing operations occur in the transformed space. + + No documentation. + + dd742857 + void ID2D1RenderTarget::SetTransform([In] const D2D_MATRIX_3X2_F* transform) + ID2D1RenderTarget::SetTransform + + + +

    Gets the current transform of the render target.

    +
    +

    When this returns, contains the current transform of the render target. This parameter is passed uninitialized.

    + + dd316845 + void ID2D1RenderTarget::GetTransform([Out] D2D_MATRIX_3X2_F* transform) + ID2D1RenderTarget::GetTransform +
    + + +

    Sets the antialiasing mode of the render target. The antialiasing mode applies to all subsequent drawing operations, excluding text and glyph drawing operations.

    +
    +

    The antialiasing mode for future drawing operations.

    + +

    To specify the antialiasing mode for text and glyph operations, use the SetTextAntialiasMode method.

    +
    + + dd316881 + void ID2D1RenderTarget::SetAntialiasMode([In] D2D1_ANTIALIAS_MODE antialiasMode) + ID2D1RenderTarget::SetAntialiasMode +
    + + +

    Retrieves the current antialiasing mode for nontext drawing operations.

    +
    +

    The current antialiasing mode for nontext drawing operations.

    + + dd316805 + D2D1_ANTIALIAS_MODE ID2D1RenderTarget::GetAntialiasMode() + ID2D1RenderTarget::GetAntialiasMode +
    + + +

    Specifies the antialiasing mode to use for subsequent text and glyph drawing operations.

    +
    +

    The antialiasing mode to use for subsequent text and glyph drawing operations.

    + + dd316897 + void ID2D1RenderTarget::SetTextAntialiasMode([In] D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) + ID2D1RenderTarget::SetTextAntialiasMode +
    + + +

    Gets the current antialiasing mode for text and glyph drawing operations.

    +
    +

    The current antialiasing mode for text and glyph drawing operations.

    + + dd316835 + D2D1_TEXT_ANTIALIAS_MODE ID2D1RenderTarget::GetTextAntialiasMode() + ID2D1RenderTarget::GetTextAntialiasMode +
    + + +

    Specifies text rendering options to be applied to all subsequent text and glyph drawing operations.

    +
    +

    The text rendering options to be applied to all subsequent text and glyph drawing operations; null to clear current text rendering options.

    + +

    If the settings specified by textRenderingParams are incompatible with the render target's text antialiasing mode (specified by SetTextAntialiasMode), subsequent text and glyph drawing operations will fail and put the render target into an error state.

    +
    + + dd316898 + void ID2D1RenderTarget::SetTextRenderingParams([In, Optional] IDWriteRenderingParams* textRenderingParams) + ID2D1RenderTarget::SetTextRenderingParams +
    + + +

    Retrieves the render target's current text rendering options.

    +
    +

    When this method returns, textRenderingParamscontains the address of a reference to the render target's current text rendering options.

    + +

    If the settings specified by textRenderingParams are incompatible with the render target's text antialiasing mode (specified by SetTextAntialiasMode), subsequent text and glyph drawing operations will fail and put the render target into an error state.

    +
    + + dd316841 + void ID2D1RenderTarget::GetTextRenderingParams([Out, Optional] IDWriteRenderingParams** textRenderingParams) + ID2D1RenderTarget::GetTextRenderingParams +
    + + +

    Specifies a label for subsequent drawing operations.

    +
    +

    A label to apply to subsequent drawing operations.

    +

    A label to apply to subsequent drawing operations.

    + +

    The labels specified by this method are printed by debug error messages. If no tag is set, the default value for each tag is 0.

    +
    + + dd316892 + void ID2D1RenderTarget::SetTags([In] unsigned longlong tag1,[In] unsigned longlong tag2) + ID2D1RenderTarget::SetTags +
    + + +

    Gets the label for subsequent drawing operations.

    +
    +

    When this method returns, contains the first label for subsequent drawing operations. This parameter is passed uninitialized. If null is specified, no value is retrieved for this parameter.

    +

    When this method returns, contains the second label for subsequent drawing operations. This parameter is passed uninitialized. If null is specified, no value is retrieved for this parameter.

    + +

    If the same address is passed for both parameters, both parameters receive the value of the second tag.

    +
    + + dd316830 + void ID2D1RenderTarget::GetTags([Out, Optional] unsigned longlong* tag1,[Out, Optional] unsigned longlong* tag2) + ID2D1RenderTarget::GetTags +
    + + +

    Adds the specified layer to the render target so that it receives all subsequent drawing operations until PopLayer is called.

    +
    + No documentation. + No documentation. + +

    The PushLayer method allows a caller to begin redirecting rendering to a layer. All rendering operations are valid in a layer. The location of the layer is affected by the world transform set on the render target.

    Each PushLayer must have a matching PopLayer call. If there are more PopLayer calls than PushLayer calls, the render target is placed into an error state. If Flush is called before all outstanding layers are popped, the render target is placed into an error state, and an error is returned. The error state can be cleared by a call to EndDraw.

    A particular resource can be active only at one time. In other words, you cannot call a PushLayer method, and then immediately follow with another PushLayer method with the same layer resource. Instead, you must call the second PushLayer method with different layer resources. +

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as PushLayer) failed, check the result returned by the or methods.

    +
    + + dd316869 + void ID2D1RenderTarget::PushLayer([In] const D2D1_LAYER_PARAMETERS* layerParameters,[In, Optional] ID2D1Layer* layer) + ID2D1RenderTarget::PushLayer +
    + + +

    Stops redirecting drawing operations to the layer that is specified by the last PushLayer call.

    +
    + +

    A PopLayer must match a previous PushLayer call.

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as PopLayer) failed, check the result returned by the or methods.

    +
    + + dd316852 + void ID2D1RenderTarget::PopLayer() + ID2D1RenderTarget::PopLayer +
    + + +

    Executes all pending drawing commands.

    +
    +

    When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.

    +

    When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.

    +

    If the method succeeds, it returns . Otherwise, it returns an error code and sets tag1 and tag2 to the tags that were active when the error occurred. If no error occurred, this method sets the error tag state to be (0,0).

    + +

    This command does not flush the Direct3D device context that is associated with the render target.

    Calling this method resets the error state of the render target.

    +
    + + dd316801 + HRESULT ID2D1RenderTarget::Flush([Out, Optional] unsigned longlong* tag1,[Out, Optional] unsigned longlong* tag2) + ID2D1RenderTarget::Flush +
    + + +

    Saves the current drawing state to the specified .

    +
    + No documentation. + + dd316876 + void ID2D1RenderTarget::SaveDrawingState([InOut] ID2D1DrawingStateBlock* drawingStateBlock) + ID2D1RenderTarget::SaveDrawingState +
    + + +

    Sets the render target's drawing state to that of the specified .

    +
    + No documentation. + + dd316872 + void ID2D1RenderTarget::RestoreDrawingState([In] ID2D1DrawingStateBlock* drawingStateBlock) + ID2D1RenderTarget::RestoreDrawingState +
    + + +

    Specifies a rectangle to which all subsequent drawing operations are clipped.

    +
    +

    The size and position of the clipping area, in device-independent pixels.

    +

    The antialiasing mode that is used to draw the edges of clip rects that have subpixel boundaries, and to blend the clip with the scene contents. The blending is performed once when the PopAxisAlignedClip method is called, and does not apply to each primitive within the layer.

    + +

    The clipRect is transformed by the current world transform set on the render target. After the transform is applied to the clipRect that is passed in, the axis-aligned bounding box for the clipRect is computed. For efficiency, the contents are clipped to this axis-aligned bounding box and not to the original clipRect that is passed in.

    The following diagrams show how a rotation transform is applied to the render target, the resulting clipRect, and a calculated axis-aligned bounding box.

    1. Assume the rectangle in the following illustration is a render target that is aligned to the screen pixels.

    2. Apply a rotation transform to the render target. In the following illustration, the black rectangle represents the original render target and the red dashed rectangle represents the transformed render target.

    3. After calling PushAxisAlignedClip, the rotation transform is applied to the clipRect. In the following illustration, the blue rectangle represents the transformed clipRect.

    4. The axis-aligned bounding box is calculated. The green dashed rectangle represents the bounding box in the following illustration. All contents are clipped to this axis-aligned bounding box.

    Note??If rendering operations fail or if PopAxisAlignedClip is not called, clip rects may cause some artifacts on the render target. PopAxisAlignedClip can be considered a drawing operation that is designed to fix the borders of a clipping region. Without this call, the borders of a clipped area may be not antialiased or otherwise corrected.?

    The PushAxisAlignedClip and PopAxisAlignedClip must match. Otherwise, the error state is set. For the render target to continue receiving new commands, you can call Flush to clear the error.

    A PushAxisAlignedClip and PopAxisAlignedClip pair can occur around or within a PushLayer and PopLayer, but cannot overlap. For example, the sequence of PushAxisAlignedClip, PushLayer, PopLayer, PopAxisAlignedClip is valid, but the sequence of PushAxisAlignedClip, PushLayer, PopAxisAlignedClip, PopLayer is invalid.

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as PushAxisAlignedClip) failed, check the result returned by the or methods.

    +
    + + dd316860 + void ID2D1RenderTarget::PushAxisAlignedClip([In] const D2D_RECT_F* clipRect,[In] D2D1_ANTIALIAS_MODE antialiasMode) + ID2D1RenderTarget::PushAxisAlignedClip +
    + + +

    Removes the last axis-aligned clip from the render target. After this method is called, the clip is no longer applied to subsequent drawing operations.

    +
    + +

    A PushAxisAlignedClip/PopAxisAlignedClip pair can occur around or within a PushLayer/PopLayer pair, but may not overlap. For example, a PushAxisAlignedClip, PushLayer, PopLayer, PopAxisAlignedClip sequence is valid, but a PushAxisAlignedClip, PushLayer, PopAxisAlignedClip, PopLayer sequence is not.

    PopAxisAlignedClip must be called once for every call to PushAxisAlignedClip.

    For an example, see How to Clip with an Axis-Aligned Clip Rectangle.

    This method doesn't return an error code if it fails. To determine whether a drawing operation (such as PopAxisAlignedClip) failed, check the result returned by the or methods.

    +
    + + dd316850 + void ID2D1RenderTarget::PopAxisAlignedClip() + ID2D1RenderTarget::PopAxisAlignedClip +
    + + +

    Clears the drawing area to the specified color.

    +
    +

    The color to which the drawing area is cleared, or null for transparent black.

    + +

    Direct2D interprets the clearColor as straight alpha (not premultiplied). If the render target's alpha mode is , the alpha channel of clearColor is ignored and replaced with 1.0f (fully opaque).

    If the render target has an active clip (specified by PushAxisAlignedClip), the clear command is applied only to the area within the clip region.

    +
    + + dd371769 + void ID2D1RenderTarget::Clear([In, Optional] const D2D_COLOR_F* clearColor) + ID2D1RenderTarget::Clear +
    + + +

    Initiates drawing on this render target.

    +
    + +

    Drawing operations can only be issued between a BeginDraw and EndDraw call.

    BeginDraw and EndDraw are used to indicate that a render target is in use by the Direct2D system. Different implementations of might behave differently when BeginDraw is called. An may be locked between BeginDraw/EndDraw calls, a DXGI surface render target might be acquired on BeginDraw and released on EndDraw, while an may begin batching at BeginDraw and may present on EndDraw, for example.

    The BeginDraw method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of BeginDraw/EndDraw.

    After BeginDraw is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the Flush method is called, or until EndDraw is called. The EndDraw method causes any batched drawing operations to complete, and then returns an indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The EndDraw method always succeeds: it should not be called twice even if a previous EndDraw resulted in a failing .

    If EndDraw is called without a matched call to BeginDraw, it returns an error indicating that BeginDraw must be called before EndDraw. Calling BeginDraw twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate and error information when EndDraw is called. +

    +
    + + dd371768 + void ID2D1RenderTarget::BeginDraw() + ID2D1RenderTarget::BeginDraw +
    + + +

    Ends drawing operations on the render target and indicates the current error state and associated tags.

    +
    +

    When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.

    +

    When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.

    +

    If the method succeeds, it returns . Otherwise, it returns an error code and sets tag1 and tag2 to the tags that were active when the error occurred.

    + +

    Drawing operations can only be issued between a BeginDraw and EndDraw call.

    BeginDraw and EndDraw are use to indicate that a render target is in use by the Direct2D system. Different implementations of might behave differently when BeginDraw is called. An may be locked between BeginDraw/EndDraw calls, a DXGI surface render target might be acquired on BeginDraw and released on EndDraw, while an may begin batching at BeginDraw and may present on EndDraw, for example.

    The BeginDraw method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of BeginDraw/EndDraw.

    After BeginDraw is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the Flush method is called, or until EndDraw is called. The EndDraw method causes any batched drawing operations to complete, and then returns an indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The EndDraw method always succeeds: it should not be called twice even if a previous EndDraw resulted in a failing .

    If EndDraw is called without a matched call to BeginDraw, it returns an error indicating that BeginDraw must be called before EndDraw. Calling BeginDraw twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate and error information when EndDraw is called. +

    +
    + + dd371924 + HRESULT ID2D1RenderTarget::EndDraw([Out, Optional] unsigned longlong* tag1,[Out, Optional] unsigned longlong* tag2) + ID2D1RenderTarget::EndDraw +
    + + +

    Retrieves the pixel format and alpha mode of the render target.

    +
    +

    The pixel format and alpha mode of the render target.

    + + dd316814 + D2D1_PIXEL_FORMAT ID2D1RenderTarget::GetPixelFormat() + ID2D1RenderTarget::GetPixelFormat +
    + + +

    Sets the dots per inch (DPI) of the render target.

    +
    +

    A value greater than or equal to zero that specifies the horizontal DPI of the render target.

    +

    A value greater than or equal to zero that specifies the vertical DPI of the render target.

    + +

    This method specifies the mapping from pixel space to device-independent space for the render target. If both dpiX and dpiY are 0, the factory-read system DPI is chosen. If one parameter is zero and the other unspecified, the DPI is not changed.

    For , the DPI defaults to the most recently factory-read system DPI. The default value for all other render targets is 96 DPI.

    +
    + + dd316887 + void ID2D1RenderTarget::SetDpi([In] float dpiX,[In] float dpiY) + ID2D1RenderTarget::SetDpi +
    + + +

    Return the render target's dots per inch (DPI).

    +
    +

    When this method returns, contains the horizontal DPI of the render target. This parameter is passed uninitialized.

    +

    When this method returns, contains the vertical DPI of the render target. This parameter is passed uninitialized.

    + +

    This method indicates the mapping from pixel space to device-independent space for the render target.

    For , the DPI defaults to the most recently factory-read system DPI. The default value for all other render targets is 96 DPI.

    +
    + + dd316809 + void ID2D1RenderTarget::GetDpi([Out] float* dpiX,[Out] float* dpiY) + ID2D1RenderTarget::GetDpi +
    + + +

    Returns the size of the render target in device-independent pixels.

    +
    +

    The current size of the render target in device-independent pixels.

    + + dd316823 + D2D_SIZE_F ID2D1RenderTarget::GetSize() + ID2D1RenderTarget::GetSize +
    + + +

    Returns the size of the render target in device pixels.

    +
    +

    The size of the render target in device pixels.

    + + dd316820 + D2D_SIZE_U ID2D1RenderTarget::GetPixelSize() + ID2D1RenderTarget::GetPixelSize +
    + + +

    Gets the maximum size, in device-dependent units (pixels), of any one bitmap dimension supported by the render target.

    +
    +

    The maximum size, in pixels, of any one bitmap dimension supported by the render target.

    + +

    This method returns the maximum texture size of the Direct3D device.

    Note??The software renderer and WARP devices return the value of 16 megapixels (16*1024*1024). You can create a Direct2D texture that is this size, but not a Direct3D texture that is this size.? +
    + + dd742853 + unsigned int ID2D1RenderTarget::GetMaximumBitmapSize() + ID2D1RenderTarget::GetMaximumBitmapSize +
    + + +

    Indicates whether the render target supports the specified properties.

    +
    +

    The render target properties to test.

    +

    TRUE if the specified render target properties are supported by this render target; otherwise, .

    + +

    This method does not evaluate the DPI settings specified by the renderTargetProperties parameter.

    +
    + + dd742854 + BOOL ID2D1RenderTarget::IsSupported([In] const D2D1_RENDER_TARGET_PROPERTIES* renderTargetProperties) + ID2D1RenderTarget::IsSupported +
    + + + Default stroke width used for all methods that are not explicitly using it. Default is set to 1.0f. + + + + + Get or set the default stroke width used for all methods that are not explicitly using it. Default is set to 1.0f. + + + + + Creates a render target that draws to a DirectX Graphics Infrastructure (DXGI) surface. + + + To write to a Direct3D surface, you obtain an and pass it to the {{CreateDxgiSurfaceRenderTarget}} method to create a DXGI surface render target; you can then use the DXGI surface render target to draw 2-D content to the DXGI surface. A DXGI surface render target is a type of . Like other Direct2D render targets, you can use it to create resources and issue drawing commands. The DXGI surface render target and the DXGI surface must use the same DXGI format. If you specify the {{DXGI_FORMAT_UNKOWN}} format when you create the render target, it will automatically use the surface's format.The DXGI surface render target does not perform DXGI surface synchronization. To work with Direct2D, the Direct3D device that provides the must be created with the D3D10_CREATE_DEVICE_BGRA_SUPPORT flag.For more information about creating and using DXGI surface render targets, see the {{Direct2D and Direct3D Interoperability Overview}}.When you create a render target and hardware acceleration is available, you allocate resources on the computer's GPU. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the render target's {{EndDraw}} method returns the {{D2DERR_RECREATE_TARGET}} error. When you receive this error, you need to recreate the render target (and any resources it created). + + an instance of + The DXGI surface to bind this render target to + The rendering mode, pixel format, remoting options, DPI information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see {{Supported Pixel Formats and Alpha Modes}}. + + + + Draws the specified bitmap after scaling it to the size of the specified rectangle. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{DrawBitmap}}) failed, check the result returned by the or methods. + + The bitmap to render. + A value between 0.0f and 1.0f, inclusive, that specifies an opacity value to apply to the bitmap; this value is multiplied against the alpha values of the bitmap's contents. The default value is 1.0f. + The interpolation mode to use if the bitmap is scaled or rotated by the drawing operation. The default value is . + void ID2D1RenderTarget::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_RECT_F* destinationRectangle,[None] float opacity,[None] D2D1_BITMAP_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D1_RECT_F* sourceRectangle) + + + + Draws the specified bitmap after scaling it to the size of the specified rectangle. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{DrawBitmap}}) failed, check the result returned by the or methods. + + The bitmap to render. + The size and position, in device-independent pixels in the render target's coordinate space, of the area to which the bitmap is drawn; NULL to draw the selected portion of the bitmap at the origin of the render target. If the rectangle is specified but not well-ordered, nothing is drawn, but the render target does not enter an error state. + A value between 0.0f and 1.0f, inclusive, that specifies an opacity value to apply to the bitmap; this value is multiplied against the alpha values of the bitmap's contents. The default value is 1.0f. + The interpolation mode to use if the bitmap is scaled or rotated by the drawing operation. The default value is . + void ID2D1RenderTarget::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_RECT_F* destinationRectangle,[None] float opacity,[None] D2D1_BITMAP_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D1_RECT_F* sourceRectangle) + + + + Draws the specified bitmap after scaling it to the size of the specified rectangle. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{DrawBitmap}}) failed, check the result returned by the or methods. + + The bitmap to render. + A value between 0.0f and 1.0f, inclusive, that specifies an opacity value to apply to the bitmap; this value is multiplied against the alpha values of the bitmap's contents. The default value is 1.0f. + The interpolation mode to use if the bitmap is scaled or rotated by the drawing operation. The default value is . + The size and position, in device-independent pixels in the bitmap's coordinate space, of the area within the bitmap to be drawn; NULL to draw the entire bitmap. + void ID2D1RenderTarget::DrawBitmap([In] ID2D1Bitmap* bitmap,[In, Optional] const D2D1_RECT_F* destinationRectangle,[None] float opacity,[None] D2D1_BITMAP_INTERPOLATION_MODE interpolationMode,[In, Optional] const D2D1_RECT_F* sourceRectangle) + + + + Draws the outline of the specified ellipse using the specified stroke style. + + + The {{DrawEllipse}} method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawEllipse) failed, check the result returned by the or methods. + + The position and radius of the ellipse to draw, in device-independent pixels. + The brush used to paint the ellipse's outline. + void ID2D1RenderTarget::DrawEllipse([In] const D2D1_ELLIPSE* ellipse,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws the outline of the specified ellipse using the specified stroke style. + + + The {{DrawEllipse}} method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawEllipse) failed, check the result returned by the or methods. + + The position and radius of the ellipse to draw, in device-independent pixels. + The brush used to paint the ellipse's outline. + The thickness of the ellipse's stroke. The stroke is centered on the ellipse's outline. + void ID2D1RenderTarget::DrawEllipse([In] const D2D1_ELLIPSE* ellipse,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws the outline of the specified geometry. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawGeometry) failed, check the result returned by the or methods. + + The geometry to draw. + The brush used to paint the geometry's stroke. + void ID2D1RenderTarget::DrawGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws the outline of the specified geometry. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawGeometry) failed, check the result returned by the or methods. + + The geometry to draw. + The brush used to paint the geometry's stroke. + The thickness of the geometry's stroke. The stroke is centered on the geometry's outline. + void ID2D1RenderTarget::DrawGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws a line between the specified points. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawLine) failed, check the result returned by the or methods. + + The start point of the line, in device-independent pixels. + The end point of the line, in device-independent pixels. + The brush used to paint the line's stroke. + void ID2D1RenderTarget::DrawLine([None] D2D1_POINT_2F point0,[None] D2D1_POINT_2F point1,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws a line between the specified points. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawLine) failed, check the result returned by the or methods. + + The start point of the line, in device-independent pixels. + The end point of the line, in device-independent pixels. + The brush used to paint the line's stroke. + A value greater than or equal to 0.0f that specifies the width of the stroke. If this parameter isn't specified, it defaults to 1.0f. The stroke is centered on the line. + void ID2D1RenderTarget::DrawLine([None] D2D1_POINT_2F point0,[None] D2D1_POINT_2F point1,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws the outline of a rectangle that has the specified dimensions. + + + When this method fails, it does not return an error code. To determine whether a drawing method (such as {{DrawRectangle}}) failed, check the result returned by the or method. + + The dimensions of the rectangle to draw, in device-independent pixels. + The brush used to paint the rectangle's stroke. + void ID2D1RenderTarget::DrawRectangle([In] const D2D1_RECT_F* rect,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws the outline of a rectangle that has the specified dimensions and stroke style. + + + When this method fails, it does not return an error code. To determine whether a drawing method (such as {{DrawRectangle}}) failed, check the result returned by the or method. + + The dimensions of the rectangle to draw, in device-independent pixels. + The brush used to paint the rectangle's stroke. + A value greater than or equal to 0.0f that specifies the width of the rectangle's stroke. The stroke is centered on the rectangle's outline. + void ID2D1RenderTarget::DrawRectangle([In] const D2D1_RECT_F* rect,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws the outline of the specified rounded rectangle. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{DrawRoundedRectangle}}) failed, check the result returned by the or methods. + + The dimensions of the rounded rectangle to draw, in device-independent pixels. + The brush used to paint the rounded rectangle's outline. + void ID2D1RenderTarget::DrawRoundedRectangle([In] const D2D1_ROUNDED_RECT* roundedRect,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws the outline of the specified rounded rectangle. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{DrawRoundedRectangle}}) failed, check the result returned by the or methods. + + The dimensions of the rounded rectangle to draw, in device-independent pixels. + The brush used to paint the rounded rectangle's outline. + The width of the rounded rectangle's stroke. The stroke is centered on the rounded rectangle's outline. The default value is 1.0f. + void ID2D1RenderTarget::DrawRoundedRectangle([In] const D2D1_ROUNDED_RECT* roundedRect,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws the outline of the specified rounded rectangle using the specified stroke style. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{DrawRoundedRectangle}}) failed, check the result returned by the or methods. + + The dimensions of the rounded rectangle to draw, in device-independent pixels. + The brush used to paint the rounded rectangle's outline. + The width of the rounded rectangle's stroke. The stroke is centered on the rounded rectangle's outline. The default value is 1.0f. + The style of the rounded rectangle's stroke, or NULL to paint a solid stroke. The default value is NULL. + void ID2D1RenderTarget::DrawRoundedRectangle([In] const D2D1_ROUNDED_RECT* roundedRect,[In] ID2D1Brush* brush,[None] float strokeWidth,[In, Optional] ID2D1StrokeStyle* strokeStyle) + + + + Draws the specified text using the format information provided by an object. + + + To create an object, create an and call its {{CreateTextFormat}} method. This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{DrawText}}) failed, check the result returned by the or methods. + + A reference to an array of Unicode characters to draw. + An object that describes formatting details of the text to draw, such as the font, the font size, and flow direction. + The size and position of the area in which the text is drawn. + The brush used to paint the text. + void ID2D1RenderTarget::DrawTextA([In, Buffer] const wchar_t* string,[None] int stringLength,[In] IDWriteTextFormat* textFormat,[In] const D2D1_RECT_F* layoutRect,[In] ID2D1Brush* defaultForegroundBrush,[None] D2D1_DRAW_TEXT_OPTIONS options,[None] DWRITE_MEASURING_MODE measuringMode) + + + + Draws the specified text using the format information provided by an object. + + + To create an object, create an and call its {{CreateTextFormat}} method. This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{DrawText}}) failed, check the result returned by the or methods. + + A reference to an array of Unicode characters to draw. + An object that describes formatting details of the text to draw, such as the font, the font size, and flow direction. + The size and position of the area in which the text is drawn. + The brush used to paint the text. + A value that indicates whether the text should be snapped to pixel boundaries and whether the text should be clipped to the layout rectangle. The default value is , which indicates that text should be snapped to pixel boundaries and it should not be clipped to the layout rectangle. + void ID2D1RenderTarget::DrawTextA([In, Buffer] const wchar_t* string,[None] int stringLength,[In] IDWriteTextFormat* textFormat,[In] const D2D1_RECT_F* layoutRect,[In] ID2D1Brush* defaultForegroundBrush,[None] D2D1_DRAW_TEXT_OPTIONS options,[None] DWRITE_MEASURING_MODE measuringMode) + + + + Draws the specified text using the format information provided by an object. + + + To create an object, create an and call its {{CreateTextFormat}} method. This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{DrawText}}) failed, check the result returned by the or methods. + + A reference to an array of Unicode characters to draw. + An object that describes formatting details of the text to draw, such as the font, the font size, and flow direction. + The size and position of the area in which the text is drawn. + The brush used to paint the text. + A value that indicates whether the text should be snapped to pixel boundaries and whether the text should be clipped to the layout rectangle. The default value is , which indicates that text should be snapped to pixel boundaries and it should not be clipped to the layout rectangle. + A value that indicates how glyph metrics are used to measure text when it is formatted. The default value is DWRITE_MEASURING_MODE_NATURAL. + void ID2D1RenderTarget::DrawTextA([In, Buffer] const wchar_t* string,[None] int stringLength,[In] IDWriteTextFormat* textFormat,[In] const D2D1_RECT_F* layoutRect,[In] ID2D1Brush* defaultForegroundBrush,[None] D2D1_DRAW_TEXT_OPTIONS options,[None] DWRITE_MEASURING_MODE measuringMode) + + + + Draws the formatted text described by the specified object. + + + When drawing the same text repeatedly, using the DrawTextLayout method is more efficient than using the {{DrawText}} method because the text doesn't need to be formatted and the layout processed with each call. This method doesn't return an error code if it fails. To determine whether a drawing operation (such as DrawTextLayout) failed, check the result returned by the or methods. + + The point, described in device-independent pixels, at which the upper-left corner of the text described by textLayout is drawn. + The formatted text to draw. Any drawing effects that do not inherit from are ignored. If there are drawing effects that inherit from ID2D1Resource that are not brushes, this method fails and the render target is put in an error state. + The brush used to paint any text in textLayout that does not already have a brush associated with it as a drawing effect (specified by the method). + void ID2D1RenderTarget::DrawTextLayout([None] D2D1_POINT_2F origin,[In] IDWriteTextLayout* textLayout,[In] ID2D1Brush* defaultForegroundBrush,[None] D2D1_DRAW_TEXT_OPTIONS options) + + + +

    Ends drawing operations on the render target and indicates the current error state and associated tags.

    +
    +

    When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.

    +

    When this method returns, contains the tag for drawing operations that caused errors or 0 if there were no errors. This parameter is passed uninitialized.

    +

    If the method succeeds, it returns . Otherwise, it returns an error code and sets tag1 and tag2 to the tags that were active when the error occurred.

    + +

    Drawing operations can only be issued between a BeginDraw and EndDraw call.

    BeginDraw and EndDraw are use to indicate that a render target is in use by the Direct2D system. Different implementations of might behave differently when BeginDraw is called. An may be locked between BeginDraw/EndDraw calls, a DXGI surface render target might be acquired on BeginDraw and released on EndDraw, while an may begin batching at BeginDraw and may present on EndDraw, for example.

    The BeginDraw method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of BeginDraw/EndDraw.

    After BeginDraw is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the Flush method is called, or until EndDraw is called. The EndDraw method causes any batched drawing operations to complete, and then returns an indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The EndDraw method always succeeds: it should not be called twice even if a previous EndDraw resulted in a failing .

    If EndDraw is called without a matched call to BeginDraw, it returns an error indicating that BeginDraw must be called before EndDraw. Calling BeginDraw twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate and error information when EndDraw is called. +

    +
    + + dd371924 + HRESULT ID2D1RenderTarget::EndDraw([Out, Optional] unsigned longlong* tag1,[Out, Optional] unsigned longlong* tag2) + ID2D1RenderTarget::EndDraw +
    + + + Ends drawing operations on the render target and indicates the current error state and associated tags. + + + Drawing operations can only be issued between a {{BeginDraw}} and EndDraw call.BeginDraw and EndDraw are use to indicate that a render target is in use by the Direct2D system. Different implementations of might behave differently when {{BeginDraw}} is called. An may be locked between BeginDraw/EndDraw calls, a DXGI surface render target might be acquired on BeginDraw and released on EndDraw, while an may begin batching at BeginDraw and may present on EndDraw, for example. The BeginDraw method must be called before rendering operations can be called, though state-setting and state-retrieval operations can be performed even outside of {{BeginDraw}}/EndDraw. After {{BeginDraw}} is called, a render target will normally build up a batch of rendering commands, but defer processing of these commands until either an internal buffer is full, the {{Flush}} method is called, or until EndDraw is called. The EndDraw method causes any batched drawing operations to complete, and then returns an HRESULT indicating the success of the operations and, optionally, the tag state of the render target at the time the error occurred. The EndDraw method always succeeds: it should not be called twice even if a previous EndDraw resulted in a failing HRESULT. If EndDraw is called without a matched call to {{BeginDraw}}, it returns an error indicating that BeginDraw must be called before EndDraw. Calling BeginDraw twice on a render target puts the target into an error state where nothing further is drawn, and returns an appropriate HRESULT and error information when EndDraw is called. + + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code and sets tag1 and tag2 to the tags that were active when the error occurred. + + + + Paints the interior of the specified geometry. + + + If the opacityBrush parameter is not NULL, the alpha value of each pixel of the mapped opacityBrush is used to determine the resulting opacity of each corresponding pixel of the geometry. Only the alpha value of each color in the brush is used for this processing; all other color information is ignored. The alpha value specified by the brush is multiplied by the alpha value of the geometry after the geometry has been painted by brush. + When this method fails, it does not return an error code. To determine whether a drawing operation (such as FillGeometry) failed, check the result returned by the or method. + + The geometry to paint. + The brush used to paint the geometry's interior. + void FillGeometry([In] ID2D1Geometry* geometry,[In] ID2D1Brush* brush,[In, Optional] ID2D1Brush* opacityBrush) + + + + Applies the opacity mask described by the specified bitmap to a brush and uses that brush to paint a region of the render target. + + + For this method to work properly, the render target must be using the antialiasing mode. You can set the antialiasing mode by calling the method. This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{FillOpacityMask}}) failed, check the result returned by the or methods. + + The opacity mask to apply to the brush. The alpha value of each pixel in the region specified by sourceRectangle is multiplied with the alpha value of the brush after the brush has been mapped to the area defined by destinationRectangle. + The brush used to paint the region of the render target specified by destinationRectangle. + The type of content the opacity mask contains. The value is used to determine the color space in which the opacity mask is blended. + void ID2D1RenderTarget::FillOpacityMask([In] ID2D1Bitmap* opacityMask,[In] ID2D1Brush* brush,[None] D2D1_OPACITY_MASK_CONTENT content,[In, Optional] const D2D1_RECT_F* destinationRectangle,[In, Optional] const D2D1_RECT_F* sourceRectangle) + + + + Paints the interior of the specified rounded rectangle. + + + This method doesn't return an error code if it fails. To determine whether a drawing operation (such as {{FillRoundedRectangle}}) failed, check the result returned by the or methods. + + The dimensions of the rounded rectangle to paint, in device-independent pixels. + The brush used to paint the interior of the rounded rectangle. + void ID2D1RenderTarget::FillRoundedRectangle([In] const D2D1_ROUNDED_RECT* roundedRect,[In] ID2D1Brush* brush) + + + + Executes all pending drawing commands. + + + This command does not flush the device that is associated with the render target. Calling this method resets the error state of the render target. + + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code and sets tag1 and tag2 to the tags that were active when the error occurred. If no error occurred, this method sets the error tag state to be (0,0). + HRESULT ID2D1RenderTarget::Flush([Out, Optional] D2D1_TAG* tag1,[Out, Optional] D2D1_TAG* tag2) + + + + Get or sets the dots per inch (DPI) of the render target. + + + This method specifies the mapping from pixel space to device-independent space for the render target. If both dpiX and dpiY are 0, the factory-read system DPI is chosen. If one parameter is zero and the other unspecified, the DPI is not changed. For , the DPI defaults to the most recently factory-read system DPI. The default value for all other render targets is 96 DPI. + + void ID2D1RenderTarget::SetDpi([None] float dpiX,[None] float dpiY) + + + +

    Represents a Direct2D drawing resource.

    +
    + + dd316908 + ID2D1Resource + ID2D1Resource +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the factory associated with this resource.

    +
    + + dd316911 + GetFactory + GetFactory + void ID2D1Resource::GetFactory([Out] ID2D1Factory** factory) +
    + + +

    Retrieves the factory associated with this resource.

    +
    +

    When this method returns, contains a reference to a reference to the factory that created this resource. This parameter is passed uninitialized.

    + + dd316911 + void ID2D1Resource::GetFactory([Out] ID2D1Factory** factory) + ID2D1Resource::GetFactory +
    + + +

    Tracks a transform-created resource texture.

    +
    + + hh446904 + ID2D1ResourceTexture + ID2D1ResourceTexture +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Updates the specific resource texture inside the specific range or box using the supplied data.

    +
    +

    The "left" extent of the updates if specified; if null, the entire texture is updated.

    +

    The "right" extent of the updates if specified; if null, the entire texture is updated.

    +

    The stride to advance through the input data, according to dimension.

    +

    The number of dimensions in the resource texture. This must match the number used to load the texture.

    +

    The data to be placed into the resource texture.

    +

    The size of the data buffer to be used to update the resource texture.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.
    E_INVALIDARGAn invalid parameter was passed to the returning function.

    ?

    + +

    The number of dimensions in the update must match those of the created texture.

    +
    + + hh446906 + HRESULT ID2D1ResourceTexture::Update([In, Buffer, Optional] const unsigned int* minimumExtents,[In, Buffer, Optional] const unsigned int* maximimumExtents,[In, Buffer, Optional] const unsigned int* strides,[In] unsigned int dimensions,[In, Buffer] const unsigned char* data,[In] unsigned int dataCount) + ID2D1ResourceTexture::Update +
    + + + Initializes a new instance of class + + The effect context + A unique identifier to the resource + The description of the resource + HRESULT ID2D1EffectContext::CreateResourceTexture([In, Optional] const GUID* resourceId,[In] const D2D1_RESOURCE_TEXTURE_PROPERTIES* resourceTextureProperties,[In, Buffer, Optional] const unsigned char* data,[In, Buffer, Optional] const unsigned int* strides,[In] unsigned int dataSize,[Out] ID2D1ResourceTexture** resourceTexture) + + + + Initializes a new instance of class + + The effect context + A unique identifier to the resource + The description of the resource + The data to be loaded into the resource texture. + Reference to the stride to advance through the resource texture, according to dimension. + HRESULT ID2D1EffectContext::CreateResourceTexture([In, Optional] const GUID* resourceId,[In] const D2D1_RESOURCE_TEXTURE_PROPERTIES* resourceTextureProperties,[In, Buffer, Optional] const unsigned char* data,[In, Buffer, Optional] const unsigned int* strides,[In] unsigned int dataSize,[Out] ID2D1ResourceTexture** resourceTexture) + + + +

    Describes a rounded rectangle.

    +
    + + dd316914 + ID2D1RoundedRectangleGeometry + ID2D1RoundedRectangleGeometry +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a rounded rectangle that describes this rounded rectangle geometry.

    +
    + + dd316917 + GetRoundedRect + GetRoundedRect + void ID2D1RoundedRectangleGeometry::GetRoundedRect([Out] D2D1_ROUNDED_RECT* roundedRect) +
    + + +

    Retrieves a rounded rectangle that describes this rounded rectangle geometry.

    +
    +

    A reference that receives a rounded rectangle that describes this rounded rectangle geometry. You must allocate storage for this parameter.

    + + dd316917 + void ID2D1RoundedRectangleGeometry::GetRoundedRect([Out] D2D1_ROUNDED_RECT* roundedRect) + ID2D1RoundedRectangleGeometry::GetRoundedRect +
    + + + Creates an . + + an instance of + The coordinates and corner radii of the rounded rectangle geometry. + + + +

    Describes a geometric path that does not contain quadratic bezier curves or arcs.

    +
    + +

    A geometry sink consists of one or more figures. Each figure is made up of one or more line or Bezier curve segments. To create a figure, call the BeginFigure method and specify the figure's start point, then use AddLines and AddBeziers to add line and Bezier segments. When you are finished adding segments, call the EndFigure method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the Close method.

    To create geometry paths that can contain arcs and quadratic Bezier curves, use an .

    +
    + + dd316919 + ID2D1SimplifiedGeometrySink + ID2D1SimplifiedGeometrySink +
    + + + Specifies the method used to determine which points are inside the geometry described by this geometry sink and which points are outside. + + + The fill mode defaults to D2D1_FILL_MODE_ALTERNATE. To set the fill mode, call SetFillMode before the first call to {{BeginFigure}}. Not doing will put the geometry sink in an error state. + + The method used to determine whether a given point is part of the geometry. + void SetFillMode([None] D2D1_FILL_MODE fillMode) + + + + Specifies stroke and join options to be applied to new segments added to the geometry sink. + + + After this method is called, the specified segment flags are applied to each segment subsequently added to the sink. The segment flags are applied to every additional segment until this method is called again and a different set of segment flags is specified. + + Stroke and join options to be applied to new segments added to the geometry sink. + void SetSegmentFlags([None] D2D1_PATH_SEGMENT vertexFlags) + + + + Starts a new figure at the specified point. + + + If this method is called while a figure is currently in progress, the interface is invalidated and all future methods will fail. + + The point at which to begin the new figure. + Whether the new figure should be hollow or filled. + void BeginFigure([None] D2D1_POINT_2F startPoint,[None] D2D1_FIGURE_BEGIN figureBegin) + + + + Creates a sequence of lines using the specified points and adds them to the geometry sink. + + A pointer to an array of one or more points that describe the lines to draw. A line is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by {{BeginFigure}}) to the first point in the array. if the array contains additional points, a line is drawn from the first point to the second point in the array, from the second point to the third point, and so on. + void AddLines([In, Buffer] const D2D1_POINT_2F* points,[None] UINT pointsCount) + + + + Creates a sequence of cubic Bezier curves and adds them to the geometry sink. + + A pointer to an array of Bezier segments that describes the Bezier curves to create. A curve is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by {{BeginFigure}}) to the end point of the first Bezier segment in the array. if the array contains additional Bezier segments, each subsequent Bezier segment uses the end point of the preceding Bezier segment as its start point. + void AddBeziers([In, Buffer] const D2D1_BEZIER_SEGMENT* beziers,[None] UINT beziersCount) + + + + Ends the current figure; optionally, closes it. + + + Calling this method without a matching call to {{BeginFigure}} places the geometry sink in an error state; subsequent calls are ignored, and the overall failure will be returned when the {{Close}} method is called. + + A value that indicates whether the current figure is closed. If the figure is closed, a line is drawn between the current point and the start point specified by {{BeginFigure}}. + void EndFigure([None] D2D1_FIGURE_END figureEnd) + + + + Closes the geometry sink, indicates whether it is in an error state, and resets the sink's error state. + + + Do not close the geometry sink while a figure is still in progress; doing so puts the geometry sink in an error state. For the close operation to be successful, there must be one {{EndFigure}} call for each call to {{BeginFigure}}.After calling this method, the geometry sink might not be usable. Direct2D implementations of this interface do not allow the geometry sink to be modified after it is closed, but other implementations might not impose this restriction. + + HRESULT Close() + + + +

    Describes a geometric path that does not contain quadratic bezier curves or arcs.

    +
    + +

    A geometry sink consists of one or more figures. Each figure is made up of one or more line or Bezier curve segments. To create a figure, call the BeginFigure method and specify the figure's start point, then use AddLines and AddBeziers to add line and Bezier segments. When you are finished adding segments, call the EndFigure method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the Close method.

    To create geometry paths that can contain arcs and quadratic Bezier curves, use an .

    +
    + + dd316919 + ID2D1SimplifiedGeometrySink + ID2D1SimplifiedGeometrySink + + Describes a geometric path that does not contain quadratic Bezier curves or arcs. + + + A geometry sink consists of one or more figures. Each figure is made up of one or more line or Bezier curve segments. To create a figure, call the BeginFigure method and specify the figure's start point, then use AddLines and AddBeziers to add line and Bezier segments. When you are finished adding segments, call the EndFigure method. You can repeat this sequence to create additional figures. When you are finished creating figures, call the Close method. To create geometry paths that can contain arcs and quadratic Bezier curves, use an . + +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Specifies the method used to determine which points are inside the geometry described by this geometry sink and which points are outside.

    +
    +

    The method used to determine whether a given point is part of the geometry.

    + +

    The fill mode defaults to . To set the fill mode, call SetFillMode before the first call to BeginFigure. Not doing will put the geometry sink in an error state.

    +
    + + dd316937 + void ID2D1SimplifiedGeometrySink::SetFillMode([In] D2D1_FILL_MODE fillMode) + ID2D1SimplifiedGeometrySink::SetFillMode +
    + + +

    Specifies stroke and join options to be applied to new segments added to the geometry sink.

    +
    +

    Stroke and join options to be applied to new segments added to the geometry sink.

    + +

    After this method is called, the specified segment flags are applied to each segment subsequently added to the sink. The segment flags are applied to every additional segment until this method is called again and a different set of segment flags is specified.

    +
    + + dd316939 + void ID2D1SimplifiedGeometrySink::SetSegmentFlags([In] D2D1_PATH_SEGMENT vertexFlags) + ID2D1SimplifiedGeometrySink::SetSegmentFlags +
    + + +

    Starts a new figure at the specified point.

    +
    +

    The point at which to begin the new figure.

    +

    Whether the new figure should be hollow or filled.

    + +

    If this method is called while a figure is currently in progress, the interface is invalidated and all future methods will fail.

    +
    + + dd316929 + void ID2D1SimplifiedGeometrySink::BeginFigure([In] D2D_POINT_2F startPoint,[In] D2D1_FIGURE_BEGIN figureBegin) + ID2D1SimplifiedGeometrySink::BeginFigure +
    + + +

    Creates a sequence of lines using the specified points and adds them to the geometry sink.

    +
    +

    A reference to an array of one or more points that describe the lines to draw. A line is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by BeginFigure) to the first point in the array. if the array contains additional points, a line is drawn from the first point to the second point in the array, from the second point to the third point, and so on.

    +

    The number of points in the points array.

    + + dd316925 + void ID2D1SimplifiedGeometrySink::AddLines([In, Buffer] const D2D_POINT_2F* points,[In] unsigned int pointsCount) + ID2D1SimplifiedGeometrySink::AddLines +
    + + +

    Creates a sequence of cubic Bezier curves and adds them to the geometry sink.

    +
    +

    A reference to an array of Bezier segments that describes the Bezier curves to create. A curve is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by BeginFigure) to the end point of the first Bezier segment in the array. if the array contains additional Bezier segments, each subsequent Bezier segment uses the end point of the preceding Bezier segment as its start point.

    +

    The number of Bezier segments in the beziers array.

    + + dd316922 + void ID2D1SimplifiedGeometrySink::AddBeziers([In, Buffer] const D2D1_BEZIER_SEGMENT* beziers,[In] unsigned int beziersCount) + ID2D1SimplifiedGeometrySink::AddBeziers +
    + + +

    Ends the current figure; optionally, closes it.

    +
    +

    A value that indicates whether the current figure is closed. If the figure is closed, a line is drawn between the current point and the start point specified by BeginFigure.

    + +

    Calling this method without a matching call to BeginFigure places the geometry sink in an error state; subsequent calls are ignored, and the overall failure will be returned when the Close method is called.

    +
    + + dd316934 + void ID2D1SimplifiedGeometrySink::EndFigure([In] D2D1_FIGURE_END figureEnd) + ID2D1SimplifiedGeometrySink::EndFigure +
    + + +

    Closes the geometry sink, indicates whether it is in an error state, and resets the sink's error state.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Do not close the geometry sink while a figure is still in progress; doing so puts the geometry sink in an error state. For the close operation to be successful, there must be one EndFigure call for each call to BeginFigure.

    After calling this method, the geometry sink might not be usable. Direct2D implementations of this interface do not allow the geometry sink to be modified after it is closed, but other implementations might not impose this restriction.

    +
    + + dd316932 + HRESULT ID2D1SimplifiedGeometrySink::Close() + ID2D1SimplifiedGeometrySink::Close +
    + + + Creates a sequence of cubic Bezier curves and adds them to the geometry sink. + + An array of Bezier segments that describes the Bezier curves to create. A curve is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by BeginFigure) to the end point of the first Bezier segment in the array. If the array contains additional Bezier segments, each subsequent Bezier segment uses the end point of the preceding Bezier segment as its start point. + + + + Creates a sequence of lines using the specified points and adds them to the geometry sink. + + An array of one or more points that describe the lines to draw. A line is drawn from the geometry sink's current point (the end point of the last segment drawn or the location specified by BeginFigure) to the first point in the array. If the array contains additional points, a line is drawn from the first point to the second point in the array, from the second point to the third point, and so on. + + + + Starts a new figure at the specified point. + + The point at which to begin the new figure. + Whether the new figure should be hollow or filled. + + If this method is called while a figure is currently in progress, the interface is invalidated and all future methods will fail. + + + + + Closes the geometry sink, indicates whether it is in an error state, and resets the sink's error state. + + If this method succeeds, it returns . Otherwise, it returns an error code. + + Do not close the geometry sink while a figure is still in progress; doing so puts the geometry sink in an error state. For the close operation to be successful, there must be one EndFigure call for each call to BeginFigure.After calling this method, the geometry sink might not be usable. Direct2D implementations of this interface do not allow the geometry sink to be modified after it is closed, but other implementations might not impose this restriction. + + + + + Ends the current figure; optionally, closes it. + + A value that indicates whether the current figure is closed. If the figure is closed, a line is drawn between the current point and the start point specified by BeginFigure. + + Calling this method without a matching call to BeginFigure places the geometry sink in an error state; subsequent calls are ignored, and the overall failure will be returned when the Close method is called. + + + + + Specifies the method used to determine which points are inside the geometry described by this geometry sink and which points are outside. + + The method used to determine whether a given point is part of the geometry. + + The fill mode defaults to . To set the fill mode, call SetFillMode before the first call to BeginFigure. Not doing will put the geometry sink in an error state. + + + + + Specifies stroke and join options to be applied to new segments added to the geometry sink. + + Stroke and join options to be applied to new segments added to the geometry sink. + + After this method is called, the specified segment flags are applied to each segment subsequently added to the sink. The segment flags are applied to every additional segment until this method is called again and a different set of segment flags is specified. + + + + +

    Paints an area with a solid color.

    +
    + + dd372207 + ID2D1SolidColorBrush + ID2D1SolidColorBrush +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves or sets the color of the solid color brush.

    +
    + + dd372209 + GetColor / SetColor + GetColor + D2D_COLOR_F ID2D1SolidColorBrush::GetColor() +
    + + +

    Specifies the color of this solid color brush.

    +
    +

    The color of this solid color brush.

    + +

    To help create colors, Direct2D provides the ColorF class. It offers several helper methods for creating colors and provides a set or predefined colors.

    +
    + + dd372211 + void ID2D1SolidColorBrush::SetColor([In] const D2D_COLOR_F* color) + ID2D1SolidColorBrush::SetColor +
    + + +

    Retrieves the color of the solid color brush.

    +
    +

    The color of this solid color brush.

    + + dd372209 + D2D_COLOR_F ID2D1SolidColorBrush::GetColor() + ID2D1SolidColorBrush::GetColor +
    + + + Creates a new that has the specified color and opacity. + + an instance of + The red, green, blue, and alpha values of the brush's color. + + + + Creates a new that has the specified color and opacity. + + an instance of + The red, green, blue, and alpha values of the brush's color. + The base opacity of the brush. + + + +

    Represents a CPU-based rasterization stage in the transform pipeline graph.

    +
    + +

    specializes an implementation of the Shantzis calculations to a transform implemented as the source of an effect graph with the data being provided from sytem memory.

    +
    + + hh446908 + ID2D1SourceTransform + ID2D1SourceTransform +
    + + + [This documentation is preliminary and is subject to change.] + + The interface supplied to the transform to allow specifying the precision-based transform pass. + If the method succeeds, it returns . If it fails, it returns an error code. + + Provides a render information interface to the source transform to allow it to specify state to the rendering system. This part of the render information interface is shared with the GPU transform. + + + HRESULT ID2D1SourceTransform::SetRenderInfo([In] ID2D1RenderInfo* renderInfo) + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SourceTransform::Draw([In] ID2D1Bitmap1* target,[In] const RECT* drawRect,[In] D2D_POINT_2U targetOrigin) + + + +

    Represents a CPU-based rasterization stage in the transform pipeline graph.

    +
    + +

    specializes an implementation of the Shantzis calculations to a transform implemented as the source of an effect graph with the data being provided from sytem memory.

    +
    + + hh446908 + ID2D1SourceTransform + ID2D1SourceTransform +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the render information for the transform.

    +
    +

    The interface supplied to the transform to allow specifying the CPU based transform pass.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    Provides a render information interface to the source transform to allow it to specify state to the rendering system.

    +
    + + hh446912 + HRESULT ID2D1SourceTransform::SetRenderInfo([In] ID2D1RenderInfo* renderInfo) + ID2D1SourceTransform::SetRenderInfo +
    + + +

    Draws the transform to the graphics processing unit (GPU)?based Direct2D pipeline.

    +
    +

    The target to which the transform should be written.

    +

    The area within the source from which the image should be drawn.

    +

    The origin within the target bitmap to which the source data should be drawn.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    The implementation of the rasterizer guarantees that adding the renderRect to the targetOrigin does not exceed the bounds of the bitmap.

    When implementing this method you must update the bitmap in this way:

    1. Call the ID2D1Bitmap::Map method with the and + flags.
    2. Update the buffer this method returns.
    3. Call the ID2D1Bitmap::Unmap method.

    If you set the buffer precision manually on the associated object, it must handle different pixel formats in this method by calling . If you set the buffer precision manually, then you can rely on that format always being the one you provided.

    +
    + + hh446910 + HRESULT ID2D1SourceTransform::Draw([In] ID2D1Bitmap1* target,[In] const RECT* drawRect,[In] D2D_POINT_2U targetOrigin) + ID2D1SourceTransform::Draw +
    + + + + + + + + +

    Adds the given sprites to the end of this sprite batch.

    +
    + +

    In Direct2D, a sprite is defined by four properties: a destination rectangle, a source rectangle, a color, and a transform. Destination rectangles are mandatory, but the remaining properties are optional.

    Note??Always omit or pass a null value for properties you do not wish to use. This allows Direct2D to avoid storing values for those properties and to skip their handling entirely, which improves drawing speed. For example, suppose you have a batch of 500 sprites, and you do not wish to transform any of their destination rectangles. Rather than passing an array of identity matrices, simply omit the transforms parameter. This allows Direct2D to avoid storing any transforms and will yield the fastest drawing performance. On the other hand, if any sprite in the batch has any value set for a property, then internally Direct2D must allocate space for that property array and assign every sprite a value for that property (even if it?s just the default value).? +
    + + mt619834 + ID2D1SpriteBatch + ID2D1SpriteBatch +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the number of sprites in this sprite batch.

    +
    + + mt619836 + GetSpriteCount + GetSpriteCount + unsigned int ID2D1SpriteBatch::GetSpriteCount() +
    + + +

    Adds the given sprites to the end of this sprite batch.

    +
    +

    The number of sprites to be added. This determines how many strides into each given array Direct2D will read.

    +

    A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.

    +

    A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites. Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the added sprites.

    +

    A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped.

    Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the added sprites.

    +

    A reference to an array containing the transforms to apply to each sprite?s destination rectangle.

    Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the added sprites.

    +

    Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each added sprite.

    +

    Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each added sprite.

    +

    Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each added sprite.

    +

    Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each added sprite.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    In Direct2D, a sprite is defined by four properties: a destination rectangle, a source rectangle, a color, and a transform. Destination rectangles are mandatory, but the remaining properties are optional.

    Note??Always omit or pass a null value for properties you do not wish to use. This allows Direct2D to avoid storing values for those properties and to skip their handling entirely, which improves drawing speed. For example, suppose you have a batch of 500 sprites, and you do not wish to transform any of their destination rectangles. Rather than passing an array of identity matrices, simply omit the transforms parameter. This allows Direct2D to avoid storing any transforms and will yield the fastest drawing performance. On the other hand, if any sprite in the batch has any value set for a property, then internally Direct2D must allocate space for that property array and assign every sprite a value for that property (even if it?s just the default value).? +
    + + mt619834 + HRESULT ID2D1SpriteBatch::AddSprites([In] unsigned int spriteCount,[In, Buffer] const D2D_RECT_F* destinationRectangles,[In, Buffer, Optional] const D2D_RECT_U* sourceRectangles,[In, Buffer, Optional] const D2D_COLOR_F* colors,[In, Buffer, Optional] const D2D_MATRIX_3X2_F* transforms,[In] unsigned int destinationRectanglesStride,[In] unsigned int sourceRectanglesStride,[In] unsigned int colorsStride,[In] unsigned int transformsStride) + ID2D1SpriteBatch::AddSprites +
    + + +

    Updates the properties of the specified sprites in this sprite batch. Providing a null value for any property will leave that property unmodified for that sprite.

    +
    +

    The index of the first sprite in this sprite batch to update.

    +

    The number of sprites to update with new properties. This determines how many strides into each given array Direct2D will read.

    +

    A reference to an array containing the destination rectangles specifying where to draw the sprites on the destination device context.

    +

    A reference to an array containing the source rectangles specifying the regions of the source bitmap to draw as sprites.

    Direct2D will use the entire source bitmap for sprites that are assigned a null value or the InfiniteRectU. If this parameter is omitted entirely or set to a null value, then Direct2D will use the entire source bitmap for all the updated sprites.

    +

    A reference to an array containing the colors to apply to each sprite. The output color is the result of component-wise multiplication of the source bitmap color and the provided color. The output color is not clamped.

    Direct2D will not change the color of sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not change the color of any of the updated sprites.

    +

    A reference to an array containing the transforms to apply to each sprite?s destination rectangle.

    Direct2D will not transform the destination rectangle of any sprites that are assigned a null value. If this parameter is omitted entirely or set to a null value, then Direct2D will not transform the destination rectangle of any of the updated sprites.

    +

    Specifies the distance, in bytes, between each rectangle in the destinationRectangles array. If you provide a stride of 0, then the same destination rectangle will be used for each updated sprite.

    +

    Specifies the distance, in bytes, between each rectangle in the sourceRectangles array (if that array is given). If you provide a stride of 0, then the same source rectangle will be used for each updated sprite.

    +

    Specifies the distance, in bytes, between each color in the colors array (if that array is given). If you provide a stride of 0, then the same color will be used for each updated sprite.

    +

    Specifies the distance, in bytes, between each transform in the transforms array (if that array is given). If you provide a stride of 0, then the same transform will be used for each updated sprite.

    +

    Returns on success. Returns E_INVALIDARG if an invalid value was passed to the method. In this case, no sprites are modified by this call to SetSprites.

    + + mt604121 + HRESULT ID2D1SpriteBatch::SetSprites([In] unsigned int startIndex,[In] unsigned int spriteCount,[In, Buffer, Optional] const D2D_RECT_F* destinationRectangles,[In, Buffer, Optional] const D2D_RECT_U* sourceRectangles,[In, Buffer, Optional] const D2D_COLOR_F* colors,[In, Buffer, Optional] const D2D_MATRIX_3X2_F* transforms,[In] unsigned int destinationRectanglesStride,[In] unsigned int sourceRectanglesStride,[In] unsigned int colorsStride,[In] unsigned int transformsStride) + ID2D1SpriteBatch::SetSprites +
    + + +

    Retrieves the specified subset of sprites from this sprite batch. For the best performance, use nullptr for properties that you do not need to retrieve.

    +
    +

    The index of the first sprite in this sprite batch to retrieve.

    +

    The number of sprites to retrieve.

    +

    When this method returns, contains a reference to an array containing the destination rectangles for the retrieved sprites.

    +

    When this method returns, contains a reference to an array containing the source rectangles for the retrieved sprites.

    The InfiniteRectU is returned for any sprites that were not assigned a source rectangle.

    +

    When this method returns, contains a reference to an array containing the colors to be applied to the retrieved sprites.

    The color {1.0f, 1.0f, 1.0f, 1.0f} is returned for any sprites that were not assigned a color.

    +

    When this method returns, contains a reference to an array containing the transforms to be applied to the retrieved sprites.

    The identity matrix is returned for any sprites that were not assigned a transform.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt619837 + HRESULT ID2D1SpriteBatch::GetSprites([In] unsigned int startIndex,[In] unsigned int spriteCount,[Out, Buffer, Optional] D2D_RECT_F* destinationRectangles,[Out, Buffer, Optional] D2D_RECT_U* sourceRectangles,[Out, Buffer, Optional] D2D_COLOR_F* colors,[Out, Buffer, Optional] D2D_MATRIX_3X2_F* transforms) + ID2D1SpriteBatch::GetSprites +
    + + +

    Retrieves the number of sprites in this sprite batch.

    +
    +

    Returns the number of sprites in this sprite batch

    + + mt619836 + unsigned int ID2D1SpriteBatch::GetSpriteCount() + ID2D1SpriteBatch::GetSpriteCount +
    + + +

    Removes all sprites from this sprite batch.

    +
    + + mt619835 + void ID2D1SpriteBatch::Clear() + ID2D1SpriteBatch::Clear +
    + + + Initializes a new instance of the . + + + + +

    Describes the caps, miter limit, line join, and dash information for a stroke.

    +
    + + dd372217 + ID2D1StrokeStyle + ID2D1StrokeStyle +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the type of shape used at the beginning of a stroke.

    +
    + + dd372244 + GetStartCap + GetStartCap + D2D1_CAP_STYLE ID2D1StrokeStyle::GetStartCap() +
    + + +

    Retrieves the type of shape used at the end of a stroke.

    +
    + + dd372238 + GetEndCap + GetEndCap + D2D1_CAP_STYLE ID2D1StrokeStyle::GetEndCap() +
    + + +

    Gets a value that specifies how the ends of each dash are drawn.

    +
    + + dd372218 + GetDashCap + GetDashCap + D2D1_CAP_STYLE ID2D1StrokeStyle::GetDashCap() +
    + + +

    Retrieves the limit on the ratio of the miter length to half the stroke's thickness.

    +
    + + dd372242 + GetMiterLimit + GetMiterLimit + float ID2D1StrokeStyle::GetMiterLimit() +
    + + +

    Retrieves the type of joint used at the vertices of a shape's outline.

    +
    + + dd372240 + GetLineJoin + GetLineJoin + D2D1_LINE_JOIN ID2D1StrokeStyle::GetLineJoin() +
    + + +

    Retrieves a value that specifies how far in the dash sequence the stroke will start.

    +
    + + dd372234 + GetDashOffset + GetDashOffset + float ID2D1StrokeStyle::GetDashOffset() +
    + + +

    Gets a value that describes the stroke's dash pattern.

    +
    + +

    If a custom dash style is specified, the dash pattern is described by the dashes array, which can be retrieved by calling the GetDashes method.

    +
    + + dd372236 + GetDashStyle + GetDashStyle + D2D1_DASH_STYLE ID2D1StrokeStyle::GetDashStyle() +
    + + +

    Retrieves the number of entries in the dashes array.

    +
    + + dd372232 + GetDashesCount + GetDashesCount + unsigned int ID2D1StrokeStyle::GetDashesCount() +
    + + +

    Retrieves the type of shape used at the beginning of a stroke.

    +
    +

    The type of shape used at the beginning of a stroke.

    + + dd372244 + D2D1_CAP_STYLE ID2D1StrokeStyle::GetStartCap() + ID2D1StrokeStyle::GetStartCap +
    + + +

    Retrieves the type of shape used at the end of a stroke.

    +
    +

    The type of shape used at the end of a stroke.

    + + dd372238 + D2D1_CAP_STYLE ID2D1StrokeStyle::GetEndCap() + ID2D1StrokeStyle::GetEndCap +
    + + +

    Gets a value that specifies how the ends of each dash are drawn.

    +
    +

    A value that specifies how the ends of each dash are drawn.

    + + dd372218 + D2D1_CAP_STYLE ID2D1StrokeStyle::GetDashCap() + ID2D1StrokeStyle::GetDashCap +
    + + +

    Retrieves the limit on the ratio of the miter length to half the stroke's thickness.

    +
    +

    A positive number greater than or equal to 1.0f that describes the limit on the ratio of the miter length to half the stroke's thickness.

    + + dd372242 + float ID2D1StrokeStyle::GetMiterLimit() + ID2D1StrokeStyle::GetMiterLimit +
    + + +

    Retrieves the type of joint used at the vertices of a shape's outline.

    +
    +

    A value that specifies the type of joint used at the vertices of a shape's outline.

    + + dd372240 + D2D1_LINE_JOIN ID2D1StrokeStyle::GetLineJoin() + ID2D1StrokeStyle::GetLineJoin +
    + + +

    Retrieves a value that specifies how far in the dash sequence the stroke will start.

    +
    +

    A value that specifies how far in the dash sequence the stroke will start.

    + + dd372234 + float ID2D1StrokeStyle::GetDashOffset() + ID2D1StrokeStyle::GetDashOffset +
    + + +

    Gets a value that describes the stroke's dash pattern.

    +
    +

    A value that describes the predefined dash pattern used, or if a custom dash style is used.

    + +

    If a custom dash style is specified, the dash pattern is described by the dashes array, which can be retrieved by calling the GetDashes method.

    +
    + + dd372236 + D2D1_DASH_STYLE ID2D1StrokeStyle::GetDashStyle() + ID2D1StrokeStyle::GetDashStyle +
    + + +

    Retrieves the number of entries in the dashes array.

    +
    +

    The number of entries in the dashes array if the stroke is dashed; otherwise, 0.

    + + dd372232 + unsigned int ID2D1StrokeStyle::GetDashesCount() + ID2D1StrokeStyle::GetDashesCount +
    + + +

    Copies the dash pattern to the specified array.

    +
    +

    A reference to an array that will receive the dash pattern. The array must be able to contain at least as many elements as specified by dashesCount. You must allocate storage for this array.

    +

    The number of dashes to copy. If this value is less than the number of dashes in the stroke style's dashes array, the returned dashes are truncated to dashesCount. If this value is greater than the number of dashes in the stroke style's dashes array, the extra dashes are set to 0.0f. To obtain the actual number of dashes in the stroke style's dashes array, use the GetDashesCount method.

    + +

    The dashes are specified in units that are a multiple of the stroke width, with subsequent members of the array indicating the dashes and gaps between dashes: the first entry indicates a filled dash, the second a gap, and so on.

    +
    + + dd372230 + void ID2D1StrokeStyle::GetDashes([Out, Buffer] float* dashes,[In] unsigned int dashesCount) + ID2D1StrokeStyle::GetDashes +
    + + + Creates an that describes start cap, dash pattern, and other features of a stroke. + + an instance of + a definition for this render target + + + + Creates an that describes start cap, dash pattern, and other features of a stroke. + + an instance of + A structure that describes the stroke's line cap, dash offset, and other details of a stroke. + An array whose elements are set to the length of each dash and space in the dash pattern. The first element sets the length of a dash, the second element sets the length of a space, the third element sets the length of a dash, and so on. The length of each dash and space in the dash pattern is the product of the element value in the array and the stroke width. + + + +

    Describes the caps, miter limit, line join, and dash information for a stroke.

    +
    + +

    This interface adds functionality to .

    +
    + + hh446914 + ID2D1StrokeStyle1 + ID2D1StrokeStyle1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the stroke transform type.

    +
    + + hh446916 + GetStrokeTransformType + GetStrokeTransformType + D2D1_STROKE_TRANSFORM_TYPE ID2D1StrokeStyle1::GetStrokeTransformType() +
    + + +

    Gets the stroke transform type.

    +
    +

    This method returns the stroke transform type.

    + + hh446916 + D2D1_STROKE_TRANSFORM_TYPE ID2D1StrokeStyle1::GetStrokeTransformType() + ID2D1StrokeStyle1::GetStrokeTransformType +
    + + + Initializes a new instance of the class. + + The factory. + No documentation. + HRESULT ID2D1Factory1::CreateStrokeStyle([In] const D2D1_STROKE_STYLE_PROPERTIES1* strokeStyleProperties,[In, Buffer, Optional] const float* dashes,[In] unsigned int dashesCount,[Out, Fast] ID2D1StrokeStyle1** strokeStyle) + + + + Initializes a new instance of the class. + + The factory. + No documentation. + No documentation. + HRESULT ID2D1Factory1::CreateStrokeStyle([In] const D2D1_STROKE_STYLE_PROPERTIES1* strokeStyleProperties,[In, Buffer, Optional] const float* dashes,[In] unsigned int dashesCount,[Out, Fast] ID2D1StrokeStyle1** strokeStyle) + + HRESULT ID2D1Factory1::CreateStrokeStyle([In] const D2D1_STROKE_STYLE_PROPERTIES1* strokeStyleProperties,[In, Buffer, Optional] const float* dashes,[In] unsigned int dashesCount,[Out, Fast] ID2D1StrokeStyle1** strokeStyle) + + It is valid to specify a dash array only if is also specified. + + + + +

    This interface performs all the same functions as the interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.

    +
    + + dn890789 + ID2D1SvgAttribute + ID2D1SvgAttribute +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetElement + GetElement + void ID2D1SvgAttribute::GetElement([Out, Optional] ID2D1SvgElement** element) + + + + No documentation. + + No documentation. + + void ID2D1SvgAttribute::GetElement([Out, Optional] ID2D1SvgElement** element) + ID2D1SvgAttribute::GetElement + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgAttribute::Clone([Out] ID2D1SvgAttribute** attribute) + ID2D1SvgAttribute::Clone + + + +

    This interface performs all the same functions as the interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.

    +
    + + dn890789 + ID2D1SvgDocument + ID2D1SvgDocument +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetViewportSize / SetViewportSize + GetViewportSize + D2D_SIZE_F ID2D1SvgDocument::GetViewportSize() + + + + No documentation. + + + GetRoot / SetRoot + GetRoot + void ID2D1SvgDocument::GetRoot([Out, Optional] ID2D1SvgElement** root) + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgDocument::SetViewportSize([In] D2D_SIZE_F viewportSize) + ID2D1SvgDocument::SetViewportSize + + + + No documentation. + + No documentation. + + D2D_SIZE_F ID2D1SvgDocument::GetViewportSize() + ID2D1SvgDocument::GetViewportSize + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgDocument::SetRoot([In, Optional] ID2D1SvgElement* root) + ID2D1SvgDocument::SetRoot + + + + No documentation. + + No documentation. + + void ID2D1SvgDocument::GetRoot([Out, Optional] ID2D1SvgElement** root) + ID2D1SvgDocument::GetRoot + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgDocument::FindElementById([In] const wchar_t* id,[Out, Optional] ID2D1SvgElement** svgElement) + ID2D1SvgDocument::FindElementById + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgDocument::Serialize([In] IStream* outputXmlStream,[In, Optional] ID2D1SvgElement* subtree) + ID2D1SvgDocument::Serialize + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgDocument::Deserialize([In] IStream* inputXmlStream,[Out] ID2D1SvgElement** subtree) + ID2D1SvgDocument::Deserialize + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgDocument::CreatePaint([In] D2D1_SVG_PAINT_TYPE paintType,[In, Optional] const D2D_COLOR_F* color,[In, Optional] const wchar_t* id,[Out] ID2D1SvgPaint** paint) + ID2D1SvgDocument::CreatePaint + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgDocument::CreateStrokeDashArray([In, Buffer, Optional] const D2D1_SVG_LENGTH* dashes,[In] unsigned int dashesCount,[Out] ID2D1SvgStrokeDashArray** strokeDashArray) + ID2D1SvgDocument::CreateStrokeDashArray + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgDocument::CreatePointCollection([In, Buffer, Optional] const D2D_POINT_2F* points,[In] unsigned int pointsCount,[Out] ID2D1SvgPointCollection** pointCollection) + ID2D1SvgDocument::CreatePointCollection + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgDocument::CreatePathData([In, Buffer, Optional] const float* segmentData,[In] unsigned int segmentDataCount,[In, Buffer, Optional] const D2D1_SVG_PATH_COMMAND* commands,[In] unsigned int commandsCount,[Out] ID2D1SvgPathData** pathData) + ID2D1SvgDocument::CreatePathData + + + +

    Interface for all SVG elements.

    +
    + + mt797830 + ID2D1SvgElement + ID2D1SvgElement +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetDocument + GetDocument + void ID2D1SvgElement::GetDocument([Out, Optional] ID2D1SvgDocument** document) + + + + No documentation. + + + GetTagNameLength + GetTagNameLength + unsigned int ID2D1SvgElement::GetTagNameLength() + + + + No documentation. + + + IsTextContent + IsTextContent + BOOL ID2D1SvgElement::IsTextContent() + + + + No documentation. + + + GetParent + GetParent + void ID2D1SvgElement::GetParent([Out, Optional] ID2D1SvgElement** parent) + + + + No documentation. + + + GetFirstChild + GetFirstChild + void ID2D1SvgElement::GetFirstChild([Out, Optional] ID2D1SvgElement** child) + + + + No documentation. + + + GetLastChild + GetLastChild + void ID2D1SvgElement::GetLastChild([Out, Optional] ID2D1SvgElement** child) + + + + No documentation. + + + GetSpecifiedAttributeCount + GetSpecifiedAttributeCount + unsigned int ID2D1SvgElement::GetSpecifiedAttributeCount() + + + + No documentation. + + + GetTextValueLength + GetTextValueLength + unsigned int ID2D1SvgElement::GetTextValueLength() + + + + No documentation. + + No documentation. + + void ID2D1SvgElement::GetDocument([Out, Optional] ID2D1SvgDocument** document) + ID2D1SvgElement::GetDocument + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::GetTagName([Out, Buffer] wchar_t* name,[In] unsigned int nameCount) + ID2D1SvgElement::GetTagName + + + + No documentation. + + No documentation. + + unsigned int ID2D1SvgElement::GetTagNameLength() + ID2D1SvgElement::GetTagNameLength + + + + No documentation. + + No documentation. + + BOOL ID2D1SvgElement::IsTextContent() + ID2D1SvgElement::IsTextContent + + + + No documentation. + + No documentation. + + void ID2D1SvgElement::GetParent([Out, Optional] ID2D1SvgElement** parent) + ID2D1SvgElement::GetParent + + + + No documentation. + + No documentation. + + BOOL ID2D1SvgElement::HasChildren() + ID2D1SvgElement::HasChildren + + + + No documentation. + + No documentation. + + void ID2D1SvgElement::GetFirstChild([Out, Optional] ID2D1SvgElement** child) + ID2D1SvgElement::GetFirstChild + + + + No documentation. + + No documentation. + + void ID2D1SvgElement::GetLastChild([Out, Optional] ID2D1SvgElement** child) + ID2D1SvgElement::GetLastChild + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::GetPreviousChild([In] ID2D1SvgElement* referenceChild,[Out, Optional] ID2D1SvgElement** previousChild) + ID2D1SvgElement::GetPreviousChild + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::GetNextChild([In] ID2D1SvgElement* referenceChild,[Out, Optional] ID2D1SvgElement** nextChild) + ID2D1SvgElement::GetNextChild + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::InsertChildBefore([In] ID2D1SvgElement* newChild,[In, Optional] ID2D1SvgElement* referenceChild) + ID2D1SvgElement::InsertChildBefore + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::AppendChild([In] ID2D1SvgElement* newChild) + ID2D1SvgElement::AppendChild + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::ReplaceChild([In] ID2D1SvgElement* newChild,[In] ID2D1SvgElement* oldChild) + ID2D1SvgElement::ReplaceChild + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::RemoveChild([In] ID2D1SvgElement* oldChild) + ID2D1SvgElement::RemoveChild + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::CreateChild([In, Optional] const wchar_t* tagName,[Out] ID2D1SvgElement** newChild) + ID2D1SvgElement::CreateChild + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + BOOL ID2D1SvgElement::IsAttributeSpecified([In] const wchar_t* name,[Out, Optional] BOOL* inherited) + ID2D1SvgElement::IsAttributeSpecified + + + + No documentation. + + No documentation. + + unsigned int ID2D1SvgElement::GetSpecifiedAttributeCount() + ID2D1SvgElement::GetSpecifiedAttributeCount + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::GetSpecifiedAttributeName([In] unsigned int index,[Out, Buffer] wchar_t* name,[In] unsigned int nameCount,[Out, Optional] BOOL* inherited) + ID2D1SvgElement::GetSpecifiedAttributeName + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::GetSpecifiedAttributeNameLength([In] unsigned int index,[Out] unsigned int* nameLength,[Out, Optional] BOOL* inherited) + ID2D1SvgElement::GetSpecifiedAttributeNameLength + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::RemoveAttribute([In] const wchar_t* name) + ID2D1SvgElement::RemoveAttribute + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::SetTextValue([In, Buffer] const wchar_t* name,[In] unsigned int nameCount) + ID2D1SvgElement::SetTextValue + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::GetTextValue([Out, Buffer] wchar_t* name,[In] unsigned int nameCount) + ID2D1SvgElement::GetTextValue + + + + No documentation. + + No documentation. + + unsigned int ID2D1SvgElement::GetTextValueLength() + ID2D1SvgElement::GetTextValueLength + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::SetAttributeValue([In] const wchar_t* name,[In] ID2D1SvgAttribute* value) + ID2D1SvgElement::SetAttributeValue + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::SetAttributeValue([In] const wchar_t* name,[In] D2D1_SVG_ATTRIBUTE_POD_TYPE type,[In, Buffer] const void* value,[In] unsigned int valueSizeInBytes) + ID2D1SvgElement::SetAttributeValue + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::SetAttributeValue([In] const wchar_t* name,[In] D2D1_SVG_ATTRIBUTE_STRING_TYPE type,[In] const wchar_t* value) + ID2D1SvgElement::SetAttributeValue + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::GetAttributeValue([In] const wchar_t* name,[In] const GUID& riid,[Out, Optional] void** value) + ID2D1SvgElement::GetAttributeValue + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::GetAttributeValue([In] const wchar_t* name,[In] D2D1_SVG_ATTRIBUTE_POD_TYPE type,[Out, Buffer] void* value,[In] unsigned int valueSizeInBytes) + ID2D1SvgElement::GetAttributeValue + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::GetAttributeValue([In] const wchar_t* name,[In] D2D1_SVG_ATTRIBUTE_STRING_TYPE type,[Out, Buffer] wchar_t* value,[In] unsigned int valueCount) + ID2D1SvgElement::GetAttributeValue + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgElement::GetAttributeValueLength([In] const wchar_t* name,[In] D2D1_SVG_ATTRIBUTE_STRING_TYPE type,[Out] unsigned int* valueLength) + ID2D1SvgElement::GetAttributeValueLength + + + +

    This object supplies the values for context-fill, context-stroke, and context-value that are used when rendering SVG glyphs.

    +
    + + mt750193 + ID2D1SvgGlyphStyle + ID2D1SvgGlyphStyle +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns or sets the requested fill parameters.

    +
    + + mt750194 + GetFill / SetFill + GetFill + void ID2D1SvgGlyphStyle::GetFill([Out, Optional] ID2D1Brush** brush) +
    + + +

    Returns the number of dashes in the dash array.

    +
    + + mt750196 + GetStrokeDashesCount + GetStrokeDashesCount + unsigned int ID2D1SvgGlyphStyle::GetStrokeDashesCount() +
    + + +

    Provides values to an SVG glyph for fill.

    +
    +

    Describes how the area is painted. A null brush will cause the context-fill value to come from the defaultFillBrush. If the defaultFillBrush is also null, the context-fill value will be 'none'. To set the ?context-fill? value, this method uses the provided brush with its opacity set to 1. To set the ?context-fill-opacity? value, this method uses the opacity of the provided brush.

    +

    This method returns an success or error code.

    + + mt750197 + HRESULT ID2D1SvgGlyphStyle::SetFill([In, Optional] ID2D1Brush* brush) + ID2D1SvgGlyphStyle::SetFill +
    + + +

    Returns the requested fill parameters.

    +
    +

    Describes how the area is painted.

    + + mt750194 + void ID2D1SvgGlyphStyle::GetFill([Out, Optional] ID2D1Brush** brush) + ID2D1SvgGlyphStyle::GetFill +
    + + +

    Provides values to an SVG glyph for stroke properties. The brush with opacity set to 1 is used as the 'context-stroke'. The opacity of the brush is used as the 'context-stroke-opacity' value.

    +
    +

    Describes how the stroke is painted. A null brush will cause the context-stroke value to be none.

    +

    Specifies the 'context-value' for the 'stroke-width' property.

    +

    Specifies the 'context-value' for the 'stroke-dasharray' property. A null value will cause the stroke-dasharray to be set to 'none'.

    +

    The the number of dashes in the dash array.

    +

    Specifies the 'context-value' for the 'stroke-dashoffset' property.

    +

    This method returns an success or error code.

    + + mt750198 + HRESULT ID2D1SvgGlyphStyle::SetStroke([In, Optional] ID2D1Brush* brush,[In] float strokeWidth,[In, Buffer, Optional] const float* dashes,[In] unsigned int dashesCount,[In] float dashOffset) + ID2D1SvgGlyphStyle::SetStroke +
    + + +

    Returns the number of dashes in the dash array.

    +
    +

    Returns the number of dashes in the dash array.

    + + mt750196 + unsigned int ID2D1SvgGlyphStyle::GetStrokeDashesCount() + ID2D1SvgGlyphStyle::GetStrokeDashesCount +
    + + +

    Returns the requested stroke parameters. Any parameters that are non-null will receive the value of the requested parameter.

    +
    +

    Describes how the stroke is painted.

    +

    The 'context-value' for the 'stroke-width' property.

    +

    The 'context-value' for the 'stroke-dasharray' property.

    +

    The the number of dashes in the dash array.

    +

    The 'context-value' for the 'stroke-dashoffset' property.

    + + mt750195 + void ID2D1SvgGlyphStyle::GetStroke([Out, Optional] ID2D1Brush** brush,[Out, Optional] float* strokeWidth,[Out, Buffer, Optional] float* dashes,[In] unsigned int dashesCount,[Out, Optional] float* dashOffset) + ID2D1SvgGlyphStyle::GetStroke +
    + + +

    Represents a bitmap that has been bound to an .

    +
    + + dd371109 + ID2D1SvgPaint + ID2D1SvgPaint +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetPaintType / SetPaintType + GetPaintType + D2D1_SVG_PAINT_TYPE ID2D1SvgPaint::GetPaintType() + + + + No documentation. + + + GetColor / SetColor + GetColor + void ID2D1SvgPaint::GetColor([Out] D2D_COLOR_F* color) + + + + No documentation. + + + GetIdLength + GetIdLength + unsigned int ID2D1SvgPaint::GetIdLength() + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgPaint::SetPaintType([In] D2D1_SVG_PAINT_TYPE paintType) + ID2D1SvgPaint::SetPaintType + + + + No documentation. + + No documentation. + + D2D1_SVG_PAINT_TYPE ID2D1SvgPaint::GetPaintType() + ID2D1SvgPaint::GetPaintType + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgPaint::SetColor([In] const D2D_COLOR_F* color) + ID2D1SvgPaint::SetColor + + + + No documentation. + + No documentation. + + void ID2D1SvgPaint::GetColor([Out] D2D_COLOR_F* color) + ID2D1SvgPaint::GetColor + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgPaint::SetId([In] const wchar_t* id) + ID2D1SvgPaint::SetId + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgPaint::GetId([Out, Buffer] wchar_t* id,[In] unsigned int idCount) + ID2D1SvgPaint::GetId + + + + No documentation. + + No documentation. + + unsigned int ID2D1SvgPaint::GetIdLength() + ID2D1SvgPaint::GetIdLength + + + +

    This interface performs all the same functions as the interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.

    +
    + + dn890789 + ID2D1SvgPathData + ID2D1SvgPathData +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetSegmentDataCount + GetSegmentDataCount + unsigned int ID2D1SvgPathData::GetSegmentDataCount() + + + + No documentation. + + + GetCommandsCount + GetCommandsCount + unsigned int ID2D1SvgPathData::GetCommandsCount() + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgPathData::RemoveSegmentDataAtEnd([In] unsigned int dataCount) + ID2D1SvgPathData::RemoveSegmentDataAtEnd + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgPathData::UpdateSegmentData([In, Buffer] const float* data,[In] unsigned int dataCount,[In] unsigned int startIndex) + ID2D1SvgPathData::UpdateSegmentData + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgPathData::GetSegmentData([Out, Buffer] float* data,[In] unsigned int dataCount,[In] unsigned int startIndex) + ID2D1SvgPathData::GetSegmentData + + + + No documentation. + + No documentation. + + unsigned int ID2D1SvgPathData::GetSegmentDataCount() + ID2D1SvgPathData::GetSegmentDataCount + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgPathData::RemoveCommandsAtEnd([In] unsigned int commandsCount) + ID2D1SvgPathData::RemoveCommandsAtEnd + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgPathData::UpdateCommands([In, Buffer] const D2D1_SVG_PATH_COMMAND* commands,[In] unsigned int commandsCount,[In] unsigned int startIndex) + ID2D1SvgPathData::UpdateCommands + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgPathData::GetCommands([Out, Buffer] D2D1_SVG_PATH_COMMAND* commands,[In] unsigned int commandsCount,[In] unsigned int startIndex) + ID2D1SvgPathData::GetCommands + + + + No documentation. + + No documentation. + + unsigned int ID2D1SvgPathData::GetCommandsCount() + ID2D1SvgPathData::GetCommandsCount + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgPathData::CreatePathGeometry([In] D2D1_FILL_MODE fillMode,[Out] ID2D1PathGeometry1** pathGeometry) + ID2D1SvgPathData::CreatePathGeometry + + + +

    Interface describing an SVG points value in a polyline or polygon element.

    +
    + + mt797912 + ID2D1SvgPointCollection + ID2D1SvgPointCollection +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetPointsCount + GetPointsCount + unsigned int ID2D1SvgPointCollection::GetPointsCount() + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgPointCollection::RemovePointsAtEnd([In] unsigned int pointsCount) + ID2D1SvgPointCollection::RemovePointsAtEnd + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgPointCollection::UpdatePoints([In, Buffer] const D2D_POINT_2F* points,[In] unsigned int pointsCount,[In] unsigned int startIndex) + ID2D1SvgPointCollection::UpdatePoints + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgPointCollection::GetPoints([Out, Buffer] D2D_POINT_2F* points,[In] unsigned int pointsCount,[In] unsigned int startIndex) + ID2D1SvgPointCollection::GetPoints + + + + No documentation. + + No documentation. + + unsigned int ID2D1SvgPointCollection::GetPointsCount() + ID2D1SvgPointCollection::GetPointsCount + + + +

    This interface performs all the same functions as the interface, plus it enables functionality such as ink rendering, gradient mesh rendering, and improved image loading.

    +
    + + dn890789 + ID2D1SvgStrokeDashArray + ID2D1SvgStrokeDashArray +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetDashesCount + GetDashesCount + unsigned int ID2D1SvgStrokeDashArray::GetDashesCount() + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID2D1SvgStrokeDashArray::RemoveDashesAtEnd([In] unsigned int dashesCount) + ID2D1SvgStrokeDashArray::RemoveDashesAtEnd + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgStrokeDashArray::UpdateDashes([In, Buffer] const D2D1_SVG_LENGTH* dashes,[In] unsigned int dashesCount,[In] unsigned int startIndex) + ID2D1SvgStrokeDashArray::UpdateDashes + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgStrokeDashArray::UpdateDashes([In, Buffer] const float* dashes,[In] unsigned int dashesCount,[In] unsigned int startIndex) + ID2D1SvgStrokeDashArray::UpdateDashes + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgStrokeDashArray::GetDashes([Out, Buffer] D2D1_SVG_LENGTH* dashes,[In] unsigned int dashesCount,[In] unsigned int startIndex) + ID2D1SvgStrokeDashArray::GetDashes + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID2D1SvgStrokeDashArray::GetDashes([Out, Buffer] float* dashes,[In] unsigned int dashesCount,[In] unsigned int startIndex) + ID2D1SvgStrokeDashArray::GetDashes + + + + No documentation. + + No documentation. + + unsigned int ID2D1SvgStrokeDashArray::GetDashesCount() + ID2D1SvgStrokeDashArray::GetDashesCount + + + +

    Populates an object with triangles.

    +
    + + dd372245 + ID2D1TessellationSink + ID2D1TessellationSink +
    + + + Copies the specified triangles to the sink. + + An array of structures that describe the triangles to add to the sink. + void AddTriangles([In, Buffer] const D2D1_TRIANGLE* triangles,[None] UINT trianglesCount) + + + + Closes the sink. + + HRESULT Close() + + + +

    Populates an object with triangles.

    +
    + + dd372245 + ID2D1TessellationSink + ID2D1TessellationSink +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Copies the specified triangles to the sink.

    +
    +

    An array of structures that describe the triangles to add to the sink.

    +

    The number of triangles to copy from the triangles array.

    + + dd372248 + void ID2D1TessellationSink::AddTriangles([In, Buffer] const D2D1_TRIANGLE* triangles,[In] unsigned int trianglesCount) + ID2D1TessellationSink::AddTriangles +
    + + +

    Closes the sink and returns its error status.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd372250 + HRESULT ID2D1TessellationSink::Close() + ID2D1TessellationSink::Close +
    + + +

    Represents the base interface for all of the transforms implemented by the transform author.

    +
    + +

    Transforms are aggregated by effect authors. This interface provides a common interface for implementing the Shantzis rectangle calculations which is the basis for all the transform processing in Direct2D imaging extensions. These calculations are described in the paper A model for efficient and flexible image computing.

    +
    + + hh446919 + ID2D1Transform + ID2D1Transform + + Represents the base interface for all of the transforms implemented by the transform author. + + ID2D1Transform +
    + + +

    [This documentation is preliminary and is subject to change.]

    Applies to: desktop apps | Metro style apps

    Allows a transform to state how it would map a rectangle requested on its output to a set of sample rectangles on its input.

    +
    +

    The output rectangle to which the inputs must be mapped.

    +

    The corresponding set of inputs. The inputs will directly correspond to the transform inputs.

    + +

    The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.

    The transform implementation must regard this method as purely functional. It can base the mapped input and output rectangles on its current state as specified by the encapsulating effect properties. However, it must not change its own state in response to this method being invoked. The DirectImage renderer implementation reserves the right to call this method at any time and in any sequence.

    +
    + hh446945 + HRESULT ID2D1Transform::MapOutputRectToInputRects([In] const RECT* outputRect,[Out, Buffer] RECT* inputRects,[In] unsigned int inputRectsCount) + ID2D1Transform::MapOutputRectToInputRects +
    + + +

    [This documentation is preliminary and is subject to change.]

    Applies to: desktop apps | Metro style apps

    Performs the inverse mapping to MapOutputRectToInputRects.

    +
    + No documentation. + No documentation. + No documentation. + No outputOpaqueSubRect. + +

    The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.

    The transform implementation must regard this method as purely functional. It can base the mapped input and output rectangles on its current state as specified by the encapsulating effect properties. However, it must not change its own state in response to this method being invoked. The Direct2D renderer implementation reserves the right to call this method at any time and in any sequence.

    +
    + hh446943 + HRESULT ID2D1Transform::MapInputRectsToOutputRect([In, Buffer] const RECT* inputRects,[In, Buffer] const RECT* inputOpaqueSubRects,[In] unsigned int inputRectCount,[Out] RECT* outputRect,[Out] RECT* outputOpaqueSubRect) + ID2D1Transform::MapInputRectsToOutputRect +
    + + + No documentation. + + No documentation. + No documentation. + The rectangle invalidated. + HRESULT ID2D1Transform::MapInvalidRect([In] unsigned int inputIndex,[In] RECT invalidInputRect,[Out] RECT* invalidOutputRect) + ID2D1Transform::MapInvalidRect + + + +

    Represents a geometry that has been transformed.

    +
    + +

    Using an rather than transforming a geometry by using a render target's transform enables you to transform a geometry without transforming its stroke.

    +
    + + dd372252 + ID2D1TransformedGeometry + ID2D1TransformedGeometry +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the source geometry of this transformed geometry object.

    +
    + + dd372255 + GetSourceGeometry + GetSourceGeometry + void ID2D1TransformedGeometry::GetSourceGeometry([Out] ID2D1Geometry** sourceGeometry) +
    + + +

    Retrieves the matrix used to transform the object's source geometry.

    +
    + + dd372256 + GetTransform + GetTransform + void ID2D1TransformedGeometry::GetTransform([Out] D2D_MATRIX_3X2_F* transform) +
    + + +

    Retrieves the source geometry of this transformed geometry object.

    +
    +

    When this method returns, contains a reference to a reference to the source geometry for this transformed geometry object. This parameter is passed uninitialized.

    + + dd372255 + void ID2D1TransformedGeometry::GetSourceGeometry([Out] ID2D1Geometry** sourceGeometry) + ID2D1TransformedGeometry::GetSourceGeometry +
    + + +

    Retrieves the matrix used to transform the object's source geometry.

    +
    + No documentation. + + dd372256 + void ID2D1TransformedGeometry::GetTransform([Out] D2D_MATRIX_3X2_F* transform) + ID2D1TransformedGeometry::GetTransform +
    + + + Default Constructor for a . + + an instance of + + + + + +

    Represents an image source which shares resources with an original image source.

    +
    + + dn952305 + ID2D1TransformedImageSource + ID2D1TransformedImageSource +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the source image used to create the transformed image source. This value corresponds to the value passed to CreateTransformedImageSource.

    +
    + + dn952307 + GetSource + GetSource + void ID2D1TransformedImageSource::GetSource([Out, Optional] ID2D1ImageSource** imageSource) +
    + + +

    Retrieves the properties specified when the transformed image source was created. This value corresponds to the value passed to CreateTransformedImageSource.

    +
    + + dn952306 + GetProperties + GetProperties + void ID2D1TransformedImageSource::GetProperties([Out] D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES* properties) +
    + + +

    Retrieves the source image used to create the transformed image source. This value corresponds to the value passed to CreateTransformedImageSource.

    +
    + No documentation. + + dn952307 + void ID2D1TransformedImageSource::GetSource([Out, Optional] ID2D1ImageSource** imageSource) + ID2D1TransformedImageSource::GetSource +
    + + +

    Retrieves the properties specified when the transformed image source was created. This value corresponds to the value passed to CreateTransformedImageSource.

    +
    + No documentation. + + dn952306 + void ID2D1TransformedImageSource::GetProperties([Out] D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES* properties) + ID2D1TransformedImageSource::GetProperties +
    + + + Initializes a new instance of the . + + + + +

    Represents a graph of transform nodes.

    +
    + +

    This interface allows a graph of transform nodes to be specified. This interface is passed to to allow an effect implementation to specify a graph of transforms or a single transform.

    +
    + + hh446920 + ID2D1TransformGraph + ID2D1TransformGraph +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the number of inputs to the transform graph.

    +
    + + hh871467 + GetInputCount + GetInputCount + unsigned int ID2D1TransformGraph::GetInputCount() +
    + + +

    Returns the number of inputs to the transform graph.

    +
    +

    The number of inputs to this transform graph.

    + + hh871467 + unsigned int ID2D1TransformGraph::GetInputCount() + ID2D1TransformGraph::GetInputCount +
    + + +

    Sets a single transform node as being equivalent to the whole graph.

    +
    +

    The node to be set.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.

    ?

    + +

    This equivalent to calling , adding a single node, connecting all of the node inputs to the effect inputs in order, and setting the transform not as the graph output.

    +
    + + hh446935 + HRESULT ID2D1TransformGraph::SetSingleTransformNode([In] ID2D1TransformNode* node) + ID2D1TransformGraph::SetSingleTransformNode +
    + + +

    Adds the provided node to the transform graph.

    +
    +

    The node that will be added to the transform graph.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred
    E_OUTOFMEMORYDirect2D could not allocate sufficient memory to complete the call.

    ?

    + +

    This adds a transform node to the transform graph. A node must be added to the transform graph before it can be interconnected in any way. +

    A transform graph cannot be directly added to another transform graph. + Only interfaces derived from can be added to the transform graph. +

    +
    + + hh446922 + HRESULT ID2D1TransformGraph::AddNode([In] ID2D1TransformNode* node) + ID2D1TransformGraph::AddNode +
    + + +

    Removes the provided node from the transform graph.

    +
    +

    The node that will be removed from the transform graph.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred
    D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32())Direct2D could not locate the specified node.

    ?

    + +

    The node must already exist in the graph; otherwise, the call fails with D2DERR_NOT_FOUND.

    Any connections to this node will be removed when the node is removed.

    After the node is removed, it cannot be used by the interface until it has been added to the graph by AddNode.

    +
    + + hh446931 + HRESULT ID2D1TransformGraph::RemoveNode([In] ID2D1TransformNode* node) + ID2D1TransformGraph::RemoveNode +
    + + +

    Sets the output node for the transform graph.

    +
    +

    The node that will be considered the output of the transform node.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred
    D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32())Direct2D could not locate the specified node.

    ?

    + +

    The node must already exist in the graph; otherwise, the call fails with D2DERR_NOT_FOUND.

    +
    + + hh446932 + HRESULT ID2D1TransformGraph::SetOutputNode([In] ID2D1TransformNode* node) + ID2D1TransformGraph::SetOutputNode +
    + + +

    Connects two nodes inside the transform graph.

    +
    +

    The node from which the connection will be made.

    +

    The node to which the connection will be made.

    +

    The node input that will be connected.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred
    D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32())Direct2D could not locate the specified node.

    ?

    + +

    Both nodes must already exist in the graph; otherwise, the call fails with D2DERR_NOT_FOUND.

    +
    + + hh446926 + HRESULT ID2D1TransformGraph::ConnectNode([In] ID2D1TransformNode* fromNode,[In] ID2D1TransformNode* toNode,[In] unsigned int toNodeInputIndex) + ID2D1TransformGraph::ConnectNode +
    + + +

    Connects a transform node inside the graph to the corresponding effect input of the encapsulating effect.

    +
    +

    The effect input to which the transform node will be bound.

    +

    The node to which the connection will be made.

    +

    The node input that will be connected.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred
    D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32())Direct2D could not locate the specified node.

    ?

    + + hh446928 + HRESULT ID2D1TransformGraph::ConnectToEffectInput([In] unsigned int toEffectInputIndex,[In] ID2D1TransformNode* node,[In] unsigned int toNodeInputIndex) + ID2D1TransformGraph::ConnectToEffectInput +
    + + +

    Clears the transform nodes and all connections from the transform graph.

    +
    + +

    Used when enough changes to transfoms would make editing of the transform graph inefficient.

    +
    + + hh446924 + void ID2D1TransformGraph::Clear() + ID2D1TransformGraph::Clear +
    + + +

    Uses the specified input as the effect output.

    +
    +

    The index of the input to the effect.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred
    D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32())Direct2D could not locate the specified node.

    ?

    + + hh997720 + HRESULT ID2D1TransformGraph::SetPassthroughGraph([In] unsigned int effectInputIndex) + ID2D1TransformGraph::SetPassthroughGraph +
    + + + Sets a single transform node as being equivalent to the whole graph. + + The node to be set. + + This equivalent to calling , adding a single node, and connecting all of the node inputs to the effect inputs in order. + + HRESULT ID2D1TransformGraph::SetSingleTransformNode([In] ID2D1TransformNode* node) + + + + Adds the provided node to the transform graph. + + The node that will be added to the transform graph. + + This adds a transform node to the transform graph. A node must be added to the transform graph before it can be interconnected in any way.A transform graph cannot be directly added to another transform graph. + Any other kind of interface derived from can be added to the transform graph. + + HRESULT ID2D1TransformGraph::AddNode([In] ID2D1TransformNode* node) + + + + Removes the provided node from the transform graph. + + The node that will be removed from the transform graph. + + The node must already exist in the graph; otherwise, the call fails with D2DERR_NOT_FOUND.Any connections to this node will be removed when the node is removed.After the node is removed, it cannot be used by the interface until it has been added to the graph by AddNode. + + HRESULT ID2D1TransformGraph::RemoveNode([In] ID2D1TransformNode* node) + + + + Sets the output node for the transform graph. + + The node that will be set as the output of the the transform graph. + HRESULT ID2D1TransformGraph::SetOutputNode([In] ID2D1TransformNode* node) + + + + Connects two nodes inside the transform graph. + + The node from which the connection will be made. + The node to which the connection will be made. + The node input that will be connected. + HRESULT ID2D1TransformGraph::ConnectNode([In] ID2D1TransformNode* fromNode,[In] ID2D1TransformNode* toNode,[In] unsigned int toNodeInputIndex) + + + + [This documentation is preliminary and is subject to change.] + + The effect input to which the transform node will be bound. + The node to which the connection will be made. + The node input that will be connected. + The method returns an . Possible values include, but are not limited to, those in the following table.HRESULTDescription S_OKNo error occurred D2DERR_NOT_FOUND = (HRESULT_FROM_WIN32())Direct2D could not locate the specified node.? + + HRESULT ID2D1TransformGraph::ConnectToEffectInput([In] unsigned int toEffectInputIndex,[In] ID2D1TransformNode* node,[In] unsigned int toNodeInputIndex) + + + +

    Represents the base interface for all of the transforms implemented by the transform author.

    +
    + +

    Transforms are aggregated by effect authors. This interface provides a common interface for implementing the Shantzis rectangle calculations which is the basis for all the transform processing in Direct2D imaging extensions. These calculations are described in the paper A model for efficient and flexible image computing.

    +
    + + hh446919 + ID2D1Transform + ID2D1Transform +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Allows a transform to state how it would map a rectangle requested on its output to a set of sample rectangles on its input.

    +
    +

    The output rectangle from which the inputs must be mapped.

    +

    The corresponding set of inputs. The inputs will directly correspond to the transform inputs.

    +

    The number of inputs specified. Direct2D guarantees that this is equal to the number of inputs specified on the transform.

    +

    If the method succeeds, it returns . If it fails, it returns an error code.

    + +

    The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.

    The transform implementation must regard this method as purely functional. It can base the mapped input and output rectangles on its current state as specified by the encapsulating effect properties. However, it must not change its own state in response to this method being invoked. The Direct2D renderer implementation reserves the right to call this method at any time and in any sequence.

    +
    + + hh446945 + HRESULT ID2D1Transform::MapOutputRectToInputRects([In] const RECT* outputRect,[Out, Buffer] RECT* inputRects,[In] unsigned int inputRectsCount) + ID2D1Transform::MapOutputRectToInputRects +
    + + +

    Performs the inverse mapping to MapOutputRectToInputRects.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    The transform implementation must ensure that any pixel shader or software callback implementation it provides honors this calculation.

    Unlike the MapOutputRectToInputRects and MapInvalidRect functions, this method is explicitly called by the renderer at a determined place in its rendering algorithm. The transform implementation may change its state based on the input rectangles and use this information to control its rendering information. This method is always called before the MapInvalidRect and MapOutputRectToInputRects methods of the transform.

    +
    + + hh446943 + HRESULT ID2D1Transform::MapInputRectsToOutputRect([In, Buffer] const RECT* inputRects,[In, Buffer] const RECT* inputOpaqueSubRects,[In] unsigned int inputRectCount,[Out] RECT* outputRect,[Out] RECT* outputOpaqueSubRect) + ID2D1Transform::MapInputRectsToOutputRect +
    + + +

    Sets the input rectangles for this rendering pass into the transform.

    +
    +

    The index of the input rectangle.

    +

    The invalid input rectangle.

    +

    The output rectangle to which the input rectangle must be mapped.

    + +

    The transform implementation must regard MapInvalidRect as purely functional. The transform implementation can base the mapped input rectangle on the transform implementation's current state as specified by the encapsulating effect properties. But the transform implementation can't change its own state in response to a call to MapInvalidRect. Direct2D can call this method at any time and in any sequence following a call to the MapInputRectsToOutputRect method. +

    +
    + + hh446946 + HRESULT ID2D1Transform::MapInvalidRect([In] unsigned int inputIndex,[In] RECT invalidInputRect,[Out] RECT* invalidOutputRect) + ID2D1Transform::MapInvalidRect +
    + + + + + + + + + + + +

    Describes a node in a transform topology.

    +
    + +

    Transform nodes are type-less and only define the notion of an object that accepts a number of inputs and is an output. This interface limits a topology to single output nodes.

    +
    + + hh446939 + ID2D1TransformNode + ID2D1TransformNode + + Describes a node in a transform topology. + + ID2D1TransformNode +
    + + + Gets the number of inputs to the transform node. + + + + +

    Describes a node in a transform topology.

    +
    + +

    Transform nodes are type-less and only define the notion of an object that accepts a number of inputs and is an output. This interface limits a topology to single output nodes.

    +
    + + hh446939 + ID2D1TransformNode + ID2D1TransformNode +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the number of inputs to the transform node.

    +
    +

    This method returns the number of inputs to this transform node.

    + + hh446940 + unsigned int ID2D1TransformNode::GetInputCount() + ID2D1TransformNode::GetInputCount +
    + + + + + +

    Defines a mappable single-dimensional vertex buffer.

    +
    + + hh446949 + ID2D1VertexBuffer + ID2D1VertexBuffer +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Maps the provided data into user memory.

    +
    +

    When this method returns, contains the address of a reference to the available buffer.

    +

    The desired size of the buffer.

    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    E_INVALIDARGAn invalid parameter was passed to the returning function.
    D3DERR_DEVICELOSTThe device has been lost but cannot be reset at this time.

    ?

    + +

    If data is larger than bufferSize, this method fails.

    +
    + + hh446951 + HRESULT ID2D1VertexBuffer::Map([Out, Buffer] unsigned char** data,[In] unsigned int bufferSize) + ID2D1VertexBuffer::Map +
    + + +

    Unmaps the vertex buffer.

    +
    +

    The method returns an . Possible values include, but are not limited to, those in the following table.

    Description
    No error occurred.
    The object was not in the correct state to process the method.

    ?

    + +

    After this method returns, the mapped memory from the vertex buffer is no longer accessible by the effect.

    +
    + + hh446967 + HRESULT ID2D1VertexBuffer::Unmap() + ID2D1VertexBuffer::Unmap +
    + + + Initializes a new instance of class. + + Instance of an effect context + + + + + + +

    Renders drawing instructions to a window.

    +
    + +

    As is the case with other render targets, you must call BeginDraw before issuing drawing commands. After you've finished drawing, call EndDraw to indicate that drawing is finished and to release access to the buffer backing the render target. For , the only side effect of BeginDraw is changing the state of the render target to allow drawing commands to be issued. EndDraw flushes any batched drawing commands. If no errors have occurred, then it also presents the buffer, causing it to appear on the associated window. Finally, EndDraw returns the of the first error that occurred in drawing or presenting, as well as the tag state at the time the error occurred.

    objects are double buffered, so drawing commands issued do not appear immediately, but rather are performed on an offscreen surface. When EndDraw is called, if there have been no rendering errors, the offscreen buffer is presented. If there have been rendering errors in the batch flushed by EndDraw, then the buffer is not presented, and the application must call BeginDraw and re-draw the frame. Flush can be used to check for errors before calling EndDraw if an application wants the frame to be presented regardless of errors.

    A hardware render target's back-buffer is the size specified by GetPixelSize. If EndDraw presents the buffer, this bitmap is stretched to cover the surface where it is presented: the entire client area of the window. This stretch is performed using bilinear filtering if the render target is rendering in hardware and using nearest-neighbor filtering if the rendering target is using software. (Typically, an application will call Resize to ensure the pixel size of the render target and the pixel size of the destination match, and no scaling is necessary, though this is not a requirement.)

    In the case where a window straddles adapters, Direct2D ensures that the portion of the off-screen render target is copied from the adapter where rendering is occurring to the adapter that needs to display the contents. If the adapter a render target is on has been removed or the driver upgraded while the application is running, this is returned as an error in the EndDraw call. In this case, the application should create a new render target and resources as necessary. +

    +
    + + dd371461 + ID2D1HwndRenderTarget + ID2D1HwndRenderTarget +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the associated with this render target.

    +
    + + dd371470 + GetHwnd + GetHwnd + HWND ID2D1HwndRenderTarget::GetHwnd() +
    + + +

    Indicates whether the associated with this render target is occluded.

    +
    +

    A value that indicates whether the associated with this render target is occluded.

    + + Note??If the window was occluded the last time that EndDraw was called, the next time that the render target calls CheckWindowState, it will return regardless of the current window state. If you want to use CheckWindowState to determine the current window state, you should call CheckWindowState after every EndDraw call and ignore its return value. This call will ensure that your next call to CheckWindowState state will return the actual window state.? + + + dd371466 + D2D1_WINDOW_STATE ID2D1HwndRenderTarget::CheckWindowState() + ID2D1HwndRenderTarget::CheckWindowState +
    + + + Changes the size of the render target to the specified pixel size. + + No documentation. + No documentation. + +

    After this method is called, the contents of the render target's back-buffer are not defined, even if the option was specified when the render target was created.

    +
    + + dd742774 + HRESULT ID2D1HwndRenderTarget::Resize([In] const D2D_SIZE_U* pixelSize) + ID2D1HwndRenderTarget::Resize +
    + + +

    Returns the associated with this render target.

    +
    +

    The associated with this render target.

    + + dd371470 + HWND ID2D1HwndRenderTarget::GetHwnd() + ID2D1HwndRenderTarget::GetHwnd +
    + + + Creates an , a render target that renders to a window. + + + When you create a render target and hardware acceleration is available, you allocate resources on the computer's GPU. By creating a render target once and retaining it as long as possible, you gain performance benefits. Your application should create render targets once and hold onto them for the life of the application or until the {{D2DERR_RECREATE_TARGET}} error is received. When you receive this error, you need to recreate the render target (and any resources it created). + + an instance of + The rendering mode, pixel format, remoting options, DPI information, and the minimum DirectX support required for hardware rendering. For information about supported pixel formats, see {{Supported Pixel Formats and Alpha Modes}}. + The window handle, initial size (in pixels), and present options. + + + +

    Describes an elliptical arc between two points.

    +
    + + dd368065 + D2D1_ARC_SEGMENT + D2D1_ARC_SEGMENT +
    + + +

    The end point of the arc.

    +
    + + dd368065 + D2D_POINT_2F point + D2D_POINT_2F point +
    + + +

    The x-radius and y-radius of the arc.

    +
    + + dd368065 + D2D_SIZE_F size + D2D_SIZE_F size +
    + + +

    A value that specifies how many degrees in the clockwise direction the ellipse is rotated relative to the current coordinate system.

    +
    + + dd368065 + float rotationAngle + float rotationAngle +
    + + +

    A value that specifies whether the arc sweep is clockwise or counterclockwise.

    +
    + + dd368065 + D2D1_SWEEP_DIRECTION sweepDirection + D2D1_SWEEP_DIRECTION sweepDirection +
    + + +

    A value that specifies whether the given arc is larger than 180 degrees.

    +
    + + dd368065 + D2D1_ARC_SIZE arcSize + D2D1_ARC_SIZE arcSize +
    + + +

    Represents a cubic bezier segment drawn between two points.

    +
    + +

    A cubic Bezier curve is defined by four points: a start point, an end point (point3), and two control points (point1 and point2). A Bezier segment does not contain a property for the starting point of the curve; it defines only the end point. The beginning point of the curve is the current point of the path to which the Bezier curve is added.

    The two control points of a cubic Bezier curve behave like magnets, attracting portions of what would otherwise be a straight line toward themselves and producing a curve. The first control point, point1, affects the beginning portion of the curve; the second control point, point2, affects the ending portion of the curve.

    Note??The curve doesn't necessarily pass through either of the control points; each control point moves its portion of the line toward itself, but not through itself.? +
    + + dd368070 + D2D1_BEZIER_SEGMENT + D2D1_BEZIER_SEGMENT +
    + + +

    The first control point for the Bezier segment.

    +
    + + dd368070 + D2D_POINT_2F point1 + D2D_POINT_2F point1 +
    + + +

    The second control point for the Bezier segment.

    +
    + + dd368070 + D2D_POINT_2F point2 + D2D_POINT_2F point2 +
    + + +

    The end point for the Bezier segment.

    +
    + + dd368070 + D2D_POINT_2F point3 + D2D_POINT_2F point3 +
    + + +

    Describes the extend modes and the interpolation mode of an .

    +
    + + dd368071 + D2D1_BITMAP_BRUSH_PROPERTIES + D2D1_BITMAP_BRUSH_PROPERTIES +
    + + + No documentation. + + + dd368071 + D2D1_EXTEND_MODE extendModeX + D2D1_EXTEND_MODE extendModeX + + + + No documentation. + + + dd368071 + D2D1_EXTEND_MODE extendModeY + D2D1_EXTEND_MODE extendModeY + + + + No documentation. + + + dd368071 + D2D1_BITMAP_INTERPOLATION_MODE interpolationMode + D2D1_BITMAP_INTERPOLATION_MODE interpolationMode + + + +

    Describes the extend modes and the interpolation mode of an .

    +
    + + hh847943 + D2D1_BITMAP_BRUSH_PROPERTIES1 + D2D1_BITMAP_BRUSH_PROPERTIES1 +
    + + + No documentation. + + + hh847943 + D2D1_EXTEND_MODE extendModeX + D2D1_EXTEND_MODE extendModeX + + + + No documentation. + + + hh847943 + D2D1_EXTEND_MODE extendModeY + D2D1_EXTEND_MODE extendModeY + + + + No documentation. + + + hh847943 + D2D1_INTERPOLATION_MODE interpolationMode + D2D1_INTERPOLATION_MODE interpolationMode + + + +

    Defines a blend description to be used in a particular blend transform.

    +
    + +

    This description closely matches the struct with some omissions and the addition of the blend factor in the description.

    +
    + + hh404277 + D2D1_BLEND_DESCRIPTION + D2D1_BLEND_DESCRIPTION +
    + + +

    Specifies the first RGB data source and includes an optional preblend operation.

    +
    + + hh404277 + D2D1_BLEND sourceBlend + D2D1_BLEND sourceBlend +
    + + +

    Specifies the second RGB data source and includes an optional preblend operation.

    +
    + + hh404277 + D2D1_BLEND destinationBlend + D2D1_BLEND destinationBlend +
    + + +

    Specifies how to combine the RGB data sources.

    +
    + + hh404277 + D2D1_BLEND_OPERATION blendOperation + D2D1_BLEND_OPERATION blendOperation +
    + + +

    Specifies the first alpha data source and includes an optional preblend operation. Blend options that end in _COLOR are not allowed.

    +
    + + hh404277 + D2D1_BLEND sourceBlendAlpha + D2D1_BLEND sourceBlendAlpha +
    + + +

    Specifies the second alpha data source and includes an optional preblend operation. Blend options that end in _COLOR are not allowed.

    +
    + + hh404277 + D2D1_BLEND destinationBlendAlpha + D2D1_BLEND destinationBlendAlpha +
    + + +

    Specifies how to combine the alpha data sources.

    +
    + + hh404277 + D2D1_BLEND_OPERATION blendOperationAlpha + D2D1_BLEND_OPERATION blendOperationAlpha +
    + + +

    Parameters to the blend operations. The blend must use for this to be used.

    +
    + + hh404277 + SHARPDX_COLOR4 blendFactor + SHARPDX_COLOR4 blendFactor +
    + + +

    Describes the opacity and transformation of a brush.

    +
    + +

    This structure is used when creating a brush. For convenience, Direct2D provides the D2D1::BrushProperties function for creating structures.

    After creating a brush, you can change its opacity or transform by calling the SetOpacity or SetTransform methods.

    +
    + + dd368077 + D2D1_BRUSH_PROPERTIES + D2D1_BRUSH_PROPERTIES +
    + + +

    A value between 0.0f and 1.0f, inclusive, that specifies the degree of opacity of the brush.

    +
    + + dd368077 + float opacity + float opacity +
    + + +

    The transformation that is applied to the brush.

    +
    + + dd368077 + D2D_MATRIX_3X2_F transform + D2D_MATRIX_3X2_F transform +
    + + +

    Specifies the options with which the Direct2D device, factory, and device context are created. +

    +
    + +

    The root objects referred to here are the Direct2D device, Direct2D factory and the Direct2D device context. +

    +
    + + hh404298 + D2D1_CREATION_PROPERTIES + D2D1_CREATION_PROPERTIES +
    + + + No documentation. + + + hh404298 + D2D1_THREADING_MODE threadingMode + D2D1_THREADING_MODE threadingMode + + + + No documentation. + + + hh404298 + D2D1_DEBUG_LEVEL debugLevel + D2D1_DEBUG_LEVEL debugLevel + + + + No documentation. + + + hh404298 + D2D1_DEVICE_CONTEXT_OPTIONS options + D2D1_DEVICE_CONTEXT_OPTIONS options + + + +

    Describes the drawing state of a render target.

    +
    + + dd368093 + D2D1_DRAWING_STATE_DESCRIPTION + D2D1_DRAWING_STATE_DESCRIPTION +
    + + +

    The antialiasing mode for subsequent nontext drawing operations.

    +
    + + dd368093 + D2D1_ANTIALIAS_MODE antialiasMode + D2D1_ANTIALIAS_MODE antialiasMode +
    + + +

    The antialiasing mode for subsequent text and glyph drawing operations.

    +
    + + dd368093 + D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode + D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode +
    + + +

    A label for subsequent drawing operations.

    +
    + + dd368093 + unsigned longlong tag1 + unsigned longlong tag1 +
    + + +

    A label for subsequent drawing operations.

    +
    + + dd368093 + unsigned longlong tag2 + unsigned longlong tag2 +
    + + +

    The transformation to apply to subsequent drawing operations.

    +
    + + dd368093 + D2D_MATRIX_3X2_F transform + D2D_MATRIX_3X2_F transform +
    + + +

    Describes the drawing state of a device context.

    +
    + + hh847946 + D2D1_DRAWING_STATE_DESCRIPTION1 + D2D1_DRAWING_STATE_DESCRIPTION1 +
    + + +

    The antialiasing mode for subsequent nontext drawing operations.

    +
    + + hh847946 + D2D1_ANTIALIAS_MODE antialiasMode + D2D1_ANTIALIAS_MODE antialiasMode +
    + + +

    The antialiasing mode for subsequent text and glyph drawing operations.

    +
    + + hh847946 + D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode + D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode +
    + + +

    A label for subsequent drawing operations.

    +
    + + hh847946 + unsigned longlong tag1 + unsigned longlong tag1 +
    + + +

    A label for subsequent drawing operations.

    +
    + + hh847946 + unsigned longlong tag2 + unsigned longlong tag2 +
    + + +

    The transformation to apply to subsequent drawing operations.

    +
    + + hh847946 + D2D_MATRIX_3X2_F transform + D2D_MATRIX_3X2_F transform +
    + + +

    The blend mode for the device context to apply to subsequent drawing operations.

    +
    + + hh847946 + D2D1_PRIMITIVE_BLEND primitiveBlend + D2D1_PRIMITIVE_BLEND primitiveBlend +
    + + +

    +
    + + hh847946 + D2D1_UNIT_MODE unitMode + D2D1_UNIT_MODE unitMode +
    + + +

    Contains the debugging level of an object.

    +
    + +

    To enable debugging, you must install the Direct2D Debug Layer.

    +
    + + dd368102 + D2D1_FACTORY_OPTIONS + D2D1_FACTORY_OPTIONS +
    + + + No documentation. + + + dd368102 + D2D1_DEBUG_LEVEL debugLevel + D2D1_DEBUG_LEVEL debugLevel + + + +

    Describes compute shader support, which is an option on D3D10 feature level.

    +
    + +

    You can fill this structure by passing a D2D1_ FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS structure to .

    +
    + + hh871446 + D2D1_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS + D2D1_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS +
    + + +

    Shader model 4 compute shaders are supported.

    +
    + + hh871446 + BOOL computeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x + BOOL computeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x +
    + + +

    Describes the support for doubles in shaders.

    +
    + +

    Fill this structure by passing a structure to .

    +
    + + hh871445 + D2D1_FEATURE_DATA_DOUBLES + D2D1_FEATURE_DATA_DOUBLES +
    + + +

    TRUE is doubles are supported within the shaders.

    +
    + + hh871445 + BOOL doublePrecisionFloatShaderOps + BOOL doublePrecisionFloatShaderOps +
    + + +

    Represents a tensor patch with 16 control points, 4 corner colors, and boundary flags. An is made up of 1 or more gradient mesh patches. Use the GradientMeshPatch function or the GradientMeshPatchFromCoonsPatch function to create one.

    +
    + +

    The following image shows the numbering of control points on a tensor grid.

    +
    + + dn890726 + D2D1_GRADIENT_MESH_PATCH + D2D1_GRADIENT_MESH_PATCH +
    + + + No documentation. + + + dn890726 + D2D_POINT_2F point00 + D2D_POINT_2F point00 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point01 + D2D_POINT_2F point01 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point02 + D2D_POINT_2F point02 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point03 + D2D_POINT_2F point03 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point10 + D2D_POINT_2F point10 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point11 + D2D_POINT_2F point11 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point12 + D2D_POINT_2F point12 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point13 + D2D_POINT_2F point13 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point20 + D2D_POINT_2F point20 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point21 + D2D_POINT_2F point21 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point22 + D2D_POINT_2F point22 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point23 + D2D_POINT_2F point23 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point30 + D2D_POINT_2F point30 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point31 + D2D_POINT_2F point31 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point32 + D2D_POINT_2F point32 + + + + No documentation. + + + dn890726 + D2D_POINT_2F point33 + D2D_POINT_2F point33 + + + + No documentation. + + + dn890726 + D2D_COLOR_F color00 + D2D_COLOR_F color00 + + + + No documentation. + + + dn890726 + D2D_COLOR_F color03 + D2D_COLOR_F color03 + + + + No documentation. + + + dn890726 + D2D_COLOR_F color30 + D2D_COLOR_F color30 + + + + No documentation. + + + dn890726 + D2D_COLOR_F color33 + D2D_COLOR_F color33 + + + + No documentation. + + + dn890726 + D2D1_PATCH_EDGE_MODE topEdgeMode + D2D1_PATCH_EDGE_MODE topEdgeMode + + + + No documentation. + + + dn890726 + D2D1_PATCH_EDGE_MODE leftEdgeMode + D2D1_PATCH_EDGE_MODE leftEdgeMode + + + + No documentation. + + + dn890726 + D2D1_PATCH_EDGE_MODE bottomEdgeMode + D2D1_PATCH_EDGE_MODE bottomEdgeMode + + + + No documentation. + + + dn890726 + D2D1_PATCH_EDGE_MODE rightEdgeMode + D2D1_PATCH_EDGE_MODE rightEdgeMode + + + +

    Contains the position and color of a gradient stop.

    +
    + +

    Gradient stops can be specified in any order if they are at different positions. Two stops may share a position. In this case, the first stop specified is treated as the "low" stop (nearer 0.0f) and subsequent stops are treated as "higher" (nearer 1.0f). This behavior is useful if a caller wants an instant transition in the middle of a stop.

    Typically, there are at least two points in a collection, although creation with only one stop is permitted. For example, one point is at position 0.0f, another point is at position 1.0f, and additional points are distributed in the [0, 1] range. Where the gradient progression is beyond the range of [0, 1], the stops are stored, but may affect the gradient.

    When drawn, the [0, 1] range of positions is mapped to the brush, in a brush-dependent way. For details, see and .

    Gradient stops with a position outside the [0, 1] range cannot be seen explicitly, but they can still affect the colors produced in the [0, 1] range. For example, a two-stop gradient 0.0f, Black}, {2.0f, White is indistinguishable visually from 0.0f, Black}, {1.0f, Mid-level gray. Also, the colors are clamped before interpolation.

    +
    + + dd368119 + D2D1_GRADIENT_STOP + D2D1_GRADIENT_STOP +
    + + +

    A value that indicates the relative position of the gradient stop in the brush. This value must be in the [0.0f, 1.0f] range if the gradient stop is to be seen explicitly.

    +
    + + dd368119 + float position + float position +
    + + +

    The color of the gradient stop.

    +
    + + dd368119 + D2D_COLOR_F color + D2D_COLOR_F color +
    + + +

    Contains the , pixel size, and presentation options for an .

    +
    + +

    Use this structure when you call the CreateHwndRenderTarget method to create a new .

    For convenience, Direct2D provides the D2D1::HwndRenderTargetProperties function for creating new structures.

    +
    + + dd368122 + D2D1_HWND_RENDER_TARGET_PROPERTIES + D2D1_HWND_RENDER_TARGET_PROPERTIES +
    + + + No documentation. + + + dd368122 + HWND hwnd + HWND hwnd + + + + No documentation. + + + dd368122 + D2D_SIZE_U pixelSize + D2D_SIZE_U pixelSize + + + + No documentation. + + + dd368122 + D2D1_PRESENT_OPTIONS presentOptions + D2D1_PRESENT_OPTIONS presentOptions + + + +

    Describes image brush features.

    +
    + + hh404308 + D2D1_IMAGE_BRUSH_PROPERTIES + D2D1_IMAGE_BRUSH_PROPERTIES +
    + + +

    The source rectangle in the image space from which the image will be tiled or interpolated.

    +
    + + hh404308 + D2D_RECT_F sourceRectangle + D2D_RECT_F sourceRectangle +
    + + +

    The extend mode in the image x-axis.

    +
    + + hh404308 + D2D1_EXTEND_MODE extendModeX + D2D1_EXTEND_MODE extendModeX +
    + + +

    The extend mode in the image y-axis.

    +
    + + hh404308 + D2D1_EXTEND_MODE extendModeY + D2D1_EXTEND_MODE extendModeY +
    + + +

    The interpolation mode to use when scaling the image brush.

    +
    + + hh404308 + D2D1_INTERPOLATION_MODE interpolationMode + D2D1_INTERPOLATION_MODE interpolationMode +
    + + +

    Represents a Bezier segment to be used in the creation of an object. This structure differs from in that it is composed of s, which contain a radius in addition to x- and y-coordinates.

    +
    + + dn890751 + D2D1_INK_BEZIER_SEGMENT + D2D1_INK_BEZIER_SEGMENT +
    + + + No documentation. + + + dn890751 + D2D1_INK_POINT point1 + D2D1_INK_POINT point1 + + + + No documentation. + + + dn890751 + D2D1_INK_POINT point2 + D2D1_INK_POINT point2 + + + + No documentation. + + + dn890751 + D2D1_INK_POINT point3 + D2D1_INK_POINT point3 + + + +

    Represents a point, radius pair that makes up part of a .

    +
    + + dn890752 + D2D1_INK_POINT + D2D1_INK_POINT +
    + + + No documentation. + + + dn890752 + float x + float x + + + + No documentation. + + + dn890752 + float y + float y + + + + No documentation. + + + dn890752 + float radius + float radius + + + +

    Defines the general pen tip shape and the transform used in an object.

    +
    + + dn890737 + D2D1_INK_STYLE_PROPERTIES + D2D1_INK_STYLE_PROPERTIES +
    + + + No documentation. + + + dn890737 + D2D1_INK_NIB_SHAPE nibShape + D2D1_INK_NIB_SHAPE nibShape + + + + No documentation. + + + dn890737 + D2D_MATRIX_3X2_F nibTransform + D2D_MATRIX_3X2_F nibTransform + + + +

    Describes the options that transforms may set on input textures.

    +
    + + hh404310 + D2D1_INPUT_DESCRIPTION + D2D1_INPUT_DESCRIPTION +
    + + +

    The type of filter to apply to the input texture.

    +
    + + hh404310 + D2D1_FILTER filter + D2D1_FILTER filter +
    + + +

    The mip level to retrieve from the upstream transform, if specified.

    +
    + + hh404310 + unsigned int levelOfDetailCount + unsigned int levelOfDetailCount +
    + + + Initializes a new instance of struct. + + The type of filter to apply to the input texture + The mip level to retrieve from the upstream transform, if specified. + + + +

    A description of a single element to the vertex layout.

    +
    + +

    This structure is a subset of that omits fields required to define a vertex layout.

    If the D2D1_APPEND_ALIGNED_ELEMENT constant is used for alignedByteOffset, the elements will be packed contiguously for convenience. +

    +
    + + hh404312 + D2D1_INPUT_ELEMENT_DESC + D2D1_INPUT_ELEMENT_DESC +
    + + +

    The HLSL semantic associated with this element in a shader input-signature.

    +
    + + hh404312 + const char* semanticName + char semanticName +
    + + +

    The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix; however, each of the four components would have different semantic indices (0, 1, 2, and 3).

    +
    + + hh404312 + unsigned int semanticIndex + unsigned int semanticIndex +
    + + +

    The data type of the element data.

    +
    + + hh404312 + DXGI_FORMAT format + DXGI_FORMAT format +
    + + +

    An integer value that identifies the input-assembler. Valid values are between 0 and 15.

    +
    + + hh404312 + unsigned int inputSlot + unsigned int inputSlot +
    + + +

    The offset in bytes between each element.

    +
    + + hh404312 + unsigned int alignedByteOffset + unsigned int alignedByteOffset +
    + + + Returns a value that can be used for the offset parameter of an InputElement to indicate that the element + should be aligned directly after the previous element, including any packing if necessary. + + A value used to align input elements. + D2D1_APPEND_ALIGNED_ELEMENT + + + + Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + + + + Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + Offset (in bytes) between each element. Use AppendAligned for convenience to define the current element directly after the previous one, including any packing if necessary. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + + + + + + + Implements the operator ==. + + The left. + The right. + + The result of the operator. + + + + + Implements the operator !=. + + The left. + The right. + + The result of the operator. + + + + +

    Contains the content bounds, mask information, opacity settings, and other options for a layer resource.

    +
    + + dd368127 + D2D1_LAYER_PARAMETERS + D2D1_LAYER_PARAMETERS +
    + + +

    The content bounds of the layer. Content outside these bounds is not guaranteed to render.

    +
    + + dd368127 + D2D_RECT_F contentBounds + D2D_RECT_F contentBounds +
    + + +

    The geometric mask specifies the area of the layer that is composited into the render target.

    +
    + + dd368127 + ID2D1Geometry* geometricMask + ID2D1Geometry geometricMask +
    + + +

    A value that specifies the antialiasing mode for the geometricMask.

    +
    + + dd368127 + D2D1_ANTIALIAS_MODE maskAntialiasMode + D2D1_ANTIALIAS_MODE maskAntialiasMode +
    + + +

    A value that specifies the transform that is applied to the geometric mask when composing the layer.

    +
    + + dd368127 + D2D_MATRIX_3X2_F maskTransform + D2D_MATRIX_3X2_F maskTransform +
    + + +

    An opacity value that is applied uniformly to all resources in the layer when compositing to the target.

    +
    + + dd368127 + float opacity + float opacity +
    + + +

    A brush that is used to modify the opacity of the layer. The brush + is mapped to the layer, and the alpha channel of each mapped brush pixel is multiplied against the corresponding layer pixel.

    +
    + + dd368127 + ID2D1Brush* opacityBrush + ID2D1Brush opacityBrush +
    + + +

    A value that specifies whether the layer intends to render text with ClearType antialiasing.

    +
    + + dd368127 + D2D1_LAYER_OPTIONS layerOptions + D2D1_LAYER_OPTIONS layerOptions +
    + + + Sets the geometric mask. + + + The geometric mask. + + ID2D1Geometry* geometricMask + + + + Sets the opacity brush. + + + The opacity brush. + + ID2D1Brush* opacityBrush + + + +

    Contains the content bounds, mask information, opacity settings, and other options for a layer resource.

    +
    + + hh847947 + D2D1_LAYER_PARAMETERS1 + D2D1_LAYER_PARAMETERS1 +
    + + +

    The content bounds of the layer. Content outside these bounds is not guaranteed to render.

    +
    + + hh847947 + D2D_RECT_F contentBounds + D2D_RECT_F contentBounds +
    + + +

    The geometric mask specifies the area of the layer that is composited into the render target.

    +
    + + hh847947 + ID2D1Geometry* geometricMask + ID2D1Geometry geometricMask +
    + + +

    A value that specifies the antialiasing mode for the geometricMask.

    +
    + + hh847947 + D2D1_ANTIALIAS_MODE maskAntialiasMode + D2D1_ANTIALIAS_MODE maskAntialiasMode +
    + + +

    A value that specifies the transform that is applied to the geometric mask when composing the layer.

    +
    + + hh847947 + D2D_MATRIX_3X2_F maskTransform + D2D_MATRIX_3X2_F maskTransform +
    + + +

    An opacity value that is applied uniformly to all resources in the layer when compositing to the target.

    +
    + + hh847947 + float opacity + float opacity +
    + + +

    A brush that is used to modify the opacity of the layer. The brush + is mapped to the layer, and the alpha channel of each mapped brush pixel is multiplied against the corresponding layer pixel.

    +
    + + hh847947 + ID2D1Brush* opacityBrush + ID2D1Brush opacityBrush +
    + + +

    Additional options for the layer creation.

    +
    + + hh847947 + D2D1_LAYER_OPTIONS1 layerOptions + D2D1_LAYER_OPTIONS1 layerOptions +
    + + + Initializes a new instance of the struct. + + The content bounds. + The geometry mask. + The mask antialias mode. + The mask transform. + The opacity. + The opacity brush. + The layer options. + + + + Sets the geometric mask. + + + The geometric mask. + + ID2D1Geometry* geometricMask + + + + Sets the opacity brush. + + + The opacity brush. + + ID2D1Brush* opacityBrush + + + +

    Contains the starting point and endpoint of the gradient axis for an .

    +
    + +

    Use this method when creating new objects with the CreateLinearGradientBrush method. For convenience, Direct2D provides the D2D1::LinearGradientBrushProperties helper function for creating new structures.

    The following illustration shows how a linear gradient changes as you change its start and end points. For the first gradient, the start point is set to (0,0) and the end point to (150, 50); this creates a diagonal gradient that starts at the upper-left corner and extends to the lower-right corner of the area being painted. When you set the start point to (0, 25) and the end point to (150, 25), a horizontal gradient is created. Similarly, setting the start point to (75, 0) and the end point to (75, 50) creates a vertical gradient. Setting the start point to (0, 50) and the end point to (150, 0) creates a diagonal gradient that starts at the lower-left corner and extends to the upper-right corner of the area being painted.

    + + + dd368128 + D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES + D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES + + +

    + No documentation. + + + dd368128 + D2D_POINT_2F startPoint + D2D_POINT_2F startPoint +
    + + + No documentation. + + + dd368128 + D2D_POINT_2F endPoint + D2D_POINT_2F endPoint + + + +

    Describes mapped memory from the API.

    +
    + +

    The mapped rectangle is used to map a rectangle into the caller's address space.

    +
    + + hh404314 + D2D1_MAPPED_RECT + D2D1_MAPPED_RECT +
    + + + No documentation. + + + hh404314 + unsigned int pitch + unsigned int pitch + + + + No documentation. + + + hh404314 + unsigned char* bits + unsigned char bits + + + +

    Contains the data format and alpha mode for a bitmap or render target.

    +
    + +

    For more information about the pixel formats and alpha modes supported by each render target, see Supported Pixel Formats and Alpha Modes.

    +
    + + dd368138 + D2D1_PIXEL_FORMAT + D2D1_PIXEL_FORMAT +
    + + +

    A value that specifies the size and arrangement of channels in each pixel.

    +
    + + dd368138 + DXGI_FORMAT format + DXGI_FORMAT format +
    + + +

    A value that specifies whether the alpha channel is using pre-multiplied alpha, straight alpha, whether it should be ignored and considered opaque, or whether it is unkown.

    +
    + + dd368138 + D2D1_ALPHA_MODE alphaMode + D2D1_ALPHA_MODE alphaMode +
    + + + Initializes a new instance of the struct. + + A value that specifies the size and arrangement of channels in each pixel. + A value that specifies whether the alpha channel is using pre-multiplied alpha, straight alpha, whether it should be ignored and considered opaque, or whether it is unknown. + + + +

    Describes a point on a path geometry.

    +
    + + hh404318 + D2D1_POINT_DESCRIPTION + D2D1_POINT_DESCRIPTION +
    + + +

    The end point after walking the path.

    +
    + + hh404318 + D2D_POINT_2F point + D2D_POINT_2F point +
    + + +

    A unit vector indicating the tangent point.

    +
    + + hh404318 + D2D_POINT_2F unitTangentVector + D2D_POINT_2F unitTangentVector +
    + + +

    The index of the segment on which point resides. This index is global to the entire path, not just to a particular figure.

    +
    + + hh404318 + unsigned int endSegment + unsigned int endSegment +
    + + +

    The index of the figure on which point resides.

    +
    + + hh404318 + unsigned int endFigure + unsigned int endFigure +
    + + +

    The length of the section of the path stretching from the start of the path to the start of endSegment.

    +
    + + hh404318 + float lengthToEndSegment + float lengthToEndSegment +
    + + +

    The creation properties for a object.

    +
    + + hh847949 + D2D1_PRINT_CONTROL_PROPERTIES + D2D1_PRINT_CONTROL_PROPERTIES +
    + + + No documentation. + + + hh847949 + D2D1_PRINT_FONT_SUBSET_MODE fontSubset + D2D1_PRINT_FONT_SUBSET_MODE fontSubset + + + + No documentation. + + + hh847949 + float rasterDPI + float rasterDPI + + + + No documentation. + + + hh847949 + D2D1_COLOR_SPACE colorSpace + D2D1_COLOR_SPACE colorSpace + + + +

    Defines a property binding to a pair of functions which get and set the corresponding property.

    +
    + +

    The propertyName is used to cross-correlate the property binding with the registration XML. The propertyName must be present in the XML call or the registration will fail. All properties must be bound.

    +
    + + hh404320 + D2D1_PROPERTY_BINDING + D2D1_PROPERTY_BINDING +
    + + +

    The name of the property.

    +
    + + hh404320 + const wchar_t* propertyName + wchar_t propertyName +
    + + +

    The function that will receive the data to set.

    +
    + + hh404320 + __function__stdcall* setFunction + __function__stdcall setFunction +
    + + +

    The function that will be asked to write the output data.

    +
    + + hh404320 + __function__stdcall* getFunction + __function__stdcall getFunction +
    + + + Gets the type of the property. + + + + +

    Contains the control point and end point for a quadratic Bezier segment.

    +
    + + dd368147 + D2D1_QUADRATIC_BEZIER_SEGMENT + D2D1_QUADRATIC_BEZIER_SEGMENT +
    + + +

    The control point of the quadratic Bezier segment.

    +
    + + dd368147 + D2D_POINT_2F point1 + D2D_POINT_2F point1 +
    + + +

    The end point of the quadratic Bezier segment.

    +
    + + dd368147 + D2D_POINT_2F point2 + D2D_POINT_2F point2 +
    + + +

    Contains the gradient origin offset and the size and position of the gradient ellipse for an .

    +
    + +

    Different values for center, gradientOriginOffset, radiusX and/or radiusY produce different gradients. The following illustration shows several radial gradients that have different gradient origin offsets, creating the appearance of the light illuminating the circles from different angles.

    For convenience, Direct2D provides the D2D1::RadialGradientBrushProperties function for creating new D2D1_RADIAL_GRADIENT_BRUSH structures.

    +
    + + dd368149 + D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES + D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES +
    + + + No documentation. + + + dd368149 + D2D_POINT_2F center + D2D_POINT_2F center + + + + No documentation. + + + dd368149 + D2D_POINT_2F gradientOriginOffset + D2D_POINT_2F gradientOriginOffset + + + + No documentation. + + + dd368149 + float radiusX + float radiusX + + + + No documentation. + + + dd368149 + float radiusY + float radiusY + + + +

    Describes limitations to be applied to an imaging effect renderer.

    +
    + +

    The renderer can allocate tiles larger than the minimum tile allocation. The allocated tiles will be powers of two of the minimum size on each axis, except that the size on each axis will not exceed the guaranteed maximum texture size for the device feature level.

    The minimumPixelRenderExtent is the size of the square tile below which the renderer will expand the tile allocation rather than attempting to subdivide the rendering tile any further. When this threshold is reached, the allocation tile size is expanded. This might occur repeatedly until rendering can either proceed or it is determined that the graph cannot be rendered.

    The buffer precision is used for intermediate buffers if it is otherwise unspecified by the effects or the internal effect topology. The application can also use the Output.BufferPrecision method to specify the output precision for a particular effect. This takes precedence over the context precision. In addition, the effect might set a different precision internally if required. If the buffer type on the context is and otherwise not specified by the effect or transform, the precision of the output will be the maximum precision of the inputs to the transform. The buffer precision does not affect the number of channels used.

    +
    + + hh404322 + D2D1_RENDERING_CONTROLS + D2D1_RENDERING_CONTROLS +
    + + +

    The buffer precision used by default if the buffer precision is not otherwise specified by the effect or the transform.

    +
    + + hh404322 + D2D1_BUFFER_PRECISION bufferPrecision + D2D1_BUFFER_PRECISION bufferPrecision +
    + + +

    The tile allocation size to be used by the imaging effect renderer.

    +
    + + hh404322 + D2D_SIZE_U tileSize + D2D_SIZE_U tileSize +
    + + +

    Contains rendering options (hardware or software), pixel format, DPI information, remoting options, and Direct3D support requirements for a render target.

    +
    + +

    Use this structure when creating a render target, or use it with the method to check the properties supported by an existing render target.

    As a convenience, Direct2D provides the D2D1::RenderTargetProperties helper function for creating structures. An easy way to create a structure that works for most render targets is to call the function without specifying any parameters. Doing so creates a structure that has its fields set to default values. For more information, see D2D1::RenderTargetProperties.

    Not all render targets support hardware rendering. For a list, see the Render Targets Overview.

    +
    + + dd368155 + D2D1_RENDER_TARGET_PROPERTIES + D2D1_RENDER_TARGET_PROPERTIES +
    + + +

    A value that specifies whether the render target should force hardware or software rendering. A value of specifies that the render target should use hardware rendering if it is available; otherwise, it uses software rendering. Note that WIC bitmap render targets do not support hardware rendering.

    +
    + + dd368155 + D2D1_RENDER_TARGET_TYPE type + D2D1_RENDER_TARGET_TYPE type +
    + + +

    The pixel format and alpha mode of the render target. You can use the D2D1::PixelFormat function to create a pixel format that specifies that Direct2D should select the pixel format and alpha mode for you. For a list of pixel formats and alpha modes supported by each render target, see Supported Pixel Formats and Alpha Modes.

    +
    + + dd368155 + D2D1_PIXEL_FORMAT pixelFormat + D2D1_PIXEL_FORMAT pixelFormat +
    + + +

    The horizontal DPI of the render target. To use the default DPI, set dpiX and dpiY to 0. For more information, see the Remarks section.

    +
    + + dd368155 + float dpiX + float dpiX +
    + + +

    The vertical DPI of the render target. To use the default DPI, set dpiX and dpiY to 0. For more information, see the Remarks section.

    +
    + + dd368155 + float dpiY + float dpiY +
    + + +

    A value that specifies how the render target is remoted and whether it should be GDI-compatible. Set to to create a render target that is not compatible with GDI and uses Direct3D command-stream remoting if it is available.

    +
    + + dd368155 + D2D1_RENDER_TARGET_USAGE usage + D2D1_RENDER_TARGET_USAGE usage +
    + + +

    A value that specifies the minimum Direct3D feature level required for hardware rendering. If the specified minimum level is not available, the render target uses software rendering if the type member is set to ; if type is set to to , render target creation fails. A value of indicates that Direct2D should determine whether the Direct3D feature level of the device is adequate. This field is used only when creating and objects.

    +
    + + dd368155 + D2D1_FEATURE_LEVEL minLevel + D2D1_FEATURE_LEVEL minLevel +
    + + + Initializes a new instance of the struct. + + The pixel format and alpha mode of the render target. You can use the {{D2D1::PixelFormat}} function to create a pixel format that specifies that Direct2D should select the pixel format and alpha mode for you. For a list of pixel formats and alpha modes supported by each render target, see {{Supported Pixel Formats and Alpha Modes}}. + + + + Initializes a new instance of the struct. + + A value that specifies whether the render target should force hardware or software rendering. A value of specifies that the render target should use hardware rendering if it is available; otherwise, it uses software rendering. Note that WIC bitmap render targets do not support hardware rendering. + The pixel format and alpha mode of the render target. You can use the {{D2D1::PixelFormat}} function to create a pixel format that specifies that Direct2D should select the pixel format and alpha mode for you. For a list of pixel formats and alpha modes supported by each render target, see {{Supported Pixel Formats and Alpha Modes}}. + The horizontal DPI of the render target. To use the default DPI, set dpiX and dpiY to 0. For more information, see the Remarks section. + The vertical DPI of the render target. To use the default DPI, set dpiX and dpiY to 0. For more information, see the Remarks section. + A value that specifies how the render target is remoted and whether it should be GDI-compatible. Set to to create a render target that is not compatible with GDI and uses Direct3D command-stream remoting if it is available. + A value that specifies the minimum Direct3D feature level required for hardware rendering. If the specified minimum level is not available, the render target uses software rendering if the type member is set to ; if type is set to to D2D1_RENDER_TARGET_TYPE_HARDWARE, render target creation fails. A value of indicates that Direct2D should determine whether the Direct3D feature level of the device is adequate. This field is used only when creating and objects. + + + +

    Defines a resource texture when the original resource texture is created.

    +
    + + hh404324 + D2D1_RESOURCE_TEXTURE_PROPERTIES + D2D1_RESOURCE_TEXTURE_PROPERTIES +
    + + +

    The extents of the resource table in each dimension.

    +
    + + hh404324 + const unsigned int* extents + unsigned int extents +
    + + +

    The number of dimensions in the resource texture. This must be a number from 1 to 3.

    +
    + + hh404324 + unsigned int dimensions + unsigned int dimensions +
    + + +

    The precision of the resource texture to create.

    +
    + + hh404324 + D2D1_BUFFER_PRECISION bufferPrecision + D2D1_BUFFER_PRECISION bufferPrecision +
    + + +

    The number of channels in the resource texture.

    +
    + + hh404324 + D2D1_CHANNEL_DEPTH channelDepth + D2D1_CHANNEL_DEPTH channelDepth +
    + + +

    The filtering mode to use on the texture.

    +
    + + hh404324 + D2D1_FILTER filter + D2D1_FILTER filter +
    + + +

    Specifies how pixel values beyond the extent of the texture will be sampled, in every dimension.

    +
    + + hh404324 + const D2D1_EXTEND_MODE* extendModes + D2D1_EXTEND_MODE extendModes +
    + + + The extents of the resource table in each dimension. + + const unsigned int* extents + + + + Specifies how pixel values beyond the extent of the texture will be sampled, in every dimension. + + const D2D1_EXTEND_MODE* extendModes + + + +

    Contains the dimensions and corner radii of a rounded rectangle.

    +
    + +

    Each corner of the rectangle specified by the rect is replaced with a quarter ellipse, with a radius in each direction specified by radiusX and radiusY.

    If the radiusX is greater than or equal to half the width of the rectangle, and the radiusY is greater than or equal to one-half the height, the rounded rectangle is an ellipse with the same width and height of the rect.

    Even when both radiuX and radiusY are zero, the rounded rectangle is different from a rectangle., When stroked, the corners of the rounded rectangle are roundly joined, not mitered (square).

    +
    + + dd368158 + D2D1_ROUNDED_RECT + D2D1_ROUNDED_RECT +
    + + +

    The coordinates of the rectangle.

    +
    + + dd368158 + D2D_RECT_F rect + D2D_RECT_F rect +
    + + +

    The x-radius for the quarter ellipse that is drawn to replace every corner of the rectangle.

    +
    + + dd368158 + float radiusX + float radiusX +
    + + +

    The y-radius for the quarter ellipse that is drawn to replace every corner of the rectangle.

    +
    + + dd368158 + float radiusY + float radiusY +
    + + +

    Creates a color context from a simple color profile. It is only valid to use this with the Color Management Effect in 'Best' mode.

    +
    + + mt797808 + D2D1_SIMPLE_COLOR_PROFILE + D2D1_SIMPLE_COLOR_PROFILE +
    + + +

    The simple color profile to create the color context from.

    +
    + + mt797808 + D2D_POINT_2F redPrimary + D2D_POINT_2F redPrimary +
    + + +

    The created color context.

    +
    + + mt797808 + D2D_POINT_2F greenPrimary + D2D_POINT_2F greenPrimary +
    + + + No documentation. + + + mt797808 + D2D_POINT_2F bluePrimary + D2D_POINT_2F bluePrimary + + + + No documentation. + + + mt797808 + D2D_POINT_2F whitePointXZ + D2D_POINT_2F whitePointXZ + + + + No documentation. + + + mt797808 + D2D1_GAMMA1 gamma + D2D1_GAMMA1 gamma + + + +

    Describes the stroke that outlines a shape.

    +
    + +

    The following illustration shows different dashOffset values for the same custom dash style.

    + + + dd368164 + D2D1_STROKE_STYLE_PROPERTIES + D2D1_STROKE_STYLE_PROPERTIES + + +

    +

    The cap applied to the start of all the open figures in a stroked geometry.

    +
    + + dd368164 + D2D1_CAP_STYLE startCap + D2D1_CAP_STYLE startCap +
    + + +

    The cap applied to the end of all the open figures in a stroked geometry.

    +
    + + dd368164 + D2D1_CAP_STYLE endCap + D2D1_CAP_STYLE endCap +
    + + +

    The shape at either end of each dash segment.

    +
    + + dd368164 + D2D1_CAP_STYLE dashCap + D2D1_CAP_STYLE dashCap +
    + + +

    A value that describes how segments are joined. This value is ignored for a vertex if the segment flags specify that the segment should have a smooth join.

    +
    + + dd368164 + D2D1_LINE_JOIN lineJoin + D2D1_LINE_JOIN lineJoin +
    + + +

    The limit of the thickness of the join on a mitered corner. This value is always treated as though it is greater than or equal to 1.0f.

    +
    + + dd368164 + float miterLimit + float miterLimit +
    + + +

    A value that specifies whether the stroke has a dash pattern and, if so, the dash style.

    +
    + + dd368164 + D2D1_DASH_STYLE dashStyle + D2D1_DASH_STYLE dashStyle +
    + + +

    A value that specifies an offset in the dash sequence. A positive dash offset value shifts the dash pattern, in units of stroke width, toward the start of the stroked geometry. A negative dash offset value shifts the dash pattern, in units of stroke width, toward the end of the stroked geometry.

    +
    + + dd368164 + float dashOffset + float dashOffset +
    + + +

    Describes the stroke that outlines a shape.

    +
    + + hh404328 + D2D1_STROKE_STYLE_PROPERTIES1 + D2D1_STROKE_STYLE_PROPERTIES1 +
    + + +

    The cap to use at the start of each open figure.

    +
    + + hh404328 + D2D1_CAP_STYLE startCap + D2D1_CAP_STYLE startCap +
    + + +

    The cap to use at the end of each open figure.

    +
    + + hh404328 + D2D1_CAP_STYLE endCap + D2D1_CAP_STYLE endCap +
    + + +

    The cap to use at the start and end of each dash.

    +
    + + hh404328 + D2D1_CAP_STYLE dashCap + D2D1_CAP_STYLE dashCap +
    + + +

    The line join to use.

    +
    + + hh404328 + D2D1_LINE_JOIN lineJoin + D2D1_LINE_JOIN lineJoin +
    + + +

    The limit beyond which miters are either clamped or converted to bevels.

    +
    + + hh404328 + float miterLimit + float miterLimit +
    + + +

    The type of dash to use.

    +
    + + hh404328 + D2D1_DASH_STYLE dashStyle + D2D1_DASH_STYLE dashStyle +
    + + +

    The location of the first dash, relative to the start of the figure.

    +
    + + hh404328 + float dashOffset + float dashOffset +
    + + +

    The rule that determines what render target properties affect the nib of the stroke.

    +
    + + hh404328 + D2D1_STROKE_TRANSFORM_TYPE transformType + D2D1_STROKE_TRANSFORM_TYPE transformType +
    + + +

    A 3D vector that consists of three single-precision floating-point values (x, y, z).

    +
    + + jj219219 + D2D1_SVG_LENGTH + D2D1_SVG_LENGTH +
    + + +

    The x value of the vector.

    +
    + + jj219219 + float value + float value +
    + + +

    The y value of the vector.

    +
    + + jj219219 + D2D1_SVG_LENGTH_UNITS units + D2D1_SVG_LENGTH_UNITS units +
    + + +

    A description of a single element to the vertex layout.

    +
    + +

    This structure is a subset of that omits fields required to define a vertex layout.

    If the D2D1_APPEND_ALIGNED_ELEMENT constant is used for alignedByteOffset, the elements will be packed contiguously for convenience. +

    +
    + + hh404312 + D2D1_SVG_PRESERVE_ASPECT_RATIO + D2D1_SVG_PRESERVE_ASPECT_RATIO +
    + + +

    The HLSL semantic associated with this element in a shader input-signature.

    +
    + + hh404312 + BOOL defer + BOOL defer +
    + + +

    The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix; however, each of the four components would have different semantic indices (0, 1, 2, and 3).

    +
    + + hh404312 + D2D1_SVG_ASPECT_ALIGN align + D2D1_SVG_ASPECT_ALIGN align +
    + + +

    The data type of the element data.

    +
    + + hh404312 + D2D1_SVG_ASPECT_SCALING meetOrSlice + D2D1_SVG_ASPECT_SCALING meetOrSlice +
    + + +

    A 3D vector that consists of three single-precision floating-point values (x, y, z).

    +
    + + jj219219 + D2D1_SVG_VIEWBOX + D2D1_SVG_VIEWBOX +
    + + +

    The x value of the vector.

    +
    + + jj219219 + float x + float x +
    + + +

    The y value of the vector.

    +
    + + jj219219 + float y + float y +
    + + +

    The z value of the vector.

    +
    + + jj219219 + float width + float width +
    + + + No documentation. + + + jj219219 + float height + float height + + + +

    Properties of a transformed image source.

    +
    + + dn934350 + D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES + D2D1_TRANSFORMED_IMAGE_SOURCE_PROPERTIES +
    + + +

    The orientation at which the image source is drawn.

    +
    + + dn934350 + D2D1_ORIENTATION orientation + D2D1_ORIENTATION orientation +
    + + +

    The horizontal scale factor at which the image source is drawn.

    +
    + + dn934350 + float scaleX + float scaleX +
    + + +

    The vertical scale factor at which the image source is drawn.

    +
    + + dn934350 + float scaleY + float scaleY +
    + + +

    The interpolation mode used when the image source is drawn. This is ignored if the image source is drawn using the DrawImage method, or using an image brush.

    +
    + + dn934350 + D2D1_INTERPOLATION_MODE interpolationMode + D2D1_INTERPOLATION_MODE interpolationMode +
    + + +

    Image sourc option flags.

    +
    + + dn934350 + D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS options + D2D1_TRANSFORMED_IMAGE_SOURCE_OPTIONS options +
    + + +

    Contains the three vertices that describe a triangle.

    +
    + + dd368172 + D2D1_TRIANGLE + D2D1_TRIANGLE +
    + + +

    The first vertex of a triangle.

    +
    + + dd368172 + D2D_POINT_2F point1 + D2D_POINT_2F point1 +
    + + +

    The second vertex of a triangle.

    +
    + + dd368172 + D2D_POINT_2F point2 + D2D_POINT_2F point2 +
    + + +

    The third vertex of a triangle.

    +
    + + dd368172 + D2D_POINT_2F point3 + D2D_POINT_2F point3 +
    + + +

    Defines the properties of a vertex buffer that are standard for all vertex shader definitions.

    +
    + +

    If usage is dynamic, the system might return a system memory buffer and copy these vertices into the rendering vertex buffer for each element.

    If the initialization data is not specified, the buffer will be uninitialized.

    +
    + + hh404330 + D2D1_VERTEX_BUFFER_PROPERTIES + D2D1_VERTEX_BUFFER_PROPERTIES +
    + + +

    The number of inputs to the vertex shader.

    +
    + + hh404330 + unsigned int inputCount + unsigned int inputCount +
    + + +

    Indicates how frequently the vertex buffer is likely to be updated.

    +
    + + hh404330 + D2D1_VERTEX_USAGE usage + D2D1_VERTEX_USAGE usage +
    + + +

    The initial contents of the vertex buffer.

    +
    + + hh404330 + const unsigned char* data + unsigned char data +
    + + +

    The size of the vertex buffer, in bytes.

    +
    + + hh404330 + unsigned int byteWidth + unsigned int byteWidth +
    + + + Initializes a new instance of class. + + + + + Initializes a new instance of class. + + The number of inputs to the vertex shader. + Indicates how frequently the vertex buffer is likely to be updated. + The initial contents of the vertex buffer + + + + The initial contents of the vertex buffer. + + + + +

    Defines a range of vertices that are used when rendering less than the full contents of a vertex buffer.

    +
    + + hh404335 + D2D1_VERTEX_RANGE + D2D1_VERTEX_RANGE +
    + + +

    The first vertex in the range to process.

    +
    + + hh404335 + unsigned int startVertex + unsigned int startVertex +
    + + +

    The number of vertices to use.

    +
    + + hh404335 + unsigned int vertexCount + unsigned int vertexCount +
    + + + Initializes an instance of struct. + + The first vertex in the range to process. + The number of vertices in the count to use. + + + + Internal GeometrySink Callback + + + + + Get a native callback pointer from a managed callback. + + The geometry sink. + A pointer to the unmanaged geometry sink counterpart + + + + Internal class used to initialize this assembly. + + + + + Initializes this assembly. + + + This method is called when the assembly is loaded. + + + + + The namespace provides a managed Direct2D API. + + dd370990 + Direct2D1 + Direct2D1 + + + + Metadata description for property binding. + + + + + Initializes a new instance of attribute. + + Order of the property + Minimum value of this property + Maximum value of this property + Default value of this property + + + + Initializes a new instance of attribute. + + Type of binding + Order of the property + Minimum value of this property + Maximum value of this property + Default value of this property + + + + Gets binding type. + + + + + Gets the order of this property. + + + + + Gets the DisplayName. + + + + + Gets the Type of the property. + + + + + Gets the Min value. + + + + + Gets the Max value. + + + + + Gets the Default value. + + + + + Helper functions for . + + + + + Converts a property type to a text. + + The property type + A string representing this property type. + + + + Internal SimplifiedGeometrySink Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + + Internal SourceTransform Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT ID2D1SourceTransform::SetRenderInfo([In] ID2D1RenderInfo* renderInfo) + + + HRESULT ID2D1SourceTransform::Draw([In] ID2D1Bitmap1* target,[In] const RECT* drawRect,[In] D2D_POINT_2U targetOrigin) + + + + Internal TessellationSink Callback + + + + + Get a native callback pointer from a managed callback. + + The geometry sink. + A pointer to the unmanaged geometry sink counterpart + + + + Internal TransformNode Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + unsigned int ID2D1TransformNode::GetInputCount() + HRESULT ID2D1EffectImpl::Initialize([In] ID2D1EffectContext* effectContext,[In] ID2D1TransformGraph* transformGraph) + + + + Internal Transform Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT ID2D1Transform::MapOutputRectToInputRects([In] const RECT* outputRect,[Out, Buffer] RECT* inputRects,[In] unsigned int inputRectsCount) + + + HRESULT ID2D1Transform::MapInputRectsToOutputRect([In, Buffer] const RECT* inputRects,[In] unsigned int inputRectsCount,[Out] RECT* outputRect) + HRESULT ID2D1Transform::MapInputRectsToOutputRect([In, Buffer] const RECT* inputRects,[In, Buffer] const RECT* inputOpaqueSubRects,[In] unsigned int inputRectCount,[Out] RECT* outputRect,[Out] RECT* outputOpaqueSubRect) + + + HRESULT ID2D1Transform::MapInvalidRect([In] unsigned int inputIndex,[In] RECT invalidInputRect,[Out] RECT* invalidOutputRect) + + + + A WIC RenderTarget. + + + + + Initializes a new instance of the class from a . + + The factory. + The WIC bitmap. + The render target properties. + + + +

    Encapsulates a 32-bit device independent bitmap and device context, which can be used for rendering glyphs.

    +
    + +

    You create an by using the method, as shown in the following code.

    if (SUCCEEDED(hr))	
    +            { hr = g_pGdiInterop->CreateBitmapRenderTarget(hdc, r.right, r.bottom, &g_pBitmapRenderTarget);	
    +            }	
    +            

    takes a handle to a DC and the desired width and height. In the above example, the width and height given are the size of the window rect.

    +
    + + dd368165 + IDWriteBitmapRenderTarget + IDWriteBitmapRenderTarget +
    + + +

    Draws a run of glyphs to a bitmap target at the specified position.

    +
    +

    The horizontal position of the baseline origin, in DIPs, relative to the upper-left corner of the DIB.

    +

    The vertical position of the baseline origin, in DIPs, relative to the upper-left corner of the DIB.

    +

    The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.

    +

    The structure containing the properties of the glyph run.

    +

    The object that controls rendering behavior.

    +

    The foreground color of the text.

    +

    The optional rectangle that receives the bounding box (in pixels not DIPs) of all the pixels affected by drawing the glyph run. The black box rectangle may extend beyond the dimensions of the bitmap.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    You can use the to render to a bitmap from a custom text renderer that you implement. The custom text renderer should call this method from within the callback method as shown in the following code.

    STDMETHODIMP GdiTextRenderer::DrawGlyphRun( __maybenull void* clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY,  measuringMode, __in  const* glyphRun, __in  const* glyphRunDescription, * clientDrawingEffect )	
    +            {  hr = ; // Pass on the drawing call to the render target to do the real work.  dirtyRect = {0}; hr = pRenderTarget_->DrawGlyphRun( baselineOriginX, baselineOriginY, measuringMode, glyphRun, pRenderingParams_, RGB(0,200,255), &dirtyRect ); return hr;	
    +            }	
    +            

    The baselineOriginX, baslineOriginY, measuringMethod, and glyphRun parameters are provided (as arguments) when the callback method is invoked. The renderingParams, textColor and blackBoxRect are not.

    Default rendering params can be retrieved by using the method.

    + + + dd368167 + HRESULT IDWriteBitmapRenderTarget::DrawGlyphRun([In] float baselineOriginX,[In] float baselineOriginY,[In] DWRITE_MEASURING_MODE measuringMode,[In] const DWRITE_GLYPH_RUN* glyphRun,[In] IDWriteRenderingParams* renderingParams,[In] int textColor,[Out, Optional] RECT* blackBoxRect) + IDWriteBitmapRenderTarget::DrawGlyphRun + + +

    + Draws a run of glyphs to a bitmap target at the specified position. + + + You can use the IDWriteBitmapRenderTarget::DrawGlyphRun to render to a bitmap from a custom text renderer that you implement. The custom text renderer should call this method from within the callback method as shown in the following code. + STDMETHODIMP GdiTextRenderer::DrawGlyphRun( __maybenull void* clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE measuringMode, __in DWRITE_GLYPH_RUN const* glyphRun, __in DWRITE_GLYPH_RUN_DESCRIPTION const* glyphRunDescription, IUnknown* clientDrawingEffect ) + { HRESULT hr = S_OK; // Pass on the drawing call to the render target to do the real work. RECT dirtyRect = {0}; hr = pRenderTarget_->DrawGlyphRun( baselineOriginX, baselineOriginY, measuringMode, glyphRun, pRenderingParams_, RGB(0,200,255), &dirtyRect ); return hr; + } + + The baselineOriginX, baslineOriginY, measuringMethod, and glyphRun parameters are provided (as arguments) when the callback method is invoked. The renderingParams, textColor and blackBoxRect are not. Default rendering params can be retrieved by using the method. + + The horizontal position of the baseline origin, in DIPs, relative to the upper-left corner of the DIB. + The vertical position of the baseline origin, in DIPs, relative to the upper-left corner of the DIB. + The measuring method for glyphs in the run, used with the other properties to determine the rendering mode. + The structure containing the properties of the glyph run. + The object that controls rendering behavior. + The foreground color of the text. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteBitmapRenderTarget::DrawGlyphRun([None] float baselineOriginX,[None] float baselineOriginY,[None] DWRITE_MEASURING_MODE measuringMode,[In] const DWRITE_GLYPH_RUN* glyphRun,[None] IDWriteRenderingParams* renderingParams,[None] COLORREF textColor,[Out, Optional] RECT* blackBoxRect) +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a handle to the memory device context.

    +
    + +

    An application can use the device context to draw using GDI functions. An application can obtain the bitmap handle () by calling GetCurrentObject. An application that wants information about the underlying bitmap, including a reference to the pixel data, can call GetObject to fill in a DIBSECTION structure. The bitmap is always a 32-bit top-down DIB.

    Note that this method takes no parameters and returns an variable, not an .

    memoryHdc = g_pBitmapRenderTarget->GetMemoryDC();	
    +            

    The returned here is still owned by the bitmap render targer object and should not be released or deleted by the client.

    +
    + + dd368171 + GetMemoryDC + GetMemoryDC + HDC IDWriteBitmapRenderTarget::GetMemoryDC() +
    + + +

    Gets or sets the number of bitmap pixels per DIP.

    +
    + +

    A DIP (device-independent pixel) is 1/96 inch. Therefore, this value is the number if pixels per inch divided by 96.

    +
    + + dd368173 + GetPixelsPerDip / SetPixelsPerDip + GetPixelsPerDip + float IDWriteBitmapRenderTarget::GetPixelsPerDip() +
    + + +

    Gets or sets the transform that maps abstract coordinates to DIPs. By default this is the identity transform. Note that this is unrelated to the world transform of the underlying device context.

    +
    + + dd368169 + GetCurrentTransform / SetCurrentTransform + GetCurrentTransform + HRESULT IDWriteBitmapRenderTarget::GetCurrentTransform([Out] DWRITE_MATRIX* transform) +
    + + +

    Gets the dimensions of the target bitmap.

    +
    + + dd368176 + GetSize + GetSize + HRESULT IDWriteBitmapRenderTarget::GetSize([Out] SIZE* size) +
    + + +

    Draws a run of glyphs to a bitmap target at the specified position.

    +
    +

    The horizontal position of the baseline origin, in DIPs, relative to the upper-left corner of the DIB.

    +

    The vertical position of the baseline origin, in DIPs, relative to the upper-left corner of the DIB.

    +

    The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.

    +

    The structure containing the properties of the glyph run.

    +

    The object that controls rendering behavior.

    +

    The foreground color of the text.

    +

    The optional rectangle that receives the bounding box (in pixels not DIPs) of all the pixels affected by drawing the glyph run. The black box rectangle may extend beyond the dimensions of the bitmap.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    You can use the to render to a bitmap from a custom text renderer that you implement. The custom text renderer should call this method from within the callback method as shown in the following code.

    STDMETHODIMP GdiTextRenderer::DrawGlyphRun( __maybenull void* clientDrawingContext, FLOAT baselineOriginX, FLOAT baselineOriginY,  measuringMode, __in  const* glyphRun, __in  const* glyphRunDescription, * clientDrawingEffect )	
    +            {  hr = ; // Pass on the drawing call to the render target to do the real work.  dirtyRect = {0}; hr = pRenderTarget_->DrawGlyphRun( baselineOriginX, baselineOriginY, measuringMode, glyphRun, pRenderingParams_, RGB(0,200,255), &dirtyRect ); return hr;	
    +            }	
    +            

    The baselineOriginX, baslineOriginY, measuringMethod, and glyphRun parameters are provided (as arguments) when the callback method is invoked. The renderingParams, textColor and blackBoxRect are not.

    Default rendering params can be retrieved by using the method.

    + + + dd368167 + HRESULT IDWriteBitmapRenderTarget::DrawGlyphRun([In] float baselineOriginX,[In] float baselineOriginY,[In] DWRITE_MEASURING_MODE measuringMode,[In] const DWRITE_GLYPH_RUN* glyphRun,[In] IDWriteRenderingParams* renderingParams,[In] int textColor,[Out, Optional] RECT* blackBoxRect) + IDWriteBitmapRenderTarget::DrawGlyphRun + + +

    +

    Gets a handle to the memory device context.

    +
    +

    Returns a device context handle to the memory device context.

    + +

    An application can use the device context to draw using GDI functions. An application can obtain the bitmap handle () by calling GetCurrentObject. An application that wants information about the underlying bitmap, including a reference to the pixel data, can call GetObject to fill in a DIBSECTION structure. The bitmap is always a 32-bit top-down DIB.

    Note that this method takes no parameters and returns an variable, not an .

    memoryHdc = g_pBitmapRenderTarget->GetMemoryDC();	
    +            

    The returned here is still owned by the bitmap render targer object and should not be released or deleted by the client.

    +
    + + dd368171 + HDC IDWriteBitmapRenderTarget::GetMemoryDC() + IDWriteBitmapRenderTarget::GetMemoryDC +
    + + +

    Gets the number of bitmap pixels per DIP.

    +
    +

    The number of bitmap pixels per DIP.

    + +

    A DIP (device-independent pixel) is 1/96 inch. Therefore, this value is the number if pixels per inch divided by 96.

    +
    + + dd368173 + float IDWriteBitmapRenderTarget::GetPixelsPerDip() + IDWriteBitmapRenderTarget::GetPixelsPerDip +
    + + +

    Sets the number of bitmap pixels per DIP (device-independent pixel). A DIP is 1/96 inch, so this value is the number if pixels per inch divided by 96.

    +
    +

    A value that specifies the number of pixels per DIP.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368182 + HRESULT IDWriteBitmapRenderTarget::SetPixelsPerDip([In] float pixelsPerDip) + IDWriteBitmapRenderTarget::SetPixelsPerDip +
    + + +

    Gets the transform that maps abstract coordinates to DIPs. By default this is the identity transform. Note that this is unrelated to the world transform of the underlying device context.

    +
    +

    When this method returns, contains a transform matrix.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368169 + HRESULT IDWriteBitmapRenderTarget::GetCurrentTransform([Out] DWRITE_MATRIX* transform) + IDWriteBitmapRenderTarget::GetCurrentTransform +
    + + +

    Sets the transform that maps abstract coordinate to DIPs (device-independent pixel). This does not affect the world transform of the underlying device context.

    +
    +

    Specifies the new transform. This parameter can be null, in which case the identity transform is implied.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368179 + HRESULT IDWriteBitmapRenderTarget::SetCurrentTransform([In, Optional] const DWRITE_MATRIX* transform) + IDWriteBitmapRenderTarget::SetCurrentTransform +
    + + +

    Gets the dimensions of the target bitmap.

    +
    +

    Returns the width and height of the bitmap in pixels.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368176 + HRESULT IDWriteBitmapRenderTarget::GetSize([Out] SIZE* size) + IDWriteBitmapRenderTarget::GetSize +
    + + +

    Resizes the bitmap.

    +
    +

    The new bitmap width, in pixels.

    +

    The new bitmap height, in pixels.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368177 + HRESULT IDWriteBitmapRenderTarget::Resize([In] unsigned int width,[In] unsigned int height) + IDWriteBitmapRenderTarget::Resize +
    + + + An inline object for trimming, using an ellipsis as the omission sign. + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Creates an inline object for trimming, using an ellipsis as the omission sign. + + + The ellipsis will be created using the current settings of the format, including base font, style, and any effects. Alternate omission signs can be created by the application by implementing . + + a + A text format object, created with {{CreateTextFormat}}, used for text layout. + HRESULT IDWriteFactory::CreateEllipsisTrimmingSign([None] IDWriteTextFormat* textFormat,[Out] IDWriteInlineObject** trimmingSign) + + + +

    Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.

    +
    + +

    Create an object by using the function.

     if (SUCCEEDED(hr))	
    +            { hr = ( , __uuidof(), reinterpret_cast<**>(&pDWriteFactory_) );	
    +            } 

    An object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.

    +
    + + dd368183 + IDWriteFactory + IDWriteFactory +
    + + + Default Constructor for a . + + + + + Default Constructor for a . + + + + + Registers a custom font collection loader with the factory object. + + + This function registers a font collection loader with DirectWrite. The font collection loader interface, which should be implemented by a singleton object, handles enumerating font files in a font collection given a particular type of key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistration operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation. + + Reference to a object to be registered. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteFactory::RegisterFontCollectionLoader([None] IDWriteFontCollectionLoader* fontCollectionLoader) + + + + Unregisters a custom font collection loader that was previously registered using {{RegisterFontCollectionLoader}}. + + Pointer to a object to be unregistered. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteFactory::UnregisterFontCollectionLoader([None] IDWriteFontCollectionLoader* fontCollectionLoader) + + + + Registers a font file loader with DirectWrite. + + + This function registers a font file loader with DirectWrite. The font file loader interface, which should be implemented by a singleton object, handles loading font file resources of a particular type from a key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistration operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation. + + Pointer to a object for a particular file resource type. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteFactory::RegisterFontFileLoader([None] IDWriteFontFileLoader* fontFileLoader) + + + + Unregisters a font file loader that was previously registered with the DirectWrite font system using {{RegisterFontFileLoader}}. + + + This function unregisters font file loader callbacks with the DirectWrite font system. You should implement the font file loader interface by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors and must not unregister themselves in their destructors, because registration and unregistration operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite should be performed outside of the font file loader implementation. + + Pointer to the file loader that was previously registered with the DirectWrite font system using {{RegisterFontFileLoader}}. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteFactory::UnregisterFontFileLoader([None] IDWriteFontFileLoader* fontFileLoader) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates an object that is used for interoperability with GDI.

    +
    + + dd368207 + GetGdiInterop + GetGdiInterop + HRESULT IDWriteFactory::GetGdiInterop([Out] IDWriteGdiInterop** gdiInterop) +
    + + +

    Gets an object which represents the set of installed fonts.

    +
    +

    If this parameter is nonzero, the function performs an immediate check for changes to the set of installed fonts. If this parameter is , the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify TRUE if it has itself just installed a font and wants to be sure the font collection contains that font.

    +

    When this method returns, contains the address of a reference to the system font collection object, or null in case of failure.

    + + dd368208 + HRESULT IDWriteFactory::GetSystemFontCollection([Out] IDWriteFontCollection** fontCollection,[In] BOOL checkForUpdates) + IDWriteFactory::GetSystemFontCollection +
    + + +

    Creates a font collection using a custom font collection loader.

    +
    +

    An application-defined font collection loader, which must have been previously registered using RegisterFontCollectionLoader.

    +

    The key used by the loader to identify a collection of font files. The buffer allocated for this key should at least be the size of collectionKeySize.

    +

    The size, in bytes, of the collection key.

    +

    Contains an address of a reference to the system font collection object if the method succeeds, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368186 + HRESULT IDWriteFactory::CreateCustomFontCollection([In] IDWriteFontCollectionLoader* collectionLoader,[In, Buffer] const void* collectionKey,[In] unsigned int collectionKeySize,[Out, Fast] IDWriteFontCollection** fontCollection) + IDWriteFactory::CreateCustomFontCollection +
    + + +

    Registers a custom font collection loader with the factory object.

    +
    +

    Pointer to a object to be registered.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This function registers a font collection loader with DirectWrite. The font collection loader interface, which should be implemented by a singleton object, handles enumerating font files in a font collection given a particular type of key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation.

    +
    + + dd368209 + HRESULT IDWriteFactory::RegisterFontCollectionLoader([In] IDWriteFontCollectionLoader* fontCollectionLoader) + IDWriteFactory::RegisterFontCollectionLoader +
    + + +

    Unregisters a custom font collection loader that was previously registered using RegisterFontCollectionLoader.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368211 + HRESULT IDWriteFactory::UnregisterFontCollectionLoader([In] IDWriteFontCollectionLoader* fontCollectionLoader) + IDWriteFactory::UnregisterFontCollectionLoader +
    + + +

    Creates a font file reference object from a local font file.

    +
    +

    An array of characters that contains the absolute file path for the font file. Subsequent operations on the constructed object may fail if the user provided filePath doesn't correspond to a valid file on the disk.

    +

    The last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time. You should specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided lastWriteTime doesn't match the file on the disk.

    +

    When this method returns, contains an address of a reference to the newly created font file reference object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368197 + HRESULT IDWriteFactory::CreateFontFileReference([In] const wchar_t* filePath,[In, Optional] const FILETIME* lastWriteTime,[Out, Fast] IDWriteFontFile** fontFile) + IDWriteFactory::CreateFontFileReference +
    + + +

    Creates a reference to an application-specific font file resource.

    +
    +

    A font file reference key that uniquely identifies the font file resource during the lifetime of fontFileLoader.

    +

    The size of the font file reference key in bytes.

    +

    The font file loader that will be used by the font system to load data from the file identified by fontFileReferenceKey.

    +

    Contains an address of a reference to the newly created font file object when this method succeeds, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This function is provided for cases when an application or a document needs to use a private font without having to install it on the system. fontFileReferenceKey has to be unique only in the scope of the fontFileLoader used in this call.

    +
    + + dd368188 + HRESULT IDWriteFactory::CreateCustomFontFileReference([In, Buffer] const void* fontFileReferenceKey,[In] unsigned int fontFileReferenceKeySize,[In] IDWriteFontFileLoader* fontFileLoader,[Out, Fast] IDWriteFontFile** fontFile) + IDWriteFactory::CreateCustomFontFileReference +
    + + +

    Creates an object that represents a font face.

    +
    +

    A value that indicates the type of file format of the font face.

    +

    The number of font files, in element count, required to represent the font face.

    +

    A font file object representing the font face. Because maintains its own references to the input font file objects, you may release them after this call.

    +

    The zero-based index of a font face, in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.

    +

    A value that indicates which, if any, font face simulation flags for algorithmic means of making text bold or italic are applied to the current font face.

    +

    When this method returns, contains an address of a reference to the newly created font face object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368196 + HRESULT IDWriteFactory::CreateFontFace([In] DWRITE_FONT_FACE_TYPE fontFaceType,[In] unsigned int numberOfFiles,[In, Buffer] const IDWriteFontFile** fontFiles,[In] unsigned int faceIndex,[In] DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags,[Out, Fast] IDWriteFontFace** fontFace) + IDWriteFactory::CreateFontFace +
    + + +

    Creates an object that represents a font face.

    +
    +

    A value that indicates the type of file format of the font face.

    +

    The number of font files, in element count, required to represent the font face.

    +

    A font file object representing the font face. Because maintains its own references to the input font file objects, you may release them after this call.

    +

    The zero-based index of a font face, in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.

    +

    A value that indicates which, if any, font face simulation flags for algorithmic means of making text bold or italic are applied to the current font face.

    +

    When this method returns, contains an address of a reference to the newly created font face object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368196 + HRESULT IDWriteFactory::CreateFontFace([In] DWRITE_FONT_FACE_TYPE fontFaceType,[In] unsigned int numberOfFiles,[In, Buffer] const IDWriteFontFile** fontFiles,[In] unsigned int faceIndex,[In] DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags,[Out, Fast] IDWriteFontFace** fontFace) + IDWriteFactory::CreateFontFace +
    + + +

    Creates an object that represents a font face.

    +
    +

    A value that indicates the type of file format of the font face.

    +

    The number of font files, in element count, required to represent the font face.

    +

    A font file object representing the font face. Because maintains its own references to the input font file objects, you may release them after this call.

    +

    The zero-based index of a font face, in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.

    +

    A value that indicates which, if any, font face simulation flags for algorithmic means of making text bold or italic are applied to the current font face.

    +

    When this method returns, contains an address of a reference to the newly created font face object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368196 + HRESULT IDWriteFactory::CreateFontFace([In] DWRITE_FONT_FACE_TYPE fontFaceType,[In] unsigned int numberOfFiles,[In, Buffer] const IDWriteFontFile** fontFiles,[In] unsigned int faceIndex,[In] DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags,[Out, Fast] IDWriteFontFace** fontFace) + IDWriteFactory::CreateFontFace +
    + + +

    Creates a rendering parameters object with default settings for the primary monitor. Different monitors may have different rendering parameters, for more information see the How to Add Support for Multiple Monitors topic.

    +
    + No documentation. +

    Standard error code.

    + + dd368201 + HRESULT IDWriteFactory::CreateRenderingParams([Out, Fast] IDWriteRenderingParams** renderingParams) + IDWriteFactory::CreateRenderingParams +
    + + +

    Creates a rendering parameters object with default settings for the specified monitor. In most cases, this is the preferred way to create a rendering parameters object.

    +
    +

    A handle for the specified monitor.

    +

    When this method returns, contains an address of a reference to the rendering parameters object created by this method.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368199 + HRESULT IDWriteFactory::CreateMonitorRenderingParams([In] HMONITOR monitor,[Out, Fast] IDWriteRenderingParams** renderingParams) + IDWriteFactory::CreateMonitorRenderingParams +
    + + +

    Creates a rendering parameters object with the specified properties.

    +
    +

    The gamma level to be set for the new rendering parameters object.

    +

    The enhanced contrast level to be set for the new rendering parameters object.

    +

    The ClearType level to be set for the new rendering parameters object.

    +

    Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.

    +

    A value that represents the method (for example, ClearType natural quality) for rendering glyphs.

    +

    When this method returns, contains an address of a reference to the newly created rendering parameters object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368190 + HRESULT IDWriteFactory::CreateCustomRenderingParams([In] float gamma,[In] float enhancedContrast,[In] float clearTypeLevel,[In] DWRITE_PIXEL_GEOMETRY pixelGeometry,[In] DWRITE_RENDERING_MODE renderingMode,[Out, Fast] IDWriteRenderingParams** renderingParams) + IDWriteFactory::CreateCustomRenderingParams +
    + + +

    Registers a font file loader with DirectWrite.

    +
    +

    Pointer to a object for a particular file resource type.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This function registers a font file loader with DirectWrite. The font file loader interface, which should be implemented by a singleton object, handles loading font file resources of a particular type from a key. A given instance can only be registered once. Succeeding attempts will return an error, indicating that it has already been registered. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors, and must not unregister themselves inside their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration with DirectWrite of font file loaders should be performed outside of the font file loader implementation.

    +
    + + dd368210 + HRESULT IDWriteFactory::RegisterFontFileLoader([In] IDWriteFontFileLoader* fontFileLoader) + IDWriteFactory::RegisterFontFileLoader +
    + + +

    Unregisters a font file loader that was previously registered with the DirectWrite font system using RegisterFontFileLoader.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This function unregisters font file loader callbacks with the DirectWrite font system. You should implement the font file loader interface by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite should be performed outside of the font file loader implementation.

    +
    + + dd368212 + HRESULT IDWriteFactory::UnregisterFontFileLoader([In] IDWriteFontFileLoader* fontFileLoader) + IDWriteFactory::UnregisterFontFileLoader +
    + + +

    Creates a text format object used for text layout.

    +
    +

    An array of characters that contains the name of the font family

    +

    A reference to a font collection object. When this is null, indicates the system font collection.

    +

    A value that indicates the font weight for the text object created by this method.

    +

    A value that indicates the font style for the text object created by this method.

    +

    A value that indicates the font stretch for the text object created by this method.

    +

    The logical size of the font in DIP ("device-independent pixel") units. A DIP equals 1/96 inch.

    +

    An array of characters that contains the locale name.

    +

    When this method returns, contains an address of a reference to a newly created text format object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368203 + HRESULT IDWriteFactory::CreateTextFormat([In] const wchar_t* fontFamilyName,[In, Optional] IDWriteFontCollection* fontCollection,[In] DWRITE_FONT_WEIGHT fontWeight,[In] DWRITE_FONT_STYLE fontStyle,[In] DWRITE_FONT_STRETCH fontStretch,[In] float fontSize,[In] const wchar_t* localeName,[Out, Fast] IDWriteTextFormat** textFormat) + IDWriteFactory::CreateTextFormat +
    + + +

    Creates a typography object for use in a text layout.

    +
    +

    When this method returns, contains the address of a reference to a newly created typography object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368206 + HRESULT IDWriteFactory::CreateTypography([Out, Fast] IDWriteTypography** typography) + IDWriteFactory::CreateTypography +
    + + +

    Creates an object that is used for interoperability with GDI.

    +
    +

    When this method returns, contains an address of a reference to a GDI interop object if successful, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368207 + HRESULT IDWriteFactory::GetGdiInterop([Out] IDWriteGdiInterop** gdiInterop) + IDWriteFactory::GetGdiInterop +
    + + +

    Takes a string, text format, and associated constraints, and produces an object that represents the fully analyzed and formatted result.

    +
    +

    An array of characters that contains the string to create a new object from. This array must be of length stringLength and can contain embedded null characters.

    +

    The number of characters in the string.

    +

    A reference to an object that indicates the format to apply to the string.

    +

    The width of the layout box.

    +

    The height of the layout box.

    +

    When this method returns, contains an address of a reference to the resultant text layout object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368205 + HRESULT IDWriteFactory::CreateTextLayout([In, Buffer] const wchar_t* string,[In] unsigned int stringLength,[In] IDWriteTextFormat* textFormat,[In] float maxWidth,[In] float maxHeight,[Out, Fast] IDWriteTextLayout** textLayout) + IDWriteFactory::CreateTextLayout +
    + + +

    Takes a string, format, and associated constraints, and produces an object representing the result, formatted for a particular display resolution and measuring mode.

    +
    +

    An array of characters that contains the string to create a new object from. This array must be of length stringLength and can contain embedded null characters.

    +

    The length of the string, in character count.

    +

    The text formatting object to apply to the string.

    +

    The width of the layout box.

    +

    The height of the layout box.

    +

    The number of physical pixels per DIP (device independent pixel). For example, if rendering onto a 96 DPI device pixelsPerDip is 1. If rendering onto a 120 DPI device pixelsPerDip is 1.25 (120/96).

    +

    An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specifies the font size and pixels per DIP.

    +

    Instructs the text layout to use the same metrics as GDI bi-level text when set to . When set to TRUE, instructs the text layout to use the same metrics as text measured by GDI using a font created with CLEARTYPE_NATURAL_QUALITY.

    +

    When this method returns, contains an address to the reference of the resultant text layout object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The resulting text layout should only be used for the intended resolution, and for cases where text scalability is desired CreateTextLayout should be used instead.

    +
    + + dd368192 + HRESULT IDWriteFactory::CreateGdiCompatibleTextLayout([In, Buffer] const wchar_t* string,[In] unsigned int stringLength,[In] IDWriteTextFormat* textFormat,[In] float layoutWidth,[In] float layoutHeight,[In] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[In] BOOL useGdiNatural,[Out, Fast] IDWriteTextLayout** textLayout) + IDWriteFactory::CreateGdiCompatibleTextLayout +
    + + +

    Creates an inline object for trimming, using an ellipsis as the omission sign.

    +
    +

    A text format object, created with CreateTextFormat, used for text layout.

    +

    When this method returns, contains an address of a reference to the omission (that is, ellipsis trimming) sign created by this method.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The ellipsis will be created using the current settings of the format, including base font, style, and any effects. Alternate omission signs can be created by the application by implementing .

    +
    + + dd368194 + HRESULT IDWriteFactory::CreateEllipsisTrimmingSign([In] IDWriteTextFormat* textFormat,[Out, Fast] IDWriteInlineObject** trimmingSign) + IDWriteFactory::CreateEllipsisTrimmingSign +
    + + +

    Returns an interface for performing text analysis.

    +
    +

    When this method returns, contains an address of a reference to the newly created text analyzer object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368202 + HRESULT IDWriteFactory::CreateTextAnalyzer([Out, Fast] IDWriteTextAnalyzer** textAnalyzer) + IDWriteFactory::CreateTextAnalyzer +
    + + +

    Creates a number substitution object using a locale name, substitution method, and an indicator whether to ignore user overrides (use NLS defaults for the given culture instead).

    +
    +

    A value that specifies how to apply number substitution on digits and related punctuation.

    +

    The name of the locale to be used in the numberSubstitution object.

    +

    A Boolean flag that indicates whether to ignore user overrides.

    +

    When this method returns, contains an address to a reference to the number substitution object created by this method.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd368200 + HRESULT IDWriteFactory::CreateNumberSubstitution([In] DWRITE_NUMBER_SUBSTITUTION_METHOD substitutionMethod,[In] const wchar_t* localeName,[In] BOOL ignoreUserOverride,[Out, Fast] IDWriteNumberSubstitution** numberSubstitution) + IDWriteFactory::CreateNumberSubstitution +
    + + +

    Creates a glyph run analysis object, which encapsulates information used to render a glyph run.

    +
    +

    A structure that contains the properties of the glyph run (font face, advances, and so on).

    +

    Number of physical pixels per DIP (device independent pixel). For example, if rendering onto a 96 DPI bitmap then pixelsPerDip is 1. If rendering onto a 120 DPI bitmap then pixelsPerDip is 1.25.

    +

    Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified the emSize and pixelsPerDip.

    +

    A value that specifies the rendering mode, which must be one of the raster rendering modes (that is, not default and not outline).

    +

    Specifies the measuring mode to use with glyphs.

    +

    The horizontal position (X-coordinate) of the baseline origin, in DIPs.

    +

    Vertical position (Y-coordinate) of the baseline origin, in DIPs.

    +

    When this method returns, contains an address of a reference to the newly created glyph run analysis object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The glyph run analysis object contains the results of analyzing the glyph run, including the positions of all the glyphs and references to all of the rasterized glyphs in the font cache.

    +
    + + dd368198 + HRESULT IDWriteFactory::CreateGlyphRunAnalysis([In] const DWRITE_GLYPH_RUN* glyphRun,[In] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[In] DWRITE_RENDERING_MODE renderingMode,[In] DWRITE_MEASURING_MODE measuringMode,[In] float baselineOriginX,[In] float baselineOriginY,[Out, Fast] IDWriteGlyphRunAnalysis** glyphRunAnalysis) + IDWriteFactory::CreateGlyphRunAnalysis +
    + + +

    Creates a rendering parameters object with the specified properties.

    +
    + + Hh780402 + IDWriteFactory1 + IDWriteFactory1 + +

    The root factory interface for all DirectWrite objects.

    +
    + + hh780401 + IDWriteFactory1 + IDWriteFactory1 +
    + + + Creates a new instance of the class with the type. + + + + + Creates a new instance of the class. + + The factory type. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a font collection representing the set of EUDC (end-user defined characters) fonts.

    +
    +

    The font collection to fill.

    +

    Whether to check for updates.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Note that if no EUDC is set on the system, the returned collection will be empty, meaning it will return success but GetFontFamilyCount will be zero.

    +
    + + hh780403 + HRESULT IDWriteFactory1::GetEudcFontCollection([Out] IDWriteFontCollection** fontCollection,[In] BOOL checkForUpdates) + IDWriteFactory1::GetEudcFontCollection +
    + + +

    Creates a rendering parameters object with the specified properties.

    +
    +

    The gamma level to be set for the new rendering parameters object.

    +

    The enhanced contrast level to be set for the new rendering parameters object.

    +

    The amount of contrast enhancement to use for grayscale antialiasing, zero or greater.

    +

    The ClearType level to be set for the new rendering parameters object.

    +

    Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.

    +

    A value that represents the method (for example, ClearType natural quality) for rendering glyphs.

    +

    When this method returns, contains an address of a reference to the newly created rendering parameters object.

    +

    Standard error code.

    + + hh780402 + HRESULT IDWriteFactory1::CreateCustomRenderingParams([In] float gamma,[In] float enhancedContrast,[In] float enhancedContrastGrayscale,[In] float clearTypeLevel,[In] DWRITE_PIXEL_GEOMETRY pixelGeometry,[In] DWRITE_RENDERING_MODE renderingMode,[Out] IDWriteRenderingParams1** renderingParams) + IDWriteFactory1::CreateCustomRenderingParams +
    + + +

    An object that encapsulates a set of fonts, such as the set of fonts installed on the system, or the set of fonts in a particular directory. The font collection API can be used to discover what font families and fonts are available, and to obtain some metadata about the fonts.

    +
    + +

    The method will give you an object, which encapsulates the set of fonts installed on the system, as shown in the following code example.

    * pFontCollection = null; // Get the system font collection.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pDWriteFactory->GetSystemFontCollection(&pFontCollection);	
    +            }	
    +            

    and both have a GetFontCollection method that returns the font collection being used by the object. These interfaces use the system font collection by default, but can use a custom font collection instead.

    To determine what fonts are available on the system, get a reference to the system font collection. You can then use the method to determine the number of fonts and loop through the list. The following example enumerates the fonts in the system font collection, and prints the font family names to the console.

     #include <dwrite.h>	
    +            #include <string.h>	
    +            #include <stdio.h>	
    +            #include <new> // SafeRelease inline function.	
    +            template <class T> inline void SafeRelease(T **ppT)	
    +            { if (*ppT) { (*ppT)->Release(); *ppT = null; }	
    +            } void wmain()	
    +            { * pDWriteFactory = null;  hr = ( , __uuidof(), reinterpret_cast<**>(&pDWriteFactory) ); * pFontCollection = null; // Get the system font collection. if (SUCCEEDED(hr)) { hr = pDWriteFactory->GetSystemFontCollection(&pFontCollection); } UINT32 familyCount = 0; // Get the number of font families in the collection. if (SUCCEEDED(hr)) { familyCount = pFontCollection->GetFontFamilyCount(); } for (UINT32 i = 0; i < familyCount; ++i) { * pFontFamily = null; // Get the font family. if (SUCCEEDED(hr)) { hr = pFontCollection->GetFontFamily(i, &pFontFamily); } * pFamilyNames = null; // Get a list of localized strings for the family name. if (SUCCEEDED(hr)) { hr = pFontFamily->GetFamilyNames(&pFamilyNames); } UINT32 index = 0;  exists = false; wchar_t localeName[LOCALE_NAME_MAX_LENGTH]; if (SUCCEEDED(hr)) { // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames->FindLocaleName(localeName, &index, &exists); } if (SUCCEEDED(hr) && !exists) // if the above find did not find a match, retry with US English { hr = pFamilyNames->FindLocaleName(L"en-us", &index, &exists); } } // If the specified locale doesn't exist, select the first on the list. if (!exists) index = 0; UINT32 length = 0; // Get the string length. if (SUCCEEDED(hr)) { hr = pFamilyNames->GetStringLength(index, &length); } // Allocate a string big enough to hold the name. wchar_t* name = new (std::nothrow) wchar_t[length+1]; if (name == null) { hr = E_OUTOFMEMORY; } // Get the family name. if (SUCCEEDED(hr)) { hr = pFamilyNames->GetString(index, name, length+1); } if (SUCCEEDED(hr)) { // Print out the family name. wprintf(L"%s\n", name); } SafeRelease(&pFontFamily); SafeRelease(&pFamilyNames); delete [] name; } SafeRelease(&pFontCollection); SafeRelease(&pDWriteFactory);	
    +            } 
    +
    + + dd368214 + IDWriteFontCollection + IDWriteFontCollection +
    + + + Creates a font collection using a custom font collection loader. + + A reference to a DirectWrite factory + An application-defined font collection loader, which must have been previously registered using . + The key used by the loader to identify a collection of font files. The buffer allocated for this key should at least be the size of collectionKeySize. + HRESULT IDWriteFactory::CreateCustomFontCollection([None] IDWriteFontCollectionLoader* collectionLoader,[In, Buffer] const void* collectionKey,[None] int collectionKeySize,[Out] IDWriteFontCollection** fontCollection) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the number of font families in the collection.

    +
    + + dd370974 + GetFontFamilyCount + GetFontFamilyCount + unsigned int IDWriteFontCollection::GetFontFamilyCount() +
    + + +

    Gets the number of font families in the collection.

    +
    +

    The number of font families in the collection.

    + + dd370974 + unsigned int IDWriteFontCollection::GetFontFamilyCount() + IDWriteFontCollection::GetFontFamilyCount +
    + + +

    Creates a font family object given a zero-based font family index.

    +
    +

    Zero-based index of the font family.

    +

    When this method returns, contains the address of a reference to the newly created font family object.

    + + dd370970 + HRESULT IDWriteFontCollection::GetFontFamily([In] unsigned int index,[Out] IDWriteFontFamily** fontFamily) + IDWriteFontCollection::GetFontFamily +
    + + +

    Finds the font family with the specified family name.

    +
    +

    An array of characters, which is null-terminated, containing the name of the font family. The name is not case-sensitive but must otherwise exactly match a family name in the collection.

    +

    When this method returns, contains the zero-based index of the matching font family if the family name was found; otherwise, UINT_MAX.

    +

    When this method returns, TRUE if the family name exists; otherwise, .

    + + dd368217 + HRESULT IDWriteFontCollection::FindFamilyName([In] const wchar_t* familyName,[Out] unsigned int* index,[Out] BOOL* exists) + IDWriteFontCollection::FindFamilyName +
    + + +

    Gets the font object that corresponds to the same physical font as the specified font face object. The specified physical font must belong to the font collection.

    +
    +

    A font face object that specifies the physical font.

    +

    When this method returns, contains the address of a reference to the newly created font object if successful; otherwise, null.

    + + dd370978 + HRESULT IDWriteFontCollection::GetFontFromFontFace([In] IDWriteFontFace* fontFace,[Out] IDWriteFont** font) + IDWriteFontCollection::GetFontFromFontFace +
    + + +

    Used to construct a collection of fonts given a particular type of key.

    +
    + +

    The font collection loader interface is recommended to be implemented by a singleton object. Note that font collection loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.

    +
    + + dd368215 + IDWriteFontCollectionLoader + IDWriteFontCollectionLoader +
    + + + Creates a font file enumerator object that encapsulates a collection of font files. The font system calls back to this interface to create a font collection. + + Pointer to the object that was used to create the current font collection. + A font collection key that uniquely identifies the collection of font files within the scope of the font collection loader being used. The buffer allocated for this key must be at least the size, in bytes, specified by collectionKeySize. + a reference to the newly created font file enumerator. + HRESULT IDWriteFontCollectionLoader::CreateEnumeratorFromKey([None] IDWriteFactory* factory,[In, Buffer] const void* collectionKey,[None] int collectionKeySize,[Out] IDWriteFontFileEnumerator** fontFileEnumerator) + + + + Internal FontCollectionLoader Callback + + + + HRESULT IDWriteFontCollectionLoader::CreateEnumeratorFromKey([None] IDWriteFactory* factory,[In, Buffer] const void* collectionKey,[None] int collectionKeySize,[Out] IDWriteFontFileEnumerator** fontFileEnumerator) + + + +

    Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.

    +
    + + dd370983 + IDWriteFontFace + IDWriteFontFace +
    + + + Creates an object that represents a font face. + + A reference to a DirectWrite factory + A value that indicates the type of file format of the font face. + A font file object representing the font face. Because maintains its own references to the input font file objects, you may release them after this call. + The zero-based index of a font face, in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero. + A value that indicates which, if any, font face simulation flags for algorithmic means of making text bold or italic are applied to the current font face. + HRESULT IDWriteFactory::CreateFontFace([None] DWRITE_FONT_FACE_TYPE fontFaceType,[None] int numberOfFiles,[In, Buffer] const IDWriteFontFile** fontFiles,[None] int faceIndex,[None] DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags,[Out] IDWriteFontFace** fontFace) + + + + Creates a font face object for the font. + + the to create the FontFace from. + HRESULT IDWriteFont::CreateFontFace([Out] IDWriteFontFace** fontFace) + + + + Obtains ideal (resolution-independent) glyph metrics in font design units. + + + Design glyph metrics are used for glyph positioning. + + An array of glyph indices for which to compute metrics. The array must contain at least as many elements as specified by glyphCount. + Indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation + an array of structures. + HRESULT IDWriteFontFace::GetDesignGlyphMetrics([In, Buffer] const short* glyphIndices,[None] int glyphCount,[Out, Buffer] DWRITE_GLYPH_METRICS* glyphMetrics,[None] BOOL isSideways) + + + + Obtains glyph metrics in font design units with the return values compatible with what GDI would produce. + + The logical size of the font in DIP units. + The number of physical pixels per DIP. + An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and pixelsPerDip. + When set to FALSE, the metrics are the same as the metrics of GDI aliased text. When set to TRUE, the metrics are the same as the metrics of text measured by GDI using a font created with CLEARTYPE_NATURAL_QUALITY. + An array of glyph indices for which to compute the metrics. + A BOOL value that indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation. + An array of structures filled by this function. The metrics are in font design units. + HRESULT IDWriteFontFace::GetGdiCompatibleGlyphMetrics([None] float emSize,[None] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[None] BOOL useGdiNatural,[In, Buffer] const short* glyphIndices,[None] int glyphCount,[Out, Buffer] DWRITE_GLYPH_METRICS* glyphMetrics,[None] BOOL isSideways) + + + + Returns the nominal mapping of UCS4 Unicode code points to glyph indices as defined by the font 'CMAP' table. + + + Note that this mapping is primarily provided for line layout engines built on top of the physical font API. Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond to how a Unicode string will map to glyph indices when rendering using a particular font face. Also, note that Unicode variant selectors provide for alternate mappings for character to glyph. This call will always return the default variant. + + An array of USC4 code points from which to obtain nominal glyph indices. The array must be allocated and be able to contain the number of elements specified by codePointCount. + a reference to an array of nominal glyph indices filled by this function. + HRESULT IDWriteFontFace::GetGlyphIndices([In, Buffer] const int* codePoints,[None] int codePointCount,[Out, Buffer] short* glyphIndices) + + + + Obtains the font files representing a font face. + + + The IDWriteFontFace::GetFiles method should be called twice. The first time you call GetFilesfontFiles should be NULL. When the method returns, numberOfFiles receives the number of font files that represent the font face. Then, call the method a second time, passing the numberOfFiles value that was output the first call, and a non-null buffer of the correct size to store the references. + + An array that stores references to font files representing the font face. This parameter can be NULL if the user wants only the number of files representing the font face. This API increments reference count of the font file references returned according to COM conventions, and the client should release them when finished. + HRESULT IDWriteFontFace::GetFiles([InOut] int* numberOfFiles,[Out, Buffer, Optional] IDWriteFontFile** fontFiles) + + + + Finds the specified OpenType font table if it exists and returns a reference to it. The function accesses the underlying font data through the interface implemented by the font file loader. + + + The context for the same tag may be different for each call, so each one must be held and released separately. + + The four-character tag of a OpenType font table to find. Use the DWRITE_MAKE_OPENTYPE_TAG macro to create it as an UINT32. Unlike GDI, it does not support the special TTCF and null tags to access the whole font. + When this method returns, contains the address of a reference to the base of the table in memory. The reference is valid only as long as the font face used to get the font table still exists; (not any other font face, even if it actually refers to the same physical font). + When this method returns, the address of a reference to the opaque context, which must be freed by calling {{ReleaseFontTable}}. The context actually comes from the lower-level , which may be implemented by the application or DWrite itself. It is possible for a NULL tableContext to be returned, especially if the implementation performs direct memory mapping on the whole file. Nevertheless, always release it later, and do not use it as a test for function success. The same table can be queried multiple times, but because each returned context can be different, you must release each context separately. + TRUE if the font table exists; otherwise, FALSE. + HRESULT IDWriteFontFace::TryGetFontTable([In] int openTypeTableTag,[Out, Buffer] const void** tableData,[Out] int* tableSize,[Out] void** tableContext,[Out] BOOL* exists) + + + + Computes the outline of a run of glyphs by calling back to the outline sink interface. + + The logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch. + An array of glyph indices. The glyphs are in logical order and the advance direction depends on the isRightToLeft parameter. The array must be allocated and be able to contain the number of elements specified by glyphCount. + An optional array of glyph advances in DIPs. The advance of a glyph is the amount to advance the position (in the direction of the baseline) after drawing the glyph. glyphAdvances contains the number of elements specified by glyphIndices.Length. + An optional array of glyph offsets, each of which specifies the offset along the baseline and offset perpendicular to the baseline of a glyph relative to the current pen position. glyphOffsets contains the number of elements specified by glyphIndices.Length. + If TRUE, the ascender of the glyph runs alongside the baseline. If FALSE, the glyph ascender runs perpendicular to the baseline. For example, an English alphabet on a vertical baseline would have isSideways set to FALSE. A client can render a vertical run by setting isSideways to TRUE and rotating the resulting geometry 90 degrees to the right using a transform. The isSideways and isRightToLeft parameters cannot both be true. + The visual order of the glyphs. If this parameter is FALSE, then glyph advances are from left to right. If TRUE, the advance direction is right to left. By default, the advance direction is left to right. + A reference to the interface that is called back to perform outline drawing operations. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteFontFace::GetGlyphRunOutline([None] float emSize,[In, Buffer] const short* glyphIndices,[In, Buffer, Optional] const float* glyphAdvances,[In, Buffer, Optional] const DWRITE_GLYPH_OFFSET* glyphOffsets,[None] int glyphCount,[None] BOOL isSideways,[None] BOOL isRightToLeft,[None] IDWriteGeometrySink* geometrySink) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Obtains the file format type of a font face.

    +
    + + dd371031 + GetType + GetType + DWRITE_FONT_FACE_TYPE IDWriteFontFace::GetType() +
    + + +

    Obtains the index of a font face in the context of its font files.

    +
    + + dd371007 + GetIndex + GetIndex + unsigned int IDWriteFontFace::GetIndex() +
    + + +

    Obtains the algorithmic style simulation flags of a font face.

    +
    + + dd371018 + GetSimulations + GetSimulations + DWRITE_FONT_SIMULATIONS IDWriteFontFace::GetSimulations() +
    + + +

    Determines whether the font is a symbol font.

    +
    + + dd371034 + IsSymbolFont + IsSymbolFont + BOOL IDWriteFontFace::IsSymbolFont() +
    + + +

    Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations.

    +
    + + dd371011 + GetMetrics + GetMetrics + void IDWriteFontFace::GetMetrics([Out] DWRITE_FONT_METRICS* fontFaceMetrics) +
    + + +

    Obtains the number of glyphs in the font face.

    +
    + + dd370993 + GetGlyphCount + GetGlyphCount + unsigned short IDWriteFontFace::GetGlyphCount() +
    + + +

    Obtains the file format type of a font face.

    +
    +

    A value that indicates the type of format for the font face (such as Type 1, TrueType, vector, or bitmap).

    + + dd371031 + DWRITE_FONT_FACE_TYPE IDWriteFontFace::GetType() + IDWriteFontFace::GetType +
    + + +

    Obtains the font files representing a font face.

    +
    +

    If fontFiles is null, receives the number of files representing the font face. Otherwise, the number of font files being requested should be passed. See the Remarks section below for more information.

    +

    When this method returns, contains a reference to a user-provided array that stores references to font files representing the font face. This parameter can be null if the user wants only the number of files representing the font face. This API increments reference count of the font file references returned according to COM conventions, and the client should release them when finished.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The method should be called twice. The first time you call GetFilesfontFiles should be null. When the method returns, numberOfFiles receives the number of font files that represent the font face.

    Then, call the method a second time, passing the numberOfFiles value that was output the first call, and a non-null buffer of the correct size to store the references.

    +
    + + dd370989 + HRESULT IDWriteFontFace::GetFiles([InOut] unsigned int* numberOfFiles,[Out, Buffer, Optional] IDWriteFontFile** fontFiles) + IDWriteFontFace::GetFiles +
    + + +

    Obtains the index of a font face in the context of its font files.

    +
    +

    The zero-based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value is zero.

    + + dd371007 + unsigned int IDWriteFontFace::GetIndex() + IDWriteFontFace::GetIndex +
    + + +

    Obtains the algorithmic style simulation flags of a font face.

    +
    +

    Font face simulation flags for algorithmic means of making text bold or italic.

    + + dd371018 + DWRITE_FONT_SIMULATIONS IDWriteFontFace::GetSimulations() + IDWriteFontFace::GetSimulations +
    + + +

    Determines whether the font is a symbol font.

    +
    +

    Returns TRUE if the font is a symbol font, otherwise .

    + + dd371034 + BOOL IDWriteFontFace::IsSymbolFont() + IDWriteFontFace::IsSymbolFont +
    + + +

    Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations.

    +
    +

    When this method returns, a? structure that holds metrics (such as ascent, descent, or cap height) for the current font face element. The metrics returned by this function are in font design units.

    + + dd371011 + void IDWriteFontFace::GetMetrics([Out] DWRITE_FONT_METRICS* fontFaceMetrics) + IDWriteFontFace::GetMetrics +
    + + +

    Obtains the number of glyphs in the font face.

    +
    +

    The number of glyphs in the font face.

    + + dd370993 + unsigned short IDWriteFontFace::GetGlyphCount() + IDWriteFontFace::GetGlyphCount +
    + + +

    Obtains ideal (resolution-independent) glyph metrics in font design units.

    +
    +

    An array of glyph indices for which to compute metrics. The array must contain at least as many elements as specified by glyphCount.

    +

    The number of elements in the glyphIndices array.

    +

    When this method returns, contains an array of structures. glyphMetrics must be initialized with an empty buffer that contains at least as many elements as glyphCount. The metrics returned by this function are in font design units.

    +

    Indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Design glyph metrics are used for glyph positioning.

    +
    + + dd370986 + HRESULT IDWriteFontFace::GetDesignGlyphMetrics([In, Buffer] const unsigned short* glyphIndices,[In] unsigned int glyphCount,[Out, Buffer] DWRITE_GLYPH_METRICS* glyphMetrics,[In] BOOL isSideways) + IDWriteFontFace::GetDesignGlyphMetrics +
    + + +

    Returns the nominal mapping of UCS4 Unicode code points to glyph indices as defined by the font 'CMAP' table.

    +
    +

    An array of USC4 code points from which to obtain nominal glyph indices. The array must be allocated and be able to contain the number of elements specified by codePointCount.

    +

    The number of elements in the codePoints array.

    +

    When this method returns, contains a reference to an array of nominal glyph indices filled by this function.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Note that this mapping is primarily provided for line layout engines built on top of the physical font API. Because of OpenType glyph substitution and line layout character substitution, the nominal conversion does not always correspond to how a Unicode string will map to glyph indices when rendering using a particular font face. Also, note that Unicode variant selectors provide for alternate mappings for character to glyph. This call will always return the default variant.

    When characters are not present in the font this method returns the index 0, which is the undefined glyph or ".notdef" glyph. If a character isn't in a font, returns false and GetUnicodeRanges doesn't return it in the range.

    +
    + + dd370998 + HRESULT IDWriteFontFace::GetGlyphIndicesW([In, Buffer] const unsigned int* codePoints,[In] unsigned int codePointCount,[Out, Buffer] unsigned short* glyphIndices) + IDWriteFontFace::GetGlyphIndicesW +
    + + +

    Finds the specified OpenType font table if it exists and returns a reference to it. The function accesses the underlying font data through the interface implemented by the font file loader.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The context for the same tag may be different for each call, so each one must be held and released separately.

    +
    + + dd371039 + HRESULT IDWriteFontFace::TryGetFontTable([In] unsigned int openTypeTableTag,[Out, Buffer] const void** tableData,[Out] unsigned int* tableSize,[Out] void** tableContext,[Out] BOOL* exists) + IDWriteFontFace::TryGetFontTable +
    + + +

    Releases the table obtained earlier from TryGetFontTable.

    +
    + No documentation. + + dd371036 + void IDWriteFontFace::ReleaseFontTable([In] void* tableContext) + IDWriteFontFace::ReleaseFontTable +
    + + +

    Computes the outline of a run of glyphs by calling back to the outline sink interface.

    +
    +

    The logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch.

    +

    An array of glyph indices. The glyphs are in logical order and the advance direction depends on the isRightToLeft parameter. The array must be allocated and be able to contain the number of elements specified by glyphCount.

    +

    An optional array of glyph advances in DIPs. The advance of a glyph is the amount to advance the position (in the direction of the baseline) after drawing the glyph. glyphAdvances contains the number of elements specified by glyphCount.

    +

    An optional array of glyph offsets, each of which specifies the offset along the baseline and offset perpendicular to the baseline of a glyph relative to the current pen position. glyphOffsets contains the number of elements specified by glyphCount.

    +

    The number of glyphs in the run.

    +

    If TRUE, the ascender of the glyph runs alongside the baseline. If , the glyph ascender runs perpendicular to the baseline. For example, an English alphabet on a vertical baseline would have isSideways set to .

    A client can render a vertical run by setting isSideways to TRUE and rotating the resulting geometry 90 degrees to the right using a transform. The isSideways and isRightToLeft parameters cannot both be true.

    +

    The visual order of the glyphs. If this parameter is , then glyph advances are from left to right. If TRUE, the advance direction is right to left. By default, the advance direction is left to right.

    +

    A reference to the interface that is called back to perform outline drawing operations.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371003 + HRESULT IDWriteFontFace::GetGlyphRunOutline([In] float emSize,[In, Buffer] const unsigned short* glyphIndices,[In, Buffer, Optional] const float* glyphAdvances,[In, Buffer, Optional] const DWRITE_GLYPH_OFFSET* glyphOffsets,[In] unsigned int glyphCount,[In] BOOL isSideways,[In] BOOL isRightToLeft,[In] ID2D1SimplifiedGeometrySink* geometrySink) + IDWriteFontFace::GetGlyphRunOutline +
    + + +

    Determines the recommended rendering mode for the font, using the specified size and rendering parameters.

    +
    +

    The logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch.

    +

    The number of physical pixels per DIP. For example, if the DPI of the rendering surface is 96, this value is 1.0f. If the DPI is 120, this value is 120.0f/96.

    +

    The measuring method that will be used for glyphs in the font. Renderer implementations may choose different rendering modes for different measuring methods, for example:

    • for
    • for
    • for
    +

    A reference to an object that contains rendering settings such as gamma level, enhanced contrast, and ClearType level. This parameter is necessary in case the rendering parameters object overrides the rendering mode.

    +

    When this method returns, contains a value that indicates the recommended rendering mode to use.

    + + dd371015 + HRESULT IDWriteFontFace::GetRecommendedRenderingMode([In] float emSize,[In] float pixelsPerDip,[In] DWRITE_MEASURING_MODE measuringMode,[In] IDWriteRenderingParams* renderingParams,[Out] DWRITE_RENDERING_MODE* renderingMode) + IDWriteFontFace::GetRecommendedRenderingMode +
    + + +

    Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.

    +
    +

    The logical size of the font in DIP units.

    +

    The number of physical pixels per DIP.

    +

    An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and pixelsPerDip.

    +

    A reference to a DWRITE_FONT_METRICS structure to fill in. The metrics returned by this function are in font design units.

    + + dd941789 + HRESULT IDWriteFontFace::GetGdiCompatibleMetrics([In] float emSize,[In] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[Out] DWRITE_FONT_METRICS* fontFaceMetrics) + IDWriteFontFace::GetGdiCompatibleMetrics +
    + + +

    Obtains glyph metrics in font design units with the return values compatible with what GDI would produce.

    +
    +

    The ogical size of the font in DIP units.

    +

    The number of physical pixels per DIP.

    +

    An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and pixelsPerDip.

    +

    When set to , the metrics are the same as the metrics of GDI aliased text. When set to TRUE, the metrics are the same as the metrics of text measured by GDI using a font created with CLEARTYPE_NATURAL_QUALITY.

    +

    An array of glyph indices for which to compute the metrics.

    +

    The number of elements in the glyphIndices array.

    +

    An array of structures filled by this function. The metrics are in font design units.

    +

    A value that indicates whether the font is being used in a sideways run. This can affect the glyph metrics if the font has oblique simulation because sideways oblique simulation differs from non-sideways oblique simulation.

    +

    Standard error code. If any of the input glyph indices are outside of the valid glyph index range for the current font face, E_INVALIDARG will be returned.

    + + dd941788 + HRESULT IDWriteFontFace::GetGdiCompatibleGlyphMetrics([In] float emSize,[In] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[In] BOOL useGdiNatural,[In, Buffer] const unsigned short* glyphIndices,[In] unsigned int glyphCount,[Out, Buffer] DWRITE_GLYPH_METRICS* glyphMetrics,[In] BOOL isSideways) + IDWriteFontFace::GetGdiCompatibleGlyphMetrics +
    + + +

    Allows you to access fallback fonts from the font list.

    The interface defines a fallback sequence to map character ranges to fonts, which is either created via or retrieved from .

    +
    + + dn280474 + IDWriteFontFallback + IDWriteFontFallback +
    + + +

    Determines an appropriate font to use to render the beginning range of text.

    +
    +

    The text source implementation holds the text and locale.

    +

    Starting position to analyze.

    +

    Length of the text to analyze.

    +

    Default font collection to use.

    +

    Family name of the base font. If you pass null, no matching will be done against the family.

    +

    The desired weight.

    +

    The desired style.

    +

    The desired stretch.

    +

    Length of text mapped to the mapped font. This will always be less than or equal to the text length and greater than zero (if the text length is non-zero) so the caller advances at least one character.

    +

    The font that should be used to render the first mappedLength characters of the text. If it returns null, that means that no font can render the text, and mappedLength is the number of characters to skip (rendered with a missing glyph).

    +

    Scale factor to multiply the em size of the returned font by.

    +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Determines an appropriate font to use to render the beginning range of text.

    +
    +

    The text source implementation holds the text and locale.

    +

    Starting position to analyze.

    +

    Length of the text to analyze.

    +

    Default font collection to use.

    +

    Family name of the base font. If you pass null, no matching will be done against the family.

    +

    The desired weight.

    +

    The desired style.

    +

    The desired stretch.

    +

    Length of text mapped to the mapped font. This will always be less than or equal to the text length and greater than zero (if the text length is non-zero) so the caller advances at least one character.

    +

    The font that should be used to render the first mappedLength characters of the text. If it returns null, that means that no font can render the text, and mappedLength is the number of characters to skip (rendered with a missing glyph).

    +

    Scale factor to multiply the em size of the returned font by.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280480 + HRESULT IDWriteFontFallback::MapCharacters([In] IDWriteTextAnalysisSource* analysisSource,[In] unsigned int textPosition,[In] unsigned int textLength,[In, Optional] IDWriteFontCollection* baseFontCollection,[In, Optional] const wchar_t* baseFamilyName,[In] DWRITE_FONT_WEIGHT baseWeight,[In] DWRITE_FONT_STYLE baseStyle,[In] DWRITE_FONT_STRETCH baseStretch,[Out] unsigned int* mappedLength,[Out, Optional] IDWriteFont** mappedFont,[Out] float* scale) + IDWriteFontFallback::MapCharacters +
    + + +

    Specifies properties used to identify and execute typographic features in the current font face.

    +
    + +

    A non-zero value generally enables the feature execution, while the zero value disables it. A feature requiring a selector uses this value to indicate the selector index.

    The OpenType standard provides access to typographic features available in the font by means of a feature tag with the associated parameters. The OpenType feature tag is a 4-byte identifier of the registered name of a feature. For example, the 'kern' feature name tag is used to identify the 'Kerning' feature in OpenType font. Similarly, the OpenType feature tag for 'Standard Ligatures' and 'Fractions' is 'liga' and 'frac' respectively. Since a single run can be associated with more than one typographic features, the Text String API accepts typographic settings for a run as a list of features and are executed in the order they are specified.

    The value of the tag member represents the OpenType name tag of the feature, while the param value represents additional parameter for the execution of the feature referred by the tag member. Both nameTag and parameter are stored as little endian, the same convention followed by GDI. Most features treat the Param value as a binary value that indicates whether to turn the execution of the feature on or off, with it being off by default in the majority of cases. Some features, however, treat this value as an integral value representing the integer index to the list of alternate results it may produce during the execution; for instance, the feature 'Stylistic Alternates' or 'salt' uses the parameter value as an index to the list of alternate substituting glyphs it could produce for a specified glyph.

    +
    + + dd368066 + DWRITE_FONT_FEATURE + DWRITE_FONT_FEATURE +
    + + + Initializes a new instance of the struct. + + The name tag. + The parameter. + + + +

    The feature OpenType name identifier.

    +
    + + dd368066 + DWRITE_FONT_FEATURE_TAG nameTag + DWRITE_FONT_FEATURE_TAG nameTag +
    + + +

    The execution parameter of the feature.

    +
    + + dd368066 + unsigned int parameter + unsigned int parameter +
    + + +

    Represents a font file. Applications such as font managers or font viewers can call to find out if a particular file is a font file, and whether it is a font type that is supported by the font system.

    +
    + + dd371060 + IDWriteFontFile + IDWriteFontFile +
    + + + Creates a font file reference object from a local font file. + + A reference to a DirectWrite factory + An array of characters that contains the absolute file path for the font file. Subsequent operations on the constructed object may fail if the user provided filePath doesn't correspond to a valid file on the disk. + HRESULT IDWriteFactory::CreateFontFileReference([In] const wchar_t* filePath,[In, Optional] const __int64* lastWriteTime,[Out] IDWriteFontFile** fontFile) + + + + Creates a font file reference object from a local font file. + + A reference to a DirectWrite factory + An array of characters that contains the absolute file path for the font file. Subsequent operations on the constructed object may fail if the user provided filePath doesn't correspond to a valid file on the disk. + The last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time. You should specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided lastWriteTime doesn't match the file on the disk. + HRESULT IDWriteFactory::CreateFontFileReference([In] const wchar_t* filePath,[In, Optional] const __int64* lastWriteTime,[Out] IDWriteFontFile** fontFile) + + + + Creates a reference to an application-specific font file resource. + + A reference to a DirectWrite factory + A font file reference key that uniquely identifies the font file resource during the lifetime of fontFileLoader. + The size of the font file reference key in bytes. + The font file loader that will be used by the font system to load data from the file identified by fontFileReferenceKey. + + This function is provided for cases when an application or a document needs to use a private font without having to install it on the system. fontFileReferenceKey has to be unique only in the scope of the fontFileLoader used in this call. + + HRESULT IDWriteFactory::CreateCustomFontFileReference([In, Buffer] const void* fontFileReferenceKey,[None] int fontFileReferenceKeySize,[None] IDWriteFontFileLoader* fontFileLoader,[Out] IDWriteFontFile** fontFile) + + + + Obtains the file loader associated with a font file object. + + HRESULT IDWriteFontFile::GetLoader([Out] IDWriteFontFileLoader** fontFileLoader) + + + + Obtains the reference to the reference key of a font file. The returned reference is valid until the font file object is released. + + the reference to the reference key of a font file. + HRESULT IDWriteFontFile::GetReferenceKey([Out, Buffer] const void** fontFileReferenceKey,[Out] int* fontFileReferenceKeySize) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Obtains the reference to the reference key of a font file. The returned reference is valid until the font file object is released.

    +
    +

    When this method returns, contains an address of a reference to the font file reference key. Note that the reference value is only valid until the font file object it is obtained from is released. This parameter is passed uninitialized.

    +

    When this method returns, contains the size of the font file reference key in bytes. This parameter is passed uninitialized.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371108 + HRESULT IDWriteFontFile::GetReferenceKey([Out, Buffer] const void** fontFileReferenceKey,[Out] unsigned int* fontFileReferenceKeySize) + IDWriteFontFile::GetReferenceKey +
    + + +

    Obtains the file loader associated with a font file object.

    +
    +

    When this method returns, contains the address of a reference to the font file loader associated with the font file object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371104 + HRESULT IDWriteFontFile::GetLoader([Out] IDWriteFontFileLoader** fontFileLoader) + IDWriteFontFile::GetLoader +
    + + +

    Analyzes a file and returns whether it represents a font, and whether the font type is supported by the font system.

    +
    +

    TRUE if the font type is supported by the font system; otherwise, .

    +

    When this method returns, contains a value that indicates the type of the font file. Note that even if isSupportedFontType is , the fontFileType value may be different from .

    +

    When this method returns, contains a value that indicates the type of the font face. If fontFileType is not equal to , then that can be constructed from the font file.

    +

    When this method returns, contains the number of font faces contained in the font file.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + Important??Certain font file types are recognized, but not supported by the font system. For example, the font system will recognize a file as a Type 1 font file but will not be able to construct a font face object from it. In such situations, Analyze will set isSupportedFontType output parameter to .? + + + dd371099 + HRESULT IDWriteFontFile::Analyze([Out] BOOL* isSupportedFontType,[Out] DWRITE_FONT_FILE_TYPE* fontFileType,[Out, Optional] DWRITE_FONT_FACE_TYPE* fontFaceType,[Out] unsigned int* numberOfFaces) + IDWriteFontFile::Analyze +
    + + +

    Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to MoveNext advances to the first file.

    +
    + + dd371071 + IDWriteFontFileEnumerator + IDWriteFontFileEnumerator +
    + + + Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to MoveNext advances to the first file. + + the value TRUE if the enumerator advances to a file; otherwise, FALSE if the enumerator advances past the last file in the collection. + HRESULT IDWriteFontFileEnumerator::MoveNext([Out] BOOL* hasCurrentFile) + + + + Gets a reference to the current font file. + + a reference to the newly created object. + HRESULT IDWriteFontFileEnumerator::GetCurrentFontFile([Out] IDWriteFontFile** fontFile) + + + + Internal FontFileEnumerator Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + + Advances to the next font file in the collection. When it is first created, the enumerator is positioned before the first element of the collection and the first call to MoveNext advances to the first file. + + the value TRUE if the enumerator advances to a file; otherwise, FALSE if the enumerator advances past the last file in the collection. + HRESULT IDWriteFontFileEnumerator::MoveNext([Out] BOOL* hasCurrentFile) + + + + Gets a reference to the current font file. + + a reference to the newly created object. + HRESULT IDWriteFontFileEnumerator::GetCurrentFontFile([Out] IDWriteFontFile** fontFile) + + + +

    Handles loading font file resources of a particular type from a font file reference key into a font file stream object.

    +
    + +

    The font file loader interface is recommended to be implemented by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.

    +
    + + dd371075 + IDWriteFontFileLoader + IDWriteFontFileLoader +
    + + + Creates a font file stream object that encapsulates an open file resource. + + + The resource is closed when the last reference to fontFileStream is released. + + A reference to a font file reference key that uniquely identifies the font file resource within the scope of the font loader being used. The buffer allocated for this key must at least be the size, in bytes, specified by fontFileReferenceKeySize. + a reference to the newly created object. + HRESULT IDWriteFontFileLoader::CreateStreamFromKey([In, Buffer] const void* fontFileReferenceKey,[None] int fontFileReferenceKeySize,[Out] IDWriteFontFileStream** fontFileStream) + + + +

    Handles loading font file resources of a particular type from a font file reference key into a font file stream object.

    +
    + +

    The font file loader interface is recommended to be implemented by a singleton object. Note that font file loader implementations must not register themselves with DirectWrite factory inside their constructors and must not unregister themselves in their destructors, because registration and unregistraton operations increment and decrement the object reference count respectively. Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed outside of the font file loader implementation as a separate step.

    +
    + + dd371075 + IDWriteFontFileLoader + IDWriteFontFileLoader +
    + + + Creates a font file stream object that encapsulates an open file resource. + + + The resource is closed when the last reference to fontFileStream is released. + + A reference to a font file reference key that uniquely identifies the font file resource within the scope of the font loader being used. The buffer allocated for this key must at least be the size, in bytes, specified by fontFileReferenceKeySize. + a reference to the newly created object. + HRESULT IDWriteFontFileLoader::CreateStreamFromKey([In, Buffer] const void* fontFileReferenceKey,[None] int fontFileReferenceKeySize,[Out] IDWriteFontFileStream** fontFileStream) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a font file stream object that encapsulates an open file resource.

    +
    +

    A reference to a font file reference key that uniquely identifies the font file resource within the scope of the font loader being used. The buffer allocated for this key must at least be the size, in bytes, specified by fontFileReferenceKeySize.

    +

    The size of font file reference key, in bytes.

    +

    When this method returns, contains the address of a reference to the newly created object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The resource is closed when the last reference to fontFileStream is released.

    +
    + + dd371077 + HRESULT IDWriteFontFileLoader::CreateStreamFromKey([In, Buffer] const void* fontFileReferenceKey,[In] unsigned int fontFileReferenceKeySize,[Out] IDWriteFontFileStream** fontFileStream) + IDWriteFontFileLoader::CreateStreamFromKey +
    + + + Internal FontFileLoader Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT IDWriteFontFileLoader::CreateStreamFromKey([In, Buffer] const void* fontFileReferenceKey,[None] int fontFileReferenceKeySize,[Out] IDWriteFontFileStream** fontFileStream) + + + +

    Reads a fragment from a font file.

    +
    + +

    Note that ReadFileFragment implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from ReadFileFragment.

    DirectWrite may invoke methods on the same object from multiple threads simultaneously. Therefore, ReadFileFragment implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.

    +
    + + dd371091 + IDWriteFontFileStream + IDWriteFontFileStream +
    + + + Reads a fragment from a font file. + + + Note that ReadFileFragment implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from ReadFileFragment. {{DirectWrite}} may invoke methods on the same object from multiple threads simultaneously. Therefore, ReadFileFragment implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section. + + When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized. + The offset of the fragment, in bytes, from the beginning of the font file. + The size of the file fragment, in bytes. + When this method returns, contains the address of + a reference to a reference to the client-defined context to be passed to {{ReleaseFileFragment}}. + HRESULT IDWriteFontFileStream::ReadFileFragment([Out, Buffer] const void** fragmentStart,[None] __int64 fileOffset,[None] __int64 fragmentSize,[Out] void** fragmentContext) + + + + Releases a fragment from a file. + + A reference to the client-defined context of a font fragment returned from {{ReadFileFragment}}. + void IDWriteFontFileStream::ReleaseFileFragment([None] void* fragmentContext) + + + + Obtains the total size of a file. + + + Implementing GetFileSize() for asynchronously loaded font files may require downloading the complete file contents. Therefore, this method should be used only for operations that either require a complete font file to be loaded (for example, copying a font file) or that need to make decisions based on the value of the file size (for example, validation against a persisted file size). + + the total size of the file. + HRESULT IDWriteFontFileStream::GetFileSize([Out] __int64* fileSize) + + + + Obtains the last modified time of the file. + + + The "last modified time" is used by DirectWrite font selection algorithms to determine whether one font resource is more up to date than another one. + + the last modified time of the file in the format that represents the number of 100-nanosecond intervals since January 1, 1601 (UTC). + HRESULT IDWriteFontFileStream::GetLastWriteTime([Out] __int64* lastWriteTime) + + + +

    Reads a fragment from a font file.

    +
    + +

    Note that ReadFileFragment implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from ReadFileFragment.

    DirectWrite may invoke methods on the same object from multiple threads simultaneously. Therefore, ReadFileFragment implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.

    +
    + + dd371091 + IDWriteFontFileStream + IDWriteFontFileStream +
    + + + Reads a fragment from a font file. + + + Note that ReadFileFragment implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from ReadFileFragment. {{DirectWrite}} may invoke methods on the same object from multiple threads simultaneously. Therefore, ReadFileFragment implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section. + + When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized. + The offset of the fragment, in bytes, from the beginning of the font file. + The size of the file fragment, in bytes. + When this method returns, contains the address of + a reference to a reference to the client-defined context to be passed to {{ReleaseFileFragment}}. + HRESULT IDWriteFontFileStream::ReadFileFragment([Out, Buffer] const void** fragmentStart,[None] __int64 fileOffset,[None] __int64 fragmentSize,[Out] void** fragmentContext) + + + + Releases a fragment from a file. + + A reference to the client-defined context of a font fragment returned from {{ReadFileFragment}}. + void IDWriteFontFileStream::ReleaseFileFragment([None] void* fragmentContext) + + + + Obtains the total size of a file. + + + Implementing GetFileSize() for asynchronously loaded font files may require downloading the complete file contents. Therefore, this method should be used only for operations that either require a complete font file to be loaded (for example, copying a font file) or that need to make decisions based on the value of the file size (for example, validation against a persisted file size). + + the total size of the file. + HRESULT IDWriteFontFileStream::GetFileSize([Out] __int64* fileSize) + + + + Obtains the last modified time of the file. + + + The "last modified time" is used by DirectWrite font selection algorithms to determine whether one font resource is more up to date than another one. + + the last modified time of the file in the format that represents the number of 100-nanosecond intervals since January 1, 1601 (UTC). + HRESULT IDWriteFontFileStream::GetLastWriteTime([Out] __int64* lastWriteTime) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Reads a fragment from a font file.

    +
    +

    When this method returns, contains an address of a reference to the start of the font file fragment. This parameter is passed uninitialized.

    +

    The offset of the fragment, in bytes, from the beginning of the font file.

    +

    The size of the file fragment, in bytes.

    +

    When this method returns, contains the address of a reference to a reference to the client-defined context to be passed to ReleaseFileFragment.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Note that ReadFileFragment implementations must check whether the requested font file fragment is within the file bounds. Otherwise, an error should be returned from ReadFileFragment.

    DirectWrite may invoke methods on the same object from multiple threads simultaneously. Therefore, ReadFileFragment implementations that rely on internal mutable state must serialize access to such state across multiple threads. For example, an implementation that uses separate Seek and Read operations to read a file fragment must place the code block containing Seek and Read calls under a lock or a critical section.

    +
    + + dd371091 + HRESULT IDWriteFontFileStream::ReadFileFragment([Out] const void** fragmentStart,[In] unsigned longlong fileOffset,[In] unsigned longlong fragmentSize,[Out] void** fragmentContext) + IDWriteFontFileStream::ReadFileFragment +
    + + +

    Releases a fragment from a file.

    +
    +

    A reference to the client-defined context of a font fragment returned from ReadFileFragment.

    + + dd371095 + void IDWriteFontFileStream::ReleaseFileFragment([In] void* fragmentContext) + IDWriteFontFileStream::ReleaseFileFragment +
    + + +

    Obtains the total size of a file.

    +
    +

    When this method returns, contains the total size of the file.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Implementing GetFileSize() for asynchronously loaded font files may require downloading the complete file contents. Therefore, this method should be used only for operations that either require a complete font file to be loaded (for example, copying a font file) or that need to make decisions based on the value of the file size (for example, validation against a persisted file size).

    +
    + + dd371084 + HRESULT IDWriteFontFileStream::GetFileSize([Out] unsigned longlong* fileSize) + IDWriteFontFileStream::GetFileSize +
    + + +

    Obtains the last modified time of the file.

    +
    +

    When this method returns, contains the last modified time of the file in the format that represents the number of 100-nanosecond intervals since January 1, 1601 (UTC).

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The "last modified time" is used by DirectWrite font selection algorithms to determine whether one font resource is more up to date than another one.

    +
    + + dd371089 + HRESULT IDWriteFontFileStream::GetLastWriteTime([Out] unsigned longlong* lastWriteTime) + IDWriteFontFileStream::GetLastWriteTime +
    + + + Internal FontFileStream Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT IDWriteFontFileStream::ReadFileFragment([Out, Buffer] const void** fragmentStart,[None] __int64 fileOffset,[None] __int64 fragmentSize,[Out] void** fragmentContext) + + + void IDWriteFontFileStream::ReleaseFileFragment([None] void* fragmentContext) + + + HRESULT IDWriteFontFileStream::GetFileSize([Out] __int64* fileSize) + + + HRESULT IDWriteFontFileStream::GetLastWriteTime([Out] __int64* lastWriteTime) + + + +

    Provides interoperability with GDI, such as methods to convert a font face to a structure, or to convert a GDI font description into a font face. It is also used to create bitmap render target objects.

    +
    + + dd371172 + IDWriteGdiInterop + IDWriteGdiInterop +
    + + + Creates a font object that matches the properties specified by the LOGFONT structure. + + A structure containing a GDI-compatible font description. + a reference to a newly created . + HRESULT IDWriteGdiInterop::CreateFontFromLOGFONT([In] const LOGFONTW* logFont,[Out] IDWriteFont** font) + + + + Initializes a LOGFONT structure based on the GDI-compatible properties of the specified font. + + + The conversion to a LOGFONT by using ConvertFontToLOGFONT operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that GDI will select the same physical font for displaying text formatted by a LOGFONT as the object that was converted. + + An object to be converted into a GDI-compatible LOGFONT structure. + When this method returns, contains a structure that receives a GDI-compatible font description. + TRUE if the specified font object is part of the system font collection; otherwise, FALSE. + HRESULT IDWriteGdiInterop::ConvertFontToLOGFONT([None] IDWriteFont* font,[In] LOGFONTW* logFont,[Out] BOOL* isSystemFont) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a font object that matches the properties specified by the structure.

    +
    +

    A structure containing a GDI-compatible font description.

    +

    When this method returns, contains an address of a reference to a newly created object if successful; otherwise, null.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371187 + HRESULT IDWriteGdiInterop::CreateFontFromLOGFONT([In] const void* logFont,[Out] IDWriteFont** font) + IDWriteGdiInterop::CreateFontFromLOGFONT +
    + + +

    Initializes a structure based on the GDI-compatible properties of the specified font.

    +
    +

    An object to be converted into a GDI-compatible structure.

    +

    When this method returns, contains a structure that receives a GDI-compatible font description.

    +

    When this method returns, contains TRUE if the specified font object is part of the system font collection; otherwise, .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The conversion to a by using ConvertFontToLOGFONT operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that GDI will select the same physical font for displaying text formatted by a as the object that was converted.

    +
    + + dd371177 + HRESULT IDWriteGdiInterop::ConvertFontToLOGFONT([In] IDWriteFont* font,[In] void* logFont,[Out] BOOL* isSystemFont) + IDWriteGdiInterop::ConvertFontToLOGFONT +
    + + +

    Initializes a structure based on the GDI-compatible properties of the specified font.

    +
    +

    An object to be converted into a GDI-compatible structure.

    +

    When this method returns, contains a reference to a structure that receives a GDI-compatible font description.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The conversion to a by using ConvertFontFaceToLOGFONT operates at the logical font level and does not guarantee that it will map to a specific physical font. It is not guaranteed that GDI will select the same physical font for displaying text formatted by a as the object that was converted.

    +
    + + dd371175 + HRESULT IDWriteGdiInterop::ConvertFontFaceToLOGFONT([In] IDWriteFontFace* font,[In] void* logFont) + IDWriteGdiInterop::ConvertFontFaceToLOGFONT +
    + + +

    Creates an object that corresponds to the currently selected HFONT of the specified .

    +
    +

    A handle to a device context into which a font has been selected. It is assumed that the client has already performed font mapping and that the font selected into the device context is the actual font to be used for rendering glyphs.

    +

    Contains an address of a reference to the newly created font face object, or null in case of failure. The font face returned is guaranteed to reference the same physical typeface that would be used for drawing glyphs (but not necessarily characters) using ExtTextOut.

    + +

    This function is intended for scenarios in which an application wants to use GDI and Uniscribe 1.x for text layout and shaping, but DirectWrite for final rendering. This function assumes the client is performing text output using glyph indexes.

    +
    + + dd371185 + HRESULT IDWriteGdiInterop::CreateFontFaceFromHdc([In] HDC hdc,[Out] IDWriteFontFace** fontFace) + IDWriteGdiInterop::CreateFontFaceFromHdc +
    + + +

    Creates an object that encapsulates a bitmap and memory DC (device context) which can be used for rendering glyphs.

    +
    +

    A handle to the optional device context used to create a compatible memory DC (device context).

    +

    The width of the bitmap render target.

    +

    The height of the bitmap render target.

    +

    When this method returns, contains an address of a reference to the newly created object.

    + + dd371182 + HRESULT IDWriteGdiInterop::CreateBitmapRenderTarget([In, Optional] HDC hdc,[In] unsigned int width,[In] unsigned int height,[Out] IDWriteBitmapRenderTarget** renderTarget) + IDWriteGdiInterop::CreateBitmapRenderTarget +
    + + +

    Contains the information needed by renderers to draw glyph runs. All coordinates are in device independent pixels (DIPs).

    +
    + + dd368089 + DWRITE_GLYPH_RUN + DWRITE_GLYPH_RUN +
    + + + Gets or sets the associated with this GlypRun. + + The font face. + + + + An array of glyph indices. This array contains elements. + + + + + An optional array of glyph advances. This array could be null or contains elements. + + + + + An optional array of glyph offsets. This array could be null or contains elements. + + + + +

    The physical font face object to draw with.

    +
    + + dd368089 + IDWriteFontFace* fontFace + IDWriteFontFace fontFace +
    + + +

    The logical size of the font in DIPs (equals 1/96 inch), not points.

    +
    + + dd368089 + float fontEmSize + float fontEmSize +
    + + +

    The number of glyphs in the glyph run.

    +
    + + dd368089 + unsigned int glyphCount + unsigned int glyphCount +
    + + +

    A reference to an array of indices to render for the glyph run.

    +
    + + dd368089 + const unsigned short* glyphIndices + unsigned short glyphIndices +
    + + +

    A reference to an array containing glyph advance widths for the glyph run.

    +
    + + dd368089 + const float* glyphAdvances + float glyphAdvances +
    + + +

    A reference to an array containing glyph offsets for the glyph run.

    +
    + + dd368089 + const DWRITE_GLYPH_OFFSET* glyphOffsets + DWRITE_GLYPH_OFFSET glyphOffsets +
    + + +

    If true, specifies that glyphs are rotated 90 degrees to the left and vertical metrics are used. Vertical writing is achieved by specifying isSideways = true and rotating the entire run 90 degrees to the right via a rotate transform.

    +
    + + dd368089 + BOOL isSideways + BOOL isSideways +
    + + +

    The implicit resolved bidi level of the run. Odd levels indicate right-to-left languages like Hebrew and Arabic, while even levels indicate left-to-right languages like English and Japanese (when written horizontally). For right-to-left languages, the text origin is on the right, and text should be drawn to the left.

    +
    + + dd368089 + unsigned int bidiLevel + unsigned int bidiLevel +
    + + +

    Contains low-level information used to render a glyph run.

    +
    + +

    The alpha texture can be a bi-level alpha texture or a ClearType alpha texture.

    A bi-level alpha texture contains one byte per pixel, therefore the size of the buffer for a bi-level texture will be the area of the texture bounds, in bytes. Each byte in a bi-level alpha texture created by CreateAlphaTexture is either set to DWRITE_ALPHA_MAX (that is, 255) or zero.

    A ClearType alpha texture contains three bytes per pixel, therefore the size of the buffer for a ClearType alpha texture is three times the area of the texture bounds, in bytes.

    +
    + + dd371188 + IDWriteGlyphRunAnalysis + IDWriteGlyphRunAnalysis +
    + + + Creates a glyph run analysis object, which encapsulates information used to render a glyph run. + + The factory. + A structure that contains the properties of the glyph run (font face, advances, and so on). + Number of physical pixels per DIP (device independent pixel). For example, if rendering onto a 96 DPI bitmap then pixelsPerDip is 1. If rendering onto a 120 DPI bitmap then pixelsPerDip is 1.25. + A value that specifies the rendering mode, which must be one of the raster rendering modes (that is, not default and not outline). + Specifies the measuring mode to use with glyphs. + The horizontal position (X-coordinate) of the baseline origin, in DIPs. + Vertical position (Y-coordinate) of the baseline origin, in DIPs. + + The glyph run analysis object contains the results of analyzing the glyph run, including the positions of all the glyphs and references to all of the rasterized glyphs in the font cache. + + HRESULT IDWriteFactory::CreateGlyphRunAnalysis([In] const DWRITE_GLYPH_RUN* glyphRun,[None] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[None] DWRITE_RENDERING_MODE renderingMode,[None] DWRITE_MEASURING_MODE measuringMode,[None] float baselineOriginX,[None] float baselineOriginY,[Out] IDWriteGlyphRunAnalysis** glyphRunAnalysis) + + + + Creates a glyph run analysis object, which encapsulates information used to render a glyph run. + + The factory. + A structure that contains the properties of the glyph run (font face, advances, and so on). + Number of physical pixels per DIP (device independent pixel). For example, if rendering onto a 96 DPI bitmap then pixelsPerDip is 1. If rendering onto a 120 DPI bitmap then pixelsPerDip is 1.25. + Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified the emSize and pixelsPerDip. + A value that specifies the rendering mode, which must be one of the raster rendering modes (that is, not default and not outline). + Specifies the measuring mode to use with glyphs. + The horizontal position (X-coordinate) of the baseline origin, in DIPs. + Vertical position (Y-coordinate) of the baseline origin, in DIPs. + + The glyph run analysis object contains the results of analyzing the glyph run, including the positions of all the glyphs and references to all of the rasterized glyphs in the font cache. + + HRESULT IDWriteFactory::CreateGlyphRunAnalysis([In] const DWRITE_GLYPH_RUN* glyphRun,[None] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[None] DWRITE_RENDERING_MODE renderingMode,[None] DWRITE_MEASURING_MODE measuringMode,[None] float baselineOriginX,[None] float baselineOriginY,[Out] IDWriteGlyphRunAnalysis** glyphRunAnalysis) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the bounding rectangle of the physical pixels affected by the glyph run.

    +
    +

    Specifies the type of texture requested. If a bi-level texture is requested, the bounding rectangle includes only bi-level glyphs. Otherwise, the bounding rectangle includes only antialiased glyphs.

    +

    When this method returns, contains the bounding rectangle of the physical pixels affected by the glyph run, or an empty rectangle if there are no glyphs of the specified texture type.

    + + dd371215 + HRESULT IDWriteGlyphRunAnalysis::GetAlphaTextureBounds([In] DWRITE_TEXTURE_TYPE textureType,[Out] RECT* textureBounds) + IDWriteGlyphRunAnalysis::GetAlphaTextureBounds +
    + + +

    Creates an alpha texture of the specified type for glyphs within a specified bounding rectangle.

    +
    +

    A value that specifies the type of texture requested. This can be DWRITE_TEXTURE_BILEVEL_1x1 or . If a bi-level texture is requested, the texture contains only bi-level glyphs. Otherwise, the texture contains only antialiased glyphs.

    +

    The bounding rectangle of the texture, which can be different than the bounding rectangle returned by GetAlphaTextureBounds.

    +

    When this method returns, contains the array of alpha values from the texture. The buffer allocated for this array must be at least the size of bufferSize.

    +

    The size of the alphaValues array, in bytes. The minimum size depends on the dimensions of the rectangle and the type of texture requested.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371189 + HRESULT IDWriteGlyphRunAnalysis::CreateAlphaTexture([In] DWRITE_TEXTURE_TYPE textureType,[In] const RECT* textureBounds,[Out, Buffer] unsigned char* alphaValues,[In] unsigned int bufferSize) + IDWriteGlyphRunAnalysis::CreateAlphaTexture +
    + + +

    Gets alpha blending properties required for ClearType blending.

    +
    +

    An object that specifies the ClearType level and enhanced contrast, gamma, pixel geometry, and rendering mode. In most cases, the values returned by the output parameters of this method are based on the properties of this object, unless a GDI-compatible rendering mode was specified.

    +

    When this method returns, contains the gamma value to use for gamma correction.

    +

    When this method returns, contains the enhanced contrast value to be used for blending.

    +

    When this method returns, contains the ClearType level used in the alpha blending.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371190 + HRESULT IDWriteGlyphRunAnalysis::GetAlphaBlendParams([In] IDWriteRenderingParams* renderingParams,[Out] float* blendGamma,[Out] float* blendEnhancedContrast,[Out] float* blendClearTypeLevel) + IDWriteGlyphRunAnalysis::GetAlphaBlendParams +
    + + +

    Contains additional properties related to those in .

    +
    + + dd368091 + DWRITE_GLYPH_RUN_DESCRIPTION + DWRITE_GLYPH_RUN_DESCRIPTION +
    + + + No documentation. + + + dd368091 + const wchar_t* localeName + wchar_t localeName + + + + No documentation. + + + dd368091 + const wchar_t* string + wchar_t string + + + + No documentation. + + + dd368091 + unsigned int stringLength + unsigned int stringLength + + + + No documentation. + + + dd368091 + const unsigned short* clusterMap + unsigned short clusterMap + + + + No documentation. + + + dd368091 + unsigned int textPosition + unsigned int textPosition + + + + A Item. + + + + + A glyph index + + + + + A glyph advance + + + + + A glyph offset + + + + +

    Wraps an application-defined inline graphic, allowing DWrite to query metrics as if the graphic were a glyph inline with the text.

    +
    + + dd371221 + IDWriteInlineObject + IDWriteInlineObject +
    + + + The application implemented rendering callback () can use this to draw the inline object without needing to cast or query the object type. The text layout does not call this method directly. + + The drawing context passed to . This parameter may be NULL. + The same renderer passed to as the object's containing parent. This is useful if the inline object is recursive such as a nested layout. + The x-coordinate at the upper-left corner of the inline object. + The y-coordinate at the upper-left corner of the inline object. + A Boolean flag that indicates whether the object's baseline runs alongside the baseline axis of the line. + A Boolean flag that indicates whether the object is in a right-to-left context and should be drawn flipped. + The drawing effect set in . Usually this effect is a foreground brush that is used in glyph drawing. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteInlineObject::Draw([None] void* clientDrawingContext,[None] IDWriteTextRenderer* renderer,[None] float originX,[None] float originY,[None] BOOL isSideways,[None] BOOL isRightToLeft,[None] IUnknown* clientDrawingEffect) + + + + calls this callback function to get the measurement of the inline object. + + A structure describing the geometric measurement of an application-defined inline object. These metrics are in relation to the baseline of the adjacent text. + HRESULT IDWriteInlineObject::GetMetrics([Out] DWRITE_INLINE_OBJECT_METRICS* metrics) + + + + TextLayout calls this callback function to get the visible extents (in DIPs) of the inline object. In the case of a simple bitmap, with no padding and no overhang, all the overhangs will simply be zeroes. + + Overshoot of visible extents (in DIPs) outside the object. + HRESULT IDWriteInlineObject::GetOverhangMetrics([Out] DWRITE_OVERHANG_METRICS* overhangs) + + + + Layout uses this to determine the line-breaking behavior of the inline object among the text. + + When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately preceding it. + When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately following it. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteInlineObject::GetBreakConditions([Out] DWRITE_BREAK_CONDITION* breakConditionBefore,[Out] DWRITE_BREAK_CONDITION* breakConditionAfter) + + + +

    Wraps an application-defined inline graphic, allowing DWrite to query metrics as if the graphic were a glyph inline with the text.

    +
    + + dd371221 + IDWriteInlineObject + IDWriteInlineObject +
    + + + The application implemented rendering callback () can use this to draw the inline object without needing to cast or query the object type. The text layout does not call this method directly. + + The drawing context passed to . This parameter may be NULL. + The same renderer passed to as the object's containing parent. This is useful if the inline object is recursive such as a nested layout. + The x-coordinate at the upper-left corner of the inline object. + The y-coordinate at the upper-left corner of the inline object. + A Boolean flag that indicates whether the object's baseline runs alongside the baseline axis of the line. + A Boolean flag that indicates whether the object is in a right-to-left context and should be drawn flipped. + The drawing effect set in . Usually this effect is a foreground brush that is used in glyph drawing. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteInlineObject::Draw([None] void* clientDrawingContext,[None] IDWriteTextRenderer* renderer,[None] float originX,[None] float originY,[None] BOOL isSideways,[None] BOOL isRightToLeft,[None] IUnknown* clientDrawingEffect) + + + + calls this callback function to get the measurement of the inline object. + + A structure describing the geometric measurement of an application-defined inline object. These metrics are in relation to the baseline of the adjacent text. + HRESULT IDWriteInlineObject::GetMetrics([Out] DWRITE_INLINE_OBJECT_METRICS* metrics) + + + + TextLayout calls this callback function to get the visible extents (in DIPs) of the inline object. In the case of a simple bitmap, with no padding and no overhang, all the overhangs will simply be zeroes. + + Overshoot of visible extents (in DIPs) outside the object. + HRESULT IDWriteInlineObject::GetOverhangMetrics([Out] DWRITE_OVERHANG_METRICS* overhangs) + + + + Layout uses this to determine the line-breaking behavior of the inline object among the text. + + When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately preceding it. + When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately following it. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteInlineObject::GetBreakConditions([Out] DWRITE_BREAK_CONDITION* breakConditionBefore,[Out] DWRITE_BREAK_CONDITION* breakConditionAfter) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    The application implemented rendering callback () can use this to draw the inline object without needing to cast or query the object type. The text layout does not call this method directly.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371225 + HRESULT IDWriteInlineObject::Draw([In, Optional] void* clientDrawingContext,[In] IDWriteTextRenderer* renderer,[In] float originX,[In] float originY,[In] BOOL isSideways,[In] BOOL isRightToLeft,[In, Optional] void* clientDrawingEffect) + IDWriteInlineObject::Draw +
    + + +

    calls this callback function to get the measurement of the inline object.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371232 + HRESULT IDWriteInlineObject::GetMetrics([Out] DWRITE_INLINE_OBJECT_METRICS* metrics) + IDWriteInlineObject::GetMetrics +
    + + +

    calls this callback function to get the visible extents (in DIPs) of the inline object. In the case of a simple bitmap, with no padding and no overhang, all the overhangs will simply be zeroes.

    The overhangs should be returned relative to the reported size of the object (see ), and should not be baseline adjusted.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371235 + HRESULT IDWriteInlineObject::GetOverhangMetrics([Out] DWRITE_OVERHANG_METRICS* overhangs) + IDWriteInlineObject::GetOverhangMetrics +
    + + +

    Layout uses this to determine the line-breaking behavior of the inline object among the text.

    +
    +

    When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately preceding it.

    +

    When this method returns, contains a value which indicates the line-breaking condition between the object and the content immediately following it.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371229 + HRESULT IDWriteInlineObject::GetBreakConditions([Out] DWRITE_BREAK_CONDITION* breakConditionBefore,[Out] DWRITE_BREAK_CONDITION* breakConditionAfter) + IDWriteInlineObject::GetBreakConditions +
    + + + Internal InlineObject Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT IDWriteInlineObject::Draw([None] void* clientDrawingContext,[None] IDWriteTextRenderer* renderer,[None] float originX,[None] float originY,[None] BOOL isSideways,[None] BOOL isRightToLeft,[None] IUnknown* clientDrawingEffect) + + + HRESULT IDWriteInlineObject::GetMetrics([Out] DWRITE_INLINE_OBJECT_METRICS* metrics) + + + HRESULT IDWriteInlineObject::GetOverhangMetrics([Out] DWRITE_OVERHANG_METRICS* overhangs) + + + HRESULT IDWriteInlineObject::GetBreakConditions([Out] DWRITE_BREAK_CONDITION* breakConditionBefore,[Out] DWRITE_BREAK_CONDITION* breakConditionAfter) + + + +

    Line breakpoint characteristics of a character.

    +
    + + dd368098 + DWRITE_LINE_BREAKPOINT + DWRITE_LINE_BREAKPOINT +
    + + + Indicates a breaking condition before the character. + + byte breakConditionBefore + + + + Indicates a breaking condition after the character. + + byte breakConditionAfter + + + +

    Indicates a breaking condition before the character.

    +
    + + dd368098 + unsigned char breakConditionBefore + unsigned char breakConditionBefore +
    + + +

    Indicates a breaking condition after the character.

    +
    + + dd368098 + unsigned char breakConditionAfter + unsigned char breakConditionAfter +
    + + +

    Indicates that the character is some form of whitespace, which may be meaningful for justification.

    +
    + + dd368098 + unsigned char isWhitespace + unsigned char isWhitespace +
    + + +

    Indicates that the character is a soft hyphen, often used to indicate hyphenation points inside words.

    +
    + + dd368098 + unsigned char isSoftHyphen + unsigned char isSoftHyphen +
    + + +

    Reserved for future use.

    +
    + + dd368098 + unsigned char padding + unsigned char padding +
    + + +

    A built-in implementation of the interface, that operates on local font files + and exposes local font file information from the font file reference key. Font file references created using CreateFontFileReference use this font file loader.

    +
    + + dd371238 + IDWriteLocalFontFileLoader + IDWriteLocalFontFileLoader +
    + + +

    Obtains the absolute font file path from the font file reference key.

    +
    +

    The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.

    +

    If this method succeeds, the absolute font file path from the font file reference key.

    + dd371241 + HRESULT IDWriteLocalFontFileLoader::GetFilePathFromKey([In, Buffer] const void* fontFileReferenceKey,[In] unsigned int fontFileReferenceKeySize,[Out, Buffer] wchar_t* filePath,[In] unsigned int filePathSize) + IDWriteLocalFontFileLoader::GetFilePathFromKey +
    + + +

    Obtains the last write time of the file from the font file reference key.

    +
    +

    The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.

    +

    The time of the last font file modification.

    + dd371247 + HRESULT IDWriteLocalFontFileLoader::GetLastWriteTimeFromKey([In, Buffer] const void* fontFileReferenceKey,[In] unsigned int fontFileReferenceKeySize,[Out] FILETIME* lastWriteTime) + IDWriteLocalFontFileLoader::GetLastWriteTimeFromKey +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Obtains the length of the absolute file path from the font file reference key.

    +
    +

    Font file reference key that uniquely identifies the local font file within the scope of the font loader being used.

    +

    Size of font file reference key in bytes.

    +

    Length of the file path string, not including the terminated null character.

    + + dd371244 + HRESULT IDWriteLocalFontFileLoader::GetFilePathLengthFromKey([In, Buffer] const void* fontFileReferenceKey,[In] unsigned int fontFileReferenceKeySize,[Out] unsigned int* filePathLength) + IDWriteLocalFontFileLoader::GetFilePathLengthFromKey +
    + + +

    Obtains the absolute font file path from the font file reference key.

    +
    +

    The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.

    +

    The size of font file reference key in bytes.

    +

    The character array that receives the local file path.

    +

    The length of the file path character array.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371241 + HRESULT IDWriteLocalFontFileLoader::GetFilePathFromKey([In, Buffer] const void* fontFileReferenceKey,[In] unsigned int fontFileReferenceKeySize,[Out, Buffer] wchar_t* filePath,[In] unsigned int filePathSize) + IDWriteLocalFontFileLoader::GetFilePathFromKey +
    + + +

    Obtains the last write time of the file from the font file reference key.

    +
    +

    The font file reference key that uniquely identifies the local font file within the scope of the font loader being used.

    +

    The size of font file reference key in bytes.

    +

    The time of the last font file modification.

    + + dd371247 + HRESULT IDWriteLocalFontFileLoader::GetLastWriteTimeFromKey([In, Buffer] const void* fontFileReferenceKey,[In] unsigned int fontFileReferenceKeySize,[Out] FILETIME* lastWriteTime) + IDWriteLocalFontFileLoader::GetLastWriteTimeFromKey +
    + + +

    Represents a collection of strings indexed by locale name.

    +
    + +

    The set of strings represented by an are indexed by a zero based UINT32 number that maps to a locale. The numeric index for a specific locale is retreived by using the FindLocaleName method.

    A common use for the interface is to hold a list of localized font family names created by using the method. The following example shows how to get the family name for the "en-us" locale.

    * pFamilyNames = null; // Get a list of localized strings for the family name.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFontFamily->GetFamilyNames(&pFamilyNames);	
    +            } UINT32 index = 0;	
    +             exists = false; wchar_t localeName[LOCALE_NAME_MAX_LENGTH]; if (SUCCEEDED(hr))	
    +            { // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames->FindLocaleName(localeName, &index, &exists); } if (SUCCEEDED(hr) && !exists) // if the above find did not find a match, retry with US English { hr = pFamilyNames->FindLocaleName(L"en-us", &index, &exists); }	
    +            } // If the specified locale doesn't exist, select the first on the list.	
    +            if (!exists) index = 0; UINT32 length = 0; // Get the string length.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFamilyNames->GetStringLength(index, &length);	
    +            } // Allocate a string big enough to hold the name.	
    +            wchar_t* name = new (std::nothrow) wchar_t[length+1];	
    +            if (name == null)	
    +            { hr = E_OUTOFMEMORY;	
    +            } // Get the family name.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFamilyNames->GetString(index, name, length+1);	
    +            }	
    +            
    +
    + + dd371250 + IDWriteLocalizedStrings + IDWriteLocalizedStrings +
    + + + Get the locale name from the language. + + Zero-based index of the locale name to be retrieved. + The locale name from the language + HRESULT IDWriteLocalizedStrings::GetLocaleName([None] int index,[Out, Buffer] wchar_t* localeName,[None] int size) + + + + Get the string from the language/string pair. + + Zero-based index of the string from the language/string pair to be retrieved. + The locale name from the language + HRESULT IDWriteLocalizedStrings::GetLocaleName([None] int index,[Out, Buffer] wchar_t* localeName,[None] int size) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the number of language/string pairs.

    +
    + + dd371256 + GetCount + GetCount + unsigned int IDWriteLocalizedStrings::GetCount() +
    + + +

    Gets the number of language/string pairs.

    +
    +

    The number of language/string pairs.

    + + dd371256 + unsigned int IDWriteLocalizedStrings::GetCount() + IDWriteLocalizedStrings::GetCount +
    + + +

    Gets the zero-based index of the locale name/string pair with the specified locale name.

    +
    +

    A null-terminated array of characters containing the locale name to look for.

    +

    The zero-based index of the locale name/string pair. This method initializes index to UINT_MAX.

    +

    When this method returns, contains TRUE if the locale name exists; otherwise, . This method initializes exists to .

    + +

    Note that if the locale name does not exist, the return value is a success and the exists parameter is . If you are getting the font family name for a font and the specified locale name does not exist, one option is to set the index to 0 as shown below. There is always at least one locale for a font family.

    UINT32 index = 0;	
    +             exists = false; wchar_t localeName[LOCALE_NAME_MAX_LENGTH]; if (SUCCEEDED(hr))	
    +            { // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames->FindLocaleName(localeName, &index, &exists); } if (SUCCEEDED(hr) && !exists) // if the above find did not find a match, retry with US English { hr = pFamilyNames->FindLocaleName(L"en-us", &index, &exists); }	
    +            } // If the specified locale doesn't exist, select the first on the list.	
    +            if (!exists) index = 0;	
    +            
    +
    + + dd371254 + HRESULT IDWriteLocalizedStrings::FindLocaleName([In] const wchar_t* localeName,[Out] unsigned int* index,[Out] BOOL* exists) + IDWriteLocalizedStrings::FindLocaleName +
    + + +

    Gets the length in characters (not including the null terminator) of the locale name with the specified index.

    +
    +

    Zero-based index of the locale name to be retrieved.

    +

    When this method returns, contains the length in characters of the locale name, not including the null terminator.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371262 + HRESULT IDWriteLocalizedStrings::GetLocaleNameLength([In] unsigned int index,[Out] unsigned int* length) + IDWriteLocalizedStrings::GetLocaleNameLength +
    + + +

    Copies the locale name with the specified index to the specified array.

    +
    +

    Zero-based index of the locale name to be retrieved.

    +

    When this method returns, contains a character array, which is null-terminated, that receives the locale name from the language/string pair. The buffer allocated for this array must be at least the size of size, in element count.

    +

    The size of the array in characters. The size must include space for the terminating null character.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371259 + HRESULT IDWriteLocalizedStrings::GetLocaleName([In] unsigned int index,[Out, Buffer] wchar_t* localeName,[In] unsigned int size) + IDWriteLocalizedStrings::GetLocaleName +
    + + +

    Gets the length in characters (not including the null terminator) of the string with the specified index.

    +
    +

    A zero-based index of the language/string pair.

    +

    The length in characters of the string, not including the null terminator, from the language/string pair.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Use GetStringLength to get the string length before calling the method, as shown in the following code.

    UINT32 length = 0; // Get the string length.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFamilyNames->GetStringLength(index, &length);	
    +            } // Allocate a string big enough to hold the name.	
    +            wchar_t* name = new (std::nothrow) wchar_t[length+1];	
    +            if (name == null)	
    +            { hr = E_OUTOFMEMORY;	
    +            } // Get the family name.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFamilyNames->GetString(index, name, length+1);	
    +            }	
    +            
    +
    + + dd371269 + HRESULT IDWriteLocalizedStrings::GetStringLength([In] unsigned int index,[Out] unsigned int* length) + IDWriteLocalizedStrings::GetStringLength +
    + + +

    Copies the string with the specified index to the specified array.

    +
    +

    The zero-based index of the language/string pair to be examined.

    +

    The null terminated array of characters that receives the string from the language/string pair. The buffer allocated for this array should be at least the size of size. GetStringLength can be used to get the size of the array before using this method.

    +

    The size of the array in characters. The size must include space for the terminating null character. GetStringLength can be used to get the size of the array before using this method.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The string returned must be allocated by the caller. You can get the size of the string by using the GetStringLength method prior to calling GetString, as shown in the following example.

    UINT32 length = 0; // Get the string length.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFamilyNames->GetStringLength(index, &length);	
    +            } // Allocate a string big enough to hold the name.	
    +            wchar_t* name = new (std::nothrow) wchar_t[length+1];	
    +            if (name == null)	
    +            { hr = E_OUTOFMEMORY;	
    +            } // Get the family name.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFamilyNames->GetString(index, name, length+1);	
    +            }	
    +            
    +
    + + dd371267 + HRESULT IDWriteLocalizedStrings::GetString([In] unsigned int index,[Out, Buffer] wchar_t* stringBuffer,[In] unsigned int size) + IDWriteLocalizedStrings::GetString +
    + + + The namespace provides a managed DirectWrite API. + + dd368038 + DirectWrite + DirectWrite + + + +

    Holds the appropriate digits and numeric punctuation for a specified locale.

    +
    + + dd371271 + IDWriteNumberSubstitution + IDWriteNumberSubstitution +
    + + + Creates a number substitution object using a locale name, substitution method, and an indicator whether to ignore user overrides (use NLS defaults for the given culture instead). + + A reference to a DirectWrite factory + A value that specifies how to apply number substitution on digits and related punctuation. + The name of the locale to be used in the numberSubstitution object. + A Boolean flag that indicates whether to ignore user overrides. + HRESULT IDWriteFactory::CreateNumberSubstitution([In] DWRITE_NUMBER_SUBSTITUTION_METHOD substitutionMethod,[In] const wchar_t* localeName,[In] BOOL ignoreUserOverride,[Out] IDWriteNumberSubstitution** numberSubstitution) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Defines the pixel snapping properties such as pixels per DIP(device-independent pixel) and the current transform matrix of a text renderer.

    +
    + + dd371274 + IDWritePixelSnapping + IDWritePixelSnapping +
    + + + Determines whether pixel snapping is disabled. The recommended default is FALSE, + unless doing animation that requires subpixel vertical placement. + + The context passed to IDWriteTextLayout::Draw. + Receives TRUE if pixel snapping is disabled or FALSE if it not. + HRESULT IsPixelSnappingDisabled([None] void* clientDrawingContext,[Out] BOOL* isDisabled) + + + + Gets a transform that maps abstract coordinates to DIPs. + + The drawing context passed to . + a structure which has transform information for pixel snapping. + HRESULT GetCurrentTransform([None] void* clientDrawingContext,[Out] DWRITE_MATRIX* transform) + + + + Gets the number of physical pixels per DIP. + + + Because a DIP (device-independent pixel) is 1/96 inch, the pixelsPerDip value is the number of logical pixels per inch divided by 96. + + The drawing context passed to . + the number of physical pixels per DIP + HRESULT GetPixelsPerDip([None] void* clientDrawingContext,[Out] FLOAT* pixelsPerDip) + + + + Internal TessellationSink Callback + + + + + Determines whether pixel snapping is disabled. The recommended default is FALSE, + unless doing animation that requires subpixel vertical placement. + + This pointer + The context passed to IDWriteTextLayout::Draw. + Output disabled + Receives TRUE if pixel snapping is disabled or FALSE if it not. + HRESULT IsPixelSnappingDisabled([None] void* clientDrawingContext,[Out] BOOL* isDisabled) + + + + Gets a transform that maps abstract coordinates to DIPs. + + This pointer + The drawing context passed to . + Matrix transform + a structure which has transform information for pixel snapping. + HRESULT GetCurrentTransform([None] void* clientDrawingContext,[Out] DWRITE_MATRIX* transform) + + + + Gets the number of physical pixels per DIP. + + + Because a DIP (device-independent pixel) is 1/96 inch, the pixelsPerDip value is the number of logical pixels per inch divided by 96. + + This pointer + The drawing context passed to . + Dip + the number of physical pixels per DIP + HRESULT GetPixelsPerDip([None] void* clientDrawingContext,[Out] FLOAT* pixelsPerDip) + + + +

    Represents text rendering settings such as ClearType level, enhanced contrast, and gamma correction for glyph rasterization and filtering.

    An application typically obtains a rendering parameters object by calling the method.

    +
    + + dd371285 + IDWriteRenderingParams + IDWriteRenderingParams +
    + + + Creates a rendering parameters object with default settings for the primary monitor. Different monitors may have different rendering parameters, for more information see the {{How to Add Support for Multiple Monitors}} topic. + + A reference to a DirectWrite factory + HRESULT IDWriteFactory::CreateRenderingParams([Out] IDWriteRenderingParams** renderingParams) + + + + Creates a rendering parameters object with default settings for the specified monitor. In most cases, this is the preferred way to create a rendering parameters object. + + A reference to a DirectWrite factory + A handle for the specified monitor. + HRESULT IDWriteFactory::CreateMonitorRenderingParams([None] void* monitor,[Out] IDWriteRenderingParams** renderingParams) + + + + Creates a rendering parameters object with the specified properties. + + A reference to a DirectWrite factory + The gamma level to be set for the new rendering parameters object. + The enhanced contrast level to be set for the new rendering parameters object. + The ClearType level to be set for the new rendering parameters object. + Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text. + A value that represents the method (for example, ClearType natural quality) for rendering glyphs. + HRESULT IDWriteFactory::CreateCustomRenderingParams([None] float gamma,[None] float enhancedContrast,[None] float clearTypeLevel,[None] DWRITE_PIXEL_GEOMETRY pixelGeometry,[None] DWRITE_RENDERING_MODE renderingMode,[Out] IDWriteRenderingParams** renderingParams) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.

    +
    + +

    The gamma value is used for gamma correction, which compensates for the non-linear luminosity response of most monitors.

    +
    + + dd371295 + GetGamma + GetGamma + float IDWriteRenderingParams::GetGamma() +
    + + +

    Gets the enhanced contrast property of the rendering parameters object. Valid values are greater than or equal to zero.

    +
    + +

    Enhanced contrast is the amount to increase the darkness of text, and typically ranges from 0 to 1. Zero means no contrast enhancement.

    +
    + + dd371290 + GetEnhancedContrast + GetEnhancedContrast + float IDWriteRenderingParams::GetEnhancedContrast() +
    + + +

    Gets the ClearType level of the rendering parameters object.

    +
    + +

    The ClearType level represents the amount of ClearType ? that is, the degree to which the red, green, and blue subpixels of each pixel are treated differently. Valid values range from zero (meaning no ClearType, which is equivalent to grayscale anti-aliasing) to one (meaning full ClearType)

    +
    + + dd371288 + GetClearTypeLevel + GetClearTypeLevel + float IDWriteRenderingParams::GetClearTypeLevel() +
    + + +

    Gets the pixel geometry of the rendering parameters object.

    +
    + + dd371297 + GetPixelGeometry + GetPixelGeometry + DWRITE_PIXEL_GEOMETRY IDWriteRenderingParams::GetPixelGeometry() +
    + + +

    Gets the rendering mode of the rendering parameters object.

    +
    + +

    By default, the rendering mode is initialized to , which means the rendering mode is determined automatically based on the font and size. To determine the recommended rendering mode to use for a given font and size and rendering parameters object, use the method.

    +
    + + dd371300 + GetRenderingMode + GetRenderingMode + DWRITE_RENDERING_MODE IDWriteRenderingParams::GetRenderingMode() +
    + + +

    Gets the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.

    +
    +

    Returns the gamma value used for gamma correction. Valid values must be greater than zero and cannot exceed 256.

    + +

    The gamma value is used for gamma correction, which compensates for the non-linear luminosity response of most monitors.

    +
    + + dd371295 + float IDWriteRenderingParams::GetGamma() + IDWriteRenderingParams::GetGamma +
    + + +

    Gets the enhanced contrast property of the rendering parameters object. Valid values are greater than or equal to zero.

    +
    +

    Returns the amount of contrast enhancement. Valid values are greater than or equal to zero.

    + +

    Enhanced contrast is the amount to increase the darkness of text, and typically ranges from 0 to 1. Zero means no contrast enhancement.

    +
    + + dd371290 + float IDWriteRenderingParams::GetEnhancedContrast() + IDWriteRenderingParams::GetEnhancedContrast +
    + + +

    Gets the ClearType level of the rendering parameters object.

    +
    +

    The ClearType level of the rendering parameters object.

    + +

    The ClearType level represents the amount of ClearType ? that is, the degree to which the red, green, and blue subpixels of each pixel are treated differently. Valid values range from zero (meaning no ClearType, which is equivalent to grayscale anti-aliasing) to one (meaning full ClearType)

    +
    + + dd371288 + float IDWriteRenderingParams::GetClearTypeLevel() + IDWriteRenderingParams::GetClearTypeLevel +
    + + +

    Gets the pixel geometry of the rendering parameters object.

    +
    +

    A value that indicates the type of pixel geometry used in the rendering parameters object.

    + + dd371297 + DWRITE_PIXEL_GEOMETRY IDWriteRenderingParams::GetPixelGeometry() + IDWriteRenderingParams::GetPixelGeometry +
    + + +

    Gets the rendering mode of the rendering parameters object.

    +
    +

    A value that indicates the rendering mode of the rendering parameters object.

    + +

    By default, the rendering mode is initialized to , which means the rendering mode is determined automatically based on the font and size. To determine the recommended rendering mode to use for a given font and size and rendering parameters object, use the method.

    +
    + + dd371300 + DWRITE_RENDERING_MODE IDWriteRenderingParams::GetRenderingMode() + IDWriteRenderingParams::GetRenderingMode +
    + + + Defines glyph characteristic information that an application needs to implement justification. + + + + + Justification cannot be applied at the glyph. + + + + + The glyph represents a blank in an Arabic run. + + + + + An inter-character justification point follows the glyph. + + + + + The glyph represents a blank outside an Arabic run. + + + + + Normal middle-of-word glyph that connects to the right (begin). + + + + + Kashida (U+0640) in the middle of the word. + + + + + Final form of an alef-like (U+0627, U+0625, U+0623, U+0622). + + + + + Final form of Ha (U+0647). + + + + + Final form of Ra (U+0631). + + + + + Final form of Ba (U+0628). + + + + + Ligature of alike (U+0628,U+0631). + + + + + Highest priority: initial shape of Seen class (U+0633). + + + + + Highest priority: medial shape of Seen class (U+0633). + + + + +

    Contains shaping output properties for an output glyph.

    +
    + + dd368123 + DWRITE_SHAPING_GLYPH_PROPERTIES + DWRITE_SHAPING_GLYPH_PROPERTIES +
    + + + Indicates that the glyph has justification applied. + + short justification + + + +

    Indicates that the glyph has justification applied.

    +
    + + dd368123 + unsigned short justification + unsigned short justification +
    + + +

    Indicates that the glyph is the start of a cluster.

    +
    + + dd368123 + unsigned short isClusterStart + unsigned short isClusterStart +
    + + +

    Indicates that the glyph is a diacritic mark.

    +
    + + dd368123 + unsigned short isDiacritic + unsigned short isDiacritic +
    + + +

    Indicates that the glyph is a word boundary with no visible space.

    +
    + + dd368123 + unsigned short isZeroWidthSpace + unsigned short isZeroWidthSpace +
    + + +

    Reserved for future use.

    +
    + + dd368123 + unsigned short reserved + unsigned short reserved +
    + + +

    This interface is implemented by the text analyzer's client to receive the output of a given text analysis.

    +
    + +

    The text analyzer disregards any current state of the analysis sink, therefore, a Set method call on a range overwrites the previously set analysis result of the same range.

    +
    + + dd371303 + IDWriteTextAnalysisSink + IDWriteTextAnalysisSink +
    + + + Reports script analysis for the specified text range. + + The starting position from which to report. + The number of UTF16 units of the reported range. + A reference to a structure that contains a zero-based index representation of a writing system script and a value indicating whether additional shaping of text is required. + A successful code or error code to stop analysis. + HRESULT IDWriteTextAnalysisSink::SetScriptAnalysis([None] int textPosition,[None] int textLength,[In] const DWRITE_SCRIPT_ANALYSIS* scriptAnalysis) + + + + Sets line-break opportunities for each character, starting from the specified position. + + The starting text position from which to report. + The number of UTF16 units of the reported range. + A reference to a structure that contains breaking conditions set for each character from the starting position to the end of the specified range. + A successful code or error code to stop analysis. + HRESULT IDWriteTextAnalysisSink::SetLineBreakpoints([None] int textPosition,[None] int textLength,[In, Buffer] const DWRITE_LINE_BREAKPOINT* lineBreakpoints) + + + + Sets a bidirectional level on the range, which is called once per run change (either explicit or resolved implicit). + + The starting position from which to report. + The number of UTF16 units of the reported range. + The explicit level from the paragraph reading direction and any embedded control codes RLE/RLO/LRE/LRO/PDF, which is determined before any additional rules. + The final implicit level considering the explicit level and characters' natural directionality, after all Bidi rules have been applied. + A successful code or error code to stop analysis. + HRESULT IDWriteTextAnalysisSink::SetBidiLevel([None] int textPosition,[None] int textLength,[None] int explicitLevel,[None] int resolvedLevel) + + + + Sets the number substitution on the text range affected by the text analysis. + + The starting position from which to report. + The number of UTF16 units of the reported range. + An object that holds the appropriate digits and numeric punctuation for a given locale. Use to create this object. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteTextAnalysisSink::SetNumberSubstitution([None] int textPosition,[None] int textLength,[None] IDWriteNumberSubstitution* numberSubstitution) + + + +

    The interface you implement to receive the output of the text analyzers.

    +
    + + hh780424 + IDWriteTextAnalysisSink1 + IDWriteTextAnalysisSink1 +
    + + +

    The text analyzer calls back to this to report the actual orientation of each character for shaping and drawing.

    +
    +

    The starting position to report from.

    +

    Number of UTF-16 units of the reported range.

    +

    A -typed value that specifies the angle of the glyphs within the text range (pass to to get the world relative transform).

    +

    The adjusted bidi level to be used by the client layout for reordering runs. This will differ from the resolved bidi level retrieved from the source for cases such as Arabic stacked top-to-bottom, where the glyphs are still shaped as RTL, but the runs are TTB along with any CJK or Latin.

    +

    Whether the glyphs are rotated on their side, which is the default case for CJK and the case stacked Latin

    +

    Whether the script should be shaped as right-to-left. For Arabic stacked top-to-bottom, even when the adjusted bidi level is coerced to an even level, this will still be true.

    +

    Returns a successful code or an error code to abort analysis.

    + + Hh780425 + HRESULT IDWriteTextAnalysisSink1::SetGlyphOrientation([In] unsigned int textPosition,[In] unsigned int textLength,[In] DWRITE_GLYPH_ORIENTATION_ANGLE glyphOrientationAngle,[In] unsigned char adjustedBidiLevel,[In] BOOL isSideways,[In] BOOL isRightToLeft) + IDWriteTextAnalysisSink1::SetGlyphOrientation +
    + + + Internal TextAnalysisSink1 Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT IDWriteTextAnalysisSink1::SetGlyphOrientation([In] unsigned int textPosition,[In] unsigned int textLength,[In] DWRITE_GLYPH_ORIENTATION_ANGLE glyphOrientationAngle,[In] unsigned char adjustedBidiLevel,[In] BOOL isSideways,[In] BOOL isRightToLeft) + IDWriteTextAnalysisSink1::SetGlyphOrientation + + + + Internal TextAnalysisSink Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT IDWriteTextAnalysisSink::SetScriptAnalysis([None] int textPosition,[None] int textLength,[In] const DWRITE_SCRIPT_ANALYSIS* scriptAnalysis) + + + HRESULT IDWriteTextAnalysisSink::SetLineBreakpoints([None] int textPosition,[None] int textLength,[In, Buffer] const DWRITE_LINE_BREAKPOINT* lineBreakpoints) + + + HRESULT IDWriteTextAnalysisSink::SetBidiLevel([None] int textPosition,[None] int textLength,[None] int explicitLevel,[None] int resolvedLevel) + + + HRESULT IDWriteTextAnalysisSink::SetNumberSubstitution([None] int textPosition,[None] int textLength,[None] IDWriteNumberSubstitution* numberSubstitution) + + + +

    Implemented by the text analyzer's client to provide text to the analyzer. It allows the separation between the logical view of text as a continuous stream of characters identifiable by unique text positions, and the actual memory layout of potentially discrete blocks of text in the client's backing store.

    +
    + +

    If any of these callbacks returns an error, then the analysis functions will stop prematurely and return a callback error. Note that rather than return E_NOTIMPL, an application should stub the method and return a constant/null and .

    +
    + + dd371318 + IDWriteTextAnalysisSource + IDWriteTextAnalysisSource +
    + + + Gets a block of text starting at the specified text position. + + + Returning NULL indicates the end of text, which is the position after the last character. This function is called iteratively for each consecutive block, tying together several fragmented blocks in the backing store into a virtual contiguous string. Although applications can implement sparse textual content that maps only part of the backing store, the application must map any text that is in the range passed to any analysis functions. + + The first position of the piece to obtain. All positions are in UTF16 code units, not whole characters, which matters when supplementary characters are used. + a block of text + HRESULT IDWriteTextAnalysisSource::GetTextAtPosition([None] int textPosition,[Out] const wchar_t** textString,[Out] int* textLength) + + + + Gets a block of text immediately preceding the specified position. + + + NULL indicates no chunk available at the specified position, either because textPosition equals 0, textPosition is greater than the entire text content length, or the queried position is not mapped into the application's backing store. Although applications can implement sparse textual content that maps only part of the backing store, the application must map any text that is in the range passed to any analysis functions. + + The position immediately after the last position of the block of text to obtain. + text immediately preceding the specified position + HRESULT IDWriteTextAnalysisSource::GetTextBeforePosition([None] int textPosition,[Out] const wchar_t** textString,[Out] int* textLength) + + + + Gets the paragraph reading direction. + + The reading direction of the current paragraph. + DWRITE_READING_DIRECTION IDWriteTextAnalysisSource::GetParagraphReadingDirection() + + + + Gets the locale name on the range affected by the text analysis. + + The text position to examine. + Contains the length of the text being affected by the text analysis up to the next differing locale. + + the locale name on the range affected by the text analysis + + HRESULT IDWriteTextAnalysisSource::GetLocaleName([None] int textPosition,[Out] int* textLength,[Out] const wchar_t** localeName) + + The localeName reference must remain valid until the next call or until the analysis returns. + + + + + Gets the number substitution from the text range affected by the text analysis. + + + Any implementation should return the number substitution with an incremented reference count, and the analysis will release when finished with it (either before the next call or before it returns). However, the sink callback may hold onto it after that. + + The starting position from which to report. + Contains the length of the text, in characters, remaining in the text range up to the next differing number substitution. + the number substitution from the text range affected by the text analysis. + HRESULT IDWriteTextAnalysisSource::GetNumberSubstitution([None] int textPosition,[Out] int* textLength,[Out] IDWriteNumberSubstitution** numberSubstitution) + + + +

    The interface you implement to provide needed information to the text analyzer, like the text and associated text properties.

    Note?? If any of these callbacks return an error, the analysis functions will stop prematurely and return a callback error.? +
    + + hh780426 + IDWriteTextAnalysisSource1 + IDWriteTextAnalysisSource1 +
    + + +

    Used by the text analyzer to obtain the desired glyph orientation and resolved bidi level.

    +
    +

    The text position.

    +

    A reference to the text length.

    +

    A -typed value that specifies the desired kind of glyph orientation for the text.

    +

    A reference to the resolved bidi level.

    +

    Returning an error will abort the analysis.

    + +

    The text analyzer calls back to this to get the desired glyph orientation and resolved bidi level, which it uses along with the script properties of the text to determine the actual orientation of each character, which it reports back to the client via the sink SetGlyphOrientation method.

    +
    + + Hh780427 + HRESULT IDWriteTextAnalysisSource1::GetVerticalGlyphOrientation([In] unsigned int textPosition,[Out] unsigned int* textLength,[Out] DWRITE_VERTICAL_GLYPH_ORIENTATION* glyphOrientation,[Out] unsigned char* bidiLevel) + IDWriteTextAnalysisSource1::GetVerticalGlyphOrientation +
    + + + Internal TextAnalysisSource1 Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT IDWriteTextAnalysisSource1::GetVerticalGlyphOrientation([In] unsigned int textPosition,[Out] unsigned int* textLength,[Out] DWRITE_VERTICAL_GLYPH_ORIENTATION* glyphOrientation,[Out] unsigned char* bidiLevel) + + + + Internal TextAnalysisSource Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT IDWriteTextAnalysisSource::GetTextAtPosition([None] int textPosition,[Out] const wchar_t** textString,[Out] int* textLength) + + + HRESULT IDWriteTextAnalysisSource::GetTextBeforePosition([None] int textPosition,[Out] const wchar_t** textString,[Out] int* textLength) + + + DWRITE_READING_DIRECTION IDWriteTextAnalysisSource::GetParagraphReadingDirection() + + + HRESULT IDWriteTextAnalysisSource::GetLocaleName([None] int textPosition,[Out] int* textLength,[Out] const wchar_t** localeName) + + + HRESULT IDWriteTextAnalysisSource::GetNumberSubstitution([None] int textPosition,[Out] int* textLength,[Out] IDWriteNumberSubstitution** numberSubstitution) + + + +

    Analyzes various text properties for complex script processing such as bidirectional (bidi) support for languages like Arabic, determination of line break opportunities, glyph placement, and number substitution.

    +
    + + dd316607 + IDWriteTextAnalyzer + IDWriteTextAnalyzer +
    + + + Returns an interface for performing text analysis. + + A reference to a DirectWrite factory + HRESULT IDWriteFactory::CreateTextAnalyzer([Out] IDWriteTextAnalyzer** textAnalyzer) + + + + Analyzes a text range for script boundaries, reading text attributes from the source and reporting the Unicode script ID to the sink callback {{SetScript}}. + + A reference to the source object to analyze. + The starting text position within the source object. + The text length to analyze. + A reference to the sink callback object that receives the text analysis. + + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + + HRESULT IDWriteTextAnalyzer::AnalyzeScript([None] IDWriteTextAnalysisSource* analysisSource,[None] int textPosition,[None] int textLength,[None] IDWriteTextAnalysisSink* analysisSink) + + + + Analyzes a text range for script directionality, reading attributes from the source and reporting levels to the sink callback {{SetBidiLevel}}. + + A reference to a source object to analyze. + The starting text position within the source object. + The text length to analyze. + A reference to the sink callback object that receives the text analysis. + + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + + HRESULT IDWriteTextAnalyzer::AnalyzeBidi([None] IDWriteTextAnalysisSource* analysisSource,[None] int textPosition,[None] int textLength,[None] IDWriteTextAnalysisSink* analysisSink) + + While the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs. Otherwise, the returned levels may be wrong, because the Bidi algorithm is meant to apply to the paragraph as a whole. + + + + + Analyzes a text range for spans where number substitution is applicable, reading attributes from the source and reporting substitutable ranges to the sink callback {{SetNumberSubstitution}}. + + The source object to analyze. + The starting position within the source object. + The length to analyze. + A reference to the sink callback object that receives the text analysis. + + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + + HRESULT IDWriteTextAnalyzer::AnalyzeNumberSubstitution([None] IDWriteTextAnalysisSource* analysisSource,[None] int textPosition,[None] int textLength,[None] IDWriteTextAnalysisSink* analysisSink) + + Although the function can handle multiple ranges of differing number substitutions, the text ranges should not arbitrarily split the middle of numbers. Otherwise, it will treat the numbers separately and will not translate any intervening punctuation. + + + + + Analyzes a text range for potential breakpoint opportunities, reading attributes from the source and reporting breakpoint opportunities to the sink callback {{SetLineBreakpoints}}. + + A reference to the source object to analyze. + The starting text position within the source object. + The text length to analyze. + A reference to the sink callback object that receives the text analysis. + + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + + HRESULT IDWriteTextAnalyzer::AnalyzeLineBreakpoints([None] IDWriteTextAnalysisSource* analysisSource,[None] int textPosition,[None] int textLength,[None] IDWriteTextAnalysisSink* analysisSink) + + Although the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs, unless the specified text span is considered a whole unit. Otherwise, the returned properties for the first and last characters will inappropriately allow breaks. + + + + + Gets the glyphs (TODO doc) + + The text string. + Length of the text. + The font face. + if set to true [is sideways]. + if set to true [is right to left]. + The script analysis. + Name of the locale. + The number substitution. + The features. + The feature range lengths. + The max glyph count. + The cluster map. + The text props. + The glyph indices. + The glyph props. + The actual glyph count. + + If the method succeeds, it returns . + + HRESULT IDWriteTextAnalyzer::GetGlyphs([In, Buffer] const wchar_t* textString,[In] unsigned int textLength,[In] IDWriteFontFace* fontFace,[In] BOOL isSideways,[In] BOOL isRightToLeft,[In] const DWRITE_SCRIPT_ANALYSIS* scriptAnalysis,[In, Buffer, Optional] const wchar_t* localeName,[In, Optional] IDWriteNumberSubstitution* numberSubstitution,[In, Optional] const void** features,[In, Buffer, Optional] const unsigned int* featureRangeLengths,[In] unsigned int featureRanges,[In] unsigned int maxGlyphCount,[Out, Buffer] unsigned short* clusterMap,[Out, Buffer] DWRITE_SHAPING_TEXT_PROPERTIES* textProps,[Out, Buffer] unsigned short* glyphIndices,[Out, Buffer] DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProps,[Out] unsigned int* actualGlyphCount) + + + + Gets the glyph placements. + + The text string. + The cluster map. + The text props. + Length of the text. + The glyph indices. + The glyph props. + The glyph count. + The font face. + Size of the font in ems. + if set to true [is sideways]. + if set to true [is right to left]. + The script analysis. + Name of the locale. + The features. + The feature range lengths. + The glyph advances. + The glyph offsets. + + If the method succeeds, it returns . + + HRESULT IDWriteTextAnalyzer::GetGlyphPlacements([In, Buffer] const wchar_t* textString,[In, Buffer] const unsigned short* clusterMap,[In, Buffer] DWRITE_SHAPING_TEXT_PROPERTIES* textProps,[In] unsigned int textLength,[In, Buffer] const unsigned short* glyphIndices,[In, Buffer] const DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProps,[In] unsigned int glyphCount,[In] IDWriteFontFace* fontFace,[In] float fontEmSize,[In] BOOL isSideways,[In] BOOL isRightToLeft,[In] const DWRITE_SCRIPT_ANALYSIS* scriptAnalysis,[In, Buffer, Optional] const wchar_t* localeName,[In, Optional] const void** features,[In, Buffer, Optional] const unsigned int* featureRangeLengths,[In] unsigned int featureRanges,[Out, Buffer] float* glyphAdvances,[Out, Buffer] DWRITE_GLYPH_OFFSET* glyphOffsets) + + + + Gets the GDI compatible glyph placements. + + The text string. + The cluster map. + The text props. + Length of the text. + The glyph indices. + The glyph props. + The glyph count. + The font face. + Size of the font em. + The pixels per dip. + The transform. + if set to true [use GDI natural]. + if set to true [is sideways]. + if set to true [is right to left]. + The script analysis. + Name of the locale. + The features. + The feature range lengths. + The glyph advances. + The glyph offsets. + + If the method succeeds, it returns . + + HRESULT IDWriteTextAnalyzer::GetGdiCompatibleGlyphPlacements([In, Buffer] const wchar_t* textString,[In, Buffer] const unsigned short* clusterMap,[In, Buffer] DWRITE_SHAPING_TEXT_PROPERTIES* textProps,[In] unsigned int textLength,[In, Buffer] const unsigned short* glyphIndices,[In, Buffer] const DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProps,[In] unsigned int glyphCount,[In] IDWriteFontFace* fontFace,[In] float fontEmSize,[In] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[In] BOOL useGdiNatural,[In] BOOL isSideways,[In] BOOL isRightToLeft,[In] const DWRITE_SCRIPT_ANALYSIS* scriptAnalysis,[In, Buffer, Optional] const wchar_t* localeName,[In, Optional] const void** features,[In, Buffer, Optional] const unsigned int* featureRangeLengths,[In] unsigned int featureRanges,[Out, Buffer] float* glyphAdvances,[Out, Buffer] DWRITE_GLYPH_OFFSET* glyphOffsets) + + + + Allocates the features from the jagged array.. + + The features. + A pointer to the allocated native features or 0 if features is null or empty. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Analyzes a text range for script boundaries, reading text attributes from the source and reporting the Unicode script ID to the sink callback SetScript.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316620 + HRESULT IDWriteTextAnalyzer::AnalyzeScript([In] IDWriteTextAnalysisSource* analysisSource,[In] unsigned int textPosition,[In] unsigned int textLength,[In] IDWriteTextAnalysisSink* analysisSink) + IDWriteTextAnalyzer::AnalyzeScript +
    + + +

    Analyzes a text range for script directionality, reading attributes from the source and reporting levels to the sink callback SetBidiLevel.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    While the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs. Otherwise, the returned levels may be wrong, because the Bidi algorithm is meant to apply to the paragraph as a whole.

    +
    + + dd316610 + HRESULT IDWriteTextAnalyzer::AnalyzeBidi([In] IDWriteTextAnalysisSource* analysisSource,[In] unsigned int textPosition,[In] unsigned int textLength,[In] IDWriteTextAnalysisSink* analysisSink) + IDWriteTextAnalyzer::AnalyzeBidi +
    + + +

    Analyzes a text range for spans where number substitution is applicable, reading attributes from the source and reporting substitutable ranges to the sink callback SetNumberSubstitution.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Although the function can handle multiple ranges of differing number substitutions, the text ranges should not arbitrarily split the middle of numbers. Otherwise, it will treat the numbers separately and will not translate any intervening punctuation.

    +
    + + dd316616 + HRESULT IDWriteTextAnalyzer::AnalyzeNumberSubstitution([In] IDWriteTextAnalysisSource* analysisSource,[In] unsigned int textPosition,[In] unsigned int textLength,[In] IDWriteTextAnalysisSink* analysisSink) + IDWriteTextAnalyzer::AnalyzeNumberSubstitution +
    + + +

    Analyzes a text range for potential breakpoint opportunities, reading attributes from the source and reporting breakpoint opportunities to the sink callback SetLineBreakpoints.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Although the function can handle multiple paragraphs, the text range should not arbitrarily split the middle of paragraphs, unless the specified text span is considered a whole unit. Otherwise, the returned properties for the first and last characters will inappropriately allow breaks.

    +
    + + dd316613 + HRESULT IDWriteTextAnalyzer::AnalyzeLineBreakpoints([In] IDWriteTextAnalysisSource* analysisSource,[In] unsigned int textPosition,[In] unsigned int textLength,[In] IDWriteTextAnalysisSink* analysisSink) + IDWriteTextAnalyzer::AnalyzeLineBreakpoints +
    + + +

    Parses the input text string and maps it to the set of glyphs and associated glyph data according to the font and the writing system's rendering rules.

    +
    +

    An array of characters to convert to glyphs.

    +

    The length of textString.

    +

    The font face that is the source of the output glyphs.

    +

    A Boolean flag set to TRUE if the text is intended to be drawn vertically.

    +

    A Boolean flag set to TRUE for right-to-left text.

    +

    A reference to a Script analysis result from an AnalyzeScript call.

    +

    The locale to use when selecting glyphs. For example the same character may map to different glyphs for ja-jp versus zh-chs. If this is null, then the default mapping based on the script is used.

    +

    A reference to an optional number substitution which selects the appropriate glyphs for digits and related numeric characters, depending on the results obtained from AnalyzeNumberSubstitution. Passing null indicates that no substitution is needed and that the digits should receive nominal glyphs.

    +

    An array of references to the sets of typographic features to use in each feature range.

    +

    The length of each feature range, in characters. The sum of all lengths should be equal to textLength.

    +

    The number of feature ranges.

    +

    The maximum number of glyphs that can be returned.

    +

    When this method returns, contains the mapping from character ranges to glyph ranges.

    +

    When this method returns, contains a reference to an array of structures that contains shaping properties for each character.

    +

    The output glyph indices.

    +

    When this method returns, contains a reference to an array of structures that contain shaping properties for each output glyph.

    +

    When this method returns, contains the actual number of glyphs returned if the call succeeds.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Note that the mapping from characters to glyphs is, in general, many-to-many. The recommended estimate for the per-glyph output buffers is (3 * textLength / 2 + 16). This is not guaranteed to be sufficient. The value of the actualGlyphCount parameter is only valid if the call succeeds. In the event that maxGlyphCount is not big enough, HRESULT_FROM_WIN32() will be returned. The application should allocate a larger buffer and try again.

    +
    + + dd316625 + HRESULT IDWriteTextAnalyzer::GetGlyphs([In, Buffer] const wchar_t* textString,[In] unsigned int textLength,[In] IDWriteFontFace* fontFace,[In] BOOL isSideways,[In] BOOL isRightToLeft,[In] const DWRITE_SCRIPT_ANALYSIS* scriptAnalysis,[In, Optional] const wchar_t* localeName,[In, Optional] IDWriteNumberSubstitution* numberSubstitution,[In, Optional] const void** features,[In, Buffer, Optional] const unsigned int* featureRangeLengths,[In] unsigned int featureRanges,[In] unsigned int maxGlyphCount,[Out, Buffer] unsigned short* clusterMap,[Out, Buffer] DWRITE_SHAPING_TEXT_PROPERTIES* textProps,[Out, Buffer] unsigned short* glyphIndices,[Out, Buffer] DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProps,[Out] unsigned int* actualGlyphCount) + IDWriteTextAnalyzer::GetGlyphs +
    + + +

    Places glyphs output from the GetGlyphs method according to the font and the writing system's rendering rules.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316622 + HRESULT IDWriteTextAnalyzer::GetGlyphPlacements([In, Buffer] const wchar_t* textString,[In, Buffer] const unsigned short* clusterMap,[In, Buffer] DWRITE_SHAPING_TEXT_PROPERTIES* textProps,[In] unsigned int textLength,[In, Buffer] const unsigned short* glyphIndices,[In, Buffer] const DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProps,[In] unsigned int glyphCount,[In] IDWriteFontFace* fontFace,[In] float fontEmSize,[In] BOOL isSideways,[In] BOOL isRightToLeft,[In] const DWRITE_SCRIPT_ANALYSIS* scriptAnalysis,[In, Optional] const wchar_t* localeName,[In, Optional] const void** features,[In, Buffer, Optional] const unsigned int* featureRangeLengths,[In] unsigned int featureRanges,[Out, Buffer] float* glyphAdvances,[Out, Buffer] DWRITE_GLYPH_OFFSET* glyphOffsets) + IDWriteTextAnalyzer::GetGlyphPlacements +
    + + +

    Place glyphs output from the GetGlyphs method according to the font and the writing system's rendering rules.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd941790 + HRESULT IDWriteTextAnalyzer::GetGdiCompatibleGlyphPlacements([In, Buffer] const wchar_t* textString,[In, Buffer] const unsigned short* clusterMap,[In, Buffer] DWRITE_SHAPING_TEXT_PROPERTIES* textProps,[In] unsigned int textLength,[In, Buffer] const unsigned short* glyphIndices,[In, Buffer] const DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProps,[In] unsigned int glyphCount,[In] IDWriteFontFace* fontFace,[In] float fontEmSize,[In] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[In] BOOL useGdiNatural,[In] BOOL isSideways,[In] BOOL isRightToLeft,[In] const DWRITE_SCRIPT_ANALYSIS* scriptAnalysis,[In, Optional] const wchar_t* localeName,[In, Optional] const void** features,[In, Buffer, Optional] const unsigned int* featureRangeLengths,[In] unsigned int featureRanges,[Out, Buffer] float* glyphAdvances,[Out, Buffer] DWRITE_GLYPH_OFFSET* glyphOffsets) + IDWriteTextAnalyzer::GetGdiCompatibleGlyphPlacements +
    + + +

    Analyzes various text properties for complex script processing.

    +
    + + hh780428 + IDWriteTextAnalyzer1 + IDWriteTextAnalyzer1 +
    + + +

    Analyzes a text range for script orientation, reading text and attributes from the source and reporting results to the sink.

    +
    +

    Source object to analyze.

    +

    Starting position within the source object.

    +

    Length to analyze.

    +

    Length to analyze.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + Hh780429 + HRESULT IDWriteTextAnalyzer1::AnalyzeVerticalGlyphOrientation([In] IDWriteTextAnalysisSource1* analysisSource,[In] unsigned int textPosition,[In] unsigned int textLength,[In] IDWriteTextAnalysisSink1* analysisSink) + IDWriteTextAnalyzer1::AnalyzeVerticalGlyphOrientation +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Applies spacing between characters, properly adjusting glyph clusters and diacritics.

    +
    +

    The spacing before each character, in reading order.

    +

    The spacing after each character, in reading order.

    +

    The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.

    +

    The length of the clustermap and original text.

    +

    The number of glyphs.

    +

    Mapping from character ranges to glyph ranges.

    +

    The advance width of each glyph.

    +

    The offset of the origin of each glyph.

    +

    Properties of each glyph, from GetGlyphs.

    +

    The new advance width of each glyph.

    +

    The new offset of the origin of each glyph.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The input and output advances/offsets are allowed to alias the same array.

    +
    + + hh780430 + HRESULT IDWriteTextAnalyzer1::ApplyCharacterSpacing([In] float leadingSpacing,[In] float trailingSpacing,[In] float minimumAdvanceWidth,[In] unsigned int textLength,[In] unsigned int glyphCount,[In, Buffer] const unsigned short* clusterMap,[In, Buffer] const float* glyphAdvances,[In, Buffer] const DWRITE_GLYPH_OFFSET* glyphOffsets,[In, Buffer] const DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties,[Out, Buffer] float* modifiedGlyphAdvances,[Out, Buffer] DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets) + IDWriteTextAnalyzer1::ApplyCharacterSpacing +
    + + +

    Retrieves the given baseline from the font.

    +
    +

    The font face to read.

    +

    A -typed value that specifies the baseline of interest.

    +

    Whether the baseline is vertical or horizontal.

    +

    Simulate the baseline if it is missing in the font.

    +

    Script analysis result from AnalyzeScript.

    Note??You can pass an empty script analysis structure, like this scriptAnalysis = {};, and this method will return the default baseline. ?
    +

    The language of the run.

    +

    The baseline coordinate value in design units.

    +

    Whether the returned baseline exists in the font.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If the baseline does not exist in the font, it is not considered an error, but the function will return exists = false. You may then use heuristics to calculate the missing base, or, if the flag simulationAllowed is true, the function will compute a reasonable approximation for you.

    +
    + + hh780431 + HRESULT IDWriteTextAnalyzer1::GetBaseline([In] IDWriteFontFace* fontFace,[In] DWRITE_BASELINE baseline,[In] BOOL isVertical,[In] BOOL isSimulationAllowed,[In] DWRITE_SCRIPT_ANALYSIS scriptAnalysis,[In, Optional] const wchar_t* localeName,[Out] int* baselineCoordinate,[Out] BOOL* exists) + IDWriteTextAnalyzer1::GetBaseline +
    + + +

    Analyzes a text range for script orientation, reading text and attributes from the source and reporting results to the sink callback SetGlyphOrientation.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh780429 + HRESULT IDWriteTextAnalyzer1::AnalyzeVerticalGlyphOrientation([In] IDWriteTextAnalysisSource1* analysisSource,[In] unsigned int textPosition,[In] unsigned int textLength,[In] IDWriteTextAnalysisSink1* analysisSink) + IDWriteTextAnalyzer1::AnalyzeVerticalGlyphOrientation +
    + + +

    Returns 2x3 transform matrix for the respective angle to draw the glyph run.

    +
    +

    A -typed value that specifies the angle that was reported into .

    +

    Whether the run's glyphs are sideways or not.

    +

    Returned transform.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The translation component of the transform returned is zero.

    +
    + + hh780432 + HRESULT IDWriteTextAnalyzer1::GetGlyphOrientationTransform([In] DWRITE_GLYPH_ORIENTATION_ANGLE glyphOrientationAngle,[In] BOOL isSideways,[Out] DWRITE_MATRIX* transform) + IDWriteTextAnalyzer1::GetGlyphOrientationTransform +
    + + +

    Retrieves the properties for a given script.

    +
    +

    The script for a run of text returned from .

    +

    A reference to a structure that describes info for the script.

    +

    Returns properties for the given script. If the script is invalid, it returns generic properties for the unknown script and E_INVALIDARG.

    + + hh780435 + HRESULT IDWriteTextAnalyzer1::GetScriptProperties([In] DWRITE_SCRIPT_ANALYSIS scriptAnalysis,[Out] DWRITE_SCRIPT_PROPERTIES* scriptProperties) + IDWriteTextAnalyzer1::GetScriptProperties +
    + + +

    Determines the complexity of text, and whether you need to call for full script shaping.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Text is not simple if the characters are part of a script that has complex shaping requirements, require bidi analysis, combine with other characters, reside in the supplementary planes, or have glyphs that participate in standard OpenType features. The length returned will not split combining marks from their base characters.

    +
    + + hh780436 + HRESULT IDWriteTextAnalyzer1::GetTextComplexity([In, Buffer] const wchar_t* textString,[In] unsigned int textLength,[In] IDWriteFontFace* fontFace,[Out] BOOL* isTextSimple,[In] unsigned int* textLengthRead,[Out, Buffer, Optional] unsigned short* glyphIndices) + IDWriteTextAnalyzer1::GetTextComplexity +
    + + +

    Retrieves justification opportunity information for each of the glyphs given the text and shaping glyph properties.

    +
    +

    Font face that was used for shaping. This is mainly important for returning correct results of the kashida width.

    May be null.

    +

    Font em size used for the glyph run.

    +

    Script of the text from the itemizer.

    +

    Length of the text.

    +

    Number of glyphs.

    +

    Characters used to produce the glyphs.

    +

    Clustermap produced from shaping.

    +

    Glyph properties produced from shaping.

    +

    A reference to a structure that receives info for the allowed justification expansion/compression for each glyph.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This function is called per-run, after shaping is done via the method.

    Note??this function only supports natural metrics ().? +
    + + hh780433 + HRESULT IDWriteTextAnalyzer1::GetJustificationOpportunities([In, Optional] IDWriteFontFace* fontFace,[In] float fontEmSize,[In] DWRITE_SCRIPT_ANALYSIS scriptAnalysis,[In] unsigned int textLength,[In] unsigned int glyphCount,[In, Buffer] const wchar_t* textString,[In, Buffer] const unsigned short* clusterMap,[In, Buffer] const DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties,[Out, Buffer] DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities) + IDWriteTextAnalyzer1::GetJustificationOpportunities +
    + + +

    Justifies an array of glyph advances to fit the line width.

    +
    +

    The line width.

    +

    The glyph count.

    +

    A reference to a structure that contains info for the allowed justification expansion/compression for each glyph. Get this info from .

    +

    An array of glyph advances.

    +

    An array of glyph offsets.

    +

    The returned array of justified glyph advances.

    +

    The returned array of justified glyph offsets.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    You call JustifyGlyphAdvances after you call to collect all the opportunities, and JustifyGlyphAdvances spans across the entire line. The input and output arrays are allowed to alias each other, permitting in-place update.

    +
    + + hh780437 + HRESULT IDWriteTextAnalyzer1::JustifyGlyphAdvances([In] float lineWidth,[In] unsigned int glyphCount,[In, Buffer] const DWRITE_JUSTIFICATION_OPPORTUNITY* justificationOpportunities,[In, Buffer] const float* glyphAdvances,[In, Buffer] const DWRITE_GLYPH_OFFSET* glyphOffsets,[Out, Buffer] float* justifiedGlyphAdvances,[Out, Buffer, Optional] DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets) + IDWriteTextAnalyzer1::JustifyGlyphAdvances +
    + + +

    Fills in new glyphs for complex scripts where justification increased the advances of glyphs, such as Arabic with kashida.

    +
    +

    Font face used for shaping.

    May be null.

    +

    Font em size used for the glyph run.

    +

    Script of the text from the itemizer.

    +

    Length of the text.

    +

    Number of glyphs.

    +

    Maximum number of output glyphs allocated by caller.

    +

    Clustermap produced from shaping.

    +

    Original glyphs produced from shaping.

    +

    Original glyph advances produced from shaping.

    +

    Justified glyph advances from .

    +

    Justified glyph offsets from .

    +

    Properties of each glyph, from .

    +

    The new glyph count written to the modified arrays, or the needed glyph count if the size is not large enough.

    +

    Updated clustermap.

    +

    Updated glyphs with new glyphs inserted where needed.

    +

    Updated glyph advances.

    +

    Updated glyph offsets.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    You call GetJustifiedGlyphs after the line has been justified, and it is per-run.

    You should call GetJustifiedGlyphs if returns a non-null .justificationCharacter for that script.

    Use GetJustifiedGlyphs mainly for cursive scripts like Arabic. If maxGlyphCount is not large enough, GetJustifiedGlyphs returns the error E_NOT_SUFFICIENT_BUFFER and fills the variable to which actualGlyphCount points with the needed glyph count.

    +
    + + hh780434 + HRESULT IDWriteTextAnalyzer1::GetJustifiedGlyphs([In, Optional] IDWriteFontFace* fontFace,[In] float fontEmSize,[In] DWRITE_SCRIPT_ANALYSIS scriptAnalysis,[In] unsigned int textLength,[In] unsigned int glyphCount,[In] unsigned int maxGlyphCount,[In, Buffer, Optional] const unsigned short* clusterMap,[In, Buffer] const unsigned short* glyphIndices,[In, Buffer] const float* glyphAdvances,[In, Buffer] const float* justifiedGlyphAdvances,[In, Buffer] const DWRITE_GLYPH_OFFSET* justifiedGlyphOffsets,[In, Buffer] const DWRITE_SHAPING_GLYPH_PROPERTIES* glyphProperties,[In] unsigned int* actualGlyphCount,[Out, Buffer, Optional] unsigned short* modifiedClusterMap,[Out, Buffer] unsigned short* modifiedGlyphIndices,[Out, Buffer] float* modifiedGlyphAdvances,[Out, Buffer] DWRITE_GLYPH_OFFSET* modifiedGlyphOffsets) + IDWriteTextAnalyzer1::GetJustifiedGlyphs +
    + + +

    The interface describes the font and paragraph properties used to format text, and it describes locale information.

    +
    + +

    To get a reference to the interface, the application must call the method as shown in the following code.

     if (SUCCEEDED(hr))	
    +            { hr = pDWriteFactory_->CreateTextFormat( L"Gabriola", null, , , , 72.0f, L"en-us", &pTextFormat_ );	
    +            } 

    When creating an object using the CreateTextFormat function, the application specifies the font family, font collection, font weight, font size, and locale name for the text format.

    These properties cannot be changed after the object is created. To change these properties, a new object must be created with the desired properties.

    The interface is used to draw text with a single format

    To draw text with multiple formats, or to use a custom text renderer, use the interface. enables the application to change the format for ranges of text within the string. The takes an object as a parameter and initially applies the format information to the entire string.

    This object may not be thread-safe, and it may carry the state of text format change.

    +
    + + dd316628 + IDWriteTextFormat + IDWriteTextFormat +
    + + + Creates a text format object used for text layout with normal weight, style and stretch. + + an instance of + An array of characters that contains the name of the font family + The logical size of the font in DIP ("device-independent pixel") units. A DIP equals 1/96 inch. + HRESULT CreateTextFormat([In] const wchar* fontFamilyName,[None] IDWriteFontCollection* fontCollection,[None] DWRITE_FONT_WEIGHT fontWeight,[None] DWRITE_FONT_STYLE fontStyle,[None] DWRITE_FONT_STRETCH fontStretch,[None] FLOAT fontSize,[In] const wchar* localeName,[Out] IDWriteTextFormat** textFormat) + + + + Creates a text format object used for text layout with normal stretch. + + an instance of + An array of characters that contains the name of the font family + A value that indicates the font weight for the text object created by this method. + A value that indicates the font style for the text object created by this method. + The logical size of the font in DIP ("device-independent pixel") units. A DIP equals 1/96 inch. + HRESULT CreateTextFormat([In] const wchar* fontFamilyName,[None] IDWriteFontCollection* fontCollection,[None] DWRITE_FONT_WEIGHT fontWeight,[None] DWRITE_FONT_STYLE fontStyle,[None] DWRITE_FONT_STRETCH fontStretch,[None] FLOAT fontSize,[In] const wchar* localeName,[Out] IDWriteTextFormat** textFormat) + + + + Creates a text format object used for text layout. + + an instance of + An array of characters that contains the name of the font family + A value that indicates the font weight for the text object created by this method. + A value that indicates the font style for the text object created by this method. + A value that indicates the font stretch for the text object created by this method. + The logical size of the font in DIP ("device-independent pixel") units. A DIP equals 1/96 inch. + HRESULT CreateTextFormat([In] const wchar* fontFamilyName,[None] IDWriteFontCollection* fontCollection,[None] DWRITE_FONT_WEIGHT fontWeight,[None] DWRITE_FONT_STYLE fontStyle,[None] DWRITE_FONT_STRETCH fontStretch,[None] FLOAT fontSize,[In] const wchar* localeName,[Out] IDWriteTextFormat** textFormat) + + + + Creates a text format object used for text layout. + + an instance of + An array of characters that contains the name of the font family + A pointer to a font collection object. When this is NULL, indicates the system font collection. + A value that indicates the font weight for the text object created by this method. + A value that indicates the font style for the text object created by this method. + A value that indicates the font stretch for the text object created by this method. + The logical size of the font in DIP ("device-independent pixel") units. A DIP equals 1/96 inch. + HRESULT CreateTextFormat([In] const wchar* fontFamilyName,[None] IDWriteFontCollection* fontCollection,[None] DWRITE_FONT_WEIGHT fontWeight,[None] DWRITE_FONT_STYLE fontStyle,[None] DWRITE_FONT_STRETCH fontStretch,[None] FLOAT fontSize,[In] const wchar* localeName,[Out] IDWriteTextFormat** textFormat) + + + + Creates a text format object used for text layout. + + an instance of + An array of characters that contains the name of the font family + A pointer to a font collection object. When this is NULL, indicates the system font collection. + A value that indicates the font weight for the text object created by this method. + A value that indicates the font style for the text object created by this method. + A value that indicates the font stretch for the text object created by this method. + The logical size of the font in DIP ("device-independent pixel") units. A DIP equals 1/96 inch. + An array of characters that contains the locale name. + HRESULT CreateTextFormat([In] const wchar* fontFamilyName,[None] IDWriteFontCollection* fontCollection,[None] DWRITE_FONT_WEIGHT fontWeight,[None] DWRITE_FONT_STYLE fontStyle,[None] DWRITE_FONT_STRETCH fontStretch,[None] FLOAT fontSize,[In] const wchar* localeName,[Out] IDWriteTextFormat** textFormat) + + + + Gets a copy of the font family name. + + the current font family name. + HRESULT IDWriteTextFormat::GetFontFamilyName([Out, Buffer] wchar_t* fontFamilyName,[None] int nameSize) + + + + Gets a copy of the locale name. + + the current locale name. + HRESULT IDWriteTextFormat::GetLocaleName([Out, Buffer] wchar_t* localeName,[None] int nameSize) + + + +

    Sets trimming options for text overflowing the layout width.

    +
    +

    Text trimming options.

    +

    Application-defined omission sign. This parameter may be null. See for more information.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + dd316712 + HRESULT IDWriteTextFormat::SetTrimming([In] const DWRITE_TRIMMING* trimmingOptions,[In] IDWriteInlineObject* trimmingSign) + IDWriteTextFormat::SetTrimming +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the alignment option of text relative to the layout box's leading and trailing edge.

    +
    + + dd316681 + GetTextAlignment / SetTextAlignment + GetTextAlignment + DWRITE_TEXT_ALIGNMENT IDWriteTextFormat::GetTextAlignment() +
    + + +

    Gets or sets the alignment option of a paragraph which is relative to the top and bottom edges of a layout box.

    +
    + + dd316675 + GetParagraphAlignment / SetParagraphAlignment + GetParagraphAlignment + DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextFormat::GetParagraphAlignment() +
    + + +

    Gets or sets the word wrapping option.

    +
    + + dd316688 + GetWordWrapping / SetWordWrapping + GetWordWrapping + DWRITE_WORD_WRAPPING IDWriteTextFormat::GetWordWrapping() +
    + + +

    Gets or sets the current reading direction for text in a paragraph.

    +
    + + dd316678 + GetReadingDirection / SetReadingDirection + GetReadingDirection + DWRITE_READING_DIRECTION IDWriteTextFormat::GetReadingDirection() +
    + + +

    Gets or sets the direction that text lines flow.

    +
    + + dd316631 + GetFlowDirection / SetFlowDirection + GetFlowDirection + DWRITE_FLOW_DIRECTION IDWriteTextFormat::GetFlowDirection() +
    + + +

    Gets or sets the incremental tab stop position.

    +
    + + dd316655 + GetIncrementalTabStop / SetIncrementalTabStop + GetIncrementalTabStop + float IDWriteTextFormat::GetIncrementalTabStop() +
    + + +

    Gets the current font collection.

    +
    + + dd316633 + GetFontCollection + GetFontCollection + HRESULT IDWriteTextFormat::GetFontCollection([Out] IDWriteFontCollection** fontCollection) +
    + + +

    Gets the font weight of the text.

    +
    + + dd316652 + GetFontWeight + GetFontWeight + DWRITE_FONT_WEIGHT IDWriteTextFormat::GetFontWeight() +
    + + +

    Gets the font style of the text.

    +
    + + dd316649 + GetFontStyle + GetFontStyle + DWRITE_FONT_STYLE IDWriteTextFormat::GetFontStyle() +
    + + +

    Gets the font stretch of the text.

    +
    + + dd316646 + GetFontStretch + GetFontStretch + DWRITE_FONT_STRETCH IDWriteTextFormat::GetFontStretch() +
    + + +

    Gets the font size in DIP unites.

    +
    + + dd316643 + GetFontSize + GetFontSize + float IDWriteTextFormat::GetFontSize() +
    + + +

    Sets the alignment of text in a paragraph, relative to the leading and trailing edge of a layout box for a interface.

    +
    + No documentation. +

    This method can return one of these values.

    Return codeDescription

    The method succeeded.

    E_INVALIDARG

    The textAlignment argument is invalid.

    ?

    + +

    The text can be aligned to the leading or trailing edge of the layout box, or it can be centered. The following illustration shows text with the alignment set to , , and , respectively.

    Note??The alignment is dependent on reading direction, the above is for left-to-right reading direction. For right-to-left reading direction it would be the opposite.?

    See for more information.

    +
    + + dd316709 + HRESULT IDWriteTextFormat::SetTextAlignment([In] DWRITE_TEXT_ALIGNMENT textAlignment) + IDWriteTextFormat::SetTextAlignment +
    + + +

    Sets the alignment option of a paragraph relative to the layout box's top and bottom edge.

    +
    +

    The paragraph alignment option being set for a paragraph; see for more information.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316702 + HRESULT IDWriteTextFormat::SetParagraphAlignment([In] DWRITE_PARAGRAPH_ALIGNMENT paragraphAlignment) + IDWriteTextFormat::SetParagraphAlignment +
    + + +

    Sets the word wrapping option.

    +
    +

    The word wrapping option being set for a paragraph; see for more information.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316715 + HRESULT IDWriteTextFormat::SetWordWrapping([In] DWRITE_WORD_WRAPPING wordWrapping) + IDWriteTextFormat::SetWordWrapping +
    + + +

    Sets the paragraph reading direction.

    +
    +

    The text reading direction (for example, for languages, such as Arabic, that read from right to left) for a paragraph.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The reading direction and flow direction must always be set 90 degrees orthogonal to each other, or else you will get the error DWRITE_E_FLOWDIRECTIONCONFLICTS when you use layout functions like Draw or GetMetrics. So if you set a vertical reading direction (for example, to ), then you must also use SetFlowDirection to set the flow direction appropriately (for example, to ).

    +
    + + dd316705 + HRESULT IDWriteTextFormat::SetReadingDirection([In] DWRITE_READING_DIRECTION readingDirection) + IDWriteTextFormat::SetReadingDirection +
    + + +

    Sets the paragraph flow direction.

    +
    +

    The paragraph flow direction; see for more information.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316691 + HRESULT IDWriteTextFormat::SetFlowDirection([In] DWRITE_FLOW_DIRECTION flowDirection) + IDWriteTextFormat::SetFlowDirection +
    + + +

    Sets a fixed distance between two adjacent tab stops.

    +
    +

    The fixed distance between two adjacent tab stops.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316695 + HRESULT IDWriteTextFormat::SetIncrementalTabStop([In] float incrementalTabStop) + IDWriteTextFormat::SetIncrementalTabStop +
    + + +

    Sets trimming options for text overflowing the layout width.

    +
    +

    Text trimming options.

    +

    Application-defined omission sign. This parameter may be null. See for more information.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316712 + HRESULT IDWriteTextFormat::SetTrimming([In] const DWRITE_TRIMMING* trimmingOptions,[In, Optional] IDWriteInlineObject* trimmingSign) + IDWriteTextFormat::SetTrimming +
    + + +

    Sets the line spacing.

    +
    +

    Specifies how line height is being determined; see for more information.

    +

    The line height, or distance between one baseline to another.

    +

    The distance from top of line to baseline. A reasonable ratio to lineSpacing is 80 percent.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    For the default method, spacing depends solely on the content. For uniform spacing, the specified line height overrides the content.

    +
    + + dd316698 + HRESULT IDWriteTextFormat::SetLineSpacing([In] DWRITE_LINE_SPACING_METHOD lineSpacingMethod,[In] float lineSpacing,[In] float baseline) + IDWriteTextFormat::SetLineSpacing +
    + + +

    Gets the alignment option of text relative to the layout box's leading and trailing edge.

    +
    +

    Returns the text alignment option of the current paragraph.

    + + dd316681 + DWRITE_TEXT_ALIGNMENT IDWriteTextFormat::GetTextAlignment() + IDWriteTextFormat::GetTextAlignment +
    + + +

    Gets the alignment option of a paragraph which is relative to the top and bottom edges of a layout box.

    +
    +

    A value that indicates the current paragraph alignment option.

    + + dd316675 + DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextFormat::GetParagraphAlignment() + IDWriteTextFormat::GetParagraphAlignment +
    + + +

    Gets the word wrapping option.

    +
    +

    Returns the word wrapping option; see for more information.

    + + dd316688 + DWRITE_WORD_WRAPPING IDWriteTextFormat::GetWordWrapping() + IDWriteTextFormat::GetWordWrapping +
    + + +

    Gets the current reading direction for text in a paragraph.

    +
    +

    A value that indicates the current reading direction for text in a paragraph.

    + + dd316678 + DWRITE_READING_DIRECTION IDWriteTextFormat::GetReadingDirection() + IDWriteTextFormat::GetReadingDirection +
    + + +

    Gets the direction that text lines flow.

    +
    +

    The direction that text lines flow within their parent container. For example, indicates that text lines are placed from top to bottom.

    + + dd316631 + DWRITE_FLOW_DIRECTION IDWriteTextFormat::GetFlowDirection() + IDWriteTextFormat::GetFlowDirection +
    + + +

    Gets the incremental tab stop position.

    +
    +

    The incremental tab stop value.

    + + dd316655 + float IDWriteTextFormat::GetIncrementalTabStop() + IDWriteTextFormat::GetIncrementalTabStop +
    + + +

    Gets the trimming options for text that overflows the layout box.

    +
    +

    When this method returns, it contains a reference to a structure that holds the text trimming options for the overflowing text.

    +

    When this method returns, contains an address of a reference to a trimming omission sign. This parameter may be null.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316684 + HRESULT IDWriteTextFormat::GetTrimming([Out] DWRITE_TRIMMING* trimmingOptions,[Out] IDWriteInlineObject** trimmingSign) + IDWriteTextFormat::GetTrimming +
    + + +

    Gets the line spacing adjustment set for a multiline text paragraph.

    +
    +

    A value that indicates how line height is determined.

    +

    When this method returns, contains the line height, or distance between one baseline to another.

    +

    When this method returns, contains the distance from top of line to baseline. A reasonable ratio to lineSpacing is 80 percent.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316657 + HRESULT IDWriteTextFormat::GetLineSpacing([Out] DWRITE_LINE_SPACING_METHOD* lineSpacingMethod,[Out] float* lineSpacing,[Out] float* baseline) + IDWriteTextFormat::GetLineSpacing +
    + + +

    Gets the current font collection.

    +
    +

    When this method returns, contains an address of a reference to the font collection being used for the current text.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316633 + HRESULT IDWriteTextFormat::GetFontCollection([Out] IDWriteFontCollection** fontCollection) + IDWriteTextFormat::GetFontCollection +
    + + +

    Gets the length of the font family name.

    +
    +

    The size of the character array, in character count, not including the terminated null character.

    + + dd316640 + unsigned int IDWriteTextFormat::GetFontFamilyNameLength() + IDWriteTextFormat::GetFontFamilyNameLength +
    + + +

    Gets a copy of the font family name.

    +
    +

    When this method returns, contains a reference to a character array, which is null-terminated, that receives the current font family name. The buffer allocated for this array should be at least the size, in elements, of nameSize.

    +

    The size of the fontFamilyName character array, in character count, including the terminated null character. To find the size of fontFamilyName, use GetFontFamilyNameLength.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316636 + HRESULT IDWriteTextFormat::GetFontFamilyName([Out, Buffer] wchar_t* fontFamilyName,[In] unsigned int nameSize) + IDWriteTextFormat::GetFontFamilyName +
    + + +

    Gets the font weight of the text.

    +
    +

    A value that indicates the type of weight (such as normal, bold, or black).

    + + dd316652 + DWRITE_FONT_WEIGHT IDWriteTextFormat::GetFontWeight() + IDWriteTextFormat::GetFontWeight +
    + + +

    Gets the font style of the text.

    +
    +

    A value which indicates the type of font style (such as slope or incline).

    + + dd316649 + DWRITE_FONT_STYLE IDWriteTextFormat::GetFontStyle() + IDWriteTextFormat::GetFontStyle +
    + + +

    Gets the font stretch of the text.

    +
    +

    A value which indicates the type of font stretch (such as normal or condensed).

    + + dd316646 + DWRITE_FONT_STRETCH IDWriteTextFormat::GetFontStretch() + IDWriteTextFormat::GetFontStretch +
    + + +

    Gets the font size in DIP unites.

    +
    +

    The current font size in DIP units.

    + + dd316643 + float IDWriteTextFormat::GetFontSize() + IDWriteTextFormat::GetFontSize +
    + + +

    Gets the length of the locale name.

    +
    +

    The size of the character array in character count, not including the terminated null character.

    + + dd316674 + unsigned int IDWriteTextFormat::GetLocaleNameLength() + IDWriteTextFormat::GetLocaleNameLength +
    + + +

    Gets a copy of the locale name.

    +
    +

    Contains a character array that receives the current locale name.

    +

    The size of the character array, in character count, including the terminated null character. Use GetLocaleNameLength to get the size of the locale name character array.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316659 + HRESULT IDWriteTextFormat::GetLocaleName([Out, Buffer] wchar_t* localeName,[In] unsigned int nameSize) + IDWriteTextFormat::GetLocaleName +
    + + +

    The interface represents a block of text after it has been fully analyzed and formatted.

    +
    + +

    To get a reference to the interface, the application must call the method, as shown in the following code.

     // Create a text layout using the text format.	
    +            if (SUCCEEDED(hr))	
    +            {  rect; GetClientRect(hwnd_, &rect);  float width  = rect.right  / dpiScaleX_; float height = rect.bottom / dpiScaleY_; hr = pDWriteFactory_->CreateTextLayout( wszText_,      // The string to be laid out and formatted. cTextLength_,  // The length of the string. pTextFormat_,  // The text format to apply to the string (contains font information, etc). width,         // The width of the layout box. height,        // The height of the layout box. &pTextLayout_  // The  interface reference. );	
    +            } 

    The interface allows the application to change the format for ranges of the text it represents, specified by a structure. The following example shows how to set the font weight for a text range.

     // Set the font weight to bold for the first 5 letters.	
    +             textRange = {0, 4}; if (SUCCEEDED(hr))	
    +            { hr = pTextLayout_->SetFontWeight(, textRange);	
    +            } 

    also provides methods for adding strikethrough, underline, and inline objects to the text.

    To draw the block of text represented by an object, Direct2D provides the method. To draw using a custom renderer implement an interface and call the method

    +
    + + dd316718 + IDWriteTextLayout + IDWriteTextLayout +
    + + + Takes a string, text format, and associated constraints, and produces an object that represents the fully analyzed and formatted result. + + an instance of + An array of characters that contains the string to create a new object from. This array must be of length stringLength and can contain embedded NULL characters. + A pointer to an object that indicates the format to apply to the string. + The width of the layout box. + The height of the layout box. + HRESULT CreateTextLayout([In, Buffer] const wchar* string,[None] UINT32 stringLength,[None] IDWriteTextFormat* textFormat,[None] FLOAT maxWidth,[None] FLOAT maxHeight,[Out] IDWriteTextLayout** textLayout) + + + + Create a Gdi Compatible TextLayout. Takes a string, format, and associated constraints, and produces an object representing the result, formatted for a particular display resolution and measuring mode. + + + The resulting text layout should only be used for the intended resolution, and for cases where text scalability is desired {{CreateTextLayout}} should be used instead. + + an instance of + An array of characters that contains the string to create a new object from. This array must be of length stringLength and can contain embedded NULL characters. + The text formatting object to apply to the string. + The width of the layout box. + The height of the layout box. + The number of physical pixels per DIP (device independent pixel). For example, if rendering onto a 96 DPI device pixelsPerDip is 1. If rendering onto a 120 DPI device pixelsPerDip is 1.25 (120/96). + Instructs the text layout to use the same metrics as GDI bi-level text when set to FALSE. When set to TRUE, instructs the text layout to use the same metrics as text measured by GDI using a font created with CLEARTYPE_NATURAL_QUALITY. + HRESULT IDWriteFactory::CreateGdiCompatibleTextLayout([In, Buffer] const wchar_t* string,[None] int stringLength,[None] IDWriteTextFormat* textFormat,[None] float layoutWidth,[None] float layoutHeight,[None] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[None] BOOL useGdiNatural,[Out] IDWriteTextLayout** textLayout) + + + + Create a GDI Compatible TextLayout. Takes a string, format, and associated constraints, and produces an object representing the result, formatted for a particular display resolution and measuring mode. + + + The resulting text layout should only be used for the intended resolution, and for cases where text scalability is desired {{CreateTextLayout}} should be used instead. + + an instance of + An array of characters that contains the string to create a new object from. This array must be of length stringLength and can contain embedded NULL characters. + The text formatting object to apply to the string. + The width of the layout box. + The height of the layout box. + The number of physical pixels per DIP (device independent pixel). For example, if rendering onto a 96 DPI device pixelsPerDip is 1. If rendering onto a 120 DPI device pixelsPerDip is 1.25 (120/96). + An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specifies the font size and pixels per DIP. + Instructs the text layout to use the same metrics as GDI bi-level text when set to FALSE. When set to TRUE, instructs the text layout to use the same metrics as text measured by GDI using a font created with CLEARTYPE_NATURAL_QUALITY. + HRESULT IDWriteFactory::CreateGdiCompatibleTextLayout([In, Buffer] const wchar_t* string,[None] int stringLength,[None] IDWriteTextFormat* textFormat,[None] float layoutWidth,[None] float layoutHeight,[None] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[None] BOOL useGdiNatural,[Out] IDWriteTextLayout** textLayout) + + + + Draws text using the specified client drawing context. + + + To draw text with this method, a textLayout object needs to be created by the application using . After the textLayout object is obtained, the application calls the IDWriteTextLayout::Draw method to draw the text, decorations, and inline objects. The actual drawing is done through the callback interface passed in as the textRenderer argument; there, the corresponding DrawGlyphRun API is called. + + Pointer to the set of callback functions used to draw parts of a text string. + The x-coordinate of the layout's left side. + The y-coordinate of the layout's top side. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Draw([None] void* clientDrawingContext,[None] IDWriteTextRenderer* renderer,[None] FLOAT originX,[None] FLOAT originY) + + + + Draws text using the specified client drawing context. + + + To draw text with this method, a textLayout object needs to be created by the application using . After the textLayout object is obtained, the application calls the IDWriteTextLayout::Draw method to draw the text, decorations, and inline objects. The actual drawing is done through the callback interface passed in as the textRenderer argument; there, the corresponding DrawGlyphRun API is called. + + An application-defined drawing context. + Pointer to the set of callback functions used to draw parts of a text string. + The x-coordinate of the layout's left side. + The y-coordinate of the layout's top side. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT Draw([None] void* clientDrawingContext,[None] IDWriteTextRenderer* renderer,[None] FLOAT originX,[None] FLOAT originY) + + + + Retrieves logical properties and measurements of each glyph cluster. + + + If maxClusterCount is not large enough, then E_NOT_SUFFICIENT_BUFFER, which is equivalent to HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), is returned and actualClusterCount is set to the number of clusters needed. + + Returns metrics, such as line-break or total advance width, for a glyph cluster. + HRESULT IDWriteTextLayout::GetClusterMetrics([Out, Buffer, Optional] DWRITE_CLUSTER_METRICS* clusterMetrics,[None] int maxClusterCount,[Out] int* actualClusterCount) + + + + Sets the application-defined drawing effect. + + + An , such as a color or gradient brush, can be set as a drawing effect if you are using the to draw text and that brush will be used to draw the specified range of text. This drawing effect is associated with the specified range and will be passed back to the application by way of the callback when the range is drawn at drawing time. + + Application-defined drawing effects that apply to the range. This data object will be passed back to the application's drawing callbacks for final rendering. + The text range to which this change applies. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteTextLayout::SetDrawingEffect([None] IUnknown* drawingEffect,[None] DWRITE_TEXT_RANGE textRange) + + + + Gets the application-defined drawing effect at the specified text position. + + The position of the text whose drawing effect is to be retrieved. + a reference to the current application-defined drawing effect. Usually this effect is a foreground brush that is used in glyph drawing. + HRESULT IDWriteTextLayout::GetDrawingEffect([None] int currentPosition,[Out] IUnknown** drawingEffect,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the application-defined drawing effect at the specified text position. + + The position of the text whose drawing effect is to be retrieved. + Contains the range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the drawing effect. + a reference to the current application-defined drawing effect. Usually this effect is a foreground brush that is used in glyph drawing. + HRESULT IDWriteTextLayout::GetDrawingEffect([None] int currentPosition,[Out] IUnknown** drawingEffect,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the font collection associated with the text at the specified position. + + The position of the text to inspect. + a reference to the current font collection. + HRESULT IDWriteTextLayout::GetFontCollection([None] int currentPosition,[Out] IDWriteFontCollection** fontCollection,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the font family name of the text at the specified position. + + The position of the text to examine. + the font family name + HRESULT IDWriteTextLayout::GetFontFamilyName([None] int currentPosition,[Out, Buffer] wchar_t* fontFamilyName,[None] int nameSize,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the font family name of the text at the specified position. + + The position of the text to examine. + The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the font family name. + the font family name + HRESULT IDWriteTextLayout::GetFontFamilyName([None] int currentPosition,[Out, Buffer] wchar_t* fontFamilyName,[None] int nameSize,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the font em height of the text at the specified position. + + The position of the text to inspect. + The size of the font in ems of the text at the specified position. + HRESULT IDWriteTextLayout::GetFontSize([None] int currentPosition,[Out] float* fontSize,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the font stretch of the text at the specified position. + + The position of the text to inspect. + a value which indicates the type of font stretch (also known as width) being applied at the specified position. + HRESULT IDWriteTextLayout::GetFontStretch([None] int currentPosition,[Out] DWRITE_FONT_STRETCH* fontStretch,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the font style (also known as slope) of the text at the specified position. + + The position of the text to inspect. + a value which indicates the type of font style (also known as slope or incline) being applied at the specified position. + HRESULT IDWriteTextLayout::GetFontStyle([None] int currentPosition,[Out] DWRITE_FONT_STYLE* fontStyle,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the font weight of the text at the specified position. + + The position of the text to inspect. + a value which indicates the type of font weight being applied at the specified position. + HRESULT IDWriteTextLayout::GetFontWeight([None] int currentPosition,[Out] DWRITE_FONT_WEIGHT* fontWeight,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the inline object at the specified position. + + The specified text position. + an application-defined inline object. + HRESULT IDWriteTextLayout::GetInlineObject([None] int currentPosition,[Out] IDWriteInlineObject** inlineObject,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Retrieves the information about each individual text line of the text string. + + + If maxLineCount is not large enough E_NOT_SUFFICIENT_BUFFER, which is equivalent to HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), is returned and *actualLineCount is set to the number of lines needed. + + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteTextLayout::GetLineMetrics([Out, Buffer, Optional] DWRITE_LINE_METRICS* lineMetrics,[None] int maxLineCount,[Out] int* actualLineCount) + + + + Gets the locale name of the text at the specified position. + + The position of the text to inspect. + the locale name of the text at the specified position. + HRESULT IDWriteTextLayout::GetLocaleName([None] int currentPosition,[Out, Buffer] wchar_t* localeName,[None] int nameSize,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the locale name of the text at the specified position. + + The position of the text to inspect. + The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the locale name. + the locale name of the text at the specified position. + HRESULT IDWriteTextLayout::GetLocaleName([None] int currentPosition,[Out, Buffer] wchar_t* localeName,[None] int nameSize,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Get the strikethrough presence of the text at the specified position. + + The position of the text to inspect. + A Boolean flag that indicates whether strikethrough is present at the position indicated by currentPosition. + HRESULT IDWriteTextLayout::GetStrikethrough([None] int currentPosition,[Out] BOOL* hasStrikethrough,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the typography setting of the text at the specified position. + + The position of the text to inspect. + a reference to the current typography setting. + HRESULT IDWriteTextLayout::GetTypography([None] int currentPosition,[Out] IDWriteTypography** typography,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + Gets the underline presence of the text at the specified position. + + The current text position. + A Boolean flag that indicates whether underline is present at the position indicated by currentPosition. + HRESULT IDWriteTextLayout::GetUnderline([None] int currentPosition,[Out] BOOL* hasUnderline,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + + + + The application calls this function to get a set of hit-test metrics corresponding to a range of text positions. + One of the main usages is to implement highlight selection of the text string. + The function returns E_NOT_SUFFICIENT_BUFFER, which is equivalent to HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), + when the buffer size of hitTestMetrics is too small to hold all the regions calculated by the function. + In this situation, the function sets the output value *actualHitTestMetricsCount to the number of geometries calculated. + The application is responsible for allocating a new buffer of greater size and calling the function again. + A good value to use as an initial value for maxHitTestMetricsCount may be calculated from the following equation: + maxHitTestMetricsCount = lineCount * maxBidiReorderingDepth where lineCount is obtained from the value of the output argument *actualLineCount (from the function IDWriteTextLayout::GetLineLengths), and the maxBidiReorderingDepth value from the DWRITE_TEXT_METRICS structure of the output argument *textMetrics (from the function IDWriteFactory::CreateTextLayout). + + The first text position of the specified range. + The number of positions of the specified range. + The origin pixel location X at the left of the layout box. This offset is added to the hit-test metrics returned. + The origin pixel location Y at the top of the layout box. This offset is added to the hit-test metrics returned. + a reference to a buffer of the output geometry fully enclosing the specified position range. The buffer must be at least as large as maxHitTestMetricsCount. + HRESULT IDWriteTextLayout::HitTestTextRange([None] int textPosition,[None] int textLength,[None] float originX,[None] float originY,[Out, Buffer, Optional] DWRITE_HIT_TEST_METRICS* hitTestMetrics,[None] int maxHitTestMetricsCount,[Out] int* actualHitTestMetricsCount) + + + + Sets the inline object. + + + The application may call this function to specify the set of properties describing an application-defined inline object for specific range. This inline object applies to the specified range and will be passed back to the application by way of the DrawInlineObject callback when the range is drawn. Any text in that range will be suppressed. + + An application-defined inline object. + Text range to which this change applies. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT IDWriteTextLayout::SetInlineObject([None] IDWriteInlineObject* inlineObject,[None] DWRITE_TEXT_RANGE textRange) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the layout maximum width.

    +
    + + dd316781 + GetMaxWidth / SetMaxWidth + GetMaxWidth + float IDWriteTextLayout::GetMaxWidth() +
    + + +

    Gets or sets the layout maximum height.

    +
    + + dd316776 + GetMaxHeight / SetMaxHeight + GetMaxHeight + float IDWriteTextLayout::GetMaxHeight() +
    + + +

    Retrieves overall metrics for the formatted string.

    +
    + + dd316785 + GetMetrics + GetMetrics + HRESULT IDWriteTextLayout::GetMetrics([Out] DWRITE_TEXT_METRICS* textMetrics) +
    + + +

    Returns the overhangs (in DIPs) of the layout and all objects contained in it, including text glyphs and inline objects.

    +
    + +

    Underlines and strikethroughs do not contribute to the black box determination, since these are actually drawn by the renderer, which is allowed to draw them in any variety of styles.

    +
    + + dd316790 + GetOverhangMetrics + GetOverhangMetrics + HRESULT IDWriteTextLayout::GetOverhangMetrics([Out] DWRITE_OVERHANG_METRICS* overhangs) +
    + + +

    Sets the layout maximum width.

    +
    +

    A value that indicates the maximum width of the layout box.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371511 + HRESULT IDWriteTextLayout::SetMaxWidth([In] float maxWidth) + IDWriteTextLayout::SetMaxWidth +
    + + +

    Sets the layout maximum height.

    +
    +

    A value that indicates the maximum height of the layout box.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371507 + HRESULT IDWriteTextLayout::SetMaxHeight([In] float maxHeight) + IDWriteTextLayout::SetMaxHeight +
    + + +

    Sets the font collection.

    +
    +

    The font collection to set.

    +

    Text range to which this change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371481 + HRESULT IDWriteTextLayout::SetFontCollection([In] IDWriteFontCollection* fontCollection,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetFontCollection +
    + + +

    Sets null-terminated font family name for text within a specified text range.

    +
    +

    The font family name that applies to the entire text string within the range specified by textRange.

    +

    Text range to which this change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371487 + HRESULT IDWriteTextLayout::SetFontFamilyName([In] const wchar_t* fontFamilyName,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetFontFamilyName +
    + + +

    Sets the font weight for text within a text range specified by a structure.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The font weight can be set to one of the predefined font weight values provided in the enumeration or an integer from 1 to 999. Values outside this range will cause the method to fail with an E_INVALIDARG return value.

    The following illustration shows an example of Normal and UltraBold weights for the Palatino Linotype typeface.

    +
    + + dd371498 + HRESULT IDWriteTextLayout::SetFontWeight([In] DWRITE_FONT_WEIGHT fontWeight,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetFontWeight +
    + + +

    Sets the font style for text within a text range specified by a structure.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The font style can be set to Normal, Italic or Oblique. The following illustration shows three styles for the Palatino font. For more information, see .

    + + + dd371495 + HRESULT IDWriteTextLayout::SetFontStyle([In] DWRITE_FONT_STYLE fontStyle,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetFontStyle + + +

    +

    Sets the font stretch for text within a specified text range.

    +
    +

    A value which indicates the type of font stretch for text within the range specified by textRange.

    +

    Text range to which this change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371493 + HRESULT IDWriteTextLayout::SetFontStretch([In] DWRITE_FONT_STRETCH fontStretch,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetFontStretch +
    + + +

    Sets the font size in DIP units for text within a specified text range.

    +
    +

    The font size in DIP units to be set for text in the range specified by textRange.

    +

    Text range to which this change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371490 + HRESULT IDWriteTextLayout::SetFontSize([In] float fontSize,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetFontSize +
    + + +

    The interface represents a block of text after it has been fully analyzed and formatted.

    +
    + No documentation. + No documentation. + No documentation. + +

    To get a reference to the interface, the application must call the method, as shown in the following code.

     // Create a text layout using the text format.	
    +            if (SUCCEEDED(hr))	
    +            {  rect; GetClientRect(hwnd_, &rect);  float width  = rect.right  / dpiScaleX_; float height = rect.bottom / dpiScaleY_; hr = pDWriteFactory_->CreateTextLayout( wszText_,      // The string to be laid out and formatted. cTextLength_,  // The length of the string. pTextFormat_,  // The text format to apply to the string (contains font information, etc). width,         // The width of the layout box. height,        // The height of the layout box. &pTextLayout_  // The  interface reference. );	
    +            } 

    The interface allows the application to change the format for ranges of the text it represents, specified by a structure. The following example shows how to set the font weight for a text range.

     // Set the font weight to bold for the first 5 letters.	
    +             textRange = {0, 4}; if (SUCCEEDED(hr))	
    +            { hr = pTextLayout_->SetFontWeight(, textRange);	
    +            } 

    also provides methods for adding strikethrough, underline, and inline objects to the text.

    To draw the block of text represented by an object, Direct2D provides the method. To draw using a custom renderer implement an interface and call the method

    +
    + + dd316718 + HRESULT IDWriteTextLayout::SetUnderline([In] BOOL hasUnderline,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetUnderline +
    + + +

    Sets strikethrough for text within a specified text range.

    +
    +

    A Boolean flag that indicates whether strikethrough takes place in the range specified by textRange.

    +

    Text range to which this change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371514 + HRESULT IDWriteTextLayout::SetStrikethrough([In] BOOL hasStrikethrough,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetStrikethrough +
    + + +

    Sets the application-defined drawing effect.

    +
    +

    Application-defined drawing effects that apply to the range. This data object will be passed back to the application's drawing callbacks for final rendering.

    +

    The text range to which this change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    An , such as a color or gradient brush, can be set as a drawing effect if you are using the to draw text and that brush will be used to draw the specified range of text.

    This drawing effect is associated with the specified range and will be passed back to the application by way of the callback when the range is drawn at drawing time.

    +
    + + dd371477 + HRESULT IDWriteTextLayout::SetDrawingEffect([In] void* drawingEffect,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetDrawingEffect +
    + + +

    Sets the inline object.

    +
    +

    An application-defined inline object.

    +

    Text range to which this change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The application may call this function to specify the set of properties describing an application-defined inline object for specific range.

    This inline object applies to the specified range and will be passed back to the application by way of the DrawInlineObject callback when the range is drawn. Any text in that range will be suppressed.

    +
    + + dd371500 + HRESULT IDWriteTextLayout::SetInlineObject([In] IDWriteInlineObject* inlineObject,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetInlineObject +
    + + +

    Sets font typography features for text within a specified text range.

    +
    +

    Pointer to font typography settings.

    +

    Text range to which this change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371517 + HRESULT IDWriteTextLayout::SetTypography([In] IDWriteTypography* typography,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetTypography +
    + + +

    Sets the locale name for text within a specified text range.

    +
    +

    A null-terminated locale name string.

    +

    Text range to which this change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371503 + HRESULT IDWriteTextLayout::SetLocaleName([In] const wchar_t* localeName,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout::SetLocaleName +
    + + +

    Gets the layout maximum width.

    +
    +

    Returns the layout maximum width.

    + + dd316781 + float IDWriteTextLayout::GetMaxWidth() + IDWriteTextLayout::GetMaxWidth +
    + + +

    Gets the layout maximum height.

    +
    +

    The layout maximum height.

    + + dd316776 + float IDWriteTextLayout::GetMaxHeight() + IDWriteTextLayout::GetMaxHeight +
    + + +

    Gets the font collection associated with the text at the specified position.

    +
    +

    The position of the text to inspect.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the underline.

    +

    Contains an address of a reference to the current font collection.

    + + dd316735 + HRESULT IDWriteTextLayout::GetFontCollection([In] unsigned int currentPosition,[Out] IDWriteFontCollection** fontCollection,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetFontCollection +
    + + +

    Get the length of the font family name at the current position.

    +
    +

    The current text position.

    +

    When this method returns, contains the size of the character array containing the font family name, in character count, not including the terminated null character.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the font family.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316741 + HRESULT IDWriteTextLayout::GetFontFamilyNameLength([In] unsigned int currentPosition,[Out] unsigned int* nameLength,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetFontFamilyNameLength +
    + + +

    Copies the font family name of the text at the specified position.

    +
    +

    The position of the text to examine.

    +

    When this method returns, contains an array of characters that receives the current font family name. You must allocate storage for this parameter.

    +

    The size of the character array in character count including the terminated null character.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the font family name.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316738 + HRESULT IDWriteTextLayout::GetFontFamilyName([In] unsigned int currentPosition,[Out, Buffer] wchar_t* fontFamilyName,[In] unsigned int nameSize,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetFontFamilyName +
    + + +

    Gets the font weight of the text at the specified position.

    +
    +

    The position of the text to inspect.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the font weight.

    +

    When this method returns, contains a value which indicates the type of font weight being applied at the specified position.

    + + dd316753 + HRESULT IDWriteTextLayout::GetFontWeight([In] unsigned int currentPosition,[Out] DWRITE_FONT_WEIGHT* fontWeight,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetFontWeight +
    + + +

    Gets the font style (also known as slope) of the text at the specified position.

    +
    +

    The position of the text to inspect.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the font style.

    +

    When this method returns, contains a value which indicates the type of font style (also known as slope or incline) being applied at the specified position.

    + + dd316750 + HRESULT IDWriteTextLayout::GetFontStyle([In] unsigned int currentPosition,[Out] DWRITE_FONT_STYLE* fontStyle,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetFontStyle +
    + + +

    Gets the font stretch of the text at the specified position.

    +
    +

    The position of the text to inspect.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the font stretch.

    +

    When this method returns, contains a value which indicates the type of font stretch (also known as width) being applied at the specified position.

    + + dd316747 + HRESULT IDWriteTextLayout::GetFontStretch([In] unsigned int currentPosition,[Out] DWRITE_FONT_STRETCH* fontStretch,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetFontStretch +
    + + +

    Gets the font em height of the text at the specified position.

    +
    +

    The position of the text to inspect.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the font size.

    +

    When this method returns, contains the size of the font in ems of the text at the specified position.

    + + dd316745 + HRESULT IDWriteTextLayout::GetFontSize([In] unsigned int currentPosition,[Out] float* fontSize,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetFontSize +
    + + +

    Gets the underline presence of the text at the specified position.

    +
    +

    The current text position.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the underline.

    +

    A Boolean flag that indicates whether underline is present at the position indicated by currentPosition.

    + + dd371463 + HRESULT IDWriteTextLayout::GetUnderline([In] unsigned int currentPosition,[Out] BOOL* hasUnderline,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetUnderline +
    + + +

    Get the strikethrough presence of the text at the specified position.

    +
    +

    The position of the text to inspect.

    +

    Contains the range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to strikethrough.

    +

    A Boolean flag that indicates whether strikethrough is present at the position indicated by currentPosition.

    + + dd316793 + HRESULT IDWriteTextLayout::GetStrikethrough([In] unsigned int currentPosition,[Out] BOOL* hasStrikethrough,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetStrikethrough +
    + + +

    Gets the application-defined drawing effect at the specified text position.

    +
    +

    The position of the text whose drawing effect is to be retrieved.

    +

    Contains the range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the drawing effect.

    +

    When this method returns, contains an address of a reference to the current application-defined drawing effect. Usually this effect is a foreground brush that is used in glyph drawing.

    + + dd316732 + HRESULT IDWriteTextLayout::GetDrawingEffect([In] unsigned int currentPosition,[Out] void** drawingEffect,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetDrawingEffect +
    + + +

    Gets the inline object at the specified position.

    +
    +

    The specified text position.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the inline object.

    +

    Contains the application-defined inline object.

    + + dd316758 + HRESULT IDWriteTextLayout::GetInlineObject([In] unsigned int currentPosition,[Out] IDWriteInlineObject** inlineObject,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetInlineObject +
    + + +

    Gets the typography setting of the text at the specified position.

    +
    +

    The position of the text to inspect.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the typography.

    +

    When this method returns, contains an address of a reference to the current typography setting.

    + + dd371459 + HRESULT IDWriteTextLayout::GetTypography([In] unsigned int currentPosition,[Out] IDWriteTypography** typography,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetTypography +
    + + +

    Gets the length of the locale name of the text at the specified position.

    +
    +

    The position of the text to inspect.

    +

    Size of the character array, in character count, not including the terminated null character.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the locale name.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316771 + HRESULT IDWriteTextLayout::GetLocaleNameLength([In] unsigned int currentPosition,[Out] unsigned int* nameLength,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetLocaleNameLength +
    + + +

    Gets the locale name of the text at the specified position.

    +
    +

    The position of the text to inspect.

    +

    When this method returns, contains the character array receiving the current locale name.

    +

    Size of the character array, in character count, including the terminated null character.

    +

    The range of text that has the same formatting as the text at the position specified by currentPosition. This means the run has the exact formatting as the position specified, including but not limited to the locale name.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316767 + HRESULT IDWriteTextLayout::GetLocaleName([In] unsigned int currentPosition,[Out, Buffer] wchar_t* localeName,[In] unsigned int nameSize,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout::GetLocaleName +
    + + +

    Draws text using the specified client drawing context.

    +
    +

    An application-defined drawing context.

    +

    Pointer to the set of callback functions used to draw parts of a text string.

    +

    The x-coordinate of the layout's left side.

    +

    The y-coordinate of the layout's top side.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    To draw text with this method, a textLayout object needs to be created by the application using .

    After the textLayout object is obtained, the application calls the method to draw the text, decorations, and inline objects. The actual drawing is done through the callback interface passed in as the textRenderer argument; there, the corresponding DrawGlyphRun API is called.

    If you set a vertical text reading direction on via SetReadingDirection with (or bottom to top), then you must pass an interface that implements . Otherwise you get the error DWRITE_E_TEXTRENDERERINCOMPATIBLE because the original interface only supported horizontal text.

    +
    + + dd316726 + HRESULT IDWriteTextLayout::Draw([In, Optional] void* clientDrawingContext,[In] IDWriteTextRenderer* renderer,[In] float originX,[In] float originY) + IDWriteTextLayout::Draw +
    + + +

    Retrieves the information about each individual text line of the text string.

    +
    +

    When this method returns, contains a reference to an array of structures containing various calculated length values of individual text lines.

    +

    The maximum size of the lineMetrics array.

    +

    When this method returns, contains the actual size of the lineMetrics array that is needed.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If maxLineCount is not large enough E_NOT_SUFFICIENT_BUFFER, which is equivalent to HRESULT_FROM_WIN32(), is returned and *actualLineCount is set to the number of lines needed.

    +
    + + dd316763 + HRESULT IDWriteTextLayout::GetLineMetrics([Out, Buffer, Optional] DWRITE_LINE_METRICS* lineMetrics,[In] unsigned int maxLineCount,[Out] unsigned int* actualLineCount) + IDWriteTextLayout::GetLineMetrics +
    + + +

    Retrieves overall metrics for the formatted string.

    +
    +

    When this method returns, contains the measured distances of text and associated content after being formatted.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd316785 + HRESULT IDWriteTextLayout::GetMetrics([Out] DWRITE_TEXT_METRICS* textMetrics) + IDWriteTextLayout::GetMetrics +
    + + +

    Returns the overhangs (in DIPs) of the layout and all objects contained in it, including text glyphs and inline objects.

    +
    +

    Overshoots of visible extents (in DIPs) outside the layout.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Underlines and strikethroughs do not contribute to the black box determination, since these are actually drawn by the renderer, which is allowed to draw them in any variety of styles.

    +
    + + dd316790 + HRESULT IDWriteTextLayout::GetOverhangMetrics([Out] DWRITE_OVERHANG_METRICS* overhangs) + IDWriteTextLayout::GetOverhangMetrics +
    + + +

    Retrieves logical properties and measurements of each glyph cluster.

    +
    +

    When this method returns, contains metrics, such as line-break or total advance width, for a glyph cluster.

    +

    The maximum size of the clusterMetrics array.

    +

    When this method returns, contains the actual size of the clusterMetrics array that is needed.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If maxClusterCount is not large enough, then E_NOT_SUFFICIENT_BUFFER, which is equivalent to HRESULT_FROM_WIN32(), is returned and actualClusterCount is set to the number of clusters needed.

    +
    + + dd316729 + HRESULT IDWriteTextLayout::GetClusterMetrics([Out, Buffer, Optional] DWRITE_CLUSTER_METRICS* clusterMetrics,[In] unsigned int maxClusterCount,[Out] unsigned int* actualClusterCount) + IDWriteTextLayout::GetClusterMetrics +
    + + +

    Determines the minimum possible width the layout can be set to without emergency breaking between the characters of whole words occurring.

    +
    +

    Minimum width.

    + + dd316723 + HRESULT IDWriteTextLayout::DetermineMinWidth([Out] float* minWidth) + IDWriteTextLayout::DetermineMinWidth +
    + + +

    The application calls this function passing in a specific pixel location relative to the top-left location of the layout box and obtains the information about the correspondent hit-test metrics of the text string where the hit-test has occurred. When the specified pixel location is outside the text string, the function sets the output value *isInside to .

    +
    +

    The pixel location X to hit-test, relative to the top-left location of the layout box.

    +

    The pixel location Y to hit-test, relative to the top-left location of the layout box.

    +

    An output flag that indicates whether the hit-test location is at the leading or the trailing side of the character. When the output *isInside value is set to , this value is set according to the output hitTestMetrics->textPosition value to represent the edge closest to the hit-test location.

    +

    An output flag that indicates whether the hit-test location is inside the text string. When , the position nearest the text's edge is returned.

    +

    The output geometry fully enclosing the hit-test location. When the output *isInside value is set to , this structure represents the geometry enclosing the edge closest to the hit-test location.

    + + dd371464 + HRESULT IDWriteTextLayout::HitTestPoint([In] float pointX,[In] float pointY,[Out] BOOL* isTrailingHit,[Out] BOOL* isInside,[Out] DWRITE_HIT_TEST_METRICS* hitTestMetrics) + IDWriteTextLayout::HitTestPoint +
    + + +

    The application calls this function to get the pixel location relative to the top-left of the layout box given the text position and the logical side of the position. This function is normally used as part of caret positioning of text where the caret is drawn at the location corresponding to the current text editing position. It may also be used as a way to programmatically obtain the geometry of a particular text position in UI automation.

    +
    +

    The text position used to get the pixel location.

    +

    A Boolean flag that indicates whether the pixel location is of the leading or the trailing side of the specified text position.

    +

    When this method returns, contains the output pixel location X, relative to the top-left location of the layout box.

    +

    When this method returns, contains the output pixel location Y, relative to the top-left location of the layout box.

    +

    When this method returns, contains the output geometry fully enclosing the specified text position.

    + + dd371469 + HRESULT IDWriteTextLayout::HitTestTextPosition([In] unsigned int textPosition,[In] BOOL isTrailingHit,[Out] float* pointX,[Out] float* pointY,[Out] DWRITE_HIT_TEST_METRICS* hitTestMetrics) + IDWriteTextLayout::HitTestTextPosition +
    + + +

    The application calls this function to get a set of hit-test metrics corresponding to a range of text positions. One of the main usages is to implement highlight selection of the text string. The function returns E_NOT_SUFFICIENT_BUFFER, which is equivalent to HRESULT_FROM_WIN32(), when the buffer size of hitTestMetrics is too small to hold all the regions calculated by the function. In this situation, the function sets the output value *actualHitTestMetricsCount to the number of geometries calculated. The application is responsible for allocating a new buffer of greater size and calling the function again. A good value to use as an initial value for maxHitTestMetricsCount may be calculated from the following equation: maxHitTestMetricsCount = lineCount * maxBidiReorderingDepth where lineCount is obtained from the value of the output argument *actualLineCount (from the function ::GetLineLengths), and the maxBidiReorderingDepth value from the structure of the output argument *textMetrics (from the function ::CreateTextLayout).

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371473 + HRESULT IDWriteTextLayout::HitTestTextRange([In] unsigned int textPosition,[In] unsigned int textLength,[In] float originX,[In] float originY,[Out, Buffer, Optional] DWRITE_HIT_TEST_METRICS* hitTestMetrics,[In] unsigned int maxHitTestMetricsCount,[Out] unsigned int* actualHitTestMetricsCount) + IDWriteTextLayout::HitTestTextRange +
    + + +

    Specifies a range of text positions where format is applied in the text represented by an object.

    +
    + + dd368137 + DWRITE_TEXT_RANGE + DWRITE_TEXT_RANGE +
    + + + Initializes a new instance of the struct. + + The start position. + The length. + + + + No documentation. + + + dd368137 + unsigned int startPosition + unsigned int startPosition + + + + No documentation. + + + dd368137 + unsigned int length + unsigned int length + + + +

    Represents a set of application-defined callbacks that perform rendering of text, inline objects, and decorations such as underlines.

    +
    + + dd371523 + IDWriteTextRenderer + IDWriteTextRenderer +
    + + + IDWriteTextLayout::Draw calls this function to instruct the client to render a run of glyphs. + + + The function calls this callback function with all the information about glyphs to render. The application implements this callback by mostly delegating the call to the underlying platform's graphics API such as {{Direct2D}} to draw glyphs on the drawing context. An application that uses GDI can implement this callback in terms of the method. + + The application-defined drawing context passed to . + The pixel location (X-coordinate) at the baseline origin of the glyph run. + The pixel location (Y-coordinate) at the baseline origin of the glyph run. + The measuring method for glyphs in the run, used with the other properties to determine the rendering mode. + Pointer to the glyph run instance to render. + A pointer to the optional glyph run description instance which contains properties of the characters associated with this run. + Application-defined drawing effects for the glyphs to render. Usually this argument represents effects such as the foreground brush filling the interior of text. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT DrawGlyphRun([None] void* clientDrawingContext,[None] FLOAT baselineOriginX,[None] FLOAT baselineOriginY,[None] DWRITE_MEASURING_MODE measuringMode,[In] const DWRITE_GLYPH_RUN* glyphRun,[In] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[None] IUnknown* clientDrawingEffect) + + + + IDWriteTextLayout::Draw calls this function to instruct the client to draw an underline. + + + A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel. + + The application-defined drawing context passed to IDWriteTextLayout::Draw. + The pixel location (X-coordinate) at the baseline origin of the run where underline applies. + The pixel location (Y-coordinate) at the baseline origin of the run where underline applies. + Pointer to a structure containing underline logical information. + Application-defined effect to apply to the underline. Usually this argument represents effects such as the foreground brush filling the interior of a line. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT DrawUnderline([None] void* clientDrawingContext,[None] FLOAT baselineOriginX,[None] FLOAT baselineOriginY,[In] const DWRITE_UNDERLINE* underline,[None] IUnknown* clientDrawingEffect) + + + + IDWriteTextLayout::Draw calls this function to instruct the client to draw a strikethrough. + + + A single strikethrough can be broken into multiple calls, depending on how the formatting changes attributes. Strikethrough is not averaged across font sizes/styles changes. To get an appropriate starting pixel position, add strikethrough::offset to the baseline. Like underlines, the x coordinate will always be passed as the left side, regardless of text directionality. + + The application-defined drawing context passed to IDWriteTextLayout::Draw. + The pixel location (X-coordinate) at the baseline origin of the run where strikethrough applies. + The pixel location (Y-coordinate) at the baseline origin of the run where strikethrough applies. + Pointer to a structure containing strikethrough logical information. + Application-defined effect to apply to the strikethrough. Usually this argument represents effects such as the foreground brush filling the interior of a line. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT DrawStrikethrough([None] void* clientDrawingContext,[None] FLOAT baselineOriginX,[None] FLOAT baselineOriginY,[In] const DWRITE_STRIKETHROUGH* strikethrough,[None] IUnknown* clientDrawingEffect) + + + + IDWriteTextLayout::Draw calls this application callback when it needs to draw an inline object. + + The application-defined drawing context passed to IDWriteTextLayout::Draw. + X-coordinate at the top-left corner of the inline object. + Y-coordinate at the top-left corner of the inline object. + The application-defined inline object set using IDWriteTextFormat::SetInlineObject. + A Boolean flag that indicates whether the object's baseline runs alongside the baseline axis of the line. + A Boolean flag that indicates whether the object is in a right-to-left context, hinting that the drawing may want to mirror the normal image. + Application-defined drawing effects for the glyphs to render. Usually this argument represents effects such as the foreground brush filling the interior of a line. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT DrawInlineObject([None] void* clientDrawingContext,[None] FLOAT originX,[None] FLOAT originY,[None] IDWriteInlineObject* inlineObject,[None] BOOL isSideways,[None] BOOL isRightToLeft,[None] IUnknown* clientDrawingEffect) + + + + Default abstract implementation of TextRenderer. Need to implement a least a DrawXXX method to use it. + + + + + Determines whether pixel snapping is disabled. The recommended default is FALSE, + unless doing animation that requires subpixel vertical placement. + + The context passed to IDWriteTextLayout::Draw. + Receives TRUE if pixel snapping is disabled or FALSE if it not. + HRESULT IsPixelSnappingDisabled([None] void* clientDrawingContext,[Out] BOOL* isDisabled) + + + + Gets a transform that maps abstract coordinates to DIPs. + + The drawing context passed to . + a structure which has transform information for pixel snapping. + HRESULT GetCurrentTransform([None] void* clientDrawingContext,[Out] DWRITE_MATRIX* transform) + + + + Gets the number of physical pixels per DIP. + + + Because a DIP (device-independent pixel) is 1/96 inch, the pixelsPerDip value is the number of logical pixels per inch divided by 96. + + The drawing context passed to . + the number of physical pixels per DIP + HRESULT GetPixelsPerDip([None] void* clientDrawingContext,[Out] FLOAT* pixelsPerDip) + + + + IDWriteTextLayout::Draw calls this function to instruct the client to render a run of glyphs. + + + The function calls this callback function with all the information about glyphs to render. The application implements this callback by mostly delegating the call to the underlying platform's graphics API such as {{Direct2D}} to draw glyphs on the drawing context. An application that uses GDI can implement this callback in terms of the method. + + The application-defined drawing context passed to . + The pixel location (X-coordinate) at the baseline origin of the glyph run. + The pixel location (Y-coordinate) at the baseline origin of the glyph run. + The measuring method for glyphs in the run, used with the other properties to determine the rendering mode. + Pointer to the glyph run instance to render. + A pointer to the optional glyph run description instance which contains properties of the characters associated with this run. + Application-defined drawing effects for the glyphs to render. Usually this argument represents effects such as the foreground brush filling the interior of text. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT DrawGlyphRun([None] void* clientDrawingContext,[None] FLOAT baselineOriginX,[None] FLOAT baselineOriginY,[None] DWRITE_MEASURING_MODE measuringMode,[In] const DWRITE_GLYPH_RUN* glyphRun,[In] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[None] IUnknown* clientDrawingEffect) + + + + IDWriteTextLayout::Draw calls this function to instruct the client to draw an underline. + + + A single underline can be broken into multiple calls, depending on how the formatting changes attributes. If font sizes/styles change within an underline, the thickness and offset will be averaged weighted according to characters. To get an appropriate starting pixel position, add underline::offset to the baseline. Otherwise there will be no spacing between the text. The x coordinate will always be passed as the left side, regardless of text directionality. This simplifies drawing and reduces the problem of round-off that could potentially cause gaps or a double stamped alpha blend. To avoid alpha overlap, round the end points to the nearest device pixel. + + The application-defined drawing context passed to IDWriteTextLayout::Draw. + The pixel location (X-coordinate) at the baseline origin of the run where underline applies. + The pixel location (Y-coordinate) at the baseline origin of the run where underline applies. + Pointer to a structure containing underline logical information. + Application-defined effect to apply to the underline. Usually this argument represents effects such as the foreground brush filling the interior of a line. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT DrawUnderline([None] void* clientDrawingContext,[None] FLOAT baselineOriginX,[None] FLOAT baselineOriginY,[In] const DWRITE_UNDERLINE* underline,[None] IUnknown* clientDrawingEffect) + + + + IDWriteTextLayout::Draw calls this function to instruct the client to draw a strikethrough. + + + A single strikethrough can be broken into multiple calls, depending on how the formatting changes attributes. Strikethrough is not averaged across font sizes/styles changes. To get an appropriate starting pixel position, add strikethrough::offset to the baseline. Like underlines, the x coordinate will always be passed as the left side, regardless of text directionality. + + The application-defined drawing context passed to IDWriteTextLayout::Draw. + The pixel location (X-coordinate) at the baseline origin of the run where strikethrough applies. + The pixel location (Y-coordinate) at the baseline origin of the run where strikethrough applies. + Pointer to a structure containing strikethrough logical information. + Application-defined effect to apply to the strikethrough. Usually this argument represents effects such as the foreground brush filling the interior of a line. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT DrawStrikethrough([None] void* clientDrawingContext,[None] FLOAT baselineOriginX,[None] FLOAT baselineOriginY,[In] const DWRITE_STRIKETHROUGH* strikethrough,[None] IUnknown* clientDrawingEffect) + + + + IDWriteTextLayout::Draw calls this application callback when it needs to draw an inline object. + + The application-defined drawing context passed to IDWriteTextLayout::Draw. + X-coordinate at the top-left corner of the inline object. + Y-coordinate at the top-left corner of the inline object. + The application-defined inline object set using IDWriteTextFormat::SetInlineObject. + A Boolean flag that indicates whether the object's baseline runs alongside the baseline axis of the line. + A Boolean flag that indicates whether the object is in a right-to-left context, hinting that the drawing may want to mirror the normal image. + Application-defined drawing effects for the glyphs to render. Usually this argument represents effects such as the foreground brush filling the interior of a line. + If the method succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code. + HRESULT DrawInlineObject([None] void* clientDrawingContext,[None] FLOAT originX,[None] FLOAT originY,[None] IDWriteInlineObject* inlineObject,[None] BOOL isSideways,[None] BOOL isRightToLeft,[None] IUnknown* clientDrawingEffect) + + + + Internal TextRenderer Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + HRESULT DrawGlyphRun([None] void* clientDrawingContext,[None] FLOAT baselineOriginX,[None] FLOAT baselineOriginY,[None] DWRITE_MEASURING_MODE measuringMode,[In] const DWRITE_GLYPH_RUN* glyphRun,[In] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[None] IUnknown* clientDrawingEffect) + + + HRESULT DrawUnderline([None] void* clientDrawingContext,[None] FLOAT baselineOriginX,[None] FLOAT baselineOriginY,[In] const DWRITE_UNDERLINE* underline,[None] IUnknown* clientDrawingEffect) + + + HRESULT DrawStrikethrough([None] void* clientDrawingContext,[None] FLOAT baselineOriginX,[None] FLOAT baselineOriginY,[In] const DWRITE_STRIKETHROUGH* strikethrough,[None] IUnknown* clientDrawingEffect) + + + HRESULT DrawInlineObject([None] void* clientDrawingContext,[None] FLOAT originX,[None] FLOAT originY,[None] IDWriteInlineObject* inlineObject,[None] BOOL isSideways,[None] BOOL isRightToLeft,[None] IUnknown* clientDrawingEffect) + + + +

    Represents a font typography setting.

    +
    + + dd371541 + IDWriteTypography + IDWriteTypography +
    + + + Creates a typography object for use in a text layout. + + an instance of + HRESULT IDWriteFactory::CreateTypography([Out] IDWriteTypography** typography) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the number of OpenType font features for the current font.

    +
    + +

    A single run of text can be associated with more than one typographic feature. The object holds a list of these font features.

    +
    + + dd371549 + GetFontFeatureCount + GetFontFeatureCount + unsigned int IDWriteTypography::GetFontFeatureCount() +
    + + +

    Adds an OpenType font feature.

    +
    +

    A structure that contains the OpenType name identifier and the execution parameter for the font feature being added.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371545 + HRESULT IDWriteTypography::AddFontFeature([In] DWRITE_FONT_FEATURE fontFeature) + IDWriteTypography::AddFontFeature +
    + + +

    Gets the number of OpenType font features for the current font.

    +
    +

    The number of font features for the current text format.

    + +

    A single run of text can be associated with more than one typographic feature. The object holds a list of these font features.

    +
    + + dd371549 + unsigned int IDWriteTypography::GetFontFeatureCount() + IDWriteTypography::GetFontFeatureCount +
    + + +

    Gets the font feature at the specified index.

    +
    +

    The zero-based index of the font feature to retrieve.

    +

    When this method returns, contains the font feature which is at the specified index.

    + +

    A single run of text can be associated with more than one typographic feature. The object holds a list of these font features.

    +
    + + dd371546 + HRESULT IDWriteTypography::GetFontFeature([In] unsigned int fontFeatureIndex,[Out] DWRITE_FONT_FEATURE* fontFeature) + IDWriteTypography::GetFontFeature +
    + + +

    The enumeration contains values that specify the baseline for text alignment.

    +
    + + jj126257 + DWRITE_BASELINE + DWRITE_BASELINE +
    + + +

    The Roman baseline for horizontal; the Central baseline for vertical.

    +
    + + jj126257 + DWRITE_BASELINE_DEFAULT + DWRITE_BASELINE_DEFAULT +
    + + +

    The baseline that is used by alphabetic scripts such as Latin, Greek, and Cyrillic.

    +
    + + jj126257 + DWRITE_BASELINE_ROMAN + DWRITE_BASELINE_ROMAN +
    + + +

    Central baseline, which is generally used for vertical text.

    +
    + + jj126257 + DWRITE_BASELINE_CENTRAL + DWRITE_BASELINE_CENTRAL +
    + + +

    Mathematical baseline, which math characters are centered on.

    +
    + + jj126257 + DWRITE_BASELINE_MATH + DWRITE_BASELINE_MATH +
    + + +

    Hanging baseline, which is used in scripts like Devanagari.

    +
    + + jj126257 + DWRITE_BASELINE_HANGING + DWRITE_BASELINE_HANGING +
    + + +

    Ideographic bottom baseline for CJK, left in vertical.

    +
    + + jj126257 + DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM + DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM +
    + + +

    Ideographic top baseline for CJK, right in vertical.

    +
    + + jj126257 + DWRITE_BASELINE_IDEOGRAPHIC_TOP + DWRITE_BASELINE_IDEOGRAPHIC_TOP +
    + + +

    The bottom-most extent in horizontal, left-most in vertical.

    +
    + + jj126257 + DWRITE_BASELINE_MINIMUM + DWRITE_BASELINE_MINIMUM +
    + + +

    The top-most extent in horizontal, right-most in vertical.

    +
    + + jj126257 + DWRITE_BASELINE_MAXIMUM + DWRITE_BASELINE_MAXIMUM +
    + + +

    Indicates the condition at the edges of inline object or text used to determine line-breaking behavior.

    +
    + + dd368051 + DWRITE_BREAK_CONDITION + DWRITE_BREAK_CONDITION +
    + + +

    Indicates whether a break is allowed by determining the condition of the neighboring text span or inline object.

    +
    + + dd368051 + DWRITE_BREAK_CONDITION_NEUTRAL + DWRITE_BREAK_CONDITION_NEUTRAL +
    + + +

    Indicates that a line break is allowed, unless overruled by the condition of the neighboring text span or inline object, either prohibited by a "may not break" condition or forced by a "must break" condition.

    +
    + + dd368051 + DWRITE_BREAK_CONDITION_CAN_BREAK + DWRITE_BREAK_CONDITION_CAN_BREAK +
    + + +

    Indicates that there should be no line break, unless overruled by a "must break" condition from the neighboring text span or inline object.

    +
    + + dd368051 + DWRITE_BREAK_CONDITION_MAY_NOT_BREAK + DWRITE_BREAK_CONDITION_MAY_NOT_BREAK +
    + + +

    Indicates that the line break must happen, regardless of the condition of the adjacent text span or inline object.

    +
    + + dd368051 + DWRITE_BREAK_CONDITION_MUST_BREAK + DWRITE_BREAK_CONDITION_MUST_BREAK +
    + + +

    Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. The enumerated values correspond to the usWidthClass definition in the OpenType specification. The usWidthClass represents an integer value between 1 and 9?lower values indicate narrower widths; higher values indicate wider widths.

    +
    + +

    A font stretch describes the degree to which a font form is stretched from its normal aspect ratio, which is the original width to height ratio specified for the glyphs in the font. + The following illustration shows an example of Normal and Condensed stretches for the Rockwell Bold typeface.

    Note??Values other than the ones defined in the enumeration are considered to be invalid, and are rejected by font API functions.? + + + dd368078 + DWRITE_CONTAINER_TYPE + DWRITE_CONTAINER_TYPE + + +

    +

    Predefined font stretch : Not known (0).

    +
    + + dd368078 + DWRITE_CONTAINER_TYPE_UNKNOWN + DWRITE_CONTAINER_TYPE_UNKNOWN +
    + + +

    Predefined font stretch : Ultra-condensed (1).

    +
    + + dd368078 + DWRITE_CONTAINER_TYPE_WOFF + DWRITE_CONTAINER_TYPE_WOFF +
    + + +

    Predefined font stretch : Extra-condensed (2).

    +
    + + dd368078 + DWRITE_CONTAINER_TYPE_WOFF2 + DWRITE_CONTAINER_TYPE_WOFF2 +
    + + +

    Specifies the type of DirectWrite factory object.

    +
    + +

    A DirectWrite factory object contains information about its internal state, such as font loader registration and cached font data. In most cases you should use the shared factory object, because it allows multiple components that use DirectWrite to share internal DirectWrite state information, thereby reducing memory usage. However, there are cases when it is desirable to reduce the impact of a component on the rest of the process, such as a plug-in from an untrusted source, by sandboxing and isolating it from the rest of the process components. In such cases, you should use an isolated factory for the sandboxed component.

    +
    + + dd368057 + DWRITE_FACTORY_TYPE + DWRITE_FACTORY_TYPE +
    + + +

    Indicates that the DirectWrite factory is a shared factory and that it allows for the reuse of cached font data across multiple in-process components. Such factories also take advantage of cross process font caching components for better performance.

    +
    + + dd368057 + DWRITE_FACTORY_TYPE_SHARED + DWRITE_FACTORY_TYPE_SHARED +
    + + +

    Indicates that the DirectWrite factory object is isolated. Objects created from the isolated factory do not interact with internal DirectWrite state from other components.

    +
    + + dd368057 + DWRITE_FACTORY_TYPE_ISOLATED + DWRITE_FACTORY_TYPE_ISOLATED +
    + + +

    Indicates the direction of how lines of text are placed relative to one another.

    +
    + + dd368060 + DWRITE_FLOW_DIRECTION + DWRITE_FLOW_DIRECTION +
    + + +

    Specifies that text lines are placed from top to bottom.

    +
    + + dd368060 + DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM + DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM +
    + + +

    Specifies that text lines are placed from bottom to top.

    +
    + + dd368060 + DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP + DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP +
    + + +

    Specifies that text lines are placed from left to right.

    +
    + + dd368060 + DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT + DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT +
    + + +

    Specifies that text lines are placed from right to left.

    +
    + + dd368060 + DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT + DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT +
    + + +

    Indicates the file format of a complete font face.

    +
    + +

    Font formats that consist of multiple files, such as Type 1 .PFM and .PFB, have a single enum entry.

    +
    + + dd368063 + DWRITE_FONT_FACE_TYPE + DWRITE_FONT_FACE_TYPE +
    + + +

    OpenType font face with CFF outlines.

    +
    + + dd368063 + DWRITE_FONT_FACE_TYPE_CFF + DWRITE_FONT_FACE_TYPE_CFF +
    + + +

    OpenType font face with TrueType outlines.

    +
    + + dd368063 + DWRITE_FONT_FACE_TYPE_TRUETYPE + DWRITE_FONT_FACE_TYPE_TRUETYPE +
    + + +

    OpenType font face with TrueType outlines.

    +
    + + dd368063 + DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION + DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION +
    + + +

    A Type 1 font face.

    +
    + + dd368063 + DWRITE_FONT_FACE_TYPE_TYPE1 + DWRITE_FONT_FACE_TYPE_TYPE1 +
    + + +

    A vector .FON format font face.

    +
    + + dd368063 + DWRITE_FONT_FACE_TYPE_VECTOR + DWRITE_FONT_FACE_TYPE_VECTOR +
    + + +

    A bitmap .FON format font face.

    +
    + + dd368063 + DWRITE_FONT_FACE_TYPE_BITMAP + DWRITE_FONT_FACE_TYPE_BITMAP +
    + + +

    Font face type is not recognized by the DirectWrite font system.

    +
    + + dd368063 + DWRITE_FONT_FACE_TYPE_UNKNOWN + DWRITE_FONT_FACE_TYPE_UNKNOWN +
    + + +

    The font data includes only the CFF table from an OpenType CFF font. This font face type can be used only for embedded fonts (i.e., custom font file loaders) and the resulting font face object supports only the minimum functionality necessary to render glyphs.

    +
    + + dd368063 + DWRITE_FONT_FACE_TYPE_RAW_CFF + DWRITE_FONT_FACE_TYPE_RAW_CFF +
    + + +

    OpenType font face that is a part of a TrueType collection.

    +
    + + dd368063 + DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION + DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION +
    + + +

    A value that indicates the typographic feature of text supplied by the font.

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG + DWRITE_FONT_FEATURE_TAG +
    + + +

    Replaces figures separated by a slash with an alternative form.

    Equivalent OpenType tag: 'afrc'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS + DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS +
    + + +

    Turns capital characters into petite capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in petite-cap form to avoid disrupting the flow of text. See the pcap feature description for notes on the relationship of caps, smallcaps and petite caps.

    Equivalent OpenType tag: 'c2pc'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS + DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS +
    + + +

    Turns capital characters into small capitals. It is generally used for words which would otherwise be set in all caps, such as acronyms, but which are desired in small-cap form to avoid disrupting the flow of text.

    Equivalent OpenType tag: 'c2sc'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS + DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS +
    + + +

    In specified situations, replaces default glyphs with alternate forms which provide better joining behavior. Used in script typefaces which are designed to have some or all of their glyphs join.

    Equivalent OpenType tag: 'calt'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES + DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES +
    + + +

    Shifts various punctuation marks up to a position that works better with all-capital sequences or sets of lining figures; also changes oldstyle figures to lining figures. By default, glyphs in a text face are designed to work with lowercase characters. Some characters should be shifted vertically to fit the higher visual center of all-capital or lining text. Also, lining figures are the same height (or close to it) as capitals, and fit much better with all-capital text.

    Equivalent OpenType tag: 'case'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS + DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS +
    + + +

    To minimize the number of glyph alternates, it is sometimes desired to decompose a character into two glyphs. Additionally, it may be preferable to compose two characters into a single glyph for better glyph processing. This feature permits such composition/decomposition. The feature should be processed as the first feature processed, and should be processed only when it is called.

    Equivalent OpenType tag: 'ccmp'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION + DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION +
    + + +

    Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. Unlike other ligature features, clig specifies the context in which the ligature is recommended. This capability is important in some script designs and for swash ligatures.

    Equivalent OpenType tag: 'clig'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES + DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES +
    + + +

    Globally adjusts inter-glyph spacing for all-capital text. Most typefaces contain capitals and lowercase characters, and the capitals are positioned to work with the lowercase. When capitals are used for words, they need more space between them for legibility and esthetics. This feature would not apply to monospaced designs. Of course the user may want to override this behavior in order to do more pronounced letterspacing for esthetic reasons.

    Equivalent OpenType tag: 'cpsp'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING + DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING +
    + + +

    Replaces default character glyphs with corresponding swash glyphs in a specified context. Note that there may be more than one swash alternate for a given character.

    Equivalent OpenType tag: 'cswh'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH + DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH +
    + + +

    In cursive scripts like Arabic, this feature cursively positions adjacent glyphs.

    Equivalent OpenType tag: 'curs'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING + DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING +
    + + +

    Globally adjusts inter-glyph spacing for all-capital text. Most typefaces contain capitals and lowercase characters, and the capitals are positioned to work with the lowercase. When capitals are used for words, they need more space between them for legibility and esthetics. This feature would not apply to monospaced designs. Of course the user may want to override this behavior in order to do more pronounced letterspacing for esthetic reasons.

    Equivalent OpenType tag: 'cpsp'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_DEFAULT + DWRITE_FONT_FEATURE_TAG_DEFAULT +
    + + +

    Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures which may be used for special effect, at the user's preference.

    Equivalent OpenType tag: 'dlig'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES + DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES +
    + + +

    Replaces standard forms in Japanese fonts with corresponding forms preferred by typographers. For example, a user would invoke this feature to replace kanji character U+5516 with U+555E. +

    Equivalent OpenType tag: 'expt'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS + DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS +
    + + +

    Replaces figures separated by a slash with 'common' (diagonal) fractions.

    Equivalent OpenType tag: 'frac'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_FRACTIONS + DWRITE_FONT_FEATURE_TAG_FRACTIONS +
    + + +

    Replaces glyphs set on other widths with glyphs set on full (usually em) widths. In a CJKV font, this may include "lower ASCII" Latin characters and various symbols. In a European font, this feature replaces proportionally-spaced glyphs with monospaced glyphs, which are generally set on widths of 0.6 em. For example, a user may invoke this feature in a Japanese font to get full monospaced Latin glyphs instead of the corresponding proportionally-spaced versions.

    Equivalent OpenType tag: 'fwid'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_FULL_WIDTH + DWRITE_FONT_FEATURE_TAG_FULL_WIDTH +
    + + +

    Produces the half forms of consonants in Indic scripts. For example, in Hindi (Devanagari script), the conjunct KKa, obtained by doubling the Ka, is denoted with a half form of Ka followed by the full form.

    Equivalent OpenType tag: 'half'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_HALF_FORMS + DWRITE_FONT_FEATURE_TAG_HALF_FORMS +
    + + +

    Produces the halant forms of consonants in Indic scripts. For example, in Sanskrit (Devanagari script), syllable final consonants are frequently required in their halant form.

    Equivalent OpenType tag: 'haln'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_HALANT_FORMS + DWRITE_FONT_FEATURE_TAG_HALANT_FORMS +
    + + +

    Respaces glyphs designed to be set on full-em widths, fitting them onto half-em widths. This differs from hwid in that it does not substitute new glyphs.

    Equivalent OpenType tag: 'halt'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH + DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH +
    + + +

    Replaces the default (current) forms with the historical alternates. While some ligatures are also used for historical effect, this feature deals only with single characters. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect.

    Equivalent OpenType tag: 'hist'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS + DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS +
    + + +

    Replaces standard kana with forms that have been specially designed for only horizontal writing. This is a typographic optimization for improved fit and more even color.

    Equivalent OpenType tag: 'hkna'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES + DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES +
    + + +

    Replaces the default (current) forms with the historical alternates. Some ligatures were in common use in the past, but appear anachronistic today. Some fonts include the historical forms as alternates, so they can be used for a 'period' effect.

    Equivalent OpenType tag: 'hlig'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES + DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES +
    + + +

    Replaces glyphs on proportional widths, or fixed widths other than half an em, with glyphs on half-em (en) widths. Many CJKV fonts have glyphs which are set on multiple widths; this feature selects the half-em version. There are various contexts in which this is the preferred behavior, including compatibility with older desktop documents.

    Equivalent OpenType tag: 'hwid'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_HALF_WIDTH + DWRITE_FONT_FEATURE_TAG_HALF_WIDTH +
    + + +

    Used to access the JIS X 0212-1990 glyphs for the cases when the JIS X 0213:2004 form is encoded. The JIS X 0212-1990 (aka, "Hojo Kanji") and JIS X 0213:2004 character sets overlap significantly. In some cases their prototypical glyphs differ. When building fonts that support both JIS X 0212-1990 and JIS X 0213:2004 (such as those supporting the Adobe-Japan 1-6 character collection), it is recommended that JIS X 0213:2004 forms be the preferred encoded form.

    Equivalent OpenType tag: 'hojo'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS + DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS +
    + + +

    The National Language Council (NLC) of Japan has defined new glyph shapes for a number of JIS characters, which were incorporated into JIS X 0213:2004 as new prototypical forms. The 'jp04' feature is A subset of the 'nlck' feature, and is used to access these prototypical glyphs in a manner that maintains the integrity of JIS X 0213:2004.

    Equivalent OpenType tag: 'jp04'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_JIS04_FORMS + DWRITE_FONT_FEATURE_TAG_JIS04_FORMS +
    + + +

    Replaces default (JIS90) Japanese glyphs with the corresponding forms from the JIS C 6226-1978 (JIS78) specification.

    Equivalent OpenType tag: 'jp78'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_JIS78_FORMS + DWRITE_FONT_FEATURE_TAG_JIS78_FORMS +
    + + +

    Replaces default (JIS90) Japanese glyphs with the corresponding forms from the JIS X 0208-1983 (JIS83) specification.

    Equivalent OpenType tag: 'jp83'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_JIS83_FORMS + DWRITE_FONT_FEATURE_TAG_JIS83_FORMS +
    + + +

    Replaces Japanese glyphs from the JIS78 or JIS83 specifications with the corresponding forms from the JIS X 0208-1990 (JIS90) specification.

    Equivalent OpenType tag: 'jp90'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_JIS90_FORMS + DWRITE_FONT_FEATURE_TAG_JIS90_FORMS +
    + + +

    Adjusts amount of space between glyphs, generally to provide optically consistent spacing between glyphs. Although a well-designed typeface has consistent inter-glyph spacing overall, some glyph combinations require adjustment for improved legibility. Besides standard adjustment in the horizontal direction, this feature can supply size-dependent kerning data via device tables, "cross-stream" kerning in the Y text direction, and adjustment of glyph placement independent of the advance adjustment. Note that this feature may apply to runs of more than two glyphs, and would not be used in monospaced fonts. Also note that this feature does not apply to text set vertically.

    Equivalent OpenType tag: 'kern'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_KERNING + DWRITE_FONT_FEATURE_TAG_KERNING +
    + + +

    Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers the ligatures which the designer/manufacturer judges should be used in normal conditions.

    Equivalent OpenType tag: 'liga'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES + DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES +
    + + +

    Changes selected figures from oldstyle to the default lining form. For example, a user may invoke this feature in order to get lining figures, which fit better with all-capital text. This feature overrides results of the Oldstyle Figures feature (onum).

    Equivalent OpenType tag: 'lnum'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_LINING_FIGURES + DWRITE_FONT_FEATURE_TAG_LINING_FIGURES +
    + + +

    Enables localized forms of glyphs to be substituted for default forms. Many scripts used to write multiple languages over wide geographical areas have developed localized variant forms of specific letters, which are used by individual literary communities. For example, a number of letters in the Bulgarian and Serbian alphabets have forms distinct from their Russian counterparts and from each other. In some cases the localized form differs only subtly from the script 'norm', in others the forms are radically distinct.

    Equivalent OpenType tag: 'locl'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS + DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS +
    + + +

    Positions mark glyphs with respect to base glyphs. For example, in Arabic script positioning the Hamza above the Yeh.

    Equivalent OpenType tag: 'mark'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING + DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING +
    + + +

    Replaces standard typographic forms of Greek glyphs with corresponding forms commonly used in mathematical notation (which are a subset of the Greek alphabet).

    Equivalent OpenType tag: 'mgrk'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK + DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK +
    + + +

    Positions marks with respect to other marks. Required in various non-Latin scripts like Arabic. For example, in Arabic, the ligaturised mark Ha with Hamza above it can also be obtained by positioning these marks relative to one another.

    Equivalent OpenType tag: 'mkmk'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING + DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING +
    + + +

    Replaces default glyphs with various notational forms (such as glyphs placed in open or solid circles, squares, parentheses, diamonds or rounded boxes). In some cases an annotation form may already be present, but the user may want a different one.

    Equivalent OpenType tag: 'nalt'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS + DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS +
    + + +

    Used to access glyphs made from glyph shapes defined by the National Language Council (NLC) of Japan for a number of JIS characters in 2000.

    Equivalent OpenType tag: 'nlck'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS + DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS +
    + + +

    Changes selected figures from the default lining style to oldstyle form. For example, a user may invoke this feature to get oldstyle figures, which fit better into the flow of normal upper- and lowercase text. This feature overrides results of the Lining Figures feature (lnum).

    Equivalent OpenType tag: 'onum'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES + DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES +
    + + +

    Replaces default alphabetic glyphs with the corresponding ordinal forms for use after figures. One exception to the follows-a-figure rule is the numero character (U+2116), which is actually a ligature substitution, but is best accessed through this feature.

    Equivalent OpenType tag: 'ordn'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_ORDINALS + DWRITE_FONT_FEATURE_TAG_ORDINALS +
    + + +

    Respaces glyphs designed to be set on full-em widths, fitting them onto individual (more or less proportional) horizontal widths. This differs from pwid in that it does not substitute new glyphs (GPOS, not GSUB feature). The user may prefer the monospaced form, or may simply want to ensure that the glyph is well-fit and not rotated in vertical setting (Latin forms designed for proportional spacing would be rotated).

    Equivalent OpenType tag: 'palt'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH + DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH +
    + + +

    Turns lowercase characters into petite capitals. Forms related to petite capitals, such as specially designed figures, may be included. Some fonts contain an additional size of capital letters, shorter than the regular smallcaps and it is referred to as petite caps. Such forms are most likely to be found in designs with a small lowercase x-height, where they better harmonise with lowercase text than the taller smallcaps (for examples of petite caps, see the Emigre type families Mrs Eaves and Filosofia).

    Equivalent OpenType tag: 'pcap'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS + DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS +
    + + +

    Replaces figure glyphs set on uniform (tabular) widths with corresponding glyphs set on glyph-specific (proportional) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs.

    Equivalent OpenType tag: 'pnum'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES + DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES +
    + + +

    Replaces glyphs set on uniform widths (typically full or half-em) with proportionally spaced glyphs. The proportional variants are often used for the Latin characters in CJKV fonts, but may also be used for Kana in Japanese fonts.

    Equivalent OpenType tag: 'pwid'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS + DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS +
    + + +

    Replaces glyphs on other widths with glyphs set on widths of one quarter of an em (half an en). The characters involved are normally figures and some forms of punctuation.

    Equivalent OpenType tag: 'qwid'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS + DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS +
    + + +

    Replaces a sequence of glyphs with a single glyph which is preferred for typographic purposes. This feature covers those ligatures, which the script determines as required to be used in normal conditions. This feature is important for some scripts to ensure correct glyph formation.

    Equivalent OpenType tag: 'rlig'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES + DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES +
    + + +

    Identifies glyphs in the font which have been designed for "ruby", from the old typesetting term for four-point-sized type. Japanese typesetting often uses smaller kana glyphs, generally in superscripted form, to clarify the meaning of kanji which may be unfamiliar to the reader.

    Equivalent OpenType tag: 'ruby'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS + DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS +
    + + +

    Replaces the default forms with the stylistic alternates. Many fonts contain alternate glyph designs for a purely esthetic effect; these don't always fit into a clear category like swash or historical. As in the case of swash glyphs, there may be more than one alternate form.

    Equivalent OpenType tag: 'salt'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES + DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES +
    + + +

    Replaces lining or oldstyle figures with inferior figures (smaller glyphs which sit lower than the standard baseline, primarily for chemical or mathematical notation). May also replace lowercase characters with alphabetic inferiors.

    Equivalent OpenType tag: 'sinf'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS + DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS +
    + + +

    Turns lowercase characters into small capitals. This corresponds to the common SC font layout. It is generally used for display lines set in Large & small caps, such as titles. Forms related to small capitals, such as oldstyle figures, may be included.

    Equivalent OpenType tag: 'smcp'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS + DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS +
    + + +

    Replaces 'traditional' Chinese or Japanese forms with the corresponding 'simplified' forms.

    Equivalent OpenType tag: 'smpl'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS + DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS +
    + + +

    In addition to, or instead of, stylistic alternatives of individual glyphs (see 'salt' feature), some fonts may contain sets of stylistic variant glyphs corresponding to portions of the character set, such as multiple variants for lowercase letters in a Latin font. Glyphs in stylistic sets may be designed to harmonise visually, interract in particular ways, or otherwise work together. Examples of fonts including stylistic sets are Zapfino Linotype and Adobe's Poetica. Individual features numbered sequentially with the tag name convention 'ss01' 'ss02' 'ss03' . 'ss20' provide a mechanism for glyphs in these sets to be associated via GSUB lookup indexes to default forms and to each other, and for users to select from available stylistic sets

    Equivalent OpenType tag: 'ss01'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss02'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss03'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss04'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss05'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss06'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss07'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss08'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss09'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss10'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss11'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss12'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss13'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss14'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss15'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss16'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss17'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss18'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss19'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19 +
    + + +

    See the description for .

    Equivalent OpenType tag: 'ss20'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20 + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20 +
    + + +

    May replace a default glyph with a subscript glyph, or it may combine a glyph substitution with positioning adjustments for proper placement.

    Equivalent OpenType tag: 'subs'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_SUBSCRIPT + DWRITE_FONT_FEATURE_TAG_SUBSCRIPT +
    + + +

    Replaces lining or oldstyle figures with superior figures (primarily for footnote indication), and replaces lowercase letters with superior letters (primarily for abbreviated French titles).

    Equivalent OpenType tag: 'sups'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT + DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT +
    + + +

    Replaces default character glyphs with corresponding swash glyphs. Note that there may be more than one swash alternate for a given character.

    Equivalent OpenType tag: 'swsh'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_SWASH + DWRITE_FONT_FEATURE_TAG_SWASH +
    + + +

    Replaces the default glyphs with corresponding forms designed specifically for titling. These may be all-capital and/or larger on the body, and adjusted for viewing at larger sizes.

    Equivalent OpenType tag: 'titl'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_TITLING + DWRITE_FONT_FEATURE_TAG_TITLING +
    + + +

    Replaces 'simplified' Japanese kanji forms with the corresponding 'traditional' forms. This is equivalent to the Traditional Forms feature, but explicitly limited to the traditional forms considered proper for use in personal names (as many as 205 glyphs in some fonts).

    Equivalent OpenType tag: 'tnam'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS + DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS +
    + + +

    Replaces figure glyphs set on proportional widths with corresponding glyphs set on uniform (tabular) widths. Tabular widths will generally be the default, but this cannot be safely assumed. Of course this feature would not be present in monospaced designs.

    Equivalent OpenType tag: 'tnum'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES + DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES +
    + + +

    Replaces 'simplified' Chinese hanzi or Japanese kanji forms with the corresponding 'traditional' forms.

    Equivalent OpenType tag: 'trad'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS + DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS +
    + + +

    Replaces glyphs on other widths with glyphs set on widths of one third of an em. The characters involved are normally figures and some forms of punctuation.

    Equivalent OpenType tag: 'twid'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS + DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS +
    + + +

    Maps upper- and lowercase letters to a mixed set of lowercase and small capital forms, resulting in a single case alphabet (for an example of unicase, see the Emigre type family Filosofia). The letters substituted may vary from font to font, as appropriate to the design. If aligning to the x-height, smallcap glyphs may be substituted, or specially designed unicase forms might be used. Substitutions might also include specially designed figures. +

    Equivalent OpenType tag: 'unic'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_UNICASE + DWRITE_FONT_FEATURE_TAG_UNICASE +
    + + +

    Indicates that the font is displayed vertically.

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_VERTICAL_WRITING + DWRITE_FONT_FEATURE_TAG_VERTICAL_WRITING +
    + + +

    Replaces normal figures with figures adjusted for vertical display.

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_VERTICAL_ALTERNATES_AND_ROTATION + DWRITE_FONT_FEATURE_TAG_VERTICAL_ALTERNATES_AND_ROTATION +
    + + +

    Allows the user to change from the default 0 to a slashed form. Some fonts contain both a default form of zero, and an alternative form which uses a diagonal slash through the counter. Especially in condensed designs, it can be difficult to distinguish between 0 and O (zero and capital O) in any situation where capitals and lining figures may be arbitrarily mixed.

    Equivalent OpenType tag: 'zero'

    +
    + + dd368069 + DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO + DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO +
    + + +

    The type of a font represented by a single font file. Font formats that consist of multiple files, for example Type 1 .PFM and .PFB, have separate enum values for each of the file types.

    +
    + + dd368072 + DWRITE_FONT_FILE_TYPE + DWRITE_FONT_FILE_TYPE +
    + + +

    Font type is not recognized by the DirectWrite font system.

    +
    + + dd368072 + DWRITE_FONT_FILE_TYPE_UNKNOWN + DWRITE_FONT_FILE_TYPE_UNKNOWN +
    + + +

    OpenType font with CFF outlines.

    +
    + + dd368072 + DWRITE_FONT_FILE_TYPE_CFF + DWRITE_FONT_FILE_TYPE_CFF +
    + + +

    OpenType font with TrueType outlines.

    +
    + + dd368072 + DWRITE_FONT_FILE_TYPE_TRUETYPE + DWRITE_FONT_FILE_TYPE_TRUETYPE +
    + + +

    OpenType font that contains a TrueType collection.

    +
    + + dd368072 + DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION + DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION +
    + + +

    Type 1 PFM font.

    +
    + + dd368072 + DWRITE_FONT_FILE_TYPE_TYPE1_PFM + DWRITE_FONT_FILE_TYPE_TYPE1_PFM +
    + + +

    Type 1 PFB font.

    +
    + + dd368072 + DWRITE_FONT_FILE_TYPE_TYPE1_PFB + DWRITE_FONT_FILE_TYPE_TYPE1_PFB +
    + + +

    Vector .FON font.

    +
    + + dd368072 + DWRITE_FONT_FILE_TYPE_VECTOR + DWRITE_FONT_FILE_TYPE_VECTOR +
    + + +

    Bitmap .FON font.

    +
    + + dd368072 + DWRITE_FONT_FILE_TYPE_BITMAP + DWRITE_FONT_FILE_TYPE_BITMAP +
    + + +

    OpenType font that contains a TrueType collection.

    +
    + + dd368072 + DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION + DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION +
    + + +

    Specify whether ::lineGap value should be part of the line metrics

    +
    + + dn933211 + DWRITE_FONT_LINE_GAP_USAGE + DWRITE_FONT_LINE_GAP_USAGE +
    + + + No documentation. + + + dn933211 + DWRITE_FONT_LINE_GAP_USAGE_DEFAULT + DWRITE_FONT_LINE_GAP_USAGE_DEFAULT + + + + No documentation. + + + dn933211 + DWRITE_FONT_LINE_GAP_USAGE_DISABLED + DWRITE_FONT_LINE_GAP_USAGE_DISABLED + + + + No documentation. + + + dn933211 + DWRITE_FONT_LINE_GAP_USAGE_ENABLED + DWRITE_FONT_LINE_GAP_USAGE_ENABLED + + + +

    Identifies a string in a font.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID + DWRITE_FONT_PROPERTY_ID +
    + + +

    Unspecified font property identifier.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_NONE + DWRITE_FONT_PROPERTY_ID_NONE +
    + + +

    Family name for the weight-width-slope model.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_FAMILY_NAME + DWRITE_FONT_PROPERTY_ID_FAMILY_NAME +
    + + +

    Family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with GDI. This name is typically only present if it differs from the GDI-compatible family name.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME + DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME +
    + + +

    Face name of the font, for example Regular or Bold.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_FACE_NAME + DWRITE_FONT_PROPERTY_ID_FACE_NAME +
    + + +

    The full name of the font, for example "Arial Bold", from name id 4 in the name table.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_FULL_NAME + DWRITE_FONT_PROPERTY_ID_FULL_NAME +
    + + +

    GDI-compatible family name. Because GDI allows a maximum of four fonts per family, fonts in the same family may have different GDI-compatible family names, for example "Arial", "Arial Narrow", "Arial Black".

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME + DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME +
    + + +

    The postscript name of the font, for example "GillSans-Bold", from name id 6 in the name table.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME + DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME +
    + + +

    Script/language tag to identify the scripts or languages that the font was primarily designed to support.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG + DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG +
    + + +

    Script/language tag to identify the scripts or languages that the font declares it is able to support.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG + DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG +
    + + +

    Semantic tag to describe the font, for example Fancy, Decorative, Handmade, Sans-serif, Swiss, Pixel, Futuristic.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG + DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG +
    + + +

    Weight of the font represented as a decimal string in the range 1-999.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_WEIGHT + DWRITE_FONT_PROPERTY_ID_WEIGHT +
    + + +

    Stretch of the font represented as a decimal string in the range 1-9.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_STRETCH + DWRITE_FONT_PROPERTY_ID_STRETCH +
    + + +

    Style of the font represented as a decimal string in the range 0-2.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_STYLE + DWRITE_FONT_PROPERTY_ID_STYLE +
    + + +

    Total number of properties.

    +
    + + dn933213 + DWRITE_FONT_PROPERTY_ID_TOTAL + DWRITE_FONT_PROPERTY_ID_TOTAL +
    + + +

    Specifies algorithmic style simulations to be applied to the font face. Bold and oblique simulations can be combined via bitwise OR operation.

    +
    + +

    Style simulations are not recommended for good typographic quality.

    +
    + + dd368076 + DWRITE_FONT_SIMULATIONS + DWRITE_FONT_SIMULATIONS +
    + + +

    Indicates that no simulations are applied to the font face.

    +
    + + dd368076 + DWRITE_FONT_SIMULATIONS_NONE + DWRITE_FONT_SIMULATIONS_NONE +
    + + +

    Indicates that algorithmic emboldening is applied to the font face. increases weight by applying a widening algorithm to the glyph outline. This may be used to simulate a bold weight where no designed bold weight is available.

    +
    + + dd368076 + DWRITE_FONT_SIMULATIONS_BOLD + DWRITE_FONT_SIMULATIONS_BOLD +
    + + +

    Indicates that algorithmic italicization is applied to the font face. applies obliquing (shear) to the glyph outline. This may be used to simulate an oblique/italic style where no designed oblique/italic style is available.

    +
    + + dd368076 + DWRITE_FONT_SIMULATIONS_OBLIQUE + DWRITE_FONT_SIMULATIONS_OBLIQUE +
    + + +

    Represents the degree to which a font has been stretched compared to a font's normal aspect ratio. The enumerated values correspond to the usWidthClass definition in the OpenType specification. The usWidthClass represents an integer value between 1 and 9?lower values indicate narrower widths; higher values indicate wider widths.

    +
    + +

    A font stretch describes the degree to which a font form is stretched from its normal aspect ratio, which is the original width to height ratio specified for the glyphs in the font. + The following illustration shows an example of Normal and Condensed stretches for the Rockwell Bold typeface.

    Note??Values other than the ones defined in the enumeration are considered to be invalid, and are rejected by font API functions.? + + + dd368078 + DWRITE_FONT_STRETCH + DWRITE_FONT_STRETCH + + +

    +

    Predefined font stretch : Not known (0).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_UNDEFINED + DWRITE_FONT_STRETCH_UNDEFINED +
    + + +

    Predefined font stretch : Ultra-condensed (1).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_ULTRA_CONDENSED + DWRITE_FONT_STRETCH_ULTRA_CONDENSED +
    + + +

    Predefined font stretch : Extra-condensed (2).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_EXTRA_CONDENSED + DWRITE_FONT_STRETCH_EXTRA_CONDENSED +
    + + +

    Predefined font stretch : Condensed (3).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_CONDENSED + DWRITE_FONT_STRETCH_CONDENSED +
    + + +

    Predefined font stretch : Semi-condensed (4).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_SEMI_CONDENSED + DWRITE_FONT_STRETCH_SEMI_CONDENSED +
    + + +

    Predefined font stretch : Normal (5).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_NORMAL + DWRITE_FONT_STRETCH_NORMAL +
    + + +

    Predefined font stretch : Medium (5).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_MEDIUM + DWRITE_FONT_STRETCH_MEDIUM +
    + + +

    Predefined font stretch : Semi-expanded (6).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_SEMI_EXPANDED + DWRITE_FONT_STRETCH_SEMI_EXPANDED +
    + + +

    Predefined font stretch : Expanded (7).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_EXPANDED + DWRITE_FONT_STRETCH_EXPANDED +
    + + +

    Predefined font stretch : Extra-expanded (8).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_EXTRA_EXPANDED + DWRITE_FONT_STRETCH_EXTRA_EXPANDED +
    + + +

    Predefined font stretch : Ultra-expanded (9).

    +
    + + dd368078 + DWRITE_FONT_STRETCH_ULTRA_EXPANDED + DWRITE_FONT_STRETCH_ULTRA_EXPANDED +
    + + +

    Represents the style of a font face as normal, italic, or oblique.

    +
    + +

    Three terms categorize the slant of a font: normal, italic, and oblique.

    Font styleDescription
    NormalThe characters in a normal, or roman, font are upright. +
    Italic + The characters in an italic font are truly slanted and appear as they were designed. +
    ObliqueThe characters in an oblique font are artificially slanted.

    ?

    For Oblique, the slant is achieved by performing a shear transformation on the characters from a normal font. When a true italic font is not available on a computer or printer, an oblique style can be generated from the normal font and used to simulate an italic font. The following illustration shows the normal, italic, and oblique font styles for the Palatino Linotype font. Notice how the italic font style has a more flowing and visually appealing appearance than the oblique font style, which is simply created by skewing the normal font style version of the text.

    Note?? Values other than the ones defined in the enumeration are considered to be invalid, and they are rejected by font API functions.? + + + dd368080 + DWRITE_FONT_STYLE + DWRITE_FONT_STYLE + + +

    +

    Font style : Normal.

    +
    + + dd368080 + DWRITE_FONT_STYLE_NORMAL + DWRITE_FONT_STYLE_NORMAL +
    + + +

    Font style : Oblique.

    +
    + + dd368080 + DWRITE_FONT_STYLE_OBLIQUE + DWRITE_FONT_STYLE_OBLIQUE +
    + + +

    Font style : Italic.

    +
    + + dd368080 + DWRITE_FONT_STYLE_ITALIC + DWRITE_FONT_STYLE_ITALIC +
    + + +

    Represents the density of a typeface, in terms of the lightness or heaviness of the strokes. The enumerated values correspond to the usWeightClass definition in the OpenType specification. The usWeightClass represents an integer value between 1 and 999. Lower values indicate lighter weights; higher values indicate heavier weights.

    +
    + +

    Weight differences are generally differentiated by an increased stroke or thickness that is associated with a given character in a typeface, as compared to a "normal" character from that same typeface. + The following illustration shows an example of Normal and UltraBold weights for the Palatino Linotype typeface.

    Note??Not all weights are available for all typefaces. When a weight is not available for a typeface, the closest matching weight is returned.?

    Font weight values less than 1 or greater than 999 are considered invalid, and they are rejected by font API functions.

    +
    + + dd368082 + DWRITE_FONT_WEIGHT + DWRITE_FONT_WEIGHT +
    + + +

    Predefined font weight : Thin (100).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_THIN + DWRITE_FONT_WEIGHT_THIN +
    + + +

    Predefined font weight : Extra-light (200).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_EXTRA_LIGHT + DWRITE_FONT_WEIGHT_EXTRA_LIGHT +
    + + +

    Predefined font weight : Ultra-light (200).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_ULTRA_LIGHT + DWRITE_FONT_WEIGHT_ULTRA_LIGHT +
    + + +

    Predefined font weight : Light (300).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_LIGHT + DWRITE_FONT_WEIGHT_LIGHT +
    + + +

    Predefined font weight : Semi-Light (350).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_SEMI_LIGHT + DWRITE_FONT_WEIGHT_SEMI_LIGHT +
    + + +

    Predefined font weight : Normal (400).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_NORMAL + DWRITE_FONT_WEIGHT_NORMAL +
    + + +

    Predefined font weight : Regular (400).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_REGULAR + DWRITE_FONT_WEIGHT_REGULAR +
    + + +

    Predefined font weight : Medium (500).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_MEDIUM + DWRITE_FONT_WEIGHT_MEDIUM +
    + + +

    Predefined font weight : Demi-bold (600).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_DEMI_BOLD + DWRITE_FONT_WEIGHT_DEMI_BOLD +
    + + +

    Predefined font weight : Semi-bold (600).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_SEMI_BOLD + DWRITE_FONT_WEIGHT_SEMI_BOLD +
    + + +

    Predefined font weight : Bold (700).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_BOLD + DWRITE_FONT_WEIGHT_BOLD +
    + + +

    Predefined font weight : Extra-bold (800).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_EXTRA_BOLD + DWRITE_FONT_WEIGHT_EXTRA_BOLD +
    + + +

    Predefined font weight : Ultra-bold (800).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_ULTRA_BOLD + DWRITE_FONT_WEIGHT_ULTRA_BOLD +
    + + +

    Predefined font weight : Black (900).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_BLACK + DWRITE_FONT_WEIGHT_BLACK +
    + + +

    Predefined font weight : Heavy (900).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_HEAVY + DWRITE_FONT_WEIGHT_HEAVY +
    + + +

    Predefined font weight : Extra-black (950).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_EXTRA_BLACK + DWRITE_FONT_WEIGHT_EXTRA_BLACK +
    + + +

    Predefined font weight : Ultra-black (950).

    +
    + + dd368082 + DWRITE_FONT_WEIGHT_ULTRA_BLACK + DWRITE_FONT_WEIGHT_ULTRA_BLACK +
    + + +

    The enumeration contains values that specify how the glyph is oriented to the x-axis.

    +
    + +

    The text analyzer outputs values. The value that it outputs depends on the desired orientation, bidi level, and character properties.

    +
    + + jj126260 + DWRITE_GLYPH_ORIENTATION_ANGLE + DWRITE_GLYPH_ORIENTATION_ANGLE +
    + + +

    Glyph orientation is upright.

    +
    + + jj126260 + DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES + DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES +
    + + +

    Glyph orientation is rotated 90 degrees clockwise.

    +
    + + jj126260 + DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES + DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES +
    + + +

    Glyph orientation is upside-down.

    +
    + + jj126260 + DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES + DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES +
    + + +

    Glyph orientation is rotated 270 degrees clockwise.

    +
    + + jj126260 + DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES + DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES +
    + + +

    Specifies whether to enable grid-fitting of glyph outlines (also known as hinting).

    +
    + + dn890718 + DWRITE_GRID_FIT_MODE + DWRITE_GRID_FIT_MODE +
    + + +

    Choose grid fitting based on the font's table information.

    +
    + + dn890718 + DWRITE_GRID_FIT_MODE_DEFAULT + DWRITE_GRID_FIT_MODE_DEFAULT +
    + + +

    Always disable grid fitting, using the ideal glyph outlines.

    +
    + + dn890718 + DWRITE_GRID_FIT_MODE_DISABLED + DWRITE_GRID_FIT_MODE_DISABLED +
    + + +

    Enable grid fitting, adjusting glyph outlines for device pixel display.

    +
    + + dn890718 + DWRITE_GRID_FIT_MODE_ENABLED + DWRITE_GRID_FIT_MODE_ENABLED +
    + + +

    The informational string enumeration which identifies a string embedded in a font file.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_ID + DWRITE_INFORMATIONAL_STRING_ID +
    + + +

    Indicates the string containing the unspecified name ID.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_NONE + DWRITE_INFORMATIONAL_STRING_NONE +
    + + +

    Indicates the string containing the copyright notice provided by the font.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE + DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE +
    + + +

    Indicates the string containing a version number.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS + DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS +
    + + +

    Indicates the string containing the trademark information provided by the font.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_TRADEMARK + DWRITE_INFORMATIONAL_STRING_TRADEMARK +
    + + +

    Indicates the string containing the name of the font manufacturer.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_MANUFACTURER + DWRITE_INFORMATIONAL_STRING_MANUFACTURER +
    + + +

    Indicates the string containing the name of the font designer.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_DESIGNER + DWRITE_INFORMATIONAL_STRING_DESIGNER +
    + + +

    Indicates the string containing the URL of the font designer (with protocol, e.g., http://, ftp://).

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_DESIGNER_URL + DWRITE_INFORMATIONAL_STRING_DESIGNER_URL +
    + + +

    Indicates the string containing the description of the font. This may also contain revision information, usage recommendations, history, features, and so on.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_DESCRIPTION + DWRITE_INFORMATIONAL_STRING_DESCRIPTION +
    + + +

    Indicates the string containing the URL of the font vendor (with protocol, e.g., http://, ftp://). If a unique serial number is embedded in the URL, it can be used to register the font.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL + DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL +
    + + +

    Indicates the string containing the description of how the font may be legally used, or different example scenarios for licensed use.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION + DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION +
    + + +

    Indicates the string containing the URL where additional licensing information can be found.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL + DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL +
    + + +

    Indicates the string containing the GDI-compatible family name. Since GDI allows a maximum of four fonts per family, fonts in the same family may have different GDI-compatible family names (e.g., "Arial", "Arial Narrow", "Arial Black").

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES + DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES +
    + + +

    Indicates the string containing a GDI-compatible subfamily name.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES + DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES +
    + + +

    Indicates the string containing the family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with GDI. This name is typically only present if it differs from the GDI-compatible family name.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES + DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES +
    + + +

    Indicates the string containing the subfamily name preferred by the designer. This name is typically only present if it differs from the GDI-compatible subfamily name.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES + DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES +
    + + +

    Contains sample text for display in font lists. This can be the font name or any other text that the designer thinks is the best example to display the font in.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT + DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT +
    + + +

    The full name of the font, like Arial Bold, from name id 4 in the name table

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_FULL_NAME + DWRITE_INFORMATIONAL_STRING_FULL_NAME +
    + + +

    The postscript name of the font, like GillSans-Bold, from name id 6 in the name table.

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME + DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME +
    + + +

    The postscript CID findfont name, from name id 20 in the name table

    +
    + + dd368094 + DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME + DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME +
    + + + No documentation. + + + dd368094 + DWRITE_INFORMATIONAL_STRING_WWS_FAMILY_NAME + DWRITE_INFORMATIONAL_STRING_WWS_FAMILY_NAME + + + + No documentation. + + + dd368094 + DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG + DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG + + + + No documentation. + + + dd368094 + DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG + DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG + + + +

    The method used for line spacing in a text layout.

    +
    + +

    The line spacing method is set by using the SetLineSpacing method of the or interfaces. To get the current line spacing method of a text format or text layou use the GetLineSpacing.

    +
    + + dd368101 + DWRITE_LINE_SPACING_METHOD + DWRITE_LINE_SPACING_METHOD +
    + + +

    Line spacing depends solely on the content, adjusting to accommodate the size of fonts and inline objects.

    +
    + + dd368101 + DWRITE_LINE_SPACING_METHOD_DEFAULT + DWRITE_LINE_SPACING_METHOD_DEFAULT +
    + + +

    Lines are explicitly set to uniform spacing, regardless of the size of fonts and inline objects. This can be useful to avoid the uneven appearance that can occur from font fallback.

    +
    + + dd368101 + DWRITE_LINE_SPACING_METHOD_UNIFORM + DWRITE_LINE_SPACING_METHOD_UNIFORM +
    + + +

    Line spacing and baseline distances are proportional to the computed values based on the content, the size of the fonts and inline objects.

    Note??This value is only available on Windows?10 or later and it can be used with , but can not be used with . ?
    +
    + + dd368101 + DWRITE_LINE_SPACING_METHOD_PROPORTIONAL + DWRITE_LINE_SPACING_METHOD_PROPORTIONAL +
    + + +

    Specifies the location of a resource.

    +
    + + dn890740 + DWRITE_LOCALITY + DWRITE_LOCALITY +
    + + +

    The resource is remote, and information about it is unknown, including the file size and date. If you attempt to create a font or file stream, the creation will fail until locality becomes at least partial.

    +
    + + dn890740 + DWRITE_LOCALITY_REMOTE + DWRITE_LOCALITY_REMOTE +
    + + +

    The resource is partially local, which means you can query the size and date of the file stream. With this type, you also might be able to create a font face and retrieve the particular glyphs for metrics and drawing, but not all the glyphs will be present.

    +
    + + dn890740 + DWRITE_LOCALITY_PARTIAL + DWRITE_LOCALITY_PARTIAL +
    + + +

    The resource is completely local, and all font functions can be called without concern of missing data or errors related to network connectivity.

    +
    + + dn890740 + DWRITE_LOCALITY_LOCAL + DWRITE_LOCALITY_LOCAL +
    + + +

    Specifies how to apply number substitution on digits and related punctuation.

    +
    + + dd368107 + DWRITE_NUMBER_SUBSTITUTION_METHOD + DWRITE_NUMBER_SUBSTITUTION_METHOD +
    + + +

    Specifies that the substitution method should be determined based on the LOCALE_IDIGITSUBSTITUTION value of the specified text culture.

    +
    + + dd368107 + DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE + DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE +
    + + +

    If the culture is Arabic or Persian, specifies that the number shapes depend on the context. Either traditional or nominal number shapes are used, depending on the nearest preceding strong character or (if there is none) the reading direction of the paragraph.

    +
    + + dd368107 + DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL + DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL +
    + + +

    Specifies that code points 0x30-0x39 are always rendered as nominal numeral shapes (ones of the European number), that is, no substitution is performed.

    +
    + + dd368107 + DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE + DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE +
    + + +

    Specifies that numbers are rendered using the national number shapes as specified by the LOCALE_SNATIVEDIGITS value of the specified text culture.

    +
    + + dd368107 + DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL + DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL +
    + + +

    Specifies that numbers are rendered using the traditional shapes for the specified culture. For most cultures, this is the same as NativeNational. However, NativeNational results in Latin numbers for some Arabic cultures, whereasDWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL results in arabic numbers for all Arabic cultures.

    +
    + + dd368107 + DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL + DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL +
    + + +

    The optical margin alignment mode.

    By default, glyphs are aligned to the margin by the default origin and side-bearings of the glyph. If you specify , then the alignment uses the side bearings to offset the glyph from the aligned edge to ensure the ink of the glyphs are aligned.

    +
    + + dn280421 + DWRITE_OPTICAL_ALIGNMENT + DWRITE_OPTICAL_ALIGNMENT +
    + + +

    Align to the default origin and side-bearings of the glyph.

    +
    + + dn280421 + DWRITE_OPTICAL_ALIGNMENT_NONE + DWRITE_OPTICAL_ALIGNMENT_NONE +
    + + +

    Align to the ink of the glyphs, such that the black box abuts the margins.

    +
    + + dn280421 + DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS + DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS +
    + + +

    The enumeration contains values that specify the policy used by the method to determine whether to render glyphs in outline mode.

    +
    + +

    Glyphs are rendered in outline mode by default at large sizes for performance reasons, but how large (that is, the outline threshold) depends on the quality of outline rendering. If the graphics system renders anti-aliased outlines, a relatively low threshold is used. But if the graphics system renders aliased outlines, a much higher threshold is used.

    +
    + + jj126262 + DWRITE_OUTLINE_THRESHOLD + DWRITE_OUTLINE_THRESHOLD +
    + + + No documentation. + + + jj126262 + DWRITE_OUTLINE_THRESHOLD_ANTIALIASED + DWRITE_OUTLINE_THRESHOLD_ANTIALIASED + + + + No documentation. + + + jj126262 + DWRITE_OUTLINE_THRESHOLD_ALIASED + DWRITE_OUTLINE_THRESHOLD_ALIASED + + + +

    The enumeration contains values that specify the style of termination of stems and rounded letterforms for text.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE + DWRITE_PANOSE_ARM_STYLE +
    + + +

    Any arm style.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_ANY + DWRITE_PANOSE_ARM_STYLE_ANY +
    + + +

    No fit arm style.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_NO_FIT + DWRITE_PANOSE_ARM_STYLE_NO_FIT +
    + + +

    The arm style is straight horizontal.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL +
    + + +

    The arm style is straight wedge.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE +
    + + +

    The arm style is straight vertical.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL +
    + + +

    The arm style is straight single serif.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF +
    + + +

    The arm style is straight double serif.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF +
    + + +

    The arm style is non-straight horizontal.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL + DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL +
    + + +

    The arm style is non-straight wedge.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE + DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE +
    + + +

    The arm style is non-straight vertical.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL + DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL +
    + + +

    The arm style is non-straight single serif.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF + DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF +
    + + +

    The arm style is non-straight double serif.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF + DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF +
    + + +

    The arm style is straight horizontal.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ +
    + + +

    The arm style is straight vertical.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT + DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT +
    + + +

    The arm style is non-straight horizontal.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ + DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ +
    + + +

    The arm style is non-straight wedge.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE + DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE +
    + + +

    The arm style is non-straight vertical.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT + DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT +
    + + +

    The arm style is non-straight single serif.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF + DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF +
    + + +

    The arm style is non-straight double serif.

    +
    + + hh997721 + DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF + DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF +
    + + +

    The enumeration contains values that specify the ratio between the width and height of the character face.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT + DWRITE_PANOSE_ASPECT +
    + + +

    Any aspect.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT_ANY + DWRITE_PANOSE_ASPECT_ANY +
    + + +

    No fit for aspect.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT_NO_FIT + DWRITE_PANOSE_ASPECT_NO_FIT +
    + + +

    Super condensed aspect.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT_SUPER_CONDENSED + DWRITE_PANOSE_ASPECT_SUPER_CONDENSED +
    + + +

    Very condensed aspect.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT_VERY_CONDENSED + DWRITE_PANOSE_ASPECT_VERY_CONDENSED +
    + + +

    Condensed aspect.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT_CONDENSED + DWRITE_PANOSE_ASPECT_CONDENSED +
    + + +

    Normal aspect.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT_NORMAL + DWRITE_PANOSE_ASPECT_NORMAL +
    + + +

    Extended aspect.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT_EXTENDED + DWRITE_PANOSE_ASPECT_EXTENDED +
    + + +

    Very extended aspect.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT_VERY_EXTENDED + DWRITE_PANOSE_ASPECT_VERY_EXTENDED +
    + + +

    Super extended aspect.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT_SUPER_EXTENDED + DWRITE_PANOSE_ASPECT_SUPER_EXTENDED +
    + + +

    Monospace aspect.

    +
    + + hh997722 + DWRITE_PANOSE_ASPECT_MONOSPACED + DWRITE_PANOSE_ASPECT_MONOSPACED +
    + + +

    The enumeration contains values that specify info about the ratio between width and height of the character face.

    +
    + + hh997723 + DWRITE_PANOSE_ASPECT_RATIO + DWRITE_PANOSE_ASPECT_RATIO +
    + + +

    Any aspect ratio.

    +
    + + hh997723 + DWRITE_PANOSE_ASPECT_RATIO_ANY + DWRITE_PANOSE_ASPECT_RATIO_ANY +
    + + +

    No fit for aspect ratio.

    +
    + + hh997723 + DWRITE_PANOSE_ASPECT_RATIO_NO_FIT + DWRITE_PANOSE_ASPECT_RATIO_NO_FIT +
    + + +

    Very condensed aspect ratio.

    +
    + + hh997723 + DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED + DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED +
    + + +

    Condensed aspect ratio.

    +
    + + hh997723 + DWRITE_PANOSE_ASPECT_RATIO_CONDENSED + DWRITE_PANOSE_ASPECT_RATIO_CONDENSED +
    + + +

    Normal aspect ratio.

    +
    + + hh997723 + DWRITE_PANOSE_ASPECT_RATIO_NORMAL + DWRITE_PANOSE_ASPECT_RATIO_NORMAL +
    + + +

    Expanded aspect ratio.

    +
    + + hh997723 + DWRITE_PANOSE_ASPECT_RATIO_EXPANDED + DWRITE_PANOSE_ASPECT_RATIO_EXPANDED +
    + + +

    Very expanded aspect ratio.

    +
    + + hh997723 + DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED + DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED +
    + + +

    The enumeration contains values that specify the type of characters available in the font.

    +
    + + hh997724 + DWRITE_PANOSE_CHARACTER_RANGES + DWRITE_PANOSE_CHARACTER_RANGES +
    + + +

    Any range.

    +
    + + hh997724 + DWRITE_PANOSE_CHARACTER_RANGES_ANY + DWRITE_PANOSE_CHARACTER_RANGES_ANY +
    + + +

    No fit for range.

    +
    + + hh997724 + DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT + DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT +
    + + +

    The range includes extended collection.

    +
    + + hh997724 + DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION + DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION +
    + + +

    The range includes literals.

    +
    + + hh997724 + DWRITE_PANOSE_CHARACTER_RANGES_LITERALS + DWRITE_PANOSE_CHARACTER_RANGES_LITERALS +
    + + +

    The range doesn't include lower case.

    +
    + + hh997724 + DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE + DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE +
    + + +

    The range includes small capitals.

    +
    + + hh997724 + DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS + DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS +
    + + +

    The enumeration contains values that specify the ratio between thickest and thinnest point of the stroke for a letter such as uppercase 'O'.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST + DWRITE_PANOSE_CONTRAST +
    + + +

    Any contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_ANY + DWRITE_PANOSE_CONTRAST_ANY +
    + + +

    No fit contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_NO_FIT + DWRITE_PANOSE_CONTRAST_NO_FIT +
    + + +

    No contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_NONE + DWRITE_PANOSE_CONTRAST_NONE +
    + + +

    Very low contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_VERY_LOW + DWRITE_PANOSE_CONTRAST_VERY_LOW +
    + + +

    Low contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_LOW + DWRITE_PANOSE_CONTRAST_LOW +
    + + +

    Medium low contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_MEDIUM_LOW + DWRITE_PANOSE_CONTRAST_MEDIUM_LOW +
    + + +

    Medium contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_MEDIUM + DWRITE_PANOSE_CONTRAST_MEDIUM +
    + + +

    Medium high contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH + DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH +
    + + +

    High contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_HIGH + DWRITE_PANOSE_CONTRAST_HIGH +
    + + +

    Very high contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_VERY_HIGH + DWRITE_PANOSE_CONTRAST_VERY_HIGH +
    + + +

    Horizontal low contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW + DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW +
    + + +

    Horizontal medium contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM + DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM +
    + + +

    Horizontal high contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH + DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH +
    + + +

    Broken contrast.

    +
    + + hh997725 + DWRITE_PANOSE_CONTRAST_BROKEN + DWRITE_PANOSE_CONTRAST_BROKEN +
    + + +

    The enumeration contains values that specify the general look of the character face.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS + DWRITE_PANOSE_DECORATIVE_CLASS +
    + + +

    Any class of decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_ANY + DWRITE_PANOSE_DECORATIVE_CLASS_ANY +
    + + +

    No fit for decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT + DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT +
    + + +

    Derivative decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE + DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE +
    + + +

    Nonstandard topology decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY + DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY +
    + + +

    Nonstandard elements decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS + DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS +
    + + +

    Nonstandard aspect decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT + DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT +
    + + +

    Initials decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS + DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS +
    + + +

    Cartoon decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON + DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON +
    + + +

    Picture stems decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS + DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS +
    + + +

    Ornamented decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED + DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED +
    + + +

    Text and background decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND + DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND +
    + + +

    Collage decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE + DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE +
    + + +

    Montage decorative typeface.

    +
    + + hh997726 + DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE + DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE +
    + + +

    The enumeration contains values that specify the overall shape characteristics of the font.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY + DWRITE_PANOSE_DECORATIVE_TOPOLOGY +
    + + +

    Any decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY +
    + + +

    No fit for decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT +
    + + +

    Standard decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD +
    + + +

    Square decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE +
    + + +

    Multiple segment decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT +
    + + +

    Art deco decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO +
    + + +

    Uneven weighting decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING +
    + + +

    Diverse arms decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS +
    + + +

    Diverse forms decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS +
    + + +

    Lombardic forms decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS +
    + + +

    Upper case in lower case decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE +
    + + +

    The decorative topology is implied.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY +
    + + +

    Horseshoe E and A decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A +
    + + +

    Cursive decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE +
    + + +

    Blackletter decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER +
    + + +

    Swash variance decorative topology.

    +
    + + hh997727 + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE + DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE +
    + + +

    The enumeration contains values that specify the kind of typeface classification.

    +
    + + hh995028 + DWRITE_PANOSE_FAMILY + DWRITE_PANOSE_FAMILY +
    + + +

    Any typeface classification.

    +
    + + hh995028 + DWRITE_PANOSE_FAMILY_ANY + DWRITE_PANOSE_FAMILY_ANY +
    + + +

    No fit typeface classification.

    +
    + + hh995028 + DWRITE_PANOSE_FAMILY_NO_FIT + DWRITE_PANOSE_FAMILY_NO_FIT +
    + + +

    Text display typeface classification.

    +
    + + hh995028 + DWRITE_PANOSE_FAMILY_TEXT_DISPLAY + DWRITE_PANOSE_FAMILY_TEXT_DISPLAY +
    + + +

    Script (or hand written) typeface classification.

    +
    + + hh995028 + DWRITE_PANOSE_FAMILY_SCRIPT + DWRITE_PANOSE_FAMILY_SCRIPT +
    + + +

    Decorative typeface classification.

    +
    + + hh995028 + DWRITE_PANOSE_FAMILY_DECORATIVE + DWRITE_PANOSE_FAMILY_DECORATIVE +
    + + +

    Symbol typeface classification.

    +
    + + hh995028 + DWRITE_PANOSE_FAMILY_SYMBOL + DWRITE_PANOSE_FAMILY_SYMBOL +
    + + +

    Pictorial (or symbol) typeface classification.

    +
    + + hh995028 + DWRITE_PANOSE_FAMILY_PICTORIAL + DWRITE_PANOSE_FAMILY_PICTORIAL +
    + + +

    The enumeration contains values that specify the type of fill and line treatment.

    +
    + + hh997728 + DWRITE_PANOSE_FILL + DWRITE_PANOSE_FILL +
    + + +

    Any fill.

    +
    + + hh997728 + DWRITE_PANOSE_FILL_ANY + DWRITE_PANOSE_FILL_ANY +
    + + +

    No fit for fill.

    +
    + + hh997728 + DWRITE_PANOSE_FILL_NO_FIT + DWRITE_PANOSE_FILL_NO_FIT +
    + + +

    The fill is the standard solid fill.

    +
    + + hh997728 + DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL + DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL +
    + + +

    No fill.

    +
    + + hh997728 + DWRITE_PANOSE_FILL_NO_FILL + DWRITE_PANOSE_FILL_NO_FILL +
    + + +

    The fill is patterned fill.

    +
    + + hh997728 + DWRITE_PANOSE_FILL_PATTERNED_FILL + DWRITE_PANOSE_FILL_PATTERNED_FILL +
    + + +

    The fill is complex fill.

    +
    + + hh997728 + DWRITE_PANOSE_FILL_COMPLEX_FILL + DWRITE_PANOSE_FILL_COMPLEX_FILL +
    + + +

    The fill is shaped fill.

    +
    + + hh997728 + DWRITE_PANOSE_FILL_SHAPED_FILL + DWRITE_PANOSE_FILL_SHAPED_FILL +
    + + +

    The fill is drawn distressed.

    +
    + + hh997728 + DWRITE_PANOSE_FILL_DRAWN_DISTRESSED + DWRITE_PANOSE_FILL_DRAWN_DISTRESSED +
    + + +

    The enumeration contains values that specify how character ends and miniscule ascenders are treated.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS + DWRITE_PANOSE_FINIALS +
    + + +

    Any finials.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_ANY + DWRITE_PANOSE_FINIALS_ANY +
    + + +

    No fit for finials.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_NO_FIT + DWRITE_PANOSE_FINIALS_NO_FIT +
    + + +

    No loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS + DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS +
    + + +

    No closed loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS + DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS +
    + + +

    No open loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS + DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS +
    + + +

    Sharp with no loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS + DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS +
    + + +

    Sharp with closed loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS + DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS +
    + + +

    Sharp with open loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS + DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS +
    + + +

    Tapered with no loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS + DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS +
    + + +

    Tapered with closed loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS + DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS +
    + + +

    Tapered with open loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS + DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS +
    + + +

    Round with no loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS + DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS +
    + + +

    Round with closed loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS + DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS +
    + + +

    Round with open loops.

    +
    + + hh997729 + DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS + DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS +
    + + +

    The enumeration contains values that specify the roundness of letterform for text.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM + DWRITE_PANOSE_LETTERFORM +
    + + +

    Any letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_ANY + DWRITE_PANOSE_LETTERFORM_ANY +
    + + +

    No fit letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_NO_FIT + DWRITE_PANOSE_LETTERFORM_NO_FIT +
    + + +

    Normal contact letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT + DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT +
    + + +

    Normal weighted letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED + DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED +
    + + +

    Normal boxed letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED + DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED +
    + + +

    Normal flattened letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED + DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED +
    + + +

    Normal rounded letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED + DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED +
    + + +

    Normal off-center letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER + DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER +
    + + +

    Normal square letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE + DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE +
    + + +

    Oblique contact letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT + DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT +
    + + +

    Oblique weighted letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED + DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED +
    + + +

    Oblique boxed letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED + DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED +
    + + +

    Oblique flattened letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED + DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED +
    + + +

    Oblique rounded letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED + DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED +
    + + +

    Oblique off-center letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER + DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER +
    + + +

    Oblique square letterform.

    +
    + + hh997730 + DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE + DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE +
    + + +

    The enumeration contains values that specify the handling of the outline for the decorative typeface.

    +
    + + hh997731 + DWRITE_PANOSE_LINING + DWRITE_PANOSE_LINING +
    + + +

    Any lining.

    +
    + + hh997731 + DWRITE_PANOSE_LINING_ANY + DWRITE_PANOSE_LINING_ANY +
    + + +

    No fit for lining.

    +
    + + hh997731 + DWRITE_PANOSE_LINING_NO_FIT + DWRITE_PANOSE_LINING_NO_FIT +
    + + +

    No lining.

    +
    + + hh997731 + DWRITE_PANOSE_LINING_NONE + DWRITE_PANOSE_LINING_NONE +
    + + +

    The lining is inline.

    +
    + + hh997731 + DWRITE_PANOSE_LINING_INLINE + DWRITE_PANOSE_LINING_INLINE +
    + + +

    The lining is outline.

    +
    + + hh997731 + DWRITE_PANOSE_LINING_OUTLINE + DWRITE_PANOSE_LINING_OUTLINE +
    + + +

    The lining is engraved.

    +
    + + hh997731 + DWRITE_PANOSE_LINING_ENGRAVED + DWRITE_PANOSE_LINING_ENGRAVED +
    + + +

    The lining is shadowed.

    +
    + + hh997731 + DWRITE_PANOSE_LINING_SHADOW + DWRITE_PANOSE_LINING_SHADOW +
    + + +

    The lining is relief.

    +
    + + hh997731 + DWRITE_PANOSE_LINING_RELIEF + DWRITE_PANOSE_LINING_RELIEF +
    + + +

    The lining is backdrop.

    +
    + + hh997731 + DWRITE_PANOSE_LINING_BACKDROP + DWRITE_PANOSE_LINING_BACKDROP +
    + + +

    The enumeration contains values that specify info about the placement of midline across uppercase characters and the treatment of diagonal stem apexes.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE + DWRITE_PANOSE_MIDLINE +
    + + +

    Any midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_ANY + DWRITE_PANOSE_MIDLINE_ANY +
    + + +

    No fit midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_NO_FIT + DWRITE_PANOSE_MIDLINE_NO_FIT +
    + + +

    Standard trimmed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED + DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED +
    + + +

    Standard pointed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_STANDARD_POINTED + DWRITE_PANOSE_MIDLINE_STANDARD_POINTED +
    + + +

    Standard serifed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED + DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED +
    + + +

    High trimmed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED + DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED +
    + + +

    High pointed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_HIGH_POINTED + DWRITE_PANOSE_MIDLINE_HIGH_POINTED +
    + + +

    High serifed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_HIGH_SERIFED + DWRITE_PANOSE_MIDLINE_HIGH_SERIFED +
    + + +

    Constant trimmed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED + DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED +
    + + +

    Constant pointed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED + DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED +
    + + +

    Constant serifed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED + DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED +
    + + +

    Low trimmed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_LOW_TRIMMED + DWRITE_PANOSE_MIDLINE_LOW_TRIMMED +
    + + +

    Low pointed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_LOW_POINTED + DWRITE_PANOSE_MIDLINE_LOW_POINTED +
    + + +

    Low serifed midline.

    +
    + + hh997732 + DWRITE_PANOSE_MIDLINE_LOW_SERIFED + DWRITE_PANOSE_MIDLINE_LOW_SERIFED +
    + + +

    The enumeration contains values that specify the proportion of the glyph shape by considering additional detail to standard characters.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION + DWRITE_PANOSE_PROPORTION +
    + + +

    Any proportion for the text.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION_ANY + DWRITE_PANOSE_PROPORTION_ANY +
    + + +

    No fit proportion for the text.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION_NO_FIT + DWRITE_PANOSE_PROPORTION_NO_FIT +
    + + +

    Old style proportion for the text.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION_OLD_STYLE + DWRITE_PANOSE_PROPORTION_OLD_STYLE +
    + + +

    Modern proportion for the text.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION_MODERN + DWRITE_PANOSE_PROPORTION_MODERN +
    + + +

    Extra width proportion for the text.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION_EVEN_WIDTH + DWRITE_PANOSE_PROPORTION_EVEN_WIDTH +
    + + +

    Expanded proportion for the text.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION_EXPANDED + DWRITE_PANOSE_PROPORTION_EXPANDED +
    + + +

    Condensed proportion for the text.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION_CONDENSED + DWRITE_PANOSE_PROPORTION_CONDENSED +
    + + +

    Very expanded proportion for the text.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION_VERY_EXPANDED + DWRITE_PANOSE_PROPORTION_VERY_EXPANDED +
    + + +

    Very condensed proportion for the text.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION_VERY_CONDENSED + DWRITE_PANOSE_PROPORTION_VERY_CONDENSED +
    + + +

    Monospaced proportion for the text.

    +
    + + hh995029 + DWRITE_PANOSE_PROPORTION_MONOSPACED + DWRITE_PANOSE_PROPORTION_MONOSPACED +
    + + +

    The enumeration contains values that specify the general look of the character face, with consideration of its slope and tails.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM + DWRITE_PANOSE_SCRIPT_FORM +
    + + +

    Any script form.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_ANY + DWRITE_PANOSE_SCRIPT_FORM_ANY +
    + + +

    No fit for script form.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_NO_FIT + DWRITE_PANOSE_SCRIPT_FORM_NO_FIT +
    + + +

    Script form is upright with no wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING +
    + + +

    Script form is upright with some wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING +
    + + +

    Script form is upright with more wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING +
    + + +

    Script form is upright with extreme wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING +
    + + +

    Script form is oblique with no wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING +
    + + +

    Script form is oblique with some wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING +
    + + +

    Script form is oblique with more wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING +
    + + +

    Script form is oblique with extreme wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING +
    + + +

    Script form is exaggerated with no wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING +
    + + +

    Script form is exaggerated with some wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING +
    + + +

    Script form is exaggerated with more wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING +
    + + +

    Script form is exaggerated with extreme wrapping.

    +
    + + hh997733 + DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING + DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING +
    + + +

    The enumeration contains values that specify the topology of letterforms.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY + DWRITE_PANOSE_SCRIPT_TOPOLOGY +
    + + +

    Any script topology.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY + DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY +
    + + +

    No fit for script topology.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT + DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT +
    + + +

    Script topology is roman disconnected.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED + DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED +
    + + +

    Script topology is roman trailing.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING + DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING +
    + + +

    Script topology is roman connected.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED + DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED +
    + + +

    Script topology is cursive disconnected.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED + DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED +
    + + +

    Script topology is cursive trailing.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING + DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING +
    + + +

    Script topology is cursive connected.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED + DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED +
    + + +

    Script topology is black-letter disconnected.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED + DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED +
    + + +

    Script topology is black-letter trailing.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING + DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING +
    + + +

    Script topology is black-letter connected.

    +
    + + hh997734 + DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED + DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED +
    + + +

    The enumeration contains values that specify the appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE + DWRITE_PANOSE_SERIF_STYLE +
    + + +

    Any appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_ANY + DWRITE_PANOSE_SERIF_STYLE_ANY +
    + + +

    No fit appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_NO_FIT + DWRITE_PANOSE_SERIF_STYLE_NO_FIT +
    + + +

    Cove appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_COVE + DWRITE_PANOSE_SERIF_STYLE_COVE +
    + + +

    Obtuse cove appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE + DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE +
    + + +

    Square cove appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE + DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE +
    + + +

    Obtuse square cove appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE + DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE +
    + + +

    Square appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_SQUARE + DWRITE_PANOSE_SERIF_STYLE_SQUARE +
    + + +

    Thin appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_THIN + DWRITE_PANOSE_SERIF_STYLE_THIN +
    + + +

    Oval appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_OVAL + DWRITE_PANOSE_SERIF_STYLE_OVAL +
    + + +

    Exaggerated appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED + DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED +
    + + +

    Triangle appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_TRIANGLE + DWRITE_PANOSE_SERIF_STYLE_TRIANGLE +
    + + +

    Normal sans appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS + DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS +
    + + +

    Obtuse sans appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS + DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS +
    + + +

    Perpendicular sans appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS + DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS +
    + + +

    Flared appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_FLARED + DWRITE_PANOSE_SERIF_STYLE_FLARED +
    + + +

    Rounded appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_ROUNDED + DWRITE_PANOSE_SERIF_STYLE_ROUNDED +
    + + +

    Script appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_SCRIPT + DWRITE_PANOSE_SERIF_STYLE_SCRIPT +
    + + +

    Perpendicular sans appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_PERP_SANS + DWRITE_PANOSE_SERIF_STYLE_PERP_SANS +
    + + +

    Oval appearance of the serif text.

    +
    + + hh995030 + DWRITE_PANOSE_SERIF_STYLE_BONE + DWRITE_PANOSE_SERIF_STYLE_BONE +
    + + +

    The enumeration contains values that specify character spacing (monospace versus proportional).

    +
    + + hh997735 + DWRITE_PANOSE_SPACING + DWRITE_PANOSE_SPACING +
    + + +

    Any spacing.

    +
    + + hh997735 + DWRITE_PANOSE_SPACING_ANY + DWRITE_PANOSE_SPACING_ANY +
    + + +

    No fit for spacing.

    +
    + + hh997735 + DWRITE_PANOSE_SPACING_NO_FIT + DWRITE_PANOSE_SPACING_NO_FIT +
    + + +

    Spacing is proportional.

    +
    + + hh997735 + DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED + DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED +
    + + +

    Spacing is monospace.

    +
    + + hh997735 + DWRITE_PANOSE_SPACING_MONOSPACED + DWRITE_PANOSE_SPACING_MONOSPACED +
    + + +

    The enumeration contains values that specify the relationship between thin and thick stems of text characters.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION + DWRITE_PANOSE_STROKE_VARIATION +
    + + +

    Any stroke variation for text characters.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_ANY + DWRITE_PANOSE_STROKE_VARIATION_ANY +
    + + +

    No fit stroke variation for text characters.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_NO_FIT + DWRITE_PANOSE_STROKE_VARIATION_NO_FIT +
    + + +

    No stroke variation for text characters.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION + DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION +
    + + +

    The stroke variation for text characters is gradual diagonal.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL + DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL +
    + + +

    The stroke variation for text characters is gradual transitional.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL + DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL +
    + + +

    The stroke variation for text characters is gradual vertical.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL + DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL +
    + + +

    The stroke variation for text characters is gradual horizontal.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL + DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL +
    + + +

    The stroke variation for text characters is rapid vertical.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL + DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL +
    + + +

    The stroke variation for text characters is rapid horizontal.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL + DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL +
    + + +

    The stroke variation for text characters is instant vertical.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL + DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL +
    + + +

    The stroke variation for text characters is instant horizontal.

    +
    + + hh997736 + DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL + DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL +
    + + +

    The enumeration contains values that specify the aspect ratio of symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO +
    + + +

    Any aspect ratio of symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY +
    + + +

    No fit for aspect ratio of symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT +
    + + +

    No width aspect ratio of symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH +
    + + +

    Exceptionally wide symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE +
    + + +

    Super wide symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE +
    + + +

    Very wide symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE +
    + + +

    Wide symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE +
    + + +

    Normal aspect ratio of symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL +
    + + +

    Narrow symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW +
    + + +

    Very narrow symbolic characters.

    +
    + + jj126263 + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW + DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW +
    + + +

    The enumeration contains values that specify the kind of symbol set.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND + DWRITE_PANOSE_SYMBOL_KIND +
    + + +

    Any kind of symbol set.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_ANY + DWRITE_PANOSE_SYMBOL_KIND_ANY +
    + + +

    No fit for the kind of symbol set.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_NO_FIT + DWRITE_PANOSE_SYMBOL_KIND_NO_FIT +
    + + +

    The kind of symbol set is montages.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_MONTAGES + DWRITE_PANOSE_SYMBOL_KIND_MONTAGES +
    + + +

    The kind of symbol set is pictures.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_PICTURES + DWRITE_PANOSE_SYMBOL_KIND_PICTURES +
    + + +

    The kind of symbol set is shapes.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_SHAPES + DWRITE_PANOSE_SYMBOL_KIND_SHAPES +
    + + +

    The kind of symbol set is scientific symbols.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC + DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC +
    + + +

    The kind of symbol set is music symbols.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_MUSIC + DWRITE_PANOSE_SYMBOL_KIND_MUSIC +
    + + +

    The kind of symbol set is expert symbols.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_EXPERT + DWRITE_PANOSE_SYMBOL_KIND_EXPERT +
    + + +

    The kind of symbol set is patterns.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_PATTERNS + DWRITE_PANOSE_SYMBOL_KIND_PATTERNS +
    + + +

    The kind of symbol set is boarders.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_BOARDERS + DWRITE_PANOSE_SYMBOL_KIND_BOARDERS +
    + + +

    The kind of symbol set is icons.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_ICONS + DWRITE_PANOSE_SYMBOL_KIND_ICONS +
    + + +

    The kind of symbol set is logos.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_LOGOS + DWRITE_PANOSE_SYMBOL_KIND_LOGOS +
    + + +

    The kind of symbol set is industry specific.

    +
    + + hh997737 + DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC + DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC +
    + + +

    The enumeration contains values that specify the kind of tool that is used to create character forms.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND + DWRITE_PANOSE_TOOL_KIND +
    + + +

    Any kind of tool.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND_ANY + DWRITE_PANOSE_TOOL_KIND_ANY +
    + + +

    No fit for the kind of tool.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND_NO_FIT + DWRITE_PANOSE_TOOL_KIND_NO_FIT +
    + + +

    Flat NIB tool.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND_FLAT_NIB + DWRITE_PANOSE_TOOL_KIND_FLAT_NIB +
    + + +

    Pressure point tool.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT + DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT +
    + + +

    Engraved tool.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND_ENGRAVED + DWRITE_PANOSE_TOOL_KIND_ENGRAVED +
    + + +

    Ball tool.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND_BALL + DWRITE_PANOSE_TOOL_KIND_BALL +
    + + +

    Brush tool.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND_BRUSH + DWRITE_PANOSE_TOOL_KIND_BRUSH +
    + + +

    Rough tool.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND_ROUGH + DWRITE_PANOSE_TOOL_KIND_ROUGH +
    + + +

    Felt-pen-brush-tip tool.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP + DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP +
    + + +

    Wild-brush tool.

    +
    + + hh997738 + DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH + DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH +
    + + +

    The enumeration contains values that specify the weight of characters.

    +
    + +

    The values roughly correspond to the values by using (panose_weight - 2) * 100 = font_weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT + DWRITE_PANOSE_WEIGHT +
    + + +

    Any weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_ANY + DWRITE_PANOSE_WEIGHT_ANY +
    + + +

    No fit weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_NO_FIT + DWRITE_PANOSE_WEIGHT_NO_FIT +
    + + +

    Very light weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_VERY_LIGHT + DWRITE_PANOSE_WEIGHT_VERY_LIGHT +
    + + +

    Light weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_LIGHT + DWRITE_PANOSE_WEIGHT_LIGHT +
    + + +

    Thin weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_THIN + DWRITE_PANOSE_WEIGHT_THIN +
    + + +

    Book weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_BOOK + DWRITE_PANOSE_WEIGHT_BOOK +
    + + +

    Medium weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_MEDIUM + DWRITE_PANOSE_WEIGHT_MEDIUM +
    + + +

    Demi weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_DEMI + DWRITE_PANOSE_WEIGHT_DEMI +
    + + +

    Bold weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_BOLD + DWRITE_PANOSE_WEIGHT_BOLD +
    + + +

    Heavy weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_HEAVY + DWRITE_PANOSE_WEIGHT_HEAVY +
    + + +

    Black weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_BLACK + DWRITE_PANOSE_WEIGHT_BLACK +
    + + +

    Extra black weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_EXTRA_BLACK + DWRITE_PANOSE_WEIGHT_EXTRA_BLACK +
    + + +

    Extra black weight.

    +
    + + hh995031 + DWRITE_PANOSE_WEIGHT_NORD + DWRITE_PANOSE_WEIGHT_NORD +
    + + +

    The enumeration contains values that specify the relative size of the lowercase letters.

    +
    + + hh997739 + DWRITE_PANOSE_XASCENT + DWRITE_PANOSE_XASCENT +
    + + +

    Any xascent.

    +
    + + hh997739 + DWRITE_PANOSE_XASCENT_ANY + DWRITE_PANOSE_XASCENT_ANY +
    + + +

    No fit for xascent.

    +
    + + hh997739 + DWRITE_PANOSE_XASCENT_NO_FIT + DWRITE_PANOSE_XASCENT_NO_FIT +
    + + +

    Very low xascent.

    +
    + + hh997739 + DWRITE_PANOSE_XASCENT_VERY_LOW + DWRITE_PANOSE_XASCENT_VERY_LOW +
    + + +

    Low xascent.

    +
    + + hh997739 + DWRITE_PANOSE_XASCENT_LOW + DWRITE_PANOSE_XASCENT_LOW +
    + + +

    Medium xascent.

    +
    + + hh997739 + DWRITE_PANOSE_XASCENT_MEDIUM + DWRITE_PANOSE_XASCENT_MEDIUM +
    + + +

    High xascent.

    +
    + + hh997739 + DWRITE_PANOSE_XASCENT_HIGH + DWRITE_PANOSE_XASCENT_HIGH +
    + + +

    Very high xascent.

    +
    + + hh997739 + DWRITE_PANOSE_XASCENT_VERY_HIGH + DWRITE_PANOSE_XASCENT_VERY_HIGH +
    + + +

    The enumeration contains values that specify info about the relative size of lowercase letters and the treatment of diacritic marks (xheight).

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT + DWRITE_PANOSE_XHEIGHT +
    + + +

    Any xheight.

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT_ANY + DWRITE_PANOSE_XHEIGHT_ANY +
    + + +

    No fit xheight.

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT_NO_FIT + DWRITE_PANOSE_XHEIGHT_NO_FIT +
    + + +

    Constant small xheight.

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL + DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL +
    + + +

    Constant standard xheight.

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD + DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD +
    + + +

    Constant large xheight.

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE + DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE +
    + + +

    Ducking small xheight.

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL + DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL +
    + + +

    Ducking standard xheight.

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD + DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD +
    + + +

    Ducking large xheight.

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE + DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE +
    + + +

    Constant standard xheight.

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT_CONSTANT_STD + DWRITE_PANOSE_XHEIGHT_CONSTANT_STD +
    + + +

    Ducking standard xheight.

    +
    + + hh997740 + DWRITE_PANOSE_XHEIGHT_DUCKING_STD + DWRITE_PANOSE_XHEIGHT_DUCKING_STD +
    + + +

    Specifies the alignment of paragraph text along the flow direction axis, relative to the top and bottom of the flow's layout box.

    +
    + + dd368112 + DWRITE_PARAGRAPH_ALIGNMENT + DWRITE_PARAGRAPH_ALIGNMENT +
    + + +

    The top of the text flow is aligned to the top edge of the layout box.

    +
    + + dd368112 + DWRITE_PARAGRAPH_ALIGNMENT_NEAR + DWRITE_PARAGRAPH_ALIGNMENT_NEAR +
    + + +

    The bottom of the text flow is aligned to the bottom edge of the layout box.

    +
    + + dd368112 + DWRITE_PARAGRAPH_ALIGNMENT_FAR + DWRITE_PARAGRAPH_ALIGNMENT_FAR +
    + + +

    The center of the flow is aligned to the center of the layout box.

    +
    + + dd368112 + DWRITE_PARAGRAPH_ALIGNMENT_CENTER + DWRITE_PARAGRAPH_ALIGNMENT_CENTER +
    + + +

    Represents the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text. +

    +
    + + dd368114 + DWRITE_PIXEL_GEOMETRY + DWRITE_PIXEL_GEOMETRY +
    + + +

    The red, green, and blue color components of each pixel are assumed to occupy the same point.

    +
    + + dd368114 + DWRITE_PIXEL_GEOMETRY_FLAT + DWRITE_PIXEL_GEOMETRY_FLAT +
    + + +

    Each pixel is composed of three vertical stripes, with red on the left, green in the center, and blue on the right. This is the most common pixel geometry for LCD monitors.

    +
    + + dd368114 + DWRITE_PIXEL_GEOMETRY_RGB + DWRITE_PIXEL_GEOMETRY_RGB +
    + + +

    Each pixel is composed of three vertical stripes, with blue on the left, green in the center, and red on the right.

    +
    + + dd368114 + DWRITE_PIXEL_GEOMETRY_BGR + DWRITE_PIXEL_GEOMETRY_BGR +
    + + +

    Specifies the direction in which reading progresses.

    Note?? and are available in Windows?8.1 and later, only.? +
    + + dd368116 + DWRITE_READING_DIRECTION + DWRITE_READING_DIRECTION +
    + + +

    Indicates that reading progresses from left to right.

    +
    + + dd368116 + DWRITE_READING_DIRECTION_LEFT_TO_RIGHT + DWRITE_READING_DIRECTION_LEFT_TO_RIGHT +
    + + +

    Indicates that reading progresses from right to left.

    +
    + + dd368116 + DWRITE_READING_DIRECTION_RIGHT_TO_LEFT + DWRITE_READING_DIRECTION_RIGHT_TO_LEFT +
    + + +
    Note??Windows?8.1 and later only. ?

    Indicates that reading progresses from top to bottom.

    +
    + + dd368116 + DWRITE_READING_DIRECTION_TOP_TO_BOTTOM + DWRITE_READING_DIRECTION_TOP_TO_BOTTOM +
    + + +
    Note??Windows?8.1 and later only. ?

    Indicates that reading progresses from bottom to top.

    +
    + + dd368116 + DWRITE_READING_DIRECTION_BOTTOM_TO_TOP + DWRITE_READING_DIRECTION_BOTTOM_TO_TOP +
    + + +

    Represents a method of rendering glyphs.

    Note?? This topic is about in Windows?8 and later. For info on the previous version see this topic.? +
    + + dd368118 + DWRITE_RENDERING_MODE + DWRITE_RENDERING_MODE +
    + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_DEFAULT + DWRITE_RENDERING_MODE_DEFAULT + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_ALIASED + DWRITE_RENDERING_MODE_ALIASED + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_GDI_CLASSIC + DWRITE_RENDERING_MODE_GDI_CLASSIC + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_GDI_NATURAL + DWRITE_RENDERING_MODE_GDI_NATURAL + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_NATURAL + DWRITE_RENDERING_MODE_NATURAL + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC + DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_OUTLINE + DWRITE_RENDERING_MODE_OUTLINE + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC + DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL + DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL + DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC + DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC + + + +

    Represents a method of rendering glyphs.

    Note?? This topic is about in Windows?8 and later. For info on the previous version see this topic.? +
    + + dd368118 + DWRITE_RENDERING_MODE1 + DWRITE_RENDERING_MODE1 +
    + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE1_DEFAULT + DWRITE_RENDERING_MODE1_DEFAULT + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE1_ALIASED + DWRITE_RENDERING_MODE1_ALIASED + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE1_GDI_CLASSIC + DWRITE_RENDERING_MODE1_GDI_CLASSIC + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE1_GDI_NATURAL + DWRITE_RENDERING_MODE1_GDI_NATURAL + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE1_NATURAL + DWRITE_RENDERING_MODE1_NATURAL + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC + DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE1_OUTLINE + DWRITE_RENDERING_MODE1_OUTLINE + + + + No documentation. + + + dd368118 + DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED + DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED + + + +

    Indicates additional shaping requirements for text.

    +
    + + dd368121 + DWRITE_SCRIPT_SHAPES + DWRITE_SCRIPT_SHAPES +
    + + +

    Indicates that there is no additional shaping requirements for text. Text is shaped with the writing system default behavior.

    +
    + + dd368121 + DWRITE_SCRIPT_SHAPES_DEFAULT + DWRITE_SCRIPT_SHAPES_DEFAULT +
    + + +

    Indicates that text should leave no visible control or format control characters.

    +
    + + dd368121 + DWRITE_SCRIPT_SHAPES_NO_VISUAL + DWRITE_SCRIPT_SHAPES_NO_VISUAL +
    + + +

    Specifies the alignment of paragraph text along the reading direction axis, relative to the leading and trailing edge of the layout box.

    +
    + + dd368131 + DWRITE_TEXT_ALIGNMENT + DWRITE_TEXT_ALIGNMENT +
    + + +

    The leading edge of the paragraph text is aligned to the leading edge of the layout box.

    +
    + + dd368131 + DWRITE_TEXT_ALIGNMENT_LEADING + DWRITE_TEXT_ALIGNMENT_LEADING +
    + + +

    The trailing edge of the paragraph text is aligned to the trailing edge of the layout box.

    +
    + + dd368131 + DWRITE_TEXT_ALIGNMENT_TRAILING + DWRITE_TEXT_ALIGNMENT_TRAILING +
    + + +

    The center of the paragraph text is aligned to the center of the layout box.

    +
    + + dd368131 + DWRITE_TEXT_ALIGNMENT_CENTER + DWRITE_TEXT_ALIGNMENT_CENTER +
    + + +

    Align text to the leading side, and also justify text to fill the lines.

    +
    + + dd368131 + DWRITE_TEXT_ALIGNMENT_JUSTIFIED + DWRITE_TEXT_ALIGNMENT_JUSTIFIED +
    + + +

    The enumeration contains values that specify the type of antialiasing to use for text when the rendering mode calls for antialiasing.

    +
    + + jj127237 + DWRITE_TEXT_ANTIALIAS_MODE + DWRITE_TEXT_ANTIALIAS_MODE +
    + + +

    ClearType antialiasing computes coverage independently for the red, green, and blue color elements of each pixel. This allows for more detail than conventional antialiasing. However, because there is no one alpha value for each pixel, ClearType is not suitable for rendering text onto a transparent intermediate bitmap.

    +
    + + jj127237 + DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE + DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE +
    + + +

    Grayscale antialiasing computes one coverage value for each pixel. Because the alpha value of each pixel is well-defined, text can be rendered onto a transparent bitmap, which can then be composited with other content.

    Note??Grayscale rendering with uses premultiplied alpha. ?
    +
    + + jj127237 + DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE + DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE +
    + + +

    Identifies a type of alpha texture.

    +
    + +

    An alpha texture is a bitmap of alpha values, each representing opacity of a pixel or subpixel.

    +
    + + dd368129 + DWRITE_TEXTURE_TYPE + DWRITE_TEXTURE_TYPE +
    + + +

    Specifies an alpha texture for aliased text rendering (that is, each pixel is either fully opaque or fully transparent), with one byte per pixel.

    +
    + + dd368129 + DWRITE_TEXTURE_ALIASED_1x1 + DWRITE_TEXTURE_ALIASED_1x1 +
    + + +

    Specifies an alpha texture for ClearType text rendering, with three bytes per pixel in the horizontal dimension and one byte per pixel in the vertical dimension.

    +
    + + dd368129 + DWRITE_TEXTURE_CLEARTYPE_3x1 + DWRITE_TEXTURE_CLEARTYPE_3x1 +
    + + +

    Specifies the text granularity used to trim text overflowing the layout box.

    +
    + + dd368141 + DWRITE_TRIMMING_GRANULARITY + DWRITE_TRIMMING_GRANULARITY +
    + + +

    No trimming occurs. Text flows beyond the layout width.

    +
    + + dd368141 + DWRITE_TRIMMING_GRANULARITY_NONE + DWRITE_TRIMMING_GRANULARITY_NONE +
    + + +

    Trimming occurs at a character cluster boundary.

    +
    + + dd368141 + DWRITE_TRIMMING_GRANULARITY_CHARACTER + DWRITE_TRIMMING_GRANULARITY_CHARACTER +
    + + +

    Trimming occurs at a word boundary.

    +
    + + dd368141 + DWRITE_TRIMMING_GRANULARITY_WORD + DWRITE_TRIMMING_GRANULARITY_WORD +
    + + +

    The enumeration contains values that specify the desired kind of glyph orientation for the text.

    +
    + +

    The client specifies a -typed value to the analyzer as the desired orientation.

    Note??This is the client preference, and the constraints of the script determine the final presentation.? +
    + + jj126266 + DWRITE_VERTICAL_GLYPH_ORIENTATION + DWRITE_VERTICAL_GLYPH_ORIENTATION +
    + + +

    The default glyph orientation. In vertical layout, naturally horizontal scripts (Latin, Thai, Arabic, Devanagari) rotate 90 degrees clockwise, while ideographic scripts (Chinese, Japanese, Korean) remain upright, 0 degrees.

    +
    + + jj126266 + DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT + DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT +
    + + +

    Stacked glyph orientation. Ideographic scripts and scripts that permit stacking (Latin, Hebrew) are stacked in vertical reading layout. Connected scripts (Arabic, Syriac, 'Phags-pa, Ogham), which would otherwise look broken if glyphs were kept at 0 degrees, remain connected and rotate.

    +
    + + jj126266 + DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED + DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED +
    + + +

    Specifies the word wrapping to be used in a particular multiline paragraph.

    Note??, DWRITE_WORD_WRAPPING_WHOLE _WORD, and are available in Windows?8.1 and later, only.? +
    + + dd368146 + DWRITE_WORD_WRAPPING + DWRITE_WORD_WRAPPING +
    + + +

    Indicates that words are broken across lines to avoid text overflowing the layout box.

    +
    + + dd368146 + DWRITE_WORD_WRAPPING_WRAP + DWRITE_WORD_WRAPPING_WRAP +
    + + +

    Indicates that words are kept within the same line even when it overflows the layout box. This option is often used with scrolling to reveal overflow text.

    +
    + + dd368146 + DWRITE_WORD_WRAPPING_NO_WRAP + DWRITE_WORD_WRAPPING_NO_WRAP +
    + + +
    Note??Windows?8.1 and later only. ?

    Words are broken across lines to avoid text overflowing the layout box. Emergency wrapping occurs if the word is larger than the maximum width. +

    +
    + + dd368146 + DWRITE_WORD_WRAPPING_EMERGENCY_BREAK + DWRITE_WORD_WRAPPING_EMERGENCY_BREAK +
    + + +
    Note??Windows?8.1 and later only. ?

    When emergency wrapping, only wrap whole words, never breaking words when the layout width is too small for even a single word. +

    +
    + + dd368146 + DWRITE_WORD_WRAPPING_WHOLE_WORD + DWRITE_WORD_WRAPPING_WHOLE_WORD +
    + + +
    Note??Windows?8.1 and later only. ?

    Wrap between any valid character clusters.

    +
    + + dd368146 + DWRITE_WORD_WRAPPING_CHARACTER + DWRITE_WORD_WRAPPING_CHARACTER +
    + + + Functions + + + + + +

    Creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects.

    +
    +

    A value that specifies whether the factory object will be shared or isolated.

    +

    A value that identifies the DirectWrite factory interface, such as __uuidof().

    +

    An address of a reference to the newly created DirectWrite factory object.

    +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + +

    This function creates a DirectWrite factory object that is used for subsequent creation of individual DirectWrite objects. DirectWrite factory contains internal state data such as font loader registration and cached font data. In most cases it is recommended you use the shared factory object, because it allows multiple components that use DirectWrite to share internal DirectWrite state data, and thereby reduce memory usage. However, there are cases when it is desirable to reduce the impact of a component, such as a plug-in from an untrusted source, on the rest of the process, by sandboxing and isolating it from the rest of the process components. In such cases, it is recommended you use an isolated factory for the sandboxed component.

    The following example shows how to create a shared DirectWrite factory.

     if (SUCCEEDED(hr))	
    +            { hr = ( , __uuidof(), reinterpret_cast<**>(&pDWriteFactory_) );	
    +            } 
    +
    + + dd368040 + HRESULT DWriteCreateFactory([In] DWRITE_FACTORY_TYPE factoryType,[In] const GUID& iid,[Out, Fast] IUnknown** factory) + DWriteCreateFactory +
    + + +

    Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.

    +
    + + dd370983 + IDWriteAsyncResult + IDWriteAsyncResult +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetWaitHandle + GetWaitHandle + void* IDWriteAsyncResult::GetWaitHandle() + + + + No documentation. + + + GetResult + GetResult + HRESULT IDWriteAsyncResult::GetResult() + + + + No documentation. + + No documentation. + + void* IDWriteAsyncResult::GetWaitHandle() + IDWriteAsyncResult::GetWaitHandle + + + + No documentation. + + No documentation. + + HRESULT IDWriteAsyncResult::GetResult() + IDWriteAsyncResult::GetResult + + + +

    Encapsulates a 32-bit device independent bitmap and device context, which you can use for rendering glyphs.

    +
    + + hh780398 + IDWriteBitmapRenderTarget1 + IDWriteBitmapRenderTarget1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the current text antialiasing mode of the bitmap render target.

    +
    + + hh780399 + GetTextAntialiasMode / SetTextAntialiasMode + GetTextAntialiasMode + DWRITE_TEXT_ANTIALIAS_MODE IDWriteBitmapRenderTarget1::GetTextAntialiasMode() +
    + + +

    Gets the current text antialiasing mode of the bitmap render target.

    +
    +

    Returns a -typed value that specifies the antialiasing mode.

    + + hh780399 + DWRITE_TEXT_ANTIALIAS_MODE IDWriteBitmapRenderTarget1::GetTextAntialiasMode() + IDWriteBitmapRenderTarget1::GetTextAntialiasMode +
    + + +

    Sets the current text antialiasing mode of the bitmap render target.

    +
    +

    A -typed value that specifies the antialiasing mode.

    +

    Returns if successful, or E_INVALIDARG if the argument is not valid.

    + +

    The antialiasing mode of a newly-created bitmap render target defaults to . An app can change the antialiasing mode by calling SetTextAntialiasMode. For example, an app might specify for grayscale antialiasing when it renders text onto a transparent bitmap.

    +
    + + hh780400 + HRESULT IDWriteBitmapRenderTarget1::SetTextAntialiasMode([In] DWRITE_TEXT_ANTIALIAS_MODE antialiasMode) + IDWriteBitmapRenderTarget1::SetTextAntialiasMode +
    + + +

    This interface allows the application to enumerate through the color glyph runs. The enumerator enumerates the layers in a back to front order for appropriate layering.

    +
    + + dn280445 + IDWriteColorGlyphRunEnumerator + IDWriteColorGlyphRunEnumerator +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the current glyph run of the enumerator.

    +
    + + dn280446 + GetCurrentRun + GetCurrentRun + HRESULT IDWriteColorGlyphRunEnumerator::GetCurrentRun([Out] const DWRITE_COLOR_GLYPH_RUN** colorGlyphRun) +
    + + +

    Move to the next glyph run in the enumerator.

    +
    +

    Returns TRUE if there is a next glyph run.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280447 + HRESULT IDWriteColorGlyphRunEnumerator::MoveNext([Out] BOOL* hasRun) + IDWriteColorGlyphRunEnumerator::MoveNext +
    + + +

    Returns the current glyph run of the enumerator.

    +
    +

    A reference to the current glyph run.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280446 + HRESULT IDWriteColorGlyphRunEnumerator::GetCurrentRun([Out] const DWRITE_COLOR_GLYPH_RUN** colorGlyphRun) + IDWriteColorGlyphRunEnumerator::GetCurrentRun +
    + + +

    Enumerator for an ordered collection of color glyph runs.

    +
    + + mt725314 + IDWriteColorGlyphRunEnumerator1 + IDWriteColorGlyphRunEnumerator1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the current color glyph run.

    +
    + + mt761991 + GetCurrentRun + GetCurrentRun + HRESULT IDWriteColorGlyphRunEnumerator1::GetCurrentRun([Out] const DWRITE_COLOR_GLYPH_RUN1** colorGlyphRun) +
    + + +

    Gets the current color glyph run.

    +
    +

    Receives a reference to the color glyph run. The reference remains valid until the next call to MoveNext or until the interface is released.

    +

    Standard error code. An error is returned if there is no current glyph run, i.e., if MoveNext has not yet been called or if the end of the sequence has been reached.

    + + mt761991 + HRESULT IDWriteColorGlyphRunEnumerator1::GetCurrentRun([Out] const DWRITE_COLOR_GLYPH_RUN1** colorGlyphRun) + IDWriteColorGlyphRunEnumerator1::GetCurrentRun +
    + + +

    The root factory interface for all DirectWrite objects.

    +
    + + dn280448 + IDWriteFactory2 + IDWriteFactory2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a font fallback object from the system font fallback list.

    +
    + + dn280450 + GetSystemFontFallback + GetSystemFontFallback + HRESULT IDWriteFactory2::GetSystemFontFallback([Out] IDWriteFontFallback** fontFallback) +
    + + +

    Creates a font fallback object from the system font fallback list.

    +
    +

    Contains an address of a reference to the newly created font fallback object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280450 + HRESULT IDWriteFactory2::GetSystemFontFallback([Out] IDWriteFontFallback** fontFallback) + IDWriteFactory2::GetSystemFontFallback +
    + + +

    Creates a font fallback builder object.

    A font fall back builder allows you to create Unicode font fallback mappings and create a font fall back object from those mappings.

    +
    +

    Contains an address of a reference to the newly created font fallback builder object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280449 + HRESULT IDWriteFactory2::CreateFontFallbackBuilder([Out] IDWriteFontFallbackBuilder** fontFallbackBuilder) + IDWriteFactory2::CreateFontFallbackBuilder +
    + + +

    This method is called on a glyph run to translate it in to multiple color glyph runs.

    +
    +

    The horizontal baseline origin of the original glyph run.

    +

    The vertical baseline origin of the original glyph run.

    +

    Original glyph run containing monochrome glyph IDs.

    +

    Optional glyph run description.

    +

    Measuring mode used to compute glyph positions if the run contains color glyphs.

    +

    World transform multiplied by any DPI scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not . If this parameter is null, and identity transform is assumed.

    +

    Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by .

    +

    If the original glyph run contains color glyphs, this parameter receives a reference to an interface. The client uses the returned interface to get information about glyph runs and associated colors to render instead of the original glyph run. If the original glyph run does not contain color glyphs, this method returns DWRITE_E_NOCOLOR and the output reference is null.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If the code calls this method with a glyph run that contains no color information, the method returns DWRITE_E_NOCOLOR to let the application know that it can just draw the original glyph run. If the glyph run contains color information, the function returns an object that can be enumerated through to expose runs and associated colors. The application then calls DrawGlyphRun with each of the returned glyph runs and foreground colors.

    +
    + + dn280451 + HRESULT IDWriteFactory2::TranslateColorGlyphRun([In] float baselineOriginX,[In] float baselineOriginY,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[In] DWRITE_MEASURING_MODE measuringMode,[In, Optional] const DWRITE_MATRIX* worldToDeviceTransform,[In] unsigned int colorPaletteIndex,[Out] IDWriteColorGlyphRunEnumerator** colorLayers) + IDWriteFactory2::TranslateColorGlyphRun +
    + + +

    Creates a rendering parameters object with the specified properties.

    +
    +

    The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.

    +

    The amount of contrast enhancement, zero or greater.

    +

    The amount of contrast enhancement, zero or greater.

    +

    The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).

    +

    The geometry of a device pixel.

    +

    Method of rendering glyphs. In most cases, this should be to automatically use an appropriate mode.

    +

    How to grid fit glyph outlines. In most cases, this should be DWRITE_GRID_FIT_DEFAULT to automatically choose an appropriate mode.

    +

    Holds the newly created rendering parameters object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894552 + HRESULT IDWriteFactory2::CreateCustomRenderingParams([In] float gamma,[In] float enhancedContrast,[In] float grayscaleEnhancedContrast,[In] float clearTypeLevel,[In] DWRITE_PIXEL_GEOMETRY pixelGeometry,[In] DWRITE_RENDERING_MODE renderingMode,[In] DWRITE_GRID_FIT_MODE gridFitMode,[Out] IDWriteRenderingParams2** renderingParams) + IDWriteFactory2::CreateCustomRenderingParams +
    + + +

    Creates a glyph run analysis object, which encapsulates information used to render a glyph run.

    +
    +

    Structure specifying the properties of the glyph run.

    +

    Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the emSize and pixelsPerDip.

    +

    Specifies the rendering mode, which must be one of the raster rendering modes (i.e., not default and not outline).

    +

    Specifies the method to measure glyphs.

    +

    How to grid-fit glyph outlines. This must be non-default.

    +

    Specifies the antialias mode.

    +

    Horizontal position of the baseline origin, in DIPs.

    +

    Vertical position of the baseline origin, in DIPs.

    +

    Receives a reference to the newly created object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894553 + HRESULT IDWriteFactory2::CreateGlyphRunAnalysis([In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_MATRIX* transform,[In] DWRITE_RENDERING_MODE renderingMode,[In] DWRITE_MEASURING_MODE measuringMode,[In] DWRITE_GRID_FIT_MODE gridFitMode,[In] DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,[In] float baselineOriginX,[In] float baselineOriginY,[Out] IDWriteGlyphRunAnalysis** glyphRunAnalysis) + IDWriteFactory2::CreateGlyphRunAnalysis +
    + + +

    Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.

    +
    + +

    Create an object by using the function.

     if (SUCCEEDED(hr))	
    +            { hr = ( , __uuidof(), reinterpret_cast<**>(&pDWriteFactory_) );	
    +            } 

    An object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.

    +
    + + dd368183 + IDWriteFactory3 + IDWriteFactory3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the list of system fonts.

    +
    + + dn890764 + GetSystemFontSet + GetSystemFontSet + HRESULT IDWriteFactory3::GetSystemFontSet([Out] IDWriteFontSet** fontSet) +
    + + +

    Gets the font download queue associated with this factory object.

    +
    + + dn890762 + GetFontDownloadQueue + GetFontDownloadQueue + HRESULT IDWriteFactory3::GetFontDownloadQueue([Out] IDWriteFontDownloadQueue** fontDownloadQueue) +
    + + +

    Creates a glyph-run-analysis object that encapsulates info that DirectWrite uses to render a glyph run.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890760 + HRESULT IDWriteFactory3::CreateGlyphRunAnalysis([In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_MATRIX* transform,[In] DWRITE_RENDERING_MODE1 renderingMode,[In] DWRITE_MEASURING_MODE measuringMode,[In] DWRITE_GRID_FIT_MODE gridFitMode,[In] DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,[In] float baselineOriginX,[In] float baselineOriginY,[Out] IDWriteGlyphRunAnalysis** glyphRunAnalysis) + IDWriteFactory3::CreateGlyphRunAnalysis +
    + + +

    Creates a rendering parameters object with the specified properties.

    +
    +

    The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256.

    +

    The amount of contrast enhancement, zero or greater.

    +

    The amount of contrast enhancement to use for grayscale antialiasing, zero or greater.

    +

    The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType).

    +

    A -typed value that specifies the internal structure of a device pixel (that is, the physical arrangement of red, green, and blue color components) that is assumed for purposes of rendering text.

    +

    A -typed value that specifies the method (for example, ClearType natural quality) for rendering glyphs. In most cases, specify to automatically use an appropriate mode.

    +

    A -typed value that specifies how to grid-fit glyph outlines. In most cases, specify DWRITE_GRID_FIT_DEFAULT to automatically choose an appropriate mode.

    +

    A reference to a memory block that receives a reference to a interface for the newly created rendering parameters object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890754 + HRESULT IDWriteFactory3::CreateCustomRenderingParams([In] float gamma,[In] float enhancedContrast,[In] float grayscaleEnhancedContrast,[In] float clearTypeLevel,[In] DWRITE_PIXEL_GEOMETRY pixelGeometry,[In] DWRITE_RENDERING_MODE1 renderingMode,[In] DWRITE_GRID_FIT_MODE gridFitMode,[Out] IDWriteRenderingParams3** renderingParams) + IDWriteFactory3::CreateCustomRenderingParams +
    + + +

    Creates a reference to a font given a full path.

    +
    +

    Absolute file path. Subsequent operations on the constructed object may fail if the user provided filePath doesn't correspond to a valid file on the disk.

    +

    The zero based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.

    +

    Font face simulation flags for algorithmic emboldening and italicization.

    +

    Contains newly created font face reference object, or nullptr in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890756 + HRESULT IDWriteFactory3::CreateFontFaceReference([In] IDWriteFontFile* fontFile,[In] unsigned int faceIndex,[In] DWRITE_FONT_SIMULATIONS fontSimulations,[Out] IDWriteFontFaceReference** fontFaceReference) + IDWriteFactory3::CreateFontFaceReference +
    + + +

    Creates a reference to a font given a full path.

    +
    +

    Absolute file path. Subsequent operations on the constructed object may fail if the user provided filePath doesn't correspond to a valid file on the disk.

    +

    Last modified time of the input file path. If the parameter is omitted, the function will access the font file to obtain its last write time, so the clients are encouraged to specify this value to avoid extra disk access. Subsequent operations on the constructed object may fail if the user provided lastWriteTime doesn't match the file on the disk.

    +

    The zero based index of a font face in cases when the font files contain a collection of font faces. If the font files contain a single face, this value should be zero.

    +

    Font face simulation flags for algorithmic emboldening and italicization.

    +

    Contains newly created font face reference object, or nullptr in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890756 + HRESULT IDWriteFactory3::CreateFontFaceReference([In] const wchar_t* filePath,[In, Optional] const FILETIME* lastWriteTime,[In] unsigned int faceIndex,[In] DWRITE_FONT_SIMULATIONS fontSimulations,[Out] IDWriteFontFaceReference** fontFaceReference) + IDWriteFactory3::CreateFontFaceReference +
    + + +

    Retrieves the list of system fonts.

    +
    +

    Holds the newly created font set object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890764 + HRESULT IDWriteFactory3::GetSystemFontSet([Out] IDWriteFontSet** fontSet) + IDWriteFactory3::GetSystemFontSet +
    + + +

    Creates an empty font set builder to add font face references and create a custom font set.

    +
    +

    Holds the newly created font set builder object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890759 + HRESULT IDWriteFactory3::CreateFontSetBuilder([Out] IDWriteFontSetBuilder** fontSetBuilder) + IDWriteFactory3::CreateFontSetBuilder +
    + + +

    Create a weight/width/slope tree from a set of fonts.

    +
    +

    A set of fonts to use to build the collection.

    +

    Holds the newly created font collection object, or null in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890755 + HRESULT IDWriteFactory3::CreateFontCollectionFromFontSet([In] IDWriteFontSet* fontSet,[Out] IDWriteFontCollection1** fontCollection) + IDWriteFactory3::CreateFontCollectionFromFontSet +
    + + +

    Retrieves a weight/width/slope tree of system fonts.

    +
    +

    If this parameter is TRUE, the function performs an immediate check for changes to the set of system fonts. If this parameter is , the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify TRUE if it has just installed a font and wants to be sure the font collection contains that font.

    +

    Holds the newly created font collection object, or null in case of failure.

    +

    If this parameter is TRUE, the function performs an immediate check for changes to the set of system fonts. If this parameter is , the function will still detect changes if the font cache service is running, but there may be some latency. For example, an application might specify TRUE if it has just installed a font and wants to be sure the font collection contains that font.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890761 + HRESULT IDWriteFactory3::GetSystemFontCollection([In] BOOL includeDownloadableFonts,[Out] IDWriteFontCollection1** fontCollection,[In] BOOL checkForUpdates) + IDWriteFactory3::GetSystemFontCollection +
    + + +

    Gets the font download queue associated with this factory object.

    +
    +

    Receives a reference to the font download queue interface.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890762 + HRESULT IDWriteFactory3::GetFontDownloadQueue([Out] IDWriteFontDownloadQueue** fontDownloadQueue) + IDWriteFactory3::GetFontDownloadQueue +
    + + +

    The root factory interface for all DirectWrite objects.

    +
    + + mt725315 + IDWriteFactory4 + IDWriteFactory4 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Translates a glyph run to a sequence of color glyph runs, which can be rendered to produce a color representation of the original "base" run.

    +
    +

    Horizontal and vertical origin of the base glyph run in pre-transform coordinates.

    +

    Pointer to the original "base" glyph run.

    +

    Optional glyph run description.

    +

    Which data formats the runs should be split into.

    +

    Measuring mode, needed to compute the origins of each glyph.

    +

    Matrix converting from the client's coordinate space to device coordinates (pixels), i.e., the world transform multiplied by any DPI scaling.

    +

    Zero-based index of the color palette to use. Valid indices are less than the number of palettes in the font, as returned by .

    +

    If the function succeeds, receives a reference to an enumerator object that can be used to obtain the color glyph runs. If the base run has no color glyphs, then the output reference is null and the method returns DWRITE_E_NOCOLOR.

    +

    Returns DWRITE_E_NOCOLOR if the font has no color information, the glyph run does not contain any color glyphs, or the specified color palette index is out of range. In this case, the client should render the original glyph run. Otherwise, returns a standard error code.

    + +

    Calling is equivalent to calling IDWriteFactory4::TranslateColorGlyph run with the following formats specified: ||.

    +
    + + mt761992 + HRESULT IDWriteFactory4::TranslateColorGlyphRun([In] D2D_POINT_2F baselineOrigin,[In] const DWRITE_GLYPH_RUN* glyphRun,[In, Optional] const DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription,[In] DWRITE_GLYPH_IMAGE_FORMATS desiredGlyphImageFormats,[In] DWRITE_MEASURING_MODE measuringMode,[In, Optional] const DWRITE_MATRIX* worldAndDpiTransform,[In] unsigned int colorPaletteIndex,[Out] IDWriteColorGlyphRunEnumerator1** colorLayers) + IDWriteFactory4::TranslateColorGlyphRun +
    + + +

    Converts glyph run placements to glyph origins.

    +
    +

    Structure containing the properties of the glyph run.

    +

    The position of the baseline origin, in DIPs, relative to the upper-left corner of the DIB.

    +

    On return contains the glyph origins for the glyphrun.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The transform and DPI have no effect on the origin scaling. They are solely used to compute glyph advances when not supplied and align glyphs in pixel aligned measuring modes.

    +
    + + mt725316 + HRESULT IDWriteFactory4::ComputeGlyphOrigins([In] const DWRITE_GLYPH_RUN* glyphRun,[In] D2D_POINT_2F baselineOrigin,[Out, Buffer] D2D_POINT_2F* glyphOrigins) + IDWriteFactory4::ComputeGlyphOrigins +
    + + +

    Converts glyph run placements to glyph origins.

    +
    +

    Structure containing the properties of the glyph run.

    +

    The measuring method for glyphs in the run, used with the other properties to determine the rendering mode.

    +

    The position of the baseline origin, in DIPs, relative to the upper-left corner of the DIB.

    +

    World transform multiplied by any DPI scaling. This is needed to compute glyph positions if the run contains color glyphs and the measuring mode is not . If this parameter is null, and identity transform is assumed.

    +

    On return contains the glyph origins for the glyphrun.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The transform and DPI have no effect on the origin scaling. They are solely used to compute glyph advances when not supplied and align glyphs in pixel aligned measuring modes.

    +
    + + mt725316 + HRESULT IDWriteFactory4::ComputeGlyphOrigins([In] const DWRITE_GLYPH_RUN* glyphRun,[In] DWRITE_MEASURING_MODE measuringMode,[In] D2D_POINT_2F baselineOrigin,[In, Optional] const DWRITE_MATRIX* worldAndDpiTransform,[Out, Buffer] D2D_POINT_2F* glyphOrigins) + IDWriteFactory4::ComputeGlyphOrigins +
    + + +

    Used to create all subsequent DirectWrite objects. This interface is the root factory interface for all DirectWrite objects.

    +
    + +

    Create an object by using the function.

     if (SUCCEEDED(hr))	
    +            { hr = ( , __uuidof(), reinterpret_cast<**>(&pDWriteFactory_) );	
    +            } 

    An object holds state information, such as font loader registration and cached font data. This state can be shared or isolated. Shared is recommended for most applications because it saves memory. However, isolated can be useful in situations where you want to have a separate state for some objects.

    +
    + + dd368183 + IDWriteFactory5 + IDWriteFactory5 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + + HRESULT IDWriteFactory5::CreateFontSetBuilder([Out] IDWriteFontSetBuilder1** fontSetBuilder) + IDWriteFactory5::CreateFontSetBuilder + + + +

    This topic describes various ways in which you can use custom fonts in your app.

    • Introduction?
    • Summary
    • Key
    • Fonts
    • Font
    • Common
      • Creating
      • Creating
      • Creating
      • Creating
    • Advanced
      • Combining
      • Using
      • Using
      • Supporting
    +
    + No documentation. + No documentation. + + mt492448 + HRESULT IDWriteFactory5::CreateInMemoryFontFileLoader([Out] IDWriteInMemoryFontFileLoader** newLoader) + IDWriteFactory5::CreateInMemoryFontFileLoader +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + + DWRITE_CONTAINER_TYPE IDWriteFactory5::AnalyzeContainerType([In, Buffer] const void* fileData,[In] unsigned int fileDataSize) + IDWriteFactory5::AnalyzeContainerType + + + +

    This topic describes various ways in which you can use custom fonts in your app.

    • Introduction?
    • Summary
    • Key
    • Fonts
    • Font
    • Common
      • Creating
      • Creating
      • Creating
      • Creating
    • Advanced
      • Combining
      • Using
      • Using
      • Supporting
    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + mt492448 + HRESULT IDWriteFactory5::UnpackFontFile([In] DWRITE_CONTAINER_TYPE containerType,[In, Buffer] const void* fileData,[In] unsigned int fileDataSize,[Out] IDWriteFontFileStream** unpackedFontStream) + IDWriteFactory5::UnpackFontFile +
    + + +

    Represents a physical font in a font collection. This interface is used to create font faces from physical fonts, or to retrieve information such as font face metrics or face names from existing font faces.

    +
    + + dd368213 + IDWriteFont + IDWriteFont +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the font family to which the specified font belongs.

    +
    + + dd371143 + GetFontFamily + GetFontFamily + HRESULT IDWriteFont::GetFontFamily([Out] IDWriteFontFamily** fontFamily) +
    + + +

    Gets the weight, or stroke thickness, of the specified font.

    +
    + + dd371162 + GetWeight + GetWeight + DWRITE_FONT_WEIGHT IDWriteFont::GetWeight() +
    + + +

    Gets the stretch, or width, of the specified font.

    +
    + + dd371156 + GetStretch + GetStretch + DWRITE_FONT_STRETCH IDWriteFont::GetStretch() +
    + + +

    Gets the style, or slope, of the specified font.

    +
    + + dd371159 + GetStyle + GetStyle + DWRITE_FONT_STYLE IDWriteFont::GetStyle() +
    + + +

    Determines whether the font is a symbol font.

    +
    + + dd371168 + IsSymbolFont + IsSymbolFont + BOOL IDWriteFont::IsSymbolFont() +
    + + +

    Gets a localized strings collection containing the face names for the font (such as Regular or Bold), indexed by locale name.

    +
    + + dd371140 + GetFaceNames + GetFaceNames + HRESULT IDWriteFont::GetFaceNames([Out] IDWriteLocalizedStrings** names) +
    + + +

    Gets a value that indicates what simulations are applied to the specified font.

    +
    + + dd371153 + GetSimulations + GetSimulations + DWRITE_FONT_SIMULATIONS IDWriteFont::GetSimulations() +
    + + +

    Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations.

    +
    + + dd371149 + GetMetrics + GetMetrics + void IDWriteFont::GetMetrics([Out] DWRITE_FONT_METRICS* fontMetrics) +
    + + +

    Gets the font family to which the specified font belongs.

    +
    +

    When this method returns, contains an address of a reference to the font family object to which the specified font belongs.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371143 + HRESULT IDWriteFont::GetFontFamily([Out] IDWriteFontFamily** fontFamily) + IDWriteFont::GetFontFamily +
    + + +

    Gets the weight, or stroke thickness, of the specified font.

    +
    +

    A value that indicates the weight for the specified font.

    + + dd371162 + DWRITE_FONT_WEIGHT IDWriteFont::GetWeight() + IDWriteFont::GetWeight +
    + + +

    Gets the stretch, or width, of the specified font.

    +
    +

    A value that indicates the type of stretch, or width, applied to the specified font.

    + + dd371156 + DWRITE_FONT_STRETCH IDWriteFont::GetStretch() + IDWriteFont::GetStretch +
    + + +

    Gets the style, or slope, of the specified font.

    +
    +

    A value that indicates the type of style, or slope, of the specified font.

    + + dd371159 + DWRITE_FONT_STYLE IDWriteFont::GetStyle() + IDWriteFont::GetStyle +
    + + +

    Determines whether the font is a symbol font.

    +
    +

    TRUE if the font is a symbol font; otherwise, .

    + + dd371168 + BOOL IDWriteFont::IsSymbolFont() + IDWriteFont::IsSymbolFont +
    + + +

    Gets a localized strings collection containing the face names for the font (such as Regular or Bold), indexed by locale name.

    +
    +

    When this method returns, contains an address to a reference to the newly created localized strings object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371140 + HRESULT IDWriteFont::GetFaceNames([Out] IDWriteLocalizedStrings** names) + IDWriteFont::GetFaceNames +
    + + +

    Gets a localized strings collection containing the specified informational strings, indexed by locale name.

    +
    +

    A value that identifies the informational string to get. For example, specifies a string that contains a description of the font.

    +

    When this method returns, contains an address of a reference to the newly created localized strings object.

    +

    When this method returns, TRUE if the font contains the specified string ID; otherwise, .

    + +

    If the font does not contain the string specified by informationalStringID, the return value is but informationalStrings receives a null reference and exists receives the value .

    +
    + + dd371147 + HRESULT IDWriteFont::GetInformationalStrings([In] DWRITE_INFORMATIONAL_STRING_ID informationalStringID,[Out, Optional] IDWriteLocalizedStrings** informationalStrings,[Out] BOOL* exists) + IDWriteFont::GetInformationalStrings +
    + + +

    Gets a value that indicates what simulations are applied to the specified font.

    +
    +

    A value that indicates one or more of the types of simulations (none, bold, or oblique) applied to the specified font.

    + + dd371153 + DWRITE_FONT_SIMULATIONS IDWriteFont::GetSimulations() + IDWriteFont::GetSimulations +
    + + +

    Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations.

    +
    +

    When this method returns, contains a structure that has font metrics for the current font face. The metrics returned by this function are in font design units.

    + + dd371149 + void IDWriteFont::GetMetrics([Out] DWRITE_FONT_METRICS* fontMetrics) + IDWriteFont::GetMetrics +
    + + +

    Determines whether the font supports a specified character.

    +
    +

    A Unicode (UCS-4) character value for the method to inspect.

    +

    When this method returns, TRUE if the font supports the specified character; otherwise, .

    + + dd371165 + HRESULT IDWriteFont::HasCharacter([In] unsigned int unicodeValue,[Out] BOOL* exists) + IDWriteFont::HasCharacter +
    + + +

    Creates a font face object for the font.

    +
    +

    When this method returns, contains an address of a reference to the newly created font face object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371137 + HRESULT IDWriteFont::CreateFontFace([Out, Fast] IDWriteFontFace** fontFace) + IDWriteFont::CreateFontFace +
    + + +

    Represents a physical font in a font collection.

    +
    + + hh780404 + IDWriteFont1 + IDWriteFont1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations.

    +
    + + hh780405 + GetMetrics + GetMetrics + void IDWriteFont1::GetMetrics([Out] DWRITE_FONT_METRICS1* fontMetrics) +
    + + +

    Gets the PANOSE values from the font and is used for font selection and matching.

    +
    + +

    If the font has no PANOSE values, they are set to 'any' (0) and DirectWrite doesn't simulate those values.

    +
    + + hh780406 + GetPanose + GetPanose + void IDWriteFont1::GetPanose([Out] DWRITE_PANOSE* panose) +
    + + +

    Determines if the font is monospaced, that is, the characters are the same fixed-pitch width (non-proportional).

    +
    + + hh780408 + IsMonospacedFont + IsMonospacedFont + BOOL IDWriteFont1::IsMonospacedFont() +
    + + +

    Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations.

    +
    +

    A filled structure that has font metrics for the current font face. The metrics returned by this method are in font design units.

    + + hh780405 + void IDWriteFont1::GetMetrics([Out] DWRITE_FONT_METRICS1* fontMetrics) + IDWriteFont1::GetMetrics +
    + + +

    Gets the PANOSE values from the font and is used for font selection and matching.

    +
    +

    A reference to the structure to fill in.

    + +

    If the font has no PANOSE values, they are set to 'any' (0) and DirectWrite doesn't simulate those values.

    +
    + + hh780406 + void IDWriteFont1::GetPanose([Out] DWRITE_PANOSE* panose) + IDWriteFont1::GetPanose +
    + + +

    Retrieves the list of character ranges supported by a font.

    +
    +

    The maximum number of character ranges passed in from the client.

    +

    An array of structures that are filled with the character ranges.

    +

    A reference to the actual number of character ranges, regardless of the maximum count.

    +

    This method can return one of these values.

    Return valueDescription

    The method executed successfully.

    E_NOT_SUFFICIENT_BUFFER

    The buffer is too small. The actualRangeCount was more than the maxRangeCount.

    ?

    + +

    The list of character ranges supported by a font, is useful for scenarios like character picking, glyph display, and efficient font selection lookup. GetUnicodeRanges is similar to GDI's GetFontUnicodeRanges, except that it returns the full Unicode range, not just 16-bit UCS-2.

    These ranges are from the cmap, not the OS/2::ulCodePageRange1.

    If this method is unavailable, you can use the method to check for missing glyphs. The method returns the 0 index for glyphs that aren't present in the font.

    The method is often simpler in cases where you need to check a single character or a series of single characters in succession, such as in font fallback.

    +
    + + hh780407 + HRESULT IDWriteFont1::GetUnicodeRanges([In] unsigned int maxRangeCount,[Out, Buffer, Optional] DWRITE_UNICODE_RANGE* unicodeRanges,[Out] unsigned int* actualRangeCount) + IDWriteFont1::GetUnicodeRanges +
    + + +

    Determines if the font is monospaced, that is, the characters are the same fixed-pitch width (non-proportional).

    +
    +

    Returns true if the font is monospaced, else it returns false.

    + + hh780408 + BOOL IDWriteFont1::IsMonospacedFont() + IDWriteFont1::IsMonospacedFont +
    + + +

    Represents a physical font in a font collection.

    This interface adds the ability to check if a color rendering path is potentially necessary.

    +
    + + dn280452 + IDWriteFont2 + IDWriteFont2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Enables determining if a color rendering path is potentially necessary.

    +
    + + dn280453 + IsColorFont + IsColorFont + BOOL IDWriteFont2::IsColorFont() +
    + + +

    Enables determining if a color rendering path is potentially necessary.

    +
    +

    Returns TRUE if the font has color information (COLR and CPAL tables); otherwise .

    + + dn280453 + BOOL IDWriteFont2::IsColorFont() + IDWriteFont2::IsColorFont +
    + + +

    Represents a font in a font collection.

    +
    + + dn890766 + IDWriteFont3 + IDWriteFont3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a font face reference that identifies this font.

    +
    + + dn890771 + GetFontFaceReference + GetFontFaceReference + HRESULT IDWriteFont3::GetFontFaceReference([Out] IDWriteFontFaceReference** fontFaceReference) +
    + + +

    Gets the current locality of the font.

    +
    + +

    For fully local files, the result will always be . A downloadable file may be any of the states, and this function may change between calls.

    +
    + + mt725319 + GetLocality + GetLocality + DWRITE_LOCALITY IDWriteFont3::GetLocality() +
    + + +

    Creates a font face object for the font.

    +
    +

    A reference to a memory block that receives a reference to a interface for the newly created font face object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    This method returns DWRITE_E_REMOTEFONT if it could not construct a remote font.

    + + dn890767 + HRESULT IDWriteFont3::CreateFontFace([Out] IDWriteFontFace3** fontFace) + IDWriteFont3::CreateFontFace +
    + + +

    Compares two instances of font references for equality.

    +
    +

    A reference to a interface for the other font instance to compare to this font instance.

    +

    Returns whether the two instances of font references are equal. Returns TRUE if the two instances are equal; otherwise, .

    + + dn890769 + BOOL IDWriteFont3::Equals([In] IDWriteFont* font) + IDWriteFont3::Equals +
    + + +

    Gets a font face reference that identifies this font.

    +
    +

    A reference to a memory block that receives a reference to a interface for the newly created font face reference object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn890771 + HRESULT IDWriteFont3::GetFontFaceReference([Out] IDWriteFontFaceReference** fontFaceReference) + IDWriteFont3::GetFontFaceReference +
    + + + No documentation. + + No documentation. + No documentation. + + BOOL IDWriteFont3::HasCharacter([In] unsigned int unicodeValue) + IDWriteFont3::HasCharacter + + + +

    Gets the current locality of the font.

    +
    +

    Returns the current locality of the font.

    + +

    For fully local files, the result will always be . A downloadable file may be any of the states, and this function may change between calls.

    +
    + + mt725319 + DWRITE_LOCALITY IDWriteFont3::GetLocality() + IDWriteFont3::GetLocality +
    + + +

    An object that encapsulates a set of fonts, such as the set of fonts installed on the system, or the set of fonts in a particular directory. The font collection API can be used to discover what font families and fonts are available, and to obtain some metadata about the fonts.

    +
    + + dn933224 + IDWriteFontCollection1 + IDWriteFontCollection1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the underlying font set used by this collection.

    +
    + + dn933225 + GetFontSet + GetFontSet + HRESULT IDWriteFontCollection1::GetFontSet([Out] IDWriteFontSet** fontSet) +
    + + +

    Gets the underlying font set used by this collection.

    +
    +

    Returns the font set used by the collection.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn933225 + HRESULT IDWriteFontCollection1::GetFontSet([Out] IDWriteFontSet** fontSet) + IDWriteFontCollection1::GetFontSet +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT IDWriteFontCollection1::GetFontFamily([In] unsigned int index,[Out] IDWriteFontFamily1** fontFamily) + IDWriteFontCollection1::GetFontFamily + + + +

    Application-defined callback interface that receives notifications from the font download queue ( interface). Callbacks will occur on the downloading thread, and objects must be prepared to handle calls on their methods from other threads at any time.

    +
    + + dn890775 + IDWriteFontDownloadListener + IDWriteFontDownloadListener +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    The DownloadCompleted method is called back on an arbitrary thread when a download operation ends.

    +
    +

    Pointer to the download queue interface on which the BeginDownload method was called.

    +

    Optional context object that was passed to BeginDownload. AddRef is called on the context object by BeginDownload and Release is called after the DownloadCompleted method returns.

    +

    Result of the download operation.

    + + dn890776 + void IDWriteFontDownloadListener::DownloadCompleted([In] IDWriteFontDownloadQueue* downloadQueue,[In, Optional] IUnknown* context,[In] HRESULT downloadResult) + IDWriteFontDownloadListener::DownloadCompleted +
    + + +

    +

    + + dn890778 + IDWriteFontDownloadQueue + IDWriteFontDownloadQueue +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Determines whether the download queue is empty. Note that the queue does not include requests that are already being downloaded. Calling BeginDownload clears the queue.

    +
    + + dn894558 + IsEmpty + IsEmpty + BOOL IDWriteFontDownloadQueue::IsEmpty() +
    + + +

    Gets the current generation number of the download queue, which is incremented every time after a download completes, whether failed or successful. This cookie value can be compared against cached data to determine if it is stale.

    +
    + + dn894557 + GetGenerationCount + GetGenerationCount + unsigned longlong IDWriteFontDownloadQueue::GetGenerationCount() +
    + + +

    Registers a client-defined listener object that receives download notifications. All registered listener's DownloadCompleted will be called after BeginDownload completes.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    An can also be passed to BeginDownload using the context parameter, rather than globally registered to the queue.

    +
    + + dn890779 + HRESULT IDWriteFontDownloadQueue::AddListener([In] IDWriteFontDownloadListener* listener,[Out] unsigned int* token) + IDWriteFontDownloadQueue::AddListener +
    + + +

    Unregisters a notification handler that was previously registered using AddListener.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894559 + HRESULT IDWriteFontDownloadQueue::RemoveListener([In] unsigned int token) + IDWriteFontDownloadQueue::RemoveListener +
    + + +

    Determines whether the download queue is empty. Note that the queue does not include requests that are already being downloaded. Calling BeginDownload clears the queue.

    +
    +

    TRUE if the queue is empty, if there are requests pending for BeginDownload.

    + + dn894558 + BOOL IDWriteFontDownloadQueue::IsEmpty() + IDWriteFontDownloadQueue::IsEmpty +
    + + +

    Begins an asynchronous download operation. The download operation executes in the background until it completes or is cancelled by a CancelDownload call.

    +
    + No documentation. +

    Returns if a download was successfully begun, S_FALSE if the queue was empty, or a standard error code.

    + +

    BeginDownload removes all download requests from the queue, transferring them to a background download operation. If any previous downloads are still ongoing when BeginDownload is called again, the new download does not complete until the previous downloads have finished. If the queue is empty and no active downloads are pending, the DownloadCompleted callback is called immediately with DWRITE_DOWNLOAD_RESULT_NONE.

    +
    + + dn894554 + HRESULT IDWriteFontDownloadQueue::BeginDownload([In, Optional] IUnknown* context) + IDWriteFontDownloadQueue::BeginDownload +
    + + +

    Removes all download requests from the queue and cancels any active download operations.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894556 + HRESULT IDWriteFontDownloadQueue::CancelDownload() + IDWriteFontDownloadQueue::CancelDownload +
    + + +

    Gets the current generation number of the download queue, which is incremented every time after a download completes, whether failed or successful. This cookie value can be compared against cached data to determine if it is stale.

    +
    +

    The current generation number of the download queue.

    + + dn894557 + unsigned longlong IDWriteFontDownloadQueue::GetGenerationCount() + IDWriteFontDownloadQueue::GetGenerationCount +
    + + +

    Represents an absolute reference to a font face.

    This interface contains the font face type, appropriate file references, and face identification data.

    You obtain various font data like metrics, names, and glyph outlines from the interface.

    +
    + + hh780409 + IDWriteFontFace1 + IDWriteFontFace1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations.

    +
    + + hh780415 + GetMetrics + GetMetrics + void IDWriteFontFace1::GetMetrics([Out] DWRITE_FONT_METRICS1* fontMetrics) +
    + + +

    Gets caret metrics for the font in design units.

    +
    + +

    Caret metrics are used by text editors for drawing the correct caret placement and slant.

    +
    + + hh780410 + GetCaretMetrics + GetCaretMetrics + void IDWriteFontFace1::GetCaretMetrics([Out] DWRITE_CARET_METRICS* caretMetrics) +
    + + +

    Determines whether the font of a text range is monospaced, that is, the font characters are the same fixed-pitch width.

    +
    + + hh780421 + IsMonospacedFont + IsMonospacedFont + BOOL IDWriteFontFace1::IsMonospacedFont() +
    + + +

    Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a font face and are used by applications for layout calculations.

    +
    +

    A filled structure that holds metrics for the current font face element. The metrics returned by this method are in font design units.

    + + hh780415 + void IDWriteFontFace1::GetMetrics([Out] DWRITE_FONT_METRICS1* fontMetrics) + IDWriteFontFace1::GetMetrics +
    + + +

    Obtains design units and common metrics for the font face. These metrics are applicable to all the glyphs within a fontface and are used by applications for layout calculations.

    +
    +

    The logical size of the font in DIP units.

    +

    The number of physical pixels per DIP.

    +

    An optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and pixelsPerDip.

    +

    A reference to a structure to fill in. The metrics returned by this function are in font design units.

    +

    Standard error code.

    + + hh780413 + HRESULT IDWriteFontFace1::GetGdiCompatibleMetrics([In] float emSize,[In] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[Out] DWRITE_FONT_METRICS1* fontMetrics) + IDWriteFontFace1::GetGdiCompatibleMetrics +
    + + +

    Gets caret metrics for the font in design units.

    +
    +

    A reference to the structure that is filled.

    + +

    Caret metrics are used by text editors for drawing the correct caret placement and slant.

    +
    + + hh780410 + void IDWriteFontFace1::GetCaretMetrics([Out] DWRITE_CARET_METRICS* caretMetrics) + IDWriteFontFace1::GetCaretMetrics +
    + + +

    Retrieves a list of character ranges supported by a font.

    +
    +

    Maximum number of character ranges passed in from the client.

    +

    An array of structures that are filled with the character ranges.

    +

    A reference to the actual number of character ranges, regardless of the maximum count.

    +

    This method can return one of these values.

    Return valueDescription

    The method executed successfully.

    E_NOT_SUFFICIENT_BUFFER

    The buffer is too small. The actualRangeCount was more than the maxRangeCount.

    ?

    + +

    A list of character ranges supported by the font is useful for scenarios like character picking, glyph display, and efficient font selection lookup. This is similar to GDI's GetFontUnicodeRanges, except that it returns the full Unicode range, not just 16-bit UCS-2.

    These ranges are from the cmap, not the OS/2::ulCodePageRange1.

    If this method is unavailable, you can use the method to check for missing glyphs. The method returns the 0 index for glyphs that aren't present in the font.

    The method is often simpler in cases where you need to check a single character or a series of single characters in succession, such as in font fallback.

    +
    + + hh780417 + HRESULT IDWriteFontFace1::GetUnicodeRanges([In] unsigned int maxRangeCount,[Out, Buffer, Optional] DWRITE_UNICODE_RANGE* unicodeRanges,[Out] unsigned int* actualRangeCount) + IDWriteFontFace1::GetUnicodeRanges +
    + + +

    Determines whether the font of a text range is monospaced, that is, the font characters are the same fixed-pitch width.

    +
    +

    Returns TRUE if the font is monospaced, otherwise it returns .

    + + hh780421 + BOOL IDWriteFontFace1::IsMonospacedFont() + IDWriteFontFace1::IsMonospacedFont +
    + + +

    Retrieves the advances in design units for a sequences of glyphs.

    +
    +

    The number of glyphs to retrieve advances for.

    +

    An array of glyph id's to retrieve advances for.

    +

    The returned advances in font design units for each glyph.

    +

    Retrieve the glyph's vertical advance height rather than horizontal advance widths.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This is equivalent to calling GetGlyphMetrics and using only the advance width and height.

    +
    + + hh780411 + HRESULT IDWriteFontFace1::GetDesignGlyphAdvances([In] unsigned int glyphCount,[In, Buffer] const unsigned short* glyphIndices,[Out, Buffer] int* glyphAdvances,[In] BOOL isSideways) + IDWriteFontFace1::GetDesignGlyphAdvances +
    + + +

    Returns the pixel-aligned advances for a sequences of glyphs.

    +
    +

    Logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch.

    +

    Number of physical pixels per DIP. For example, if the DPI of the rendering surface is 96 this value is 1.0f. If the DPI is 120, this value is 120.0f/96.

    +

    Optional transform applied to the glyphs and their positions. This transform is applied after the scaling specified by the font size and pixelsPerDip.

    +

    When , the metrics are the same as GDI aliased text (). When TRUE, the metrics are the same as those measured by GDI using a font using CLEARTYPE_NATURAL_QUALITY ().

    +

    Retrieve the glyph's vertical advances rather than horizontal advances.

    +

    Total glyphs to retrieve adjustments for.

    +

    An array of glyph id's to retrieve advances.

    +

    The returned advances in font design units for each glyph.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This is equivalent to calling GetGdiCompatibleGlyphMetrics and using only the advance width and height.

    Like GetGdiCompatibleGlyphMetrics, these are in design units, meaning they must be scaled down by DWRITE_FONT_METRICS::designUnitsPerEm.

    +
    + + hh780412 + HRESULT IDWriteFontFace1::GetGdiCompatibleGlyphAdvances([In] float emSize,[In] float pixelsPerDip,[In, Optional] const DWRITE_MATRIX* transform,[In] BOOL useGdiNatural,[In] BOOL isSideways,[In] unsigned int glyphCount,[In, Buffer] const unsigned short* glyphIndices,[Out, Buffer] int* glyphAdvances) + IDWriteFontFace1::GetGdiCompatibleGlyphAdvances +
    + + +

    Retrieves the kerning pair adjustments from the font's kern table.

    +
    +

    Number of glyphs to retrieve adjustments for.

    +

    An array of glyph id's to retrieve adjustments for.

    +

    The advances, returned in font design units, for each glyph. The last glyph adjustment is zero.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    GetKerningPairAdjustments isn't a direct replacement for GDI's character based GetKerningPairs, but it serves the same role, without the client needing to cache them locally. GetKerningPairAdjustments also uses glyph id's directly rather than UCS-2 characters (how the kern table actually stores them), which avoids glyph collapse and ambiguity, such as the dash and hyphen, or space and non-breaking space.

    Newer fonts may have only GPOS kerning instead of the legacy pair-table kerning. Such fonts, like Gabriola, will only return 0's for adjustments. GetKerningPairAdjustments doesn't virtualize and flatten these GPOS entries into kerning pairs.

    You can realize a performance benefit by calling to determine whether you need to call GetKerningPairAdjustments. If you previously called and it returned , you can avoid calling GetKerningPairAdjustments because the font has no kerning pair-table entries. That is, in this situation, a call to GetKerningPairAdjustments would be a no-op.

    +
    + + hh780414 + HRESULT IDWriteFontFace1::GetKerningPairAdjustments([In] unsigned int glyphCount,[In, Buffer] const unsigned short* glyphIndices,[Out, Buffer] int* glyphAdvanceAdjustments) + IDWriteFontFace1::GetKerningPairAdjustments +
    + + +

    Determines whether the font supports pair-kerning.

    +
    +

    Returns TRUE if the font supports kerning pairs, otherwise .

    + +

    If the font doesn't support pair table kerning, you don't need to call because it would retrieve all zeroes.

    +
    + + hh780419 + BOOL IDWriteFontFace1::HasKerningPairs() + IDWriteFontFace1::HasKerningPairs +
    + + +

    Determines the recommended rendering mode for the font, using the specified size and rendering parameters.

    +
    +

    The logical size of the font in DIP units. A DIP ("device-independent pixel") equals 1/96 inch.

    +

    The number of physical pixels per DIP in a horizontal position. For example, if the DPI of the rendering surface is 96, this value is 1.0f. If the DPI is 120, this value is 120.0f/96.

    +

    The number of physical pixels per DIP in a vertical position. For example, if the DPI of the rendering surface is 96, this value is 1.0f. If the DPI is 120, this value is 120.0f/96.

    +

    Specifies the world transform.

    +

    Whether the glyphs in the run are sideways or not.

    +

    A -typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.

    +

    The measuring method that will be used for glyphs in the font. Renderer implementations may choose different rendering modes for different measuring methods, for example:

    • for
    • for
    • for
    +

    When this method returns, contains a value that indicates the recommended rendering mode to use.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method should be used to determine the actual rendering mode in cases where the rendering mode of the rendering params object is .

    +
    + + hh780416 + HRESULT IDWriteFontFace1::GetRecommendedRenderingMode([In] float fontEmSize,[In] float dpiX,[In] float dpiY,[In, Optional] const DWRITE_MATRIX* transform,[In] BOOL isSideways,[In] DWRITE_OUTLINE_THRESHOLD outlineThreshold,[In] DWRITE_MEASURING_MODE measuringMode,[Out] DWRITE_RENDERING_MODE* renderingMode) + IDWriteFontFace1::GetRecommendedRenderingMode +
    + + +

    Retrieves the vertical forms of the nominal glyphs retrieved from GetGlyphIndices.

    +
    +

    The number of glyphs to retrieve.

    +

    Original glyph indices from cmap.

    +

    The vertical form of glyph indices.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The retrieval uses the font's 'vert' table. This is used in CJK vertical layout so the correct characters are shown.

    Call GetGlyphIndices to get the nominal glyph indices, followed by calling this to remap the to the substituted forms, when the run is sideways, and the font has vertical glyph variants. See HasVerticalGlyphVariants for more info. +

    +
    + + hh780418 + HRESULT IDWriteFontFace1::GetVerticalGlyphVariants([In] unsigned int glyphCount,[In, Buffer] const unsigned short* nominalGlyphIndices,[Out, Buffer] unsigned short* verticalGlyphIndices) + IDWriteFontFace1::GetVerticalGlyphVariants +
    + + +

    Determines whether the font has any vertical glyph variants.

    +
    +

    Returns TRUE if the font contains vertical glyph variants, otherwise .

    + +

    For OpenType fonts, HasVerticalGlyphVariants returns TRUE if the font contains a "vert" feature.

    retrieves the vertical forms of the nominal glyphs that are retrieved from .

    +
    + + hh780420 + BOOL IDWriteFontFace1::HasVerticalGlyphVariants() + IDWriteFontFace1::HasVerticalGlyphVariants +
    + + +

    Represents an absolute reference to a font face.

    This interface contains the font face type, appropriate file references, and face identification data.

    You obtain various font data like metrics, names, and glyph outlines from the interface.

    This interface adds the ability to check if a color rendering path is potentially necessary.

    +
    + + dn280454 + IDWriteFontFace2 + IDWriteFontFace2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Allows you to determine if a color rendering path is potentially necessary.

    +
    + + dn280457 + IsColorFont + IsColorFont + BOOL IDWriteFontFace2::IsColorFont() +
    + + +

    Gets the number of color palettes defined by the font.

    +
    + + dn312080 + GetColorPaletteCount + GetColorPaletteCount + unsigned int IDWriteFontFace2::GetColorPaletteCount() +
    + + +

    Get the number of entries in each color palette.

    +
    + + dn312082 + GetPaletteEntryCount + GetPaletteEntryCount + unsigned int IDWriteFontFace2::GetPaletteEntryCount() +
    + + +

    Allows you to determine if a color rendering path is potentially necessary.

    +
    +

    Returns TRUE if a color rendering path is potentially necessary.

    + + dn280457 + BOOL IDWriteFontFace2::IsColorFont() + IDWriteFontFace2::IsColorFont +
    + + +

    Gets the number of color palettes defined by the font.

    +
    +

    The return value is zero if the font has no color information. Color fonts are required to define at least one palette, with palette index zero reserved as the default palette.

    + + dn312080 + unsigned int IDWriteFontFace2::GetColorPaletteCount() + IDWriteFontFace2::GetColorPaletteCount +
    + + +

    Get the number of entries in each color palette.

    +
    +

    The number of entries in each color palette. All color palettes in a font have the same number of palette entries. The return value is zero if the font has no color information.

    + + dn312082 + unsigned int IDWriteFontFace2::GetPaletteEntryCount() + IDWriteFontFace2::GetPaletteEntryCount +
    + + +

    Gets color values from the font's color palette.

    +
    +

    Zero-based index of the color palette. If the font does not have a palette with the specified index, the method returns DWRITE_E_NOCOLOR.

    +

    Zero-based index of the first palette entry to read.

    +

    Number of palette entries to read.

    +

    Array that receives the color values.

    +

    This method can return one of these values.

    Return valueDescription
    E_INVALIDARG

    The sum of firstEntryIndex and entryCount is greater than the actual number of palette entries that's returned by the GetPaletteEntryCount method.

    DWRITE_E_NOCOLOR

    The font doesn't have a palette with the specified palette index.

    ?

    + + dn312081 + HRESULT IDWriteFontFace2::GetPaletteEntries([In] unsigned int colorPaletteIndex,[In] unsigned int firstEntryIndex,[In] unsigned int entryCount,[Out, Buffer] D3DCOLORVALUE* paletteEntries) + IDWriteFontFace2::GetPaletteEntries +
    + + +

    Determines the recommended text rendering and grid-fit mode to be used based on the font, size, world transform, and measuring mode.

    +
    +

    Logical font size in DIPs.

    +

    Number of pixels per logical inch in the horizontal direction.

    +

    Number of pixels per logical inch in the vertical direction.

    +

    A structure that describes the world transform.

    +

    Specifies whether the font is sideways. TRUE if the font is sideways; otherwise, .

    +

    A -typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.

    +

    A -typed value that specifies the method used to measure during text layout. For proper glyph spacing, this method returns a rendering mode that is compatible with the specified measuring mode.

    +

    A reference to a interface for the rendering parameters object. This parameter is necessary in case the rendering parameters object overrides the rendering mode.

    +

    A reference to a variable that receives a -typed value for the recommended rendering mode.

    +

    A reference to a variable that receives a -typed value for the recommended grid-fit mode.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894560 + HRESULT IDWriteFontFace2::GetRecommendedRenderingMode([In] float fontEmSize,[In] float dpiX,[In] float dpiY,[In, Optional] const DWRITE_MATRIX* transform,[In] BOOL isSideways,[In] DWRITE_OUTLINE_THRESHOLD outlineThreshold,[In] DWRITE_MEASURING_MODE measuringMode,[In, Optional] IDWriteRenderingParams* renderingParams,[Out] DWRITE_RENDERING_MODE* renderingMode,[Out] DWRITE_GRID_FIT_MODE* gridFitMode) + IDWriteFontFace2::GetRecommendedRenderingMode +
    + + +

    Represents an absolute reference to a font face.

    +
    + + dn894561 + IDWriteFontFace3 + IDWriteFontFace3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a font face reference that identifies this font.

    +
    + + dn894566 + GetFontFaceReference + GetFontFaceReference + HRESULT IDWriteFontFace3::GetFontFaceReference([Out] IDWriteFontFaceReference** fontFaceReference) +
    + + +

    Gets the PANOSE values from the font, used for font selection and matching.

    +
    + +

    This method doesn't simulate these values, such as substituting a weight or proportion inferred on other values. If the font doesn't specify them, they are all set to 'any' (0).

    +
    + + dn894568 + GetPanose + GetPanose + void IDWriteFontFace3::GetPanose([Out] DWRITE_PANOSE* panose) +
    + + +

    Gets the weight of this font.

    +
    + + dn894572 + GetWeight + GetWeight + DWRITE_FONT_WEIGHT IDWriteFontFace3::GetWeight() +
    + + +

    Gets the stretch (also known as width) of this font.

    +
    + + dn894570 + GetStretch + GetStretch + DWRITE_FONT_STRETCH IDWriteFontFace3::GetStretch() +
    + + +

    Gets the style (also known as slope) of this font.

    +
    + + dn894571 + GetStyle + GetStyle + DWRITE_FONT_STYLE IDWriteFontFace3::GetStyle() +
    + + +

    Creates a localized strings object that contains the family names for the font family, indexed by locale name.

    +
    + + dn894565 + GetFamilyNames + GetFamilyNames + HRESULT IDWriteFontFace3::GetFamilyNames([Out] IDWriteLocalizedStrings** names) +
    + + +

    Creates a localized strings object that contains the face names for the font (for example, Regular or Bold), indexed by locale name.

    +
    + + dn894564 + GetFaceNames + GetFaceNames + HRESULT IDWriteFontFace3::GetFaceNames([Out] IDWriteLocalizedStrings** names) +
    + + +

    Gets a font face reference that identifies this font.

    +
    +

    A reference to a memory block that receives a reference to a interface for the newly created font face reference object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894566 + HRESULT IDWriteFontFace3::GetFontFaceReference([Out] IDWriteFontFaceReference** fontFaceReference) + IDWriteFontFace3::GetFontFaceReference +
    + + +

    Gets the PANOSE values from the font, used for font selection and matching.

    +
    +

    A reference to a structure that receives the PANOSE values from the font.

    + +

    This method doesn't simulate these values, such as substituting a weight or proportion inferred on other values. If the font doesn't specify them, they are all set to 'any' (0).

    +
    + + dn894568 + void IDWriteFontFace3::GetPanose([Out] DWRITE_PANOSE* panose) + IDWriteFontFace3::GetPanose +
    + + +

    Gets the weight of this font.

    +
    +

    Returns a -typed value that specifies the density of a typeface, in terms of the lightness or heaviness of the strokes.

    + + dn894572 + DWRITE_FONT_WEIGHT IDWriteFontFace3::GetWeight() + IDWriteFontFace3::GetWeight +
    + + +

    Gets the stretch (also known as width) of this font.

    +
    +

    Returns a -typed value that specifies the degree to which a font has been stretched compared to a font's normal aspect ratio.

    + + dn894570 + DWRITE_FONT_STRETCH IDWriteFontFace3::GetStretch() + IDWriteFontFace3::GetStretch +
    + + +

    Gets the style (also known as slope) of this font.

    +
    +

    Returns a -typed value that specifies the style of the font.

    + + dn894571 + DWRITE_FONT_STYLE IDWriteFontFace3::GetStyle() + IDWriteFontFace3::GetStyle +
    + + +

    Creates a localized strings object that contains the family names for the font family, indexed by locale name.

    +
    +

    A reference to a memory block that receives a reference to a interface for the newly created localized strings object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894565 + HRESULT IDWriteFontFace3::GetFamilyNames([Out] IDWriteLocalizedStrings** names) + IDWriteFontFace3::GetFamilyNames +
    + + +

    Creates a localized strings object that contains the face names for the font (for example, Regular or Bold), indexed by locale name.

    +
    +

    A reference to a memory block that receives a reference to a interface for the newly created localized strings object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894564 + HRESULT IDWriteFontFace3::GetFaceNames([Out] IDWriteLocalizedStrings** names) + IDWriteFontFace3::GetFaceNames +
    + + +

    Gets a localized strings collection that contains the specified informational strings, indexed by locale name.

    +
    +

    A -typed value that identifies the strings to get.

    +

    A reference to a memory block that receives a reference to a interface for the newly created localized strings object.

    +

    A reference to a variable that receives whether the font contains the specified string ID. TRUE if the font contains the specified string ID; otherwise, .

    +

    If the font doesn't contain the specified string, the return value is , but informationalStrings receives a null reference and exists receives the value .

    + + dn894567 + HRESULT IDWriteFontFace3::GetInformationalStrings([In] DWRITE_INFORMATIONAL_STRING_ID informationalStringID,[Out, Optional] IDWriteLocalizedStrings** informationalStrings,[Out] BOOL* exists) + IDWriteFontFace3::GetInformationalStrings +
    + + +

    Determines whether the font supports the specified character.

    +
    +

    A Unicode (UCS-4) character value.

    +

    Returns whether the font supports the specified character. Returns TRUE if the font has the specified character; otherwise, .

    + + dn894573 + BOOL IDWriteFontFace3::HasCharacter([In] unsigned int unicodeValue) + IDWriteFontFace3::HasCharacter +
    + + +

    Determines the recommended text rendering and grid-fit mode to be used based on the font, size, world transform, and measuring mode.

    +
    +

    Logical font size in DIPs.

    +

    Number of pixels per logical inch in the horizontal direction.

    +

    Number of pixels per logical inch in the vertical direction.

    +

    A structure that describes the world transform.

    +

    Specifies whether the font is sideways. TRUE if the font is sideways; otherwise, .

    +

    A -typed value that specifies the quality of the graphics system's outline rendering, affects the size threshold above which outline rendering is used.

    +

    A -typed value that specifies the method used to measure during text layout. For proper glyph spacing, this method returns a rendering mode that is compatible with the specified measuring mode.

    +

    A reference to a interface for the rendering parameters object. This parameter is necessary in case the rendering parameters object overrides the rendering mode.

    +

    A reference to a variable that receives a -typed value for the recommended rendering mode.

    +

    A reference to a variable that receives a -typed value for the recommended grid-fit mode.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894569 + HRESULT IDWriteFontFace3::GetRecommendedRenderingMode([In] float fontEmSize,[In] float dpiX,[In] float dpiY,[In, Optional] const DWRITE_MATRIX* transform,[In] BOOL isSideways,[In] DWRITE_OUTLINE_THRESHOLD outlineThreshold,[In] DWRITE_MEASURING_MODE measuringMode,[In, Optional] IDWriteRenderingParams* renderingParams,[Out] DWRITE_RENDERING_MODE1* renderingMode,[Out] DWRITE_GRID_FIT_MODE* gridFitMode) + IDWriteFontFace3::GetRecommendedRenderingMode +
    + + +

    Determines whether the character is locally downloaded from the font.

    +
    +

    A Unicode (UCS-4) character value.

    +

    Returns TRUE if the font has the specified character locally available, if not or if the font does not support that character.

    + + dn894574 + BOOL IDWriteFontFace3::IsCharacterLocal([In] unsigned int unicodeValue) + IDWriteFontFace3::IsCharacterLocal +
    + + +

    Determines whether the glyph is locally downloaded from the font.

    +
    +

    Glyph identifier.

    +

    Returns TRUE if the font has the specified glyph locally available.

    + + dn894575 + BOOL IDWriteFontFace3::IsGlyphLocal([In] unsigned short glyphId) + IDWriteFontFace3::IsGlyphLocal +
    + + +

    Determines whether the specified characters are local.

    +
    +

    Array of characters.

    +

    The number of elements in the character array.

    +

    Specifies whether to enqueue a download request if any of the specified characters are not local.

    +

    Receives TRUE if all of the specified characters are local, if any of the specified characters are remote.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894562 + HRESULT IDWriteFontFace3::AreCharactersLocal([In, Buffer] const wchar_t* characters,[In] unsigned int characterCount,[In] BOOL enqueueIfNotLocal,[Out] BOOL* isLocal) + IDWriteFontFace3::AreCharactersLocal +
    + + +

    Determines whether the specified glyphs are local.

    +
    +

    Array of glyph indices.

    +

    The number of elements in the glyph index array.

    +

    Specifies whether to enqueue a download request if any of the specified glyphs are not local.

    +

    Receives TRUE if all of the specified glyphs are local, if any of the specified glyphs are remote.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894563 + HRESULT IDWriteFontFace3::AreGlyphsLocal([In, Buffer] const unsigned short* glyphIndices,[In] unsigned int glyphCount,[In] BOOL enqueueIfNotLocal,[Out] BOOL* isLocal) + IDWriteFontFace3::AreGlyphsLocal +
    + + +

    Represents an absolute reference to a font face. It contains font face type, appropriate file references and face identification data. Various font data such as metrics, names and glyph outlines are obtained from .

    +
    + + mt725320 + IDWriteFontFace4 + IDWriteFontFace4 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the available image formats of a specific glyph and ppem.

    +
    + +

    Glyphs often have at least TrueType or CFF outlines, but they may also have SVG outlines, or they may have only bitmaps with no TrueType/CFF outlines. Some image formats, notably the PNG/JPEG ones, are size specific and will return no match when there isn't an entry in that size range.

    Glyph ids beyond the glyph count return .

    +
    + + mt725323 + GetGlyphImageFormats + GetGlyphImageFormats + DWRITE_GLYPH_IMAGE_FORMATS IDWriteFontFace4::GetGlyphImageFormats() +
    + + +

    Gets the available image formats of a specific glyph and ppem.

    +
    +

    The ID of the glyph.

    +
    +
    +

    Specifies which formats are supported in the font.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Glyphs often have at least TrueType or CFF outlines, but they may also have SVG outlines, or they may have only bitmaps with no TrueType/CFF outlines. Some image formats, notably the PNG/JPEG ones, are size specific and will return no match when there isn't an entry in that size range.

    Glyph ids beyond the glyph count return .

    +
    + + mt725323 + HRESULT IDWriteFontFace4::GetGlyphImageFormats([In] unsigned short glyphId,[In] unsigned int pixelsPerEmFirst,[In] unsigned int pixelsPerEmLast,[Out] DWRITE_GLYPH_IMAGE_FORMATS* glyphImageFormats) + IDWriteFontFace4::GetGlyphImageFormats +
    + + +

    Gets the available image formats of a specific glyph and ppem.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Glyphs often have at least TrueType or CFF outlines, but they may also have SVG outlines, or they may have only bitmaps with no TrueType/CFF outlines. Some image formats, notably the PNG/JPEG ones, are size specific and will return no match when there isn't an entry in that size range.

    Glyph ids beyond the glyph count return .

    +
    + + mt725323 + DWRITE_GLYPH_IMAGE_FORMATS IDWriteFontFace4::GetGlyphImageFormats() + IDWriteFontFace4::GetGlyphImageFormats +
    + + +

    Gets a reference to the glyph data based on the desired image format.

    +
    +

    The ID of the glyph to retrieve image data for.

    +

    Requested pixels per em.

    +

    Specifies which formats are supported in the font.

    +

    On return contains data for a glyph.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The glyphDataContext must be released via ReleaseGlyphImageData when done if the data is not empty, similar to and . The data reference is valid so long as the exists and ReleaseGlyphImageData has not been called.

    The DWRITE_GLYPH_IMAGE_DATA::uniqueDataId is valuable for caching purposes so that if the same resource is returned more than once, an existing resource can be quickly retrieved rather than needing to reparse or decompress the data.

    The function only returns SVG or raster data - requesting TrueType/CFF/COLR data returns DWRITE_E_INVALIDARG. Those must be drawn via DrawGlyphRun or queried using GetGlyphOutline instead. Exactly one format may be requested or else the function returns DWRITE_E_INVALIDARG. If the glyph does not have that format, the call is not an error, but the function returns empty data.

    +
    + + mt725321 + HRESULT IDWriteFontFace4::GetGlyphImageData([In] unsigned short glyphId,[In] unsigned int pixelsPerEm,[In] DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat,[Out] DWRITE_GLYPH_IMAGE_DATA* glyphData,[Out, Optional] void** glyphDataContext) + IDWriteFontFace4::GetGlyphImageData +
    + + +

    Releases the table data obtained from ReadGlyphData.

    +
    +

    Opaque context from ReadGlyphData.

    + + mt725325 + void IDWriteFontFace4::ReleaseGlyphImageData([In] void* glyphDataContext) + IDWriteFontFace4::ReleaseGlyphImageData +
    + + +

    Represents a reference to a font face. A uniquely identifying reference to a font, from which you can create a font face to query font metrics and use for rendering. A font face reference consists of a font file, font face index, and font face simulation. The file data may or may not be physically present on the local machine yet.

    +
    + + dn894576 + IDWriteFontFaceReference + IDWriteFontFaceReference +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Obtains the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero.

    +
    + + dn894585 + GetFontFaceIndex + GetFontFaceIndex + unsigned int IDWriteFontFaceReference::GetFontFaceIndex() +
    + + +

    Obtains the algorithmic style simulation flags of a font face.

    +
    + + dn894589 + GetSimulations + GetSimulations + DWRITE_FONT_SIMULATIONS IDWriteFontFaceReference::GetSimulations() +
    + + +

    Obtains the font file representing a font face.

    +
    + + dn894586 + GetFontFile + GetFontFile + HRESULT IDWriteFontFaceReference::GetFontFile([Out] IDWriteFontFile** fontFile) +
    + + +

    Get the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal GetFileSize.

    +
    + + dn894587 + GetLocalFileSize + GetLocalFileSize + unsigned longlong IDWriteFontFaceReference::GetLocalFileSize() +
    + + +

    Get the total size of the font face in bytes.

    +
    + + dn894583 + GetFileSize + GetFileSize + unsigned longlong IDWriteFontFaceReference::GetFileSize() +
    + + +

    Get the last modified date.

    +
    + + dn894584 + GetFileTime + GetFileTime + HRESULT IDWriteFontFaceReference::GetFileTime([Out] FILETIME* lastWriteTime) +
    + + +

    Get the locality of this font face reference.

    +
    + +

    You can always successfully create a font face from a fully local font. Attempting to create a font face on a remote or partially local font may fail with DWRITE_E_REMOTEFONT. This function may change between calls depending on background downloads and whether cached data expires.

    +
    + + dn894588 + GetLocality + GetLocality + DWRITE_LOCALITY IDWriteFontFaceReference::GetLocality() +
    + + +

    Creates a font face from the reference for use with layout, shaping, or rendering.

    +
    +

    Newly created font face object, or nullptr in the case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This function can fail with DWRITE_E_REMOTEFONT if the font is not local.

    +
    + + dn894577 + HRESULT IDWriteFontFaceReference::CreateFontFace([Out] IDWriteFontFace3** fontFace) + IDWriteFontFaceReference::CreateFontFace +
    + + +

    Creates a font face with alternate font simulations, for example, to explicitly simulate a bold font face out of a regular variant.

    +
    +

    Font face simulation flags for algorithmic emboldening and italicization.

    +

    Newly created font face object, or nullptr in the case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This function can fail with DWRITE_E_REMOTEFONT if the font is not local.

    +
    + + dn894578 + HRESULT IDWriteFontFaceReference::CreateFontFaceWithSimulations([In] DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags,[Out] IDWriteFontFace3** fontFace) + IDWriteFontFaceReference::CreateFontFaceWithSimulations +
    + + + No documentation. + + No documentation. + No documentation. + + BOOL IDWriteFontFaceReference::Equals([In] IDWriteFontFaceReference* fontFaceReference) + IDWriteFontFaceReference::Equals + + + +

    Obtains the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero.

    +
    +

    the zero-based index of the font face in its font file or files. If the font files contain a single face, the return value is zero.

    + + dn894585 + unsigned int IDWriteFontFaceReference::GetFontFaceIndex() + IDWriteFontFaceReference::GetFontFaceIndex +
    + + +

    Obtains the algorithmic style simulation flags of a font face.

    +
    +

    Returns the algorithmic style simulation flags of a font face.

    + + dn894589 + DWRITE_FONT_SIMULATIONS IDWriteFontFaceReference::GetSimulations() + IDWriteFontFaceReference::GetSimulations +
    + + +

    Obtains the font file representing a font face.

    +
    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894586 + HRESULT IDWriteFontFaceReference::GetFontFile([Out] IDWriteFontFile** fontFile) + IDWriteFontFaceReference::GetFontFile +
    + + +

    Get the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal GetFileSize.

    +
    +

    the local size of the font face in bytes, which will always be less than or equal to GetFullSize. If the locality is remote, this value is zero. If full, this value will equal GetFileSize.

    + + dn894587 + unsigned longlong IDWriteFontFaceReference::GetLocalFileSize() + IDWriteFontFaceReference::GetLocalFileSize +
    + + +

    Get the total size of the font face in bytes.

    +
    +

    Returns the total size of the font face in bytes. If the locality is remote, this value is unknown and will be zero.

    + + dn894583 + unsigned longlong IDWriteFontFaceReference::GetFileSize() + IDWriteFontFaceReference::GetFileSize +
    + + +

    Get the last modified date.

    +
    +

    Returns the last modified date. The time may be zero if the font file loader does not expose file time.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894584 + HRESULT IDWriteFontFaceReference::GetFileTime([Out] FILETIME* lastWriteTime) + IDWriteFontFaceReference::GetFileTime +
    + + +

    Get the locality of this font face reference.

    +
    +

    Returns the locality of this font face reference.

    + +

    You can always successfully create a font face from a fully local font. Attempting to create a font face on a remote or partially local font may fail with DWRITE_E_REMOTEFONT. This function may change between calls depending on background downloads and whether cached data expires.

    +
    + + dn894588 + DWRITE_LOCALITY IDWriteFontFaceReference::GetLocality() + IDWriteFontFaceReference::GetLocality +
    + + +

    Adds a request to the font download queue ().

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894581 + HRESULT IDWriteFontFaceReference::EnqueueFontDownloadRequest() + IDWriteFontFaceReference::EnqueueFontDownloadRequest +
    + + +

    Adds a request to the font download queue ().

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Downloading a character involves downloading every glyph it depends on directly or indirectly, via font tables (cmap, GSUB, COLR, glyf).

    +
    + + dn894579 + HRESULT IDWriteFontFaceReference::EnqueueCharacterDownloadRequest([In, Buffer] const wchar_t* characters,[In] unsigned int characterCount) + IDWriteFontFaceReference::EnqueueCharacterDownloadRequest +
    + + +

    Adds a request to the font download queue ().

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Downloading a glyph involves downloading any other glyphs it depends on from the font tables (GSUB, COLR, glyf).

    +
    + + dn894582 + HRESULT IDWriteFontFaceReference::EnqueueGlyphDownloadRequest([In, Buffer] const unsigned short* glyphIndices,[In] unsigned int glyphCount) + IDWriteFontFaceReference::EnqueueGlyphDownloadRequest +
    + + +

    Adds a request to the font download queue ().

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894580 + HRESULT IDWriteFontFaceReference::EnqueueFileFragmentDownloadRequest([In] unsigned longlong fileOffset,[In] unsigned longlong fragmentSize) + IDWriteFontFaceReference::EnqueueFileFragmentDownloadRequest +
    + + +

    Allows you to create Unicode font fallback mappings and create a font fall back object from those mappings.

    +
    + + dn280476 + IDWriteFontFallbackBuilder + IDWriteFontFallbackBuilder +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Appends a single mapping to the list. Call this once for each additional mapping.

    +
    +

    Unicode ranges that apply to this mapping.

    +

    Number of Unicode ranges.

    +

    List of target family name strings.

    +

    Number of target family names.

    +

    Optional explicit font collection for this mapping.

    +

    Locale of the context.

    +

    Base family name to match against, if applicable.

    +

    Scale factor to multiply the result target font by.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280477 + HRESULT IDWriteFontFallbackBuilder::AddMapping([In, Buffer] const DWRITE_UNICODE_RANGE* ranges,[In] unsigned int rangesCount,[In, Buffer] const wchar_t** targetFamilyNames,[In] unsigned int targetFamilyNamesCount,[In, Optional] IDWriteFontCollection* fontCollection,[In, Optional] const wchar_t* localeName,[In, Optional] const wchar_t* baseFamilyName,[In] float scale) + IDWriteFontFallbackBuilder::AddMapping +
    + + +

    Add all the mappings from an existing font fallback object.

    +
    +

    An existing font fallback object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280478 + HRESULT IDWriteFontFallbackBuilder::AddMappings([In] IDWriteFontFallback* fontFallback) + IDWriteFontFallbackBuilder::AddMappings +
    + + +

    Creates the finalized fallback object from the mappings added.

    +
    +

    Contains an address of a reference to the created fallback list.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280479 + HRESULT IDWriteFontFallbackBuilder::CreateFontFallback([Out] IDWriteFontFallback** fontFallback) + IDWriteFontFallbackBuilder::CreateFontFallback +
    + + +

    Represents a family of related fonts.

    +
    + +

    A font family is a set of fonts that share the same family name, such as "Times New Roman", but that differ in features. These feature differences include style, such as italic, and weight, such as bold. The following illustration shows examples of fonts that are members of the "Times New Roman" font family.

    An object can be retrieved from a font collection using the method shown in the following example. GetFontFamily takes a UINT32 index and returns the font family for the font at that index.

    * pFontFamily = null; // Get the font family.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFontCollection->GetFontFamily(i, &pFontFamily);	
    +            }	
    +            

    The font family name is used to specify the font family for text layout and text format objects. You can get a list of localized font family names from an object in the form of an object by using the method, as shown in the following code.

    * pFamilyNames = null; // Get a list of localized strings for the family name.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFontFamily->GetFamilyNames(&pFamilyNames);	
    +            }	
    +            
    +
    + + dd371042 + IDWriteFontFamily + IDWriteFontFamily +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a localized strings object that contains the family names for the font family, indexed by locale name.

    +
    + +

    The following code example shows how to get the font family name from a object.

    * pFamilyNames = null; // Get a list of localized strings for the family name.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFontFamily->GetFamilyNames(&pFamilyNames);	
    +            } UINT32 index = 0;	
    +             exists = false; wchar_t localeName[LOCALE_NAME_MAX_LENGTH]; if (SUCCEEDED(hr))	
    +            { // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames->FindLocaleName(localeName, &index, &exists); } if (SUCCEEDED(hr) && !exists) // if the above find did not find a match, retry with US English { hr = pFamilyNames->FindLocaleName(L"en-us", &index, &exists); }	
    +            } // If the specified locale doesn't exist, select the first on the list.	
    +            if (!exists) index = 0; UINT32 length = 0; // Get the string length.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFamilyNames->GetStringLength(index, &length);	
    +            } // Allocate a string big enough to hold the name.	
    +            wchar_t* name = new (std::nothrow) wchar_t[length+1];	
    +            if (name == null)	
    +            { hr = E_OUTOFMEMORY;	
    +            } // Get the family name.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFamilyNames->GetString(index, name, length+1);	
    +            }	
    +            
    +
    + + dd371047 + GetFamilyNames + GetFamilyNames + HRESULT IDWriteFontFamily::GetFamilyNames([Out] IDWriteLocalizedStrings** names) +
    + + +

    Creates a localized strings object that contains the family names for the font family, indexed by locale name.

    +
    +

    The address of a reference to the newly created object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The following code example shows how to get the font family name from a object.

    * pFamilyNames = null; // Get a list of localized strings for the family name.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFontFamily->GetFamilyNames(&pFamilyNames);	
    +            } UINT32 index = 0;	
    +             exists = false; wchar_t localeName[LOCALE_NAME_MAX_LENGTH]; if (SUCCEEDED(hr))	
    +            { // Get the default locale for this user. int defaultLocaleSuccess = GetUserDefaultLocaleName(localeName, LOCALE_NAME_MAX_LENGTH); // If the default locale is returned, find that locale name, otherwise use "en-us". if (defaultLocaleSuccess) { hr = pFamilyNames->FindLocaleName(localeName, &index, &exists); } if (SUCCEEDED(hr) && !exists) // if the above find did not find a match, retry with US English { hr = pFamilyNames->FindLocaleName(L"en-us", &index, &exists); }	
    +            } // If the specified locale doesn't exist, select the first on the list.	
    +            if (!exists) index = 0; UINT32 length = 0; // Get the string length.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFamilyNames->GetStringLength(index, &length);	
    +            } // Allocate a string big enough to hold the name.	
    +            wchar_t* name = new (std::nothrow) wchar_t[length+1];	
    +            if (name == null)	
    +            { hr = E_OUTOFMEMORY;	
    +            } // Get the family name.	
    +            if (SUCCEEDED(hr))	
    +            { hr = pFamilyNames->GetString(index, name, length+1);	
    +            }	
    +            
    +
    + + dd371047 + HRESULT IDWriteFontFamily::GetFamilyNames([Out] IDWriteLocalizedStrings** names) + IDWriteFontFamily::GetFamilyNames +
    + + +

    Gets the font that best matches the specified properties.

    +
    +

    A value that is used to match a requested font weight.

    +

    A value that is used to match a requested font stretch.

    +

    A value that is used to match a requested font style.

    +

    When this method returns, contains the address of a reference to the newly created object.

    + + dd371051 + HRESULT IDWriteFontFamily::GetFirstMatchingFont([In] DWRITE_FONT_WEIGHT weight,[In] DWRITE_FONT_STRETCH stretch,[In] DWRITE_FONT_STYLE style,[Out] IDWriteFont** matchingFont) + IDWriteFontFamily::GetFirstMatchingFont +
    + + +

    Gets a list of fonts in the font family ranked in order of how well they match the specified properties.

    +
    +

    A value that is used to match a requested font weight.

    +

    A value that is used to match a requested font stretch.

    +

    A value that is used to match a requested font style.

    +

    An address of a reference to the newly created object.

    + + dd371056 + HRESULT IDWriteFontFamily::GetMatchingFonts([In] DWRITE_FONT_WEIGHT weight,[In] DWRITE_FONT_STRETCH stretch,[In] DWRITE_FONT_STYLE style,[Out] IDWriteFontList** matchingFonts) + IDWriteFontFamily::GetMatchingFonts +
    + + +

    Represents a family of related fonts.

    +
    + + dn894590 + IDWriteFontFamily1 + IDWriteFontFamily1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the current location of a font given its zero-based index.

    +
    +

    Zero-based index of the font in the font list.

    +

    Returns a -typed value that specifies the location of the specified font.

    + +

    For fully local files, the result will always be . For streamed files, the result depends on how much of the file has been downloaded. GetFont fails if the locality is and potentially fails if .

    +
    + + dn894593 + DWRITE_LOCALITY IDWriteFontFamily1::GetFontLocality([In] unsigned int listIndex) + IDWriteFontFamily1::GetFontLocality +
    + + +

    Gets a font given its zero-based index.

    +
    +

    Zero-based index of the font in the font list.

    +

    A reference to a memory block that receives a reference to a interface for the newly created font object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894591 + HRESULT IDWriteFontFamily1::GetFont([In] unsigned int listIndex,[Out] IDWriteFont3** font) + IDWriteFontFamily1::GetFont +
    + + +

    Gets a font face reference given its zero-based index.

    +
    +

    Zero-based index of the font in the font list.

    +

    A reference to a memory block that receives a reference to a interface for the newly created font face reference object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn894592 + HRESULT IDWriteFontFamily1::GetFontFaceReference([In] unsigned int listIndex,[Out] IDWriteFontFaceReference** fontFaceReference) + IDWriteFontFamily1::GetFontFaceReference +
    + + +

    Gets the number of fonts in the font list.

    +
    + + dd371133 + IDWriteFontList + IDWriteFontList +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the font collection that contains the fonts in the font list.

    +
    + + dd371129 + GetFontCollection + GetFontCollection + HRESULT IDWriteFontList::GetFontCollection([Out] IDWriteFontCollection** fontCollection) +
    + + +

    Gets the number of fonts in the font list.

    +
    + + dd371133 + GetFontCount + GetFontCount + unsigned int IDWriteFontList::GetFontCount() +
    + + +

    Gets the font collection that contains the fonts in the font list.

    +
    +

    When this method returns, contains the address of a reference to the current object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dd371129 + HRESULT IDWriteFontList::GetFontCollection([Out] IDWriteFontCollection** fontCollection) + IDWriteFontList::GetFontCollection +
    + + +

    Gets the number of fonts in the font list.

    +
    +

    The number of fonts in the font list.

    + + dd371133 + unsigned int IDWriteFontList::GetFontCount() + IDWriteFontList::GetFontCount +
    + + +

    Gets a font given its zero-based index.

    +
    +

    Zero-based index of the font in the font list.

    +

    When this method returns, contains the address of a reference to the newly created object.

    + + dd371125 + HRESULT IDWriteFontList::GetFont([In] unsigned int index,[Out] IDWriteFont** font) + IDWriteFontList::GetFont +
    + + +

    Represents a list of fonts.

    +
    + + dn894594 + IDWriteFontList1 + IDWriteFontList1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the current location of a font given its zero-based index.

    +
    +

    Zero-based index of the font in the font list.

    +

    Returns a -typed value that specifies the location of the specified font.

    + +

    For fully local files, the result will always be . For streamed files, the result depends on how much of the file has been downloaded. GetFont fails if the locality is and potentially fails if .

    +
    + + dn900386 + DWRITE_LOCALITY IDWriteFontList1::GetFontLocality([In] unsigned int listIndex) + IDWriteFontList1::GetFontLocality +
    + + +

    Gets a font given its zero-based index.

    +
    +

    Zero-based index of the font in the font list.

    +

    A reference to a memory block that receives a reference to a interface for the newly created font object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    This method returns DWRITE_E_REMOTEFONT if it could not construct a remote font.

    + + dn894595 + HRESULT IDWriteFontList1::GetFont([In] unsigned int listIndex,[Out] IDWriteFont3** font) + IDWriteFontList1::GetFont +
    + + +

    Gets a font face reference given its zero-based index.

    +
    +

    Zero-based index of the font in the font list.

    +

    A reference to a memory block that receives a reference to a interface for the newly created font face reference object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900385 + HRESULT IDWriteFontList1::GetFontFaceReference([In] unsigned int listIndex,[Out] IDWriteFontFaceReference** fontFaceReference) + IDWriteFontList1::GetFontFaceReference +
    + + +

    +

    + + dn933235 + IDWriteFontSet + IDWriteFontSet +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the number of total fonts in the set.

    +
    + + dn933243 + GetFontCount + GetFontCount + unsigned int IDWriteFontSet::GetFontCount() +
    + + +

    Get the number of total fonts in the set.

    +
    +

    Returns the number of total fonts in the set.

    + + dn933243 + unsigned int IDWriteFontSet::GetFontCount() + IDWriteFontSet::GetFontCount +
    + + +

    Gets a reference to the font at the specified index, which may be local or remote.

    +
    +

    Zero-based index of the font.

    +

    Receives a reference the font face reference object, or nullptr on failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn933244 + HRESULT IDWriteFontSet::GetFontFaceReference([In] unsigned int listIndex,[Out] IDWriteFontFaceReference** fontFaceReference) + IDWriteFontSet::GetFontFaceReference +
    + + +

    Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations.

    +
    +

    Font face object that specifies the physical font.

    +

    Receives the zero-based index of the matching font if the font was found, or UINT_MAX otherwise.

    +

    Receives TRUE if the font exists or otherwise.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn958414 + HRESULT IDWriteFontSet::FindFontFaceReference([In] IDWriteFontFaceReference* fontFaceReference,[Out] unsigned int* listIndex,[Out] BOOL* exists) + IDWriteFontSet::FindFontFaceReference +
    + + +

    Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations.

    +
    +

    Font face object that specifies the physical font.

    +

    Receives the zero-based index of the matching font if the font was found, or UINT_MAX otherwise.

    +

    Receives TRUE if the font exists or otherwise.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn933242 + HRESULT IDWriteFontSet::FindFontFace([In] IDWriteFontFace* fontFace,[Out] unsigned int* listIndex,[Out] BOOL* exists) + IDWriteFontSet::FindFontFace +
    + + +

    Returns all unique property values in the set, which can be used for purposes such as displaying a family list or tag cloud. Values are returned in priority order according to the language list, such that if a font contains more than one localized name, the preferred one will be returned.

    +
    +

    Font property of interest.

    +

    Receives a reference to the newly created strings list.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn933250 + HRESULT IDWriteFontSet::GetPropertyValues([In] DWRITE_FONT_PROPERTY_ID propertyID,[Out] IDWriteStringList** values) + IDWriteFontSet::GetPropertyValues +
    + + +

    Returns all unique property values in the set, which can be used for purposes such as displaying a family list or tag cloud. Values are returned in priority order according to the language list, such that if a font contains more than one localized name, the preferred one will be returned.

    +
    +

    Font property of interest.

    +

    List of semicolon delimited language names in preferred order. When a particular string like font family has more than one localized name, the first match is returned. For example, suppose the font set includes the Meiryo family, which has both Japanese and English family names. The returned list of distinct family names would include either the Japanese name (if "ja-jp" was specified as a preferred locale) or the English name (in all other cases).

    +

    Receives a reference to the newly created strings list.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn933250 + HRESULT IDWriteFontSet::GetPropertyValues([In] DWRITE_FONT_PROPERTY_ID propertyID,[In] const wchar_t* preferredLocaleNames,[Out] IDWriteStringList** values) + IDWriteFontSet::GetPropertyValues +
    + + +

    Returns all unique property values in the set, which can be used for purposes such as displaying a family list or tag cloud. Values are returned in priority order according to the language list, such that if a font contains more than one localized name, the preferred one will be returned.

    +
    +

    Font property of interest.

    +

    List of semicolon delimited language names in preferred order. When a particular string like font family has more than one localized name, the first match is returned. For example, suppose the font set includes the Meiryo family, which has both Japanese and English family names. The returned list of distinct family names would include either the Japanese name (if "ja-jp" was specified as a preferred locale) or the English name (in all other cases).

    +

    Receives a reference to the newly created strings list.

    +

    Receives a reference to the newly created strings list.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn933250 + HRESULT IDWriteFontSet::GetPropertyValues([In] unsigned int listIndex,[In] DWRITE_FONT_PROPERTY_ID propertyId,[Out] BOOL* exists,[Out, Optional] IDWriteLocalizedStrings** values) + IDWriteFontSet::GetPropertyValues +
    + + +

    Returns how many times a given property value occurs in the set.

    +
    +

    Font property of interest.

    +

    Receives how many times the property occurs.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn933248 + HRESULT IDWriteFontSet::GetPropertyOccurrenceCount([In] const DWRITE_FONT_PROPERTY* property,[Out] unsigned int* propertyOccurrenceCount) + IDWriteFontSet::GetPropertyOccurrenceCount +
    + + +

    Returns a subset of fonts filtered by the given properties.

    +
    +

    List of properties to filter using.

    +

    The number of properties to filter.

    +

    The subset of fonts that match the properties, or nullptr on failure.

    + No documentation. +

    The subset of fonts that match the properties, or nullptr on failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If no fonts matched the filter, the subset will be empty (GetFontCount returns 0), but the function does not return an error. The subset will always be equal to or less than the original set. If you only want to filter out remote fonts, you may pass null in properties and zero in propertyCount.

    +
    + + dn933245 + HRESULT IDWriteFontSet::GetMatchingFonts([In] const wchar_t* familyName,[In] DWRITE_FONT_WEIGHT fontWeight,[In] DWRITE_FONT_STRETCH fontStretch,[In] DWRITE_FONT_STYLE fontStyle,[Out] IDWriteFontSet** filteredSet) + IDWriteFontSet::GetMatchingFonts +
    + + +

    Returns a subset of fonts filtered by the given properties.

    +
    +

    List of properties to filter using.

    +

    The number of properties to filter.

    +

    The subset of fonts that match the properties, or nullptr on failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If no fonts matched the filter, the subset will be empty (GetFontCount returns 0), but the function does not return an error. The subset will always be equal to or less than the original set. If you only want to filter out remote fonts, you may pass null in properties and zero in propertyCount.

    +
    + + dn933245 + HRESULT IDWriteFontSet::GetMatchingFonts([In, Buffer] const DWRITE_FONT_PROPERTY* properties,[In] unsigned int propertyCount,[Out] IDWriteFontSet** filteredSet) + IDWriteFontSet::GetMatchingFonts +
    + + +

    Contains methods for building a font set.

    +
    + + dn933236 + IDWriteFontSetBuilder + IDWriteFontSetBuilder +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Adds a reference to a font to the set being built. The caller supplies enough information to search on, avoiding the need to open the potentially non-local font. Any properties not supplied by the caller will be missing, and those properties will not be available as filters in GetMatchingFonts. GetPropertyValues for missing properties will return an empty string list. The properties passed should generally be consistent with the actual font contents, but they need not be. You could, for example, alias a font using a different name or unique identifier, or you could set custom tags not present in the actual font.

    +
    +

    Reference to the font.

    +

    List of properties to associate with the reference.

    +

    The number of properties defined.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn933238 + HRESULT IDWriteFontSetBuilder::AddFontFaceReference([In] IDWriteFontFaceReference* fontFaceReference,[In, Buffer] const DWRITE_FONT_PROPERTY* properties,[In] unsigned int propertyCount) + IDWriteFontSetBuilder::AddFontFaceReference +
    + + +

    Adds a reference to a font to the set being built. The caller supplies enough information to search on, avoiding the need to open the potentially non-local font. Any properties not supplied by the caller will be missing, and those properties will not be available as filters in GetMatchingFonts. GetPropertyValues for missing properties will return an empty string list. The properties passed should generally be consistent with the actual font contents, but they need not be. You could, for example, alias a font using a different name or unique identifier, or you could set custom tags not present in the actual font.

    +
    +

    Reference to the font.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn933238 + HRESULT IDWriteFontSetBuilder::AddFontFaceReference([In] IDWriteFontFaceReference* fontFaceReference) + IDWriteFontSetBuilder::AddFontFaceReference +
    + + +

    Appends an existing font set to the one being built, allowing one to aggregate two sets or to essentially extend an existing one.

    +
    +

    Font set to append font face references from.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn933240 + HRESULT IDWriteFontSetBuilder::AddFontSet([In] IDWriteFontSet* fontSet) + IDWriteFontSetBuilder::AddFontSet +
    + + +

    Creates a font set from all the font face references added so far with AddFontFaceReference.

    +
    +

    Contains the newly created font set object, or nullptr in case of failure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Creating a font set takes less time if the references were added with metadata rather than needing to extract the metadata from the font file.

    +
    + + dn933241 + HRESULT IDWriteFontSetBuilder::CreateFontSet([Out] IDWriteFontSet** fontSet) + IDWriteFontSetBuilder::CreateFontSet +
    + + +

    Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.

    +
    + + dd370983 + IDWriteFontSetBuilder1 + IDWriteFontSetBuilder1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Provides interoperability with GDI, such as methods to convert a font face to a structure, or to convert a GDI font description into a font face. It is also used to create bitmap render target objects.

    +
    + + dn958415 + IDWriteGdiInterop1 + IDWriteGdiInterop1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a font object that matches the properties specified by the structure.

    +
    +

    Structure containing a GDI-compatible font description.

    +

    The font collection to search. If null, the local system font collection is used.

    +

    Receives a newly created font object if successful, or null in case of error.

    + + dn958416 + HRESULT IDWriteGdiInterop1::CreateFontFromLOGFONT([In] const void* logFont,[In, Optional] IDWriteFontCollection* fontCollection,[Out] IDWriteFont** font) + IDWriteGdiInterop1::CreateFontFromLOGFONT +
    + + +

    Reads the font signature from the given font face.

    +
    +

    Font face to read font signature from.

    +

    Font signature from the OS/2 table, ulUnicodeRange and ulCodePageRange.

    + + dn958418 + HRESULT IDWriteGdiInterop1::GetFontSignature([In] IDWriteFontFace* fontFace,[Out] FONTSIGNATURE* fontSignature) + IDWriteGdiInterop1::GetFontSignature +
    + + +

    Reads the font signature from the given font face.

    +
    +

    Font face to read font signature from.

    +

    Font signature from the OS/2 table, ulUnicodeRange and ulCodePageRange.

    + + dn958418 + HRESULT IDWriteGdiInterop1::GetFontSignature([In] IDWriteFont* font,[Out] FONTSIGNATURE* fontSignature) + IDWriteGdiInterop1::GetFontSignature +
    + + +

    Gets a list of matching fonts based on the specified values. Only fonts of that family name will be returned.

    +
    +

    Structure containing a GDI-compatible font description.

    +

    The font set to search.

    +

    >Receives the filtered font set if successful.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn958420 + HRESULT IDWriteGdiInterop1::GetMatchingFontsByLOGFONT([In] const void* logFont,[In] IDWriteFontSet* fontSet,[Out] IDWriteFontSet** filteredSet) + IDWriteGdiInterop1::GetMatchingFontsByLOGFONT +
    + + +

    Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.

    +
    + + dd370983 + IDWriteInMemoryFontFileLoader + IDWriteInMemoryFontFileLoader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT IDWriteInMemoryFontFileLoader::CreateInMemoryFontFileReference([In] IDWriteFactory* factory,[In, Buffer] const void* fontData,[In] unsigned int fontDataSize,[In, Optional] IUnknown* ownerObject,[Out] IDWriteFontFile** fontFile) + IDWriteInMemoryFontFileLoader::CreateInMemoryFontFileReference + + + + No documentation. + + No documentation. + + unsigned int IDWriteInMemoryFontFileLoader::GetFileCount() + IDWriteInMemoryFontFileLoader::GetFileCount + + + +

    Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.

    +
    + + dd370983 + IDWriteRemoteFontFileLoader + IDWriteRemoteFontFileLoader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT IDWriteRemoteFontFileLoader::CreateRemoteStreamFromKey([In, Buffer] const void* fontFileReferenceKey,[In] unsigned int fontFileReferenceKeySize,[Out] IDWriteRemoteFontFileStream** fontFileStream) + IDWriteRemoteFontFileLoader::CreateRemoteStreamFromKey + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT IDWriteRemoteFontFileLoader::GetLocalityFromKey([In, Buffer] const void* fontFileReferenceKey,[In] unsigned int fontFileReferenceKeySize,[Out] DWRITE_LOCALITY* locality) + IDWriteRemoteFontFileLoader::GetLocalityFromKey + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT IDWriteRemoteFontFileLoader::CreateFontFileReferenceFromUrl([In] IDWriteFactory* factory,[In, Optional] const wchar_t* baseUrl,[In] const wchar_t* fontFileUrl,[Out] IDWriteFontFile** fontFile) + IDWriteRemoteFontFileLoader::CreateFontFileReferenceFromUrl + + + +

    Represents an absolute reference to a font face which contains font face type, appropriate file references, face identification data and various font data such as metrics, names and glyph outlines.

    +
    + + dd370983 + IDWriteRemoteFontFileStream + IDWriteRemoteFontFileStream +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + + HRESULT IDWriteRemoteFontFileStream::GetLocalFileSize([Out] unsigned longlong* localFileSize) + IDWriteRemoteFontFileStream::GetLocalFileSize + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT IDWriteRemoteFontFileStream::GetFileFragmentLocality([In] unsigned longlong fileOffset,[In] unsigned longlong fragmentSize,[Out] BOOL* isLocal,[In] unsigned longlong* partialSize) + IDWriteRemoteFontFileStream::GetFileFragmentLocality + + + + No documentation. + + No documentation. + + DWRITE_LOCALITY IDWriteRemoteFontFileStream::GetLocality() + IDWriteRemoteFontFileStream::GetLocality + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT IDWriteRemoteFontFileStream::BeginDownload([In] const GUID* downloadOperationID,[In, Buffer] const DWRITE_FILE_FRAGMENT* fileFragments,[In] unsigned int fragmentCount,[Out, Optional] IDWriteAsyncResult** asyncResult) + IDWriteRemoteFontFileStream::BeginDownload + + + +

    Represents text rendering settings for glyph rasterization and filtering.

    +
    + + hh780422 + IDWriteRenderingParams1 + IDWriteRenderingParams1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the amount of contrast enhancement to use for grayscale antialiasing.

    +
    + + hh780423 + GetGrayscaleEnhancedContrast + GetGrayscaleEnhancedContrast + float IDWriteRenderingParams1::GetGrayscaleEnhancedContrast() +
    + + +

    Gets the amount of contrast enhancement to use for grayscale antialiasing.

    +
    +

    The contrast enhancement value. Valid values are greater than or equal to zero.

    + + hh780423 + float IDWriteRenderingParams1::GetGrayscaleEnhancedContrast() + IDWriteRenderingParams1::GetGrayscaleEnhancedContrast +
    + + +

    Represents text rendering settings for glyph rasterization and filtering.

    +
    + + dn900387 + IDWriteRenderingParams2 + IDWriteRenderingParams2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the grid fitting mode.

    +
    + + dn900388 + GetGridFitMode + GetGridFitMode + DWRITE_GRID_FIT_MODE IDWriteRenderingParams2::GetGridFitMode() +
    + + +

    Gets the grid fitting mode.

    +
    +

    Returns a -typed value for the grid fitting mode.

    + + dn900388 + DWRITE_GRID_FIT_MODE IDWriteRenderingParams2::GetGridFitMode() + IDWriteRenderingParams2::GetGridFitMode +
    + + +

    Represents text rendering settings for glyph rasterization and filtering.

    +
    + + dn900389 + IDWriteRenderingParams3 + IDWriteRenderingParams3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the rendering mode.

    +
    + + dn900390 + GetRenderingMode1 + GetRenderingMode1 + DWRITE_RENDERING_MODE1 IDWriteRenderingParams3::GetRenderingMode1() +
    + + +

    Gets the rendering mode.

    +
    +

    Returns a -typed value for the rendering mode.

    + + dn900390 + DWRITE_RENDERING_MODE1 IDWriteRenderingParams3::GetRenderingMode1() + IDWriteRenderingParams3::GetRenderingMode1 +
    + + +

    Represents a collection of strings indexed by number. An is identical to except for the semantics, where localized strings are indexed on language (each language has one string property) whereas may contain multiple strings of the same language, such as a string list of family names from a font set. You can QueryInterface from an to an .

    +
    + + dn958421 + IDWriteStringList + IDWriteStringList +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the number of strings in the string list.

    +
    + + dn958422 + GetCount + GetCount + unsigned int IDWriteStringList::GetCount() +
    + + +

    Gets the number of strings in the string list.

    +
    +

    Returns the number of strings in the string list.

    + + dn958422 + unsigned int IDWriteStringList::GetCount() + IDWriteStringList::GetCount +
    + + +

    Gets the length in characters (not including the null terminator) of the locale name with the specified index.

    +
    +

    Zero-based index of the locale name.

    +

    Receives the length in characters, not including the null terminator.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn958424 + HRESULT IDWriteStringList::GetLocaleNameLength([In] unsigned int listIndex,[Out] unsigned int* length) + IDWriteStringList::GetLocaleNameLength +
    + + +

    Copies the locale name with the specified index to the specified array.

    +
    +

    Zero-based index of the locale name.

    +

    Character array that receives the locale name.

    +

    Size of the array in characters. The size must include space for the terminating null character.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn958423 + HRESULT IDWriteStringList::GetLocaleName([In] unsigned int listIndex,[Out, Buffer] wchar_t* localeName,[In] unsigned int size) + IDWriteStringList::GetLocaleName +
    + + +

    Gets the length in characters (not including the null terminator) of the string with the specified index.

    +
    +

    Zero-based index of the string.

    +

    Receives the length in characters of the string, not including the null terminator.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn958426 + HRESULT IDWriteStringList::GetStringLength([In] unsigned int listIndex,[Out] unsigned int* length) + IDWriteStringList::GetStringLength +
    + + +

    Copies the string with the specified index to the specified array.

    +
    +

    Zero-based index of the string.

    +

    Character array that receives the string.

    +

    Size of the array in characters. The size must include space for the terminating null character.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn958425 + HRESULT IDWriteStringList::GetString([In] unsigned int listIndex,[Out, Buffer] wchar_t* stringBuffer,[In] unsigned int stringBufferSize) + IDWriteStringList::GetString +
    + + +

    Analyzes various text properties for complex script processing.

    +
    + + dn280483 + IDWriteTextAnalyzer2 + IDWriteTextAnalyzer2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns 2x3 transform matrix for the respective angle to draw the glyph run.

    Extends to pass valid values for the baseline origin rather than zeroes.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280484 + HRESULT IDWriteTextAnalyzer2::GetGlyphOrientationTransform([In] DWRITE_GLYPH_ORIENTATION_ANGLE glyphOrientationAngle,[In] BOOL isSideways,[In] float originX,[In] float originY,[Out] DWRITE_MATRIX* transform) + IDWriteTextAnalyzer2::GetGlyphOrientationTransform +
    + + +

    Returns a complete list of OpenType features available for a script or font. If a feature is partially supported, then this method indicates that it is supported.

    +
    +

    The font face to get features from.

    +

    The script analysis for the script or font to check.

    +

    The locale name to check.

    +

    The maximum number of tags to return.

    +

    The actual number of tags returned.

    +

    An array of OpenType font feature tags.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280456 + HRESULT IDWriteTextAnalyzer2::GetTypographicFeatures([In] IDWriteFontFace* fontFace,[In] DWRITE_SCRIPT_ANALYSIS scriptAnalysis,[In, Optional] const wchar_t* localeName,[In] unsigned int maxTagCount,[Out] unsigned int* actualTagCount,[Out, Buffer] DWRITE_FONT_FEATURE_TAG* tags) + IDWriteTextAnalyzer2::GetTypographicFeatures +
    + + +

    Checks if a typographic feature is available for a glyph or a set of glyphs.

    +
    +

    The font face to read glyph information from.

    +

    The script analysis for the script or font to check.

    +

    The locale name to check.

    +

    The font feature tag to check.

    +

    The number of glyphs to check.

    +

    An array of glyph indices to check.

    +

    An array of integers that indicate whether or not the font feature applies to each glyph specified.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280455 + HRESULT IDWriteTextAnalyzer2::CheckTypographicFeature([In] IDWriteFontFace* fontFace,[In] DWRITE_SCRIPT_ANALYSIS scriptAnalysis,[In, Optional] const wchar_t* localeName,[In] DWRITE_FONT_FEATURE_TAG featureTag,[In] unsigned int glyphCount,[In, Buffer] const unsigned short* glyphIndices,[Out, Buffer] unsigned char* featureApplies) + IDWriteTextAnalyzer2::CheckTypographicFeature +
    + + +

    Describes the font and paragraph properties used to format text, and it describes locale information. This interface has all the same methods as and adds the ability for you to apply an explicit orientation.

    +
    + + dn280485 + IDWriteTextFormat1 + IDWriteTextFormat1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get or sets the preferred orientation of glyphs when using a vertical reading direction.

    +
    + + dn894598 + GetVerticalGlyphOrientation / SetVerticalGlyphOrientation + GetVerticalGlyphOrientation + DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextFormat1::GetVerticalGlyphOrientation() +
    + + +

    Gets or sets the wrapping mode of the last line.

    +
    + + dn894596 + GetLastLineWrapping / SetLastLineWrapping + GetLastLineWrapping + BOOL IDWriteTextFormat1::GetLastLineWrapping() +
    + + +

    Gets or sets the optical margin alignment for the text format.

    +
    + + dn894597 + GetOpticalAlignment / SetOpticalAlignment + GetOpticalAlignment + DWRITE_OPTICAL_ALIGNMENT IDWriteTextFormat1::GetOpticalAlignment() +
    + + +

    Gets or sets the current fallback. If none was ever set since creating the layout, it will be nullptr.

    +
    + + dn280486 + GetFontFallback / SetFontFallback + GetFontFallback + HRESULT IDWriteTextFormat1::GetFontFallback([Out] IDWriteFontFallback** fontFallback) +
    + + +

    Sets the orientation of a text format.

    +
    +

    The orientation to apply to the text format.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280489 + HRESULT IDWriteTextFormat1::SetVerticalGlyphOrientation([In] DWRITE_VERTICAL_GLYPH_ORIENTATION glyphOrientation) + IDWriteTextFormat1::SetVerticalGlyphOrientation +
    + + +

    Get the preferred orientation of glyphs when using a vertical reading direction.

    +
    +

    The preferred orientation of glyphs when using a vertical reading direction.

    + + dn894598 + DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextFormat1::GetVerticalGlyphOrientation() + IDWriteTextFormat1::GetVerticalGlyphOrientation +
    + + +

    Sets the wrapping mode of the last line.

    +
    +

    If set to , the last line is not wrapped. If set to TRUE, the last line is wrapped.

    The last line is wrapped by default.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280490 + HRESULT IDWriteTextFormat1::SetLastLineWrapping([In] BOOL isLastLineWrappingEnabled) + IDWriteTextFormat1::SetLastLineWrapping +
    + + +

    Gets the wrapping mode of the last line.

    +
    +

    Returns if the last line is not wrapped; TRUE if the last line is wrapped.

    + + dn894596 + BOOL IDWriteTextFormat1::GetLastLineWrapping() + IDWriteTextFormat1::GetLastLineWrapping +
    + + +

    Sets the optical margin alignment for the text format.

    By default, glyphs are aligned to the margin by the default origin and side-bearings of the glyph. If you specify DWRITE_OPTICAL_ALIGNMENT_USING_SIDE_BEARINGS, then the alignment Suses the side bearings to offset the glyph from the aligned edge to ensure the ink of the glyphs are aligned.

    +
    +

    The optical alignment to set.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280488 + HRESULT IDWriteTextFormat1::SetOpticalAlignment([In] DWRITE_OPTICAL_ALIGNMENT opticalAlignment) + IDWriteTextFormat1::SetOpticalAlignment +
    + + +

    Gets the optical margin alignment for the text format.

    +
    +

    The optical alignment.

    + + dn894597 + DWRITE_OPTICAL_ALIGNMENT IDWriteTextFormat1::GetOpticalAlignment() + IDWriteTextFormat1::GetOpticalAlignment +
    + + +

    Applies the custom font fallback onto the layout. If none is set, it uses the default system fallback list.

    +
    +

    The font fallback to apply to the layout.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280487 + HRESULT IDWriteTextFormat1::SetFontFallback([In] IDWriteFontFallback* fontFallback) + IDWriteTextFormat1::SetFontFallback +
    + + +

    Gets the current fallback. If none was ever set since creating the layout, it will be nullptr.

    +
    +

    Contains an address of a reference to the the current font fallback object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280486 + HRESULT IDWriteTextFormat1::GetFontFallback([Out] IDWriteFontFallback** fontFallback) + IDWriteTextFormat1::GetFontFallback +
    + + +

    Describes the font and paragraph properties used to format text, and it describes locale information.

    +
    + + mt574121 + IDWriteTextFormat2 + IDWriteTextFormat2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets the line spacing adjustment set for a multiline text paragraph.

    +
    + + mt574122 + GetLineSpacing / SetLineSpacing + GetLineSpacing + HRESULT IDWriteTextFormat2::GetLineSpacing([Out] DWRITE_LINE_SPACING* lineSpacingOptions) +
    + + +

    Set line spacing.

    +
    +

    How to manage space between lines.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt574123 + HRESULT IDWriteTextFormat2::SetLineSpacing([In] const DWRITE_LINE_SPACING* lineSpacingOptions) + IDWriteTextFormat2::SetLineSpacing +
    + + +

    Gets the line spacing adjustment set for a multiline text paragraph.

    +
    +

    A structure describing how the space between lines is managed for the paragraph.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + mt574122 + HRESULT IDWriteTextFormat2::GetLineSpacing([Out] DWRITE_LINE_SPACING* lineSpacingOptions) + IDWriteTextFormat2::GetLineSpacing +
    + + +

    Represents a block of text after it has been fully analyzed and formatted.

    +
    + + hh780438 + IDWriteTextLayout1 + IDWriteTextLayout1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Enables or disables pair-kerning on a given text range.

    +
    +

    The flag that indicates whether text is pair-kerned.

    +

    The text range to which the change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh780442 + HRESULT IDWriteTextLayout1::SetPairKerning([In] BOOL isPairKerningEnabled,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout1::SetPairKerning +
    + + +

    Gets whether or not pair-kerning is enabled at given position.

    +
    +

    The current text position.

    +

    The flag that indicates whether text is pair-kerned.

    +

    The position range of the current format.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh780440 + HRESULT IDWriteTextLayout1::GetPairKerning([In] unsigned int currentPosition,[Out] BOOL* isPairKerningEnabled,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout1::GetPairKerning +
    + + +

    Sets the spacing between characters.

    +
    +

    The spacing before each character, in reading order.

    +

    The spacing after each character, in reading order.

    +

    The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.

    +

    Text range to which this change applies.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh780441 + HRESULT IDWriteTextLayout1::SetCharacterSpacing([In] float leadingSpacing,[In] float trailingSpacing,[In] float minimumAdvanceWidth,[In] DWRITE_TEXT_RANGE textRange) + IDWriteTextLayout1::SetCharacterSpacing +
    + + +

    Gets the spacing between characters.

    +
    +

    The current text position.

    +

    The spacing before each character, in reading order.

    +

    The spacing after each character, in reading order.

    +

    The minimum advance of each character, to prevent characters from becoming too thin or zero-width. This must be zero or greater.

    +

    The position range of the current format.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh780439 + HRESULT IDWriteTextLayout1::GetCharacterSpacing([In] unsigned int currentPosition,[Out] float* leadingSpacing,[Out] float* trailingSpacing,[Out] float* minimumAdvanceWidth,[Out, Optional] DWRITE_TEXT_RANGE* textRange) + IDWriteTextLayout1::GetCharacterSpacing +
    + + +

    Represents a block of text after it has been fully analyzed and formatted.

    +
    + + dn280491 + IDWriteTextLayout2 + IDWriteTextLayout2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves overall metrics for the formatted string.

    +
    + + dn280492 + GetMetrics + GetMetrics + HRESULT IDWriteTextLayout2::GetMetrics([Out] DWRITE_TEXT_METRICS1* textMetrics) +
    + + +

    Get or sets the preferred orientation of glyphs when using a vertical reading direction.

    +
    + + dn482048 + GetVerticalGlyphOrientation / SetVerticalGlyphOrientation + GetVerticalGlyphOrientation + DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextLayout2::GetVerticalGlyphOrientation() +
    + + +

    Get or sets whether or not the last word on the last line is wrapped.

    +
    + + dn482046 + GetLastLineWrapping / SetLastLineWrapping + GetLastLineWrapping + BOOL IDWriteTextLayout2::GetLastLineWrapping() +
    + + +

    Get or sets how the glyphs align to the edges the margin.

    +
    + + dn482047 + GetOpticalAlignment / SetOpticalAlignment + GetOpticalAlignment + DWRITE_OPTICAL_ALIGNMENT IDWriteTextLayout2::GetOpticalAlignment() +
    + + +

    Get or sets the current font fallback object.

    +
    + + dn482045 + GetFontFallback / SetFontFallback + GetFontFallback + HRESULT IDWriteTextLayout2::GetFontFallback([Out] IDWriteFontFallback** fontFallback) +
    + + +

    Retrieves overall metrics for the formatted string.

    +
    +

    When this method returns, contains the measured distances of text and associated content after being formatted.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn280492 + HRESULT IDWriteTextLayout2::GetMetrics([Out] DWRITE_TEXT_METRICS1* textMetrics) + IDWriteTextLayout2::GetMetrics +
    + + +

    Set the preferred orientation of glyphs when using a vertical reading direction.

    +
    +

    Preferred glyph orientation.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn482052 + HRESULT IDWriteTextLayout2::SetVerticalGlyphOrientation([In] DWRITE_VERTICAL_GLYPH_ORIENTATION glyphOrientation) + IDWriteTextLayout2::SetVerticalGlyphOrientation +
    + + +

    Get the preferred orientation of glyphs when using a vertical reading direction.

    +
    + No documentation. + + dn482048 + DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextLayout2::GetVerticalGlyphOrientation() + IDWriteTextLayout2::GetVerticalGlyphOrientation +
    + + +

    Set whether or not the last word on the last line is wrapped.

    +
    +

    Line wrapping option.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn482050 + HRESULT IDWriteTextLayout2::SetLastLineWrapping([In] BOOL isLastLineWrappingEnabled) + IDWriteTextLayout2::SetLastLineWrapping +
    + + +

    Get whether or not the last word on the last line is wrapped.

    +
    + No documentation. + + dn482046 + BOOL IDWriteTextLayout2::GetLastLineWrapping() + IDWriteTextLayout2::GetLastLineWrapping +
    + + +

    Set how the glyphs align to the edges the margin. Default behavior is to align glyphs using their default glyphs metrics, which include side bearings.

    +
    +

    Optical alignment option.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn482051 + HRESULT IDWriteTextLayout2::SetOpticalAlignment([In] DWRITE_OPTICAL_ALIGNMENT opticalAlignment) + IDWriteTextLayout2::SetOpticalAlignment +
    + + +

    Get how the glyphs align to the edges the margin.

    +
    + No documentation. + + dn482047 + DWRITE_OPTICAL_ALIGNMENT IDWriteTextLayout2::GetOpticalAlignment() + IDWriteTextLayout2::GetOpticalAlignment +
    + + +

    Apply a custom font fallback onto layout. If none is specified, the layout uses the system fallback list.

    +
    +

    Custom font fallback created from or .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn482049 + HRESULT IDWriteTextLayout2::SetFontFallback([In] IDWriteFontFallback* fontFallback) + IDWriteTextLayout2::SetFontFallback +
    + + +

    Get the current font fallback object.

    +
    +

    The current font fallback object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn482045 + HRESULT IDWriteTextLayout2::GetFontFallback([Out] IDWriteFontFallback** fontFallback) + IDWriteTextLayout2::GetFontFallback +
    + + +

    +

    + + dn900405 + IDWriteTextLayout3 + IDWriteTextLayout3 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets line spacing information.

    +
    + + dn900407 + GetLineSpacing / SetLineSpacing + GetLineSpacing + HRESULT IDWriteTextLayout3::GetLineSpacing([Out] DWRITE_LINE_SPACING* lineSpacingOptions) +
    + + +

    Invalidates the layout, forcing layout to remeasure before calling the metrics or drawing functions. This is useful if the locality of a font changes, and layout should be redrawn, or if the size of a client implemented changes.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900408 + HRESULT IDWriteTextLayout3::InvalidateLayout() + IDWriteTextLayout3::InvalidateLayout +
    + + +

    Set line spacing.

    +
    +

    How to manage space between lines.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900409 + HRESULT IDWriteTextLayout3::SetLineSpacing([In] const DWRITE_LINE_SPACING* lineSpacingOptions) + IDWriteTextLayout3::SetLineSpacing +
    + + +

    Gets line spacing information.

    +
    +

    How to manage space between lines.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn900407 + HRESULT IDWriteTextLayout3::GetLineSpacing([Out] DWRITE_LINE_SPACING* lineSpacingOptions) + IDWriteTextLayout3::GetLineSpacing +
    + + +

    Retrieves properties of each line.

    +
    +

    The array to fill with line information.

    +

    The maximum size of the lineMetrics array.

    +

    The actual size of the lineMetrics array that is needed.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If maxLineCount is not large enough E_NOT_SUFFICIENT_BUFFER, which is equivalent to HRESULT_FROM_WIN32(), is returned and actualLineCount is set to the number of lines needed.

    +
    + + dn900406 + HRESULT IDWriteTextLayout3::GetLineMetrics([Out, Buffer, Optional] DWRITE_LINE_METRICS1* lineMetrics,[In] unsigned int maxLineCount,[Out] unsigned int* actualLineCount) + IDWriteTextLayout3::GetLineMetrics +
    + + +

    Represents a set of application-defined callbacks that perform rendering of text, inline objects, and decorations such as underlines.

    +
    + + dn280513 + IDWriteTextRenderer1 + IDWriteTextRenderer1 +
    + + +

    The structure specifies the metrics for caret placement in a font.

    +
    + + jj126258 + DWRITE_CARET_METRICS + DWRITE_CARET_METRICS +
    + + +

    Vertical rise of the caret in font design units. Rise / Run yields the caret angle. Rise = 1 for perfectly upright fonts (non-italic).

    +
    + + jj126258 + short slopeRise + short slopeRise +
    + + +

    Horizontal run of the caret in font design units. Rise / Run yields the caret angle. Run = 0 for perfectly upright fonts (non-italic).

    +
    + + jj126258 + short slopeRun + short slopeRun +
    + + +

    Horizontal offset of the caret, in font design units, along the baseline for good appearance. Offset = 0 for perfectly upright fonts (non-italic).

    +
    + + jj126258 + short offset + short offset +
    + + +

    Contains information about a glyph cluster.

    +
    + + dd368054 + DWRITE_CLUSTER_METRICS + DWRITE_CLUSTER_METRICS +
    + + +

    The total advance width of all glyphs in the cluster.

    +
    + + dd368054 + float width + float width +
    + + +

    The number of text positions in the cluster.

    +
    + + dd368054 + unsigned short length + unsigned short length +
    + + +

    Indicates whether a line can be broken right after the cluster.

    +
    + + dd368054 + unsigned short canWrapLineAfter + unsigned short canWrapLineAfter +
    + + +

    Indicates whether the cluster corresponds to a whitespace character.

    +
    + + dd368054 + unsigned short isWhitespace + unsigned short isWhitespace +
    + + +

    Indicates whether the cluster corresponds to a newline character.

    +
    + + dd368054 + unsigned short isNewline + unsigned short isNewline +
    + + +

    Indicates whether the cluster corresponds to a soft hyphen character.

    +
    + + dd368054 + unsigned short isSoftHyphen + unsigned short isSoftHyphen +
    + + +

    Indicates whether the cluster is read from right to left.

    +
    + + dd368054 + unsigned short isRightToLeft + unsigned short isRightToLeft +
    + + +

    Reserved for future use.

    +
    + + dd368054 + unsigned short padding + unsigned short padding +
    + + +

    Contains the information needed by renderers to draw glyph runs with glyph color information. All coordinates are in device independent pixels (DIPs).

    +
    + + dn280407 + DWRITE_COLOR_GLYPH_RUN + DWRITE_COLOR_GLYPH_RUN +
    + + +

    Glyph run to draw for this layer.

    +
    + + dn280407 + DWRITE_GLYPH_RUN glyphRun + DWRITE_GLYPH_RUN glyphRun +
    + + +

    Pointer to the glyph run description for this layer. This may be null. For example, when the original glyph run is split into multiple layers, one layer might have a description and the others have none.

    +
    + + dn280407 + DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription + DWRITE_GLYPH_RUN_DESCRIPTION glyphRunDescription +
    + + +

    X coordinate of the baseline origin for the layer.

    +
    + + dn280407 + float baselineOriginX + float baselineOriginX +
    + + +

    Y coordinate of the baseline origin for the layer.

    +
    + + dn280407 + float baselineOriginY + float baselineOriginY +
    + + +

    Color value of the run; if all members are zero, the run should be drawn using the current brush.

    +
    + + dn280407 + D3DCOLORVALUE runColor + D3DCOLORVALUE runColor +
    + + +

    Zero-based index into the font?s color palette; if this is 0xFFFF, the run should be drawn using the current brush.

    +
    + + dn280407 + unsigned short paletteIndex + unsigned short paletteIndex +
    + + +

    Represents a color glyph run. The method returns an ordered collection of color glyph runs of varying types depending on what the font supports.

    +
    + + mt725306 + DWRITE_COLOR_GLYPH_RUN1 + DWRITE_COLOR_GLYPH_RUN1 +
    + + +

    Glyph run to draw for this layer.

    +
    + + dn280407 + DWRITE_GLYPH_RUN glyphRun + DWRITE_GLYPH_RUN glyphRun +
    + + +

    Pointer to the glyph run description for this layer. This may be null. For example, when the original glyph run is split into multiple layers, one layer might have a description and the others have none.

    +
    + + dn280407 + DWRITE_GLYPH_RUN_DESCRIPTION* glyphRunDescription + DWRITE_GLYPH_RUN_DESCRIPTION glyphRunDescription +
    + + +

    X coordinate of the baseline origin for the layer.

    +
    + + dn280407 + float baselineOriginX + float baselineOriginX +
    + + +

    Y coordinate of the baseline origin for the layer.

    +
    + + dn280407 + float baselineOriginY + float baselineOriginY +
    + + +

    Color value of the run; if all members are zero, the run should be drawn using the current brush.

    +
    + + dn280407 + D3DCOLORVALUE runColor + D3DCOLORVALUE runColor +
    + + +

    Zero-based index into the font?s color palette; if this is 0xFFFF, the run should be drawn using the current brush.

    +
    + + dn280407 + unsigned short paletteIndex + unsigned short paletteIndex +
    + + +

    Type of glyph image format for this color run. Exactly one type will be set since TranslateColorGlyphRun has already broken down the run into separate parts.

    +
    + + mt725306 + DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat + DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat +
    + + +

    Measuring mode to use for this glyph run.

    +
    + + mt725306 + DWRITE_MEASURING_MODE measuringMode + DWRITE_MEASURING_MODE measuringMode +
    + + + No documentation. + + + DWRITE_FILE_FRAGMENT + DWRITE_FILE_FRAGMENT + + + + No documentation. + + + unsigned longlong fileOffset + unsigned longlong fileOffset + + + + No documentation. + + + unsigned longlong fragmentSize + unsigned longlong fragmentSize + + + +

    The structure specifies the metrics that are applicable to all glyphs within the font face.

    +
    + + dd368074 + DWRITE_FONT_METRICS + DWRITE_FONT_METRICS +
    + + +

    The number of font design units per em unit. Font files use their own coordinate system of font design units. A font design unit is the smallest measurable unit in the em square, an imaginary square that is used to size and align glyphs. The concept of em square is used as a reference scale factor when defining font size and device transformation semantics. The size of one em square is also commonly used to compute the paragraph identation value.

    +
    + + dd368074 + unsigned short designUnitsPerEm + unsigned short designUnitsPerEm +
    + + +

    The ascent value of the font face in font design units. Ascent is the distance from the top of font character alignment box to the English baseline.

    +
    + + dd368074 + unsigned short ascent + unsigned short ascent +
    + + +

    The descent value of the font face in font design units. Descent is the distance from the bottom of font character alignment box to the English baseline.

    +
    + + dd368074 + unsigned short descent + unsigned short descent +
    + + +

    The line gap in font design units. Recommended additional white space to add between lines to improve legibility. The recommended line spacing (baseline-to-baseline distance) is the sum of ascent, descent, and lineGap. The line gap is usually positive or zero but can be negative, in which case the recommended line spacing is less than the height of the character alignment box.

    +
    + + dd368074 + short lineGap + short lineGap +
    + + +

    The cap height value of the font face in font design units. Cap height is the distance from the English baseline to the top of a typical English capital. Capital "H" is often used as a reference character for the purpose of calculating the cap height value.

    +
    + + dd368074 + unsigned short capHeight + unsigned short capHeight +
    + + +

    The x-height value of the font face in font design units. x-height is the distance from the English baseline to the top of lowercase letter "x", or a similar lowercase character.

    +
    + + dd368074 + unsigned short xHeight + unsigned short xHeight +
    + + +

    The underline position value of the font face in font design units. Underline position is the position of underline relative to the English baseline. The value is usually made negative in order to place the underline below the baseline.

    +
    + + dd368074 + short underlinePosition + short underlinePosition +
    + + +

    The suggested underline thickness value of the font face in font design units.

    +
    + + dd368074 + unsigned short underlineThickness + unsigned short underlineThickness +
    + + +

    The strikethrough position value of the font face in font design units. Strikethrough position is the position of strikethrough relative to the English baseline. The value is usually made positive in order to place the strikethrough above the baseline.

    +
    + + dd368074 + short strikethroughPosition + short strikethroughPosition +
    + + +

    The suggested strikethrough thickness value of the font face in font design units.

    +
    + + dd368074 + unsigned short strikethroughThickness + unsigned short strikethroughThickness +
    + + +

    The structure specifies the metrics that are applicable to all glyphs within the font face.

    +
    + +

    inherits from :

    struct : public + { + ... + }; +
    + + jj126259 + DWRITE_FONT_METRICS1 + DWRITE_FONT_METRICS1 +
    + + +

    The number of font design units per em unit. Font files use their own coordinate system of font design units. A font design unit is the smallest measurable unit in the em square, an imaginary square that is used to size and align glyphs. The concept of em square is used as a reference scale factor when defining font size and device transformation semantics. The size of one em square is also commonly used to compute the paragraph identation value.

    +
    + + dd368074 + unsigned short designUnitsPerEm + unsigned short designUnitsPerEm +
    + + +

    The ascent value of the font face in font design units. Ascent is the distance from the top of font character alignment box to the English baseline.

    +
    + + dd368074 + unsigned short ascent + unsigned short ascent +
    + + +

    The descent value of the font face in font design units. Descent is the distance from the bottom of font character alignment box to the English baseline.

    +
    + + dd368074 + unsigned short descent + unsigned short descent +
    + + +

    The line gap in font design units. Recommended additional white space to add between lines to improve legibility. The recommended line spacing (baseline-to-baseline distance) is the sum of ascent, descent, and lineGap. The line gap is usually positive or zero but can be negative, in which case the recommended line spacing is less than the height of the character alignment box.

    +
    + + dd368074 + short lineGap + short lineGap +
    + + +

    The cap height value of the font face in font design units. Cap height is the distance from the English baseline to the top of a typical English capital. Capital "H" is often used as a reference character for the purpose of calculating the cap height value.

    +
    + + dd368074 + unsigned short capHeight + unsigned short capHeight +
    + + +

    The x-height value of the font face in font design units. x-height is the distance from the English baseline to the top of lowercase letter "x", or a similar lowercase character.

    +
    + + dd368074 + unsigned short xHeight + unsigned short xHeight +
    + + +

    The underline position value of the font face in font design units. Underline position is the position of underline relative to the English baseline. The value is usually made negative in order to place the underline below the baseline.

    +
    + + dd368074 + short underlinePosition + short underlinePosition +
    + + +

    The suggested underline thickness value of the font face in font design units.

    +
    + + dd368074 + unsigned short underlineThickness + unsigned short underlineThickness +
    + + +

    The strikethrough position value of the font face in font design units. Strikethrough position is the position of strikethrough relative to the English baseline. The value is usually made positive in order to place the strikethrough above the baseline.

    +
    + + dd368074 + short strikethroughPosition + short strikethroughPosition +
    + + +

    The suggested strikethrough thickness value of the font face in font design units.

    +
    + + dd368074 + unsigned short strikethroughThickness + unsigned short strikethroughThickness +
    + + +

    Left edge of accumulated bounding blackbox of all glyphs in the font.

    +
    + + jj126259 + short glyphBoxLeft + short glyphBoxLeft +
    + + +

    Top edge of accumulated bounding blackbox of all glyphs in the font.

    +
    + + jj126259 + short glyphBoxTop + short glyphBoxTop +
    + + +

    Right edge of accumulated bounding blackbox of all glyphs in the font.

    +
    + + jj126259 + short glyphBoxRight + short glyphBoxRight +
    + + +

    Bottom edge of accumulated bounding blackbox of all glyphs in the font.

    +
    + + jj126259 + short glyphBoxBottom + short glyphBoxBottom +
    + + +

    Horizontal position of the subscript relative to the baseline origin. This is typically negative (to the left) in italic and oblique fonts, and zero in regular fonts.

    +
    + + jj126259 + short subscriptPositionX + short subscriptPositionX +
    + + +

    Vertical position of the subscript relative to the baseline. This is typically negative.

    +
    + + jj126259 + short subscriptPositionY + short subscriptPositionY +
    + + +

    Horizontal size of the subscript em box in design units, used to scale the simulated subscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client uses its own policy.

    +
    + + jj126259 + short subscriptSizeX + short subscriptSizeX +
    + + +

    Vertical size of the subscript em box in design units, used to scale the simulated subscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client uses its own policy.

    +
    + + jj126259 + short subscriptSizeY + short subscriptSizeY +
    + + +

    Horizontal position of the superscript relative to the baseline origin. This is typically positive (to the right) in italic and oblique fonts, and zero in regular fonts.

    +
    + + jj126259 + short superscriptPositionX + short superscriptPositionX +
    + + +

    Vertical position of the superscript relative to the baseline. This is typically positive.

    +
    + + jj126259 + short superscriptPositionY + short superscriptPositionY +
    + + +

    Horizontal size of the superscript em box in design units, used to scale the simulated superscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client should use its own policy.

    +
    + + jj126259 + short superscriptSizeX + short superscriptSizeX +
    + + +

    Vertical size of the superscript em box in design units, used to scale the simulated superscript relative to the full em box size. This is the numerator of the scaling ratio where denominator is the design units per em. If this member is zero, the font does not specify a scale factor, and the client should use its own policy.

    +
    + + jj126259 + short superscriptSizeY + short superscriptSizeY +
    + + +

    A Boolean value that indicates that the ascent, descent, and lineGap are based on newer 'typographic' values in the font, rather than legacy values.

    +
    + + jj126259 + BOOL hasTypographicMetrics + BOOL hasTypographicMetrics +
    + + +

    Font property used for filtering font sets and building a font set with explicit properties.

    +
    + + dn933212 + DWRITE_FONT_PROPERTY + DWRITE_FONT_PROPERTY +
    + + +

    Specifies the requested font property, such as .

    +
    + + dn933212 + DWRITE_FONT_PROPERTY_ID propertyId + DWRITE_FONT_PROPERTY_ID propertyId +
    + + +

    Specifies the value, such as "Segoe UI".

    +
    + + dn933212 + const wchar_t* propertyValue + wchar_t propertyValue +
    + + +

    Specifies the locale to use, such as "en-US". Simply leave this empty when used with the font set filtering functions, as they will find a match regardless of language. For passing to AddFontFaceReference, the localeName specifies the language of the property value.

    +
    + + dn933212 + const wchar_t* localeName + wchar_t localeName +
    + + +

    Data for a single glyph from GetGlyphImageData.

    +
    + + mt725307 + DWRITE_GLYPH_IMAGE_DATA + DWRITE_GLYPH_IMAGE_DATA +
    + + +

    Pointer to the glyph data.

    +
    + + mt725307 + const void* imageData + void imageData +
    + + +

    Size of glyph data in bytes.

    +
    + + mt725307 + unsigned int imageDataSize + unsigned int imageDataSize +
    + + +

    Unique identifier for the glyph data. Clients may use this to cache a parsed/decompressed version and tell whether a repeated call to the same font returns the same data.

    +
    + + mt725307 + unsigned int uniqueDataId + unsigned int uniqueDataId +
    + + +

    Pixels per em of the returned data. For non-scalable raster data (PNG/TIFF/JPG), this can be larger or smaller than requested from GetGlyphImageData when there isn't an exact match. For scaling intermediate sizes, use: desired pixels per em * font em size / actual pixels per em.

    +
    + + mt725307 + unsigned int pixelsPerEm + unsigned int pixelsPerEm +
    + + +

    Size of image when the format is pixel data.

    +
    + + mt725307 + D2D_SIZE_U pixelSize + D2D_SIZE_U pixelSize +
    + + +

    Left origin along the horizontal Roman baseline.

    +
    + + mt725307 + POINT horizontalLeftOrigin + POINT horizontalLeftOrigin +
    + + +

    Right origin along the horizontal Roman baseline.

    +
    + + mt725307 + POINT horizontalRightOrigin + POINT horizontalRightOrigin +
    + + +

    Top origin along the vertical central baseline.

    +
    + + mt725307 + POINT verticalTopOrigin + POINT verticalTopOrigin +
    + + +

    Bottom origin along vertical central baseline.

    +
    + + mt725307 + POINT verticalBottomOrigin + POINT verticalBottomOrigin +
    + + +

    Specifies the metrics of an individual glyph. The units depend on how the metrics are obtained.

    +
    + + dd368084 + DWRITE_GLYPH_METRICS + DWRITE_GLYPH_METRICS +
    + + +

    Specifies the X offset from the glyph origin to the left edge of the black box. The glyph origin is the current horizontal writing position. A negative value means the black box extends to the left of the origin (often true for lowercase italic 'f').

    +
    + + dd368084 + int leftSideBearing + int leftSideBearing +
    + + +

    Specifies the X offset from the origin of the current glyph to the origin of the next glyph when writing horizontally.

    +
    + + dd368084 + unsigned int advanceWidth + unsigned int advanceWidth +
    + + +

    Specifies the X offset from the right edge of the black box to the origin of the next glyph when writing horizontally. The value is negative when the right edge of the black box overhangs the layout box.

    +
    + + dd368084 + int rightSideBearing + int rightSideBearing +
    + + +

    Specifies the vertical offset from the vertical origin to the top of the black box. Thus, a positive value adds whitespace whereas a negative value means the glyph overhangs the top of the layout box.

    +
    + + dd368084 + int topSideBearing + int topSideBearing +
    + + +

    Specifies the Y offset from the vertical origin of the current glyph to the vertical origin of the next glyph when writing vertically. Note that the term "origin" by itself denotes the horizontal origin. The vertical origin is different. Its Y coordinate is specified by verticalOriginY value, and its X coordinate is half the advanceWidth to the right of the horizontal origin.

    +
    + + dd368084 + unsigned int advanceHeight + unsigned int advanceHeight +
    + + +

    Specifies the vertical distance from the bottom edge of the black box to the advance height. This is positive when the bottom edge of the black box is within the layout box, or negative when the bottom edge of black box overhangs the layout box.

    +
    + + dd368084 + int bottomSideBearing + int bottomSideBearing +
    + + +

    Specifies the Y coordinate of a glyph's vertical origin, in the font's design coordinate system. The y coordinate of a glyph's vertical origin is the sum of the glyph's top side bearing and the top (that is, yMax) of the glyph's bounding box.

    +
    + + dd368084 + int verticalOriginY + int verticalOriginY +
    + + +

    The optional adjustment to a glyph's position.

    +
    + +

    An glyph offset changes the position of a glyph without affecting the pen position. Offsets are in logical, pre-transform units.

    +
    + + dd368086 + DWRITE_GLYPH_OFFSET + DWRITE_GLYPH_OFFSET +
    + + +

    The offset in the advance direction of the run. A positive advance offset moves the glyph to the right (in pre-transform coordinates) if the run is left-to-right or to the left if the run is right-to-left.

    +
    + + dd368086 + float advanceOffset + float advanceOffset +
    + + +

    The offset in the ascent direction, that is, the direction ascenders point. A positive ascender offset moves the glyph up (in pre-transform coordinates). A negative ascender offset moves the glyph down.

    +
    + + dd368086 + float ascenderOffset + float ascenderOffset +
    + + +

    Describes the region obtained by a hit test.

    +
    + + dd368092 + DWRITE_HIT_TEST_METRICS + DWRITE_HIT_TEST_METRICS +
    + + +

    The first text position within the hit region.

    +
    + + dd368092 + unsigned int textPosition + unsigned int textPosition +
    + + +

    The number of text positions within the hit region.

    +
    + + dd368092 + unsigned int length + unsigned int length +
    + + +

    The x-coordinate of the upper-left corner of the hit region.

    +
    + + dd368092 + float left + float left +
    + + +

    The y-coordinate of the upper-left corner of the hit region.

    +
    + + dd368092 + float top + float top +
    + + +

    The width of the hit region.

    +
    + + dd368092 + float width + float width +
    + + +

    The height of the hit region.

    +
    + + dd368092 + float height + float height +
    + + +

    The BIDI level of the text positions within the hit region.

    +
    + + dd368092 + unsigned int bidiLevel + unsigned int bidiLevel +
    + + +

    true if the hit region contains text; otherwise, false.

    +
    + + dd368092 + BOOL isText + BOOL isText +
    + + +

    true if the text range is trimmed; otherwise, false.

    +
    + + dd368092 + BOOL isTrimmed + BOOL isTrimmed +
    + + +

    Contains properties describing the geometric measurement of an + application-defined inline object.

    +
    + + dd368096 + DWRITE_INLINE_OBJECT_METRICS + DWRITE_INLINE_OBJECT_METRICS +
    + + +

    The width of the inline object.

    +
    + + dd368096 + float width + float width +
    + + +

    The height of the inline object.

    +
    + + dd368096 + float height + float height +
    + + +

    The distance from the top of the object to the point where it is lined up with the adjacent text. If the baseline is at the bottom, then baseline simply equals height.

    +
    + + dd368096 + float baseline + float baseline +
    + + +

    A Boolean flag that indicates whether the object is to be placed upright or alongside the text baseline for vertical text.

    +
    + + dd368096 + BOOL supportsSideways + BOOL supportsSideways +
    + + +

    The structure specifies justification info per glyph.

    +
    + + jj126261 + DWRITE_JUSTIFICATION_OPPORTUNITY + DWRITE_JUSTIFICATION_OPPORTUNITY +
    + + +

    Minimum amount of expansion to apply to the side of the glyph. This might vary from zero to infinity, typically being zero except for kashida.

    +
    + + jj126261 + float expansionMinimum + float expansionMinimum +
    + + +

    Maximum amount of expansion to apply to the side of the glyph. This might vary from zero to infinity, being zero for fixed-size characters and connected scripts, and non-zero for discrete scripts, and non-zero for cursive scripts at expansion points.

    +
    + + jj126261 + float expansionMaximum + float expansionMaximum +
    + + +

    Maximum amount of compression to apply to the side of the glyph. This might vary from zero up to the glyph cluster size.

    +
    + + jj126261 + float compressionMaximum + float compressionMaximum +
    + + +

    Priority of this expansion point. Larger priorities are applied later, while priority zero does nothing.

    +
    + + jj126261 + unsigned int expansionPriority + unsigned int expansionPriority +
    + + +

    Priority of this compression point. Larger priorities are applied later, while priority zero does nothing.

    +
    + + jj126261 + unsigned int compressionPriority + unsigned int compressionPriority +
    + + +

    Allow this expansion point to use up any remaining slack space even after all expansion priorities have been used up.

    +
    + + jj126261 + unsigned int allowResidualExpansion + unsigned int allowResidualExpansion +
    + + +

    Allow this compression point to use up any remaining space even after all compression priorities have been used up.

    +
    + + jj126261 + unsigned int allowResidualCompression + unsigned int allowResidualCompression +
    + + +

    Apply expansion and compression to the leading edge of the glyph. This bit is (0) for connected scripts, fixed-size characters, and diacritics. It is generally within a multi-glyph cluster, unless the script allows expansion of glyphs within a cluster, like Thai.

    +
    + + jj126261 + unsigned int applyToLeadingEdge + unsigned int applyToLeadingEdge +
    + + +

    Apply expansion and compression to the trailing edge of the glyph. This bit is (0) for connected scripts, fixed-size characters, and diacritics. It is generally within a multi-glyph cluster, unless the script allows expansion of glyphs within a cluster, like Thai.

    +
    + + jj126261 + unsigned int applyToTrailingEdge + unsigned int applyToTrailingEdge +
    + + +

    Reserved

    +
    + + jj126261 + unsigned int reserved + unsigned int reserved +
    + + +

    Contains information about a formatted line of text.

    +
    + + dd368099 + DWRITE_LINE_METRICS + DWRITE_LINE_METRICS +
    + + +

    The number of text positions in the text line. This includes any trailing whitespace and newline characters.

    +
    + + dd368099 + unsigned int length + unsigned int length +
    + + +

    The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace.

    +
    + + dd368099 + unsigned int trailingWhitespaceLength + unsigned int trailingWhitespaceLength +
    + + +

    The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text.

    +
    + + dd368099 + unsigned int newlineLength + unsigned int newlineLength +
    + + +

    The height of the text line.

    +
    + + dd368099 + float height + float height +
    + + +

    The distance from the top of the text line to its baseline.

    +
    + + dd368099 + float baseline + float baseline +
    + + +

    The line is trimmed.

    +
    + + dd368099 + BOOL isTrimmed + BOOL isTrimmed +
    + + +

    Contains information about a formatted line of text.

    +
    + + dn933215 + DWRITE_LINE_METRICS1 + DWRITE_LINE_METRICS1 +
    + + +

    The number of text positions in the text line. This includes any trailing whitespace and newline characters.

    +
    + + dd368099 + unsigned int length + unsigned int length +
    + + +

    The number of whitespace positions at the end of the text line. Newline sequences are considered whitespace.

    +
    + + dd368099 + unsigned int trailingWhitespaceLength + unsigned int trailingWhitespaceLength +
    + + +

    The number of characters in the newline sequence at the end of the text line. If the count is zero, then the text line was either wrapped or it is the end of the text.

    +
    + + dd368099 + unsigned int newlineLength + unsigned int newlineLength +
    + + +

    The height of the text line.

    +
    + + dd368099 + float height + float height +
    + + +

    The distance from the top of the text line to its baseline.

    +
    + + dd368099 + float baseline + float baseline +
    + + +

    The line is trimmed.

    +
    + + dd368099 + BOOL isTrimmed + BOOL isTrimmed +
    + + +

    White space before the content of the line. This is included in the line height and baseline distances. If the line is formatted horizontally either with a uniform line spacing or with proportional line spacing, this value represents the extra space above the content.

    +
    + + dn933215 + float leadingBefore + float leadingBefore +
    + + +

    White space after the content of the line. This is included in the height of the line. If the line is formatted horizontally either with a uniform line spacing or with proportional line spacing, this value represents the extra space below the content.

    +
    + + dn933215 + float leadingAfter + float leadingAfter +
    + + +

    +

    + + dn933216 + DWRITE_LINE_SPACING + DWRITE_LINE_SPACING +
    + + +

    Method used to determine line spacing.

    +
    + + dn933216 + DWRITE_LINE_SPACING_METHOD method + DWRITE_LINE_SPACING_METHOD method +
    + + +

    Spacing between lines. The interpretation of this parameter depends upon the line spacing method, as follows:

    • Line spacing: ignored
    • uniform line spacing: explicit distance in DIPs between lines
    • proportional line spacing: a scaling factor to be applied to the computed line height; for each line, the height of the line is computed as for default line spacing, and the scaling factor is applied to that value.
    +
    + + dn933216 + float height + float height +
    + + +

    Distance from top of line to baseline. The interpretation of this parameter depends upon the line spacing method, as follows:

    • default line spacing: ignored
    • uniform line spacing: explicit distance in DIPs from the top of the line to the baseline
    • proportional line spacing: a scaling factor applied to the computed baseline; for each line, the baseline distance is computed as for default line spacing, and the scaling factor is applied to that value.
    +
    + + dn933216 + float baseline + float baseline +
    + + +

    Proportion of the entire leading distributed before the line. The allowed value is between 0 and 1.0. The remaining leading is distributed after the line. It is ignored for the default and uniform line spacing methods. The leading that is available to distribute before or after the line depends on the values of the height and baseline parameters.

    +
    + + dn933216 + float leadingBefore + float leadingBefore +
    + + +

    Specify whether ::lineGap value should be part of the line metrics.

    +
    + + dn933216 + DWRITE_FONT_LINE_GAP_USAGE fontLineGapUsage + DWRITE_FONT_LINE_GAP_USAGE fontLineGapUsage +
    + + +

    Indicates how much any visible DIPs (device independent pixels) overshoot each side of the layout or inline objects.

    Positive overhangs indicate that the visible area extends outside the layout box or inline object, while negative values mean there is whitespace inside. The returned values are unaffected by rendering transforms or pixel snapping. Additionally, they may not exactly match the final target's pixel bounds after applying grid fitting and hinting.

    +
    + + dd368109 + DWRITE_OVERHANG_METRICS + DWRITE_OVERHANG_METRICS +
    + + +

    The distance from the left-most visible DIP to its left-alignment edge.

    +
    + + dd368109 + float left + float left +
    + + +

    The distance from the top-most visible DIP to its top alignment edge.

    +
    + + dd368109 + float top + float top +
    + + +

    The distance from the right-most visible DIP to its right-alignment edge.

    +
    + + dd368109 + float right + float right +
    + + +

    The distance from the bottom-most visible DIP to its lower-alignment edge.

    +
    + + dd368109 + float bottom + float bottom +
    + + +

    The union describes typeface classification values that you use with to select and match the font.

    +
    + + Note??The familyKind member (index 0) is the only stable entry in the 10-byte array because all the entries that follow can change dynamically depending on the context of the first member.? + + + hh995027 + DWRITE_PANOSE + DWRITE_PANOSE +
    + + + No documentation. + + + hh995027 + unsigned char values[10] + unsigned char values + + + + No documentation. + + + hh995027 + unsigned char familyKind + unsigned char familyKind + + + + No documentation. + + + hh995027 + DWRITE_PANOSE_INNER_0 text + DWRITE_PANOSE_INNER_0 text + + + + No documentation. + + + hh995027 + DWRITE_PANOSE_INNER_1 script + DWRITE_PANOSE_INNER_1 script + + + + No documentation. + + + hh995027 + DWRITE_PANOSE_INNER_2 decorative + DWRITE_PANOSE_INNER_2 decorative + + + + No documentation. + + + hh995027 + DWRITE_PANOSE_INNER_3 symbol + DWRITE_PANOSE_INNER_3 symbol + + + + No documentation. + + + DWRITE_PANOSE_INNER_2 + DWRITE_PANOSE_INNER_2 + + + + No documentation. + + + unsigned char familyKind + unsigned char familyKind + + + + No documentation. + + + unsigned char decorativeClass + unsigned char decorativeClass + + + + No documentation. + + + unsigned char weight + unsigned char weight + + + + No documentation. + + + unsigned char aspect + unsigned char aspect + + + + No documentation. + + + unsigned char contrast + unsigned char contrast + + + + No documentation. + + + unsigned char serifVariant + unsigned char serifVariant + + + + No documentation. + + + unsigned char fill + unsigned char fill + + + + No documentation. + + + unsigned char lining + unsigned char lining + + + + No documentation. + + + unsigned char decorativeTopology + unsigned char decorativeTopology + + + + No documentation. + + + unsigned char characterRange + unsigned char characterRange + + + + No documentation. + + + DWRITE_PANOSE_INNER_1 + DWRITE_PANOSE_INNER_1 + + + + No documentation. + + + unsigned char familyKind + unsigned char familyKind + + + + No documentation. + + + unsigned char toolKind + unsigned char toolKind + + + + No documentation. + + + unsigned char weight + unsigned char weight + + + + No documentation. + + + unsigned char spacing + unsigned char spacing + + + + No documentation. + + + unsigned char aspectRatio + unsigned char aspectRatio + + + + No documentation. + + + unsigned char contrast + unsigned char contrast + + + + No documentation. + + + unsigned char scriptTopology + unsigned char scriptTopology + + + + No documentation. + + + unsigned char scriptForm + unsigned char scriptForm + + + + No documentation. + + + unsigned char finials + unsigned char finials + + + + No documentation. + + + unsigned char xAscent + unsigned char xAscent + + + + No documentation. + + + DWRITE_PANOSE_INNER_3 + DWRITE_PANOSE_INNER_3 + + + + No documentation. + + + unsigned char familyKind + unsigned char familyKind + + + + No documentation. + + + unsigned char symbolKind + unsigned char symbolKind + + + + No documentation. + + + unsigned char weight + unsigned char weight + + + + No documentation. + + + unsigned char spacing + unsigned char spacing + + + + No documentation. + + + unsigned char aspectRatioAndContrast + unsigned char aspectRatioAndContrast + + + + No documentation. + + + unsigned char aspectRatio94 + unsigned char aspectRatio94 + + + + No documentation. + + + unsigned char aspectRatio119 + unsigned char aspectRatio119 + + + + No documentation. + + + unsigned char aspectRatio157 + unsigned char aspectRatio157 + + + + No documentation. + + + unsigned char aspectRatio163 + unsigned char aspectRatio163 + + + + No documentation. + + + unsigned char aspectRatio211 + unsigned char aspectRatio211 + + + + No documentation. + + + DWRITE_PANOSE_INNER_0 + DWRITE_PANOSE_INNER_0 + + + + No documentation. + + + unsigned char familyKind + unsigned char familyKind + + + + No documentation. + + + unsigned char serifStyle + unsigned char serifStyle + + + + No documentation. + + + unsigned char weight + unsigned char weight + + + + No documentation. + + + unsigned char proportion + unsigned char proportion + + + + No documentation. + + + unsigned char contrast + unsigned char contrast + + + + No documentation. + + + unsigned char strokeVariation + unsigned char strokeVariation + + + + No documentation. + + + unsigned char armStyle + unsigned char armStyle + + + + No documentation. + + + unsigned char letterform + unsigned char letterform + + + + No documentation. + + + unsigned char midline + unsigned char midline + + + + No documentation. + + + unsigned char xHeight + unsigned char xHeight + + + +

    Stores the association of text and its writing system script, as well as some display attributes.

    +
    + + dd368120 + DWRITE_SCRIPT_ANALYSIS + DWRITE_SCRIPT_ANALYSIS +
    + + +

    The zero-based index representation of writing system script.

    +
    + + dd368120 + unsigned short script + unsigned short script +
    + + +

    A value that indicates additional shaping requirement of text.

    +
    + + dd368120 + DWRITE_SCRIPT_SHAPES shapes + DWRITE_SCRIPT_SHAPES shapes +
    + + +

    The structure specifies script properties for caret navigation and justification.

    +
    + + jj126264 + DWRITE_SCRIPT_PROPERTIES + DWRITE_SCRIPT_PROPERTIES +
    + + +

    The standardized four character code for the given script.

    Note??These only include the general Unicode scripts, not any additional ISO 15924 scripts for bibliographic distinction. ?
    +
    + + jj126264 + unsigned int isoScriptCode + unsigned int isoScriptCode +
    + + +

    The standardized numeric code, ranging 0-999.

    +
    + + jj126264 + unsigned int isoScriptNumber + unsigned int isoScriptNumber +
    + + +

    Number of characters to estimate look-ahead for complex scripts. Latin and all Kana are generally 1. Indic scripts are up to 15, and most others are 8.

    Note??Combining marks and variation selectors can produce clusters that are longer than these look-aheads, so this estimate is considered typical language use. Diacritics must be tested explicitly separately. ?
    +
    + + jj126264 + unsigned int clusterLookahead + unsigned int clusterLookahead +
    + + +

    Appropriate character to elongate the given script for justification. For example:

    • Arabic - U+0640 Tatweel
    • Ogham - U+1680 Ogham Space Mark
    +
    + + jj126264 + unsigned int justificationCharacter + unsigned int justificationCharacter +
    + + +

    Restrict the caret to whole clusters, like Thai and Devanagari. Scripts such as Arabic by default allow navigation between clusters. Others like Thai always navigate across whole clusters.

    +
    + + jj126264 + unsigned int restrictCaretToClusters + unsigned int restrictCaretToClusters +
    + + +

    The language uses dividers between words, such as spaces between Latin or the Ethiopic wordspace. Examples include Latin, Greek, Devanagari, and Ethiopic. Chinese, Korean, and Thai are excluded.

    +
    + + jj126264 + unsigned int usesWordDividers + unsigned int usesWordDividers +
    + + +

    The characters are discrete units from each other. This includes both block scripts and clustered scripts. Examples include Latin, Greek, Cyrillic, Hebrew, Chinese, and Thai.

    +
    + + jj126264 + unsigned int isDiscreteWriting + unsigned int isDiscreteWriting +
    + + +

    The language is a block script, expanding between characters. Examples include Chinese, Japanese, Korean, and Bopomofo.

    +
    + + jj126264 + unsigned int isBlockWriting + unsigned int isBlockWriting +
    + + +

    The language is justified within glyph clusters, not just between glyph clusters, such as the character sequence of Thai Lu and Sara Am (U+E026, U+E033), which form a single cluster but still expand between them. Examples include Thai, Lao, and Khmer.

    +
    + + jj126264 + unsigned int isDistributedWithinCluster + unsigned int isDistributedWithinCluster +
    + + +

    The script's clusters are connected to each other (such as the baseline-linked Devanagari), and no separation is added between characters.

    Note??Cursively linked scripts like Arabic are also connected (but not all connected scripts are cursive). ?

    Examples include Devanagari, Arabic, Syriac, Bengala, Gurmukhi, and Ogham. Latin, Chinese, and Thaana are excluded.

    +
    + + jj126264 + unsigned int isConnectedWriting + unsigned int isConnectedWriting +
    + + +

    The script is naturally cursive (Arabic and Syriac), meaning it uses other justification methods like kashida extension rather than inter-character spacing.

    Note?? Although other scripts like Latin and Japanese might actually support handwritten cursive forms, they are not considered cursive scripts. ?

    Examples include Arabic, Syriac, and Mongolian. Thaana, Devanagari, Latin, and Chinese are excluded.

    +
    + + jj126264 + unsigned int isCursiveWriting + unsigned int isCursiveWriting +
    + + +

    Reserved

    +
    + + jj126264 + unsigned int reserved + unsigned int reserved +
    + + +

    Shaping output properties for an output glyph.

    +
    + + dd368125 + DWRITE_SHAPING_TEXT_PROPERTIES + DWRITE_SHAPING_TEXT_PROPERTIES +
    + + +

    Indicates that the glyph is shaped alone.

    +
    + + dd368125 + unsigned short isShapedAlone + unsigned short isShapedAlone +
    + + +

    Reserved for future use.

    +
    + + dd368125 + unsigned short reserved + unsigned short reserved +
    + + +

    Contains information regarding the size and placement of strikethroughs. All coordinates are in device independent pixels (DIPs).

    +
    + + dd368126 + DWRITE_STRIKETHROUGH + DWRITE_STRIKETHROUGH +
    + + +

    A value that indicates the width of the strikethrough, measured parallel to the baseline.

    +
    + + dd368126 + float width + float width +
    + + +

    A value that indicates the thickness of the strikethrough, measured perpendicular to the baseline.

    +
    + + dd368126 + float thickness + float thickness +
    + + +

    A value that indicates the offset of the strikethrough from the baseline. A positive offset represents a position below the baseline and a negative offset is above. Typically, the offset will be negative.

    +
    + + dd368126 + float offset + float offset +
    + + +

    Reading direction of the text associated with the strikethrough. This value is used to interpret whether the width value runs horizontally or vertically.

    +
    + + dd368126 + DWRITE_READING_DIRECTION readingDirection + DWRITE_READING_DIRECTION readingDirection +
    + + +

    Flow direction of the text associated with the strikethrough. This value is used to interpret whether the thickness value advances top to bottom, left to right, or right to left.

    +
    + + dd368126 + DWRITE_FLOW_DIRECTION flowDirection + DWRITE_FLOW_DIRECTION flowDirection +
    + + +

    An array of characters containing the locale of the text that is the strikethrough is being drawn over.

    +
    + + dd368126 + const wchar_t* localeName + wchar_t localeName +
    + + +

    The measuring mode can be useful to the renderer to determine how underlines are rendered, such as rounding the thickness to a whole pixel in GDI-compatible modes.

    +
    + + dd368126 + DWRITE_MEASURING_MODE measuringMode + DWRITE_MEASURING_MODE measuringMode +
    + + +

    Contains the metrics associated with text after layout. All coordinates are in device independent pixels (DIPs).

    +
    + + dd368135 + DWRITE_TEXT_METRICS + DWRITE_TEXT_METRICS +
    + + +

    A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.

    +
    + + dd368135 + float left + float left +
    + + +

    A value that indicates the top-most point of formatted text relative to the layout box, while excluding any glyph overhang.

    +
    + + dd368135 + float top + float top +
    + + +

    A value that indicates the width of the formatted text, while ignoring trailing whitespace at the end of each line.

    +
    + + dd368135 + float width + float width +
    + + +

    The width of the formatted text, taking into account the trailing whitespace at the end of each line.

    +
    + + dd368135 + float widthIncludingTrailingWhitespace + float widthIncludingTrailingWhitespace +
    + + +

    The height of the formatted text. The height of an empty string is set to the same value as that of the default font.

    +
    + + dd368135 + float height + float height +
    + + +

    The initial width given to the layout. It can be either larger or smaller than the text content width, depending on whether the text was wrapped.

    +
    + + dd368135 + float layoutWidth + float layoutWidth +
    + + +

    Initial height given to the layout. Depending on the length of the text, it may be larger or smaller than the text content height.

    +
    + + dd368135 + float layoutHeight + float layoutHeight +
    + + +

    The maximum reordering count of any line of text, used to calculate the most number of hit-testing boxes needed. If the layout has no bidirectional text, or no text at all, the minimum level is 1.

    +
    + + dd368135 + unsigned int maxBidiReorderingDepth + unsigned int maxBidiReorderingDepth +
    + + +

    Total number of lines.

    +
    + + dd368135 + unsigned int lineCount + unsigned int lineCount +
    + + +

    Contains the metrics associated with text after layout. All coordinates are in device independent pixels (DIPs).

    +
    + + dd368135 + DWRITE_TEXT_METRICS1 + DWRITE_TEXT_METRICS1 +
    + + +

    A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.

    +
    + + dd368135 + float left + float left +
    + + +

    A value that indicates the top-most point of formatted text relative to the layout box, while excluding any glyph overhang.

    +
    + + dd368135 + float top + float top +
    + + +

    A value that indicates the width of the formatted text, while ignoring trailing whitespace at the end of each line.

    +
    + + dd368135 + float width + float width +
    + + +

    The width of the formatted text, taking into account the trailing whitespace at the end of each line.

    +
    + + dd368135 + float widthIncludingTrailingWhitespace + float widthIncludingTrailingWhitespace +
    + + +

    The height of the formatted text. The height of an empty string is set to the same value as that of the default font.

    +
    + + dd368135 + float height + float height +
    + + +

    The initial width given to the layout. It can be either larger or smaller than the text content width, depending on whether the text was wrapped.

    +
    + + dd368135 + float layoutWidth + float layoutWidth +
    + + +

    Initial height given to the layout. Depending on the length of the text, it may be larger or smaller than the text content height.

    +
    + + dd368135 + float layoutHeight + float layoutHeight +
    + + +

    The maximum reordering count of any line of text, used to calculate the most number of hit-testing boxes needed. If the layout has no bidirectional text, or no text at all, the minimum level is 1.

    +
    + + dd368135 + unsigned int maxBidiReorderingDepth + unsigned int maxBidiReorderingDepth +
    + + +

    Total number of lines.

    +
    + + dd368135 + unsigned int lineCount + unsigned int lineCount +
    + + +

    A value that indicates the left-most point of formatted text relative to the layout box, while excluding any glyph overhang.

    +
    + + dd368135 + float heightIncludingTrailingWhitespace + float heightIncludingTrailingWhitespace +
    + + +

    Specifies the trimming option for text overflowing the layout box.

    +
    + + dd368139 + DWRITE_TRIMMING + DWRITE_TRIMMING +
    + + +

    A value that specifies the text granularity used to trim text overflowing the layout box.

    +
    + + dd368139 + DWRITE_TRIMMING_GRANULARITY granularity + DWRITE_TRIMMING_GRANULARITY granularity +
    + + +

    A character code used as the delimiter that signals the beginning of the portion of text to be preserved. Text starting from the Nth occurence of the delimiter (where N equals delimiterCount) counting backwards from the end of the text block will be preserved. For example, given the text is a path like c:\A\B\C\D\file.txt and delimiter equal to '\' and delimiterCount equal to 1, the file.txt portion of the text would be preserved. Specifying a delimiterCount of 2 would preserve D\file.txt.

    +
    + + dd368139 + unsigned int delimiter + unsigned int delimiter +
    + + +

    The delimiter count, counting from the end of the text, to preserve text from.

    +
    + + dd368139 + unsigned int delimiterCount + unsigned int delimiterCount +
    + + +

    Contains a set of typographic features to be applied during text shaping.

    +
    + + dd368143 + DWRITE_TYPOGRAPHIC_FEATURES + DWRITE_TYPOGRAPHIC_FEATURES +
    + + +

    A reference to a structure that specifies properties used to identify and execute typographic features in the font.

    +
    + + dd368143 + DWRITE_FONT_FEATURE* features + DWRITE_FONT_FEATURE features +
    + + +

    A value that indicates the number of features being applied to a font face.

    +
    + + dd368143 + unsigned int featureCount + unsigned int featureCount +
    + + +

    Contains information about the width, thickness, offset, run height, reading direction, and flow direction of an underline.

    +
    + +

    All coordinates are in device independent pixels (DIPs).

    +
    + + dd368145 + DWRITE_UNDERLINE + DWRITE_UNDERLINE +
    + + +

    A value that indicates the width of the underline, measured parallel to the baseline.

    +
    + + dd368145 + float width + float width +
    + + +

    A value that indicates the thickness of the underline, measured perpendicular to the baseline.

    +
    + + dd368145 + float thickness + float thickness +
    + + +

    A value that indicates the offset of the underline from the baseline. A positive offset represents a position below the baseline (away from the text) and a negative offset is above (toward the text).

    +
    + + dd368145 + float offset + float offset +
    + + +

    A value that indicates the height of the tallest run where the underline is applied.

    +
    + + dd368145 + float runHeight + float runHeight +
    + + +

    A value that indicates the reading direction of the text associated with the underline. This value is used to interpret whether the width value runs horizontally or vertically.

    +
    + + dd368145 + DWRITE_READING_DIRECTION readingDirection + DWRITE_READING_DIRECTION readingDirection +
    + + +

    A value that indicates the flow direction of the text associated with the underline. This value is used to interpret whether the thickness value advances top to bottom, left to right, or right to left.

    +
    + + dd368145 + DWRITE_FLOW_DIRECTION flowDirection + DWRITE_FLOW_DIRECTION flowDirection +
    + + +

    An array of characters which contains the locale of the text that the underline is being drawn under. For example, in vertical text, the underline belongs on the left for Chinese but on the right for Japanese.

    +
    + + dd368145 + const wchar_t* localeName + wchar_t localeName +
    + + +

    The measuring mode can be useful to the renderer to determine how underlines are rendered, such as rounding the thickness to a whole pixel in GDI-compatible modes.

    +
    + + dd368145 + DWRITE_MEASURING_MODE measuringMode + DWRITE_MEASURING_MODE measuringMode +
    + + +

    The structure specifies the range of Unicode code points.

    +
    + + jj126265 + DWRITE_UNICODE_RANGE + DWRITE_UNICODE_RANGE +
    + + +

    The first code point in the Unicode range.

    +
    + + jj126265 + unsigned int first + unsigned int first +
    + + +

    The last code point in the Unicode range.

    +
    + + jj126265 + unsigned int last + unsigned int last +
    + + +

    Specifies the identifiers of the metadata items in an 8BIM IPTC digest metadata block.

    +
    + + ee719802 + WIC8BIMIptcDigestProperties + WIC8BIMIptcDigestProperties +
    + + +

    [VT_LPSTR] A name that identifies the 8BIM block.

    +
    + + ee719802 + WIC8BIMIptcDigestPString + WIC8BIMIptcDigestPString +
    + + +

    [VT_BLOB] The embedded IPTC digest value.

    +
    + + ee719802 + WIC8BIMIptcDigestIptcDigest + WIC8BIMIptcDigestIptcDigest +
    + + +

    Specifies the identifiers of the metadata items in an 8BIM IPTC block.

    +
    + + ee719803 + WIC8BIMIptcProperties + WIC8BIMIptcProperties +
    + + +

    [VT_LPSTR] A name that identifies the 8BIM block.

    +
    + + ee719803 + WIC8BIMIptcPString + WIC8BIMIptcPString +
    + + +

    [VT_UNKNOWN] The IPTC block embedded in this 8BIM IPTC block.

    +
    + + ee719803 + WIC8BIMIptcEmbeddedIPTC + WIC8BIMIptcEmbeddedIPTC +
    + + +

    Specifies the identifiers of the metadata items in an 8BIMResolutionInfo block.

    +
    + + ee719804 + WIC8BIMResolutionInfoProperties + WIC8BIMResolutionInfoProperties +
    + + +

    [VT_LPSTR] A name that identifies the 8BIM block.

    +
    + + ee719804 + WIC8BIMResolutionInfoPString + WIC8BIMResolutionInfoPString +
    + + +

    [VT_UI4] The horizontal resolution of the image.

    +
    + + ee719804 + WIC8BIMResolutionInfoHResolution + WIC8BIMResolutionInfoHResolution +
    + + +

    [VT_UI2] The units that the horizontal resolution is specified in; a 1 indicates pixels per inch and a 2 indicates pixels per centimeter.

    +
    + + ee719804 + WIC8BIMResolutionInfoHResolutionUnit + WIC8BIMResolutionInfoHResolutionUnit +
    + + +

    [VT_UI2] The units that the image width is specified in; a 1 indicates inches, a 2 indicates centimeters, a 3 indicates points, a 4 specifies picas, and a 5 specifies columns.

    +
    + + ee719804 + WIC8BIMResolutionInfoWidthUnit + WIC8BIMResolutionInfoWidthUnit +
    + + +

    [VT_UI4] The vertical resolution of the image.

    +
    + + ee719804 + WIC8BIMResolutionInfoVResolution + WIC8BIMResolutionInfoVResolution +
    + + +

    [VT_UI2] The units that the vertical resolution is specified in; a 1 indicates pixels per inch and a 2 indicates pixels per centimeter.

    +
    + + ee719804 + WIC8BIMResolutionInfoVResolutionUnit + WIC8BIMResolutionInfoVResolutionUnit +
    + + +

    [VT_UI2] The units that the image height is specified in; a 1 indicates inches, a 2 indicates centimeters, a 3 indicates points, a 4 specifies picas, and a 5 specifies columns.

    +
    + + ee719804 + WIC8BIMResolutionInfoHeightUnit + WIC8BIMResolutionInfoHeightUnit +
    + + +

    Specifies the desired alpha channel usage.

    +
    + + ee719805 + WICBitmapAlphaChannelOption + WICBitmapAlphaChannelOption +
    + + +

    Use alpha channel.

    +
    + + ee719805 + WICBitmapUseAlpha + WICBitmapUseAlpha +
    + + +

    Use a pre-multiplied alpha channel.

    +
    + + ee719805 + WICBitmapUsePremultipliedAlpha + WICBitmapUsePremultipliedAlpha +
    + + +

    Ignore alpha channel.

    +
    + + ee719805 + WICBitmapIgnoreAlpha + WICBitmapIgnoreAlpha +
    + + +

    Specifies the desired cache usage.

    +
    + +

    The CreateBitmap of the interface does not support when the pixelFormat is a native pixel format provided by Windows Imaging Component (WIC).

    +
    + + ee719806 + WICBitmapCreateCacheOption + WICBitmapCreateCacheOption +
    + + +

    Do not cache the bitmap.

    +
    + + ee719806 + WICBitmapNoCache + WICBitmapNoCache +
    + + +

    Cache the bitmap when needed.

    +
    + + ee719806 + WICBitmapCacheOnDemand + WICBitmapCacheOnDemand +
    + + +

    Cache the bitmap at initialization.

    +
    + + ee719806 + WICBitmapCacheOnLoad + WICBitmapCacheOnLoad +
    + + +

    Specifies the capabilities of the decoder.

    +
    + + ee719807 + WICBitmapDecoderCapabilities + WICBitmapDecoderCapabilities +
    + + +

    Decoder recognizes the image was encoded with an encoder produced by the same vendor.

    +
    + + ee719807 + WICBitmapDecoderCapabilitySameEncoder + WICBitmapDecoderCapabilitySameEncoder +
    + + +

    Decoder can decode all the images within an image container.

    +
    + + ee719807 + WICBitmapDecoderCapabilityCanDecodeAllImages + WICBitmapDecoderCapabilityCanDecodeAllImages +
    + + +

    Decoder can decode some of the images within an image container.

    +
    + + ee719807 + WICBitmapDecoderCapabilityCanDecodeSomeImages + WICBitmapDecoderCapabilityCanDecodeSomeImages +
    + + +

    Decoder can enumerate the metadata blocks within a container format.

    +
    + + ee719807 + WICBitmapDecoderCapabilityCanEnumerateMetadata + WICBitmapDecoderCapabilityCanEnumerateMetadata +
    + + +

    Decoder can find and decode a thumbnail.

    +
    + + ee719807 + WICBitmapDecoderCapabilityCanDecodeThumbnail + WICBitmapDecoderCapabilityCanDecodeThumbnail +
    + + + None. + + + None + None + + + +

    Specifies the type of dither algorithm to apply when converting between image formats.

    +
    + + ee719808 + WICBitmapDitherType + WICBitmapDitherType +
    + + +

    A solid color algorithm without dither.

    +
    + + ee719808 + WICBitmapDitherTypeNone + WICBitmapDitherTypeNone +
    + + +

    A solid color algorithm without dither.

    +
    + + ee719808 + WICBitmapDitherTypeSolid + WICBitmapDitherTypeSolid +
    + + +

    A 4x4 ordered dither algorithm.

    +
    + + ee719808 + WICBitmapDitherTypeOrdered4x4 + WICBitmapDitherTypeOrdered4x4 +
    + + +

    An 8x8 ordered dither algorithm.

    +
    + + ee719808 + WICBitmapDitherTypeOrdered8x8 + WICBitmapDitherTypeOrdered8x8 +
    + + +

    A 16x16 ordered dither algorithm.

    +
    + + ee719808 + WICBitmapDitherTypeOrdered16x16 + WICBitmapDitherTypeOrdered16x16 +
    + + +

    A 4x4 spiral dither algorithm.

    +
    + + ee719808 + WICBitmapDitherTypeSpiral4x4 + WICBitmapDitherTypeSpiral4x4 +
    + + +

    An 8x8 spiral dither algorithm.

    +
    + + ee719808 + WICBitmapDitherTypeSpiral8x8 + WICBitmapDitherTypeSpiral8x8 +
    + + +

    A 4x4 dual spiral dither algorithm.

    +
    + + ee719808 + WICBitmapDitherTypeDualSpiral4x4 + WICBitmapDitherTypeDualSpiral4x4 +
    + + +

    An 8x8 dual spiral dither algorithm.

    +
    + + ee719808 + WICBitmapDitherTypeDualSpiral8x8 + WICBitmapDitherTypeDualSpiral8x8 +
    + + +

    An error diffusion algorithm.

    +
    + + ee719808 + WICBitmapDitherTypeErrorDiffusion + WICBitmapDitherTypeErrorDiffusion +
    + + +

    Specifies the cache options available for an encoder.

    +
    + + ee719809 + WICBitmapEncoderCacheOption + WICBitmapEncoderCacheOption +
    + + +

    The encoder is cached in memory. This option is not supported.

    +
    + + ee719809 + WICBitmapEncoderCacheInMemory + WICBitmapEncoderCacheInMemory +
    + + +

    The encoder is cached to a temporary file. This option is not supported.

    +
    + + ee719809 + WICBitmapEncoderCacheTempFile + WICBitmapEncoderCacheTempFile +
    + + +

    The encoder is not cached.

    +
    + + ee719809 + WICBitmapEncoderNoCache + WICBitmapEncoderNoCache +
    + + +

    Specifies the sampling or filtering mode to use when scaling an image.

    +
    + + ee719810 + WICBitmapInterpolationMode + WICBitmapInterpolationMode +
    + + +

    A nearest neighbor interpolation algorithm. Also known as nearest pixel or point interpolation.

    The output pixel is assigned the value of the pixel that the point falls within. No other pixels are considered.

    +
    + + ee719810 + WICBitmapInterpolationModeNearestNeighbor + WICBitmapInterpolationModeNearestNeighbor +
    + + +

    A bilinear interpolation algorithm.

    The output pixel values are computed as a weighted average of the nearest four pixels in a 2x2 grid.

    +
    + + ee719810 + WICBitmapInterpolationModeLinear + WICBitmapInterpolationModeLinear +
    + + +

    A bicubic interpolation algorithm.

    Destination pixel values are computed as a weighted average of the nearest sixteen pixels in a 4x4 grid.

    +
    + + ee719810 + WICBitmapInterpolationModeCubic + WICBitmapInterpolationModeCubic +
    + + +

    A Fant resampling algorithm.

    Destination pixel values are computed as a weighted average of the all the pixels that map to the new pixel.

    +
    + + ee719810 + WICBitmapInterpolationModeFant + WICBitmapInterpolationModeFant +
    + + +

    A high quality bicubic interpolation algorithm. Destination pixel values are computed using a much denser sampling kernel than regular cubic. The kernel is resized in response to the scale factor, making it suitable for downscaling by factors greater than 2.

    Note??This value is supported beginning with Windows?10. ?
    +
    + + ee719810 + WICBitmapInterpolationModeHighQualityCubic + WICBitmapInterpolationModeHighQualityCubic +
    + + +

    Specifies access to an .

    +
    + + ee719811 + WICBitmapLockFlags + WICBitmapLockFlags +
    + + + No documentation. + + + ee719811 + WICBitmapLockRead + WICBitmapLockRead + + + + No documentation. + + + ee719811 + WICBitmapLockWrite + WICBitmapLockWrite + + + +

    Specifies the type of palette used for an indexed image format.

    +
    + + ee719812 + WICBitmapPaletteType + WICBitmapPaletteType +
    + + +

    An arbitrary custom palette provided by caller.

    +
    + + ee719812 + WICBitmapPaletteTypeCustom + WICBitmapPaletteTypeCustom +
    + + +

    An optimal palette generated using a median-cut algorithm. Derived from the colors in an image.

    +
    + + ee719812 + WICBitmapPaletteTypeMedianCut + WICBitmapPaletteTypeMedianCut +
    + + +

    A black and white palette.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedBW + WICBitmapPaletteTypeFixedBW +
    + + +

    A palette that has its 8-color on-off primaries and the 16 system colors added. With duplicates removed, 16 colors are available.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedHalftone8 + WICBitmapPaletteTypeFixedHalftone8 +
    + + +

    A palette that has 3 intensity levels of each primary: 27-color on-off primaries and the 16 system colors added. With duplicates removed, 35 colors are available.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedHalftone27 + WICBitmapPaletteTypeFixedHalftone27 +
    + + +

    A palette that has 4 intensity levels of each primary: 64-color on-off primaries and the 16 system colors added. With duplicates removed, 72 colors are available.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedHalftone64 + WICBitmapPaletteTypeFixedHalftone64 +
    + + +

    A palette that has 5 intensity levels of each primary: 125-color on-off primaries and the 16 system colors added. With duplicates removed, 133 colors are available.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedHalftone125 + WICBitmapPaletteTypeFixedHalftone125 +
    + + +

    A palette that has 6 intensity levels of each primary: 216-color on-off primaries and the 16 system colors added. With duplicates removed, 224 colors are available. This is the same as WICBitmapPaletteFixedHalftoneWeb.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedHalftone216 + WICBitmapPaletteTypeFixedHalftone216 +
    + + +

    A palette that has 6 intensity levels of each primary: 216-color on-off primaries and the 16 system colors added. With duplicates removed, 224 colors are available. This is the same as .

    +
    + + ee719812 + WICBitmapPaletteTypeFixedWebPalette + WICBitmapPaletteTypeFixedWebPalette +
    + + +

    A palette that has its 252-color on-off primaries and the 16 system colors added. With duplicates removed, 256 colors are available.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedHalftone252 + WICBitmapPaletteTypeFixedHalftone252 +
    + + +

    A palette that has its 256-color on-off primaries and the 16 system colors added. With duplicates removed, 256 colors are available.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedHalftone256 + WICBitmapPaletteTypeFixedHalftone256 +
    + + +

    A palette that has 4 shades of gray.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedGray4 + WICBitmapPaletteTypeFixedGray4 +
    + + +

    A palette that has 16 shades of gray.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedGray16 + WICBitmapPaletteTypeFixedGray16 +
    + + +

    A palette that has 256 shades of gray.

    +
    + + ee719812 + WICBitmapPaletteTypeFixedGray256 + WICBitmapPaletteTypeFixedGray256 +
    + + +

    Specifies the flip and rotation transforms.

    +
    + + ee719814 + WICBitmapTransformOptions + WICBitmapTransformOptions +
    + + +

    A rotation of 0 degrees.

    +
    + + ee719814 + WICBitmapTransformRotate0 + WICBitmapTransformRotate0 +
    + + +

    A clockwise rotation of 90 degrees.

    +
    + + ee719814 + WICBitmapTransformRotate90 + WICBitmapTransformRotate90 +
    + + +

    A clockwise rotation of 180 degrees.

    +
    + + ee719814 + WICBitmapTransformRotate180 + WICBitmapTransformRotate180 +
    + + +

    A clockwise rotation of 270 degrees.

    +
    + + ee719814 + WICBitmapTransformRotate270 + WICBitmapTransformRotate270 +
    + + +

    A horizontal flip. Pixels are flipped around the vertical y-axis.

    +
    + + ee719814 + WICBitmapTransformFlipHorizontal + WICBitmapTransformFlipHorizontal +
    + + +

    A vertical flip. Pixels are flipped around the horizontal x-axis.

    +
    + + ee719814 + WICBitmapTransformFlipVertical + WICBitmapTransformFlipVertical +
    + + +

    Specifies the color context types.

    +
    + + ee719815 + WICColorContextType + WICColorContextType +
    + + +

    An uninitialized color context.

    +
    + + ee719815 + WICColorContextUninitialized + WICColorContextUninitialized +
    + + +

    A color context that is a full ICC color profile.

    +
    + + ee719815 + WICColorContextProfile + WICColorContextProfile +
    + + +

    A color context that is one of a number of set color spaces (sRGB, AdobeRGB) that are defined in the EXIF specification.

    +
    + + ee719815 + WICColorContextExifColorSpace + WICColorContextExifColorSpace +
    + + +

    Specifies component enumeration options.

    +
    + + ee719816 + WICComponentEnumerateOptions + WICComponentEnumerateOptions +
    + + +

    Enumerate any components that are not disabled. Because this value is 0x0, it is always included with the other options.

    +
    + + ee719816 + WICComponentEnumerateDefault + WICComponentEnumerateDefault +
    + + +

    Force a read of the registry before enumerating components.

    +
    + + ee719816 + WICComponentEnumerateRefresh + WICComponentEnumerateRefresh +
    + + +

    Include disabled components in the enumeration. The set of disabled components is disjoint with the set of default enumerated components

    +
    + + ee719816 + WICComponentEnumerateDisabled + WICComponentEnumerateDisabled +
    + + +

    Include unsigned components in the enumeration. This option has no effect.

    +
    + + ee719816 + WICComponentEnumerateUnsigned + WICComponentEnumerateUnsigned +
    + + +

    At the end of component enumeration, filter out any components that are not Windows provided.

    +
    + + ee719816 + WICComponentEnumerateBuiltInOnly + WICComponentEnumerateBuiltInOnly +
    + + +

    Specifies the component signing status.

    +
    + + ee719817 + WICComponentSigning + WICComponentSigning +
    + + +

    A signed component.

    +
    + + ee719817 + WICComponentSigned + WICComponentSigned +
    + + +

    An unsigned component

    +
    + + ee719817 + WICComponentUnsigned + WICComponentUnsigned +
    + + +

    A component is safe.

    Components that do not have a binary component to sign, such as a pixel format, should return this value.

    +
    + + ee719817 + WICComponentSafe + WICComponentSafe +
    + + +

    A component has been disabled.

    +
    + + ee719817 + WICComponentDisabled + WICComponentDisabled +
    + + +

    Specifies the type of Windows Imaging Component (WIC) component.

    +
    + + ee719818 + WICComponentType + WICComponentType +
    + + +

    A WIC decoder.

    +
    + + ee719818 + WICDecoder + WICDecoder +
    + + +

    A WIC encoder.

    +
    + + ee719818 + WICEncoder + WICEncoder +
    + + +

    A WIC pixel converter.

    +
    + + ee719818 + WICPixelFormatConverter + WICPixelFormatConverter +
    + + +

    A WIC metadata reader.

    +
    + + ee719818 + WICMetadataReader + WICMetadataReader +
    + + +

    A WIC metadata writer.

    +
    + + ee719818 + WICMetadataWriter + WICMetadataWriter +
    + + +

    A WIC pixel format.

    +
    + + ee719818 + WICPixelFormat + WICPixelFormat +
    + + +

    All WIC components.

    +
    + + ee719818 + WICAllComponents + WICAllComponents +
    + + +

    Specifies the the meaning of pixel color component values contained in the DDS image.

    +
    + + dn302101 + WICDdsAlphaMode + WICDdsAlphaMode +
    + + +

    Alpha behavior is unspecified and must be determined by the reader.

    +
    + + dn302101 + WICDdsAlphaModeUnknown + WICDdsAlphaModeUnknown +
    + + +

    The alpha data is straight.

    +
    + + dn302101 + WICDdsAlphaModeStraight + WICDdsAlphaModeStraight +
    + + +

    The alpha data is premultiplied.

    +
    + + dn302101 + WICDdsAlphaModePremultiplied + WICDdsAlphaModePremultiplied +
    + + +

    The alpha data is opaque (UNORM value of 1). This can be used by a compliant reader as a performance optimization. For example, blending operations can be converted to copies.

    +
    + + dn302101 + WICDdsAlphaModeOpaque + WICDdsAlphaModeOpaque +
    + + +

    The alpha channel contains custom data that is not alpha.

    +
    + + dn302101 + WICDdsAlphaModeCustom + WICDdsAlphaModeCustom +
    + + +

    Specifies the dimension type of the data contained in DDS image.

    +
    + +

    Both WICDdsTexture2d and correspond to . When using , they are distinguished by the flag in the structure .

    +
    + + dn302102 + WICDdsDimension + WICDdsDimension +
    + + +

    DDS image contains a 1-dimensional texture .

    +
    + + dn302102 + WICDdsTexture1D + WICDdsTexture1D +
    + + +

    DDS image contains a 2-dimensional texture .

    +
    + + dn302102 + WICDdsTexture2D + WICDdsTexture2D +
    + + +

    DDS image contains a 3-dimensional texture .

    +
    + + dn302102 + WICDdsTexture3D + WICDdsTexture3D +
    + + +

    The DDS image contains a cube texture represented as an array of 6 faces.

    +
    + + dn302102 + WICDdsTextureCube + WICDdsTextureCube +
    + + +

    Specifies decode options.

    +
    + + ee719824 + WICDecodeOptions + WICDecodeOptions +
    + + +

    Cache metadata when needed.

    +
    + + ee719824 + WICDecodeMetadataCacheOnDemand + WICDecodeMetadataCacheOnDemand +
    + + +

    Cache metadata when decoder is loaded.

    +
    + + ee719824 + WICDecodeMetadataCacheOnLoad + WICDecodeMetadataCacheOnLoad +
    + + +

    Specifies the application extension metadata properties for a Graphics Interchange Format (GIF) image.

    +
    + + ee719826 + WICGifApplicationExtensionProperties + WICGifApplicationExtensionProperties +
    + + +

    [VT_UI1 | VT_VECTOR] Indicates a string that identifies the application.

    +
    + + ee719826 + WICGifApplicationExtensionApplication + WICGifApplicationExtensionApplication +
    + + +

    [VT_UI1 | VT_VECTOR] Indicates data that is exposed by the application.

    +
    + + ee719826 + WICGifApplicationExtensionData + WICGifApplicationExtensionData +
    + + +

    Specifies the comment extension metadata properties for a Graphics Interchange Format (GIF) image.

    +
    + + ee719827 + WICGifCommentExtensionProperties + WICGifCommentExtensionProperties +
    + + +

    [VT_LPSTR] Indicates the comment text.

    +
    + + ee719827 + WICGifCommentExtensionText + WICGifCommentExtensionText +
    + + +

    Specifies the graphic control extension metadata properties that define the transitions between each frame animation for Graphics Interchange Format (GIF) images.

    +
    + + ee719828 + WICGifGraphicControlExtensionProperties + WICGifGraphicControlExtensionProperties +
    + + +

    [VT_UI1] Indicates the disposal requirements. 0 - no disposal, 1 - do not dispose, 2 - restore to background color, 3 - restore to previous.

    +
    + + ee719828 + WICGifGraphicControlExtensionDisposal + WICGifGraphicControlExtensionDisposal +
    + + +

    [VT_BOOL] Indicates the user input flag. TRUE if user input should advance to the next frame; otherwise, .

    +
    + + ee719828 + WICGifGraphicControlExtensionUserInputFlag + WICGifGraphicControlExtensionUserInputFlag +
    + + +

    [VT_BOOL] Indicates the transparency flag. TRUE if a transparent color in is in the color table for this frame; otherwise, .

    +
    + + ee719828 + WICGifGraphicControlExtensionTransparencyFlag + WICGifGraphicControlExtensionTransparencyFlag +
    + + +

    [VT_UI2] Indicates how long to display the next frame before advancing to the next frame, in units of 1/100th of a second.

    +
    + + ee719828 + WICGifGraphicControlExtensionDelay + WICGifGraphicControlExtensionDelay +
    + + +

    [VT_UI1] Indicates which color in the palette should be treated as transparent.

    +
    + + ee719828 + WICGifGraphicControlExtensionTransparentColorIndex + WICGifGraphicControlExtensionTransparentColorIndex +
    + + +

    Specifies the image descriptor metadata properties for Graphics Interchange Format (GIF) frames.

    +
    + + ee719829 + WICGifImageDescriptorProperties + WICGifImageDescriptorProperties +
    + + +

    [VT_UI2] Indicates the X offset at which to locate this frame within the logical screen.

    +
    + + ee719829 + WICGifImageDescriptorLeft + WICGifImageDescriptorLeft +
    + + +

    [VT_UI2] Indicates the Y offset at which to locate this frame within the logical screen.

    +
    + + ee719829 + WICGifImageDescriptorTop + WICGifImageDescriptorTop +
    + + +

    [VT_UI2] Indicates width of this frame, in pixels.

    +
    + + ee719829 + WICGifImageDescriptorWidth + WICGifImageDescriptorWidth +
    + + +

    [VT_UI2] Indicates height of this frame, in pixels.

    +
    + + ee719829 + WICGifImageDescriptorHeight + WICGifImageDescriptorHeight +
    + + +

    [VT_BOOL] Indicates the local color table flag. TRUE if global color table is present; otherwise, .

    +
    + + ee719829 + WICGifImageDescriptorLocalColorTableFlag + WICGifImageDescriptorLocalColorTableFlag +
    + + +

    [VT_BOOL] Indicates the interlace flag. TRUE if image is interlaced; otherwise, .

    +
    + + ee719829 + WICGifImageDescriptorInterlaceFlag + WICGifImageDescriptorInterlaceFlag +
    + + +

    [VT_BOOL] Indicates the sorted color table flag. TRUE if the color table is sorted from most frequently to least frequently used color; otherwise, .

    +
    + + ee719829 + WICGifImageDescriptorSortFlag + WICGifImageDescriptorSortFlag +
    + + +

    [VT_UI1] Indicates the value used to calculate the number of bytes contained in the global color table.

    To calculate the actual size of the color table, raise 2 to the value of the field + 1.

    +
    + + ee719829 + WICGifImageDescriptorLocalColorTableSize + WICGifImageDescriptorLocalColorTableSize +
    + + +

    Specifies the logical screen descriptor properties for Graphics Interchange Format (GIF) metadata.

    +
    + + ee719830 + WICGifLogicalScreenDescriptorProperties + WICGifLogicalScreenDescriptorProperties +
    + + +

    [VT_UI1 | VT_VECTOR] Indicates the signature property.

    +
    + + ee719830 + WICGifLogicalScreenSignature + WICGifLogicalScreenSignature +
    + + +

    [VT_UI2] Indicates the width in pixels.

    +
    + + ee719830 + WICGifLogicalScreenDescriptorWidth + WICGifLogicalScreenDescriptorWidth +
    + + +

    [VT_UI2] Indicates the height in pixels.

    +
    + + ee719830 + WICGifLogicalScreenDescriptorHeight + WICGifLogicalScreenDescriptorHeight +
    + + +

    [VT_BOOL] Indicates the global color table flag. TRUE if a global color table is present; otherwise, .

    +
    + + ee719830 + WICGifLogicalScreenDescriptorGlobalColorTableFlag + WICGifLogicalScreenDescriptorGlobalColorTableFlag +
    + + +

    [VT_UI1] Indicates the color resolution in bits per pixel.

    +
    + + ee719830 + WICGifLogicalScreenDescriptorColorResolution + WICGifLogicalScreenDescriptorColorResolution +
    + + +

    [VT_BOOL] Indicates the sorted color table flag. TRUE if the table is sorted; otherwise, .

    +
    + + ee719830 + WICGifLogicalScreenDescriptorSortFlag + WICGifLogicalScreenDescriptorSortFlag +
    + + +

    [VT_UI1] Indicates the value used to calculate the number of bytes contained in the global color table.

    To calculate the actual size of the color table, raise 2 to the value of the field + 1.

    +
    + + ee719830 + WICGifLogicalScreenDescriptorGlobalColorTableSize + WICGifLogicalScreenDescriptorGlobalColorTableSize +
    + + +

    [VT_UI1] Indicates the index within the color table to use for the background (pixels not defined in the image).

    +
    + + ee719830 + WICGifLogicalScreenDescriptorBackgroundColorIndex + WICGifLogicalScreenDescriptorBackgroundColorIndex +
    + + +

    [VT_UI1] Indicates the factor used to compute an approximation of the aspect ratio.

    +
    + + ee719830 + WICGifLogicalScreenDescriptorPixelAspectRatio + WICGifLogicalScreenDescriptorPixelAspectRatio +
    + + +

    Specifies the JPEG chrominance table property.

    +
    + + ee719831 + WICJpegChrominanceProperties + WICJpegChrominanceProperties +
    + + +

    [VT_UI2|VT_VECTOR] Indicates the metadata property is a chrominance table.

    +
    + + ee719831 + WICJpegChrominanceTable + WICJpegChrominanceTable +
    + + +

    Specifies the JPEG comment properties.

    +
    + + ee719832 + WICJpegCommentProperties + WICJpegCommentProperties +
    + + +

    Indicates the metadata property is comment text.

    +
    + + ee719832 + WICJpegCommentText + WICJpegCommentText +
    + + +

    Specifies the options for indexing a JPEG image.

    +
    + + dn903880 + WICJpegIndexingOptions + WICJpegIndexingOptions +
    + + +

    Index generation is deferred until is called on the image.

    +
    + + dn903880 + WICJpegIndexingOptionsGenerateOnDemand + WICJpegIndexingOptionsGenerateOnDemand +
    + + +

    Index generation is performed when the when the image is initially loaded.

    +
    + + dn903880 + WICJpegIndexingOptionsGenerateOnLoad + WICJpegIndexingOptionsGenerateOnLoad +
    + + +

    Specifies the JPEG luminance table property.

    +
    + + ee719833 + WICJpegLuminanceProperties + WICJpegLuminanceProperties +
    + + +

    [VT_UI2|VT_VECTOR] Indicates the metadata property is a luminance table.

    +
    + + ee719833 + WICJpegLuminanceTable + WICJpegLuminanceTable +
    + + +

    Specifies the memory layout of pixel data in a JPEG image scan.

    +
    + + dn903892 + WICJpegScanType + WICJpegScanType +
    + + +

    The pixel data is stored in an interleaved memory layout.

    +
    + + dn903892 + WICJpegScanTypeInterleaved + WICJpegScanTypeInterleaved +
    + + +

    The pixel data is stored in a planar memory layout.

    +
    + + dn903892 + WICJpegScanTypePlanarComponents + WICJpegScanTypePlanarComponents +
    + + +

    The pixel data is stored in a progressive layout.

    +
    + + dn903892 + WICJpegScanTypeProgressive + WICJpegScanTypeProgressive +
    + + +

    Specifies conversion matrix from Y'Cb'Cr' to R'G'B'.

    +
    + + dn903893 + WICJpegTransferMatrix + WICJpegTransferMatrix +
    + + +

    Specifies the identity transfer matrix.

    +
    + + dn903893 + WICJpegTransferMatrixIdentity + WICJpegTransferMatrixIdentity +
    + + +

    Specifies the BT601 transfer matrix.

    +
    + + dn903893 + WICJpegTransferMatrixBT601 + WICJpegTransferMatrixBT601 +
    + + +

    Specifies the JPEG YCrCB subsampling options.

    +
    + +

    The native JPEG encoder uses .

    +
    + + ee719834 + WICJpegYCrCbSubsamplingOption + WICJpegYCrCbSubsamplingOption +
    + + +

    The default subsampling option.

    +
    + + ee719834 + WICJpegYCrCbSubsamplingDefault + WICJpegYCrCbSubsamplingDefault +
    + + +

    Subsampling option that uses both horizontal and vertical decimation.

    +
    + + ee719834 + WICJpegYCrCbSubsampling420 + WICJpegYCrCbSubsampling420 +
    + + +

    Subsampling option that uses horizontal decimation .

    +
    + + ee719834 + WICJpegYCrCbSubsampling422 + WICJpegYCrCbSubsampling422 +
    + + +

    Subsampling option that uses no decimation.

    +
    + + ee719834 + WICJpegYCrCbSubsampling444 + WICJpegYCrCbSubsampling444 +
    + + +

    Subsampling option that uses 2x vertical downsampling only. This option is only available in Windows?8.1 and later.

    +
    + + ee719834 + WICJpegYCrCbSubsampling440 + WICJpegYCrCbSubsampling440 +
    + + +

    Specifies named white balances for raw images.

    +
    + + ee719842 + WICNamedWhitePoint + WICNamedWhitePoint +
    + + +

    The default white balance.

    +
    + + ee719842 + WICWhitePointDefault + WICWhitePointDefault +
    + + +

    A daylight white balance.

    +
    + + ee719842 + WICWhitePointDaylight + WICWhitePointDaylight +
    + + +

    A cloudy white balance.

    +
    + + ee719842 + WICWhitePointCloudy + WICWhitePointCloudy +
    + + +

    A shade white balance.

    +
    + + ee719842 + WICWhitePointShade + WICWhitePointShade +
    + + +

    A tungsten white balance.

    +
    + + ee719842 + WICWhitePointTungsten + WICWhitePointTungsten +
    + + +

    A fluorescent white balance.

    +
    + + ee719842 + WICWhitePointFluorescent + WICWhitePointFluorescent +
    + + +

    Daylight white balance.

    +
    + + ee719842 + WICWhitePointFlash + WICWhitePointFlash +
    + + +

    A flash white balance.

    +
    + + ee719842 + WICWhitePointUnderwater + WICWhitePointUnderwater +
    + + +

    A custom white balance. This is typically used when using a picture (grey-card) as white balance.

    +
    + + ee719842 + WICWhitePointCustom + WICWhitePointCustom +
    + + +

    An automatic balance.

    +
    + + ee719842 + WICWhitePointAutoWhiteBalance + WICWhitePointAutoWhiteBalance +
    + + +

    An "as shot" white balance.

    +
    + + ee719842 + WICWhitePointAsShot + WICWhitePointAsShot +
    + + + No documentation. + + + ee719844 + WICPixelFormatNumericRepresentation + WICPixelFormatNumericRepresentation + + + +
    +
    + + ee719844 + WICPixelFormatNumericRepresentationUnspecified + WICPixelFormatNumericRepresentationUnspecified +
    + + +
    +
    + + ee719844 + WICPixelFormatNumericRepresentationIndexed + WICPixelFormatNumericRepresentationIndexed +
    + + +
    +
    + + ee719844 + WICPixelFormatNumericRepresentationUnsignedInteger + WICPixelFormatNumericRepresentationUnsignedInteger +
    + + +
    +
    + + ee719844 + WICPixelFormatNumericRepresentationSignedInteger + WICPixelFormatNumericRepresentationSignedInteger +
    + + +
    +
    + + ee719844 + WICPixelFormatNumericRepresentationFixed + WICPixelFormatNumericRepresentationFixed +
    + + +
    +
    + + ee719844 + WICPixelFormatNumericRepresentationFloat + WICPixelFormatNumericRepresentationFloat +
    + + +

    Specifies additional options to an implementation.

    +
    + + dn302105 + WICPlanarOptions + WICPlanarOptions +
    + + + No documentation. + + + dn302105 + WICPlanarOptionsDefault + WICPlanarOptionsDefault + + + + No documentation. + + + dn302105 + WICPlanarOptionsPreserveSubsampling + WICPlanarOptionsPreserveSubsampling + + + +

    Specifies the Portable Network Graphics (PNG) background (bKGD) chunk metadata properties.

    +
    + + ee719845 + WICPngBkgdProperties + WICPngBkgdProperties +
    + + +

    Indicates the background color. There are three possible types, depending on the image's pixel format.

    VT_UI1

    Specifies the index of the background color in an image with an indexed pixel format.

    VT_UI2

    Specifies the background color in a grayscale image.

    VT_VECTOR|VT_UI2

    Specifies the background color in an RGB image as three USHORT values: {0xRRRR, 0xGGGG, 0xBBBB}.

    +
    + + ee719845 + WICPngBkgdBackgroundColor + WICPngBkgdBackgroundColor +
    + + +

    Specifies the Portable Network Graphics (PNG) cHRM chunk metadata properties for CIE XYZ chromaticity.

    +
    + + ee719846 + WICPngChrmProperties + WICPngChrmProperties +
    + + +

    [VT_UI4] Indicates the whitepoint x value ratio.

    +
    + + ee719846 + WICPngChrmWhitePointX + WICPngChrmWhitePointX +
    + + +

    [VT_UI4] Indicates the whitepoint y value ratio.

    +
    + + ee719846 + WICPngChrmWhitePointY + WICPngChrmWhitePointY +
    + + +

    [VT_UI4] Indicates the red x value ratio.

    +
    + + ee719846 + WICPngChrmRedX + WICPngChrmRedX +
    + + +

    [VT_UI4] Indicates the red y value ratio.

    +
    + + ee719846 + WICPngChrmRedY + WICPngChrmRedY +
    + + +

    [VT_UI4] Indicates the green x value ratio.

    +
    + + ee719846 + WICPngChrmGreenX + WICPngChrmGreenX +
    + + +

    [VT_UI4] Indicates the green y value ratio.

    +
    + + ee719846 + WICPngChrmGreenY + WICPngChrmGreenY +
    + + +

    [VT_UI4] Indicates the blue x value ratio.

    +
    + + ee719846 + WICPngChrmBlueX + WICPngChrmBlueX +
    + + +

    [VT_UI4] Indicates the blue y value ratio.

    +
    + + ee719846 + WICPngChrmBlueY + WICPngChrmBlueY +
    + + +

    Specifies the Portable Network Graphics (PNG) filters available for compression optimization.

    +
    + + ee719847 + WICPngFilterOption + WICPngFilterOption +
    + + +

    Indicates an unspecified PNG filter. This enables WIC to algorithmically choose the best filtering option for the image.

    +
    + + ee719847 + WICPngFilterUnspecified + WICPngFilterUnspecified +
    + + +

    Indicates no PNG filter.

    +
    + + ee719847 + WICPngFilterNone + WICPngFilterNone +
    + + +

    Indicates a PNG sub filter.

    +
    + + ee719847 + WICPngFilterSub + WICPngFilterSub +
    + + +

    Indicates a PNG up filter.

    +
    + + ee719847 + WICPngFilterUp + WICPngFilterUp +
    + + +

    Indicates a PNG average filter.

    +
    + + ee719847 + WICPngFilterAverage + WICPngFilterAverage +
    + + +

    Indicates a PNG paeth filter.

    +
    + + ee719847 + WICPngFilterPaeth + WICPngFilterPaeth +
    + + +

    Indicates a PNG adaptive filter. This enables WIC to choose the best filtering mode on a per-scanline basis.

    +
    + + ee719847 + WICPngFilterAdaptive + WICPngFilterAdaptive +
    + + +

    Specifies the Portable Network Graphics (PNG) gAMA chunk metadata properties.

    +
    + + ee719848 + WICPngGamaProperties + WICPngGamaProperties +
    + + +

    [VT_UI4] Indicates the gamma value.

    +
    + + ee719848 + WICPngGamaGamma + WICPngGamaGamma +
    + + +

    Specifies the Portable Network Graphics (PNG) hIST chunk metadata properties.

    +
    + + ee719849 + WICPngHistProperties + WICPngHistProperties +
    + + +

    [VT_VECTOR | VT_UI2] Indicates the approximate usage frequency of each color in the color palette.

    +
    + + ee719849 + WICPngHistFrequencies + WICPngHistFrequencies +
    + + +

    Specifies the Portable Network Graphics (PNG) iCCP chunk metadata properties.

    +
    + + ee719850 + WICPngIccpProperties + WICPngIccpProperties +
    + + +

    [VT_LPSTR] Indicates the International Color Consortium (ICC) profile name.

    +
    + + ee719850 + WICPngIccpProfileName + WICPngIccpProfileName +
    + + +

    [VT_VECTOR | VT_UI1] Indicates the embedded ICC profile.

    +
    + + ee719850 + WICPngIccpProfileData + WICPngIccpProfileData +
    + + +

    Specifies the Portable Network Graphics (PNG) iTXT chunk metadata properties.

    +
    + + ee719851 + WICPngItxtProperties + WICPngItxtProperties +
    + + +

    [VT_LPSTR] Indicates the keywords in the iTXT metadata chunk.

    +
    + + ee719851 + WICPngItxtKeyword + WICPngItxtKeyword +
    + + +

    [VT_UI1] Indicates whether the text in the iTXT chunk is compressed. 1 if the text is compressed; otherwise, 0.

    +
    + + ee719851 + WICPngItxtCompressionFlag + WICPngItxtCompressionFlag +
    + + +

    [VT_LPSTR] Indicates the human language used by the translated keyword and the text.

    +
    + + ee719851 + WICPngItxtLanguageTag + WICPngItxtLanguageTag +
    + + +

    [VT_LPWSTR] Indicates a translation of the keyword into the language indicated by the language tag.

    +
    + + ee719851 + WICPngItxtTranslatedKeyword + WICPngItxtTranslatedKeyword +
    + + +

    [VT_LPWSTR] Indicates additional text in the iTXT metadata chunk.

    +
    + + ee719851 + WICPngItxtText + WICPngItxtText +
    + + +

    Specifies the Portable Network Graphics (PNG) sRGB chunk metadata properties.

    +
    + + ee719852 + WICPngSrgbProperties + WICPngSrgbProperties +
    + + +

    [VT_UI1] Indicates the rendering intent for an sRGB color space image. The rendering intents have the following meaning.

    ValueMeaning
    0Perceptual
    1Relative colorimetric
    2Saturation
    3Absolute colorimetric

    ?

    +
    + + ee719852 + WICPngSrgbRenderingIntent + WICPngSrgbRenderingIntent +
    + + +

    Specifies the Portable Network Graphics (PNG) tIME chunk metadata properties.

    +
    + + ee719853 + WICPngTimeProperties + WICPngTimeProperties +
    + + +

    [VT_UI2] Indicates the year of the last modification.

    +
    + + ee719853 + WICPngTimeYear + WICPngTimeYear +
    + + +

    [VT_UI1] Indicates the month of the last modification.

    +
    + + ee719853 + WICPngTimeMonth + WICPngTimeMonth +
    + + +

    [VT_UI1] Indicates day of the last modification.

    +
    + + ee719853 + WICPngTimeDay + WICPngTimeDay +
    + + +

    [VT_UI1] Indicates the hour of the last modification.

    +
    + + ee719853 + WICPngTimeHour + WICPngTimeHour +
    + + +

    [VT_UI1] Indicates the minute of the last modification.

    +
    + + ee719853 + WICPngTimeMinute + WICPngTimeMinute +
    + + +

    [VT_UI1] Indicates the second of the last modification.

    +
    + + ee719853 + WICPngTimeSecond + WICPngTimeSecond +
    + + +

    Specifies when the progress notification callback should be called.

    +
    + + ee719854 + WICProgressNotification + WICProgressNotification +
    + + +

    The callback should be called when codec operations begin.

    +
    + + ee719854 + WICProgressNotificationBegin + WICProgressNotificationBegin +
    + + +

    The callback should be called when codec operations end.

    +
    + + ee719854 + WICProgressNotificationEnd + WICProgressNotificationEnd +
    + + +

    The callback should be called frequently to report status.

    +
    + + ee719854 + WICProgressNotificationFrequent + WICProgressNotificationFrequent +
    + + +

    The callback should be called on all available progress notifications.

    +
    + + ee719854 + WICProgressNotificationAll + WICProgressNotificationAll +
    + + +

    Specifies the progress operations to receive notifications for.

    +
    + + ee719855 + WICProgressOperation + WICProgressOperation +
    + + +

    Receive copy pixel operation.

    +
    + + ee719855 + WICProgressOperationCopyPixels + WICProgressOperationCopyPixels +
    + + +

    Receive write pixel operation.

    +
    + + ee719855 + WICProgressOperationWritePixels + WICProgressOperationWritePixels +
    + + +

    Receive all progress operations available.

    +
    + + ee719855 + WICProgressOperationAll + WICProgressOperationAll +
    + + +

    Specifies the capability support of a raw image.

    +
    + + ee719856 + WICRawCapabilities + WICRawCapabilities +
    + + +

    The capability is not supported.

    +
    + + ee719856 + WICRawCapabilityNotSupported + WICRawCapabilityNotSupported +
    + + +

    The capability supports only get operations.

    +
    + + ee719856 + WICRawCapabilityGetSupported + WICRawCapabilityGetSupported +
    + + +

    The capability supports get and set operations.

    +
    + + ee719856 + WICRawCapabilityFullySupported + WICRawCapabilityFullySupported +
    + + +

    Specifies the parameter set used by a raw codec.

    +
    + + ee719858 + WICRawParameterSet + WICRawParameterSet +
    + + +

    An as shot parameter set.

    +
    + + ee719858 + WICAsShotParameterSet + WICAsShotParameterSet +
    + + +

    A user adjusted parameter set.

    +
    + + ee719858 + WICUserAdjustedParameterSet + WICUserAdjustedParameterSet +
    + + +

    A codec adjusted parameter set.

    +
    + + ee719858 + WICAutoAdjustedParameterSet + WICAutoAdjustedParameterSet +
    + + +

    Specifies the render intent of the next CopyPixels call.

    +
    + + ee719859 + WICRawRenderMode + WICRawRenderMode +
    + + + No documentation. + + + ee719859 + WICRawRenderModeDraft + WICRawRenderModeDraft + + + + No documentation. + + + ee719859 + WICRawRenderModeNormal + WICRawRenderModeNormal + + + + No documentation. + + + ee719859 + WICRawRenderModeBestQuality + WICRawRenderModeBestQuality + + + +

    Specifies the rotation capabilities of the codec.

    +
    + + ee719860 + WICRawRotationCapabilities + WICRawRotationCapabilities +
    + + +

    Rotation is not supported.

    +
    + + ee719860 + WICRawRotationCapabilityNotSupported + WICRawRotationCapabilityNotSupported +
    + + +

    Set operations for rotation is not supported.

    +
    + + ee719860 + WICRawRotationCapabilityGetSupported + WICRawRotationCapabilityGetSupported +
    + + +

    90 degree rotations are supported.

    +
    + + ee719860 + WICRawRotationCapabilityNinetyDegreesSupported + WICRawRotationCapabilityNinetyDegreesSupported +
    + + +

    All rotation angles are supported.

    +
    + + ee719860 + WICRawRotationCapabilityFullySupported + WICRawRotationCapabilityFullySupported +
    + + +

    Specifies the access level of a Windows Graphics Device Interface (GDI) section.

    +
    + + ee719864 + WICSectionAccessLevel + WICSectionAccessLevel +
    + + +

    Indicates a read only access level.

    +
    + + ee719864 + WICSectionAccessLevelRead + WICSectionAccessLevelRead +
    + + +

    Indicates a read/write access level.

    +
    + + ee719864 + WICSectionAccessLevelReadWrite + WICSectionAccessLevelReadWrite +
    + + +

    Specifies the Tagged Image File Format (TIFF) compression options.

    +
    + + ee719867 + WICTiffCompressionOption + WICTiffCompressionOption +
    + + +

    Indicates a suitable compression algorithm based on the image and pixel format.

    +
    + + ee719867 + WICTiffCompressionDontCare + WICTiffCompressionDontCare +
    + + +

    Indicates no compression.

    +
    + + ee719867 + WICTiffCompressionNone + WICTiffCompressionNone +
    + + +

    Indicates a CCITT3 compression algorithm. This algorithm is only valid for 1bpp pixel formats.

    +
    + + ee719867 + WICTiffCompressionCCITT3 + WICTiffCompressionCCITT3 +
    + + +

    Indicates a CCITT4 compression algorithm. This algorithm is only valid for 1bpp pixel formats.

    +
    + + ee719867 + WICTiffCompressionCCITT4 + WICTiffCompressionCCITT4 +
    + + +

    Indicates a LZW compression algorithm.

    +
    + + ee719867 + WICTiffCompressionLZW + WICTiffCompressionLZW +
    + + +

    Indicates a RLE compression algorithm. This algorithm is only valid for 1bpp pixel formats.

    +
    + + ee719867 + WICTiffCompressionRLE + WICTiffCompressionRLE +
    + + +

    Indicates a ZIP compression algorithm.

    +
    + + ee719867 + WICTiffCompressionZIP + WICTiffCompressionZIP +
    + + +

    Indicates an LZWH differencing algorithm.

    +
    + + ee719867 + WICTiffCompressionLZWHDifferencing + WICTiffCompressionLZWHDifferencing +
    + + + Functions + + + + + Constant Png. + CLSID_WICPngDecoder + + + Constant Bmp. + CLSID_WICBmpDecoder + + + Constant Ico. + CLSID_WICIcoDecoder + + + Constant Jpeg. + CLSID_WICJpegDecoder + + + Constant Gif. + CLSID_WICGifDecoder + + + Constant Tiff. + CLSID_WICTiffDecoder + + + Constant Wmp. + CLSID_WICWmpDecoder + + + Constant Dds. + CLSID_WICDdsDecoder + + + Constant Adng. + CLSID_WICAdngDecoder + + + + Functions + + + + + Constant Bmp. + CLSID_WICBmpEncoder + + + Constant Png. + CLSID_WICPngEncoder + + + Constant Jpeg. + CLSID_WICJpegEncoder + + + Constant Gif. + CLSID_WICGifEncoder + + + Constant Tiff. + CLSID_WICTiffEncoder + + + Constant Wmp. + CLSID_WICWmpEncoder + + + Constant Dds. + CLSID_WICDdsEncoder + + + Constant JpegQualcommPhone. + CLSID_WICJpegQualcommPhoneEncoder + + + + Functions + + + + + Constant Bmp. + GUID_ContainerFormatBmp + + + Constant Png. + GUID_ContainerFormatPng + + + Constant Ico. + GUID_ContainerFormatIco + + + Constant Jpeg. + GUID_ContainerFormatJpeg + + + Constant Tiff. + GUID_ContainerFormatTiff + + + Constant Gif. + GUID_ContainerFormatGif + + + Constant Wmp. + GUID_ContainerFormatWmp + + + Constant Dds. + GUID_ContainerFormatDds + + + Constant Adng. + GUID_ContainerFormatAdng + + + + Functions + + + + + Constant FormatDontCare. + GUID_WICPixelFormatDontCare + + + Constant Format1bppIndexed. + GUID_WICPixelFormat1bppIndexed + + + Constant Format2bppIndexed. + GUID_WICPixelFormat2bppIndexed + + + Constant Format4bppIndexed. + GUID_WICPixelFormat4bppIndexed + + + Constant Format8bppIndexed. + GUID_WICPixelFormat8bppIndexed + + + Constant FormatBlackWhite. + GUID_WICPixelFormatBlackWhite + + + Constant Format2bppGray. + GUID_WICPixelFormat2bppGray + + + Constant Format4bppGray. + GUID_WICPixelFormat4bppGray + + + Constant Format8bppGray. + GUID_WICPixelFormat8bppGray + + + Constant Format8bppAlpha. + GUID_WICPixelFormat8bppAlpha + + + Constant Format16bppBGR555. + GUID_WICPixelFormat16bppBGR555 + + + Constant Format16bppBGR565. + GUID_WICPixelFormat16bppBGR565 + + + Constant Format16bppBGRA5551. + GUID_WICPixelFormat16bppBGRA5551 + + + Constant Format16bppGray. + GUID_WICPixelFormat16bppGray + + + Constant Format24bppBGR. + GUID_WICPixelFormat24bppBGR + + + Constant Format24bppRGB. + GUID_WICPixelFormat24bppRGB + + + Constant Format32bppBGR. + GUID_WICPixelFormat32bppBGR + + + Constant Format32bppBGRA. + GUID_WICPixelFormat32bppBGRA + + + Constant Format32bppPBGRA. + GUID_WICPixelFormat32bppPBGRA + + + Constant Format32bppGrayFloat. + GUID_WICPixelFormat32bppGrayFloat + + + Constant Format32bppRGB. + GUID_WICPixelFormat32bppRGB + + + Constant Format32bppRGBA. + GUID_WICPixelFormat32bppRGBA + + + Constant Format32bppPRGBA. + GUID_WICPixelFormat32bppPRGBA + + + Constant Format48bppRGB. + GUID_WICPixelFormat48bppRGB + + + Constant Format48bppBGR. + GUID_WICPixelFormat48bppBGR + + + Constant Format64bppRGB. + GUID_WICPixelFormat64bppRGB + + + Constant Format64bppRGBA. + GUID_WICPixelFormat64bppRGBA + + + Constant Format64bppBGRA. + GUID_WICPixelFormat64bppBGRA + + + Constant Format64bppPRGBA. + GUID_WICPixelFormat64bppPRGBA + + + Constant Format64bppPBGRA. + GUID_WICPixelFormat64bppPBGRA + + + Constant Format16bppGrayFixedPoint. + GUID_WICPixelFormat16bppGrayFixedPoint + + + Constant Format32bppBGR101010. + GUID_WICPixelFormat32bppBGR101010 + + + Constant Format48bppRGBFixedPoint. + GUID_WICPixelFormat48bppRGBFixedPoint + + + Constant Format48bppBGRFixedPoint. + GUID_WICPixelFormat48bppBGRFixedPoint + + + Constant Format96bppRGBFixedPoint. + GUID_WICPixelFormat96bppRGBFixedPoint + + + Constant Format96bppRGBFloat. + GUID_WICPixelFormat96bppRGBFloat + + + Constant Format128bppRGBAFloat. + GUID_WICPixelFormat128bppRGBAFloat + + + Constant Format128bppPRGBAFloat. + GUID_WICPixelFormat128bppPRGBAFloat + + + Constant Format128bppRGBFloat. + GUID_WICPixelFormat128bppRGBFloat + + + Constant Format32bppCMYK. + GUID_WICPixelFormat32bppCMYK + + + Constant Format64bppRGBAFixedPoint. + GUID_WICPixelFormat64bppRGBAFixedPoint + + + Constant Format64bppBGRAFixedPoint. + GUID_WICPixelFormat64bppBGRAFixedPoint + + + Constant Format64bppRGBFixedPoint. + GUID_WICPixelFormat64bppRGBFixedPoint + + + Constant Format128bppRGBAFixedPoint. + GUID_WICPixelFormat128bppRGBAFixedPoint + + + Constant Format128bppRGBFixedPoint. + GUID_WICPixelFormat128bppRGBFixedPoint + + + Constant Format64bppRGBAHalf. + GUID_WICPixelFormat64bppRGBAHalf + + + Constant Format64bppPRGBAHalf. + GUID_WICPixelFormat64bppPRGBAHalf + + + Constant Format64bppRGBHalf. + GUID_WICPixelFormat64bppRGBHalf + + + Constant Format48bppRGBHalf. + GUID_WICPixelFormat48bppRGBHalf + + + Constant Format32bppRGBE. + GUID_WICPixelFormat32bppRGBE + + + Constant Format16bppGrayHalf. + GUID_WICPixelFormat16bppGrayHalf + + + Constant Format32bppGrayFixedPoint. + GUID_WICPixelFormat32bppGrayFixedPoint + + + Constant Format32bppRGBA1010102. + GUID_WICPixelFormat32bppRGBA1010102 + + + Constant Format32bppRGBA1010102XR. + GUID_WICPixelFormat32bppRGBA1010102XR + + + Constant Format64bppCMYK. + GUID_WICPixelFormat64bppCMYK + + + Constant Format24bpp3Channels. + GUID_WICPixelFormat24bpp3Channels + + + Constant Format32bpp4Channels. + GUID_WICPixelFormat32bpp4Channels + + + Constant Format40bpp5Channels. + GUID_WICPixelFormat40bpp5Channels + + + Constant Format48bpp6Channels. + GUID_WICPixelFormat48bpp6Channels + + + Constant Format56bpp7Channels. + GUID_WICPixelFormat56bpp7Channels + + + Constant Format64bpp8Channels. + GUID_WICPixelFormat64bpp8Channels + + + Constant Format48bpp3Channels. + GUID_WICPixelFormat48bpp3Channels + + + Constant Format64bpp4Channels. + GUID_WICPixelFormat64bpp4Channels + + + Constant Format80bpp5Channels. + GUID_WICPixelFormat80bpp5Channels + + + Constant Format96bpp6Channels. + GUID_WICPixelFormat96bpp6Channels + + + Constant Format112bpp7Channels. + GUID_WICPixelFormat112bpp7Channels + + + Constant Format128bpp8Channels. + GUID_WICPixelFormat128bpp8Channels + + + Constant Format40bppCMYKAlpha. + GUID_WICPixelFormat40bppCMYKAlpha + + + Constant Format80bppCMYKAlpha. + GUID_WICPixelFormat80bppCMYKAlpha + + + Constant Format32bpp3ChannelsAlpha. + GUID_WICPixelFormat32bpp3ChannelsAlpha + + + Constant Format40bpp4ChannelsAlpha. + GUID_WICPixelFormat40bpp4ChannelsAlpha + + + Constant Format48bpp5ChannelsAlpha. + GUID_WICPixelFormat48bpp5ChannelsAlpha + + + Constant Format56bpp6ChannelsAlpha. + GUID_WICPixelFormat56bpp6ChannelsAlpha + + + Constant Format64bpp7ChannelsAlpha. + GUID_WICPixelFormat64bpp7ChannelsAlpha + + + Constant Format72bpp8ChannelsAlpha. + GUID_WICPixelFormat72bpp8ChannelsAlpha + + + Constant Format64bpp3ChannelsAlpha. + GUID_WICPixelFormat64bpp3ChannelsAlpha + + + Constant Format80bpp4ChannelsAlpha. + GUID_WICPixelFormat80bpp4ChannelsAlpha + + + Constant Format96bpp5ChannelsAlpha. + GUID_WICPixelFormat96bpp5ChannelsAlpha + + + Constant Format112bpp6ChannelsAlpha. + GUID_WICPixelFormat112bpp6ChannelsAlpha + + + Constant Format128bpp7ChannelsAlpha. + GUID_WICPixelFormat128bpp7ChannelsAlpha + + + Constant Format144bpp8ChannelsAlpha. + GUID_WICPixelFormat144bpp8ChannelsAlpha + + + Constant Format8bppY. + GUID_WICPixelFormat8bppY + + + Constant Format8bppCb. + GUID_WICPixelFormat8bppCb + + + Constant Format8bppCr. + GUID_WICPixelFormat8bppCr + + + Constant Format16bppCbCr. + GUID_WICPixelFormat16bppCbCr + + + Constant Format16bppYQuantizedDctCoefficients. + GUID_WICPixelFormat16bppYQuantizedDctCoefficients + + + Constant Format16bppCbQuantizedDctCoefficients. + GUID_WICPixelFormat16bppCbQuantizedDctCoefficients + + + Constant Format16bppCrQuantizedDctCoefficients. + GUID_WICPixelFormat16bppCrQuantizedDctCoefficients + + + + Gets the number of bits per pixel for a particular pixel format. + + The pixel format guid. + The number of bits per pixel. If the pixel format guid is invalid, returns 0 + + + + Gets the stride in bytes from a pixel format and a width.. + + The pixel format guid. + The width. + The number of bytes per row. + + + + Functions + + + + + Constant WrongState. + WINCODEC_ERR_WRONGSTATE + + + Constant Valueoutofrange. + WINCODEC_ERR_VALUEOUTOFRANGE + + + Constant Unknownimageformat. + WINCODEC_ERR_UNKNOWNIMAGEFORMAT + + + Constant UnsupportedVersion. + WINCODEC_ERR_UNSUPPORTEDVERSION + + + Constant NotInitializeD. + WINCODEC_ERR_NOTINITIALIZED + + + Constant Alreadylocked. + WINCODEC_ERR_ALREADYLOCKED + + + Constant Propertynotfound. + WINCODEC_ERR_PROPERTYNOTFOUND + + + Constant Propertynotsupported. + WINCODEC_ERR_PROPERTYNOTSUPPORTED + + + Constant Propertysize. + WINCODEC_ERR_PROPERTYSIZE + + + Constant Codecpresent. + WINCODEC_ERR_CODECPRESENT + + + Constant Codecnothumbnail. + WINCODEC_ERR_CODECNOTHUMBNAIL + + + Constant Paletteunavailable. + WINCODEC_ERR_PALETTEUNAVAILABLE + + + Constant Codectoomanyscanlines. + WINCODEC_ERR_CODECTOOMANYSCANLINES + + + Constant Internalerror. + WINCODEC_ERR_INTERNALERROR + + + Constant SourceRectangleDoesnotmatchdimensions. + WINCODEC_ERR_SOURCERECTDOESNOTMATCHDIMENSIONS + + + Constant Componentnotfound. + WINCODEC_ERR_COMPONENTNOTFOUND + + + Constant Imagesizeoutofrange. + WINCODEC_ERR_IMAGESIZEOUTOFRANGE + + + Constant TooMuchmetadata. + WINCODEC_ERR_TOOMUCHMETADATA + + + Constant Badimage. + WINCODEC_ERR_BADIMAGE + + + Constant Badheader. + WINCODEC_ERR_BADHEADER + + + Constant FrameMissing. + WINCODEC_ERR_FRAMEMISSING + + + Constant Badmetadataheader. + WINCODEC_ERR_BADMETADATAHEADER + + + Constant Badstreamdata. + WINCODEC_ERR_BADSTREAMDATA + + + Constant StreamWrite. + WINCODEC_ERR_STREAMWRITE + + + Constant StreamRead. + WINCODEC_ERR_STREAMREAD + + + Constant StreamNotAvailable. + WINCODEC_ERR_STREAMNOTAVAILABLE + + + Constant UnsupportedPixelFormat. + WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT + + + Constant UnsupportedOperation. + WINCODEC_ERR_UNSUPPORTEDOPERATION + + + Constant InvalidRegistration. + WINCODEC_ERR_INVALIDREGISTRATION + + + Constant Componentinitializefailure. + WINCODEC_ERR_COMPONENTINITIALIZEFAILURE + + + Constant Insufficientbuffer. + WINCODEC_ERR_INSUFFICIENTBUFFER + + + Constant Duplicatemetadatapresent. + WINCODEC_ERR_DUPLICATEMETADATAPRESENT + + + Constant Propertyunexpectedtype. + WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE + + + Constant UnexpectedSize. + WINCODEC_ERR_UNEXPECTEDSIZE + + + Constant InvalidQueryRequest. + WINCODEC_ERR_INVALIDQUERYREQUEST + + + Constant UnexpectedMetadataType. + WINCODEC_ERR_UNEXPECTEDMETADATATYPE + + + Constant Requestonlyvalidatmetadataroot. + WINCODEC_ERR_REQUESTONLYVALIDATMETADATAROOT + + + Constant InvalidQueryCharacter. + WINCODEC_ERR_INVALIDQUERYCHARACTER + + + Constant Win32error. + WINCODEC_ERR_WIN32ERROR + + + Constant InvalidProgressivelevel. + WINCODEC_ERR_INVALIDPROGRESSIVELEVEL + + + Constant InvalidJpegscanindex. + WINCODEC_ERR_INVALIDJPEGSCANINDEX + + + Constant Base. + WINCODEC_ERR_BASE + + + Constant GenericError. + WINCODEC_ERR_GENERIC_ERROR + + + Constant InvalidParameter. + WINCODEC_ERR_INVALIDPARAMETER + + + Constant OufOfMemory. + WINCODEC_ERR_OUTOFMEMORY + + + Constant NotImplemented. + WINCODEC_ERR_NOTIMPLEMENTED + + + Constant Aborted. + WINCODEC_ERR_ABORTED + + + Constant AccessDenied. + WINCODEC_ERR_ACCESSDENIED + + + Constant Valueoverflow. + WINCODEC_ERR_VALUEOVERFLOW + + + +

    Defines methods that add the concept of writeability and static in-memory representations of bitmaps to .

    +
    + +

    inherits from and therefore also inherits the CopyPixels method. When pixels need to be moved to a new memory location, CopyPixels is often the most efficient.

    Because of to the internal memory representation implied by the , in-place modification and processing using the Lock is more efficient than CopyPixels, usually reducing to a simple reference access directly into the memory owned by the bitmap rather than a as a copy. This is contrasted to procedural bitmaps which implement only CopyPixels because there is no internal memory representation and one would need to be created on demand to satisfy a call to Lock.

    +
    + + ee719675 + IWICBitmap + IWICBitmap +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Provides access for palette modifications.

    +
    + + ee690189 + SetPalette + SetPalette + HRESULT IWICBitmap::SetPalette([In, Optional] IWICPalette* pIPalette) +
    + + +

    Provides access to a rectangular area of the bitmap.

    +
    +

    The rectangle to be accessed.

    +

    The access mode you wish to obtain for the lock. This is a bitwise combination of for read, write, or read and write access.

    ValueMeaning

    The read access lock.

    The write access lock.

    ?

    +

    A reference that receives the locked memory location.

    + +

    Locks are exclusive for writing but can be shared for reading. You cannot call CopyPixels while the is locked for writing. Doing so will return an error, since locks are exclusive.

    +
    + + ee690187 + HRESULT IWICBitmap::Lock([In] const void* prcLock,[In] WICBitmapLockFlags flags,[Out] IWICBitmapLock** ppILock) + IWICBitmap::Lock +
    + + +

    Provides access for palette modifications.

    +
    +

    The palette to use for conversion.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690189 + HRESULT IWICBitmap::SetPalette([In, Optional] IWICPalette* pIPalette) + IWICBitmap::SetPalette +
    + + +

    Changes the physical resolution of the image.

    +
    +

    The horizontal resolution.

    +

    The vertical resolution.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method has no effect on the actual pixels or samples stored in the bitmap. Instead the interpretation of the sampling rate is modified. This means that a 96 DPI image which is 96 pixels wide is one inch. If the physical resolution is modified to 48 DPI, then the bitmap is considered to be 2 inches wide but has the same number of pixels. If the resolution is less than REAL_EPSILON (1.192092896e-07F) the error code is returned.

    +
    + + ee690191 + HRESULT IWICBitmap::SetResolution([In] double dpiX,[In] double dpiY) + IWICBitmap::SetResolution +
    + + + Initializes a new instance of the class. + + The factory. + The width. + The height. + The pixel format. for a list of valid formats. + The option. + ee690282 + HRESULT IWICImagingFactory::CreateBitmap([In] unsigned int uiWidth,[In] unsigned int uiHeight,[In] const GUID& pixelFormat,[In] WICBitmapCreateCacheOption option,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmap + + + + Initializes a new instance of the class from a memory location using . + + The factory. + The width. + The height. + The pixel format. + The data rectangle. + Size of the buffer in . If == 0, calculate the size automatically based on the height and row pitch. + ee690291 + HRESULT IWICImagingFactory::CreateBitmapFromMemory([In] unsigned int uiWidth,[In] unsigned int uiHeight,[In] const GUID& pixelFormat,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmapFromMemory + + + + Initializes a new instance of the class from a + + The factory. + The bitmap source ref. + The option. + ee690293 + HRESULT IWICImagingFactory::CreateBitmapFromSource([In, Optional] IWICBitmapSource* pIBitmapSource,[In] WICBitmapCreateCacheOption option,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmapFromSource + + + + Initializes a new instance of the class from a . + + The factory. + The bitmap source. + The rectangle. + ee690294 + HRESULT IWICImagingFactory::CreateBitmapFromSourceRect([In, Optional] IWICBitmapSource* pIBitmapSource,[In] unsigned int x,[In] unsigned int y,[In] unsigned int width,[In] unsigned int height,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmapFromSourceRect + + + + Initializes a new instance of the class from an array of pixel data. + + The factory. + The width. + The height. + The pixel format. + The pixel data. + Stride of a row of pixels (number of bytes per row). By default the stride is == 0, and calculated by taking the sizeof(T) * width. + ee690291 + HRESULT IWICImagingFactory::CreateBitmapFromMemory([In] unsigned int uiWidth,[In] unsigned int uiHeight,[In] const GUID& pixelFormat,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmapFromMemory + + + +

    Provides access to a rectangular area of the bitmap.

    +
    +

    The access mode you wish to obtain for the lock. This is a bitwise combination of for read, write, or read and write access.

    ValueMeaning

    The read access lock.

    The write access lock.

    ?

    +

    A reference that receives the locked memory location.

    + +

    Locks are exclusive for writing but can be shared for reading. You cannot call CopyPixels while the is locked for writing. Doing so will return an error, since locks are exclusive.

    +
    + ee690187 + HRESULT IWICBitmap::Lock([In, Optional] const WICRect* prcLock,[In] WICBitmapLockFlags flags,[Out] IWICBitmapLock** ppILock) + IWICBitmap::Lock +
    + + +

    Provides access to a rectangular area of the bitmap.

    +
    +

    The rectangle to be accessed.

    +

    The access mode you wish to obtain for the lock. This is a bitwise combination of for read, write, or read and write access.

    ValueMeaning

    The read access lock.

    The write access lock.

    ?

    +

    A reference that receives the locked memory location.

    + +

    Locks are exclusive for writing but can be shared for reading. You cannot call CopyPixels while the is locked for writing. Doing so will return an error, since locks are exclusive.

    +
    + ee690187 + HRESULT IWICBitmap::Lock([In, Optional] const WICRect* prcLock,[In] WICBitmapLockFlags flags,[Out] IWICBitmapLock** ppILock) + IWICBitmap::Lock +
    + + +

    Exposes methods that produce a clipped version of the input bitmap for a specified rectangular region of interest.

    +
    + + ee719676 + IWICBitmapClipper + IWICBitmapClipper +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Initializes the bitmap clipper with the provided parameters.

    +
    +

    he input bitmap source.

    +

    The rectangle of the bitmap source to clip.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719677 + HRESULT IWICBitmapClipper::Initialize([In, Optional] IWICBitmapSource* pISource,[In] const void* prc) + IWICBitmapClipper::Initialize +
    + + + Initializes a new instance of the class. + + The factory. + + + +

    Initializes the bitmap clipper with the provided parameters.

    +
    +

    he input bitmap source.

    +

    The rectangle of the bitmap source to clip.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + ee719677 + HRESULT IWICBitmapClipper::Initialize([In, Optional] IWICBitmapSource* pISource,[In] const WICRect* prc) + IWICBitmapClipper::Initialize +
    + + +

    Exposes methods that provide information about a particular codec.

    +
    + + ee719679 + IWICBitmapCodecInfo + IWICBitmapCodecInfo +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Proxy function for the GetContainerFormat method.

    +
    + + ee719689 + GetContainerFormat + GetContainerFormat + HRESULT IWICBitmapCodecInfo::GetContainerFormat([Out] GUID* pguidContainerFormat) +
    + + +

    Proxy function for the DoesSupportAnimation method.

    +
    + + ee719681 + DoesSupportAnimation + DoesSupportAnimation + HRESULT IWICBitmapCodecInfo::DoesSupportAnimation([Out] BOOL* pfSupportAnimation) +
    + + +

    Retrieves a value indicating whether the codec supports chromakeys.

    +
    + + ee719682 + DoesSupportChromakey + DoesSupportChromakey + HRESULT IWICBitmapCodecInfo::DoesSupportChromakey([Out] BOOL* pfSupportChromakey) +
    + + +

    Retrieves a value indicating whether the codec supports lossless formats.

    +
    + + ee719683 + DoesSupportLossless + DoesSupportLossless + HRESULT IWICBitmapCodecInfo::DoesSupportLossless([Out] BOOL* pfSupportLossless) +
    + + +

    Retrieves a value indicating whether the codec supports multi frame images.

    +
    + + ee719685 + DoesSupportMultiframe + DoesSupportMultiframe + HRESULT IWICBitmapCodecInfo::DoesSupportMultiframe([Out] BOOL* pfSupportMultiframe) +
    + + +

    Proxy function for the GetContainerFormat method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee719689 + HRESULT IWICBitmapCodecInfo::GetContainerFormat([Out] GUID* pguidContainerFormat) + IWICBitmapCodecInfo::GetContainerFormat +
    + + +

    Retrieves the pixel formats the codec supports.

    +
    +

    The size of the pguidPixelFormats array. Use 0 on first call to determine the needed array size.

    +

    Receives the supported pixel formats. Use null on first call to determine needed array size.

    +

    The array size needed to retrieve all supported pixel formats.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The usage pattern for this method is a two call process. The first call retrieves the array size needed to retrieve all the supported pixel formats by calling it with cFormats set to 0 and pguidPixelFormats set to null. This call sets pcActual to the array size needed. Once the needed array size is determined, a second GetPixelFormats call with pguidPixelFormats set to an array of the appropriate size will retrieve the pixel formats.

    +
    + + ee690082 + HRESULT IWICBitmapCodecInfo::GetPixelFormats([In] unsigned int cFormats,[In, Buffer] GUID* pguidPixelFormats,[Out] unsigned int* pcActual) + IWICBitmapCodecInfo::GetPixelFormats +
    + + +

    Retrieves the color manangement version number the codec supports.

    +
    +

    The size of the version buffer. Use 0 on first call to determine needed buffer size.

    +

    Receives the color management version number. Use null on first call to determine needed buffer size.

    +

    The actual buffer size needed to retrieve the full color management version number.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with cchColorManagementVersion set to 0 and wzColorManagementVersion set to null. This call sets pcchActual to the buffer size needed. Once the needed buffer size is determined, a second GetColorManagementVersion call with cchColorManagementVersion set to the buffer size and wzColorManagementVersion set to a buffer of the appropriate size will retrieve the pixel formats.

    +
    + + ee719687 + HRESULT IWICBitmapCodecInfo::GetColorManagementVersion([In] unsigned int cchColorManagementVersion,[In] void* wzColorManagementVersion,[Out] unsigned int* pcchActual) + IWICBitmapCodecInfo::GetColorManagementVersion +
    + + +

    Retrieves the name of the device manufacture associated with the codec.

    +
    +

    The size of the device manufacture's name. Use 0 on first call to determine needed buffer size.

    +

    Receives the device manufacture's name. Use null on first call to determine needed buffer size.

    +

    The actual buffer size needed to retrieve the device manufacture's name.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with cchDeviceManufacturer set to 0 and wzDeviceManufacturer set to null. This call sets pcchActual to the buffer size needed. Once the needed buffer size is determined, a second GetDeviceManufacturer call with cchDeviceManufacturer set to the buffer size and wzDeviceManufacturer set to a buffer of the appropriate size will retrieve the pixel formats.

    +
    + + ee719690 + HRESULT IWICBitmapCodecInfo::GetDeviceManufacturer([In] unsigned int cchDeviceManufacturer,[In] void* wzDeviceManufacturer,[Out] unsigned int* pcchActual) + IWICBitmapCodecInfo::GetDeviceManufacturer +
    + + +

    Retrieves a comma delimited list of device models associated with the codec.

    +
    +

    The size of the device models buffer. Use 0 on first call to determine needed buffer size.

    +

    Receives a comma delimited list of device model names associated with the codec. Use null on first call to determine needed buffer size.

    +

    The actual buffer size needed to retrieve all of the device model names.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with cchDeviceModels set to 0 and wzDeviceModels set to null. This call sets pcchActual to the buffer size needed. Once the needed buffer size is determined, a second GetDeviceModels call with cchDeviceModels set to the buffer size and wzDeviceModels set to a buffer of the appropriate size will retrieve the pixel formats.

    +
    + + ee719692 + HRESULT IWICBitmapCodecInfo::GetDeviceModels([In] unsigned int cchDeviceModels,[In] void* wzDeviceModels,[Out] unsigned int* pcchActual) + IWICBitmapCodecInfo::GetDeviceModels +
    + + +

    Proxy function for the GetMimeTypes method.

    +
    + No documentation. + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee719697 + HRESULT IWICBitmapCodecInfo::GetMimeTypes([In] unsigned int cchMimeTypes,[In] void* wzMimeTypes,[Out] unsigned int* pcchActual) + IWICBitmapCodecInfo::GetMimeTypes +
    + + +

    Retrieves a comma delimited list of the file name extensions associated with the codec.

    +
    +

    The size of the file name extension buffer. Use 0 on first call to determine needed buffer size.

    +

    Receives a comma delimited list of file name extensions associated with the codec. Use null on first call to determine needed buffer size.

    +

    The actual buffer size needed to retrieve all file name extensions associated with the codec.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The default extension for an image encoder is the first item in the list of returned extensions.

    The usage pattern for this method is a two call process. The first call retrieves the buffer size needed to retrieve the full color management version number by calling it with cchFileExtensions set to 0 and wzFileExtensions set to null. This call sets pcchActual to the buffer size needed. Once the needed buffer size is determined, a second GetFileExtensions call with cchFileExtensions set to the buffer size and wzFileExtensions set to a buffer of the appropriate size will retrieve the pixel formats.

    +
    + + ee719694 + HRESULT IWICBitmapCodecInfo::GetFileExtensions([In] unsigned int cchFileExtensions,[In] void* wzFileExtensions,[Out] unsigned int* pcchActual) + IWICBitmapCodecInfo::GetFileExtensions +
    + + +

    Proxy function for the DoesSupportAnimation method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee719681 + HRESULT IWICBitmapCodecInfo::DoesSupportAnimation([Out] BOOL* pfSupportAnimation) + IWICBitmapCodecInfo::DoesSupportAnimation +
    + + +

    Retrieves a value indicating whether the codec supports chromakeys.

    +
    +

    Receives TRUE if the codec supports chromakeys; otherwise, .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719682 + HRESULT IWICBitmapCodecInfo::DoesSupportChromakey([Out] BOOL* pfSupportChromakey) + IWICBitmapCodecInfo::DoesSupportChromakey +
    + + +

    Retrieves a value indicating whether the codec supports lossless formats.

    +
    +

    Receives TRUE if the codec supports lossless formats; otherwise, .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719683 + HRESULT IWICBitmapCodecInfo::DoesSupportLossless([Out] BOOL* pfSupportLossless) + IWICBitmapCodecInfo::DoesSupportLossless +
    + + +

    Retrieves a value indicating whether the codec supports multi frame images.

    +
    +

    Receives TRUE if the codec supports multi frame images; otherwise, .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719685 + HRESULT IWICBitmapCodecInfo::DoesSupportMultiframe([Out] BOOL* pfSupportMultiframe) + IWICBitmapCodecInfo::DoesSupportMultiframe +
    + + +

    Retrieves a value indicating whether the given mime type matches the mime type of the codec.

    +
    +

    The mime type to compare.

    +

    Receives TRUE if the mime types match; otherwise, .

    + + Note??The Windows provided codecs do not implement this method and return E_NOTIMPL.? + + + ee690083 + HRESULT IWICBitmapCodecInfo::MatchesMimeType([In] const wchar_t* wzMimeType,[Out] BOOL* pfMatches) + IWICBitmapCodecInfo::MatchesMimeType +
    + + + Gets the pixel formats the codec supports. + + + + + Gets the color management version number the codec supports. + + + + + Gets the name of the device manufacture associated with the codec. + + + + + Gets a comma delimited list of device models associated with the codec. + + + + + Gets a comma delimited sequence of mime types associated with the codec. + + + + + Gets a comma delimited list of the file name extensions associated with the codec. + + + + + No documentation. + + + ee719890 + IWICBitmapCodecProgressNotification + IWICBitmapCodecProgressNotification + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Registers a progress notification callback function.

    +
    +

    A function reference to the application defined progress notification callback function. See ProgressNotificationCallback for the callback signature.

    +

    A reference to component data for the callback method.

    +

    The and flags to use for progress notification.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Applications can only register a single callback. Subsequent registration calls will replace the previously registered callback. To unregister a callback, pass in null or register a new callback function.

    Progress is reported in an increasing order between 0.0 and 1.0. If dwProgressFlags includes , the callback is guaranteed to be called with progress 0.0. If dwProgressFlags includes , the callback is guaranteed to be called with progress 1.0.

    increases the frequency in which the callback is called. If an operation is expected to take more than 30 seconds, should be added to dwProgressFlags.

    +
    + + ee690085 + HRESULT IWICBitmapCodecProgressNotification::RegisterProgressNotification([In, Optional] __function__stdcall* pfnProgressNotification,[In, Optional] void* pvData,[In] unsigned int dwProgressFlags) + IWICBitmapCodecProgressNotification::RegisterProgressNotification +
    + + +

    Exposes methods that represent a decoder.

    The interface provides access to the decoder's properties such as global thumbnails (if supported), frames, and palette.

    +
    + +

    There are a number of concrete implemenations of this interface representing each of the standard decoders provided by the platform including bitmap (BMP), Portable Network Graphics (PNG), icon (ICO), Joint Photographic Experts Group (JPEG), Graphics Interchange Format (GIF), Tagged Image File Format (TIFF), and Microsoft?Windows Digital Photo (WDP). The following table includes the class identifier (CLSID) for each native decoder.

    CLSID NameCLSID
    0x6b462062, 0x7cbf, 0x400d, 0x9f, 0xdb, 0x81, 0x3d, 0xd1, 0xf, 0x27, 0x78
    0x389ea17b, 0x5078, 0x4cde, 0xb6, 0xef, 0x25, 0xc1, 0x51, 0x75, 0xc7, 0x51
    0xc61bfcdf, 0x2e0f, 0x4aad, 0xa8, 0xd7, 0xe0, 0x6b, 0xaf, 0xeb, 0xcd, 0xfe
    0x9456a480, 0xe88b, 0x43ea, 0x9e, 0x73, 0xb, 0x2d, 0x9b, 0x71, 0xb1, 0xca
    0x381dda3c, 0x9ce9, 0x4834, 0xa2, 0x3e, 0x1f, 0x98, 0xf8, 0xfc, 0x52, 0xbe
    0xb54e85d9, 0xfe23, 0x499f, 0x8b, 0x88, 0x6a, 0xce, 0xa7, 0x13, 0x75, 0x2b
    0xa26cec36, 0x234c, 0x4950, 0xae, 0x16, 0xe3, 0x4a, 0xac, 0xe7, 0x1d, 0x0d

    ?

    This interface may be sub-classed to provide support for third party codecs as part of the extensibility model. See the AITCodec Sample CODEC.

    Codecs written as TIFF container formats that are not register will decode as a TIFF image. Client applications should check for a zero frame count to determine if the codec is valid.

    +
    + + ee690086 + IWICBitmapDecoder + IWICBitmapDecoder +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the image's container format.

    +
    + + ee690095 + GetContainerFormat + GetContainerFormat + HRESULT IWICBitmapDecoder::GetContainerFormat([Out] GUID* pguidContainerFormat) +
    + + +

    Retrieves an for the image.

    +
    + + ee690096 + GetDecoderInfo + GetDecoderInfo + HRESULT IWICBitmapDecoder::GetDecoderInfo([Out] IWICBitmapDecoderInfo** ppIDecoderInfo) +
    + + +

    Proxy function for the GetMetadataQueryReader method.

    +
    + + ee690103 + GetMetadataQueryReader + GetMetadataQueryReader + HRESULT IWICBitmapDecoder::GetMetadataQueryReader([Out] IWICMetadataQueryReader** ppIMetadataQueryReader) +
    + + +

    Retrieves a preview image, if supported.

    +
    + +

    Not all formats support previews. Only the native Microsoft?Windows Digital Photo (WDP) codec support previews.

    +
    + + ee690104 + GetPreview + GetPreview + HRESULT IWICBitmapDecoder::GetPreview([Out] IWICBitmapSource** ppIBitmapSource) +
    + + +

    Proxy function for the GetThumbnail method.

    +
    + + ee690107 + GetThumbnail + GetThumbnail + HRESULT IWICBitmapDecoder::GetThumbnail([Out] IWICBitmapSource** ppIThumbnail) +
    + + +

    Retrieves the total number of frames in the image.

    +
    + + ee690099 + GetFrameCount + GetFrameCount + HRESULT IWICBitmapDecoder::GetFrameCount([Out] unsigned int* pCount) +
    + + +

    Retrieves the capabilities of the decoder based on the specified stream.

    +
    +

    The stream to retrieve the decoder capabilities from.

    +

    The of the decoder.

    + +

    Custom decoder implementations should save the current position of the specified , read whatever information is necessary in order to determine which capabilities it can provide for the supplied stream, and restore the stream position.

    +
    + + ee690109 + HRESULT IWICBitmapDecoder::QueryCapability([In, Optional] IStream* pIStream,[Out] WICBitmapDecoderCapabilities* pdwCapability) + IWICBitmapDecoder::QueryCapability +
    + + +

    Initializes the decoder with the provided stream.

    +
    +

    The stream to use for initialization.

    The stream contains the encoded pixels which are decoded each time the CopyPixels method on the interface (see GetFrame) is invoked.

    +

    The to use for initialization.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690108 + HRESULT IWICBitmapDecoder::Initialize([In, Optional] IStream* pIStream,[In] WICDecodeOptions cacheOptions) + IWICBitmapDecoder::Initialize +
    + + +

    Retrieves the image's container format.

    +
    +

    A reference that receives the image's container format .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690095 + HRESULT IWICBitmapDecoder::GetContainerFormat([Out] GUID* pguidContainerFormat) + IWICBitmapDecoder::GetContainerFormat +
    + + +

    Retrieves an for the image.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690096 + HRESULT IWICBitmapDecoder::GetDecoderInfo([Out] IWICBitmapDecoderInfo** ppIDecoderInfo) + IWICBitmapDecoder::GetDecoderInfo +
    + + +

    Proxy function for the CopyPalette method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690092 + HRESULT IWICBitmapDecoder::CopyPalette([In, Optional] IWICPalette* pIPalette) + IWICBitmapDecoder::CopyPalette +
    + + +

    Proxy function for the GetMetadataQueryReader method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690103 + HRESULT IWICBitmapDecoder::GetMetadataQueryReader([Out] IWICMetadataQueryReader** ppIMetadataQueryReader) + IWICBitmapDecoder::GetMetadataQueryReader +
    + + +

    Retrieves a preview image, if supported.

    +
    +

    Receives a reference to the preview bitmap if supported.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Not all formats support previews. Only the native Microsoft?Windows Digital Photo (WDP) codec support previews.

    +
    + + ee690104 + HRESULT IWICBitmapDecoder::GetPreview([Out] IWICBitmapSource** ppIBitmapSource) + IWICBitmapDecoder::GetPreview +
    + + +

    Proxy function for the GetColorContexts method.

    +
    + No documentation. + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690094 + HRESULT IWICBitmapDecoder::GetColorContexts([In] unsigned int cCount,[InOut, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] unsigned int* pcActualCount) + IWICBitmapDecoder::GetColorContexts +
    + + +

    Proxy function for the GetColorContexts method.

    +
    + No documentation. + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690094 + HRESULT IWICBitmapDecoder::GetColorContexts([In] unsigned int cCount,[InOut, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] unsigned int* pcActualCount) + IWICBitmapDecoder::GetColorContexts +
    + + +

    Proxy function for the GetColorContexts method.

    +
    + No documentation. + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690094 + HRESULT IWICBitmapDecoder::GetColorContexts([In] unsigned int cCount,[InOut, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] unsigned int* pcActualCount) + IWICBitmapDecoder::GetColorContexts +
    + + +

    Proxy function for the GetThumbnail method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690107 + HRESULT IWICBitmapDecoder::GetThumbnail([Out] IWICBitmapSource** ppIThumbnail) + IWICBitmapDecoder::GetThumbnail +
    + + +

    Retrieves the total number of frames in the image.

    +
    +

    A reference that receives the total number of frames in the image.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690099 + HRESULT IWICBitmapDecoder::GetFrameCount([Out] unsigned int* pCount) + IWICBitmapDecoder::GetFrameCount +
    + + +

    Retrieves the specified frame of the image.

    +
    +

    The particular frame to retrieve.

    +

    A reference that receives a reference to the .

    + + ee690098 + HRESULT IWICBitmapDecoder::GetFrame([In] unsigned int index,[Out] IWICBitmapFrameDecode** ppIBitmapFrame) + IWICBitmapDecoder::GetFrame +
    + + + Initializes a new instance of the class from a . + + The bitmap decoder info. + HRESULT IWICBitmapDecoderInfo::CreateInstance([Out, Fast] IWICBitmapDecoder** ppIBitmapDecoder) + + + + Initializes a new instance of the class from a guid. for a list of default supported decoder. + + The factory. + The container format GUID. + HRESULT IWICImagingFactory::CreateDecoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Initializes a new instance of the class. + + The factory. + The container format GUID. + The GUID vendor ref. + HRESULT IWICImagingFactory::CreateDecoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Initializes a new instance of the class from a . + + The factory. + The stream ref. + The metadata options. + HRESULT IWICImagingFactory::CreateDecoderFromStream([In, Optional] IStream* pIStream,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Initializes a new instance of the class from a . + + The factory. + The stream ref. + The metadata options. + HRESULT IWICImagingFactory::CreateDecoderFromStream([In, Optional] IStream* pIStream,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Initializes a new instance of the class from a . + + The factory. + The stream ref. + The GUID vendor ref. + The metadata options. + HRESULT IWICImagingFactory::CreateDecoderFromStream([In, Optional] IStream* pIStream,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Initializes a new instance of the class from a . + + The factory. + The stream ref. + The GUID vendor ref. + The metadata options. + HRESULT IWICImagingFactory::CreateDecoderFromStream([In, Optional] IStream* pIStream,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Initializes a new instance of the class from a file in read mode. + + The factory. + The filename. + The metadata options. + HRESULT IWICImagingFactory::CreateDecoderFromFilename([In] const wchar_t* wzFilename,[In, Optional] const GUID* pguidVendor,[In] unsigned int dwDesiredAccess,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Initializes a new instance of the class from a file. + + The factory. + The filename. + The desired access. + The metadata options. + HRESULT IWICImagingFactory::CreateDecoderFromFilename([In] const wchar_t* wzFilename,[In, Optional] const GUID* pguidVendor,[In] unsigned int dwDesiredAccess,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Initializes a new instance of the class from a file. + + The factory. + The filename. + The GUID vendor ref. + The desired access. + The metadata options. + HRESULT IWICImagingFactory::CreateDecoderFromFilename([In] const wchar_t* wzFilename,[In, Optional] const GUID* pguidVendor,[In] unsigned int dwDesiredAccess,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Initializes a new instance of the class from a file stream. + + The factory. + The filename. + The metadata options. + HRESULT IWICImagingFactory::CreateDecoderFromFileHandle([In] unsigned int hFile,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Initializes a new instance of the class from a file stream. + + The factory. + The filename. + The GUID vendor ref. + The metadata options. + HRESULT IWICImagingFactory::CreateDecoderFromFileHandle([In] unsigned int hFile,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + + + + Queries the capabilities of the decoder based on the specified stream. + + The stream to retrieve the decoder capabilities from.. + Capabilities of the decoder + HRESULT IWICBitmapDecoder::QueryCapability([In, Optional] IStream* pIStream,[Out] WICBitmapDecoderCapabilities* pdwCapability) + + + + Initializes the decoder with the provided stream. + + The stream to use for initialization. + The cache options. + If the method succeeds, it returns . Otherwise, it throws an exception. + HRESULT IWICBitmapDecoder::Initialize([In, Optional] IStream* pIStream,[In] WICDecodeOptions cacheOptions) + + + + Get the of the image (if any) + + The factory for creating new color contexts + The color context array, or null + + When the image format does not support color contexts, + is returned. + + HRESULT IWICBitmapDecoder::GetColorContexts([In] unsigned int cCount,[Out, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] unsigned int* pcActualCount) + + + + Get the of the image (if any) + + + null if the decoder does not support color contexts; + otherwise an array of zero or more ColorContext objects + + HRESULT IWICBitmapDecoder::GetColorContexts([In] unsigned int cCount,[Out, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] + + + +

    Exposes methods that provide information about a decoder.

    +
    + + ee690087 + IWICBitmapDecoderInfo + IWICBitmapDecoderInfo +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the file pattern signatures supported by the decoder.

    +
    +

    The array size of the pPatterns array.

    +

    Receives a list of objects supported by the decoder.

    +

    Receives the number of patterns the decoder supports.

    +

    Receives the actual buffer size needed to retrieve all pattern signatures supported by the decoder.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    To retrieve all pattern signatures, this method should first be called with pPatterns set to null to retrieve the actual buffer size needed through pcbPatternsActual. Once the needed buffer size is known, allocate a buffer of the needed size and call GetPatterns again with the allocated buffer.

    +
    + + ee690089 + HRESULT IWICBitmapDecoderInfo::GetPatterns([In] unsigned int cbSizePatterns,[Out, Buffer, Optional] WICBitmapPattern* pPatterns,[Out] unsigned int* pcPatterns,[Out] unsigned int* pcbPatternsActual) + IWICBitmapDecoderInfo::GetPatterns +
    + + +

    Retrieves a value that indicates whether the codec recognizes the pattern within a specified stream.

    +
    +

    The stream to pattern match within.

    +

    A reference that receives TRUE if the patterns match; otherwise, .

    + + ee690090 + HRESULT IWICBitmapDecoderInfo::MatchesPattern([In, Optional] IStream* pIStream,[Out] BOOL* pfMatches) + IWICBitmapDecoderInfo::MatchesPattern +
    + + +

    Creates a new instance.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690088 + HRESULT IWICBitmapDecoderInfo::CreateInstance([Out, Fast] IWICBitmapDecoder** ppIBitmapDecoder) + IWICBitmapDecoderInfo::CreateInstance +
    + + + Gets the file pattern signatures supported by the decoder. + + HRESULT IWICBitmapDecoderInfo::GetPatterns([In] unsigned int cbSizePatterns,[Out, Buffer, Optional] WICBitmapPattern* pPatterns,[Out] unsigned int* pcPatterns,[Out] unsigned int* pcbPatternsActual) + + + + Retrieves a value that indicates whether the codec recognizes the pattern within a specified stream. + + The stream to pattern match within. + true if the patterns match; otherwise, false. + HRESULT IWICBitmapDecoderInfo::MatchesPattern([In, Optional] IStream* pIStream,[Out] BOOL* pfMatches) + + + +

    Defines methods for setting an encoder's properties such as thumbnails, frames, and palettes.

    +
    + +

    There are a number of concrete implemenations of this interface representing each of the standard encoders provided by the platform including bitmap (BMP), Portable Network Graphics (PNG), Joint Photographic Experts Group (JPEG), Graphics Interchange Format (GIF), Tagged Image File Format (TIFF), and Microsoft?Windows Digital Photo (WDP). The following table includes the class identifier (CLSID) for each native encoder.

    CLSID NameCLSID
    0x69be8bb4, 0xd66d, 0x47c8, 0x86, 0x5a, 0xed, 0x15, 0x89, 0x43, 0x37, 0x82
    0x27949969, 0x876a, 0x41d7, 0x94, 0x47, 0x56, 0x8f, 0x6a, 0x35, 0xa4, 0xdc
    0x1a34f5c1, 0x4a5a, 0x46dc, 0xb6, 0x44, 0x1f, 0x45, 0x67, 0xe7, 0xa6, 0x76
    0x114f5598, 0xb22, 0x40a0, 0x86, 0xa1, 0xc8, 0x3e, 0xa4, 0x95, 0xad, 0xbd
    0x0131be10, 0x2001, 0x4c5f, 0xa9, 0xb0, 0xcc, 0x88, 0xfa, 0xb6, 0x4c, 0xe8
    0xac4ce3cb, 0xe1c1, 0x44cd, 0x82, 0x15, 0x5a, 0x16, 0x65, 0x50, 0x9e, 0xc2

    ?

    Additionally this interface may be sub-classed to provide support for third party codecs as part of the extensibility model. See the AITCodec Sample CODEC.

    +
    + + ee690110 + IWICBitmapEncoder + IWICBitmapEncoder +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the encoder's container format.

    +
    + + ee690118 + GetContainerFormat + GetContainerFormat + HRESULT IWICBitmapEncoder::GetContainerFormat([Out] GUID* pguidContainerFormat) +
    + + +

    Retrieves an for the encoder.

    +
    + + ee690119 + GetEncoderInfo + GetEncoderInfo + HRESULT IWICBitmapEncoder::GetEncoderInfo([Out] IWICBitmapEncoderInfo** ppIEncoderInfo) +
    + + +

    Proxy function for the SetPalette method.

    +
    + + ee690127 + SetPalette + SetPalette + HRESULT IWICBitmapEncoder::SetPalette([In, Optional] IWICPalette* pIPalette) +
    + + +

    Sets the global thumbnail for the image.

    +
    + + ee690129 + SetThumbnail + SetThumbnail + HRESULT IWICBitmapEncoder::SetThumbnail([In, Optional] IWICBitmapSource* pIThumbnail) +
    + + +

    Sets the global preview for the image.

    +
    + + ee690128 + SetPreview + SetPreview + HRESULT IWICBitmapEncoder::SetPreview([In, Optional] IWICBitmapSource* pIPreview) +
    + + +

    Proxy function for the GetMetadataQueryWriter method.

    +
    + + ee690122 + GetMetadataQueryWriter + GetMetadataQueryWriter + HRESULT IWICBitmapEncoder::GetMetadataQueryWriter([Out] IWICMetadataQueryWriter** ppIMetadataQueryWriter) +
    + + +

    Initializes the encoder with an which tells the encoder where to encode the bits.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690123 + HRESULT IWICBitmapEncoder::Initialize([In, Optional] IStream* pIStream,[In] WICBitmapEncoderCacheOption cacheOption) + IWICBitmapEncoder::Initialize +
    + + +

    Retrieves the encoder's container format.

    +
    +

    A reference that receives the encoder's container format .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690118 + HRESULT IWICBitmapEncoder::GetContainerFormat([Out] GUID* pguidContainerFormat) + IWICBitmapEncoder::GetContainerFormat +
    + + +

    Retrieves an for the encoder.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690119 + HRESULT IWICBitmapEncoder::GetEncoderInfo([Out] IWICBitmapEncoderInfo** ppIEncoderInfo) + IWICBitmapEncoder::GetEncoderInfo +
    + + +

    Sets the objects for the encoder.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690125 + HRESULT IWICBitmapEncoder::SetColorContexts([In] unsigned int cCount,[In, Buffer] IWICColorContext** ppIColorContext) + IWICBitmapEncoder::SetColorContexts +
    + + +

    Sets the objects for the encoder.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690125 + HRESULT IWICBitmapEncoder::SetColorContexts([In] unsigned int cCount,[In, Buffer] IWICColorContext** ppIColorContext) + IWICBitmapEncoder::SetColorContexts +
    + + +

    Sets the objects for the encoder.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690125 + HRESULT IWICBitmapEncoder::SetColorContexts([In] unsigned int cCount,[In, Buffer] IWICColorContext** ppIColorContext) + IWICBitmapEncoder::SetColorContexts +
    + + +

    Proxy function for the SetPalette method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690127 + HRESULT IWICBitmapEncoder::SetPalette([In, Optional] IWICPalette* pIPalette) + IWICBitmapEncoder::SetPalette +
    + + +

    Sets the global thumbnail for the image.

    +
    +

    The to set as the global thumbnail.

    +

    Returns if successful, or an error value otherwise.

    Returns if the feature is not supported by the encoder.

    + + ee690129 + HRESULT IWICBitmapEncoder::SetThumbnail([In, Optional] IWICBitmapSource* pIThumbnail) + IWICBitmapEncoder::SetThumbnail +
    + + +

    Sets the global preview for the image.

    +
    +

    The to use as the global preview.

    +

    Returns if successful, or an error value otherwise.

    Returns if the feature is not supported by the encoder.

    + + ee690128 + HRESULT IWICBitmapEncoder::SetPreview([In, Optional] IWICBitmapSource* pIPreview) + IWICBitmapEncoder::SetPreview +
    + + +

    Creates a new instance.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The parameter ppIEncoderOptions can be used to receive an that can then be used to specify encoder options. This is done by passing a reference to a null reference in ppIEncoderOptions. The returned is initialized with all encoder options that are available for the given format, at their default values. To specify non-default encoding behavior, set the needed encoder options on the and pass it to .

    Note??Do not pass in a reference to an initialized . The reference will be overwritten, and the original will not be freed.?

    Otherwise, you can pass null in ppIEncoderOptions if you do not intend to specify encoder options.

    See Encoding Overview for an example of how to set encoder options.

    For formats that support encoding multiple frames (for example, TIFF, JPEG-XR), you can work on only one frame at a time. This means that you must call before you call CreateNewFrame again. +

    +
    + + ee690116 + HRESULT IWICBitmapEncoder::CreateNewFrame([Out, Fast] IWICBitmapFrameEncode** ppIFrameEncode,[Out, Fast] IPropertyBag2** ppIEncoderOptions) + IWICBitmapEncoder::CreateNewFrame +
    + + +

    Commits all changes for the image and closes the stream.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    To finalize an image, both the frame Commit and the encoder Commit must be called. However, only call the encoder Commit method after all frames have been committed.

    After the encoder has been committed, it can't be re-initialized or reused with another stream. A new encoder interface must be created, for example, with . +

    For the encoder Commit to succeed, you must at a minimum call and either or . +

    specifies all parameters needed to encode the image data. requires that you also call , , and (if the pixel format is indexed). +

    +
    + + ee690114 + HRESULT IWICBitmapEncoder::Commit() + IWICBitmapEncoder::Commit +
    + + +

    Proxy function for the GetMetadataQueryWriter method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690122 + HRESULT IWICBitmapEncoder::GetMetadataQueryWriter([Out] IWICMetadataQueryWriter** ppIMetadataQueryWriter) + IWICBitmapEncoder::GetMetadataQueryWriter +
    + + + Initializes a new instance of the class. + + The factory. + The container format GUID. List from + HRESULT IWICImagingFactory::CreateEncoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out] IWICBitmapEncoder** ppIEncoder) + + + + Initializes a new instance of the class. + + The factory. + The container format GUID. List from + The GUID vendor ref. + HRESULT IWICImagingFactory::CreateEncoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out] IWICBitmapEncoder** ppIEncoder) + + + + Initializes a new instance of the class. + + The factory. + The container format GUID. List from + A stream to use as the output of this bitmap encoder. + HRESULT IWICImagingFactory::CreateEncoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out] IWICBitmapEncoder** ppIEncoder) + + + + Initializes a new instance of the class. + + The factory. + The container format GUID. List from + A stream to use as the output of this bitmap encoder. + HRESULT IWICImagingFactory::CreateEncoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out] IWICBitmapEncoder** ppIEncoder) + + + + Initializes a new instance of the class. + + The factory. + The container format GUID. List from + The GUID vendor ref. + A stream to use as the output of this bitmap encoder. + HRESULT IWICImagingFactory::CreateEncoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out] IWICBitmapEncoder** ppIEncoder) + + + + Initializes a new instance of the class. + + The factory. + The container format GUID. List from + The GUID vendor ref. + A stream to use as the output of this bitmap encoder. + HRESULT IWICImagingFactory::CreateEncoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out] IWICBitmapEncoder** ppIEncoder) + + + + Initializes the encoder with the provided stream. + + The stream to use for initialization. + If the method succeeds, it returns . Otherwise, it throws an exception. + HRESULT IWICBitmapEncoder::Initialize([In, Optional] IStream* pIStream,[In] WICBitmapEncoderCacheOption cacheOption) + + + + Initializes the encoder with the provided stream. + + The stream to use for initialization. + If the method succeeds, it returns . Otherwise, it throws an exception. + HRESULT IWICBitmapEncoder::Initialize([In, Optional] IStream* pIStream,[In] WICBitmapEncoderCacheOption cacheOption) + + + + Sets the objects for the encoder. + + The color contexts to set for the encoder. + If the method succeeds, it returns . Otherwise, it throws an exception. + HRESULT IWICBitmapEncoder::SetColorContexts([In] unsigned int cCount,[In, Buffer] IWICColorContext** ppIColorContext) + + + +

    Exposes methods that provide information about an encoder.

    +
    + + ee690112 + IWICBitmapEncoderInfo + IWICBitmapEncoderInfo +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a new instance.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690113 + HRESULT IWICBitmapEncoderInfo::CreateInstance([Out] IWICBitmapEncoder** ppIBitmapEncoder) + IWICBitmapEncoderInfo::CreateInstance +
    + + +

    Exposes methods that produce a flipped (horizontal or vertical) and/or rotated (by 90 degree increments) bitmap source. Rotations are done before the flip.

    +
    + +

    IWICBitmapFipRotator requests data on a per-pixel basis, while WIC codecs provide data on a per-scanline basis. This causes the fliprotator object to exhibit n? behavior if there is no buffering. This occures because each pixel in the transformed image requires an entire scanline to be decoded in the file. It is recommended that you buffer the image using , or flip/rotate the image using Direct2D.

    +
    + + ee690131 + IWICBitmapFlipRotator + IWICBitmapFlipRotator +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Initializes the bitmap flip rotator with the provided parameters.

    +
    +

    The input bitmap source.

    +

    The to flip or rotate the image.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690132 + HRESULT IWICBitmapFlipRotator::Initialize([In, Optional] IWICBitmapSource* pISource,[In] WICBitmapTransformOptions options) + IWICBitmapFlipRotator::Initialize +
    + + + Initializes a new instance of the class. + + The factory. + + + +

    Defines methods for decoding individual image frames of an encoded file.

    +
    + + ee690134 + IWICBitmapFrameDecode + IWICBitmapFrameDecode +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a metadata query reader for the frame.

    +
    + +

    For image formats with one frame (JPG, PNG, JPEG-XR), the frame-level query reader of the first frame is used to access all image metadata, and the decoder-level query reader isn?t used. For formats with more than one frame (GIF, TIFF), the frame-level query reader for a given frame is used to access metadata specific to that frame, and in the case of GIF a decoder-level metadata reader will be present. If the decoder doesn?t support metadata (BMP, ICO), this will return . +

    +
    + + ee690137 + GetMetadataQueryReader + GetMetadataQueryReader + HRESULT IWICBitmapFrameDecode::GetMetadataQueryReader([Out] IWICMetadataQueryReader** ppIMetadataQueryReader) +
    + + +

    Retrieves a small preview of the frame, if supported by the codec.

    +
    + +

    Not all formats support thumbnails. Joint Photographic Experts Group (JPEG), Tagged Image File Format (TIFF), and Microsoft?Windows Digital Photo (WDP) support thumbnails.

    +
    + + ee690139 + GetThumbnail + GetThumbnail + HRESULT IWICBitmapFrameDecode::GetThumbnail([Out] IWICBitmapSource** ppIThumbnail) +
    + + +

    Retrieves a metadata query reader for the frame.

    +
    +

    When this method returns, contains a reference to the frame's metadata query reader.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    For image formats with one frame (JPG, PNG, JPEG-XR), the frame-level query reader of the first frame is used to access all image metadata, and the decoder-level query reader isn?t used. For formats with more than one frame (GIF, TIFF), the frame-level query reader for a given frame is used to access metadata specific to that frame, and in the case of GIF a decoder-level metadata reader will be present. If the decoder doesn?t support metadata (BMP, ICO), this will return . +

    +
    + + ee690137 + HRESULT IWICBitmapFrameDecode::GetMetadataQueryReader([Out] IWICMetadataQueryReader** ppIMetadataQueryReader) + IWICBitmapFrameDecode::GetMetadataQueryReader +
    + + +

    Retrieves the associated with the image frame.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If null is passed for ppIColorContexts, and 0 is passed for cCount, this method will return the total number of color contexts in the image in pcActualCount.

    The ppIColorContexts array must be filled with valid data: each * in the array must have been created using . +

    +
    + + ee690135 + HRESULT IWICBitmapFrameDecode::GetColorContexts([In] unsigned int cCount,[InOut, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] unsigned int* pcActualCount) + IWICBitmapFrameDecode::GetColorContexts +
    + + +

    Retrieves the associated with the image frame.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If null is passed for ppIColorContexts, and 0 is passed for cCount, this method will return the total number of color contexts in the image in pcActualCount.

    The ppIColorContexts array must be filled with valid data: each * in the array must have been created using . +

    +
    + + ee690135 + HRESULT IWICBitmapFrameDecode::GetColorContexts([In] unsigned int cCount,[InOut, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] unsigned int* pcActualCount) + IWICBitmapFrameDecode::GetColorContexts +
    + + +

    Retrieves the associated with the image frame.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If null is passed for ppIColorContexts, and 0 is passed for cCount, this method will return the total number of color contexts in the image in pcActualCount.

    The ppIColorContexts array must be filled with valid data: each * in the array must have been created using . +

    +
    + + ee690135 + HRESULT IWICBitmapFrameDecode::GetColorContexts([In] unsigned int cCount,[InOut, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] unsigned int* pcActualCount) + IWICBitmapFrameDecode::GetColorContexts +
    + + +

    Retrieves a small preview of the frame, if supported by the codec.

    +
    +

    A reference that receives a reference to the of the thumbnail.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Not all formats support thumbnails. Joint Photographic Experts Group (JPEG), Tagged Image File Format (TIFF), and Microsoft?Windows Digital Photo (WDP) support thumbnails.

    +
    + + ee690139 + HRESULT IWICBitmapFrameDecode::GetThumbnail([Out] IWICBitmapSource** ppIThumbnail) + IWICBitmapFrameDecode::GetThumbnail +
    + + + Get the of the image (if any) + + The factory for creating new color contexts + The color context array, or null + + When the image format does not support color contexts, + is returned. + + HRESULT IWICBitmapDecoder::GetColorContexts([In] unsigned int cCount,[Out, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] unsigned int* pcActualCount) + + + + Get the of the image (if any) + + + null if the decoder does not support color contexts; + otherwise an array of zero or more ColorContext objects + + HRESULT IWICBitmapDecoder::GetColorContexts([In] unsigned int cCount,[Out, Buffer, Optional] IWICColorContext** ppIColorContexts,[Out] + + + +

    Represents an encoder's individual image frames.

    +
    + + ee690141 + IWICBitmapFrameEncode + IWICBitmapFrameEncode +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the for indexed pixel formats.

    +
    + +

    This method doesn't fail if called on a frame whose pixel format is set to a non-indexed pixel format. If the target pixel format is a non-indexed format, the palette will be ignored.

    If you already called to set a global palette, this method overrides that palette for the current frame.

    The palette must be specified before your first call to WritePixels/WriteSource. Doing so will cause WriteSource to use the specified palette when converting the source image to the encoder pixel format. If no palette is specified, a palette will be generated on the first call to WriteSource. +

    +
    + + ee690150 + SetPalette + SetPalette + HRESULT IWICBitmapFrameEncode::SetPalette([In, Optional] IWICPalette* pIPalette) +
    + + +

    Proxy function for the SetThumbnail method.

    +
    + + ee690157 + SetThumbnail + SetThumbnail + HRESULT IWICBitmapFrameEncode::SetThumbnail([In, Optional] IWICBitmapSource* pIThumbnail) +
    + + +

    Gets the metadata query writer for the encoder frame.

    +
    + +

    If you are setting metadata on the frame, you must do this before you use or to write any image pixels to the frame

    +
    + + ee690144 + GetMetadataQueryWriter + GetMetadataQueryWriter + HRESULT IWICBitmapFrameEncode::GetMetadataQueryWriter([Out] IWICMetadataQueryWriter** ppIMetadataQueryWriter) +
    + + +

    Initializes the frame encoder using the given properties.

    +
    +

    The set of properties to use for initialization.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If you don't want any encoding options, pass null for pIEncoderOptions. Otherwise, pass the that was provided by with updated values. +

    For a complete list of encoding options supported by the Windows-provided codecs, see Native WIC Codecs.

    +
    + + ee690146 + HRESULT IWICBitmapFrameEncode::Initialize([In, Optional] IPropertyBag2* pIEncoderOptions) + IWICBitmapFrameEncode::Initialize +
    + + +

    Sets the output image dimensions for the frame.

    +
    +

    The width of the output image.

    +

    The height of the output image.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690154 + HRESULT IWICBitmapFrameEncode::SetSize([In] unsigned int uiWidth,[In] unsigned int uiHeight) + IWICBitmapFrameEncode::SetSize +
    + + +

    Sets the physical resolution of the output image.

    +
    +

    The horizontal resolution value.

    +

    The vertical resolution value.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Windows Imaging Component (WIC) doesn't perform any special processing as a result of DPI resolution values. For example, data returned from isn't scaled by the DPI. The app must handle DPI resolution. +

    +
    + + ee690152 + HRESULT IWICBitmapFrameEncode::SetResolution([In] double dpiX,[In] double dpiY) + IWICBitmapFrameEncode::SetResolution +
    + + +

    Requests that the encoder use the specified pixel format.

    +
    +

    On input, the requested pixel format . On output, the closest pixel format supported by the encoder; this may be different than the requested format. For a list of pixel format GUIDs, see Native Pixel Formats.

    +

    Possible return values include the following.

    Return codeDescription

    Success.

    The method was not called.

    ?

    + +

    The encoder might not support the requested pixel format. If not, SetPixelFormat returns the closest match in the memory block that pPixelFormat points to. If the returned pixel format doesn't match the requested format, you must use an object to convert the pixel data.

    +
    + + ee690151 + HRESULT IWICBitmapFrameEncode::SetPixelFormat([InOut] GUID* pPixelFormat) + IWICBitmapFrameEncode::SetPixelFormat +
    + + +

    Proxy function for the SetColorContexts method.

    +
    + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690149 + HRESULT IWICBitmapFrameEncode::SetColorContexts([In] unsigned int cCount,[In, Buffer] IWICColorContext** ppIColorContext) + IWICBitmapFrameEncode::SetColorContexts +
    + + +

    Proxy function for the SetColorContexts method.

    +
    + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690149 + HRESULT IWICBitmapFrameEncode::SetColorContexts([In] unsigned int cCount,[In, Buffer] IWICColorContext** ppIColorContext) + IWICBitmapFrameEncode::SetColorContexts +
    + + +

    Proxy function for the SetColorContexts method.

    +
    + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690149 + HRESULT IWICBitmapFrameEncode::SetColorContexts([In] unsigned int cCount,[In, Buffer] IWICColorContext** ppIColorContext) + IWICBitmapFrameEncode::SetColorContexts +
    + + +

    Sets the for indexed pixel formats.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method doesn't fail if called on a frame whose pixel format is set to a non-indexed pixel format. If the target pixel format is a non-indexed format, the palette will be ignored.

    If you already called to set a global palette, this method overrides that palette for the current frame.

    The palette must be specified before your first call to WritePixels/WriteSource. Doing so will cause WriteSource to use the specified palette when converting the source image to the encoder pixel format. If no palette is specified, a palette will be generated on the first call to WriteSource. +

    +
    + + ee690150 + HRESULT IWICBitmapFrameEncode::SetPalette([In, Optional] IWICPalette* pIPalette) + IWICBitmapFrameEncode::SetPalette +
    + + +

    Proxy function for the SetThumbnail method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690157 + HRESULT IWICBitmapFrameEncode::SetThumbnail([In, Optional] IWICBitmapSource* pIThumbnail) + IWICBitmapFrameEncode::SetThumbnail +
    + + +

    Copies scan-line data from a caller-supplied buffer to the object. +

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    Possible return values include the following.

    Return codeDescription

    Success.

    The value of lineCount is larger than the number of scan lines in the image.

    ?

    + +

    Successive WritePixels calls are assumed to be sequential scan-line access in the output image.

    +
    + + ee690158 + HRESULT IWICBitmapFrameEncode::WritePixels([In] unsigned int lineCount,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In, Buffer] void* pbPixels) + IWICBitmapFrameEncode::WritePixels +
    + + +

    Encodes a bitmap source.

    +
    +

    The bitmap source to encode.

    +

    The size rectangle of the bitmap source.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If SetSize is not called prior to calling WriteSource, the size given in prc is used if not null. Otherwise, the size of the given in pIBitmapSource is used.

    If SetPixelFormat is not called prior to calling WriteSource, the pixel format of the given in pIBitmapSource is used.

    If SetResolution is not called prior to calling WriteSource, the pixel format of pIBitmapSource is used.

    If SetPalette is not called prior to calling WriteSource, the target pixel format is indexed, and the pixel format of pIBitmapSource matches the encoder frame's pixel format, then the pIBitmapSource pixel format is used.

    When encoding a GIF image, if the global palette is set and the frame level palette is not set directly by the user or by a custom independent software vendor (ISV) GIF codec, WriteSource will use the global palette to encode the frame even when pIBitmapSource has a frame level palette.

    Starting with Windows?Vista, repeated WriteSource calls can be made as long as the total accumulated source rect height is the same as set through SetSize.

    Starting with Windows?8.1, the source rect must be at least the dimensions set through SetSize. If the source rect width exceeds the SetSize width, extra pixels on the right side are ignored. If the source rect height exceeds the remaining unfilled height, extra scan lines on the bottom are ignored. +

    +
    + + ee690159 + HRESULT IWICBitmapFrameEncode::WriteSource([In, Optional] IWICBitmapSource* pIBitmapSource,[In] void* prc) + IWICBitmapFrameEncode::WriteSource +
    + + +

    Commits the frame to the image.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    After the frame Commit has been called, you can't use or reinitialize the object and any objects created from it. +

    To finalize the image, both the frame Commit and the encoder Commit must be called. However, only call the encoder Commit method after all frames have been committed.

    +
    + + ee690142 + HRESULT IWICBitmapFrameEncode::Commit() + IWICBitmapFrameEncode::Commit +
    + + +

    Gets the metadata query writer for the encoder frame.

    +
    +

    When this method returns, contains a reference to metadata query writer for the encoder frame.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If you are setting metadata on the frame, you must do this before you use or to write any image pixels to the frame

    +
    + + ee690144 + HRESULT IWICBitmapFrameEncode::GetMetadataQueryWriter([Out] IWICMetadataQueryWriter** ppIMetadataQueryWriter) + IWICBitmapFrameEncode::GetMetadataQueryWriter +
    + + + Initializes a new instance of the class. + + The encoder. + HRESULT IWICBitmapEncoder::CreateNewFrame([Out] IWICBitmapFrameEncode** ppIFrameEncode,[Out] IPropertyBag2** ppIEncoderOptions) + + + + Gets the properties to setup before . + + + + + Initializes this instance. + + HRESULT IWICBitmapFrameEncode::Initialize([In, Optional] IPropertyBag2* pIEncoderOptions) + + + + Sets the objects for this frame encoder. + + The color contexts to set for the encoder. + If the method succeeds, it returns . Otherwise, it throws an exception. + HRESULT IWICBitmapFrameEncode::SetColorContexts([In] unsigned int cCount,[In, Buffer] IWICColorContext** ppIColorContext) + + + +

    Encodes the frame scanlines.

    +
    +

    The number of lines to encode.

    + A data buffer containing the pixels to copy from. + Total size in bytes of pixels to write. If == 0, size is calculated with lineCount * rowStride. + +

    Successive WritePixels calls are assumed to be sequential scanline access in the output image.

    +
    + ee690158 + HRESULT IWICBitmapFrameEncode::WritePixels([In] unsigned int lineCount,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In, Buffer] void* pbPixels) + IWICBitmapFrameEncode::WritePixels +
    + + +

    Encodes the frame scanlines.

    +
    +

    The number of lines to encode.

    + A data buffer containing the pixels to copy from. + The stride of one row. + Total size in bytes of pixels to write. If == 0, size is calculated with lineCount * rowStride. + +

    Successive WritePixels calls are assumed to be sequential scanline access in the output image.

    +
    + ee690158 + HRESULT IWICBitmapFrameEncode::WritePixels([In] unsigned int lineCount,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In, Buffer] void* pbPixels) + IWICBitmapFrameEncode::WritePixels +
    + + +

    Encodes the frame scanlines.

    +
    +

    The number of lines to encode.

    +

    The stride of the image pixels.

    +

    A reference to the pixel buffer.

    + +

    Successive WritePixels calls are assumed to be sequential scanline access in the output image.

    +
    + ee690158 + HRESULT IWICBitmapFrameEncode::WritePixels([In] unsigned int lineCount,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In, Buffer] void* pbPixels) + IWICBitmapFrameEncode::WritePixels +
    + + +

    Encodes a bitmap source.

    +
    +

    The bitmap source to encode.

    + +

    If SetSize is not called prior to calling WriteSource, the size given in prc is used if not null. Otherwise, the size of the given in pIBitmapSource is used.

    If SetPixelFormat is not called prior to calling WriteSource, the pixel format of the given in pIBitmapSource is used.

    If SetResolution is not called prior to calling WriteSource, the pixel format of pIBitmapSource is used.

    If SetPalette is not called prior to calling WriteSource, the target pixel format is indexed, and the pixel format of pIBitmapSource matches the encoder frame's pixel format, then the pIBitmapSource pixel format is used.

    When encoding a GIF image, if the global palette is set and the frame level palette is not set directly by the user or by a custom independent software vendor (ISV) GIF codec, WriteSource will use the global palette to encode the frame even when pIBitmapSource has a frame level palette.

    Windows Vista:The source rect width must match the width set through SetSize. Repeated WriteSource calls can be made as long as the total accumulated source rect height is the same as set through SetSize.

    +
    + + ee690159 + HRESULT IWICBitmapFrameEncode::WriteSource([In, Optional] IWICBitmapSource* pIBitmapSource,[In, Optional] WICRect* prc) + IWICBitmapFrameEncode::WriteSource +
    + + +

    Encodes a bitmap source.

    +
    +

    The bitmap source to encode.

    +

    The size rectangle of the bitmap source.

    + +

    If SetSize is not called prior to calling WriteSource, the size given in prc is used if not null. Otherwise, the size of the given in pIBitmapSource is used.

    If SetPixelFormat is not called prior to calling WriteSource, the pixel format of the given in pIBitmapSource is used.

    If SetResolution is not called prior to calling WriteSource, the pixel format of pIBitmapSource is used.

    If SetPalette is not called prior to calling WriteSource, the target pixel format is indexed, and the pixel format of pIBitmapSource matches the encoder frame's pixel format, then the pIBitmapSource pixel format is used.

    When encoding a GIF image, if the global palette is set and the frame level palette is not set directly by the user or by a custom independent software vendor (ISV) GIF codec, WriteSource will use the global palette to encode the frame even when pIBitmapSource has a frame level palette.

    Windows Vista:The source rect width must match the width set through SetSize. Repeated WriteSource calls can be made as long as the total accumulated source rect height is the same as set through SetSize.

    +
    + + ee690159 + HRESULT IWICBitmapFrameEncode::WriteSource([In, Optional] IWICBitmapSource* pIBitmapSource,[In, Optional] WICRect* prc) + IWICBitmapFrameEncode::WriteSource +
    + + +

    Exposes methods that support the Lock method.

    +
    + +

    The bitmap lock is simply an abstraction for a rectangular memory window into the bitmap. For the simplest case, a system memory bitmap, this is simply a reference to the top left corner of the rectangle and a stride value.

    To release the exclusive lock set by Lock method and the associated object, call IUnknown::Release on the object.

    +
    + + ee690161 + IWICBitmapLock + IWICBitmapLock +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Provides access to the stride value for the memory.

    +
    + +

    Note the stride value is specific to the , not the bitmap. For example, two consecutive locks on the same rectangle of a bitmap may return different references and stride values, depending on internal implementation.

    +
    + + ee690166 + GetStride + GetStride + HRESULT IWICBitmapLock::GetStride([Out] unsigned int* pcbStride) +
    + + +

    Gets the pixel format of for the locked area of pixels. This can be used to compute the number of bytes-per-pixel in the locked area.

    +
    + + ee690164 + GetPixelFormat + GetPixelFormat + HRESULT IWICBitmapLock::GetPixelFormat([Out] GUID* pPixelFormat) +
    + + +

    Retrieves the width and height, in pixels, of the locked rectangle.

    +
    +

    A reference that receives the width of the locked rectangle.

    +

    A reference that receives the height of the locked rectangle.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690165 + HRESULT IWICBitmapLock::GetSize([Out] unsigned int* puiWidth,[Out] unsigned int* puiHeight) + IWICBitmapLock::GetSize +
    + + +

    Provides access to the stride value for the memory.

    +
    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Note the stride value is specific to the , not the bitmap. For example, two consecutive locks on the same rectangle of a bitmap may return different references and stride values, depending on internal implementation.

    +
    + + ee690166 + HRESULT IWICBitmapLock::GetStride([Out] unsigned int* pcbStride) + IWICBitmapLock::GetStride +
    + + +

    Gets the reference to the top left pixel in the locked rectangle.

    +
    +

    A reference that receives the size of the buffer.

    +

    A reference that receives a reference to the top left pixel in the locked rectangle.

    + +

    The reference provided by this method should not be used outside of the lifetime of the lock itself.

    GetDataPointer is not available in multi-threaded apartment applications.

    +
    + + ee690162 + HRESULT IWICBitmapLock::GetDataPointer([Out] unsigned int* pcbBufferSize,[Out] void** ppbData) + IWICBitmapLock::GetDataPointer +
    + + +

    Gets the pixel format of for the locked area of pixels. This can be used to compute the number of bytes-per-pixel in the locked area.

    +
    +

    A reference that receives the pixel format of the locked area.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690164 + HRESULT IWICBitmapLock::GetPixelFormat([Out] GUID* pPixelFormat) + IWICBitmapLock::GetPixelFormat +
    + + + Gets the size. + + HRESULT IWICBitmapLock::GetSize([Out] unsigned int* puiWidth,[Out] unsigned int* puiHeight) + + + + Gets a pointer to the data. + + + + +

    Represents a resized version of the input bitmap using a resampling or filtering algorithm.

    +
    + +

    Images can be scaled to larger sizes; however, even with sophisticated scaling algorithms, there is only so much information in the image and artifacts tend to worsen the more you scale up.

    The scaler will reapply the resampling algorithm every time CopyPixels is called. If the scaled image is to be animated, the scaled image should be created once and cached in a new bitmap, after which the may be released. In this way the scaling algorithm - which may be computationally expensive relative to drawing - is performed only once and the result displayed many times.

    The scaler is optimized to use the minimum amount of memory required to scale the image correctly. The scaler may be used to produce parts of the image incrementally (banding) by calling CopyPixels with different rectangles representing the output bands of the image. Resampling typically requires overlapping rectangles from the source image and thus may need to request the same pixels from the source bitmap multiple times. Requesting scanlines out-of-order from some image decoders can have a significant performance penalty. Because of this reason, the scaler is optimized to handle consecutive horizontal bands of scanlines (rectangle width equal to the bitmap width). In this case the accumulator from the previous vertically adjacent rectangle is re-used to avoid duplicate scanline requests from the source. This implies that banded output from the scaler may have better performance if the bands are requested sequentially. Of course if the scaler is simply used to produce a single rectangle output, this concern is eliminated because the scaler will internally request scanlines in the correct order.

    +
    + + ee690168 + IWICBitmapScaler + IWICBitmapScaler +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Initializes the bitmap scaler with the provided parameters.

    +
    +

    The input bitmap source.

    +

    The destination width.

    +

    The desination height.

    +

    The to use when scaling.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    can't be initialized multiple times. For example, when scaling every frame in a multi-frame image, a new must be created and initialized for each frame.

    +
    + + ee690169 + HRESULT IWICBitmapScaler::Initialize([In, Optional] IWICBitmapSource* pISource,[In] unsigned int uiWidth,[In] unsigned int uiHeight,[In] WICBitmapInterpolationMode mode) + IWICBitmapScaler::Initialize +
    + + + Initializes a new instance of the class. + + The factory. + + + +

    Exposes methods that refers to a source from which pixels are retrieved, but cannot be written back to.

    +
    + +

    This interface provides a common way of accessing and linking together bitmaps, decoders, format converters, and scalers. Components that implement this interface can be connected together in a graph to pull imaging data through.

    This interface defines only the notion of readability or being able to produce pixels. Modifying or writing to a bitmap is considered to be a specialization specific to bitmaps which have storage and is defined in the descendant interface .

    +
    + + ee690171 + IWICBitmapSource + IWICBitmapSource +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the pixel format of the bitmap source..

    +
    + +

    The pixel format returned by this method is not necessarily the pixel format the image is stored as. The codec may perform a format conversion from the storage pixel format to an output pixel format.

    +
    + + ee690181 + GetPixelFormat + GetPixelFormat + HRESULT IWICBitmapSource::GetPixelFormat([Out] GUID* pPixelFormat) +
    + + +

    Retrieves the pixel width and height of the bitmap.

    +
    +

    A reference that receives the pixel width of the bitmap.

    +

    A reference that receives the pixel height of the bitmap

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690185 + HRESULT IWICBitmapSource::GetSize([Out] unsigned int* puiWidth,[Out] unsigned int* puiHeight) + IWICBitmapSource::GetSize +
    + + +

    Retrieves the pixel format of the bitmap source..

    +
    +

    Receives the pixel format the bitmap is stored in. For a list of available pixel formats, see the Native Pixel Formats topic.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The pixel format returned by this method is not necessarily the pixel format the image is stored as. The codec may perform a format conversion from the storage pixel format to an output pixel format.

    +
    + + ee690181 + HRESULT IWICBitmapSource::GetPixelFormat([Out] GUID* pPixelFormat) + IWICBitmapSource::GetPixelFormat +
    + + +

    Retrieves the sampling rate between pixels and physical world measurements.

    +
    +

    A reference that receives the x-axis dpi resolution.

    +

    A reference that receives the y-axis dpi resolution.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Some formats, such as GIF and ICO, do not have full DPI support. For GIF, this method calculates the DPI values from the aspect ratio, using a base DPI of (96.0, 96.0). The ICO format does not support DPI at all, and the method always returns (96.0,96.0) for ICO images.

    Additionally, WIC itself does not transform images based on the DPI values in an image. It is up to the caller to transform an image based on the resolution returned.

    +
    + + ee690183 + HRESULT IWICBitmapSource::GetResolution([Out] double* pDpiX,[Out] double* pDpiY) + IWICBitmapSource::GetResolution +
    + + +

    Retrieves the color table for indexed pixel formats.

    +
    +

    An . A palette can be created using the CreatePalette method.

    +

    Returns one of the following values.

    Return codeDescription

    The palette was unavailable.

    The palette was successfully copied.

    ?

    + +

    If the is an , the function may return the image's global palette if a frame-level palette is not available. The global palette may also be retrieved using the CopyPalette method.

    +
    + + ee690177 + HRESULT IWICBitmapSource::CopyPalette([In, Optional] IWICPalette* pIPalette) + IWICBitmapSource::CopyPalette +
    + + +

    Instructs the object to produce pixels.

    +
    +

    The rectangle to copy. A null value specifies the entire bitmap.

    +

    The stride of the bitmap

    +

    The size of the buffer.

    +

    A reference to the buffer.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    CopyPixels is one of the two main image processing routines (the other being Lock) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a JPEG stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface.

    The caller can restrict the operation to a rectangle of interest (ROI) using the prc parameter. The ROI sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a null ROI implies that the whole bitmap should be returned. +

    The caller controls the memory management and must provide an output buffer (pbBuffer) for the results of the copy along with the buffer's bounds (cbBufferSize). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method.

    If the caller needs to perform numerous copies of an expensive such as a JPEG, it is recommended to create an in-memory first.

    +
    + + ee690179 + HRESULT IWICBitmapSource::CopyPixels([In] const void* prc,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICBitmapSource::CopyPixels +
    + + +

    Retrieves the pixel width and height of the bitmap.

    +
    + HRESULT IWICBitmapSource::GetSize([Out] unsigned int* puiWidth,[Out] unsigned int* puiHeight) + ee690185 + HRESULT IWICBitmapSource::GetSize([Out] unsigned int* puiWidth,[Out] unsigned int* puiHeight) + IWICBitmapSource::GetSize +
    + + +

    Instructs the object to produce pixels.

    +
    +

    The rectangle to copy. A null value specifies the entire bitmap.

    +

    The stride of the bitmap

    +

    A reference to the buffer.

    + +

    CopyPixels is one of the two main image processing routines (the other being Lock) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a JPEG stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface.

    The caller can restrict the operation to a rectangle of interest (ROI) using the prc parameter. The ROI sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a null ROI implies that the whole bitmap should be returned. +

    The caller controls the memory management and must provide an output buffer (pbBuffer) for the results of the copy along with the buffer's bounds (cbBufferSize). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method.

    If the caller needs to perform numerous copies of an expensive such as a JPEG, it is recommended to create an in-memory first.

    Codec Developer Remarks

    The callee must only write to the first (prc->Width*bitsperpixel+7)/8 bytes of each line of the output buffer (in this case, a line is a consecutive string of cbStride bytes).

    +
    + ee690179 + HRESULT IWICBitmapSource::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICBitmapSource::CopyPixels +
    + + +

    Instructs the object to produce pixels.

    +
    +

    The stride of the bitmap

    +

    A reference to the buffer.

    + +

    CopyPixels is one of the two main image processing routines (the other being Lock) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a JPEG stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface.

    The caller can restrict the operation to a rectangle of interest (ROI) using the prc parameter. The ROI sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a null ROI implies that the whole bitmap should be returned. +

    The caller controls the memory management and must provide an output buffer (pbBuffer) for the results of the copy along with the buffer's bounds (cbBufferSize). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method.

    If the caller needs to perform numerous copies of an expensive such as a JPEG, it is recommended to create an in-memory first.

    Codec Developer Remarks

    The callee must only write to the first (prc->Width*bitsperpixel+7)/8 bytes of each line of the output buffer (in this case, a line is a consecutive string of cbStride bytes).

    +
    + ee690179 + HRESULT IWICBitmapSource::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICBitmapSource::CopyPixels +
    + + +

    Instructs the object to produce pixels.

    +
    +

    The stride of the bitmap

    +

    A reference to the buffer.

    + Size of the buffer in bytes. + +

    CopyPixels is one of the two main image processing routines (the other being Lock) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a JPEG stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface.

    The caller can restrict the operation to a rectangle of interest (ROI) using the prc parameter. The ROI sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a null ROI implies that the whole bitmap should be returned. +

    The caller controls the memory management and must provide an output buffer (pbBuffer) for the results of the copy along with the buffer's bounds (cbBufferSize). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method.

    If the caller needs to perform numerous copies of an expensive such as a JPEG, it is recommended to create an in-memory first.

    Codec Developer Remarks

    The callee must only write to the first (prc->Width*bitsperpixel+7)/8 bytes of each line of the output buffer (in this case, a line is a consecutive string of cbStride bytes).

    +
    + ee690179 + HRESULT IWICBitmapSource::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICBitmapSource::CopyPixels +
    + + +

    Instructs the object to produce pixels.

    +
    + Type of a pixel. This parameter must exactly match a pixel like using for a 32bit RGBA color or for a 64bits for a RGBA 4 floats color. +

    The rectangle to copy. A null value specifies the entire bitmap.

    + The destination array. The size of the array must be sizeof(pixel) * rectangle.Width * rectangle.Height +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + output.Length must be equal to Width * Height + ee690179 + HRESULT IWICBitmapSource::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICBitmapSource::CopyPixels +

    CopyPixels is one of the two main image processing routines (the other being Lock) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a JPEG stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface.

    The caller can restrict the operation to a rectangle of interest (ROI) using the prc parameter. The ROI sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a null ROI implies that the whole bitmap should be returned. +

    The caller controls the memory management and must provide an output buffer (pbBuffer) for the results of the copy along with the buffer's bounds (cbBufferSize). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method.

    If the caller needs to perform numerous copies of an expensive such as a JPEG, it is recommended to create an in-memory first.

    Codec Developer Remarks

    The callee must only write to the first (prc->Width*bitsperpixel+7)/8 bytes of each line of the output buffer (in this case, a line is a consecutive string of cbStride bytes).

    +
    + + +

    Instructs the object to produce pixels.

    +
    + Type of a pixel. This parameter must exactly match a pixel like using for a 32bit RGBA color or for a 64bits for a RGBA 4 floats color. + The destination array. The size of the array must be sizeof(pixel) * Width * Height +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    CopyPixels is one of the two main image processing routines (the other being Lock) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a JPEG stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface.

    The caller can restrict the operation to a rectangle of interest (ROI) using the prc parameter. The ROI sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a null ROI implies that the whole bitmap should be returned. +

    The caller controls the memory management and must provide an output buffer (pbBuffer) for the results of the copy along with the buffer's bounds (cbBufferSize). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method.

    If the caller needs to perform numerous copies of an expensive such as a JPEG, it is recommended to create an in-memory first.

    Codec Developer Remarks

    The callee must only write to the first (prc->Width*bitsperpixel+7)/8 bytes of each line of the output buffer (in this case, a line is a consecutive string of cbStride bytes).

    +
    + ee690179 + HRESULT IWICBitmapSource::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICBitmapSource::CopyPixels +
    + + +

    Instructs the object to produce pixels.

    +
    + The destination array. The size of the array must be sizeof(pixel) * Width * Height + The stride (number of bytes per row). +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + output.Length must be equal to Width * Height + ee690179 + HRESULT IWICBitmapSource::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICBitmapSource::CopyPixels +

    CopyPixels is one of the two main image processing routines (the other being Lock) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a JPEG stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface.

    The caller can restrict the operation to a rectangle of interest (ROI) using the prc parameter. The ROI sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a null ROI implies that the whole bitmap should be returned. +

    The caller controls the memory management and must provide an output buffer (pbBuffer) for the results of the copy along with the buffer's bounds (cbBufferSize). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method.

    If the caller needs to perform numerous copies of an expensive such as a JPEG, it is recommended to create an in-memory first.

    Codec Developer Remarks

    The callee must only write to the first (prc->Width*bitsperpixel+7)/8 bytes of each line of the output buffer (in this case, a line is a consecutive string of cbStride bytes).

    +
    + + +

    Instructs the object to produce pixels.

    +
    + The destination array. The size of the array must be sizeof(pixel) * Width * Height + The stride (number of bytes per row). +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + output.Length must be equal to Width * Height + ee690179 + HRESULT IWICBitmapSource::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICBitmapSource::CopyPixels +

    CopyPixels is one of the two main image processing routines (the other being Lock) triggering the actual processing. It instructs the object to produce pixels according to its algorithm - this may involve decoding a portion of a JPEG stored on disk, copying a block of memory, or even analytically computing a complex gradient. The algorithm is completely dependent on the object implementing the interface.

    The caller can restrict the operation to a rectangle of interest (ROI) using the prc parameter. The ROI sub-rectangle must be fully contained in the bounds of the bitmap. Specifying a null ROI implies that the whole bitmap should be returned. +

    The caller controls the memory management and must provide an output buffer (pbBuffer) for the results of the copy along with the buffer's bounds (cbBufferSize). The cbStride parameter defines the count of bytes between two vertically adjacent pixels in the output buffer. The caller must ensure that there is sufficient buffer to complete the call based on the width, height and pixel format of the bitmap and the sub-rectangle provided to the copy method.

    If the caller needs to perform numerous copies of an expensive such as a JPEG, it is recommended to create an in-memory first.

    Codec Developer Remarks

    The callee must only write to the first (prc->Width*bitsperpixel+7)/8 bytes of each line of the output buffer (in this case, a line is a consecutive string of cbStride bytes).

    +
    + + + No documentation. + + + ee719897 + IWICBitmapSourceTransform + IWICBitmapSourceTransform + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Copies pixel data using the supplied input parameters.

    +
    +

    The rectangle of pixels to copy.

    +

    The width to scale the source bitmap. This parameter must equal the value obtainable through .

    +

    The height to scale the source bitmap. This parameter must equal the value obtainable through .

    +

    The of desired pixel format in which the pixels should be returned.

    This must be a format obtained through an GetClosestPixelFormat call.

    +

    The desired rotation or flip to perform prior to the pixel copy.

    The transform must be an operation supported by an DoesSupportTransform call.

    If a dstTransform is specified, nStride is the transformed stride and is based on the pguidDstFormat pixel format, not the original source's pixel format.

    +

    The stride of the destination buffer.

    +

    The size of the destination buffer.

    +

    The output buffer.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690173 + HRESULT IWICBitmapSourceTransform::CopyPixels([In] const void* prc,[In] unsigned int uiWidth,[In] unsigned int uiHeight,[In, Optional] GUID* pguidDstFormat,[In] WICBitmapTransformOptions dstTransform,[In] unsigned int nStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICBitmapSourceTransform::CopyPixels +
    + + +

    Returns the closest dimensions the implementation can natively scale to given the desired dimensions.

    +
    +

    The desired width. A reference that receives the closest supported width.

    +

    The desired height. A reference that receives the closest supported height.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The Windows provided codecs provide the following support for native scaling: +

    • BMP, ICO, GIF, TIFF: No implementation of .
    • PNG: No scaling support.
    • JPEG: Native down-scaling by a factor of 8, 4, or 2.
    • JPEG-XR: Native scaling of the original image by powers of 2. +
    +
    + + ee690176 + HRESULT IWICBitmapSourceTransform::GetClosestSize([InOut] unsigned int* puiWidth,[InOut] unsigned int* puiHeight) + IWICBitmapSourceTransform::GetClosestSize +
    + + +

    Retrieves the closest pixel format to which the implementation of can natively copy pixels, given a desired format.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The Windows provided codecs provide the following support:

    • BMP, ICO, GIF, TIFF: No implementation of .
    • JPEG, PNG, JPEG-XR: Trivial support (always returns the same value as IWICBitmapFrameDecode::GetPixelFormat).
    +
    + + ee690175 + HRESULT IWICBitmapSourceTransform::GetClosestPixelFormat([InOut] GUID* pguidDstFormat) + IWICBitmapSourceTransform::GetClosestPixelFormat +
    + + +

    Determines whether a specific transform option is supported natively by the implementation of the interface.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The Windows provided codecs provide the following level of support:

    • BMP, ICO, GIF, TIFF: No implementation of .
    • JPEG, PNG: Trivial support ( only).
    • JPEG-XR: Support for all transformation/rotations. +
    +
    + + ee690174 + HRESULT IWICBitmapSourceTransform::DoesSupportTransform([In] WICBitmapTransformOptions dstTransform,[Out] BOOL* pfIsSupported) + IWICBitmapSourceTransform::DoesSupportTransform +
    + + + Copies pixel data using the supplied input parameters. + + The width. + The height. + The stride. + The output. + + HRESULT IWICBitmapSourceTransform::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int uiWidth,[In] unsigned int uiHeight,[In, Optional] GUID* pguidDstFormat,[In] WICBitmapTransformOptions dstTransform,[In] unsigned int nStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + + + + Copies pixel data using the supplied input parameters. + + The width. + The height. + The DST transform. + The stride. + The output. + + HRESULT IWICBitmapSourceTransform::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int uiWidth,[In] unsigned int uiHeight,[In, Optional] GUID* pguidDstFormat,[In] WICBitmapTransformOptions dstTransform,[In] unsigned int nStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + + + + Copies pixel data using the supplied input parameters. + + The width. + The height. + The GUID DST format. + The DST transform. + The stride. + The output. + + HRESULT IWICBitmapSourceTransform::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int uiWidth,[In] unsigned int uiHeight,[In, Optional] GUID* pguidDstFormat,[In] WICBitmapTransformOptions dstTransform,[In] unsigned int nStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + + + + Copies pixel data using the supplied input parameters. + + The rectangle. + The width. + The height. + The GUID DST format. + The DST transform. + The stride. + The output. + + HRESULT IWICBitmapSourceTransform::CopyPixels([In, Optional] const WICRect* prc,[In] unsigned int uiWidth,[In] unsigned int uiHeight,[In, Optional] GUID* pguidDstFormat,[In] WICBitmapTransformOptions dstTransform,[In] unsigned int nStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + + + + Returns the closest dimensions the implementation can natively scale to given the desired dimensions. + + The size. + + HRESULT IWICBitmapSourceTransform::GetClosestSize([InOut] unsigned int* puiWidth,[InOut] unsigned int* puiHeight) + + + +

    Exposes methods for color management.

    +
    + +

    A Color Context is an abstraction for a color profile. The profile can either be loaded from a file (like "sRGB Color Space Profile.icm"), read from a memory buffer, or can be defined by an EXIF color space. The system color profile directory can be obtained by calling GetColorDirectory.

    Once a color context has been initialized, it cannot be re-initialized.

    +
    + + ee690193 + IWICColorContext + IWICColorContext +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the color context type.

    +
    + + ee690196 + GetType + GetType + HRESULT IWICColorContext::GetType([Out] WICColorContextType* pType) +
    + + +

    Retrieves the Exchangeable Image File (EXIF) color space color context.

    +
    + +

    This method should only be used when indicates . +

    +
    + + ee690194 + GetExifColorSpace + GetExifColorSpace + HRESULT IWICColorContext::GetExifColorSpace([Out] unsigned int* pValue) +
    + + +

    Initializes the color context from the given file.

    +
    +

    The name of the file.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Once a color context has been initialized, it can't be re-initialized. +

    +
    + + ee690198 + HRESULT IWICColorContext::InitializeFromFilename([In] const wchar_t* wzFilename) + IWICColorContext::InitializeFromFilename +
    + + +

    Initializes the color context from a memory block.

    +
    +

    The buffer used to initialize the .

    +

    The size of the pbBuffer buffer.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Once a color context has been initialized, it can't be re-initialized. +

    +
    + + ee690199 + HRESULT IWICColorContext::InitializeFromMemory([In] const void* pbBuffer,[In] unsigned int cbBufferSize) + IWICColorContext::InitializeFromMemory +
    + + +

    Initializes the color context using an Exchangeable Image File (EXIF) color space.

    +
    +

    The value of the EXIF color space.

    ValueMeaning
    1

    A sRGB color space.

    2

    An Adobe RGB color space.

    ?

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Once a color context has been initialized, it can't be re-initialized. +

    +
    + + ee690197 + HRESULT IWICColorContext::InitializeFromExifColorSpace([In] unsigned int value) + IWICColorContext::InitializeFromExifColorSpace +
    + + +

    Retrieves the color context type.

    +
    +

    A reference that receives the of the color context.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690196 + HRESULT IWICColorContext::GetType([Out] WICColorContextType* pType) + IWICColorContext::GetType +
    + + +

    Retrieves the color context profile.

    +
    +

    The size of the pbBuffer buffer.

    +

    A reference that receives the color context profile.

    +

    A reference that receives the actual buffer size needed to retrieve the entire color context profile.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Only use this method if the context type is . +

    Calling this method with pbBuffer set to null will cause it to return the required buffer size in pcbActual. +

    +
    + + ee690195 + HRESULT IWICColorContext::GetProfileBytes([In] unsigned int cbBuffer,[In] void* pbBuffer,[Out] unsigned int* pcbActual) + IWICColorContext::GetProfileBytes +
    + + +

    Retrieves the Exchangeable Image File (EXIF) color space color context.

    +
    +

    A reference that receives the EXIF color space color context.

    ValueMeaning
    1

    A sRGB color space.

    2

    An Adobe RGB color space.

    3 through 65534

    Unused.

    ?

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method should only be used when indicates . +

    +
    + + ee690194 + HRESULT IWICColorContext::GetExifColorSpace([Out] unsigned int* pValue) + IWICColorContext::GetExifColorSpace +
    + + + Initializes a new instance of the class. + + The factory. + HRESULT IWICImagingFactory::CreateColorContext([Out, Fast] IWICColorContext** ppIWICColorContext) + + + + Initializes from memory. + + The data pointer. + + HRESULT IWICColorContext::InitializeFromMemory([In] const void* pbBuffer,[In] unsigned int cbBufferSize) + + + + Gets the color context profile. + + + + +

    Exposes methods that transforms an from one color context to another.

    +
    + +

    A is an imaging pipeline component that knows how to pull pixels obtained from a given through a color transform. The color transform is defined by mapping colors from the source color context to the destination color context in a given output pixel format.

    Once initialized, a color transform cannot be reinitialized. Because of this, a color transform cannot be used with multiple sources or varying parameters.

    +
    + + ee690201 + IWICColorTransform + IWICColorTransform +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Initializes an with a and transforms it from one to another.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The currently supported formats for the pIContextSource and pixelFmtDest parameters are: +

    • (Windows?8 and later)
    • (Windows?8 and later)
    • (Windows?8 and later)
    • (Windows?8 and later)
    • (Windows?8 and later)

    In order to get correct behavior from a color transform, the input and output pixel formats must be compatible with the source and destination color profiles. For example, an sRGB destination color profile will produce incorrect results when used with a CMYK destination pixel format.

    +
    + + ee690202 + HRESULT IWICColorTransform::Initialize([In, Optional] IWICBitmapSource* pIBitmapSource,[In, Optional] IWICColorContext* pIContextSource,[In, Optional] IWICColorContext* pIContextDest,[In] const GUID& pixelFmtDest) + IWICColorTransform::Initialize +
    + + + Initializes a new instance of the class. + + The factory. + HRESULT IWICImagingFactory::CreateColorTransformer([Out, Fast] IWICColorTransform** ppIWICColorTransform) + + + +

    Exposes methods that provide component information.

    +
    + + ee690213 + IWICComponentInfo + IWICComponentInfo +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the component's .

    +
    + + ee690218 + GetComponentType + GetComponentType + HRESULT IWICComponentInfo::GetComponentType([Out] WICComponentType* pType) +
    + + +

    Proxy function for the GetCLSID method.

    +
    + + ee690217 + GetCLSID + GetCLSID + HRESULT IWICComponentInfo::GetCLSID([Out] GUID* pclsid) +
    + + +

    Retrieves the signing status of the component.

    +
    + +

    Signing is unused by WIC. Therefore, all components .

    This function can be used to determine whether a component has no binary component or has been added to the disabled components list in the registry.

    +
    + + ee690221 + GetSigningStatus + GetSigningStatus + HRESULT IWICComponentInfo::GetSigningStatus([Out] unsigned int* pStatus) +
    + + +

    Retrieves the vendor .

    +
    + + ee690225 + GetVendorGUID + GetVendorGUID + HRESULT IWICComponentInfo::GetVendorGUID([Out] GUID* pguidVendor) +
    + + +

    Retrieves the component's .

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690218 + HRESULT IWICComponentInfo::GetComponentType([Out] WICComponentType* pType) + IWICComponentInfo::GetComponentType +
    + + +

    Proxy function for the GetCLSID method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690217 + HRESULT IWICComponentInfo::GetCLSID([Out] GUID* pclsid) + IWICComponentInfo::GetCLSID +
    + + +

    Retrieves the signing status of the component.

    +
    +

    A reference that receives the status of the component.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Signing is unused by WIC. Therefore, all components .

    This function can be used to determine whether a component has no binary component or has been added to the disabled components list in the registry.

    +
    + + ee690221 + HRESULT IWICComponentInfo::GetSigningStatus([Out] unsigned int* pStatus) + IWICComponentInfo::GetSigningStatus +
    + + +

    Retrieves the name of component's author.

    +
    +

    The size of the wzAuthor buffer.

    +

    A reference that receives the name of the component's author. The locale of the string depends on the value that the codec wrote to the registry at install time. For built-in components, these strings are always in English.

    +

    A reference that receives the actual length of the component's authors name. The author name is optional; if an author name is not specified by the component, the length returned is 0.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If cchAuthor is 0 and wzAuthor is null, the required buffer size is returned in pccchActual.

    +
    + + ee690214 + HRESULT IWICComponentInfo::GetAuthor([In] unsigned int cchAuthor,[In] void* wzAuthor,[Out] unsigned int* pcchActual) + IWICComponentInfo::GetAuthor +
    + + +

    Retrieves the vendor .

    +
    +

    A reference that receives the component's vendor .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690225 + HRESULT IWICComponentInfo::GetVendorGUID([Out] GUID* pguidVendor) + IWICComponentInfo::GetVendorGUID +
    + + +

    Proxy function for the GetVersion method.

    +
    + No documentation. + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690227 + HRESULT IWICComponentInfo::GetVersion([In] unsigned int cchVersion,[In] void* wzVersion,[Out] unsigned int* pcchActual) + IWICComponentInfo::GetVersion +
    + + +

    Retrieves the component's specification version.

    +
    +

    The size of the wzSpecVersion buffer.

    +

    When this method returns, contain a culture invarient string of the component's specification version. The version form is NN.NN.NN.NN.

    +

    A reference that receives the actual length of the component's specification version. The specification version is optional; if a value is not specified by the component, the length returned is 0.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    All built-in components return "1.0.0.0", except for pixel formats, which do not have a spec version.

    If cchAuthor is 0 and wzAuthor is null, the required buffer size is returned in pccchActual.

    +
    + + ee690223 + HRESULT IWICComponentInfo::GetSpecVersion([In] unsigned int cchSpecVersion,[In] void* wzSpecVersion,[Out] unsigned int* pcchActual) + IWICComponentInfo::GetSpecVersion +
    + + +

    Retrieves the component's friendly name, which is a human-readable display name for the component.

    +
    +

    The size of the wzFriendlyName buffer.

    +

    A reference that receives the friendly name of the component. The locale of the string depends on the value that the codec wrote to the registry at install time. For built-in components, these strings are always in English.

    +

    A reference that receives the actual length of the component's friendly name.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If cchFriendlyName is 0 and wzFriendlyName is null, the required buffer size is returned in pccchActual.

    +
    + + ee690219 + HRESULT IWICComponentInfo::GetFriendlyName([In] unsigned int cchFriendlyName,[In] void* wzFriendlyName,[Out] unsigned int* pcchActual) + IWICComponentInfo::GetFriendlyName +
    + + + Initializes a new instance of the class. + + The factory. + The CLSID component. + + + + Gets the author. + + HRESULT IWICComponentInfo::GetAuthor([In] unsigned int cchAuthor,[InOut, Buffer, Optional] wchar_t* wzAuthor,[Out] unsigned int* pcchActual) + + + + Gets the version. + + HRESULT IWICComponentInfo::GetVersion([In] unsigned int cchVersion,[InOut, Buffer, Optional] wchar_t* wzVersion,[Out] unsigned int* pcchActual) + + + + Gets the spec version. + + HRESULT IWICComponentInfo::GetSpecVersion([In] unsigned int cchSpecVersion,[InOut, Buffer, Optional] wchar_t* wzSpecVersion,[Out] unsigned int* pcchActual) + + + + Gets the friendly name. + + + The name of the friendly. + + HRESULT IWICComponentInfo::GetFriendlyName([In] unsigned int cchFriendlyName,[InOut, Buffer, Optional] wchar_t* wzFriendlyName,[Out] unsigned int* pcchActual) + + + +

    Provides information and functionality specific to the DDS image format.

    +
    + +

    This interface is implemented by the WIC DDS codec. To obtain this interface, create an using the DDS codec and QueryInterface for .

    +
    + + dn302079 + IWICDdsDecoder + IWICDdsDecoder +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets DDS-specific data.

    +
    + + dn302081 + GetParameters + GetParameters + HRESULT IWICDdsDecoder::GetParameters([Out] WICDdsParameters* pParameters) +
    + + +

    Gets DDS-specific data.

    +
    +

    A reference to the structure where the information is returned.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn302081 + HRESULT IWICDdsDecoder::GetParameters([Out] WICDdsParameters* pParameters) + IWICDdsDecoder::GetParameters +
    + + +

    Retrieves the specified frame of the DDS image.

    +
    +

    The requested index within the texture array.

    +

    The requested mip level.

    +

    The requested slice within the 3D texture.

    +

    A reference to a object.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    A DDS file can contain multiple images that are organized into a three level hierarchy. First, DDS file may contain multiple textures in a texture array. Second, each texture can have multiple mip levels. Finally, the texture may be a 3D (volume) texture and have multiple slices, each of which is a 2D texture. See the DDS documentation for more information.

    WIC maps this three level hierarchy into a linear array of , accessible via . However, determining which frame corresponds to a triad of arrayIndex, mipLevel, and sliceIndex value is not trivial because each mip level of a 3D texture has a different depth (number of slices). This method provides additional convenience over for DDS images by calculating the correct frame given the three indices. +

    +
    + + dn302080 + HRESULT IWICDdsDecoder::GetFrame([In] unsigned int arrayIndex,[In] unsigned int mipLevel,[In] unsigned int sliceIndex,[Out] IWICBitmapFrameDecode** ppIBitmapFrame) + IWICDdsDecoder::GetFrame +
    + + +

    Enables writing DDS format specific information to an encoder.

    +
    + +

    This interface is implemented by the WIC DDS codec. To obtain this interface, create an using the DDS codec and QueryInterface for .

    +
    + + dn302082 + IWICDdsEncoder + IWICDdsEncoder +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets DDS-specific data.

    +
    + +

    An application can call GetParameters to obtain the default DDS parameters, modify some or all of them, and then call SetParameters.

    +
    + + dn302084 + GetParameters / SetParameters + GetParameters + HRESULT IWICDdsEncoder::GetParameters([Out] WICDdsParameters* pParameters) +
    + + +

    Sets DDS-specific data.

    +
    +

    Points to the structure where the information is described.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    You cannot call this method after you have started to write frame data, for example by calling .

    Setting DDS parameters using this method provides the DDS encoder with information about the expected number of frames and the dimensions and other parameters of each frame. The DDS encoder will fail if you do not set frame data that matches these expectations. For example, if you set WICDdsParameters::Width and Height to 32, and MipLevels to 6, the DDS encoder will expect 6 frames with the following dimensions:

    • 32x32 pixels.
    • 16x16 pixels.
    • 8x8 pixels.
    • 4x4 pixels.
    • 2x2 pixels.
    • 1x1 pixels.
    +
    + + dn302085 + HRESULT IWICDdsEncoder::SetParameters([In] WICDdsParameters* pParameters) + IWICDdsEncoder::SetParameters +
    + + +

    Gets DDS-specific data.

    +
    +

    Points to the structure where the information is returned.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    An application can call GetParameters to obtain the default DDS parameters, modify some or all of them, and then call SetParameters.

    +
    + + dn302084 + HRESULT IWICDdsEncoder::GetParameters([Out] WICDdsParameters* pParameters) + IWICDdsEncoder::GetParameters +
    + + +

    Creates a new frame to encode.

    +
    +

    A reference to the newly created frame object.

    +

    Points to the location where the array index is returned.

    +

    Points to the location where the mip level index is returned.

    +

    Points to the location where the slice index is returned.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This is equivalent to , but returns additional information about the array index, mip level and slice of the newly created frame. In contrast to , there is no * parameter because individual DDS frames do not have separate properties.

    +
    + + dn302083 + HRESULT IWICDdsEncoder::CreateNewFrame([Out] IWICBitmapFrameEncode** ppIFrameEncode,[Out] unsigned int* pArrayIndex,[Out] unsigned int* pMipLevel,[Out] unsigned int* pSliceIndex) + IWICDdsEncoder::CreateNewFrame +
    + + +

    Provides access to a single frame of DDS image data in its native form, as well as information about the image data.

    +
    + +

    This interface is implemented by the WIC DDS codec. To obtain this interface, create an using the DDS codec and QueryInterface for IID_IWICDdsFrameDecode.

    +
    + + dn302086 + IWICDdsFrameDecode + IWICDdsFrameDecode +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets information about the format in which the DDS image is stored.

    +
    + +

    This information can be used for allocating memory or constructing Direct3D or Direct2D resources, for example by using or .

    +
    + + dn302088 + GetFormatInfo + GetFormatInfo + HRESULT IWICDdsFrameDecode::GetFormatInfo([Out] WICDdsFormatInfo* pFormatInfo) +
    + + +

    Gets the width and height, in blocks, of the DDS image.

    +
    +

    The width of the DDS image in blocks.

    +

    The height of the DDS image in blocks.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    For block compressed textures, the returned width and height values do not completely define the texture size because the image is padded to fit the closest whole block size. For example, three BC1 textures with pixel dimensions of 1x1, 2x2 and 4x4 will all report pWidthInBlocks = 1 and pHeightInBlocks = 1.

    If the texture does not use a block-compressed , this method returns the texture size in pixels; for these formats the block size returned by IWICDdsFrameDecoder::GetFormatInfo is 1x1. +

    +
    + + dn302089 + HRESULT IWICDdsFrameDecode::GetSizeInBlocks([Out] unsigned int* pWidthInBlocks,[Out] unsigned int* pHeightInBlocks) + IWICDdsFrameDecode::GetSizeInBlocks +
    + + +

    Gets information about the format in which the DDS image is stored.

    +
    +

    Information about the DDS format.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This information can be used for allocating memory or constructing Direct3D or Direct2D resources, for example by using or .

    +
    + + dn302088 + HRESULT IWICDdsFrameDecode::GetFormatInfo([Out] WICDdsFormatInfo* pFormatInfo) + IWICDdsFrameDecode::GetFormatInfo +
    + + +

    Requests pixel data as it is natively stored within the DDS file.

    +
    +

    The rectangle to copy from the source. A null value specifies the entire texture.

    If the texture uses a block-compressed , all values of the rectangle are expressed in number of blocks, not pixels.

    +

    The stride, in bytes, of the destination buffer. This represents the number of bytes from the buffer reference to the next row of data. If the texture uses a block-compressed , a "row of data" is defined as a row of blocks which contains multiple pixel scanlines.

    +

    The size, in bytes, of the destination buffer.

    +

    A reference to the destination buffer.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If the texture does not use a block-compressed , this method behaves similarly to . However, it does not perform any pixel format conversion, and instead produces the raw data from the DDS file.

    If the texture uses a block-compressed , this method copies the block data directly into the provided buffer. In this case, the prcBoundsInBlocks parameter is defined in blocks, not pixels. To determine if this is the case, call GetFormatInfo and read the DxgiFormat member of the returned structure. +

    +
    + + dn302087 + HRESULT IWICDdsFrameDecode::CopyBlocks([In, Optional] const WICRect* prcBoundsInBlocks,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICDdsFrameDecode::CopyBlocks +
    + + + +

    [This documentation is preliminary and is subject to change.]

    Requests pixel data as it is natively stored within the DDS file.

    +
    +

    The rectangle to copy from the source. A null value specifies the entire texture.

    If the texture uses a block-compressed , all values of the rectangle are expressed in number of blocks, not pixels.

    +

    The stride, in bytes, of the destination buffer. This represents the number of bytes from the buffer reference to the next row of data. If the texture uses a block-compressed , a "row of data" is defined as a row of blocks which contains multiple pixel scanlines.

    +

    A reference to the destination buffer.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If the texture does not use a block-compressed , this method behaves similarly to . However, it does not perform any pixel format conversion, and instead produces the raw data from the DDS file.

    If the texture uses a block-compressed , this method copies the block data directly into the provided buffer. In this case, the prcBoundsInBlocks parameter is defined in blocks, not pixels. To determine if this is the case, call GetFormatInfo and read the DxgiFormat member of the returned structure. +

    +
    + + dn302087 + HRESULT IWICDdsFrameDecode::CopyBlocks([In, Optional] const WICRect* prcBoundsInBlocks,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer) + IWICDdsFrameDecode::CopyBlocks +
    + + + No documentation. + + + ee719898 + IWICDevelopRaw + IWICDevelopRaw + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the current set of parameters.

    +
    + + ee690233 + GetCurrentParameterSet + GetCurrentParameterSet + HRESULT IWICDevelopRaw::GetCurrentParameterSet([Out] IPropertyBag2** ppCurrentParameterSet) +
    + + +

    Gets or sets the exposure compensation stop value of the raw image.

    +
    + + ee690234 + GetExposureCompensation / SetExposureCompensation + GetExposureCompensation + HRESULT IWICDevelopRaw::GetExposureCompensation([Out] double* pEV) +
    + + +

    Gets or sets the named white point of the raw image.

    +
    + +

    If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this API, the codec implementer should still mark this capability as supported.

    If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.

    If the raw file containes named white points not supported by this API, the codec implementer should support the named white points in .

    +
    + + ee690237 + GetNamedWhitePoint / SetNamedWhitePoint + GetNamedWhitePoint + HRESULT IWICDevelopRaw::GetNamedWhitePoint([Out] WICNamedWhitePoint* pWhitePoint) +
    + + +

    Gets or sets the white point Kelvin temperature of the raw image.

    +
    + + ee690245 + GetWhitePointKelvin / SetWhitePointKelvin + GetWhitePointKelvin + HRESULT IWICDevelopRaw::GetWhitePointKelvin([Out] unsigned int* pWhitePointKelvin) +
    + + +

    Gets or sets the contrast value of the raw image.

    +
    + + ee690232 + GetContrast / SetContrast + GetContrast + HRESULT IWICDevelopRaw::GetContrast([Out] double* pContrast) +
    + + +

    Gets or sets the current gamma setting of the raw image.

    +
    + + ee690235 + GetGamma / SetGamma + GetGamma + HRESULT IWICDevelopRaw::GetGamma([Out] double* pGamma) +
    + + +

    Gets or sets the sharpness value of the raw image.

    +
    + + ee690242 + GetSharpness / SetSharpness + GetSharpness + HRESULT IWICDevelopRaw::GetSharpness([Out] double* pSharpness) +
    + + +

    Gets or sets the saturation value of the raw image.

    +
    + + ee690241 + GetSaturation / SetSaturation + GetSaturation + HRESULT IWICDevelopRaw::GetSaturation([Out] double* pSaturation) +
    + + +

    Gets or sets the tint value of the raw image.

    +
    + + ee690243 + GetTint / SetTint + GetTint + HRESULT IWICDevelopRaw::GetTint([Out] double* pTint) +
    + + +

    Gets or sets the noise reduction value of the raw image.

    +
    + + ee690238 + GetNoiseReduction / SetNoiseReduction + GetNoiseReduction + HRESULT IWICDevelopRaw::GetNoiseReduction([Out] double* pNoiseReduction) +
    + + +

    Sets the destination color context.

    +
    + + ee690250 + SetDestinationColorContext + SetDestinationColorContext + HRESULT IWICDevelopRaw::SetDestinationColorContext([In, Optional] IWICColorContext* pColorContext) +
    + + +

    Gets or sets the current rotation angle.

    +
    + + ee690240 + GetRotation / SetRotation + GetRotation + HRESULT IWICDevelopRaw::GetRotation([Out] double* pRotation) +
    + + +

    Gets or sets the current .

    +
    + + ee690239 + GetRenderMode / SetRenderMode + GetRenderMode + HRESULT IWICDevelopRaw::GetRenderMode([Out] WICRawRenderMode* pRenderMode) +
    + + +

    Sets the notification callback method.

    +
    + + ee690255 + SetNotificationCallback + SetNotificationCallback + HRESULT IWICDevelopRaw::SetNotificationCallback([In, Optional] IWICDevelopRawNotificationCallback* pCallback) +
    + + +

    Retrieves information about which capabilities are supported for a raw image.

    +
    +

    A reference that receives that provides the capabilities supported by the raw image.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    It is recommended that a codec report that a capability is supported even if the results at the outer range limits are not of perfect quality.

    +
    + + ee690248 + HRESULT IWICDevelopRaw::QueryRawCapabilitiesInfo([In] WICRawCapabilitiesInfo* pInfo) + IWICDevelopRaw::QueryRawCapabilitiesInfo +
    + + +

    Sets the desired option.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690247 + HRESULT IWICDevelopRaw::LoadParameterSet([In] WICRawParameterSet ParameterSet) + IWICDevelopRaw::LoadParameterSet +
    + + +

    Gets the current set of parameters.

    +
    +

    A reference that receives a reference to the current set of parameters.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690233 + HRESULT IWICDevelopRaw::GetCurrentParameterSet([Out] IPropertyBag2** ppCurrentParameterSet) + IWICDevelopRaw::GetCurrentParameterSet +
    + + +

    Sets the exposure compensation stop value.

    +
    +

    The exposure compensation value. The value range for exposure compensation is -5.0 through +5.0, which equates to 10 full stops.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    It is recommended that a codec report that this method is supported even if the results at the outer range limits are not of perfect quality.

    +
    + + ee690251 + HRESULT IWICDevelopRaw::SetExposureCompensation([In] double ev) + IWICDevelopRaw::SetExposureCompensation +
    + + +

    Gets the exposure compensation stop value of the raw image.

    +
    +

    A reference that receives the exposure compensation stop value. The default is the "as-shot" setting.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690234 + HRESULT IWICDevelopRaw::GetExposureCompensation([Out] double* pEV) + IWICDevelopRaw::GetExposureCompensation +
    + + +

    Sets the white point RGB values.

    +
    +

    The red white point value.

    +

    The green white point value.

    +

    The blue white point value.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Due to other white point setting methods (e.g. SetWhitePointKelvin), care must be taken by codec implementers to ensure proper interoperability. For instance, if the caller sets via a named white point then the codec implementer may whis to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wishes to deny a given action because of previous calls, should be returned.

    +
    + + ee690263 + HRESULT IWICDevelopRaw::SetWhitePointRGB([In] unsigned int Red,[In] unsigned int Green,[In] unsigned int Blue) + IWICDevelopRaw::SetWhitePointRGB +
    + + +

    Gets the white point RGB values.

    +
    +

    A reference that receives the red white point value.

    +

    A reference that receives the green white point value.

    +

    A reference that receives the blue white point value.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690246 + HRESULT IWICDevelopRaw::GetWhitePointRGB([Out] unsigned int* pRed,[Out] unsigned int* pGreen,[Out] unsigned int* pBlue) + IWICDevelopRaw::GetWhitePointRGB +
    + + +

    Sets the named white point of the raw file.

    +
    +

    A bitwise combination of the enumeration values.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this API, the codec implementer should still mark this capability as supported.

    If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.

    If the raw file containes named white points not supported by this API, the codec implementer should support the named white points in the API.

    Due to other white point setting methods (e.g. SetWhitePointKelvin), care must be taken by codec implementers to ensure proper interoperability. For instance, if the caller sets via a named white point then the codec implementer may whis to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wishes to deny a given action because of previous calls, should be returned.

    +
    + + ee690253 + HRESULT IWICDevelopRaw::SetNamedWhitePoint([In] WICNamedWhitePoint WhitePoint) + IWICDevelopRaw::SetNamedWhitePoint +
    + + +

    Gets the named white point of the raw image.

    +
    +

    A reference that receives the bitwise combination of the enumeration values.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If the named white points are not supported by the raw image or the raw file contains named white points that are not supported by this API, the codec implementer should still mark this capability as supported.

    If the named white points are not supported by the raw image, a best effort should be made to adjust the image to the named white point even when it isn't a pre-defined white point of the raw file.

    If the raw file containes named white points not supported by this API, the codec implementer should support the named white points in .

    +
    + + ee690237 + HRESULT IWICDevelopRaw::GetNamedWhitePoint([Out] WICNamedWhitePoint* pWhitePoint) + IWICDevelopRaw::GetNamedWhitePoint +
    + + +

    Sets the white point Kelvin value.

    +
    +

    The white point Kelvin value. Acceptable Kelvin values are 1,500 through 30,000.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Codec implementers should faithfully adjust the color temperature within the range supported natively by the raw image. For values outside the native support range, the codec implementer should provide a best effort representation of the image at that color temperature.

    Codec implementers should return if the value is out of defined acceptable range.

    Codec implementers must ensure proper interoperability with other white point setting methods such as SetWhitePointRGB. For example, if the caller sets the white point via SetNamedWhitePoint then the codec implementer may want to disable reading back the correspoinding Kelvin temperature. In specific cases where the codec implementer wants to deny a given action because of previous calls, should be returned.

    +
    + + ee690262 + HRESULT IWICDevelopRaw::SetWhitePointKelvin([In] unsigned int WhitePointKelvin) + IWICDevelopRaw::SetWhitePointKelvin +
    + + +

    Gets the white point Kelvin temperature of the raw image.

    +
    +

    A reference that receives the white point Kelvin temperature of the raw image. The default is the "as-shot" setting value.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690245 + HRESULT IWICDevelopRaw::GetWhitePointKelvin([Out] unsigned int* pWhitePointKelvin) + IWICDevelopRaw::GetWhitePointKelvin +
    + + +

    Gets the information about the current Kelvin range of the raw image.

    +
    +

    A reference that receives the minimum Kelvin temperature.

    +

    A reference that receives the maximum Kelvin temperature.

    +

    A reference that receives the Kelvin step value.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690236 + HRESULT IWICDevelopRaw::GetKelvinRangeInfo([Out] unsigned int* pMinKelvinTemp,[Out] unsigned int* pMaxKelvinTemp,[Out] unsigned int* pKelvinTempStepValue) + IWICDevelopRaw::GetKelvinRangeInfo +
    + + +

    Sets the contrast value of the raw image.

    +
    +

    The contrast value of the raw image. The default value is the "as-shot" setting. The value range for contrast is 0.0 through 1.0. The 0.0 lower limit represents no contrast applied to the image, while the 1.0 upper limit represents the highest amount of contrast that can be applied.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.

    +
    + + ee690249 + HRESULT IWICDevelopRaw::SetContrast([In] double Contrast) + IWICDevelopRaw::SetContrast +
    + + +

    Gets the contrast value of the raw image.

    +
    +

    A reference that receives the contrast value of the raw image. The default value is the "as-shot" setting. The value range for contrast is 0.0 through 1.0. The 0.0 lower limit represents no contrast applied to the image, while the 1.0 upper limit represents the highest amount of contrast that can be applied.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690232 + HRESULT IWICDevelopRaw::GetContrast([Out] double* pContrast) + IWICDevelopRaw::GetContrast +
    + + +

    Sets the desired gamma value.

    +
    +

    The desired gamma value.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690252 + HRESULT IWICDevelopRaw::SetGamma([In] double Gamma) + IWICDevelopRaw::SetGamma +
    + + +

    Gets the current gamma setting of the raw image.

    +
    +

    A reference that receives the current gamma setting.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690235 + HRESULT IWICDevelopRaw::GetGamma([Out] double* pGamma) + IWICDevelopRaw::GetGamma +
    + + +

    Sets the sharpness value of the raw image.

    +
    +

    The sharpness value of the raw image. The default value is the "as-shot" setting. The value range for sharpness is 0.0 through 1.0. The 0.0 lower limit represents no sharpening applied to the image, while the 1.0 upper limit represents the highest amount of sharpness that can be applied.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.

    +
    + + ee690259 + HRESULT IWICDevelopRaw::SetSharpness([In] double Sharpness) + IWICDevelopRaw::SetSharpness +
    + + +

    Gets the sharpness value of the raw image.

    +
    +

    A reference that receives the sharpness value of the raw image. The default value is the "as-shot" setting. The value range for sharpness is 0.0 through 1.0. The 0.0 lower limit represents no sharpening applied to the image, while the 1.0 upper limit represents the highest amount of sharpness that can be applied.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690242 + HRESULT IWICDevelopRaw::GetSharpness([Out] double* pSharpness) + IWICDevelopRaw::GetSharpness +
    + + +

    Sets the saturation value of the raw image.

    +
    +

    The saturation value of the raw image. The value range for saturation is 0.0 through 1.0. A value of 0.0 represents an image with a fully de-saturated image, while a value of 1.0 represents the highest amount of saturation that can be applied.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.

    +
    + + ee690258 + HRESULT IWICDevelopRaw::SetSaturation([In] double Saturation) + IWICDevelopRaw::SetSaturation +
    + + +

    Gets the saturation value of the raw image.

    +
    +

    A reference that receives the saturation value of the raw image. The default value is the "as-shot" setting. The value range for saturation is 0.0 through 1.0. A value of 0.0 represents an image with a fully de-saturated image, while a value of 1.0 represents the highest amount of saturation that can be applied.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690241 + HRESULT IWICDevelopRaw::GetSaturation([Out] double* pSaturation) + IWICDevelopRaw::GetSaturation +
    + + +

    Sets the tint value of the raw image.

    +
    +

    The tint value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for sharpness is -1.0 through +1.0. The -1.0 lower limit represents a full green bias to the image, while the 1.0 upper limit represents a full magenta bias.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The codec implementer must determine what the outer range values represent and must determine how to map the values to their image processing routines.

    +
    + + ee690260 + HRESULT IWICDevelopRaw::SetTint([In] double Tint) + IWICDevelopRaw::SetTint +
    + + +

    Gets the tint value of the raw image.

    +
    +

    A reference that receives the tint value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for sharpness is -1.0 through +1.0. The -1.0 lower limit represents a full green bias to the image, while the 1.0 upper limit represents a full magenta bias.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690243 + HRESULT IWICDevelopRaw::GetTint([Out] double* pTint) + IWICDevelopRaw::GetTint +
    + + +

    Sets the noise reduction value of the raw image.

    +
    +

    The noise reduction value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for noise reduction is 0.0 through 1.0. The 0.0 lower limit represents no noise reduction applied to the image, while the 1.0 upper limit represents highest noise reduction amount that can be applied.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The codec implementer must determine what the upper range value represents and must determine how to map the value to their image processing routines.

    +
    + + ee690254 + HRESULT IWICDevelopRaw::SetNoiseReduction([In] double NoiseReduction) + IWICDevelopRaw::SetNoiseReduction +
    + + +

    Gets the noise reduction value of the raw image.

    +
    +

    A reference that receives the noise reduction value of the raw image. The default value is the "as-shot" setting if it exists or 0.0. The value range for noise reduction is 0.0 through 1.0. The 0.0 lower limit represents no noise reduction applied to the image, while the 1.0 upper limit represents full highest noise reduction amount that can be applied.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690238 + HRESULT IWICDevelopRaw::GetNoiseReduction([Out] double* pNoiseReduction) + IWICDevelopRaw::GetNoiseReduction +
    + + +

    Sets the destination color context.

    +
    +

    The destination color context.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690250 + HRESULT IWICDevelopRaw::SetDestinationColorContext([In, Optional] IWICColorContext* pColorContext) + IWICDevelopRaw::SetDestinationColorContext +
    + + +

    Sets the tone curve for the raw image.

    +
    +

    The size of the pToneCurve structure.

    +

    The desired tone curve.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690261 + HRESULT IWICDevelopRaw::SetToneCurve([In] unsigned int cbToneCurveSize,[In, Buffer] const WICRawToneCurve* pToneCurve) + IWICDevelopRaw::SetToneCurve +
    + + +

    Gets the tone curve of the raw image.

    +
    +

    The size of the pToneCurve buffer.

    +

    A reference that receives the of the raw image.

    +

    A reference that receives the size needed to obtain the tone curve structure.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690244 + HRESULT IWICDevelopRaw::GetToneCurve([In] unsigned int cbToneCurveBufferSize,[Out, Buffer, Optional] WICRawToneCurve* pToneCurve,[InOut, Optional] unsigned int* pcbActualToneCurveBufferSize) + IWICDevelopRaw::GetToneCurve +
    + + +

    Sets the desired rotation angle.

    +
    +

    The desired rotation angle.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690257 + HRESULT IWICDevelopRaw::SetRotation([In] double Rotation) + IWICDevelopRaw::SetRotation +
    + + +

    Gets the current rotation angle.

    +
    +

    A reference that receives the current rotation angle.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690240 + HRESULT IWICDevelopRaw::GetRotation([Out] double* pRotation) + IWICDevelopRaw::GetRotation +
    + + +

    Sets the current .

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690256 + HRESULT IWICDevelopRaw::SetRenderMode([In] WICRawRenderMode RenderMode) + IWICDevelopRaw::SetRenderMode +
    + + +

    Gets the current .

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690239 + HRESULT IWICDevelopRaw::GetRenderMode([Out] WICRawRenderMode* pRenderMode) + IWICDevelopRaw::GetRenderMode +
    + + +

    Sets the notification callback method.

    +
    +

    Pointer to the notification callback method.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690255 + HRESULT IWICDevelopRaw::SetNotificationCallback([In, Optional] IWICDevelopRawNotificationCallback* pCallback) + IWICDevelopRaw::SetNotificationCallback +
    + + +

    An application-defined callback method used for raw image parameter change notifications.

    +
    + + ee690230 + IWICDevelopRawNotificationCallback + IWICDevelopRawNotificationCallback +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    An application-defined callback method used for raw image parameter change notifications.

    +
    +

    A set of Constants parameter notification flags.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690230 + HRESULT IWICDevelopRawNotificationCallback::Notify([In] unsigned int NotificationMask) + IWICDevelopRawNotificationCallback::Notify +
    + + +

    Exposes methods that provide enumeration services for individual metadata items.

    +
    + + ee690264 + IWICEnumMetadataItem + IWICEnumMetadataItem +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Skips to given number of objects.

    +
    +

    The number of objects to skip.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690268 + HRESULT IWICEnumMetadataItem::Skip([In] unsigned int celt) + IWICEnumMetadataItem::Skip +
    + + +

    Resets the current position to the beginning of the enumeration.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690267 + HRESULT IWICEnumMetadataItem::Reset() + IWICEnumMetadataItem::Reset +
    + + +

    Creates a copy of the current .

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690265 + HRESULT IWICEnumMetadataItem::Clone([Out] IWICEnumMetadataItem** ppIEnumMetadataItem) + IWICEnumMetadataItem::Clone +
    + + +

    Exposes methods used for in-place metadata editing. A fast metadata encoder enables you to add and remove metadata to an image without having to fully re-encode the image.

    +
    + +

    A decoder must be created using the value to perform in-place metadata updates. Using the option causes the decoder to release the file stream necessary to perform the metadata updates.

    Not all metadata formats support fast metadata encoding. The native metadata handlers that support metadata are IFD, Exif, XMP, and GPS.

    If a fast metadata encoder fails, the image will need to be fully re-encoded to add the metadata.

    +
    + + ee690269 + IWICFastMetadataEncoder + IWICFastMetadataEncoder +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Proxy function for the GetMetadataQueryWriter method.

    +
    + + ee690273 + GetMetadataQueryWriter + GetMetadataQueryWriter + HRESULT IWICFastMetadataEncoder::GetMetadataQueryWriter([Out] IWICMetadataQueryWriter** ppIMetadataQueryWriter) +
    + + +

    Finalizes metadata changes to the image stream.

    +
    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If the commit fails and returns , ensure that the image decoder was loaded using the option. A fast metadata encoder is not supported when the decoder is created using the option.

    If the commit fails for any reason, you will need to re-encode the image to ensure the new metadata is added to the image.

    +
    + + ee690270 + HRESULT IWICFastMetadataEncoder::Commit() + IWICFastMetadataEncoder::Commit +
    + + +

    Proxy function for the GetMetadataQueryWriter method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690273 + HRESULT IWICFastMetadataEncoder::GetMetadataQueryWriter([Out] IWICMetadataQueryWriter** ppIMetadataQueryWriter) + IWICFastMetadataEncoder::GetMetadataQueryWriter +
    + + + Initializes a new instance of the class from a + + The factory. + The decoder. + + + + Initializes a new instance of the class from a + + The factory. + The frame decoder. + + + +

    Initializes the format converter.

    +
    + +

    If you do not have a predefined palette, you must first create one. Use InitializeFromBitmap to create the palette object, then pass it in along with your other parameters.

    dither, pIPalette, alphaThresholdPercent, and paletteTranslate are used to mitigate color loss when converting to a reduced bit-depth format. For conversions that do not need these settings, the following parameters values should be used: dither set to , pIPalette set to null, alphaThresholdPercent set to 0.0f, and paletteTranslate set to .

    The basic algorithm involved when using an ordered dither requires a fixed palette, found in the enumeration, in a specific order. Often, the actual palette provided for the output may have a different ordering or some slight variation in the actual colors. This is the case when using the Microsoft?Windows palette which has slight differences among versions of Windows. To provide for this, a palette and a palette translation are given to the format converter. The pIPalette is the actual destination palette to be used and the paletteTranslate is a fixed palette. Once the conversion is complete, the colors are mapped from the fixed palette to the actual colors in pIPalette using a nearest color matching algorithm.

    If colors in pIPalette do not closely match those in paletteTranslate, the mapping may produce undesireable results.

    can be useful in format conversions from 8-bit formats to 5- or 6-bit formats as there is no way to accurately convert color data.

    selects the error diffusion algorithm and may be used with any palette. If an arbitrary palette is provided, WICBitmapPaletteCustom should be passed in as the paletteTranslate. Error diffusion often provides superior results compared to the ordered dithering algorithms especially when combined with the optimized palette generation functionality on the .

    When converting a bitmap which has an alpha channel, such as a Portable Network Graphics (PNG), to 8bpp, the alpha channel is normally ignored. Any pixels which were transparent in the original bitmap show up as black in the final output because both transparent and black have pixel values of zero in the respective formats.

    Some 8bpp content can contains an alpha color; for instance, the Graphics Interchange Format (GIF) format allows for a single palette entry to be used as a transparent color. For this type of content, alphaThresholdPercent specifies what percentage of transparency should map to the transparent color. Because the alpha value is directly proportional to the opacity (not transparency) of a pixel, the alphaThresholdPercent indicates what level of opacity is mapped to the fully transparent color. For instance, 9.8% implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100% maps all pixels which are not fully opaque to the transparent color. Note that the palette should provide a transparent color. If it does not, the 'transparent' color will be the one closest to zero - often black.

    +
    + + ee690279 + IWICFormatConverter + IWICFormatConverter +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Initializes the format converter.

    +
    +

    The input bitmap to convert

    +

    The destination pixel format .

    +

    The used for conversion.

    +

    The palette to use for conversion.

    +

    The alpha threshold to use for conversion.

    +

    The palette translation type to use for conversion.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If you do not have a predefined palette, you must first create one. Use InitializeFromBitmap to create the palette object, then pass it in along with your other parameters.

    dither, pIPalette, alphaThresholdPercent, and paletteTranslate are used to mitigate color loss when converting to a reduced bit-depth format. For conversions that do not need these settings, the following parameters values should be used: dither set to , pIPalette set to null, alphaThresholdPercent set to 0.0f, and paletteTranslate set to .

    The basic algorithm involved when using an ordered dither requires a fixed palette, found in the enumeration, in a specific order. Often, the actual palette provided for the output may have a different ordering or some slight variation in the actual colors. This is the case when using the Microsoft?Windows palette which has slight differences among versions of Windows. To provide for this, a palette and a palette translation are given to the format converter. The pIPalette is the actual destination palette to be used and the paletteTranslate is a fixed palette. Once the conversion is complete, the colors are mapped from the fixed palette to the actual colors in pIPalette using a nearest color matching algorithm.

    If colors in pIPalette do not closely match those in paletteTranslate, the mapping may produce undesireable results.

    can be useful in format conversions from 8-bit formats to 5- or 6-bit formats as there is no way to accurately convert color data.

    selects the error diffusion algorithm and may be used with any palette. If an arbitrary palette is provided, WICBitmapPaletteCustom should be passed in as the paletteTranslate. Error diffusion often provides superior results compared to the ordered dithering algorithms especially when combined with the optimized palette generation functionality on the .

    When converting a bitmap which has an alpha channel, such as a Portable Network Graphics (PNG), to 8bpp, the alpha channel is normally ignored. Any pixels which were transparent in the original bitmap show up as black in the final output because both transparent and black have pixel values of zero in the respective formats.

    Some 8bpp content can contains an alpha color; for instance, the Graphics Interchange Format (GIF) format allows for a single palette entry to be used as a transparent color. For this type of content, alphaThresholdPercent specifies what percentage of transparency should map to the transparent color. Because the alpha value is directly proportional to the opacity (not transparency) of a pixel, the alphaThresholdPercent indicates what level of opacity is mapped to the fully transparent color. For instance, 9.8% implies that any pixel with an alpha value of less than 25 will be mapped to the transparent color. A value of 100% maps all pixels which are not fully opaque to the transparent color. Note that the palette should provide a transparent color. If it does not, the 'transparent' color will be the one closest to zero - often black.

    +
    + + ee690279 + HRESULT IWICFormatConverter::Initialize([In, Optional] IWICBitmapSource* pISource,[In] const GUID& dstFormat,[In] WICBitmapDitherType dither,[In, Optional] IWICPalette* pIPalette,[In] double alphaThresholdPercent,[In] WICBitmapPaletteType paletteTranslate) + IWICFormatConverter::Initialize +
    + + +

    Determines if the source pixel format can be converted to the destination pixel format.

    +
    +

    The source pixel format.

    +

    The destionation pixel format.

    +

    A reference that receives a value indicating whether the source pixel format can be converted to the destination pixel format.

    + + ee690278 + HRESULT IWICFormatConverter::CanConvert([In] const GUID& srcPixelFormat,[In] const GUID& dstPixelFormat,[Out] BOOL* pfCanConvert) + IWICFormatConverter::CanConvert +
    + + + Initializes a new instance of the class. + + The converter info. + + + + Initializes this instance with the specified bitmap source and format + + The source ref. + The destination format. + + + + + Initializes a new instance of the class. + + The factory. + + + +

    Exposes methods that provide information about a pixel format converter.

    +
    + + ee690275 + IWICFormatConverterInfo + IWICFormatConverterInfo +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a list of GUIDs that signify which pixel formats the converter supports.

    +
    +

    The size of the pPixelFormatGUIDs array.

    +

    Pointer to a array that receives the pixel formats the converter supports.

    +

    The actual array size needed to retrieve all pixel formats supported by the converter.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The format converter does not necessarily guarantee symmetricality with respect to conversion; that is, a converter may be able to convert FROM a particular format without actually being able to convert TO a particular format. In order to test symmetricality, use CanConvert.

    To determine the number of pixel formats a coverter can handle, set cFormats to 0 and pPixelFormatGUIDs to null. The converter will fill pcActual with the number of formats supported by that converter.

    +
    + + ee690277 + HRESULT IWICFormatConverterInfo::GetPixelFormats([In] unsigned int cFormats,[In] void* pPixelFormatGUIDs,[Out] unsigned int* pcActual) + IWICFormatConverterInfo::GetPixelFormats +
    + + +

    Creates a new instance.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690276 + HRESULT IWICFormatConverterInfo::CreateInstance([Out, Fast] IWICFormatConverter** ppIConverter) + IWICFormatConverterInfo::CreateInstance +
    + + + Gets the supported pixel formats. + + + + +

    Encodes interfaces to an . The input images can be larger than the maximum device texture size.

    +
    + + hh880844 + IWICImageEncoder + IWICImageEncoder +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Encodes the image to the frame given by the .

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The image passed in must be created on the same device as in . If the pImageParameters are not specified, a set of useful defaults will be assumed, see for more info.

    You must correctly and independently have set up the before calling this API. +

    +
    + + hh880845 + HRESULT IWICImageEncoder::WriteFrame([In] ID2D1Image* pImage,[In] IWICBitmapFrameEncode* pFrameEncode,[In, Value] const WICImageParameters* pImageParameters) + IWICImageEncoder::WriteFrame +
    + + +

    Encodes the image as a thumbnail to the frame given by the .

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The image passed in must be created on the same device as in . If the pImageParameters are not specified, a set of useful defaults will be assumed, see for more info.

    You must correctly and independently have set up the before calling this API. +

    +
    + + hh880846 + HRESULT IWICImageEncoder::WriteFrameThumbnail([In] ID2D1Image* pImage,[In] IWICBitmapFrameEncode* pFrameEncode,[In, Value] const WICImageParameters* pImageParameters) + IWICImageEncoder::WriteFrameThumbnail +
    + + +

    Encodes the given image as the thumbnail to the given WIC bitmap encoder.

    +
    +

    The Direct2D image that will be encoded.

    +

    The encoder on which the thumbnail is set.

    +

    Additional parameters to control encoding.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    You must create the image that you pass in on the same device as in . If you don't specify additional parameters in the variable that pImageParameters points to, the encoder uses a set of useful defaults. For info about these defaults, see .

    Before you call WriteThumbnail, you must set up the interface for the encoder on which you want to set the thumbnail.

    If WriteThumbnail fails, it might return E_OUTOFMEMORY, , or other error codes from the encoder.

    +
    + + hh880847 + HRESULT IWICImageEncoder::WriteThumbnail([In] ID2D1Image* pImage,[In] IWICBitmapEncoder* pEncoder,[In, Value] const WICImageParameters* pImageParameters) + IWICImageEncoder::WriteThumbnail +
    + + + Creates a new image encoder object. + + The WIC factory. + The object on which the corresponding image encoder is created. + hh880849 + HRESULT IWICImagingFactory2::CreateImageEncoder([In] ID2D1Device* pD2DDevice,[In] IWICImageEncoder** ppWICImageEncoder) + IWICImagingFactory2::CreateImageEncoder + + + +

    Exposes methods used to create components for the Windows Imaging Component (WIC) such as decoders, encoders and pixel format converters.

    +
    + + ee690281 + IWICImagingFactory + IWICImagingFactory +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant WICImagingFactoryClsid. + CLSID_WICImagingFactory + + + +

    Creates a new instance of the class based on the given file.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690307 + HRESULT IWICImagingFactory::CreateDecoderFromFilename([In] const wchar_t* wzFilename,[In, Optional] const GUID* pguidVendor,[In] unsigned int dwDesiredAccess,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + IWICImagingFactory::CreateDecoderFromFilename +
    + + +

    Creates a new instance of the class based on the given .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690309 + HRESULT IWICImagingFactory::CreateDecoderFromStream([In, Optional] IStream* pIStream,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + IWICImagingFactory::CreateDecoderFromStream +
    + + +

    Creates a new instance of the based on the given file handle.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    When a decoder is created using this method, the file handle must remain alive during the lifetime of the decoder.

    +
    + + ee690305 + HRESULT IWICImagingFactory::CreateDecoderFromFileHandle([In] ULONG_PTR hFile,[In, Optional] const GUID* pguidVendor,[In] WICDecodeOptions metadataOptions,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + IWICImagingFactory::CreateDecoderFromFileHandle +
    + + +

    Proxy function for the CreateComponentInfo method.

    +
    + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690303 + HRESULT IWICImagingFactory::CreateComponentInfo([In] const GUID& clsidComponent,[Out, Fast] IWICComponentInfo** ppIInfo) + IWICImagingFactory::CreateComponentInfo +
    + + +

    Creates a new instance of .

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Other values may be available for both guidContainerFormat and pguidVendor depending on the installed WIC-enabled encoders. The values listed are those that are natively supported by the operating system.

    +
    + + ee690304 + HRESULT IWICImagingFactory::CreateDecoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out, Fast] IWICBitmapDecoder** ppIDecoder) + IWICImagingFactory::CreateDecoder +
    + + +

    Creates a new instance of the class.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Other values may be available for both guidContainerFormat and pguidVendor depending on the installed WIC-enabled encoders. The values listed are those that are natively supported by the operating system.

    +
    + + ee690311 + HRESULT IWICImagingFactory::CreateEncoder([In] const GUID& guidContainerFormat,[In, Optional] const GUID* pguidVendor,[Out, Fast] IWICBitmapEncoder** ppIEncoder) + IWICImagingFactory::CreateEncoder +
    + + +

    Creates a new instance of the class.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690319 + HRESULT IWICImagingFactory::CreatePalette([Out, Fast] IWICPalette** ppIPalette) + IWICImagingFactory::CreatePalette +
    + + +

    Creates a new instance of the class.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690317 + HRESULT IWICImagingFactory::CreateFormatConverter([Out, Fast] IWICFormatConverter** ppIFormatConverter) + IWICImagingFactory::CreateFormatConverter +
    + + +

    Creates a new instance of an .

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690296 + HRESULT IWICImagingFactory::CreateBitmapScaler([Out, Fast] IWICBitmapScaler** ppIBitmapScaler) + IWICImagingFactory::CreateBitmapScaler +
    + + +

    Proxy function for the CreateBitmapClipper method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690284 + HRESULT IWICImagingFactory::CreateBitmapClipper([Out, Fast] IWICBitmapClipper** ppIBitmapClipper) + IWICImagingFactory::CreateBitmapClipper +
    + + +

    Proxy function for the CreateBitmapFlipRotator method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690286 + HRESULT IWICImagingFactory::CreateBitmapFlipRotator([Out, Fast] IWICBitmapFlipRotator** ppIBitmapFlipRotator) + IWICImagingFactory::CreateBitmapFlipRotator +
    + + +

    Creates a new instance of the class.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690325 + HRESULT IWICImagingFactory::CreateStream([Out, Fast] IWICStream** ppIWICStream) + IWICImagingFactory::CreateStream +
    + + +

    Creates a new instance of the class.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690299 + HRESULT IWICImagingFactory::CreateColorContext([Out, Fast] IWICColorContext** ppIWICColorContext) + IWICImagingFactory::CreateColorContext +
    + + +

    Creates a new instance of the class.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690300 + HRESULT IWICImagingFactory::CreateColorTransformer([Out, Fast] IWICColorTransform** ppIWICColorTransform) + IWICImagingFactory::CreateColorTransformer +
    + + +

    Creates an object.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690282 + HRESULT IWICImagingFactory::CreateBitmap([In] unsigned int uiWidth,[In] unsigned int uiHeight,[In] const GUID& pixelFormat,[In] WICBitmapCreateCacheOption option,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmap +
    + + +

    Creates a from a .

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690293 + HRESULT IWICImagingFactory::CreateBitmapFromSource([In, Optional] IWICBitmapSource* pIBitmapSource,[In] WICBitmapCreateCacheOption option,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmapFromSource +
    + + +

    Creates an from a specified rectangle of an .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Providing a rectangle that is larger than the source will produce undefined results.

    This method always creates a separate copy of the source image, similar to the cache option .

    +
    + + ee690294 + HRESULT IWICImagingFactory::CreateBitmapFromSourceRect([In, Optional] IWICBitmapSource* pIBitmapSource,[In] unsigned int x,[In] unsigned int y,[In] unsigned int width,[In] unsigned int height,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmapFromSourceRect +
    + + +

    Creates an from a memory block.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The size of the to be created must be smaller than or equal to the size of the image in pbBuffer.

    The stride of the destination bitmap will equal the stride of the source data, regardless of the width and height specified.

    The pixelFormat parameter defines the pixel format for both the input data and the output bitmap.

    +
    + + ee690291 + HRESULT IWICImagingFactory::CreateBitmapFromMemory([In] unsigned int uiWidth,[In] unsigned int uiHeight,[In] const GUID& pixelFormat,[In] unsigned int cbStride,[In] unsigned int cbBufferSize,[In] void* pbBuffer,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmapFromMemory +
    + + +

    Creates an from a bitmap handle.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    For a non-palletized bitmap, set null for the hPalette parameter.

    +
    + + ee690287 + HRESULT IWICImagingFactory::CreateBitmapFromHBITMAP([In] HBITMAP hBitmap,[In, Optional] HPALETTE hPalette,[In] WICBitmapAlphaChannelOption options,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmapFromHBITMAP +
    + + +

    Creates an from an icon handle.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee690289 + HRESULT IWICImagingFactory::CreateBitmapFromHICON([In] HICON hIcon,[Out, Fast] IWICBitmap** ppIBitmap) + IWICImagingFactory::CreateBitmapFromHICON +
    + + +

    Creates an object of the specified component types.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Component types must be enumerated seperately. Combinations of component types and are unsupported.

    +
    + + ee690301 + HRESULT IWICImagingFactory::CreateComponentEnumerator([In] unsigned int componentTypes,[In] unsigned int options,[Out, Fast] IEnumUnknown** ppIEnumUnknown) + IWICImagingFactory::CreateComponentEnumerator +
    + + +

    Creates a new instance of the fast metadata encoder based on the given .

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The Windows provided codecs do not support fast metadata encoding at the decoder level, and only support fast metadata encoding at the frame level. To create a fast metadata encoder from a frame, see CreateFastMetadataEncoderFromFrameDecode.

    +
    + + ee690313 + HRESULT IWICImagingFactory::CreateFastMetadataEncoderFromDecoder([In, Optional] IWICBitmapDecoder* pIDecoder,[Out, Fast] IWICFastMetadataEncoder** ppIFastEncoder) + IWICImagingFactory::CreateFastMetadataEncoderFromDecoder +
    + + +

    Creates a new instance of the fast metadata encoder based on the given image frame.

    +
    +

    The to create the from.

    +

    When this method returns, contains a reference to a new fast metadata encoder.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    For a list of support metadata formats for fast metadata encoding, see WIC Metadata Overview.

    +
    + + ee690315 + HRESULT IWICImagingFactory::CreateFastMetadataEncoderFromFrameDecode([In, Optional] IWICBitmapFrameDecode* pIFrameDecoder,[Out, Fast] IWICFastMetadataEncoder** ppIFastEncoder) + IWICImagingFactory::CreateFastMetadataEncoderFromFrameDecode +
    + + +

    Proxy function for the CreateQueryWriter method.

    +
    + No documentation. + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690324 + HRESULT IWICImagingFactory::CreateQueryWriter([In] const GUID& guidMetadataFormat,[In, Optional] const GUID* pguidVendor,[Out, Fast] IWICMetadataQueryWriter** ppIQueryWriter) + IWICImagingFactory::CreateQueryWriter +
    + + +

    Proxy function for the CreateQueryWriterFromReader method.

    +
    + No documentation. + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee690323 + HRESULT IWICImagingFactory::CreateQueryWriterFromReader([In, Optional] IWICMetadataQueryReader* pIQueryReader,[In, Optional] const GUID* pguidVendor,[Out, Fast] IWICMetadataQueryWriter** ppIQueryWriter) + IWICImagingFactory::CreateQueryWriterFromReader +
    + + + Initializes a new instance of the class. + + + + +

    An extension of the WIC factory interface that includes the ability to create an . This interface uses a Direct2D device and an input image to encode to a destination .

    +
    + + hh880848 + IWICImagingFactory2 + IWICImagingFactory2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates a new image encoder object.

    +
    +

    The object on which the corresponding image encoder is created.

    +

    A reference to a variable that receives a reference to the interface for the encoder object that you can use to encode Direct2D images.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    You must create images to pass to the image encoder on the same Direct2D device that you pass to this method.

    You are responsible for setting up the bitmap encoder itself through the existing APIs. The or the object is passed to each of the methods: WriteThumbnail, WriteFrame, and WriteFrameThumbnail. +

    +
    + + hh880849 + HRESULT IWICImagingFactory2::CreateImageEncoder([In] ID2D1Device* pD2DDevice,[Out, Fast] IWICImageEncoder** ppWICImageEncoder) + IWICImagingFactory2::CreateImageEncoder +
    + + + Initializes a new instance of the class. + + + + +

    Exposes methods for decoding JPEG images. Provides access to the Start Of Frame (SOF) header, Start of Scan (SOS) header, the Huffman and Quantization tables, and the compressed JPEG JPEG data. Also enables indexing for efficient random access.

    +
    + +

    Obtain this interface by calling IUnknown::QueryInterface on the Windows-provided IWICBitmapFrameDecoder interface for the JPEG decoder.

    +
    + + dn903834 + IWICJpegFrameDecode + IWICJpegFrameDecode +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves header data from the entire frame. The result includes parameters from the Start Of Frame (SOF) marker for the scan as well as parameters derived from other metadata such as the color model of the compressed data.

    +
    + + dn903851 + GetFrameHeader + GetFrameHeader + HRESULT IWICJpegFrameDecode::GetFrameHeader([Out] WICJpegFrameHeader* pFrameHeader) +
    + + +

    Retrieves a value indicating whether this decoder supports indexing for efficient random access.

    +
    +

    True if indexing is supported; otherwise, false.

    +

    Returns on successful completion.

    + +

    Indexing is only supported for some JPEG types. Call this method

    +
    + + dn903843 + HRESULT IWICJpegFrameDecode::DoesSupportIndexing([Out] BOOL* pfIndexingSupported) + IWICJpegFrameDecode::DoesSupportIndexing +
    + + +

    Enables indexing of the JPEG for efficient random access.

    +
    +

    A value specifying whether indexes should be generated immediately or deferred until a future call to .

    +

    The granularity of the indexing, in pixels.

    +

    Returns upon successful completion.

    + +

    This method enables efficient random-access to the image pixels at the expense of memory usage. The amount of memory required for indexing depends on the requested index granularity. Unless SetIndexing is called, it is much more efficient to access a JPEG by progressing through its pixels top-down during calls to . +

    This method will fail if indexing is unsupported on the file. should be called to first determine whether indexing is supported. If this method is called multiple times, the final call changes the index granularity to the requested size. +

    The provided interval size controls horizontal spacing of index entries. This value is internally rounded up according to the JPEG?s MCU (minimum coded unit) size, which is typically either 8 or 16 unscaled pixels. The vertical size of the index interval is always equal to one MCU size.

    Indexes can be generated immediately, or during future calls to to reduce redundant decompression work.

    +
    + + dn903861 + HRESULT IWICJpegFrameDecode::SetIndexing([In] WICJpegIndexingOptions options,[In] unsigned int horizontalIntervalSize) + IWICJpegFrameDecode::SetIndexing +
    + + +

    Removes the indexing from a JPEG that has been indexed using .

    +
    +

    Returns upons successful completion.

    + + dn903837 + HRESULT IWICJpegFrameDecode::ClearIndexing() + IWICJpegFrameDecode::ClearIndexing +
    + + +

    Retrieves a copy of the AC Huffman table for the specified scan and table.

    +
    +

    The zero-based index of the scan for which data is retrieved.

    +

    The index of the AC Huffman table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with .

    +

    A reference that receives the table data. This parameter must not be null.

    +

    This method can return one of these values.

    Return valueDescription

    The operation was successful.

    The specified scan index is invalid.

    Can occur if pAcHuffmanTable is null or if tableIndex does not point to a valid table slot. Check the scan header for valid table indices.

    ?

    + + dn903845 + HRESULT IWICJpegFrameDecode::GetAcHuffmanTable([In] unsigned int scanIndex,[In] unsigned int tableIndex,[Out] DXGI_JPEG_AC_HUFFMAN_TABLE* pAcHuffmanTable) + IWICJpegFrameDecode::GetAcHuffmanTable +
    + + +

    Retrieves a copy of the DC Huffman table for the specified scan and table.

    +
    +

    The zero-based index of the scan for which data is retrieved.

    +

    The index of the DC Huffman table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with .

    +

    A reference that receives the table data. This parameter must not be null.

    +

    This method can return one of these values.

    Return valueDescription

    The operation was successful.

    The specified scan index is invalid.

    Can occur if pTable is null or if tableIndex does not point to a valid table slot. Check the scan header for valid table indices.

    ?

    + + dn903848 + HRESULT IWICJpegFrameDecode::GetDcHuffmanTable([In] unsigned int scanIndex,[In] unsigned int tableIndex,[Out] DXGI_JPEG_DC_HUFFMAN_TABLE* pDcHuffmanTable) + IWICJpegFrameDecode::GetDcHuffmanTable +
    + + +

    Retrieves a copy of the quantization table.

    +
    +

    The zero-based index of the scan for which data is retrieved.

    +

    The index of the quantization table to retrieve. Valid indices for a given scan can be determined by retrieving the scan header with .

    +

    A reference that receives the table data. This parameter must not be null.

    +

    This method can return one of these values.

    Return valueDescription

    The operation was successful.

    The specified scan index is invalid.

    Can occur if pTable is null or if tableIndex does not point to a valid table slot. Check the scan header for valid table indices.

    ?

    + + dn903854 + HRESULT IWICJpegFrameDecode::GetQuantizationTable([In] unsigned int scanIndex,[In] unsigned int tableIndex,[Out] DXGI_JPEG_QUANTIZATION_TABLE* pQuantizationTable) + IWICJpegFrameDecode::GetQuantizationTable +
    + + +

    Retrieves header data from the entire frame. The result includes parameters from the Start Of Frame (SOF) marker for the scan as well as parameters derived from other metadata such as the color model of the compressed data.

    +
    +

    A reference that receives the frame header data.

    +

    Returns on successful completion.

    + + dn903851 + HRESULT IWICJpegFrameDecode::GetFrameHeader([Out] WICJpegFrameHeader* pFrameHeader) + IWICJpegFrameDecode::GetFrameHeader +
    + + +

    Retrieves parameters from the Start Of Scan (SOS) marker for the scan with the specified index.

    +
    +

    The index of the scan for which header data is retrieved.

    +

    A reference that receives the frame header data.

    +

    Returns on successful completion.

    + + dn903858 + HRESULT IWICJpegFrameDecode::GetScanHeader([In] unsigned int scanIndex,[Out] WICJpegScanHeader* pScanHeader) + IWICJpegFrameDecode::GetScanHeader +
    + + +

    Retrieves a copy of the compressed JPEG scan directly from the WIC decoder frame's output stream.

    +
    +

    The zero-based index of the scan for which data is retrieved.

    +

    The byte position in the scan data to begin copying. Use 0 on the first call. If the output buffer size is insufficient to store the entire scan, this offset allows you to resume copying from the end of the previous copy operation.

    +

    The size, in bytes, of the pbScanData array.

    +

    A reference that receives the table data. This parameter must not be null.

    +

    A reference that receives the size of the scan data actually copied into pbScanData. The size returned may be smaller that the size of cbScanData. This parameter may be null.

    +

    This method can return one of these values.

    Return valueDescription

    The operation was successful.

    The specified scan index is invalid.

    ?

    + + dn903841 + HRESULT IWICJpegFrameDecode::CopyScan([In] unsigned int scanIndex,[In] unsigned int scanOffset,[In] unsigned int cbScanData,[Out, Buffer] unsigned char* pbScanData,[Out] unsigned int* pcbScanDataActual) + IWICJpegFrameDecode::CopyScan +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT IWICJpegFrameDecode::CopyMinimalStream([In] unsigned int streamOffset,[In] unsigned int cbStreamData,[Out, Buffer] unsigned char* pbStreamData,[Out] unsigned int* pcbStreamDataActual) + IWICJpegFrameDecode::CopyMinimalStream + + + +

    Exposes methods for writing compressed JPEG scan data directly to the WIC encoder's output stream. Also provides access to the Huffman and quantization tables.

    +
    + +

    Obtain this interface by calling IUnknown::QueryInterface on the Windows-provided IWICBitmapFrameEncoder interface for the JPEG encoder.

    The WIC JPEG encoder supports a smaller subset of JPEG features than the decoder does.

    • The encoder is limited to a single scan. It does not support encoding images that are multi-scan, either for progressive encoding or planar component data.
    • The encoder supports two quantization tables, two AC Huffman tables, and two DC Huffman tables. The luma tables are used for the Y channel and, in the case of YCCK, the black channel. The chroma tables are used for the CbCr channels.
    • The encoder supports encoding gray, YCbCr (RGB), and YCCK (CMYK).
    • The encoder supports 4 fixed compontent subsampling, 4:2:0, 4:2:2, 4:4:0, and 4:4:4. This subsamples chroma only.
    • The encoder does not support restart markers.
    +
    + + dn903864 + IWICJpegFrameEncode + IWICJpegFrameEncode +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a copy of the AC Huffman table for the specified scan and table.

    +
    +

    The zero-based index of the scan for which data is retrieved.

    +

    The index of the AC Huffman table to retrieve.

    +

    A reference that receives the table data. This parameter must not be null.

    +

    This method can return one of these values.

    Return valueDescription

    The operation was successful.

    The specified scan index is invalid.

    Can occur if pAcHuffmanTable is null or if tableIndex does not point to a valid table slot. Check the scan header for valid table indices.

    ?

    + + dn903867 + HRESULT IWICJpegFrameEncode::GetAcHuffmanTable([In] unsigned int scanIndex,[In] unsigned int tableIndex,[Out] DXGI_JPEG_AC_HUFFMAN_TABLE* pAcHuffmanTable) + IWICJpegFrameEncode::GetAcHuffmanTable +
    + + +

    Retrieves a copy of the DC Huffman table for the specified scan and table.

    +
    +

    The zero-based index of the scan for which data is retrieved.

    +

    The index of the DC Huffman table to retrieve.

    +

    A reference that receives the table data. This parameter must not be null.

    +

    This method can return one of these values.

    Return valueDescription

    The operation was successful.

    The specified scan index is invalid.

    Can occur if pTable is null or if tableIndex does not point to a valid table slot. Check the scan header for valid table indices.

    ?

    + + dn903870 + HRESULT IWICJpegFrameEncode::GetDcHuffmanTable([In] unsigned int scanIndex,[In] unsigned int tableIndex,[Out] DXGI_JPEG_DC_HUFFMAN_TABLE* pDcHuffmanTable) + IWICJpegFrameEncode::GetDcHuffmanTable +
    + + +

    Retrieves a copy of the quantization table.

    +
    +

    The zero-based index of the scan for which data is retrieved.

    +

    The index of the quantization table to retrieve.

    +

    A reference that receives the table data. This parameter must not be null.

    +

    This method can return one of these values.

    Return valueDescription

    The operation was successful.

    The specified scan index is invalid.

    Can occur if pTable is null or if tableIndex does not point to a valid table slot. Check the scan header for valid table indices.

    ?

    + + dn903873 + HRESULT IWICJpegFrameEncode::GetQuantizationTable([In] unsigned int scanIndex,[In] unsigned int tableIndex,[Out] DXGI_JPEG_QUANTIZATION_TABLE* pQuantizationTable) + IWICJpegFrameEncode::GetQuantizationTable +
    + + +

    Writes scan data to a JPEG frame.

    +
    +

    The size of the data in the pbScanData parameter.

    +

    The scan data to write.

    +

    Returns on successful completion.

    + +

    WriteScan may be called multiple times. Each call appends the scan data specified to any previous scan data. Complete the scan by calling .

    Any calls to set encoder parameters or image metadata that will appear before the scan data in the resulting JPEG file must be completed before the first call to this method. This includes calls to , , , , and . is required as it has no default value for encoded image size. +

    +
    + + dn903875 + HRESULT IWICJpegFrameEncode::WriteScan([In] unsigned int cbScanData,[In, Buffer] const unsigned char* pbScanData) + IWICJpegFrameEncode::WriteScan +
    + + +

    Exposes methods for retrieving metadata blocks and items from a decoder or its image frames using a metadata query expression.

    +
    + +

    A metadata query reader uses metadata query expressions to access embedded metadata. For more information on the metadata query language, see the Metadata Query Language Overview.

    The benefit of the query reader is the ability to access a metadata item in a single step. +

    The query reader also provides the way to traverse the whole set of metadata hierarchy with the help of the GetEnumerator method. + However, it is not recommended to use this method since IWICMetadataBlockReader and IWICMetadataReader provide a more convenient and cheaper way. +

    +
    + + ee719708 + IWICMetadataQueryReader + IWICMetadataQueryReader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the metadata query readers container format.

    +
    + + ee719709 + GetContainerFormat + GetContainerFormat + HRESULT IWICMetadataQueryReader::GetContainerFormat([Out] GUID* pguidContainerFormat) +
    + + +

    Gets the metadata query readers container format.

    +
    +

    Pointer that receives the cointainer format .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719709 + HRESULT IWICMetadataQueryReader::GetContainerFormat([Out] GUID* pguidContainerFormat) + IWICMetadataQueryReader::GetContainerFormat +
    + + +

    Retrieves the current path relative to the root metadata block.

    +
    +

    The length of the wzNamespace buffer.

    +

    Pointer that receives the current namespace location.

    +

    The actual buffer length that was needed to retrieve the current namespace location.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If you pass null to wzNamespace, GetLocation ignores cchMaxLength and returns the required buffer length to store the path in the variable that pcchActualLength points to. +

    If the query reader is relative to the top of the metadata hierarchy, it will return a single-char string.

    If the query reader is relative to a nested metadata block, this method will return the path to the current query reader.

    +
    + + ee719713 + HRESULT IWICMetadataQueryReader::GetLocation([In] unsigned int cchMaxLength,[In] void* wzNamespace,[Out] unsigned int* pcchActualLength) + IWICMetadataQueryReader::GetLocation +
    + + +

    Retrieves the metadata block or item identified by a metadata query expression.

    +
    +

    The query expression to the requested metadata block or item.

    +

    When this method returns, contains the metadata block or item requested.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    GetMetadataByName uses metadata query expressions to access embedded metadata. For more information on the metadata query language, see the Metadata Query Language Overview.

    If multiple blocks or items exist that are expressed by the same query expression, the first metadata block or item found will be returned.

    +
    + + ee719715 + HRESULT IWICMetadataQueryReader::GetMetadataByName([In] const wchar_t* wzName,[In] void* pvarValue) + IWICMetadataQueryReader::GetMetadataByName +
    + + +

    Gets an enumerator of all metadata items at the current relative location within the metadata hierarchy.

    +
    +

    A reference to a variable that receives a reference to the interface for the enumerator that contains query strings that can be used in the current .

    + +

    The retrieved enumerator only contains query strings for the metadata blocks and items in the current level of the hierarchy. +

    +
    + + ee719711 + HRESULT IWICMetadataQueryReader::GetEnumerator([Out] void** ppIEnumString) + IWICMetadataQueryReader::GetEnumerator +
    + + + Gets the enumerator on the metadata names. + + + + + Gets the enumerator on all the metadata query paths. + http://msdn.microsoft.com/en-us/library/windows/desktop/ee719796(v=vs.85).aspx#expressionanatomy + + + + + Gets the location. + + HRESULT IWICMetadataQueryReader::GetLocation([In] unsigned int cchMaxLength,[InOut, Buffer, Optional] wchar_t* wzNamespace,[Out] unsigned int* pcchActualLength) + + + + Try to get the metadata value by name. + + The name. + The metadata value, or null if the metadata was not found or an error occurred + The WIC error code + HRESULT IWICMetadataQueryReader::GetMetadataByName([In] const wchar_t* wzName,[InOut, Optional] PROPVARIANT* pvarValue) + + + + Try to get the metadata value by name. + + The name. + the metadata value, or null if the metadata was not found + HRESULT IWICMetadataQueryReader::GetMetadataByName([In] const wchar_t* wzName,[InOut, Optional] PROPVARIANT* pvarValue) + + + + Gets the metadata value by name. + + The name. + Value of the metadata + HRESULT IWICMetadataQueryReader::GetMetadataByName([In] const wchar_t* wzName,[InOut, Optional] PROPVARIANT* pvarValue) + + + + Dumps all metadata. + + The text writer output. + The level of tabulations. + + This is a simple helper method to dump metadata stored in this instance. + + + + +

    Exposes methods for setting or removing metadata blocks and items to an encoder or its image frames using a metadata query expression.

    +
    + +

    A metadata query writer uses metadata query expressions to set or remove metadata. For more information on the metadata query language, see the Metadata Query Language Overview.

    +
    + + ee719717 + IWICMetadataQueryWriter + IWICMetadataQueryWriter +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets a metadata item to a specific location.

    +
    +

    The name of the metadata item.

    +

    The metadata to set.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    SetMetadataByName uses metadata query expressions to remove metadata. For more information on the metadata query language, see the Metadata Query Language Overview.

    If the value set is a nested metadata block then use variant type VT_UNKNOWN and pvarValue pointing to the of the new metadata block. The ordering of metadata items is at the discretion of the query writer since relative locations are not specified.

    +
    + + ee719720 + HRESULT IWICMetadataQueryWriter::SetMetadataByName([In] const wchar_t* wzName,[In] const void* pvarValue) + IWICMetadataQueryWriter::SetMetadataByName +
    + + +

    Proxy function for the RemoveMetadataByName method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee719719 + HRESULT IWICMetadataQueryWriter::RemoveMetadataByName([In] const wchar_t* wzName) + IWICMetadataQueryWriter::RemoveMetadataByName +
    + + + Initializes a new instance of the class. + + The factory. + The GUID metadata format. + + + + Initializes a new instance of the class. + + The factory. + The GUID metadata format. + The GUID vendor ref. + HRESULT IWICImagingFactory::CreateQueryWriter([In] const GUID& guidMetadataFormat,[In, Optional] const GUID* pguidVendor,[Out, Fast] IWICMetadataQueryWriter** ppIQueryWriter) + + + + Initializes a new instance of the class from a . + + The factory. + The metadata query reader. + + + + Initializes a new instance of the class from a . + + The factory. + The metadata query reader. + The GUID vendor ref. + + + + Sets the value for a metadata name + + The name of the metadata. + The value. + + + + +

    Exposes methods for accessing and building a color table, primarily for indexed pixel formats.

    +
    + +

    If the is not WICBitmapPaletteCustom, then the colors are automatically generated based on the table above. If the user subsequently changes a color palette entry the WICBitmapPalette is set to Custom by that action.

    InitializeFromBitmap's fAddTransparentColor parameter will add a transparent color to the end of the color collection if its size if less than 256, otherwise index 255 will be replaced with the transparent color. If a pre-defined palette type is used, it will change to BitmapPaletteTypeCustom since it no longer matches the predefined palette.

    The palette interface is an auxiliary imaging interface in that it does not directly concern bitmaps and pixels; rather it provides indexed color translation for indexed bitmaps. For an indexed pixel format with M bits per pixels: (The number of colors in the palette) greater than 2^M.

    Traditionally the basic operation of the palette is to provide a translation from a byte (or smaller) index into a 32bpp color value. This is often accomplished by a 256 entry table of color values.

    +
    + + ee719741 + IWICPalette + IWICPalette +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the that describes the palette.

    +
    + +

    WICBitmapPaletteCustom is used for palettes initialized from both InitializeCustom and InitializeFromBitmap. There is no distinction is made between optimized and custom palettes.

    +
    + + ee719746 + GetType + GetType + HRESULT IWICPalette::GetType([Out] WICBitmapPaletteType* pePaletteType) +
    + + +

    Proxy function for the GetColorCount method.

    +
    + + ee719743 + GetColorCount + GetColorCount + HRESULT IWICPalette::GetColorCount([Out] unsigned int* pcCount) +
    + + +

    Retrieves a value that describes whether the palette is black and white.

    +
    + +

    A palette is considered to be black and white only if it contains exactly two entries, one full black (0xFF000000) and one full white (0xFFFFFFF). +

    +
    + + ee719758 + IsBlackWhite + IsBlackWhite + HRESULT IWICPalette::IsBlackWhite([Out] BOOL* pfIsBlackWhite) +
    + + +

    Retrieves a value that describes whether a palette is grayscale.

    +
    + +

    A palette is considered grayscale only if, for every entry, the alpha value is 0xFF and the red, green and blue values match. +

    +
    + + ee719759 + IsGrayscale + IsGrayscale + HRESULT IWICPalette::IsGrayscale([Out] BOOL* pfIsGrayscale) +
    + + +

    Initializes the palette to one of the pre-defined palettes specified by and optionally adds a transparent color.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If a transparent color is added to a palette, the palette is no longer predefined and is returned as . For palettes with less than 256 entries, the transparent entry is added to the end of the palette (that is, a 16-color palette becomes a 17-color palette). For palettes with 256 colors, the transparent palette entry will replace the last entry in the pre-defined palette. +

    +
    + + ee719756 + HRESULT IWICPalette::InitializePredefined([In] WICBitmapPaletteType ePaletteType,[In] BOOL fAddTransparentColor) + IWICPalette::InitializePredefined +
    + + +

    Proxy function for the InitializeCustom method.

    +
    + No documentation. + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee719751 + HRESULT IWICPalette::InitializeCustom([In, Buffer] void* pColors,[In] unsigned int cCount) + IWICPalette::InitializeCustom +
    + + +

    Initializes a palette using a computed optimized values based on the reference bitmap.

    +
    +

    Pointer to the source bitmap.

    +

    The number of colors to initialize the palette with.

    +

    A value to indicate whether to add a transparent color.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The resulting palette contains the specified number of colors which best represent the colors present in the bitmap. The algorithm operates on the opaque RGB color value of each pixel in the reference bitmap and hence ignores any alpha values. If a transparent color is required, set the fAddTransparentColor parameter to TRUE and one fewer optimized color will be computed, reducing the colorCount, and a fully transparent color entry will be added.

    +
    + + ee719752 + HRESULT IWICPalette::InitializeFromBitmap([In, Optional] IWICBitmapSource* pISurface,[In] unsigned int cCount,[In] BOOL fAddTransparentColor) + IWICPalette::InitializeFromBitmap +
    + + +

    Initialize the palette based on a given palette.

    +
    +

    Pointer to the source palette.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719754 + HRESULT IWICPalette::InitializeFromPalette([In, Optional] IWICPalette* pIPalette) + IWICPalette::InitializeFromPalette +
    + + +

    Retrieves the that describes the palette.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    WICBitmapPaletteCustom is used for palettes initialized from both InitializeCustom and InitializeFromBitmap. There is no distinction is made between optimized and custom palettes.

    +
    + + ee719746 + HRESULT IWICPalette::GetType([Out] WICBitmapPaletteType* pePaletteType) + IWICPalette::GetType +
    + + +

    Proxy function for the GetColorCount method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee719743 + HRESULT IWICPalette::GetColorCount([Out] unsigned int* pcCount) + IWICPalette::GetColorCount +
    + + +

    Fills out the supplied color array with the colors from the internal color table. The color array should be sized according to the return results from GetColorCount.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719744 + HRESULT IWICPalette::GetColors([In] unsigned int cCount,[Out, Buffer] void* pColors,[Out] unsigned int* pcActualColors) + IWICPalette::GetColors +
    + + +

    Retrieves a value that describes whether the palette is black and white.

    +
    +

    A reference to a variable that receives a boolean value that indicates whether the palette is black and white. TRUE indicates that the palette is black and white; otherwise, .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    A palette is considered to be black and white only if it contains exactly two entries, one full black (0xFF000000) and one full white (0xFFFFFFF). +

    +
    + + ee719758 + HRESULT IWICPalette::IsBlackWhite([Out] BOOL* pfIsBlackWhite) + IWICPalette::IsBlackWhite +
    + + +

    Retrieves a value that describes whether a palette is grayscale.

    +
    +

    A reference to a variable that receives a boolean value that indicates whether the palette is grayscale. TRUE indicates that the palette is grayscale; otherwise .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    A palette is considered grayscale only if, for every entry, the alpha value is 0xFF and the red, green and blue values match. +

    +
    + + ee719759 + HRESULT IWICPalette::IsGrayscale([Out] BOOL* pfIsGrayscale) + IWICPalette::IsGrayscale +
    + + +

    Proxy function for the HasAlpha method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee719749 + HRESULT IWICPalette::HasAlpha([Out] BOOL* pfHasAlpha) + IWICPalette::HasAlpha +
    + + + Initializes a new instance of the class. + + The factory. + ee690319 + HRESULT IWICImagingFactory::CreatePalette([Out, Fast] IWICPalette** ppIPalette) + IWICImagingFactory::CreatePalette + + + + Initializes with the specified colors. + + Type of the color (must be 4 bytes, RGBA) + The colors. + Color type must be 4 bytes + ee719750 + HRESULT IWICPalette::InitializeCustom([In, Buffer] void* pColors,[In] unsigned int cCount) + IWICPalette::InitializeCustom + + + + Gets the colors. + + ee719744 + HRESULT IWICPalette::GetColors([In] unsigned int cCount,[Out, Buffer] void* pColors,[Out] unsigned int* pcActualColors) + IWICPalette::GetColors + + + +

    Exposes methods that provide information about a pixel format.

    +
    + + ee719763 + IWICPixelFormatInfo + IWICPixelFormatInfo +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the pixel format .

    +
    + + ee719774 + GetFormatGUID + GetFormatGUID + HRESULT IWICPixelFormatInfo::GetFormatGUID([Out] GUID* pFormat) +
    + + +

    Gets the pixel format's .

    +
    + +

    The returned color context is the default color space for the pixel format. However, if an specifies its own color context, the source's context should be preferred over the pixel format's default. +

    +
    + + ee719773 + GetColorContext + GetColorContext + HRESULT IWICPixelFormatInfo::GetColorContext([Out] IWICColorContext** ppIColorContext) +
    + + +

    Proxy function for the GetBitsPerPixel method.

    +
    + + ee719768 + GetBitsPerPixel + GetBitsPerPixel + HRESULT IWICPixelFormatInfo::GetBitsPerPixel([Out] unsigned int* puiBitsPerPixel) +
    + + +

    Proxy function for the GetChannelCount method.

    +
    + + ee719770 + GetChannelCount + GetChannelCount + HRESULT IWICPixelFormatInfo::GetChannelCount([Out] unsigned int* puiChannelCount) +
    + + +

    Gets the pixel format .

    +
    +

    Pointer that receives the pixel format .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719774 + HRESULT IWICPixelFormatInfo::GetFormatGUID([Out] GUID* pFormat) + IWICPixelFormatInfo::GetFormatGUID +
    + + +

    Gets the pixel format's .

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The returned color context is the default color space for the pixel format. However, if an specifies its own color context, the source's context should be preferred over the pixel format's default. +

    +
    + + ee719773 + HRESULT IWICPixelFormatInfo::GetColorContext([Out] IWICColorContext** ppIColorContext) + IWICPixelFormatInfo::GetColorContext +
    + + +

    Proxy function for the GetBitsPerPixel method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee719768 + HRESULT IWICPixelFormatInfo::GetBitsPerPixel([Out] unsigned int* puiBitsPerPixel) + IWICPixelFormatInfo::GetBitsPerPixel +
    + + +

    Proxy function for the GetChannelCount method.

    +
    + No documentation. +

    If this function succeeds, it returns . Otherwise, it returns an error code.

    + + ee719770 + HRESULT IWICPixelFormatInfo::GetChannelCount([Out] unsigned int* puiChannelCount) + IWICPixelFormatInfo::GetChannelCount +
    + + +

    Gets the pixel format's channel mask.

    +
    +

    The index to the channel mask to retrieve.

    +

    The size of the pbMaskBuffer buffer.

    +

    Pointer to the mask buffer.

    +

    The actual buffer size needed to obtain the channel mask.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If 0 and null are passed in for cbMaskBuffer and pbMaskBuffer, respectively, the required buffer size will be returned through pcbActual. +

    +
    + + ee719771 + HRESULT IWICPixelFormatInfo::GetChannelMask([In] unsigned int uiChannelIndex,[In] unsigned int cbMaskBuffer,[In] void* pbMaskBuffer,[Out] unsigned int* pcbActual) + IWICPixelFormatInfo::GetChannelMask +
    + + + Gets the channel mask. + + Index of the channel. + + HRESULT IWICPixelFormatInfo::GetChannelMask([In] unsigned int uiChannelIndex,[In] unsigned int cbMaskBuffer,[In] void* pbMaskBuffer,[Out] unsigned int* pcbActual) + + + +

    Extends by providing additional information about a pixel format.

    +
    + + ee719764 + IWICPixelFormatInfo2 + IWICPixelFormatInfo2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns whether the format supports transparent pixels.

    +
    + +

    An indexed pixel format will not return TRUE even though it may have some transparency support. +

    +
    + + ee719766 + SupportsTransparency + SupportsTransparency + HRESULT IWICPixelFormatInfo2::SupportsTransparency([Out] BOOL* pfSupportsTransparency) +
    + + + No documentation. + + + ee719765 + GetNumericRepresentation + GetNumericRepresentation + HRESULT IWICPixelFormatInfo2::GetNumericRepresentation([Out] WICPixelFormatNumericRepresentation* pNumericRepresentation) + + + +

    Returns whether the format supports transparent pixels.

    +
    +

    Returns TRUE if the pixel format supports transparency; otherwise, .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    An indexed pixel format will not return TRUE even though it may have some transparency support. +

    +
    + + ee719766 + HRESULT IWICPixelFormatInfo2::SupportsTransparency([Out] BOOL* pfSupportsTransparency) + IWICPixelFormatInfo2::SupportsTransparency +
    + + + No documentation. + +

    Returns the of the pixel format.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719765 + HRESULT IWICPixelFormatInfo2::GetNumericRepresentation([Out] WICPixelFormatNumericRepresentation* pNumericRepresentation) + IWICPixelFormatInfo2::GetNumericRepresentation +
    + + +

    Allows planar component image pixels to be written to an encoder. When supported by the encoder, this allows an application to encode planar component image data without first converting to an interleaved pixel format.

    You can use QueryInterface to obtain this interface from the Windows provided implementation of for the JPEG encoder. +

    +
    + +

    Encoding YCbCr data using is similar but not identical to encoding interleaved data using . The planar interface only exposes the ability to write planar frame image data, and you should continue to use the frame encode interface to set metadata or a thumbnail and to commit at the end of the operation. +

    +
    + + dn302090 + IWICPlanarBitmapFrameEncode + IWICPlanarBitmapFrameEncode +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Writes lines from the source planes to the encoded format.

    +
    +

    The number of lines to encode. See the Remarks section for WIC Jpeg specific line count restrictions.

    +

    Specifies the source buffers for each component plane encoded.

    +

    The number of component planes specified by the pPlanes parameter.

    +

    If the planes and source rectangle do not meet the requirements, this method fails with . If the format does not meet the encoder requirements, this method fails with .

    + +

    Successive WritePixels calls are assumed sequentially add scanlines to the output image. , and must be called before this method or it will fail.

    The interleaved pixel format set via and the codec specific encode parameters determine the supported planar formats. +

    WIC JPEG Encoder: + QueryInterface can be used to obtain this interface from the WIC JPEG implementation. When using this method to encode Y?CbCr data with the WIC JPEG encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and for more details.

    Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +

    Chroma SubsamplingLine Count RestrictionChroma Plane WidthChroma Plane Height
    4:2:0Multiple of 2, unless the call covers the last scanline of the imagelumaWidth / 2 Rounded up to the nearest integer.lumaHeight / 2 Rounded up to the nearest integer.
    4:2:2AnylumaWidth / 2 Rounded up to the nearest integer.Any
    4:4:4AnyAnyAny
    4:4:0Multiple of 2, unless the call covers the last scanline of the imageAnyllumaHeight / 2 Rounded up to the nearest integer.

    ?

    The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.

    Additionally, if a pixel format is set via , it must be .

    The supported pixel formats of the bitmap sources passed into this method are as follows: +

    Plane CountPlane 1Plane 2Plane 3
    3
    2N/A

    ?

    +
    + + dn302091 + HRESULT IWICPlanarBitmapFrameEncode::WritePixels([In] unsigned int lineCount,[In, Buffer] WICBitmapPlane* pPlanes,[In] unsigned int cPlanes) + IWICPlanarBitmapFrameEncode::WritePixels +
    + + +

    Writes lines from the source planes to the encoded format.

    +
    +

    Specifies an array of that represent image planes.

    +

    The number of component planes specified by the planes parameter.

    +

    The source rectangle of pixels to encode from the planes. Null indicates the entire source. The source rect width must match the width set through SetSize. Repeated WriteSource calls can be made as long as the total accumulated source rect height is the same as set through SetSize.

    +

    If the planes and source rectangle do not meet the requirements, this method fails with .

    If the format does not meet the encoder requirements, this method fails with .

    + +

    Successive WriteSource calls are assumed sequentially add scanlines to the output image. , and must be called before this method or it will fail.

    The interleaved pixel format set via and the codec specific encode parameters determine the supported planar formats. +

    WIC JPEG Encoder: + QueryInterface can be used to obtain this interface from the WIC JPEG implementation. When using this method to encode Y?CbCr data with the WIC JPEG encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and for more details.

    Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +

    Chroma SubsamplingX CoordinateY CoordinateChroma WidthChroma Height
    4:2:0Multiple of 2Multiple of 2lumaWidth / 2 Rounded up to the nearest integer.lumaHeight / 2 Rounded up to the nearest integer.
    4:2:2Multiple of 2AnylumaWidth / 2 Rounded up to the nearest integer.Any
    4:4:4AnyAnyAnyAny
    4:4:0AnyMultiple of 2lumaWidthllumaHeight / 2 Rounded up to the nearest integer.

    ?

    The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.

    Additionally, if a pixel format is set via , it must be .

    The supported pixel formats of the bitmap sources passed into this method are as follows: +

    Plane CountPlane 1Plane 2Plane 3
    3
    2N/A

    ?

    +
    + + dn302092 + HRESULT IWICPlanarBitmapFrameEncode::WriteSource([In, Buffer] IWICBitmapSource** ppPlanes,[In] unsigned int cPlanes,[In, Optional] WICRect* prcSource) + IWICPlanarBitmapFrameEncode::WriteSource +
    + + +

    Writes lines from the source planes to the encoded format.

    +
    +

    Specifies an array of that represent image planes.

    +

    The number of component planes specified by the planes parameter.

    +

    The source rectangle of pixels to encode from the planes. Null indicates the entire source. The source rect width must match the width set through SetSize. Repeated WriteSource calls can be made as long as the total accumulated source rect height is the same as set through SetSize.

    +

    If the planes and source rectangle do not meet the requirements, this method fails with .

    If the format does not meet the encoder requirements, this method fails with .

    + +

    Successive WriteSource calls are assumed sequentially add scanlines to the output image. , and must be called before this method or it will fail.

    The interleaved pixel format set via and the codec specific encode parameters determine the supported planar formats. +

    WIC JPEG Encoder: + QueryInterface can be used to obtain this interface from the WIC JPEG implementation. When using this method to encode Y?CbCr data with the WIC JPEG encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and for more details.

    Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +

    Chroma SubsamplingX CoordinateY CoordinateChroma WidthChroma Height
    4:2:0Multiple of 2Multiple of 2lumaWidth / 2 Rounded up to the nearest integer.lumaHeight / 2 Rounded up to the nearest integer.
    4:2:2Multiple of 2AnylumaWidth / 2 Rounded up to the nearest integer.Any
    4:4:4AnyAnyAnyAny
    4:4:0AnyMultiple of 2lumaWidthllumaHeight / 2 Rounded up to the nearest integer.

    ?

    The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.

    Additionally, if a pixel format is set via , it must be .

    The supported pixel formats of the bitmap sources passed into this method are as follows: +

    Plane CountPlane 1Plane 2Plane 3
    3
    2N/A

    ?

    +
    + + dn302092 + HRESULT IWICPlanarBitmapFrameEncode::WriteSource([In, Buffer] IWICBitmapSource** ppPlanes,[In] unsigned int cPlanes,[In, Optional] WICRect* prcSource) + IWICPlanarBitmapFrameEncode::WriteSource +
    + + +

    Writes lines from the source planes to the encoded format.

    +
    +

    Specifies an array of that represent image planes.

    +

    The number of component planes specified by the planes parameter.

    +

    The source rectangle of pixels to encode from the planes. Null indicates the entire source. The source rect width must match the width set through SetSize. Repeated WriteSource calls can be made as long as the total accumulated source rect height is the same as set through SetSize.

    +

    If the planes and source rectangle do not meet the requirements, this method fails with .

    If the format does not meet the encoder requirements, this method fails with .

    + +

    Successive WriteSource calls are assumed sequentially add scanlines to the output image. , and must be called before this method or it will fail.

    The interleaved pixel format set via and the codec specific encode parameters determine the supported planar formats. +

    WIC JPEG Encoder: + QueryInterface can be used to obtain this interface from the WIC JPEG implementation. When using this method to encode Y?CbCr data with the WIC JPEG encoder, chroma subsampling can be configured with encoder options during frame creation. See the Encoding Overview and for more details.

    Depending upon the configured chroma subsampling, the lineCount parameter has the following restrictions: +

    Chroma SubsamplingX CoordinateY CoordinateChroma WidthChroma Height
    4:2:0Multiple of 2Multiple of 2lumaWidth / 2 Rounded up to the nearest integer.lumaHeight / 2 Rounded up to the nearest integer.
    4:2:2Multiple of 2AnylumaWidth / 2 Rounded up to the nearest integer.Any
    4:4:4AnyAnyAnyAny
    4:4:0AnyMultiple of 2lumaWidthllumaHeight / 2 Rounded up to the nearest integer.

    ?

    The full scanline width must be encoded, and the width of the bitmap sources must match their planar configuration.

    Additionally, if a pixel format is set via , it must be .

    The supported pixel formats of the bitmap sources passed into this method are as follows: +

    Plane CountPlane 1Plane 2Plane 3
    3
    2N/A

    ?

    +
    + + dn302092 + HRESULT IWICPlanarBitmapFrameEncode::WriteSource([In, Buffer] IWICBitmapSource** ppPlanes,[In] unsigned int cPlanes,[In, Optional] WICRect* prcSource) + IWICPlanarBitmapFrameEncode::WriteSource +
    + + +

    Provides access to planar Y?CbCr pixel formats where pixel components are stored in separate component planes. This interface also allows access to other codec optimizations for flip/rotate, scale, and format conversion to other Y?CbCr planar formats; this is similar to the pre-existing interface.

    QueryInterface can be used to obtain this interface from the Windows provided implementations of for the JPEG decoder, , , and .

    +
    + + dn302093 + IWICPlanarBitmapSourceTransform + IWICPlanarBitmapSourceTransform +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Use this method to determine if a desired planar output is supported and allow the caller to choose an optimized code path if it is. Otherwise, callers should fall back to or and retrieve interleaved pixels.

    The following transforms can be checked:

    • Determine if the flip/rotate option specified via is supported.
    • Determine if the requested planar pixel format configuration is supported.
    • Determine the closest dimensions the implementation can natively scale to given the desired dimensions. +

    When a transform is supported, this method returns the description of the resulting planes in the pPlaneDescriptions parameter. +

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    Check the value of pfIsSupported to determine if the transform is supported via . If this method fails, the output parameters for width, height, and plane descriptions are zero initialized.Other return values indicate failure.

    + + dn302095 + HRESULT IWICPlanarBitmapSourceTransform::DoesSupportTransform([InOut] unsigned int* puiWidth,[InOut] unsigned int* puiHeight,[In] WICBitmapTransformOptions dstTransform,[In] WICPlanarOptions dstPlanarOptions,[In, Buffer] const GUID* pguidDstFormats,[Out, Buffer] WICBitmapPlaneDescription* pPlaneDescriptions,[In] unsigned int cPlanes,[Out] BOOL* pfIsSupported) + IWICPlanarBitmapSourceTransform::DoesSupportTransform +
    + + +

    Copies pixels into the destination planes. Configured by the supplied input parameters.

    If a dstTransform, scale, or format conversion is specified, cbStride is the transformed stride and is based on the destination pixel format of the pDstPlanes parameter, not the original source's pixel format.

    +
    +

    The source rectangle of pixels to copy.

    +

    The width to scale the source bitmap. This parameter must be equal to a value obtainable through IWICPlanarBitmapSourceTransform:: DoesSupportTransform.

    +

    The height to scale the source bitmap. This parameter must be equal to a value obtainable through IWICPlanarBitmapSourceTransform:: DoesSupportTransform.

    +

    The desired rotation or flip to perform prior to the pixel copy. A rotate can be combined with a flip horizontal or a flip vertical, see .

    +

    Used to specify additional configuration options for the transform. See for more detail.

    WIC JPEG Decoder: can be specified to retain the subsampling ratios when downscaling. By default, the JPEG decoder attempts to preserve quality by downscaling only the Y plane in some cases, changing the image to 4:4:4 chroma subsampling.

    +

    Specifies the pixel format and output buffer for each component plane. The number of planes and pixel format of each plane must match values obtainable through .

    +

    The number of component planes specified by the pDstPlanes parameter.

    +

    If the specified scale, flip/rotate, and planar format configuration is not supported this method fails with . You can check if a transform is supported by calling .

    + +

    WIC JPEG Decoder: + Depending on the configured chroma subsampling of the image, the source rectangle has the following restrictions: +

    Chroma SubsamplingX CoordinateY CoordinateChroma WidthChroma Height
    4:2:0Multiple of 2Multiple of 2lumaWidth / 2 Rounded up to the nearest integer.lumaHeight / 2 Rounded up to the nearest integer.
    4:2:2Multiple of 2AnylumaWidth / 2 Rounded up to the nearest integer.lumaHeight
    4:4:4AnyAnyllumaWidthllumaHeight
    4:4:0AnyMultiple of 2lumaWidthllumaHeight / 2 Rounded up to the nearest integer.

    ?

    The pDstPlanes parameter supports the following pixel formats.

    Plane CountPlane 1Plane 2Plane 3
    3
    2N/A

    ?

    +
    + + dn302094 + HRESULT IWICPlanarBitmapSourceTransform::CopyPixels([In, Optional] const WICRect* prcSource,[In] unsigned int uiWidth,[In] unsigned int uiHeight,[In] WICBitmapTransformOptions dstTransform,[In] WICPlanarOptions dstPlanarOptions,[In, Buffer] const WICBitmapPlane* pDstPlanes,[In] unsigned int cPlanes) + IWICPlanarBitmapSourceTransform::CopyPixels +
    + + +

    Allows a format converter to be initialized with a planar source. You can use QueryInterface to obtain this interface from the Windows provided implementation of .

    +
    + + dn302096 + IWICPlanarFormatConverter + IWICPlanarFormatConverter +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Initializes a format converter with a planar source, and specifies the interleaved output pixel format.

    +
    +

    An array of that represents image planes.

    +

    The number of component planes specified by the planes parameter.

    +

    The destination interleaved pixel format.

    +

    The used for conversion.

    +

    The palette to use for conversion.

    +

    The alpha threshold to use for conversion.

    +

    The palette translation type to use for conversion.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn302098 + HRESULT IWICPlanarFormatConverter::Initialize([In, Buffer] IWICBitmapSource** ppPlanes,[In] unsigned int cPlanes,[In] const GUID& dstFormat,[In] WICBitmapDitherType dither,[In, Optional] IWICPalette* pIPalette,[In] double alphaThresholdPercent,[In] WICBitmapPaletteType paletteTranslate) + IWICPlanarFormatConverter::Initialize +
    + + +

    Initializes a format converter with a planar source, and specifies the interleaved output pixel format.

    +
    +

    An array of that represents image planes.

    +

    The number of component planes specified by the planes parameter.

    +

    The destination interleaved pixel format.

    +

    The used for conversion.

    +

    The palette to use for conversion.

    +

    The alpha threshold to use for conversion.

    +

    The palette translation type to use for conversion.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn302098 + HRESULT IWICPlanarFormatConverter::Initialize([In, Buffer] IWICBitmapSource** ppPlanes,[In] unsigned int cPlanes,[In] const GUID& dstFormat,[In] WICBitmapDitherType dither,[In, Optional] IWICPalette* pIPalette,[In] double alphaThresholdPercent,[In] WICBitmapPaletteType paletteTranslate) + IWICPlanarFormatConverter::Initialize +
    + + +

    Initializes a format converter with a planar source, and specifies the interleaved output pixel format.

    +
    +

    An array of that represents image planes.

    +

    The number of component planes specified by the planes parameter.

    +

    The destination interleaved pixel format.

    +

    The used for conversion.

    +

    The palette to use for conversion.

    +

    The alpha threshold to use for conversion.

    +

    The palette translation type to use for conversion.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + dn302098 + HRESULT IWICPlanarFormatConverter::Initialize([In, Buffer] IWICBitmapSource** ppPlanes,[In] unsigned int cPlanes,[In] const GUID& dstFormat,[In] WICBitmapDitherType dither,[In, Optional] IWICPalette* pIPalette,[In] double alphaThresholdPercent,[In] WICBitmapPaletteType paletteTranslate) + IWICPlanarFormatConverter::Initialize +
    + + +

    Query if the format converter can convert from one format to another.

    +
    +

    An array of WIC pixel formats that represents source image planes.

    +

    The number of source pixel formats specified by the pSrcFormats parameter.

    +

    The destination interleaved pixel format.

    +

    True if the conversion is supported.

    +

    If the conversion is not supported, this method returns , but *pfCanConvert is set to .

    If this method fails, the out parameter pfCanConvert is invalid.

    + +

    To specify an interleaved input pixel format, provide a length 1 array to pSrcPixelFormats.

    +
    + + dn302097 + HRESULT IWICPlanarFormatConverter::CanConvert([In, Buffer] const GUID* pSrcPixelFormats,[In] unsigned int cSrcPlanes,[In] const GUID& dstPixelFormat,[Out] BOOL* pfCanConvert) + IWICPlanarFormatConverter::CanConvert +
    + + +

    interface is documented only for compliance; its use is not recommended and may be altered or unavailable in the future. Instead, and use RegisterProgressNotification. +

    +
    + + ee719775 + IWICProgressCallback + IWICProgressCallback +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Notify method is documented only for compliance; its use is not recommended and may be altered or unavailable in the future. Instead, and use RegisterProgressNotification. +

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719776 + HRESULT IWICProgressCallback::Notify([In] unsigned int uFrameNum,[In] WICProgressOperation operation,[In] double dblProgress) + IWICProgressCallback::Notify +
    + + +

    Exposes methods for obtaining information about and controlling progressive decoding.

    +
    + +

    Images can only be progressively decoded if they were progressively encoded. Progressive images automatically start at the highest (best quality) progressive level. The caller must manually set the decoder to a lower progressive level.

    E_NOTIMPL is returned if the codec does not support progressive level decoding.

    +
    + + ee719778 + IWICProgressiveLevelControl + IWICProgressiveLevelControl +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the number of levels of progressive decoding supported by the CODEC.

    +
    + +

    Users should not use this function to iterate through the progressive levels of a progressive JPEG image. JPEG progressive levels are determined by the image and do not have a fixed level count. Using this method will force the application to wait for all progressive levels to be downloaded before it can return. Instead, applications should use the following code to iterate through the progressive levels of a progressive JPEG image.

    +
    + + ee719780 + GetLevelCount + GetLevelCount + HRESULT IWICProgressiveLevelControl::GetLevelCount([Out] unsigned int* pcLevels) +
    + + +

    Gets or sets the decoder's current progressive level.

    +
    + +

    The level always defaults to the highest progressive level. In order to decode a lower progressive level, SetCurrentLevel must first be called.

    +
    + + ee719779 + GetCurrentLevel / SetCurrentLevel + GetCurrentLevel + HRESULT IWICProgressiveLevelControl::GetCurrentLevel([Out] unsigned int* pnLevel) +
    + + +

    Gets the number of levels of progressive decoding supported by the CODEC.

    +
    +

    Indicates the number of levels supported by the CODEC.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Users should not use this function to iterate through the progressive levels of a progressive JPEG image. JPEG progressive levels are determined by the image and do not have a fixed level count. Using this method will force the application to wait for all progressive levels to be downloaded before it can return. Instead, applications should use the following code to iterate through the progressive levels of a progressive JPEG image.

    +
    + + ee719780 + HRESULT IWICProgressiveLevelControl::GetLevelCount([Out] unsigned int* pcLevels) + IWICProgressiveLevelControl::GetLevelCount +
    + + +

    Gets the decoder's current progressive level.

    +
    +

    Indicates the current level specified.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The level always defaults to the highest progressive level. In order to decode a lower progressive level, SetCurrentLevel must first be called.

    +
    + + ee719779 + HRESULT IWICProgressiveLevelControl::GetCurrentLevel([Out] unsigned int* pnLevel) + IWICProgressiveLevelControl::GetCurrentLevel +
    + + +

    Specifies the level to retrieve on the next call to CopyPixels.

    +
    + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    A call does not have to request every level supported. If a caller requests level 1, without having previously requested level 0, the bits returned by the next call to CopyPixels will include both levels.

    If the requested level is invalid, the error returned is .

    +
    + + ee719781 + HRESULT IWICProgressiveLevelControl::SetCurrentLevel([In] unsigned int nLevel) + IWICProgressiveLevelControl::SetCurrentLevel +
    + + +

    Represents a Windows Imaging Component (WIC) stream for referencing imaging and metadata content.

    +
    + +

    Decoders and metadata handlers are expected to create sub streams of whatever stream they hold when handing off control for embedded metadata to another metadata handler. If the stream is not restricted then use MAXLONGLONG as the max size and offset 0.

    The interface methods do not enable you to provide a file sharing option. To create a file stream for an image, use the SHCreateStreamOnFileEx function. This stream can then be used to create an using the CreateDecoderFromStream method.

    +
    + + ee719782 + IWICStream + IWICStream +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Initializes a stream from another stream. Access rights are inherited from the underlying stream.

    +
    +

    The initialize stream.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + ee719789 + HRESULT IWICStream::InitializeFromIStream([In, Optional] IStream* pIStream) + IWICStream::InitializeFromIStream +
    + + +

    Initializes a stream from a particular file.

    +
    +

    The file used to initialize the stream.

    +

    The desired file access mode.

    ValueMeaning
    GENERIC_READ

    Read access.

    GENERIC_WRITE

    Write access.

    ?

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The interface methods do not enable you to provide a file sharing option. To create a shared file stream for an image, use the SHCreateStreamOnFileEx function. This stream can then be used to create an using the CreateDecoderFromStream method.

    +
    + + ee719788 + HRESULT IWICStream::InitializeFromFilename([In] const wchar_t* wzFileName,[In] unsigned int dwDesiredAccess) + IWICStream::InitializeFromFilename +
    + + +

    Initializes a stream to treat a block of memory as a stream. The stream cannot grow beyond the buffer size.

    +
    +

    Pointer to the buffer used to initialize the stream.

    +

    The size of buffer.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method should be avoided whenever possible. The caller is responsible for ensuring the memory block is valid for the lifetime of the stream when using InitializeFromMemory. A workaround for this behavior is to create an and use InitializeFromIStream to create the .

    If you require a growable memory stream, use CreateStreamOnHGlobal.

    +
    + + ee719792 + HRESULT IWICStream::InitializeFromMemory([In] void* pbBuffer,[In] unsigned int cbBufferSize) + IWICStream::InitializeFromMemory +
    + + +

    Initializes the stream as a substream of another stream.

    +
    +

    Pointer to the input stream.

    +

    The stream offset used to create the new stream.

    +

    The maximum size of the stream.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The stream functions with its own stream position, independent of the underlying stream but restricted to a region. All seek positions are relative to the sub region. It is allowed, though not recommended, to have multiple writable sub streams overlapping the same range.

    +
    + + ee719790 + HRESULT IWICStream::InitializeFromIStreamRegion([In, Optional] IStream* pIStream,[In] ULARGE_INTEGER ulOffset,[In] ULARGE_INTEGER ulMaxSize) + IWICStream::InitializeFromIStreamRegion +
    + + + Initializes a new instance of the class from a file. + + The factory. + Name of the file. + The file access. + ee690325 + HRESULT IWICImagingFactory::CreateStream([Out, Fast] IWICStream** ppIWICStream) + + + + Initializes a new instance of the class from a . + + The factory. + The stream. + ee719789 + HRESULT IWICStream::InitializeFromIStream([In, Optional] IStream* pIStream) + IWICStream::InitializeFromIStream + + + + Initializes a new instance of the class from an unmanaged memory through a . + + The factory. + The unmanaged memory stream. + ee719792 + HRESULT IWICStream::InitializeFromMemory([In] void* pbBuffer,[In] unsigned int cbBufferSize) + IWICStream::InitializeFromMemory + + + +

    Contains members that identify a pattern within an image file which can be used to identify a particular format.

    +
    + + ee719813 + WICBitmapPattern + WICBitmapPattern +
    + + +

    The offset the pattern is located in the file.

    +
    + + ee719813 + ULARGE_INTEGER Position + ULARGE_INTEGER Position +
    + + +

    The pattern length.

    +
    + + ee719813 + unsigned int Length + unsigned int Length +
    + + +

    The actual pattern.

    +
    + + ee719813 + unsigned char* Pattern + unsigned char Pattern +
    + + +

    The pattern mask.

    +
    + + ee719813 + unsigned char* Mask + unsigned char Mask +
    + + +

    The end of the stream.

    +
    + + ee719813 + BOOL EndOfStream + BOOL EndOfStream +
    + + +

    Specifies the pixel format, buffer, stride and size of a component plane for a planar pixel format.

    +
    + + dn302099 + WICBitmapPlane + WICBitmapPlane +
    + + +

    Describes the pixel format of the plane.

    +
    + + dn302099 + GUID Format + GUID Format +
    + + +

    Pointer to the buffer that holds the plane?s pixel components.

    +
    + + dn302099 + unsigned char* pbBuffer + unsigned char pbBuffer +
    + + +

    The stride of the buffer ponted to by pbData. Stride indicates the total number of bytes to go from the beginning of one scanline to the beginning of the next scanline.

    +
    + + dn302099 + unsigned int cbStride + unsigned int cbStride +
    + + +

    The total size of the buffer pointed to by pbBuffer.

    +
    + + dn302099 + unsigned int cbBufferSize + unsigned int cbBufferSize +
    + + +

    Specifies the pixel format and size of a component plane.

    +
    + + dn302100 + WICBitmapPlaneDescription + WICBitmapPlaneDescription +
    + + +

    Describes the pixel format of the plane.

    +
    + + dn302100 + GUID Format + GUID Format +
    + + +

    Component width of the plane.

    +
    + + dn302100 + unsigned int Width + unsigned int Width +
    + + +

    Component height of the plane.

    +
    + + dn302100 + unsigned int Height + unsigned int Height +
    + + +

    Specifies the and block information of a DDS format.

    +
    + + dn302103 + WICDdsFormatInfo + WICDdsFormatInfo +
    + + + No documentation. + + + dn302103 + DXGI_FORMAT DxgiFormat + DXGI_FORMAT DxgiFormat + + + + No documentation. + + + dn302103 + unsigned int BytesPerBlock + unsigned int BytesPerBlock + + + + No documentation. + + + dn302103 + unsigned int BlockWidth + unsigned int BlockWidth + + + + No documentation. + + + dn302103 + unsigned int BlockHeight + unsigned int BlockHeight + + + +

    Specifies the DDS image dimension, and alpha mode of contained data.

    +
    + + dn302104 + WICDdsParameters + WICDdsParameters +
    + + + No documentation. + + + dn302104 + unsigned int Width + unsigned int Width + + + + No documentation. + + + dn302104 + unsigned int Height + unsigned int Height + + + + No documentation. + + + dn302104 + unsigned int Depth + unsigned int Depth + + + + No documentation. + + + dn302104 + unsigned int MipLevels + unsigned int MipLevels + + + + No documentation. + + + dn302104 + unsigned int ArraySize + unsigned int ArraySize + + + + No documentation. + + + dn302104 + DXGI_FORMAT DxgiFormat + DXGI_FORMAT DxgiFormat + + + + No documentation. + + + dn302104 + WICDdsDimension Dimension + WICDdsDimension Dimension + + + + No documentation. + + + dn302104 + WICDdsAlphaMode AlphaMode + WICDdsAlphaMode AlphaMode + + + +

    This defines parameters that you can use to override the default parameters normally used when encoding an image.

    +
    + +

    If this parameter is not passed to the encoding API, the encoder uses these settings.

    • A pixel format of (, ).
    • An x and y DPI of 96.
    • The entire image bounds will be used for encoding.
    Note??The parameters as specified can't result in a scale. The encoder can use a larger portion of the input image based on the passed in DPI and the pixel width and height.? +
    + + jj125331 + WICImageParameters + WICImageParameters +
    + + +

    The pixel format to which the image is processed before it is written to the encoder.

    +
    + + jj125331 + D2D1_PIXEL_FORMAT PixelFormat + D2D1_PIXEL_FORMAT PixelFormat +
    + + +

    The DPI in the x dimension.

    +
    + + jj125331 + float DpiX + float DpiX +
    + + +

    The DPI in the y dimension.

    +
    + + jj125331 + float DpiY + float DpiY +
    + + +

    The top corner in pixels of the image space to be encoded to the destination.

    +
    + + jj125331 + float Top + float Top +
    + + +

    The left corner in pixels of the image space to be encoded to the destination.

    +
    + + jj125331 + float Left + float Left +
    + + +

    The width in pixels of the part of the image to write.

    +
    + + jj125331 + unsigned int PixelWidth + unsigned int PixelWidth +
    + + +

    The height in pixels of the part of the image to write.

    +
    + + jj125331 + unsigned int PixelHeight + unsigned int PixelHeight +
    + + + Initializes a new instance of the struct. + + The pixel format. + The dpi X. + The dpi Y. + The top. + The left. + Width in pixel. + Height in pixel. + + + +

    Represents a JPEG frame header.

    +
    + +

    Get the frame header for an image by calling .

    +
    + + dn903878 + WICJpegFrameHeader + WICJpegFrameHeader +
    + + +

    The width of the JPEG frame.

    +
    + + dn903878 + unsigned int Width + unsigned int Width +
    + + +

    The height of the JPEG frame.

    +
    + + dn903878 + unsigned int Height + unsigned int Height +
    + + +

    The transfer matrix of the JPEG frame.

    +
    + + dn903878 + WICJpegTransferMatrix TransferMatrix + WICJpegTransferMatrix TransferMatrix +
    + + +

    The scan type of the JPEG frame.

    +
    + + dn903878 + WICJpegScanType ScanType + WICJpegScanType ScanType +
    + + +

    The number of components in the frame.

    +
    + + dn903878 + unsigned int cComponents + unsigned int cComponents +
    + + +

    The component identifiers.

    +
    + + dn903878 + unsigned int ComponentIdentifiers + unsigned int ComponentIdentifiers +
    + + +

    The sample factors. Use one of the following constants, described in Constants.

    • WIC_JPEG_SAMPLE_FACTORS_ONE
    • WIC_JPEG_SAMPLE_FACTORS_THREE_420
    • WIC_JPEG_SAMPLE_FACTORS_THREE_422
    • WIC_JPEG_SAMPLE_FACTORS_THREE_440
    • WIC_JPEG_SAMPLE_FACTORS_THREE_444
    +
    + + dn903878 + unsigned int SampleFactors + unsigned int SampleFactors +
    + + +

    The format of the quantization table indices. Use one of the following constants, described in Constants.

    • WIC_JPEG_QUANTIZATION_BASELINE_ONE
    • WIC_JPEG_QUANTIZATION_BASELINE_THREE
    +
    + + dn903878 + unsigned int QuantizationTableIndices + unsigned int QuantizationTableIndices +
    + + +

    Represents a JPEG frame header.

    +
    + +

    Get the scan header for an image by calling .

    +
    + + dn903883 + WICJpegScanHeader + WICJpegScanHeader +
    + + +

    The number of components in the scan.

    +
    + + dn903883 + unsigned int cComponents + unsigned int cComponents +
    + + +

    The interval of reset markers within the scan.

    +
    + + dn903883 + unsigned int RestartInterval + unsigned int RestartInterval +
    + + +

    The component identifiers.

    +
    + + dn903883 + unsigned int ComponentSelectors + unsigned int ComponentSelectors +
    + + +

    The format of the quantization table indices. Use one of the following constants, described in Constants.

    • WIC_JPEG_HUFFMAN_BASELINE_ONE
    • WIC_JPEG_HUFFMAN_BASELINE_THREE
    +
    + + dn903883 + unsigned int HuffmanTableIndices + unsigned int HuffmanTableIndices +
    + + +

    The start of the spectral selection.

    +
    + + dn903883 + unsigned char StartSpectralSelection + unsigned char StartSpectralSelection +
    + + +

    The end of the spectral selection.

    +
    + + dn903883 + unsigned char EndSpectralSelection + unsigned char EndSpectralSelection +
    + + +

    The successive approximation high.

    +
    + + dn903883 + unsigned char SuccessiveApproximationHigh + unsigned char SuccessiveApproximationHigh +
    + + +

    The successive approximation low.

    +
    + + dn903883 + unsigned char SuccessiveApproximationLow + unsigned char SuccessiveApproximationLow +
    + + +

    Defines raw codec capabilites.

    +
    + + ee719857 + WICRawCapabilitiesInfo + WICRawCapabilitiesInfo +
    + + +

    Size of the structure.

    +
    + + ee719857 + unsigned int cbSize + unsigned int cbSize +
    + + +

    The codec's major version.

    +
    + + ee719857 + unsigned int CodecMajorVersion + unsigned int CodecMajorVersion +
    + + +

    The codec's minor version.

    +
    + + ee719857 + unsigned int CodecMinorVersion + unsigned int CodecMinorVersion +
    + + +

    The of exposure compensation support.

    +
    + + ee719857 + WICRawCapabilities ExposureCompensationSupport + WICRawCapabilities ExposureCompensationSupport +
    + + +

    The of contrast support.

    +
    + + ee719857 + WICRawCapabilities ContrastSupport + WICRawCapabilities ContrastSupport +
    + + +

    The of RGB white point support.

    +
    + + ee719857 + WICRawCapabilities RGBWhitePointSupport + WICRawCapabilities RGBWhitePointSupport +
    + + +

    The of support.

    +
    + + ee719857 + WICRawCapabilities NamedWhitePointSupport + WICRawCapabilities NamedWhitePointSupport +
    + + +

    The mask.

    +
    + + ee719857 + unsigned int NamedWhitePointSupportMask + unsigned int NamedWhitePointSupportMask +
    + + +

    The of kelvin white point support.

    +
    + + ee719857 + WICRawCapabilities KelvinWhitePointSupport + WICRawCapabilities KelvinWhitePointSupport +
    + + +

    The of gamma support.

    +
    + + ee719857 + WICRawCapabilities GammaSupport + WICRawCapabilities GammaSupport +
    + + +

    The of tint support.

    +
    + + ee719857 + WICRawCapabilities TintSupport + WICRawCapabilities TintSupport +
    + + +

    The of saturation support.

    +
    + + ee719857 + WICRawCapabilities SaturationSupport + WICRawCapabilities SaturationSupport +
    + + +

    The of sharpness support.

    +
    + + ee719857 + WICRawCapabilities SharpnessSupport + WICRawCapabilities SharpnessSupport +
    + + +

    The of noise reduction support.

    +
    + + ee719857 + WICRawCapabilities NoiseReductionSupport + WICRawCapabilities NoiseReductionSupport +
    + + +

    The of destination color profile support.

    +
    + + ee719857 + WICRawCapabilities DestinationColorProfileSupport + WICRawCapabilities DestinationColorProfileSupport +
    + + +

    The of tone curve support.

    +
    + + ee719857 + WICRawCapabilities ToneCurveSupport + WICRawCapabilities ToneCurveSupport +
    + + +

    The of rotation support.

    +
    + + ee719857 + WICRawRotationCapabilities RotationSupport + WICRawRotationCapabilities RotationSupport +
    + + +

    The of support.

    +
    + + ee719857 + WICRawCapabilities RenderModeSupport + WICRawCapabilities RenderModeSupport +
    + + +

    Represents a raw image tone curve.

    +
    + + ee719861 + WICRawToneCurve + WICRawToneCurve +
    + + +

    The number of tone curve points.

    +
    + + ee719861 + unsigned int cPoints + unsigned int cPoints +
    + + +

    The array of tone curve points.

    +
    + + ee719861 + WICRawToneCurvePoint aPoints[1] + WICRawToneCurvePoint aPoints +
    + + +

    Represents a raw image tone curve point.

    +
    + + ee719862 + WICRawToneCurvePoint + WICRawToneCurvePoint +
    + + +

    The tone curve input.

    +
    + + ee719862 + double Input + double Input +
    + + +

    The tone curve output.

    +
    + + ee719862 + double Output + double Output +
    + + + BitmapEncoderOptions used for encoding. + + + + + Initializes a new instance of the class. + + The property bag pointer. + + + + Gets or sets the image quality. + + + The image quality. + + + Range value: 0-1.0f + Applicable Codecs: JPEG, HDPhoto + + + + + Gets or sets the compression quality. + + + The compression quality. + + + Range value: 0-1.0f + Applicable Codecs: TIFF + + + + + Gets or sets a value indicating whether loss less compression is enabled. + + + true if [loss less]; otherwise, false. + + + Range value: true-false + Applicable Codecs: HDPhoto + + + + + Gets or sets the bitmap transform. + + + The bitmap transform. + + + Range value: + Applicable Codecs: JPEG + + + + + Gets or sets a value indicating whether [interlace option]. + + + true if [interlace option]; otherwise, false. + + + Range value: true-false + Applicable Codecs: PNG + + + + + Gets or sets the filter option. + + + The filter option. + + + Range value: + Applicable Codecs: PNG + + + + + Gets or sets the TIFF compression method. + + + The TIFF compression method. + + + Range value: + Applicable Codecs: TIFF + + + + + Gets or sets the luminance. + + + The luminance. + + + Range value: 64 Entries (DCT) + Applicable Codecs: JPEG + + + + + Gets or sets the chrominance. + + + The chrominance. + + + Range value: 64 Entries (DCT) + Applicable Codecs: JPEG + + + + + Gets or sets the JPEG Y Cr Cb subsampling. + + + The JPEG Y Cr Cb subsampling. + + + Range value: + Applicable Codecs: JPEG + + + + + Gets or sets a value indicating whether [suppress app0]. + + + true if [suppress app0]; otherwise, false. + + + Range value: true-false + Applicable Codecs: JPEG + + + + + Bmp bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + + + + Bmp bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + Gif bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + + + + Gif bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + Tiff bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + + + + Tiff bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + The namespace provides a managed WIC API. + + ee719902 + WIC + WIC + + + + Png bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + + + + Png bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + Tiff bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + + + + Tiff bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + Wmp bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + + + + WMP bitmap encoder using initialized with default guid . + + + + + Initializes a new instance of the class. + + The native PTR. + + + + Initializes a new instance of the class. + + The factory. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The output stream. + + + + Initializes a new instance of the class. + + The factory. + The GUID vendor ref. + The output stream. + +
    +
    diff --git a/RenderHookAPI/bin/SharpDX.Direct3D10.dll b/RenderHookAPI/bin/SharpDX.Direct3D10.dll new file mode 100644 index 0000000000000000000000000000000000000000..69dcf04ddba4ed18525512cfebe7d79897f6217d GIT binary patch literal 177152 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 O` + + + SharpDX.Direct3D10 + + + + + The assembly provides managed Direct3D10 API. + + bb205066 + Direct3D10 + Direct3D10 + + + +

    This interface encapsulates methods for retrieving data from the GPU asynchronously.

    +
    + +

    There are three types of asynchronous interfaces, all of which inherit this interface:

    • Interface - Queries information from the GPU.
    • Interface - Determines whether a piece of geometry should be processed or not depending on the results of a previous draw call.
    • Interface - Measures GPU performance.
    +
    + + bb173500 + ID3D10Asynchronous + ID3D10Asynchronous +
    + + + Get data from the GPU asynchronously. + + + GetData retrieves the data collected between calls to and . Certain queries only require a call to ID3D10Asynchronous::End in which case the data returned by GetData is accurate up to the last call to ID3D10Asynchronous::End (See ). If DataSize is 0, GetData is only used to check status where a return value of S_OK indicates that data is available to give to an application, and a return value of S_FALSE indicates data is not yet available. It is invalid to invoke this function on a predicate created with the flag D3D10_QUERY_MISCFLAG_PREDICATEHINT. If the asynchronous interface that calls this function is , then the following table applies. Query TypeOutput Data TypeSupports Begin Method EVENTBOOLNO OCCLUSIONUINT64YES TIMESTAMPUINT64NO TIMESTAMP_DISJOINTQUERYDATA_TIMESTAMP_DISJOINTYES PIPELINE_STATISTICSQUERYDATA_PIPELINE_STATISTICSYES OCCLUSION_PREDICATEBOOLYES SO_STATISTICSQUERYDATA_SO_STATISTICSYES SO_OVERFLOW_PREDICATEBOOLYES ? If the asynchronous interface that calls this API is , then the following applies. Counter TypeOutput Data TypeUnits GPU_IDLEFLOAT32fraction of time VERTEX_PROCESSINGFLOAT32fraction of time GEOMETRY_PROCESSINGFLOAT32fraction of time PIXEL_PROCESSINGFLOAT32fraction of time OTHER_GPU_PROCESSINGFLOAT32fraction of time HOST_ADAPTER_BANDWIDTH_UTILIZATIONFLOAT32fraction of theoretical maximum LOCAL_VIDMEM_BANDWIDTH_UTILIZATIONFLOAT32fraction of theoretical maximum VERTEX_THROUGHPUT_UTILIZATIONFLOAT32fraction of theoretical maximum TRISETUP_THROUGHPUT_UTILIZATIONFLOAT32fraction of theoretical maximum FILLRATE_THROUGHPUT_UTILIZATIONFLOAT32fraction of theoretical maximum VERTEXSHADER_MEMORY_LIMITEDFLOAT32fraction of time VERTEXSHADER_COMPUTATION_LIMITEDFLOAT32fraction of time GEOMETRYSHADER_MEMORY_LIMITEDFLOAT32fraction of time GEOMETRYSHADER_COMPUTATION_LIMITEDFLOAT32fraction of time PIXELSHADER_MEMORY_LIMITEDFLOAT32fraction of time PIXELSHADER_COMPUTATION_LIMITEDFLOAT32fraction of time POST_TRANSFORM_CACHE_HIT_RATEFLOAT32fraction TEXTURE_CACHE_HIT_RATEFLOAT32fraction ? The value returned by a GPU_IDLE, VERTEX_PROCESSING, GEOMETRY_PROCESSING, PIXEL_PROCESSING, or OTHER_GPU_PROCESSING counter may be different depending on the number of parallel counters that exist on a video card, and those values can be interpreted with the following equation: ? Equation to interpret the number of parallel counters ? The number of parallel counters that a video card has is available from NumDetectableParallelUnits in , and it can be retrieved by calling . + + If this function succeeds, returns a containing the asynchronous data sent from the GPU. + HRESULT ID3D10Asynchronous::GetData([Out, Buffer, Optional] void* pData,[In] int DataSize,[In] int GetDataFlags) + + + + Get data from the GPU asynchronously. + + + GetData retrieves the data collected between calls to and . Certain queries only require a call to ID3D10Asynchronous::End in which case the data returned by GetData is accurate up to the last call to ID3D10Asynchronous::End (See ). If DataSize is 0, GetData is only used to check status where a return value of S_OK indicates that data is available to give to an application, and a return value of S_FALSE indicates data is not yet available. It is invalid to invoke this function on a predicate created with the flag D3D10_QUERY_MISCFLAG_PREDICATEHINT. If the asynchronous interface that calls this function is , then the following table applies. Query TypeOutput Data TypeSupports Begin Method EVENTBOOLNO OCCLUSIONUINT64YES TIMESTAMPUINT64NO TIMESTAMP_DISJOINTQUERYDATA_TIMESTAMP_DISJOINTYES PIPELINE_STATISTICSQUERYDATA_PIPELINE_STATISTICSYES OCCLUSION_PREDICATEBOOLYES SO_STATISTICSQUERYDATA_SO_STATISTICSYES SO_OVERFLOW_PREDICATEBOOLYES ? If the asynchronous interface that calls this API is , then the following applies. Counter TypeOutput Data TypeUnits GPU_IDLEFLOAT32fraction of time VERTEX_PROCESSINGFLOAT32fraction of time GEOMETRY_PROCESSINGFLOAT32fraction of time PIXEL_PROCESSINGFLOAT32fraction of time OTHER_GPU_PROCESSINGFLOAT32fraction of time HOST_ADAPTER_BANDWIDTH_UTILIZATIONFLOAT32fraction of theoretical maximum LOCAL_VIDMEM_BANDWIDTH_UTILIZATIONFLOAT32fraction of theoretical maximum VERTEX_THROUGHPUT_UTILIZATIONFLOAT32fraction of theoretical maximum TRISETUP_THROUGHPUT_UTILIZATIONFLOAT32fraction of theoretical maximum FILLRATE_THROUGHPUT_UTILIZATIONFLOAT32fraction of theoretical maximum VERTEXSHADER_MEMORY_LIMITEDFLOAT32fraction of time VERTEXSHADER_COMPUTATION_LIMITEDFLOAT32fraction of time GEOMETRYSHADER_MEMORY_LIMITEDFLOAT32fraction of time GEOMETRYSHADER_COMPUTATION_LIMITEDFLOAT32fraction of time PIXELSHADER_MEMORY_LIMITEDFLOAT32fraction of time PIXELSHADER_COMPUTATION_LIMITEDFLOAT32fraction of time POST_TRANSFORM_CACHE_HIT_RATEFLOAT32fraction TEXTURE_CACHE_HIT_RATEFLOAT32fraction ? The value returned by a GPU_IDLE, VERTEX_PROCESSING, GEOMETRY_PROCESSING, PIXEL_PROCESSING, or OTHER_GPU_PROCESSING counter may be different depending on the number of parallel counters that exist on a video card, and those values can be interpreted with the following equation: ? Equation to interpret the number of parallel counters ? The number of parallel counters that a video card has is available from NumDetectableParallelUnits in , and it can be retrieved by calling . + + Optional flags. Can be 0 or any combination of the flags enumerated by . + If this function succeeds, returns a containing the asynchronous data sent from the GPU. + HRESULT ID3D10Asynchronous::GetData([Out, Buffer, Optional] void* pData,[In] int DataSize,[In] int GetDataFlags) + + + + Gets a value indicating whether or not data is available for consumption. + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Starts the collection of GPU data.

    +
    + +

    Calling Begin starts the asynchronous collection of GPU data. Calling causes data collection to stop. See Interface for additional information.

    +
    + + bb173501 + void ID3D10Asynchronous::Begin() + ID3D10Asynchronous::Begin +
    + + +

    Ends the collection of GPU data.

    +
    + +

    Calling starts the asynchronous collection of GPU data. Calling causes data collection to stop. See Interface for additional information.

    +
    + + bb173502 + void ID3D10Asynchronous::End() + ID3D10Asynchronous::End +
    + + +

    Get data from the GPU asynchronously.

    +
    +

    Address of memory that will receive the data. If null, GetData will be used only to check status. The type of data output depends on the type of asynchronous interface. See Remarks.

    +

    Size of the data to retrieve or 0. This value can be obtained with . Must be 0 when pData is null.

    +

    Optional flags. Can be 0 or any combination of the flags enumerated by .

    +

    If this function succeeds, it returns . Otherwise, possible return values are the following:

    • S_FALSE
    + +

    GetData retrieves the data collected between calls to and . Certain queries only require a call to in which case the data returned by GetData is accurate up to the last call to (See Interface).

    If DataSize is 0, GetData is only used to check status where a return value of indicates that data is available to give to an application, and a return value of S_FALSE indicates data is not yet available.

    It is invalid to invoke this function on a predicate created with the flag D3D10_QUERY_MISCFLAG_PREDICATEHINT.

    If the asynchronous interface that calls this function is Interface, then the following table applies.

    Query TypeOutput Data TypeSupports Begin Method
    NO
    UINT64YES
    UINT64NO
    YES
    YES
    YES
    YES
    YES

    ?

    If the asynchronous interface that calls this API is Interface, then the following applies.

    Counter TypeOutput Data TypeUnits
    FLOAT32fraction of time
    FLOAT32fraction of time
    FLOAT32fraction of time
    FLOAT32fraction of time
    FLOAT32fraction of time
    FLOAT32fraction of theoretical maximum
    FLOAT32fraction of theoretical maximum
    FLOAT32fraction of theoretical maximum
    FLOAT32fraction of theoretical maximum
    FLOAT32fraction of theoretical maximum
    FLOAT32fraction of time
    FLOAT32fraction of time
    FLOAT32fraction of time
    FLOAT32fraction of time
    FLOAT32fraction of time
    FLOAT32fraction of time
    FLOAT32fraction
    FLOAT32fraction

    ?

    The value returned by a , , , , or counter may be different depending on the number of parallel counters that exist on a video card, and those values can be interpreted with the following equation:

    The number of parallel counters that a video card has is available from NumDetectableParallelUnits in , and it can be retrieved by calling .

    +
    + + bb173503 + HRESULT ID3D10Asynchronous::GetData([Out, Buffer, Optional] void* pData,[In] unsigned int DataSize,[In] unsigned int GetDataFlags) + ID3D10Asynchronous::GetData +
    + + +

    Get the size of the data (in bytes) that is output when calling .

    +
    +

    Size of the data (in bytes) that is output when calling GetData.

    + + bb173504 + unsigned int ID3D10Asynchronous::GetDataSize() + ID3D10Asynchronous::GetDataSize +
    + + +

    This blend-state interface accesses blending state for a Direct3D 10.0 device for the output-merger stage.

    +
    + +

    Blending combines two pixel values. You have control over how the pixels are blended by using a predefined set of blending operations, as well as preblending operations. The Blending Block Diagram shows conceptually how blending works.

    To create a blend-state interface, call . To initialize the blend state, call .

    +
    + + bb173505 + ID3D10BlendState + ID3D10BlendState +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the blend state.

    +
    + + bb173506 + GetDesc + GetDesc + void ID3D10BlendState::GetDesc([Out] D3D10_BLEND_DESC* pDesc) +
    + + +

    Get the blend state.

    +
    +

    A reference to the blend state (see ).

    + + bb173506 + void ID3D10BlendState::GetDesc([Out] D3D10_BLEND_DESC* pDesc) + ID3D10BlendState::GetDesc +
    + + +

    This blend-state interface accesses blending state for a Direct3D 10.1 device for the output-merger stage.

    +
    + +

    Blending combines two pixel values. You have control over how the pixels are blended by using a predefined set of blending operations, as well as preblending operations. The Blending Block Diagram shows conceptually how blending works.

    To create a blend-state interface, call . To initialize the blend state, call .

    This method requires Windows Vista Service Pack 1.

    +
    + + bb694544 + ID3D10BlendState1 + ID3D10BlendState1 +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetDesc1 + GetDesc1 + void ID3D10BlendState1::GetDesc1([Out] D3D10_BLEND_DESC1* pDesc) + + + + No documentation. + + No documentation. + + void ID3D10BlendState1::GetDesc1([Out] D3D10_BLEND_DESC1* pDesc) + ID3D10BlendState1::GetDesc1 + + + +

    A buffer interface accesses a buffer resource, which is unstructured memory. Buffers typically store vertex or index data.

    +
    + +

    Three types of buffers can be created; vertex, index, and shader-constant buffers. To create a buffer resource, call .

    A buffer must be bound to the pipeline before it can be accessed. Buffers can be bound to the input-assembler stage by calls to and , and to the stream-output stage by a call to .

    Buffers can be bound to multiple pipeline stages simultaneously for reading. A buffer can also be bound to a single pipeline stage for writing; however, the same buffer cannot be bound for reading and writing simultaneously. For more information, see binding resources.

    +
    + + bb173510 + ID3D10Buffer + ID3D10Buffer +
    + + + Initializes a new instance of the class. + + The device with which to associate the buffer. + The description of the buffer. + + + + Initializes a new instance of the class. + + The device with which to associate the buffer. + Initial data used to initialize the buffer. + The description of the buffer. + + + + Initializes a new instance of the class. + + The device with which to associate the buffer. + The size, in bytes, of the buffer. + The usage pattern for the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + + + + Initializes a new instance of the class. + + The device with which to associate the buffer. + Initial data used to initialize the buffer. + The size, in bytes, of the buffer. + The usage pattern for the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + + + + Get a reference to the data contained in the resource and deny GPU access to the resource. + + + For the CPU to write the contents of a resource, the resource must be created with the dynamic usage flag, D3D10_USAGE_DYNAMIC. To both read and write those contents, the resource must be created with the staging usage flag, D3D10_USAGE_STAGING. (For more information about these flags, see .) ID3D10Buffer::Map will retrieve a reference to the resource data. For a discussion on how to access resources efficiently, see {{Copying and Accessing Resource Data (Direct3D 10)}}. Call to signify that the application has finished accessing the resource. ID3D10Buffer::Map has a few other restrictions. For example: The same buffer cannot be mapped multiple times; in other words, do not call ID3D10Buffer::Map on a buffer that is already mapped. Any buffer that is bound to the pipeline must be unmapped before any rendering operation (that is, ) can be executed. Differences between Direct3D 9 and Direct3D 10: ID3D10Buffer::Map in Direct3D 10 is analogous to resource {{Lock}} in Direct3D 9. ? + + Flag that specifies the CPU's permissions for the reading and writing of a resource. For possible values, see . + If this function succeeds returns a with the size this buffer. + HRESULT ID3D10Buffer::Map([In] D3D10_MAP MapType,[In] int MapFlags,[Out] void** ppData) + + + + Get a reference to the data contained in the resource and deny GPU access to the resource. + + + For the CPU to write the contents of a resource, the resource must be created with the dynamic usage flag, D3D10_USAGE_DYNAMIC. To both read and write those contents, the resource must be created with the staging usage flag, D3D10_USAGE_STAGING. (For more information about these flags, see .) ID3D10Buffer::Map will retrieve a reference to the resource data. For a discussion on how to access resources efficiently, see {{Copying and Accessing Resource Data (Direct3D 10)}}. Call to signify that the application has finished accessing the resource. ID3D10Buffer::Map has a few other restrictions. For example: The same buffer cannot be mapped multiple times; in other words, do not call ID3D10Buffer::Map on a buffer that is already mapped. Any buffer that is bound to the pipeline must be unmapped before any rendering operation (that is, ) can be executed. Differences between Direct3D 9 and Direct3D 10: ID3D10Buffer::Map in Direct3D 10 is analogous to resource {{Lock}} in Direct3D 9. ? + + Flag that specifies the CPU's permissions for the reading and writing of a resource. For possible values, see . + Flag that specifies what the CPU should do when the GPU is busy (see ). This flag is optional. + If this function succeeds returns a with the size this buffer. + HRESULT ID3D10Buffer::Map([In] D3D10_MAP MapType,[In] int MapFlags,[Out] void** ppData) + + + + Creates a new instance of the class. + + Type of the data to upload + The device with which to associate the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Initial data used to initialize the buffer. + The size, in bytes, of the buffer. If 0 is specified, sizeof(T) is used. + The usage pattern for the buffer. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + The size (in bytes) of the structure element for structured buffers. + An initialized buffer + + + + Creates a new instance of the class. + + Type of the data to upload + The device with which to associate the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Initial data used to initialize the buffer. + The size, in bytes, of the buffer. If 0 is specified, sizeof(T) is used. + The usage pattern for the buffer. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + The size (in bytes) of the structure element for structured buffers. + An initialized buffer + + + + Creates a new instance of the class. + + Type of the data to upload + The device with which to associate the buffer. + Initial data used to initialize the buffer. + The description. + + An initialized buffer + + + + + Creates a new instance of the class. + + Type of the data to upload + The device with which to associate the buffer. + Initial data used to initialize the buffer. + The description. + + An initialized buffer + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of a buffer resource.

    +
    + + bb173511 + GetDesc + GetDesc + void ID3D10Buffer::GetDesc([Out] D3D10_BUFFER_DESC* pDesc) +
    + + +

    Get a reference to the data contained in the resource and deny GPU access to the resource.

    +
    +

    Flag that specifies the CPU's permissions for the reading and writing of a resource. For possible values, see .

    +

    Flag that specifies what the CPU should do when the GPU is busy (see ). This flag is optional.

    +

    Pointer to the buffer resource data.

    +

    If this function succeeds, it returns . The following list contains some of the reasons that Map can fail:

    • If MapFlags specifies and the GPU is not yet finished with the resource, returns .
    • returns if MapType includes any flags that permit reading and the hardware device (that is, the video card) has been removed.

    For more information about the preceding return values, see DXGI_ERROR.

    + +

    For the CPU to write the contents of a resource, the resource must be created with the dynamic usage flag, . To both read and write those contents, the resource must be created with the staging usage flag, . (For more information about these flags, see .) will retrieve a reference to the resource data. For a discussion on how to access resources efficiently, see Copying and Accessing Resource Data (Direct3D 10).

    Call to signify that the application has finished accessing the resource.

    has a few other restrictions. For example:

    • The same buffer cannot be mapped multiple times; in other words, do not call on a buffer that is already mapped.
    • Any buffer that is bound to the pipeline must be unmapped before any rendering operation (that is, ) can be executed.

    Differences between Direct3D 9 and Direct3D 10:

    in Direct3D 10 is analogous to resource Lock in Direct3D 9.

    ?

    +
    + + bb173512 + HRESULT ID3D10Buffer::Map([In] D3D10_MAP MapType,[In] D3D10_MAP_FLAG MapFlags,[Out] void** ppData) + ID3D10Buffer::Map +
    + + +

    Invalidate the reference to the resource retrieved by and reenable GPU access to the resource.

    +
    + +

    Differences between Direct3D 9 and Direct3D 10:

    Unmap() in Direct3D 10 is analogous to resource Unlock() in Direct3D 9.

    ?

    +
    + + bb173513 + void ID3D10Buffer::Unmap() + ID3D10Buffer::Unmap +
    + + +

    Get the properties of a buffer resource.

    +
    +

    Pointer to a resource description (see ) filled in by the method. This reference cannot be null.

    + + bb173511 + void ID3D10Buffer::GetDesc([Out] D3D10_BUFFER_DESC* pDesc) + ID3D10Buffer::GetDesc +
    + + +

    Describes a buffer resource.

    +
    + +

    This structure is used by to create buffer resources.

    In addition to this structure, there is also a derived structure in D3D10.h (CD3D10_BUFFER_DESC) which behaves like an inherited class to help create a buffer description.

    +
    + + bb204896 + D3D10_BUFFER_DESC + D3D10_BUFFER_DESC +
    + + + Initializes a new instance of the struct. + + The size in bytes. + The usage. + The bind flags. + The CPU access flags. + The option flags. + + + + No documentation. + + + bb204896 + unsigned int ByteWidth + unsigned int ByteWidth + + + + No documentation. + + + bb204896 + D3D10_USAGE Usage + D3D10_USAGE Usage + + + + No documentation. + + + bb204896 + D3D10_BIND_FLAG BindFlags + D3D10_BIND_FLAG BindFlags + + + + No documentation. + + + bb204896 + D3D10_CPU_ACCESS_FLAG CPUAccessFlags + D3D10_CPU_ACCESS_FLAG CPUAccessFlags + + + + No documentation. + + + bb204896 + D3D10_RESOURCE_MISC_FLAG MiscFlags + D3D10_RESOURCE_MISC_FLAG MiscFlags + + + +

    This interface encapsulates methods for measuring GPU performance.

    +
    + +

    A counter can be created with .

    This is a derived class of Interface.

    Counter data is gathered by issuing an command, issuing some graphics commands, issuing an command, and then calling to get data about what happened in between the Begin and End calls. The data returned by GetData will be different depending on the type of counter. The call to End causes the data returned by GetData to be accurate up until the last call to End.

    Counters are best suited for profiling.

    For a list of the types of performance counters, see .

    +
    + + bb173514 + ID3D10Counter + ID3D10Counter +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The counter description. + The newly created object. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a counter description.

    +
    + + bb173515 + GetDesc + GetDesc + void ID3D10Counter::GetDesc([Out] D3D10_COUNTER_DESC* pDesc) +
    + + +

    Get a counter description.

    +
    +

    Pointer to a counter description (see ).

    + + bb173515 + void ID3D10Counter::GetDesc([Out] D3D10_COUNTER_DESC* pDesc) + ID3D10Counter::GetDesc +
    + + + Counter metadata that contains the type, name, units of measure, and a description of an existing counter. + + + + + Gets the data type of a counter (see ). + + The type. + + + + Gets the number of hardware counters that are needed for this counter type to be created. All instances of the same counter type use the same hardware counters. + + The hardware counter count. + + + + Gets a brief name for the counter. + + The name. + + + + Gets the units a counter measures. + + The units. + + + + Gets a description of the counter. + + The description. + + + +

    A depth-stencil-state interface accesses depth-stencil state which sets up the depth-stencil test for the output-merger stage.

    +
    + +

    Create a depth-stencil state object by calling .

    To initialize depth-stencil state, bind the depth-stencil-state object to the pipeline by calling .

    +
    + + bb173524 + ID3D10DepthStencilState + ID3D10DepthStencilState +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the depth-stencil state.

    +
    + + bb173525 + GetDesc + GetDesc + void ID3D10DepthStencilState::GetDesc([Out] D3D10_DEPTH_STENCIL_DESC* pDesc) +
    + + +

    Get the depth-stencil state.

    +
    +

    A reference to the depth-stencil state (see ).

    + + bb173525 + void ID3D10DepthStencilState::GetDesc([Out] D3D10_DEPTH_STENCIL_DESC* pDesc) + ID3D10DepthStencilState::GetDesc +
    + + +

    A depth-stencil-view interface accesses a texture resource during depth-stencil testing.

    +
    + +

    To create a depth-stencil view, call .

    To bind a depth-stencil view to the pipeline, call .

    +
    + + bb173526 + ID3D10DepthStencilView + ID3D10DepthStencilView +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the DepthStencil flag. + ID3D10Device::CreateDepthStencilView + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the DepthStencil flag. + A structure describing the to be created. + ID3D10Device::CreateDepthStencilView + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the depth-stencil view.

    +
    + + bb173527 + GetDesc + GetDesc + void ID3D10DepthStencilView::GetDesc([Out] D3D10_DEPTH_STENCIL_VIEW_DESC* pDesc) +
    + + +

    Get the depth-stencil view.

    +
    + No documentation. + + bb173527 + void ID3D10DepthStencilView::GetDesc([Out] D3D10_DEPTH_STENCIL_VIEW_DESC* pDesc) + ID3D10DepthStencilView::GetDesc +
    + + + Common Shader class. Provides a common set of methods for a Shader Stage. + TODO: check if usage of abstract is not introducing an unacceptable overhead... + + Type of the shader + + + + Maximum number of bindable constant buffers to a pipeline stage. + + + + + Maximum number of bindable resources to a pipeline stage. + + + + + Maximum number of bindable samplers to a pipeline stage. + + + + + Initializes a new instance of the class. + + The pointer. + + + + Gets the constant buffers used by the shader stage. + + Index into the device's zero-based array from which to begin retrieving constant buffers. + Number of buffers to retrieve. + An array of constant buffers. + + + + Gets the sampler states used by the shader stage. + + Index into the device's zero-based array from which to begin retrieving samplers. + Number of samplers to retrieve. + An array of sampler states. + + + + Gets the shader resources used by the shader stage. + + Index into the device's zero-based array from which to begin retrieving shader resources. + Number of resources to retrieve. + An array of shader resources. + + + + Sets a single constant buffer to be used by the shader stage. + + Index into the device's zero-based array to which to set the constant buffer. + constant buffer to set + + + + Sets a single sampler to be used by the shader stage. + + Index into the device's zero-based array to which to set the sampler. + sampler state to set + + + + Sets a single shader resource to be used by the shader stage. + + Index into the device's zero-based array to which to set the resource. + Resource view to attach + + + + Get the shader resources. + + + Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks. + + Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1). + The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot). + Array of {{shader resource view}} interfaces to be returned by the device. + void PSGetShaderResources([In] UINT StartSlot,[In] UINT NumViews,[Out, Buffer] ID3D10ShaderResourceView** ppShaderResourceViews) + + + + Get an array of sampler states from the shader pipeline stage. + + + Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks. + + Index into a zero-based array to begin getting samplers from (ranges from 0 to D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1). + Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot). + Array of sampler-state interface pointers (see ) to be returned by the device. + void PSGetSamplers([In] UINT StartSlot,[In] UINT NumSamplers,[Out, Buffer] ID3D10SamplerState** ppSamplers) + + + + Get the constant buffers used by the shader pipeline stage. + + + Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks. + + Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1). + Number of buffers to retrieve (ranges from 0 to D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot). + Array of constant buffer interface pointers (see ) to be returned by the method. + void PSGetConstantBuffers([In] UINT StartSlot,[In] UINT NumBuffers,[Out, Buffer] ID3D10Buffer** ppConstantBuffers) + + + + Bind an array of shader resources to the shader stage. + + + If an overlapping resource view is already bound to an output slot, such as a render target, then this API will fill the destination shader resource slot with NULL.For information about creating shader-resource views, see . The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1). + Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot). + Array of {{shader resource view}} interfaces to set to the device. + void PSSetShaderResources([In] UINT StartSlot,[In] UINT NumViews,[In, Buffer] const ID3D10ShaderResourceView** ppShaderResourceViews) + + + + Bind an array of shader resources to the shader stage. + + + If an overlapping resource view is already bound to an output slot, such as a render target, then this API will fill the destination shader resource slot with NULL.For information about creating shader-resource views, see . The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1). + Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot). + Array of {{shader resource view}} interfaces to set to the device. + void PSSetShaderResources([In] UINT StartSlot,[In] UINT NumViews,[In, Buffer] const ID3D10ShaderResourceView** ppShaderResourceViews) + + + + Set an array of sampler states to the shader pipeline stage. + + + Any sampler may be set to NULL; this invokes the default state, which is defined to be the following.StateDefault ValueFilterD3D10_FILTER_MIN_MAG_MIP_LINEARAddressUD3D10_TEXTURE_ADDRESS_CLAMPAddressVD3D10_TEXTURE_ADDRESS_CLAMPAddressWD3D10_TEXTURE_ADDRESS_CLAMPMipLODBias0MaxAnisotropy1ComparisonFuncD3D10_COMPARISON_NEVERBorderColor[0]1.0fBorderColor[1]1.0fBorderColor[2]1.0fBorderColor[3]1.0fMinLOD-FLT_MAXMaxLODFLT_MAX The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting samplers to (ranges from 0 to D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1). + Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot). + Pointer to an array of sampler-state interfaces (see ). See Remarks. + void PSSetSamplers([In] UINT StartSlot,[In] UINT NumSamplers,[In, Buffer] const ID3D10SamplerState** ppSamplers) + + + + Set an array of sampler states to the shader pipeline stage. + + + Any sampler may be set to NULL; this invokes the default state, which is defined to be the following.StateDefault ValueFilterD3D10_FILTER_MIN_MAG_MIP_LINEARAddressUD3D10_TEXTURE_ADDRESS_CLAMPAddressVD3D10_TEXTURE_ADDRESS_CLAMPAddressWD3D10_TEXTURE_ADDRESS_CLAMPMipLODBias0MaxAnisotropy1ComparisonFuncD3D10_COMPARISON_NEVERBorderColor[0]1.0fBorderColor[1]1.0fBorderColor[2]1.0fBorderColor[3]1.0fMinLOD-FLT_MAXMaxLODFLT_MAX The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting samplers to (ranges from 0 to D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - 1). + Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot). + Pointer to an array of sampler-state interfaces (see ). See Remarks. + void PSSetSamplers([In] UINT StartSlot,[In] UINT NumSamplers,[In, Buffer] const ID3D10SamplerState** ppSamplers) + + + + Set the constant buffers used by the shader pipeline stage. + + + The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1). + Number of buffers to set (ranges from 0 to D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot). + Array of constant buffers (see ) being given to the device. + void PSSetConstantBuffers([In] UINT StartSlot,[In] UINT NumBuffers,[In, Buffer] const ID3D10Buffer** ppConstantBuffers) + + + + Set the constant buffers used by the shader pipeline stage. + + + The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1). + Number of buffers to set (ranges from 0 to D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot). + Array of constant buffers (see ) being given to the device. + void PSSetConstantBuffers([In] UINT StartSlot,[In] UINT NumBuffers,[In, Buffer] const ID3D10Buffer** ppConstantBuffers) + + + +

    The device interface represents a virtual adapter for Direct3D 10.0; it is used to perform rendering and create Direct3D resources.

    +
    + +

    A device is created using .

    +
    + + bb173528 + ID3D10Device + ID3D10Device +
    + + + Constructor for a D3D10 Device. See for more information. + + + + + + Constructor for a D3D10 Device. See for more information. + + + + + + Constructor for a D3D10 Device. See for more information. + + + + + + + Constructor for a D3D10 Device. See for more information. + + + + + + + Initializes a new instance of the class along with a new used for rendering. + + The type of device to create. + A list of runtime layers to enable. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + + Initializes a new instance of the class along with a new used for rendering. + + The video adapter on which the device should be created. + A list of runtime layers to enable. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + + This overload has been deprecated. Use one of the alternatives that does not take both an adapter and a driver type. + + + + + Get the type, name, units of measure, and a description of an existing counter. + + The counter description. + Description of the counter + + + + Get the rendering predicate state. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + a boolean to fill with the predicate comparison value. FALSE upon device creation. + a reference to a predicate (see ). + void ID3D10Device::GetPredication([Out, Optional] ID3D10Predicate** ppPredicate,[Out, Optional] BOOL* pPredicateValue) + + + + Give a device access to a shared resource created on a different Direct3d device. + + The type of the resource we are gaining access to. + A resource handle. See remarks. + + This method returns a reference to the resource we are gaining access to. + + + To share a resource between two Direct3D 10 devices the resource must have been created with the flag, if it was created using the ID3D10Device interface. If it was created using the IDXGIDevice interface, then the resource is always shared. The REFIID, or GUID, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(ID3D10Buffer) will get the GUID of the interface to a buffer resource. When sharing a resource between two Direct3D 10 devices the unique handle of the resource can be obtained by querying the resource for the interface and then calling {{GetSharedHandle}}. + IDXGIResource* pOtherResource(NULL); + hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource ); + HANDLE sharedHandle; + pOtherResource->GetSharedHandle(&sharedHandle); + The only resources that can be shared are 2D non-mipmapped textures. To share a resource between a Direct3D 9 device and a Direct3D 10 device the texture must have been created using the pSharedHandle argument of {{CreateTexture}}. The shared Direct3D 9 handle is then passed to OpenSharedResource in the hResource argument. The following code illustrates the method calls involved. + sharedHandle = NULL; // must be set to NULL to create, can use a valid handle here to open in D3D9 + pDevice9->CreateTexture(..., pTex2D_9, &sharedHandle); + ... + pDevice10->OpenSharedResource(sharedHandle, __uuidof(ID3D10Resource), (void**)(&tempResource10)); + tempResource10->QueryInterface(__uuidof(ID3D10Texture2D), (void**)(&pTex2D_10)); + tempResource10->Release(); + // now use pTex2D_10 with pDevice10 + Textures being shared from D3D9 to D3D10 have the following restrictions. Textures must be 2D Only 1 mip level is allowed Texture must have default usage Texture must be write only MSAA textures are not allowed Bind flags must have SHADER_RESOURCE and RENDER_TARGET set Only R10G10B10A2_UNORM, R16G16B16A16_FLOAT and R8G8B8A8_UNORM formats are allowed If a shared texture is updated on one device must be called on that device. + + HRESULT ID3D10Device::OpenSharedResource([In] void* hResource,[In] GUID* ReturnedInterface,[Out, Optional] void** ppResource) + + + + Copy the entire contents of the source resource to the destination resource using the GPU. + + + This method is unusual in that it causes the GPU to perform the copy operation (similar to a memcpy by the CPU). As a result, it has a few restrictions designed for improving performance. For instance, the source and destination resources: Must be different resources. Must be the same {{type}}. Must have identical dimensions (including width, height, depth, and size as appropriate). Will only be copied. CopyResource does not support any stretch, color key, blend, or format conversions. Must have compatible {{formats}}, which means the formats must be identical or at least from the same type group. For example, a DXGI_FORMAT_R32G32B32_FLOAT texture can be copied to an DXGI_FORMAT_R32G32B32_UINT texture since both of these formats are in the DXGI_FORMAT_R32G32B32_TYPELESS group. May not be currently {{mapped}}. {{Immutable}}, and {{depth-stencil}} resources cannot be used as a destination. Resources created with {{multisampling capability}} cannot be used as either a source or destination. The method is an asynchronous call which may be added to the command-buffer queue. This attempts to remove pipeline stalls that may occur when copying data. See {{performance considerations}} for more details. An application that only needs to copy a portion of the data in a resource should use instead. Differences between Direct3D 10 and Direct3D 10.1: Direct3D 10.1 enables depth-stencil resources to be used as either a source or destination. Direct3D 10.1 enables multisampled resources to be used as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or if the source is multisampled and the destination is not multisampled (or vice versa), the call to ID3D10Device::CopyResource fails. It is possible to copy between prestructured+typed resources and block-compressed textures. See {{Format Conversion using Direct3D 10.1}}. ? + + A reference to the source resource (see ). + A reference to the destination resource (see ). + void ID3D10Device::CopyResource([In] ID3D10Resource* pDstResource,[In] ID3D10Resource* pSrcResource) + + + + Copy a region from a source resource to a destination resource. + + + The source box must be within the size of the source resource. The destination location is an absolute value (not a relative value). The destination location can be offset from the source location; however, the size of the region to copy (including the destination location) must fit in the destination resource. If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. {{D3D10CalcSubresource}} is a helper function for calculating subresource indexes. CopySubresourceRegion performs the copy on the GPU (similar to a memcpy by the CPU). As a consequence, the source and destination resources must meet the following criteria: Must be different subresources (although they can be from the same resource). Must be the same {{type}}. Must have compatible {{formats}} (the formats must either be identical or be from the same type group). For example, a DXGI_FORMAT_R32G32B32_FLOAT texture can be copied to an DXGI_FORMAT_R32G32B32_UINT texture because both of these formats are in the DXGI_FORMAT_R32G32B32_TYPELESS group. May not be currently {{mapped}}. CopySubresourceRegion supports only copy; it does not support any stretch, color key, blend, or format conversions. An application that needs to copy an entire resource should use instead. CopySubresourceRegion is an asynchronous call that the runtime can add to the command-buffer queue. This asynchronous behavior attempts to remove pipeline stalls that may occur when copying data. See {{performance considerations}} for more details. Differences between Direct3D 10 and Direct3D 10.1: Direct3D 10 has the following limitations: You cannot use a depth-stencil resource as a destination. You cannot use an immutable resource as a destination. You cannot use a multisampled texture as either a source or a destination Direct3D 10.1 has added support for the following features: You can use a depth-stencil buffer as a source or a destination. You can use multisampled resources as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or if the source is multisampled and the destination is not multisampled (or vice versa), the call to ID3D10Device::CopySubresourceRegion fails. You can copy between uncompressed and compressed resources. During copy, the format conversions that are specified in {{Format Conversion using Direct3D 10.1}} are supported automatically. The uncompressed resource must be at least prestructured, and typed. You must also account for the difference between the virtual and the physical size of the mipmap levels. ? Note??If you use CopySubresourceRegion with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. You must also pass 0 to the DstX, DstY, and DstZ parameters and NULL to the pSrcBox parameter. In addition, source and destination resources, which are represented by the pSrcResource and pDstResource parameters respectively, must have identical sample count values. Example The following code snippet copies a box (located at (120,100),(200,220)) from a source texture into a region (130,120),(210,240) in a destination texture. + D3D10_BOX sourceRegion; + sourceRegion.left = 120; + sourceRegion.right = 200; + sourceRegion.top = 100; + sourceRegion.bottom = 220; + sourceRegion.front = 0; + sourceRegion.back = 1; pd3dDevice->CopySubresourceRegion( pDestTexture, 0, 130, 120, 0, pSourceTexture, 0, &sourceRegion ); + + Notice that, for a 2D texture, front and back are always set to 0 and 1 respectively. + + A reference to the source resource (see ). + index of the source. + A 3D box (see ) that defines the source subresources that can be copied. If NULL, the entire source subresource is copied. The box must fit within the source resource. + A reference to the destination resource (see ). + index of the destination. + The x coordinate of the upper left corner of the destination region. + The y coordinate of the upper left corner of the destination region. + The z coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero. + void ID3D10Device::CopySubresourceRegion([In] ID3D10Resource* pDstResource,[In] int DstSubresource,[In] int DstX,[In] int DstY,[In] int DstZ,[In] ID3D10Resource* pSrcResource,[In] int SrcSubresource,[In, Optional] const D3D10_BOX* pSrcBox) + + + + Copy a multisampled resource into a non-multisampled resource. This API is most useful when re-using the resulting render target of one render pass as an input to a second render pass. + + + Both the source and destination resources must be the same {{resource type}} and have the same dimensions. The source and destination must have compatible formats. There are three scenarios for this: ScenarioRequirements Source and destination are prestructured and typedBoth the source and destination must have identical formats and that format must be specified in the Format parameter. One resource is prestructured and typed and the other is prestructured and typelessThe typed resource must have a format that is compatible with the typeless resource (i.e. the typed resource is DXGI_FORMAT_R32_FLOAT and the typeless resource is DXGI_FORMAT_R32_TYPELESS). The format of the typed resource must be specified in the Format parameter. Source and destination are prestructured and typelessBoth the source and destination must have the same typeless format (i.e. both must have DXGI_FORMAT_R32_TYPELESS), and the Format parameter must specify a format that is compatible with the source and destination (i.e. if both are DXGI_FORMAT_R32_TYPELESS then DXGI_FORMAT_R32_FLOAT or DXGI_FORMAT_R32_UINT could be specified in the Format parameter). ? + + Source resource. Must be multisampled. + The source subresource of the source resource. + Destination resource. Must be a created with the flag and be single-sampled. See . + A zero-based index, that identifies the destination subresource. See {{D3D10CalcSubresource}} for more details. + that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks. + void ID3D10Device::ResolveSubresource([In] ID3D10Resource* pDstResource,[In] int DstSubresource,[In] ID3D10Resource* pSrcResource,[In] int SrcSubresource,[In] DXGI_FORMAT Format) + + + + Copies data from the CPU to to a non-mappable subresource region. + + Type of the data to upload + A reference to the data to upload. + The destination resource. + The destination subresource. + The row pitch. + The depth pitch. + + + + Copies data from the CPU to to a non-mappable subresource region. + + Type of the data to upload + A reference to the data to upload. + The destination resource. + The destination subresource. + The row pitch. + The depth pitch. + + + + Copies data from the CPU to to a non-mappable subresource region. + + The source data. + The destination resource. + The destination subresource. + + + + Copies data from the CPU to to a non-mappable subresource region. + + The source data. + The destination resource. + The destination subresource. + The destination region within the resource. + + + + Get the flags used during the call to create the device with . + + A bitfield containing the flags used to create the device. See . + int ID3D10Device::GetCreationFlags() + + + + Gets or sets the debug-name for this object. + + + The debug name. + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Update nested inner interfaces pointer + + + Inner interface giving access to VertexShaderStage methods. + + + Inner interface giving access to PixelShaderStage methods. + + + Inner interface giving access to InputAssemblerStage methods. + + + Inner interface giving access to GeometryShaderStage methods. + + + Inner interface giving access to OutputMergerStage methods. + + + Inner interface giving access to StreamOutputStage methods. + + + Inner interface giving access to RasterizerStage methods. + + + +

    Get the reason why the device was removed.

    +
    + + bb173571 + GetDeviceRemovedReason + GetDeviceRemovedReason + HRESULT ID3D10Device::GetDeviceRemovedReason() +
    + + +

    Get or sets the exception-mode flags.

    +
    + +

    An exception-mode flag is used to elevate an error condition to a non-continuable exception.

    +
    + + bb173572 + GetExceptionMode / SetExceptionMode + GetExceptionMode + unsigned int ID3D10Device::GetExceptionMode() +
    + + +

    Draw indexed, non-instanced primitives.

    +
    +

    Number of indices to draw.

    +

    Index of the first index to use when accesssing the vertex buffer; begin at StartIndexLocation to index vertices from the vertex buffer.

    +

    Offset from the start of the vertex buffer to the first vertex.

    + +

    A draw API submits work to the rendering pipeline.

    If the sum of both indices is negative, the result of the function call is undefined.

    +
    + + bb173565 + void ID3D10Device::DrawIndexed([In] unsigned int IndexCount,[In] unsigned int StartIndexLocation,[In] int BaseVertexLocation) + ID3D10Device::DrawIndexed +
    + + +

    Draw non-indexed, non-instanced primitives.

    +
    +

    Number of vertices to draw.

    +

    Index of the first vertex, which is usually an offset in a vertex buffer; it could also be used as the first vertex id generated for a shader parameter marked with the SV_TargetId?system-value semantic.

    + +

    A draw API submits work to the rendering pipeline.

    The vertex data for a draw call normally comes from a vertex buffer that is bound to the pipeline. However, you could also provide the vertex data from a shader that has vertex data marked with the SV_VertexId?system-value semantic.

    +
    + + bb173563 + void ID3D10Device::Draw([In] unsigned int VertexCount,[In] unsigned int StartVertexLocation) + ID3D10Device::Draw +
    + + +

    Draw indexed, instanced primitives.

    +
    +

    Size of the index buffer used in each instance.

    +

    Number of instances to draw.

    +

    Index of the first index.

    +

    Index of the first vertex. The index is signed, which allows a negative index. If the negative index plus the index value from the index buffer are less than 0, the result is undefined.

    +

    Index of the first instance.

    + +

    A draw API submits work to the rendering pipeline.

    Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Indexing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data. For an example of instancing, see the Instancing10 Sample.

    +
    + + bb173566 + void ID3D10Device::DrawIndexedInstanced([In] unsigned int IndexCountPerInstance,[In] unsigned int InstanceCount,[In] unsigned int StartIndexLocation,[In] int BaseVertexLocation,[In] unsigned int StartInstanceLocation) + ID3D10Device::DrawIndexedInstanced +
    + + +

    Draw non-indexed, instanced primitives.

    +
    +

    Number of vertices to draw.

    +

    Number of instances to draw.

    +

    Index of the first vertex.

    +

    Index of the first instance.

    + +

    A draw API submits work to the rendering pipeline.

    Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. For an example of instancing, see the Instancing10 Sample.

    The vertex data for an instanced draw call normally comes from a vertex buffer that is bound to the pipeline. However, you could also provide the vertex data from a shader that has instanced data identified with a system-value semantic (SV_InstanceID).

    +
    + + bb173567 + void ID3D10Device::DrawInstanced([In] unsigned int VertexCountPerInstance,[In] unsigned int InstanceCount,[In] unsigned int StartVertexLocation,[In] unsigned int StartInstanceLocation) + ID3D10Device::DrawInstanced +
    + + +

    Set a rendering predicate.

    +
    +

    Pointer to a predicate (see ). A null value indicates "no" predication; in this case, the value of PredicateValue is irrelevent but will be preserved for .

    +

    If TRUE, rendering will be affected by when the predicate's conditions are met. If , rendering will be affected when the conditions are not met.

    + +

    The predicate must be in the "issued" or "signaled" state to be used for predication. While the predicate is set for predication, calls to and are invalid.

    This method is used to denote that subsequent rendering and resource manipulation commands are not actually performed if the resulting Predicate data of the Predicate is equal to the PredicateValue. However, some Predicates are only hints, so they may not actually prevent operations from being performed.

    The primary usefulness of Predication is to allow an application to issue graphics commands without taking the performance hit of spinning, waiting for to return. So, Predication can occur while returns S_FALSE. Another way to think of it: an application can also use Predication as a fallback, if it is possible that returns S_FALSE. If returns , the application can skip calling the graphics commands manually with it's own application logic.

    +
    + + bb173615 + void ID3D10Device::SetPredication([In, Optional] ID3D10Predicate* pPredicate,[In] BOOL PredicateValue) + ID3D10Device::SetPredication +
    + + +

    Draw geometry of an unknown size that was created by the geometry shader stage. See remarks.

    +
    + +

    A draw API submits work to the rendering pipeline.

    After data has been streamed out to SO stage buffers, those buffers can be again bound to the Input Assembler stage at input slot 0 and DrawAuto will draw them without the application needing to know the amount of data that was written to the buffers. A measurement of the amount of data written to the SO stage buffers is maintained internally when the data is streamed out. This means that the CPU does not need to fetch the measurement before re-binding the data that was streamed as input data. Although this amount is tracked internally, it is still the responsibility of applications to use input layouts to describe the format of the data in the SO stage buffers so that the layouts are available when the buffers are again bound to the input assembler.

    The following diagram shows the DrawAuto process.

    Calling DrawAuto does not change the state of the streaming-output buffers that were bound again as inputs.

    DrawAuto only works when drawing with one input buffer bound as an input to the IA stage at slot 0. Applications must create the SO buffer resource with both binding flags, and .

    This API does not support indexing or instancing.

    If an application needs to retrieve the size of the streaming-output buffer, it can query for statistics on streaming output by using .

    Example of using DrawAuto can be found in the ParticlesGS Sample and PipesGS Sample.

    +
    + + bb173564 + void ID3D10Device::DrawAuto() + ID3D10Device::DrawAuto +
    + + +

    Copy a region from a source resource to a destination resource.

    +
    +

    A reference to the destination resource (see ).

    +

    Subresource index of the destination.

    +

    The x coordinate of the upper left corner of the destination region.

    +

    The y coordinate of the upper left corner of the destination region.

    +

    The z coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero.

    +

    A reference to the source resource (see ).

    +

    Subresource index of the source.

    +

    A 3D box (see ) that defines the source subresource that can be copied. If null, the entire source subresource is copied. The box must fit within the source resource.

    An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, CopySubresourceRegion doesn't perform a copy operation.

    + +

    The source box must be within the size of the source resource. The destination location is an absolute value (not a relative value). The destination location can be offset from the source location; however, the size of the region to copy (including the destination location) must fit in the destination resource.

    If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels.

    D3D10CalcSubresource is a helper function for calculating subresource indexes.

    CopySubresourceRegion performs the copy on the GPU (similar to a memcpy by the CPU). As a consequence, the source and destination resources must meet the following criteria:

    • Must be different subresources (although they can be from the same resource).
    • Must be the same type.
    • Must have compatible formats (the formats must either be identical or be from the same type group). For example, a texture can be copied to an texture because both of these formats are in the group. Beginning with Direct3D 10.1, CopySubresourceRegion can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.
    • May not be currently mapped.

    CopySubresourceRegion supports only copy; it does not support any stretch, color key, blend, or format conversions. Beginning with Direct3D 10.1, CopySubresourceRegion can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.

    If your app needs to copy an entire resource, we recommend to use instead.

    CopySubresourceRegion is an asynchronous call that the runtime can add to the command-buffer queue. This asynchronous behaviorattempts to remove pipeline stalls that may occur when copying data. See performance considerations for more details.

    Differences between Direct3D 10 and Direct3D 10.1:

    Direct3D 10 has the following limitations:

    • You cannot use a depth-stencil resource as a destination.
    • You cannot use an immutable resource as a destination.
    • You cannot use a multisampled texture as either a source or a destination

    Direct3D 10.1 has added support for the following features:

    • You can use a depth-stencil buffer as a source or a destination.
    • You can use multisampled resources as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or if the source is multisampled and the destination is not multisampled (or vice versa), the call to fails.
    • You can copy between uncompressed and compressed resources. During copy, the format conversions that are specified in Format Conversion using Direct3D 10.1 are supported automatically. The uncompressed resource must be at least prestructured, and typed. You must also account for the difference between the virtual and the physical size of the mipmaps levels.

    ?

    Note??If you use CopySubresourceRegion with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. You must also pass 0 to the DstX, DstY, and DstZ parameters and null to the pSrcBox parameter. In addition, source and destination resources, which are represented by the pSrcResource and pDstResource parameters respectively, must have identical sample count values.

    +
    + + bb173542 + void ID3D10Device::CopySubresourceRegion([In] ID3D10Resource* pDstResource,[In] unsigned int DstSubresource,[In] unsigned int DstX,[In] unsigned int DstY,[In] unsigned int DstZ,[In] ID3D10Resource* pSrcResource,[In] unsigned int SrcSubresource,[In, Optional] const D3D10_BOX* pSrcBox) + ID3D10Device::CopySubresourceRegion +
    + + +

    Copy the entire contents of the source resource to the destination resource using the GPU.

    +
    +

    A reference to the destination resource (see ).

    +

    A reference to the source resource (see ).

    + +

    This method is unusual in that it causes the GPU to perform the copy operation (similar to a memcpy by the CPU). As a result, it has a few restrictions designed for improving performance. For instance, the source and destination resources:

    • Must be different resources.
    • Must be the same type.
    • Must have identical dimensions (including width, height, depth, and size as appropriate).
    • Must have compatible formats, which means the formats must be identical or at least from the same type group. For example, a texture can be copied to an texture since both of these formats are in the group. Beginning with Direct3D 10.1, CopyResource can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.
    • May not be currently mapped.

    CopyResource supports only copy; it does not support any stretch, color key, blend, or format conversions. Beginning with Direct3D 10.1, CopyResource can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.

    Immutable, and depth-stencil resources cannot be used as a destination. Resources created with multisampling capability cannot be used as either a source or destination.

    The method is an asynchronous call which may be added to the command-buffer queue. This attempts to remove pipeline stalls that may occur when copying data. See performance considerations for more details.

    An application that only needs to copy a portion of the data in a resource should use instead.

    Differences between Direct3D 10 and Direct3D 10.1:

    Direct3D 10.1 enables depth-stencil resources to be used as either a source or destination. Direct3D 10.1 enables multisampled resources to be used as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or one of them is multisampled and the other is not multisampled, the call to fails.

    It is possible to copy between prestructured+typed resources and block-compressed textures. See Format Conversion using Direct3D 10.1.

    ?

    +
    + + bb173541 + void ID3D10Device::CopyResource([In] ID3D10Resource* pDstResource,[In] ID3D10Resource* pSrcResource) + ID3D10Device::CopyResource +
    + + +

    The CPU copies data from memory to a subresource created in non-mappable memory. See remarks.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    For a shader-constant buffer; set pDstBox to null. It is not possible to use this method to partially update a shader-constant buffer.

    A resource cannot be used as a destination if:

    • the resource is created with immutable or dynamic usage.
    • the resource is created as a depth-stencil resource.
    • the resource is created with multisampling capability (see ).

    When UpdateSubresource returns, the application is free to change or even free the data pointed to by pSrcData because the method has already copied/snapped away the original contents.

    The performance of UpdateSubresource depends on whether or not there is contention for the destination resource. For example, contention for a vertex buffer resource occurs when the application executes a Draw call and later calls UpdateSubresource on the same vertex buffer before the Draw call is actually executed by the GPU.

    • When there is contention for the resource, UpdateSubresource will perform 2 copies of the source data. First, the data is copied by the CPU to a temporary storage space accessible by the command buffer. This copy happens before the method returns. A second copy is then performed by the GPU to copy the source data into non-mappable memory. This second copy happens asynchronously because it is executed by GPU when the command buffer is flushed.
    • When there is no resource contention, the behavior of UpdateSubresource is dependent on which is faster (from the CPU's perspective): copying the data to the command buffer and then having a second copy execute when the command buffer is flushed, or having the CPU copy the data to the final resource location. This is dependent on the architecture of the underlying system.

    To better understand the source row pitch and source depth pitch parameters, consider the following illustration of a 3D volume texture.

    Each block in this visual represents an element of data, and the size of each element is dependent on the resource's format. For example, if the resource format is , then the size of each element would be 128 bits, or 16 bytes. This 3D volume texture has a width of two, a height of three, and a depth of four.

    To calculate the source row pitch and source depth pitch for a given resource, use the following formulas:

    • Source Row Pitch = [size of one element in bytes] * [number of elements in one row]
    • Source Depth Pitch = [Source Row Pitch] * [number of rows (height)]

    In the case of this example 3D volume texture where the size of each element is 16 bytes, the formulas are as follows:

    • Source Row Pitch = 16 * 2 = 32
    • Source Depth Pitch = 16 * 2 * 3 = 96

    The following illustration shows the resource as it is laid out in memory.

    For example, the following code snippet shows how to specify a destination region in a 2D texture. Assume the destination texture is 512x512 and the operation will copy the data pointed to by pData to [(120,100)..(200,220)] in the destination texture. Also assume that rowPitch has been initialized with the proper value (as explained above). Front and back are set to 0 and 1 respectively, because by having front equal to back, the box is technically empty.

      destRegion;	
    +            destRegion.left = 120;	
    +            destRegion.right = 200;	
    +            destRegion.top = 100;	
    +            destRegion.bottom = 220;	
    +            destRegion.front = 0;	
    +            destRegion.back = 1; pd3dDevice->UpdateSubresource( pDestTexture, 0, &destRegion, pData, rowPitch, 0 );	
    +            

    The 1D case is similar. The following snippet shows how to specify a destination region in a 1D texture. Use the same assumptions as above, except that the texture is 512 in length.

      destRegion;	
    +            destRegion.left = 120;	
    +            destRegion.right = 200;	
    +            destRegion.top = 0;	
    +            destRegion.bottom = 1;	
    +            destRegion.front = 0;	
    +            destRegion.back = 1; pd3dDevice->UpdateSubresource( pDestTexture, 0, &destRegion, pData, rowPitch, 0 );	
    +            

    Differences between Direct3D 10 and Direct3D 10.1:

    Direct3D 10.1 enables depth-stencil resources to be used as either a source or destination.

    ?

    +
    + + bb173621 + void ID3D10Device::UpdateSubresource([In] ID3D10Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D10_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + ID3D10Device::UpdateSubresource +
    + + +

    Set all the elements in a render target to one value.

    +
    +

    Pointer to the render target.

    +

    A 4-component array that represents the color to fill the render target with.

    + +

    Applications that wish to clear a render target to a specific integer value bit pattern should render a screen-aligned quad instead of using this method. The reason for this is because this method accepts as input a floating point value, which may not have the same bit pattern as the original integer.

    Differences between Direct3D 9 and Direct3D 10:

    Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.

    ?

    When using 10Level9, ClearRenderTargetView only clears the first array slice in the render target view. This can impact (for example) cube map rendering scenarios. Applications should create a render target view for each face or array slice, then clear each view individually.

    +
    + + bb173539 + void ID3D10Device::ClearRenderTargetView([In] ID3D10RenderTargetView* pRenderTargetView,[In] const SHARPDX_COLOR4* ColorRGBA) + ID3D10Device::ClearRenderTargetView +
    + + +

    Clears the depth-stencil resource.

    +
    +

    Pointer to the depth stencil to be cleared.

    +

    Which parts of the buffer to clear. See .

    +

    Clear the depth buffer with this value. This value will be clamped between 0 and 1.

    +

    Clear the stencil buffer with this value.

    + +

    Differences between Direct3D 9 and Direct3D 10:

    Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.

    ?

    +
    + + bb173538 + void ID3D10Device::ClearDepthStencilView([In] ID3D10DepthStencilView* pDepthStencilView,[In] D3D10_CLEAR_FLAG ClearFlags,[In] float Depth,[In] unsigned char Stencil) + ID3D10Device::ClearDepthStencilView +
    + + +

    Generates mipmaps for the given shader resource.

    +
    +

    A reference to an . The mipmaps will be generated for this shader resource.

    + +

    GenerateMips may be called on any in order to generate the lower mipmap levels. GenerateMips uses the largest mipmap level of the view to recursively generate the lower levels of the mip, stopping with the smallest level specified by the view. If the base resource was not created with and , this call has no effect.

    Video adapters that support feature level 9.1 and higher support generating mipmaps if you use any of these formats:

     	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            

    Video adapters that support feature level 9.2 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature level 9.1:

     	
    +            	
    +            	
    +            	
    +            	
    +            

    Video adapters that support feature level 9.3 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1 and 9.2:

     	
    +            DXGI_FORMAT_B4G4R4A4 (optional)	
    +            

    Video adapters that support feature level 10 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1, 9.2, and 9.3:

      (optional)	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +             (optional)	
    +            

    For all other unsupported formats, this method will silently fail.

    +
    + + bb173569 + void ID3D10Device::GenerateMips([In] ID3D10ShaderResourceView* pShaderResourceView) + ID3D10Device::GenerateMips +
    + + +

    Copy a multisampled resource into a non-multisampled resource. This API is most useful when re-using the resulting rendertarget of one render pass as an input to a second render pass.

    +
    +

    Destination resource. Must be a created with the flag and be single-sampled. See .

    +

    A zero-based index, that identifies the destination subresource. See D3D10CalcSubresource for more details.

    +

    Source resource. Must be multisampled.

    +

    The source subresource of the source resource.

    +

    that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks.

    + +

    Both the source and destination resources must be the same resource type and have the same dimensions.

    The source and destination must have compatible formats. There are three scenarios for this:

    ScenarioRequirements
    Source and destination are prestructured and typedBoth the source and destination must have identical formats and that format must be specified in the Format parameter.
    One resource is prestructured and typed and the other is prestructured and typelessThe typed resource must have a format that is compatible with the typeless resource (i.e. the typed resource is and the typeless resource is ). The format of the typed resource must be specified in the Format parameter.
    Source and destination are prestructured and typelessBoth the source and desintation must have the same typeless format (i.e. both must have ), and the Format parameter must specify a format that is compatible with the source and destination (i.e. if both are then or could be specified in the Format parameter).

    ?

    +
    + + bb173607 + void ID3D10Device::ResolveSubresource([In] ID3D10Resource* pDstResource,[In] unsigned int DstSubresource,[In] ID3D10Resource* pSrcResource,[In] unsigned int SrcSubresource,[In] DXGI_FORMAT Format) + ID3D10Device::ResolveSubresource +
    + + +

    Get the rendering predicate state.

    +
    +

    Address of a reference to a predicate (see ). Value stored here will be null upon device creation.

    +

    Address of a boolean to fill with the predicate comparison value. upon device creation.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173573 + void ID3D10Device::GetPredication([Out, Optional] ID3D10Predicate** ppPredicate,[Out, Optional] BOOL* pPredicateValue) + ID3D10Device::GetPredication +
    + + +

    Get the reason why the device was removed.

    +
    +

    Possible return values include:

    For more detail on these return codes, see DXGI_ERROR.

    + + bb173571 + HRESULT ID3D10Device::GetDeviceRemovedReason() + ID3D10Device::GetDeviceRemovedReason +
    + + +

    Get the exception-mode flags.

    +
    +

    A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in D3D10_RAISE_FLAG. A default value of 0 means there are no flags.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    Set an exception-mode flag to elevate an error condition to a non-continuable exception.

    Whenever an error occurs, a Direct3D device enters the DEVICEREMOVED state and if the appropriate exception flag has been set, an exception is raised. A raised exception is designed to terminate an application. Before termination, the last chance an application has to persist data is by using an UnhandledExceptionFilter (see Structured Exception Handling). In general, UnhandledExceptionFilters are leveraged to try to persist data when an application is crashing (to disk, for example). Any code that executes during an UnhandledExceptionFilter is not guaranteed to reliably execute (due to possible process corruption). Any data that the UnhandledExceptionFilter manages to persist, before the UnhandledExceptionFilter crashes again, should be treated as suspect, and therefore inspected by a new, non-corrupted process to see if it is usable.

    +
    + + bb173614 + HRESULT ID3D10Device::SetExceptionMode([In] unsigned int RaiseFlags) + ID3D10Device::SetExceptionMode +
    + + +

    Get the exception-mode flags.

    +
    +

    A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in D3D10_RAISE_FLAG. A default value of 0 means there are no flags.

    + +

    An exception-mode flag is used to elevate an error condition to a non-continuable exception.

    +
    + + bb173572 + unsigned int ID3D10Device::GetExceptionMode() + ID3D10Device::GetExceptionMode +
    + + +

    Get data from a device that is associated with a guid.

    +
    +

    Guid associated with the data.

    +

    Size of the data.

    +

    Pointer to the data stored with the device. If pData is null, DataSize must also be 0, and any data previously associated with the guid will be destroyed.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    The data stored in the device is set with .

    The data retrieved and the guid will typically be application-defined.

    +
    + + bb173574 + HRESULT ID3D10Device::GetPrivateData([In] const GUID& guid,[InOut] unsigned int* pDataSize,[Out, Buffer, Optional] void* pData) + ID3D10Device::GetPrivateData +
    + + +

    Set data to a device and associate that data with a guid.

    +
    +

    Guid associated with the data.

    +

    Size of the data.

    +

    Pointer to the data to be stored with this device. If pData is null, DataSize must also be 0, and any data previously associated with the guid will be destroyed.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    The data stored in the device with this method can be retrieved with .

    The data and guid set with this method will typically be application-defined.

    +
    + + bb173616 + HRESULT ID3D10Device::SetPrivateData([In] const GUID& guid,[In] unsigned int DataSize,[In, Buffer, Optional] const void* pData) + ID3D10Device::SetPrivateData +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID3D10Device::SetPrivateDataInterface([In] const GUID& guid,[In, Optional] const IUnknown* pData) + ID3D10Device::SetPrivateDataInterface + + + +

    Restore all default device settings; return the device to the state it was in when it was created. This will set all set all input/output resource slots, shaders, input layouts, predications, scissor rectangles, depth-stencil state, rasterizer state, blend state, sampler state, and viewports to null. The primitive topology will be set to UNDEFINED.

    +
    + + bb173540 + void ID3D10Device::ClearState() + ID3D10Device::ClearState +
    + + +

    Send queued-up commands in the command buffer to the GPU.

    +
    + +

    Most applications will not need to call this method. Calling this method when not necessary will incur a performance penalty. Each call to Flush incurs a significant amount of overhead.

    When Direct3D state-setting, present, or draw commands are called by an application, those commands are queued into an internal command buffer. Flush sends those commands to the GPU for processing. Normally, these commands are sent to the GPU automatically whenever Direct3D determines that they need to be, such as when the command buffer is full or when mapping a resource. Flush will send the commands manually.

    Flush should be used when the CPU waits for an arbitrary amount of time (such as when calling Sleep, ID3DX10ThreadPump::WaitForAllItems, or WaitForVBlank.

    For more information about how flushing works, see Accurately Profiling Direct3D API Calls (Direct3D 9).

    +
    + + bb173568 + void ID3D10Device::Flush() + ID3D10Device::Flush +
    + + +

    Create a buffer (vertex buffer, index buffer, or shader-constant buffer).

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    For example code, see:

    • Create a Vertex Buffer
    • Create an Index Buffer
    +
    + + bb173544 + HRESULT ID3D10Device::CreateBuffer([In] const D3D10_BUFFER_DESC* pDesc,[In, Optional] const D3D10_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D10Buffer** ppBuffer) + ID3D10Device::CreateBuffer +
    + + +

    Create an array of 1D textures (see Texture1D).

    +
    + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return code is . See Direct3D 10 Return Codes for failing error codes.

    + +

    CreateTexture1D creates a 1D texture resource, which contains an array of 1D textures. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.

    All resources are made up of one or more subresources. To load data into the texture, applications may supply the data initially as part of structure pointed to by pInitialData, or it may use one of the Texturing Functions supplied by the SDK.

    +
    + + bb173559 + HRESULT ID3D10Device::CreateTexture1D([In] const D3D10_TEXTURE1D_DESC* pDesc,[In, Buffer, Optional] const D3D10_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D10Texture1D** ppTexture1D) + ID3D10Device::CreateTexture1D +
    + + +

    Create an array of 2D textures (see Texture2D).

    +
    + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return code is . See Direct3D 10 Return Codes for failing error codes.

    + +

    CreateTexture2D creates a 2D texture resource, which contains an array of 1D textures. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.

    All resources are made up of one or more subresources. To load data into the texture, applications may supply the data initially as part of structure pointed to by pInitialData, or it may use one of the Texturing Functions supplied by the SDK.

    +
    + + bb173560 + HRESULT ID3D10Device::CreateTexture2D([In] const D3D10_TEXTURE2D_DESC* pDesc,[In, Buffer, Optional] const D3D10_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D10Texture2D** ppTexture2D) + ID3D10Device::CreateTexture2D +
    + + +

    Create a single 3D texture (see Texture3D).

    +
    + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return code is . See Direct3D 10 Return Codes for failing error codes.

    + +

    CreateTexture3D creates a 3D texture resource, which contains an array of 1D textures. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.

    All resources are made up of one or more subresources. To load data into the texture, applications may supply the data initially as part of structure pointed to by pInitialData, or it may use one of the Texturing Functions supplied by the SDK.

    +
    + + bb173561 + HRESULT ID3D10Device::CreateTexture3D([In] const D3D10_TEXTURE3D_DESC* pDesc,[In, Buffer, Optional] const D3D10_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D10Texture3D** ppTexture3D) + ID3D10Device::CreateTexture3D +
    + + +

    Create a shader-resource view for accessing data in a resource.

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    A resource is made up of one or more subresources, a view identifies which subresources to allow the pipeline to access. In addition, each resource is bound to the pipeline using a view. A shader-resource view is designed to bind any buffer or texture resource to the shader stages using the following API methods: VSSetShaderResources, GSSetShaderResources and PSSetShaderResources.

    Since a view is fully typed, this means that typeless resources become fully typed when bound to the pipeline.

    +
    + + bb173558 + HRESULT ID3D10Device::CreateShaderResourceView([In] ID3D10Resource* pResource,[In, Optional] const D3D10_SHADER_RESOURCE_VIEW_DESC* pDesc,[Out, Fast] ID3D10ShaderResourceView** ppSRView) + ID3D10Device::CreateShaderResourceView +
    + + +

    Create a render-target view for accessing resource data.

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    A rendertarget view can be bound to the output merger stage by calling .

    +
    + + bb173556 + HRESULT ID3D10Device::CreateRenderTargetView([In] ID3D10Resource* pResource,[In, Optional] const D3D10_RENDER_TARGET_VIEW_DESC* pDesc,[Out, Fast] ID3D10RenderTargetView** ppRTView) + ID3D10Device::CreateRenderTargetView +
    + + +

    Create a depth-stencil view for accessing resource data.

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    A depth-stencil view can be bound to the output-merger stage by calling .

    For more background information, see the programming guide page about depth stencils.

    +
    + + bb173547 + HRESULT ID3D10Device::CreateDepthStencilView([In] ID3D10Resource* pResource,[In, Optional] const D3D10_DEPTH_STENCIL_VIEW_DESC* pDesc,[Out, Fast] ID3D10DepthStencilView** ppDepthStencilView) + ID3D10Device::CreateDepthStencilView +
    + + +

    Create an input-layout object to describe the input-buffer data for the input-assembler stage.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return code is . See Direct3D 10 Return Codes for failing error codes.

    + +

    After creating an input layout object, it must be bound to the input-assembler stage before calling a draw API. See Getting Started with the Input-Assembler Stage (Direct3D 10) for example code.

    Once an input-layout object is created from a shader signature, the input-layout object can be reused with any other shader that has an identical input signature (semantics included). This can simplify the creation of input-layout objects when you are working with many shaders with identical inputs.

    If a data type in the input-layout declaration does not match the data type in a shader-input signature, CreateInputLayout will generate a warning during compilation. The warning is simply to call attention to the fact that the data may be reinterpreted when read from a register. You may either disregard this warning (if reinterpretation is intentional) or make the data types match in both declarations to eliminate the warning. The Data Conversion Rules overview describes the rules applied for data type conversion.

    Differences between Direct3D 9 and Direct3D 10:

    Mapping the vertex data to the shader inputs with an input layout is a new way of doing things in Direct3D 10 that improves performance.

    In Direct3D 10 the vertex data is mapped to the shader inputs when the input layout object is created, whereas in Direct3D 9 this mapping was done at Draw time based on the currently bound vertex declarations, vertex buffers, and vertex shaders. Doing this mapping when the input layout object is created reduces or eliminates extra linkage work for drivers at Draw time because this re-mapping is no longer necessary.

    ?

    +
    + + bb173550 + HRESULT ID3D10Device::CreateInputLayout([In, Buffer] const D3D10_INPUT_ELEMENT_DESC* pInputElementDescs,[In] unsigned int NumElements,[In, Buffer] const void* pShaderBytecodeWithInputSignature,[In] SIZE_T BytecodeLength,[Out, Fast] ID3D10InputLayout** ppInputLayout) + ID3D10Device::CreateInputLayout +
    + + +

    Create a vertex-shader object from a compiled shader.

    +
    +

    A reference to the compiled shader. To get this reference see Getting a Pointer to a Compiled Shader.

    +

    Size of the compiled vertex shader.

    +

    Address of a reference to an Interface. If this is null, all other parameters will be validated, and if all parameters pass validation this API will return S_FALSE instead of .

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173562 + HRESULT ID3D10Device::CreateVertexShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[Out, Fast] ID3D10VertexShader** ppVertexShader) + ID3D10Device::CreateVertexShader +
    + + +

    Create a geometry shader.

    +
    +

    A reference to the compiled shader. To get this reference see Getting a Pointer to a Compiled Shader.

    +

    Size of the compiled geometry shader.

    +

    Address of a reference to an Interface. If this is null, all other parameters will be validated, and if all parameters pass validation this API will return S_FALSE instead of .

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    Once created, the shader can be set to the device by calling .

    +
    + + bb173548 + HRESULT ID3D10Device::CreateGeometryShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[Out, Fast] ID3D10GeometryShader** ppGeometryShader) + ID3D10Device::CreateGeometryShader +
    + + +

    Creates a geometry shader that can write to streaming output buffers.

    +
    +

    A reference to the compiled geometry shader for a standard geometry shader plus stream output. For info on how to get this reference, see Getting a Pointer to a Compiled Shader.

    To create the stream output without using a geometry shader, pass a reference to the output signature for the prior stage. To obtain this output signature, call the compiler function. You can also pass a reference to the compiled vertex shader that is used in the prior stage. This compiled shader provides the output signature for the data.

    +

    Size of the compiled geometry shader.

    +

    Pointer to a array. Cannot be null if NumEntries> 0.

    +

    The number of entries in the array pointed to by pSODeclaration. Minimum 0, maximum 64.

    +

    The size, in bytes, of each element in the array pointed to by pSODeclaration. This parameter is only used when the output slot is 0 for all entries in pSODeclaration.

    +

    Address of a reference to an Interface. If this is null, all other parameters will be validated, and if all parameters pass validation this API will return S_FALSE instead of .

    +

    This method returns one of the Direct3D 10 Return Codes.

    + +

    For more info about using CreateGeometryShaderWithStreamOutput, see Create a Geometry-Shader Object with Stream Output.

    +
    + + bb173549 + HRESULT ID3D10Device::CreateGeometryShaderWithStreamOutput([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[In, Buffer, Optional] const D3D10_SO_DECLARATION_ENTRY* pSODeclaration,[In] unsigned int NumEntries,[In] unsigned int OutputStreamStride,[Out, Fast] ID3D10GeometryShader** ppGeometryShader) + ID3D10Device::CreateGeometryShaderWithStreamOutput +
    + + +

    Create a pixel shader.

    +
    +

    A reference to the compiled shader. To get this reference see Getting a Pointer to a Compiled Shader.

    +

    Size of the compiled pixel shader.

    +

    Address of a reference to an Interface. If this is null, all other parameters will be validated, and if all parameters pass validation this API will return S_FALSE instead of .

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    After creating the pixel shader, you can set it to the device using .

    +
    + + bb173551 + HRESULT ID3D10Device::CreatePixelShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[Out, Fast] ID3D10PixelShader** ppPixelShader) + ID3D10Device::CreatePixelShader +
    + + +

    Create a blend-state object that encapsules blend state for the output-merger stage.

    +
    +

    Pointer to a blend-state description (see ).

    +

    Address of a reference to the blend-state object created (see Interface).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    An application can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.

    +
    + + bb173543 + HRESULT ID3D10Device::CreateBlendState([In] const D3D10_BLEND_DESC* pBlendStateDesc,[Out, Fast] ID3D10BlendState** ppBlendState) + ID3D10Device::CreateBlendState +
    + + +

    Create a depth-stencil state object that encapsulates depth-stencil test information for the output-merger stage.

    +
    + No documentation. + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    4096 unique depth-stencil state objects can be created on a device at a time.

    If an application attempts to create a depth-stencil state with the same description as an already existing depth-stencil state, then the same interface with an incremented reference count will be returned and the total number of unique depth-stencil state objects will stay the same.

    +
    + + bb173546 + HRESULT ID3D10Device::CreateDepthStencilState([In] const D3D10_DEPTH_STENCIL_DESC* pDepthStencilDesc,[Out, Fast] ID3D10DepthStencilState** ppDepthStencilState) + ID3D10Device::CreateDepthStencilState +
    + + +

    Create a rasterizer state object that tells the rasterizer stage how to behave.

    +
    + No documentation. + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    4096 unique rasterizer state objects can be created on a device at a time.

    If an application attempts to create a rasterizer state with the same description as an already existing rasterizer state, then the same interface with an incremented reference count will be returned and the total number of unique rasterizer state objects will stay the same.

    +
    + + bb173554 + HRESULT ID3D10Device::CreateRasterizerState([In] const D3D10_RASTERIZER_DESC* pRasterizerDesc,[Out, Fast] ID3D10RasterizerState** ppRasterizerState) + ID3D10Device::CreateRasterizerState +
    + + +

    Create a sampler-state object that encapsulates sampling information for a texture.

    +
    + No documentation. + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    4096 unique sampler state objects can be created on a device at a time.

    If an application attempts to create a sampler state with the same description as an already existing sampler state, then the same interface with an incremented reference count will be returned and the total number of unique sampler state objects will stay the same.

    +
    + + bb173557 + HRESULT ID3D10Device::CreateSamplerState([In] const D3D10_SAMPLER_DESC* pSamplerDesc,[Out, Fast] ID3D10SamplerState** ppSamplerState) + ID3D10Device::CreateSamplerState +
    + + +

    This interface encapsulates methods for querying information from the GPU.

    +
    +

    Pointer to a query description (see ).

    +

    Address of a reference to the query object created (see ).

    +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.

    + +

    Windows?Phone?8: This API is supported.

    +
    + + ff476515 + HRESULT ID3D10Device::CreateQuery([In] const D3D10_QUERY_DESC* pQueryDesc,[Out, Fast] ID3D10Query** ppQuery) + ID3D10Device::CreateQuery +
    + + +

    Creates a predicate.

    +
    +

    Pointer to a query description where the type of query must be a or (see ).

    +

    Address of a reference to a predicate (see Interface).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173552 + HRESULT ID3D10Device::CreatePredicate([In] const D3D10_QUERY_DESC* pPredicateDesc,[Out, Fast] ID3D10Predicate** ppPredicate) + ID3D10Device::CreatePredicate +
    + + +

    Create a counter object for measuring GPU performance.

    +
    +

    Pointer to a counter description (see ).

    +

    Address of a reference to a counter (see Interface).

    +

    If this function succeeds, it will return . If it fails, possible return values are: S_FALSE, E_OUTOFMEMORY, , , or E_INVALIDARG.

    is returned whenever the application requests to create a well-known counter, but the current device does not support it.

    indicates that another device object is currently using the counters, so they cannot be used by this device at the moment.

    E_INVALIDARG is returned whenever an out-of-range well-known or device-dependent counter is requested, or when the simulataneously active counters have been exhausted.

    + + bb173545 + HRESULT ID3D10Device::CreateCounter([In] const D3D10_COUNTER_DESC* pCounterDesc,[Out, Fast] ID3D10Counter** ppCounter) + ID3D10Device::CreateCounter +
    + + +

    Get the support of a given format on the installed video device.

    +
    +

    A enumeration that describes a format for which to check for support.

    +

    A bitfield of enumeration values describing how the specified format is supported on the installed device. The values are ORed together.

    + +

    Most format support is based on the Direct3D feature level. Only a few specific use cases require checking for support. See Hardware Support for Direct3D 10 Formats and Hardware Support for Direct3D 10.1 Formats for additional information.

    +
    + + bb173536 + HRESULT ID3D10Device::CheckFormatSupport([In] DXGI_FORMAT Format,[Out] D3D10_FORMAT_SUPPORT* pFormatSupport) + ID3D10Device::CheckFormatSupport +
    + + +

    Get the number of quality levels available during multisampling.

    +
    +

    The texture format. See .

    +

    The number of samples during multisampling.

    +

    Number of quality levels supported by the adapter. See remarks.

    + +

    When multisampling a texture, the number of quality levels available for an adapter is dependent on the texture format used and the number of samples requested. The maximum sample count defined by D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT in d3d10.h is 32. If the returned value of pNumQualityLevels is 0, the format and sample count combination is not supported for the installed adapter.

    Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.

    Direct3D 10.1 devices are required to support 4x MSAA for all formats except R32G32B32A32 and R32G32B32 formats.

    +
    + + bb173537 + HRESULT ID3D10Device::CheckMultisampleQualityLevels([In] DXGI_FORMAT Format,[In] unsigned int SampleCount,[Out] unsigned int* pNumQualityLevels) + ID3D10Device::CheckMultisampleQualityLevels +
    + + +

    Get a counter's information.

    +
    + + bb173535 + void ID3D10Device::CheckCounterInfo([Out] D3D10_COUNTER_INFO* pCounterInfo) + ID3D10Device::CheckCounterInfo +
    + + +

    Get the type, name, units of measure, and a description of an existing counter.

    +
    +

    Pointer to a counter description (see ). Specifies which counter information is to be retrieved about.

    +

    Pointer to the data type of a counter (see ). Specifies the data type of the counter being retrieved.

    +

    Pointer to the number of hardware counters that are needed for this counter type to be created. All instances of the same counter type use the same hardware counters.

    +

    String to be filled with a brief name for the counter. May be null if the application is not interested in the name of the counter.

    +

    Length of the string returned to szName. Can be null.

    +

    Name of the units a counter measures, provided the memory the reference points to has enough room to hold the string. Can be null. The returned string will always be in English.

    +

    Length of the string returned to szUnits. Can be null.

    +

    A description of the counter, provided the memory the reference points to has enough room to hold the string. Can be null. The returned string will always be in English.

    +

    Length of the string returned to szDescription. Can be null.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    Length parameters can be null, which indicates the application is not interested in the length nor the corresponding string value. When a length parameter is non-null and the corresponding string is null, the input value of the length parameter is ignored, and the length of the corresponding string (including terminating null) will be returned through the length parameter. When length and the corresponding parameter are both non-null, the input value of length is checked to ensure there is enough room, and then the length of the string (including terminating null character) is passed out through the length parameter.

    +
    + + bb173534 + HRESULT ID3D10Device::CheckCounter([In] const D3D10_COUNTER_DESC* pDesc,[Out] D3D10_COUNTER_TYPE* pType,[Out] unsigned int* pActiveCounters,[Out, Buffer, Optional] char* szName,[InOut, Optional] unsigned int* pNameLength,[Out, Buffer, Optional] char* szUnits,[InOut, Optional] unsigned int* pUnitsLength,[Out, Buffer, Optional] char* szDescription,[InOut, Optional] unsigned int* pDescriptionLength) + ID3D10Device::CheckCounter +
    + + +

    Get the flags used during the call to create the device with .

    +
    +

    A bitfield containing the flags used to create the device. See .

    + + bb173570 + unsigned int ID3D10Device::GetCreationFlags() + ID3D10Device::GetCreationFlags +
    + + +

    Give a device access to a shared resource created on a different Direct3d device.

    +
    +

    A resource handle. See remarks.

    +

    The globally unique identifier () for the resource interface. See remarks.

    +

    Address of a reference to the resource we are gaining access to.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    To share a resource between two Direct3D 10 devices the resource must have been created with the flag, if it was created using the interface. If it was created using the interface, then the resource is always shared.

    The REFIID, or , of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof() will get the of the interface to a buffer resource.

    When sharing a resource between two Direct3D 10 devices the unique handle of the resource can be obtained by querying the resource for the interface and then calling GetSharedHandle.

     * pOtherResource(null);	
    +            hr = pOtherDeviceResource->QueryInterface( __uuidof(), (void**)&pOtherResource );	
    +            HANDLE sharedHandle;	
    +            pOtherResource->GetSharedHandle(&sharedHandle); 

    The only resources that can be shared are 2D non-mipmapped textures.

    To share a resource between a Direct3D 9 device and a Direct3D 10 device the texture must have been created using the pSharedHandle argument of CreateTexture. The shared Direct3D 9 handle is then passed to OpenSharedResource in the hResource argument.

    The following code illustrates the method calls involved.

     sharedHandle = null; // must be set to null to create, can use a valid handle here to open in D3D9 	
    +            pDevice9->CreateTexture(..., pTex2D_9, &sharedHandle); 	
    +            ... 	
    +            pDevice10->OpenSharedResource(sharedHandle, __uuidof(), (void**)(&tempResource10)); 	
    +            tempResource10->QueryInterface(__uuidof(), (void**)(&pTex2D_10)); 	
    +            tempResource10->Release(); 	
    +            // now use pTex2D_10 with pDevice10    

    Textures being shared from D3D9 to D3D10 have the following restrictions.

    • Textures must be 2D
    • Only 1 mip level is allowed
    • Texture must have default usage
    • Texture must be write only
    • MSAA textures are not allowed
    • Bind flags must have SHADER_RESOURCE and RENDER_TARGET set
    • Only R10G10B10A2_UNORM, R16G16B16A16_FLOAT and R8G8B8A8_UNORM formats are allowed

    If a shared texture is updated on one device must be called on that device.

    +
    + + bb173598 + HRESULT ID3D10Device::OpenSharedResource([In] void* hResource,[In] const GUID& ReturnedInterface,[Out, Optional] void** ppResource) + ID3D10Device::OpenSharedResource +
    + + +

    The device interface represents a virtual adapter for Direct3D 10.0; it is used to perform rendering and create Direct3D resources.

    +
    + +

    A device is created using .

    +
    + + bb173528 + ID3D10Device + ID3D10Device +
    + + + Binds a single vertex buffer to the input assembler. + + Index of the slot to which to bind the vertex buffer. + A binding for the input vertex buffer. + + + + Binds an array of vertex buffers to the input assembler. + + Index of the first input slot to use for binding. The first vertex buffer is explicitly bound to the start slot; this causes each additional vertex buffer in the array to be implicitly bound to each subsequent input slot. There are 16 input slots. + An array of bindings for input vertex buffers. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get or sets a reference to the input-layout object that is bound to the input-assembler stage.

    +
    + +

    For information about creating an input-layout object, see Creating the Input-Layout Object.

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173585 + IAGetInputLayout / IASetInputLayout + IAGetInputLayout + void ID3D10Device::IAGetInputLayout([Out] ID3D10InputLayout** ppInputLayout) +
    + + +

    Get or sets information about the primitive type, and data order that describes input data for the input assembler stage.

    +
    + + bb173586 + IAGetPrimitiveTopology / IASetPrimitiveTopology + IAGetPrimitiveTopology + void ID3D10Device::IAGetPrimitiveTopology([Out] D3D_PRIMITIVE_TOPOLOGY* pTopology) +
    + + +

    Bind an input-layout object to the input-assembler stage.

    +
    + No documentation. + +

    Input-layout objects describe how vertex buffer data is streamed into the IA pipeline stage. To create an input-layout object, call .

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173589 + void ID3D10Device::IASetInputLayout([In, Optional] ID3D10InputLayout* pInputLayout) + ID3D10Device::IASetInputLayout +
    + + +

    Bind an array of vertex buffers to the input-assembler stage.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    For information about creating vertex buffers, see Create a Vertex Buffer.

    Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The Debug Layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173591 + void ID3D10Device::IASetVertexBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppVertexBuffers,[In, Buffer, Optional] const unsigned int* pStrides,[In, Buffer, Optional] const unsigned int* pOffsets) + ID3D10Device::IASetVertexBuffers +
    + + +

    Bind an array of vertex buffers to the input-assembler stage.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    For information about creating vertex buffers, see Create a Vertex Buffer.

    Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The Debug Layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173591 + void ID3D10Device::IASetVertexBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppVertexBuffers,[In, Buffer, Optional] const unsigned int* pStrides,[In, Buffer, Optional] const unsigned int* pOffsets) + ID3D10Device::IASetVertexBuffers +
    + + +

    Bind an array of vertex buffers to the input-assembler stage.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    For information about creating vertex buffers, see Create a Vertex Buffer.

    Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The Debug Layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173591 + void ID3D10Device::IASetVertexBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppVertexBuffers,[In, Buffer, Optional] const unsigned int* pStrides,[In, Buffer, Optional] const unsigned int* pOffsets) + ID3D10Device::IASetVertexBuffers +
    + + +

    Bind an index buffer to the input-assembler stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    For information about creating index buffers, see Create an Index Buffer.

    Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The Debug Layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173588 + void ID3D10Device::IASetIndexBuffer([In, Optional] ID3D10Buffer* pIndexBuffer,[In] DXGI_FORMAT Format,[In] unsigned int Offset) + ID3D10Device::IASetIndexBuffer +
    + + +

    Bind information about the primitive type, and data order that describes input data for the input assembler stage.

    +
    + No documentation. + + bb173590 + void ID3D10Device::IASetPrimitiveTopology([In] D3D_PRIMITIVE_TOPOLOGY Topology) + ID3D10Device::IASetPrimitiveTopology +
    + + +

    Get a reference to the input-layout object that is bound to the input-assembler stage.

    +
    + No documentation. + +

    For information about creating an input-layout object, see Creating the Input-Layout Object.

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173585 + void ID3D10Device::IAGetInputLayout([Out] ID3D10InputLayout** ppInputLayout) + ID3D10Device::IAGetInputLayout +
    + + +

    Get the vertex buffers bound to the input-assembler stage.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173587 + void ID3D10Device::IAGetVertexBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D10Buffer** ppVertexBuffers,[Out, Buffer, Optional] unsigned int* pStrides,[Out, Buffer, Optional] unsigned int* pOffsets) + ID3D10Device::IAGetVertexBuffers +
    + + +

    Get a reference to the index buffer that is bound to the input-assembler stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173584 + void ID3D10Device::IAGetIndexBuffer([Out, Optional] ID3D10Buffer** pIndexBuffer,[Out, Optional] DXGI_FORMAT* Format,[Out, Optional] unsigned int* Offset) + ID3D10Device::IAGetIndexBuffer +
    + + +

    Get information about the primitive type, and data order that describes input data for the input assembler stage.

    +
    + No documentation. + + bb173586 + void ID3D10Device::IAGetPrimitiveTopology([Out] D3D_PRIMITIVE_TOPOLOGY* pTopology) + ID3D10Device::IAGetPrimitiveTopology +
    + + +

    The device interface represents a virtual adapter for Direct3D 10.0; it is used to perform rendering and create Direct3D resources.

    +
    + +

    A device is created using .

    +
    + + bb173528 + ID3D10Device + ID3D10Device +
    + + + Get references to the render targets that are available to the {{output-merger stage}}. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + a depth-stencil view (see ) to be filled with the depth-stencil information from the device. + void OMGetRenderTargets([In] int NumViews,[Out, Buffer, Optional] ID3D10RenderTargetView** ppRenderTargetViews,[Out, Optional] ID3D10DepthStencilView** ppDepthStencilView) + + + + Get references to the render targets that are available to the {{output-merger stage}}. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + Number of render targets to retrieve. + an array of render targets views (see ) to be filled with the render targets from the device. + void OMGetRenderTargets([In] int NumViews,[Out, Buffer, Optional] ID3D10RenderTargetView** ppRenderTargetViews,[Out, Optional] ID3D10DepthStencilView** ppDepthStencilView) + + + + Get references to the render targets and the depth-stencil buffer that are available to the {{output-merger stage}}. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + Number of render targets to retrieve. + Pointer to a depth-stencil view (see ) to be filled with the depth-stencil information from the device. + an array of render targets views (see ) to be filled with the render targets from the device. + void OMGetRenderTargets([In] int NumViews,[Out, Buffer, Optional] ID3D10RenderTargetView** ppRenderTargetViews,[Out, Optional] ID3D10DepthStencilView** ppDepthStencilView) + + + + Get the {{blend state}} of the output-merger stage. + + + The reference count of the returned interface will be incremented by one when the blend state is retrieved. Applications must release returned reference(s) when they are no longer needed, or else there will be a memory leak. + + Array of blend factors, one for each RGBA component. + Pointer to a {{sample mask}}. + a reference to a blend-state interface (see ). + void OMGetBlendState([Out, Optional] ID3D10BlendState** ppBlendState,[Out, Optional] float BlendFactor[4],[Out, Optional] int* pSampleMask) + + + + Gets the {{depth-stencil}} state of the output-merger stage. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + Pointer to the stencil reference value used in the {{depth-stencil}} test. + a reference to a depth-stencil state interface (see ) to be filled with information from the device. + void OMGetDepthStencilState([Out, Optional] ID3D10DepthStencilState** ppDepthStencilState,[Out, Optional] int* pStencilRef) + + + + Binds a set of render targets to the output-merger stage. + + A set of render target views to bind. + + + + Binds a single render target to the output-merger stage. + + A view of the render target to bind. + + + + Binds a depth-stencil buffer and a set of render targets to the output-merger stage. + + A view of the depth-stencil buffer to bind. + A set of render target views to bind. + + + + Binds a depth-stencil buffer and a single render target to the output-merger stage. + + A view of the depth-stencil buffer to bind. + A view of the render target to bind. + + + + Gets or sets the blend factor. + + The blend factor. + + + + Gets or sets the blend sample mask. + + The blend sample mask. + + + + Gets or sets the state of the blend. + + The state of the blend. + + + + Gets or sets the depth stencil reference. + + The depth stencil reference. + + + + Gets or sets the state of the depth stencil. + + The state of the depth stencil. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Bind one or more render targets and the depth-stencil buffer to the output-merger stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    A call to OMSetRenderTargets overrides all bounded render targets and the depth stencil target regardless of the number of render targets in ppRenderTargetViews.

    The maximum number of render targets a device can have active at any given time is set by a #define in D3D10.h called D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT. It is invalid to try to set the same subresource to multiple render target slots.

    If any subresources are also currently bound for reading or writing (perhaps in a different part of the pipeline), those bind points will be null'ed out to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will not hold references to the interfaces passed in. For that reason, applications should be careful not to release interfaces currently in use by the device.

    See Binding Resources and Pipeline stages for more information on binding resources.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + + bb173597 + void ID3D10Device::OMSetRenderTargets([In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D10DepthStencilView* pDepthStencilView) + ID3D10Device::OMSetRenderTargets +
    + + +

    Bind one or more render targets and the depth-stencil buffer to the output-merger stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    A call to OMSetRenderTargets overrides all bounded render targets and the depth stencil target regardless of the number of render targets in ppRenderTargetViews.

    The maximum number of render targets a device can have active at any given time is set by a #define in D3D10.h called D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT. It is invalid to try to set the same subresource to multiple render target slots.

    If any subresources are also currently bound for reading or writing (perhaps in a different part of the pipeline), those bind points will be null'ed out to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will not hold references to the interfaces passed in. For that reason, applications should be careful not to release interfaces currently in use by the device.

    See Binding Resources and Pipeline stages for more information on binding resources.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + + bb173597 + void ID3D10Device::OMSetRenderTargets([In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D10DepthStencilView* pDepthStencilView) + ID3D10Device::OMSetRenderTargets +
    + + +

    Bind one or more render targets and the depth-stencil buffer to the output-merger stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    A call to OMSetRenderTargets overrides all bounded render targets and the depth stencil target regardless of the number of render targets in ppRenderTargetViews.

    The maximum number of render targets a device can have active at any given time is set by a #define in D3D10.h called D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT. It is invalid to try to set the same subresource to multiple render target slots.

    If any subresources are also currently bound for reading or writing (perhaps in a different part of the pipeline), those bind points will be null'ed out to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will not hold references to the interfaces passed in. For that reason, applications should be careful not to release interfaces currently in use by the device.

    See Binding Resources and Pipeline stages for more information on binding resources.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + + bb173597 + void ID3D10Device::OMSetRenderTargets([In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D10DepthStencilView* pDepthStencilView) + ID3D10Device::OMSetRenderTargets +
    + + +

    Set the blend state of the output-merger stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Blend state is used by the output-merger stage to determine how to blend together two RGB pixel values and two alpha values. The two RGB pixel values and two alpha values are the RGB pixel value and alpha value that the pixel shader outputs and the RGB pixel value and alpha value already in the output render target. The blend option controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The blend operation controls how the blending stage mathematically combines these modulated values.

    To create a blend-state interface, call .

    Passing in null for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.

    StateDefault Value
    AlphaToCoverageEnable
    BlendEnable[8]
    SrcBlend
    DstBlend
    BlendOp
    SrcBlendAlpha
    DstBlendAlpha
    BlendOpAlpha
    RenderTargetWriteMask[8][8]

    ?

    A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173595 + void ID3D10Device::OMSetBlendState([In, Optional] ID3D10BlendState* pBlendState,[In] const SHARPDX_COLOR4* BlendFactor,[In] unsigned int SampleMask) + ID3D10Device::OMSetBlendState +
    + + +

    Sets the depth-stencil state of the output-merger stage.

    +
    + No documentation. + No documentation. + +

    To create a depth-stencil state interface, call .

    Depth-stencil state is used by the output-merger stage to setup depth-stencil testing. The stencil reference value is the control value used in the depth-stencil test.

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173596 + void ID3D10Device::OMSetDepthStencilState([In, Optional] ID3D10DepthStencilState* pDepthStencilState,[In] unsigned int StencilRef) + ID3D10Device::OMSetDepthStencilState +
    + + +

    Get references to the render targets and the depth-stencil buffer that are available to the output-merger stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173594 + void ID3D10Device::OMGetRenderTargets([In] unsigned int NumViews,[Out, Buffer, Optional] ID3D10RenderTargetView** ppRenderTargetViews,[Out, Optional] ID3D10DepthStencilView** ppDepthStencilView) + ID3D10Device::OMGetRenderTargets +
    + + +

    Get the blend state of the output-merger stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The reference count of the returned interface will be incremented by one when the blend state is retrieved. Applications must release returned reference(s) when they are no longer needed, or else there will be a memory leak.

    +
    + + bb173592 + void ID3D10Device::OMGetBlendState([Out, Optional] ID3D10BlendState** ppBlendState,[Out, Optional] SHARPDX_COLOR4* BlendFactor,[Out, Optional] unsigned int* pSampleMask) + ID3D10Device::OMGetBlendState +
    + + +

    Gets the depth-stencil state of the output-merger stage.

    +
    + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173593 + void ID3D10Device::OMGetDepthStencilState([Out, Optional] ID3D10DepthStencilState** ppDepthStencilState,[Out, Optional] unsigned int* pStencilRef) + ID3D10Device::OMGetDepthStencilState +
    + + +

    The device interface represents a virtual adapter for Direct3D 10.0; it is used to perform rendering and create Direct3D resources.

    +
    + +

    A device is created using .

    +
    + + bb173528 + ID3D10Device + ID3D10Device +
    + + + Get the array of {{viewports}} bound to the {{rasterizer stage}} + + An array of viewports (see ). + void RSGetViewports([InOut] int* NumViewports,[Out, Buffer, Optional] D3D10_VIEWPORT* pViewports) + + + + Get the array of {{viewports}} bound to the {{rasterizer stage}} + + An array of viewports (see ). + void RSGetViewports([InOut] int* NumViewports,[Out, Buffer, Optional] D3D10_VIEWPORT* pViewports) + + + + Get the array of {{scissor rectangles}} bound to the {{rasterizer stage}}. + + An array of scissor rectangles (see ). + void RSGetScissorRects([InOut] int* NumRects,[Out, Buffer, Optional] D3D10_RECT* pRects) + + + + Get the array of {{scissor rectangles}} bound to the {{rasterizer stage}}. + + An array of scissor rectangles (see ). + void RSGetScissorRects([InOut] int* NumRects,[Out, Buffer, Optional] D3D10_RECT* pRects) + + + + Binds a single scissor rectangle to the rasterizer stage. + + The scissor rectangle to bind. + + + + Binds a set of scissor rectangles to the rasterizer stage. + + The set of scissor rectangles to bind. + + + + Binds a set of viewports to the rasterizer stage. + + The set of viewports to bind. + + + + Binds a single viewport to the rasterizer stage. + + The viewport to bind. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get or sets the rasterizer state from the rasterizer stage of the pipeline.

    +
    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173609 + RSGetState / RSSetState + RSGetState + void ID3D10Device::RSGetState([Out] ID3D10RasterizerState** ppRasterizerState) +
    + + +

    Set the rasterizer state for the rasterizer stage of the pipeline.

    +
    + No documentation. + +

    To create a rasterizer state interface, call . For more details on setting up the rasterizer state, see Set Rasterizer State.

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173612 + void ID3D10Device::RSSetState([In, Optional] ID3D10RasterizerState* pRasterizerState) + ID3D10Device::RSSetState +
    + + +

    Bind an array of viewports to the rasterizer stage of the pipeline.

    +
    + No documentation. + No documentation. + +

    All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled.

    Which viewport to use is determined by the SV_ViewportArrayIndex semantic output by a geometry shader (see shader semantic syntax). If a geometry shader does not make use of the SV_ViewportArrayIndex semantic then Direct3D will use the first viewport in the array.

    +
    + + bb173613 + void ID3D10Device::RSSetViewports([In] unsigned int NumViewports,[In, Buffer, Optional] const D3D10_VIEWPORT* pViewports) + ID3D10Device::RSSetViewports +
    + + +

    Bind an array of scissor rectangles to the rasterizer stage.

    +
    + No documentation. + No documentation. + +

    The scissor rectangles will only be used if ScissorEnable is set to true in the rasterizer state (see ).

    Which scissor rectangle to use is determined by the SV_ViewportArrayIndex semantic output by a geometry shader (see shader semantic syntax). If a geometry shader does not make use of the SV_ViewportArrayIndex semantic then Direct3D will use the first scissor rectangle in the array.

    Each scissor rectangle in the array corresponds to a viewport in an array of viewports (see ).

    +
    + + bb173611 + void ID3D10Device::RSSetScissorRects([In] unsigned int NumRects,[In, Buffer, Optional] const RECT* pRects) + ID3D10Device::RSSetScissorRects +
    + + +

    Get the rasterizer state from the rasterizer stage of the pipeline.

    +
    + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173609 + void ID3D10Device::RSGetState([Out] ID3D10RasterizerState** ppRasterizerState) + ID3D10Device::RSGetState +
    + + +

    Get the array of viewports bound to the rasterizer stage

    +
    + No documentation. + No documentation. + + bb173610 + void ID3D10Device::RSGetViewports([InOut] unsigned int* NumViewports,[Out, Buffer, Optional] D3D10_VIEWPORT* pViewports) + ID3D10Device::RSGetViewports +
    + + +

    Get the array of scissor rectangles bound to the rasterizer stage.

    +
    + No documentation. + No documentation. + + bb173608 + void ID3D10Device::RSGetScissorRects([InOut] unsigned int* NumRects,[Out, Buffer, Optional] RECT* pRects) + ID3D10Device::RSGetScissorRects +
    + + +

    The device interface represents a virtual adapter for Direct3D 10.0; it is used to perform rendering and create Direct3D resources.

    +
    + +

    A device is created using .

    +
    + + bb173528 + ID3D10Device + ID3D10Device +
    + + + Set the target output {{buffers}} for the {{StreamOutput}} stage, which enables/disables the pipeline to stream-out data. + + + Call ID3D10Device::SOSetTargets (before any draw calls) to stream data out; call SOSetTargets with NULL to stop streaming data out. For an example, see Exercise 01 from the GDC 2007 workshop, which sets the stream output render targets before calling draw methods in the RenderInstanceToStream function. An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass. Calling this method using a buffer that is currently bound for writing will effectively bind NULL instead because a buffer cannot be bound as both an input and an output at the same time. The {{DeviceDebug Layer}} will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime. The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device. + + an array of output buffers (see ) to bind to the device. The buffers must have been created with the flag. + void SOSetTargets([In] int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppSOTargets,[In, Buffer, Optional] const int* pOffsets) + + + + Get the target output {{buffers}} for the {{StreamOutput}} stage of the pipeline. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + Number of buffers to get. A maximum of four output buffers can be retrieved. + an array of output buffers (see ) to bind to the device. + void SOGetTargets([In] int NumBuffers,[Out, Buffer, Optional] ID3D10Buffer** ppSOTargets,[Out, Buffer, Optional] int* pOffsets) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set the target output buffers for the StreamOutput stage, which enables/disables the pipeline to stream-out data.

    +
    + No documentation. + No documentation. + No documentation. + +

    Call (before any draw calls) to stream data out; call SOSetTargets with null to stop streaming data out. For an example, see Exercise 01 from the GDC 2007 workshop, which sets the stream output rendertargets before calling draw methods in the RenderInstanceToStream function.

    An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass.

    Calling this method using a buffer that is currently bound for writing will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The Debug Layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173620 + void ID3D10Device::SOSetTargets([In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppSOTargets,[In, Buffer, Optional] const unsigned int* pOffsets) + ID3D10Device::SOSetTargets +
    + + +

    Set the target output buffers for the StreamOutput stage, which enables/disables the pipeline to stream-out data.

    +
    + No documentation. + No documentation. + No documentation. + +

    Call (before any draw calls) to stream data out; call SOSetTargets with null to stop streaming data out. For an example, see Exercise 01 from the GDC 2007 workshop, which sets the stream output rendertargets before calling draw methods in the RenderInstanceToStream function.

    An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass.

    Calling this method using a buffer that is currently bound for writing will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The Debug Layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173620 + void ID3D10Device::SOSetTargets([In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppSOTargets,[In, Buffer, Optional] const unsigned int* pOffsets) + ID3D10Device::SOSetTargets +
    + + +

    Set the target output buffers for the StreamOutput stage, which enables/disables the pipeline to stream-out data.

    +
    + No documentation. + No documentation. + No documentation. + +

    Call (before any draw calls) to stream data out; call SOSetTargets with null to stop streaming data out. For an example, see Exercise 01 from the GDC 2007 workshop, which sets the stream output rendertargets before calling draw methods in the RenderInstanceToStream function.

    An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass.

    Calling this method using a buffer that is currently bound for writing will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The Debug Layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173620 + void ID3D10Device::SOSetTargets([In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppSOTargets,[In, Buffer, Optional] const unsigned int* pOffsets) + ID3D10Device::SOSetTargets +
    + + +

    Get the target output buffers for the StreamOutput stage of the pipeline.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173619 + void ID3D10Device::SOGetTargets([In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D10Buffer** ppSOTargets,[Out, Buffer, Optional] unsigned int* pOffsets) + ID3D10Device::SOGetTargets +
    + + +

    The device interface represents a virtual adapter for Direct3D 10.1; it is used to perform rendering and create Direct3D resources.

    +
    + +

    A device is created using .

    This method requires Windows Vista Service Pack 1.

    +
    + + bb694546 + ID3D10Device1 + ID3D10Device1 +
    + + + Constructor for a D3D10.1 Device. See for more information. + + + + + + Constructor for a D3D10.1 Device. See for more information. + + + + + + Constructor for a D3D10.1 Device. See for more information. + + + + + + + Constructor for a D3D10.1 Device. See for more information. + + + + + + + Constructor for a D3D10.1 Device. See for more information. + + + + + + + + Constructor for a D3D10.1 Device. See for more information. + + + + + + + + Initializes a new instance of the class along with a new used for rendering. + + The type of device to create. + A list of runtime layers to enable. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + + Initializes a new instance of the class along with a new used for rendering. + + The video adapter on which the device should be created. + A list of runtime layers to enable. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + + Initializes a new instance of the class along with a new used for rendering. + + The type of device to create. + A list of runtime layers to enable. + Details used to create the swap chain. + Desired feature level + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + + Initializes a new instance of the class along with a new used for rendering. + + The video adapter on which the device should be created. + A list of runtime layers to enable. + Details used to create the swap chain. + Desired feature level + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + + This overload has been deprecated. Use one of the alternatives that does not take both an adapter and a driver type. + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the feature level of the hardware device.

    +
    + +

    This method requires Windows Vista Service Pack 1.

    +
    + + bb694549 + GetFeatureLevel + GetFeatureLevel + D3D10_FEATURE_LEVEL1 ID3D10Device1::GetFeatureLevel() +
    + + +

    Create a shader-resource view for accessing data in a resource.

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    A resource is made up of one or more subresources, a view identifies which subresources to allow the pipeline to access. In addition, each resource is bound to the pipeline using a view. A shader-resource view is designed to bind any buffer or texture resource to the shader stages using the following API methods: VSSetShaderResources, GSSetShaderResources and PSSetShaderResources.

    Since a view is fully typed, this means that typeless resources become fully typed when bound to the pipeline.

    This method requires Windows Vista Service Pack 1.

    +
    + + bb694548 + HRESULT ID3D10Device1::CreateShaderResourceView1([In] ID3D10Resource* pResource,[In, Optional] const D3D10_SHADER_RESOURCE_VIEW_DESC1* pDesc,[Out, Fast] ID3D10ShaderResourceView1** ppSRView) + ID3D10Device1::CreateShaderResourceView1 +
    + + +

    Create a blend-state object that encapsules blend state for the output-merger stage.

    +
    +

    Pointer to a blend-state description (see ).

    +

    Address of a reference to the blend-state object created (see Interface).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    An application can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.

    This method requires Windows Vista Service Pack 1.

    +
    + + bb694547 + HRESULT ID3D10Device1::CreateBlendState1([In] const D3D10_BLEND_DESC1* pBlendStateDesc,[Out, Fast] ID3D10BlendState1** ppBlendState) + ID3D10Device1::CreateBlendState1 +
    + + +

    Gets the feature level of the hardware device.

    +
    +

    The feature level (see ).

    + +

    This method requires Windows Vista Service Pack 1.

    +
    + + bb694549 + D3D10_FEATURE_LEVEL1 ID3D10Device1::GetFeatureLevel() + ID3D10Device1::GetFeatureLevel +
    + + +

    A device-child interface accesses data used by a device.

    +
    + +

    There are several types of device child interfaces, all of which inherit this interface. They include shaders, state objects, and input layouts.

    +
    + + bb173529 + ID3D10DeviceChild + ID3D10DeviceChild +
    + + + Gets or sets the debug-name for this object. + + + The debug name. + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to the device that created this interface.

    +
    + +

    Any returned interfaces will have their reference count incremented by one, so be sure to call ::release() on the returned reference(s) before they are freed or else you will have a memory leak.

    +
    + + bb173530 + GetDevice + GetDevice + void ID3D10DeviceChild::GetDevice([Out] ID3D10Device** ppDevice) +
    + + +

    Get a reference to the device that created this interface.

    +
    +

    Address of a reference to a device (see Interface).

    + +

    Any returned interfaces will have their reference count incremented by one, so be sure to call ::release() on the returned reference(s) before they are freed or else you will have a memory leak.

    +
    + + bb173530 + void ID3D10DeviceChild::GetDevice([Out] ID3D10Device** ppDevice) + ID3D10DeviceChild::GetDevice +
    + + +

    Get application-defined data from a device child.

    +
    +

    Guid associated with the data.

    +

    Size of the data.

    +

    Pointer to the data stored with the device child. If pData is null, DataSize must also be 0, and any data previously associated with the guid will be destroyed.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    The data stored in the device child is set with .

    +
    + + bb173531 + HRESULT ID3D10DeviceChild::GetPrivateData([In] const GUID& guid,[InOut] unsigned int* pDataSize,[Out, Buffer, Optional] void* pData) + ID3D10DeviceChild::GetPrivateData +
    + + +

    Set application-defined data to a device child and associate that data with an application-defined guid.

    +
    +

    Guid associated with the data.

    +

    Size of the data.

    +

    Pointer to the data to be stored with this device child. If pData is null, DataSize must also be 0, and any data previously associated with the specified guid will be destroyed.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    The data stored in the device child with this method can be retrieved with .

    +
    + + bb173532 + HRESULT ID3D10DeviceChild::SetPrivateData([In] const GUID& guid,[In] unsigned int DataSize,[In, Buffer, Optional] const void* pData) + ID3D10DeviceChild::SetPrivateData +
    + + +

    Associate an -derived interface with this device child and associate that interface with an application-defined guid.

    +
    + No documentation. + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    When this method is called ::addref() will be called on the -derived interface, and when the device child is detroyed ::release() will be called on the -derived interface.

    +
    + + bb173533 + HRESULT ID3D10DeviceChild::SetPrivateDataInterface([In] const GUID& guid,[In, Optional] const IUnknown* pData) + ID3D10DeviceChild::SetPrivateDataInterface +
    + + +

    A debug interface controls debug settings, validates pipeline state and can only be used if the debug layer is turned on.

    +
    + +

    This interface is obtained by querying it from the Interface using IUnknown::QueryInterface.

    +
    + + bb173516 + ID3D10Debug + ID3D10Debug +
    + + + Initializes a new instance of the class. + + The device. + + + + Gets or sets the feature flags that indicates which debug features are on or off. + + The feature flags. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get or sets the number of milliseconds to sleep after Present is called.

    +
    + +

    Value is set with .

    +
    + + bb173518 + GetPresentPerRenderOpDelay / SetPresentPerRenderOpDelay + GetPresentPerRenderOpDelay + unsigned int ID3D10Debug::GetPresentPerRenderOpDelay() +
    + + +

    Get or sets the swap chain that the runtime will use for automatically calling Present.

    +
    + +

    The swap chain retrieved by this method will only be used if is set in the feature mask.

    +
    + + bb173519 + GetSwapChain / SetSwapChain + GetSwapChain + HRESULT ID3D10Debug::GetSwapChain([Out] IDXGISwapChain** ppSwapChain) +
    + + +

    Set a bitfield of flags that will turn debug features on and off.

    +
    +

    Feature-mask flags bitwise ORed together. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. See remarks for a list of flags.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    Note??If you call this API in a Session 0 process, it returns .

    Setting a feature-mask flag will cause a rendering-operation method (listed below) to do some extra task when called. The possible feature flags are:

    Application will wait for the GPU to finish processing the rendering operation before continuing.
    Runtime will additionally call .
    Runtime will call Present. Presentation of render buffers will occur according to the settings established by prior calls to and .

    ?

    These feature-mask flags apply to the following rendering-operation methods:

    +
    + + bb173520 + HRESULT ID3D10Debug::SetFeatureMask([In] unsigned int Mask) + ID3D10Debug::SetFeatureMask +
    + + +

    Get a bitfield of flags that indicates which debug features are on or off.

    +
    +

    Mask of feature-mask flags bitwise ORed together. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. See for a list of possible feature-mask flags.

    + + bb173517 + unsigned int ID3D10Debug::GetFeatureMask() + ID3D10Debug::GetFeatureMask +
    + + +

    Set the number of milliseconds to sleep after Present is called.

    +
    + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    Note??If you call this API in a Session 0 process, it returns .

    The application will only sleep if is a set in the feature mask. If that flag is not set the number of milliseconds is set but ignored and the application does not sleep. 10ms is used as a default value if this method is never called.

    +
    + + bb173521 + HRESULT ID3D10Debug::SetPresentPerRenderOpDelay([In] unsigned int Milliseconds) + ID3D10Debug::SetPresentPerRenderOpDelay +
    + + +

    Get the number of milliseconds to sleep after Present is called.

    +
    +

    Number of milliseconds to sleep after Present is called.

    + +

    Value is set with .

    +
    + + bb173518 + unsigned int ID3D10Debug::GetPresentPerRenderOpDelay() + ID3D10Debug::GetPresentPerRenderOpDelay +
    + + +

    Set a swap chain that the runtime will use for automatically calling Present.

    +
    + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    Note??If you call this API in a Session 0 process, it returns .

    The swap chain set by this method will only be used if is set in the feature mask.

    +
    + + bb173522 + HRESULT ID3D10Debug::SetSwapChain([In, Optional] IDXGISwapChain* pSwapChain) + ID3D10Debug::SetSwapChain +
    + + +

    Get the swap chain that the runtime will use for automatically calling Present.

    +
    + No documentation. +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    The swap chain retrieved by this method will only be used if is set in the feature mask.

    +
    + + bb173519 + HRESULT ID3D10Debug::GetSwapChain([Out] IDXGISwapChain** ppSwapChain) + ID3D10Debug::GetSwapChain +
    + + +

    Check the validity of pipeline state.

    +
    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    When the debug layer is turned on all draw functions will do this operation.

    +
    + + bb173523 + HRESULT ID3D10Debug::Validate() + ID3D10Debug::Validate +
    + + +

    An interface manages a set of state objects, resources, and shaders for implementing a rendering effect.

    +
    + +

    An effect is created by calling .

    The effect system groups the information required for rendering into an effect which contains: state objects for assigning state changes in groups, resources for supplying input data and storing output data, and programs that control how the rendering is done called shaders. For more information, see Effects (Direct3D 10).

    Note??

    If you call QueryInterface on an object to retrieve the interface, QueryInterface returns E_NOINTERFACE. To work around this issue, use the following code:

     * pIUnknown = (*)pEffect; pIUnknown->AddRef();	
    +            
    +
    + + bb173630 + ID3D10Effect + ID3D10Effect +
    + + + Initializes a new instance of the class. + + The device. + The effect byte code. + Effect compile options + Optional. A reference to an memory space for effect variables that are shared across effects (see ). + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Test an effect to see if it contains valid syntax.

    +
    + + bb173772 + IsValid + IsValid + BOOL ID3D10Effect::IsValid() +
    + + +

    Test an effect to see if it is part of a memory pool.

    +
    + + bb173771 + IsPool + IsPool + BOOL ID3D10Effect::IsPool() +
    + + +

    Get the device that created the effect.

    +
    + +

    An effect is created for a specific device, by calling a function such as .

    +
    + + bb173764 + GetDevice + GetDevice + HRESULT ID3D10Effect::GetDevice([Out] ID3D10Device** ppDevice) +
    + + +

    Get an effect description.

    +
    + +

    An effect description contains basic information about an effect such as the techniques it contains and the constant buffer resources it requires.

    +
    + + bb173763 + GetDesc + GetDesc + HRESULT ID3D10Effect::GetDesc([Out] D3D10_EFFECT_DESC* pDesc) +
    + + +

    Test an effect to see if the reflection metadata has been removed from memory.

    +
    + +

    An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the API. You can minimize the amount of memory required by an effect by calling which removes the reflection metadata from memory. Of course, API methods to read variables will no longer work once reflection data has been removed.

    +
    + + bb173770 + IsOptimized + IsOptimized + BOOL ID3D10Effect::IsOptimized() +
    + + +

    Test an effect to see if it contains valid syntax.

    +
    +

    TRUE if the code syntax is valid; otherwise .

    + + bb173772 + BOOL ID3D10Effect::IsValid() + ID3D10Effect::IsValid +
    + + +

    Test an effect to see if it is part of a memory pool.

    +
    +

    TRUE if the effect is pooled; otherwise . See Interface.

    + + bb173771 + BOOL ID3D10Effect::IsPool() + ID3D10Effect::IsPool +
    + + +

    Get the device that created the effect.

    +
    +

    A reference to an Interface.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    An effect is created for a specific device, by calling a function such as .

    +
    + + bb173764 + HRESULT ID3D10Effect::GetDevice([Out] ID3D10Device** ppDevice) + ID3D10Effect::GetDevice +
    + + +

    Get an effect description.

    +
    +

    A reference to an effect description (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    An effect description contains basic information about an effect such as the techniques it contains and the constant buffer resources it requires.

    +
    + + bb173763 + HRESULT ID3D10Effect::GetDesc([Out] D3D10_EFFECT_DESC* pDesc) + ID3D10Effect::GetDesc +
    + + +

    Get a constant buffer by index.

    +
    +

    A zero-based index.

    +

    A reference to a Interface.

    + +

    An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.

    +
    + + bb173761 + ID3D10EffectConstantBuffer* ID3D10Effect::GetConstantBufferByIndex([In] unsigned int Index) + ID3D10Effect::GetConstantBufferByIndex +
    + + +

    Get a constant buffer by name.

    +
    +

    The constant-buffer name.

    +

    A reference to the constant buffer indicated by the Name. See .

    + +

    An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.

    +
    + + bb173762 + ID3D10EffectConstantBuffer* ID3D10Effect::GetConstantBufferByName([In] const char* Name) + ID3D10Effect::GetConstantBufferByName +
    + + +

    Get a variable by index.

    +
    +

    A zero-based index.

    +

    A reference to a Interface.

    + +

    An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access any local non-static effect variable using its name or with an index.

    The method returns a reference to an effect-variable interface if a variable is not found; you can call to verify whether or not the index exists.

    +
    + + bb173767 + ID3D10EffectVariable* ID3D10Effect::GetVariableByIndex([In] unsigned int Index) + ID3D10Effect::GetVariableByIndex +
    + + +

    Get a variable by name.

    +
    +

    The variable name.

    +

    A reference to an Interface.

    + +

    An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access an effect variable using its name or with an index.

    The method returns a reference to an effect-variable interface if a variable is not found; you can call to verify whether or not the name exists.

    +
    + + bb173768 + ID3D10EffectVariable* ID3D10Effect::GetVariableByName([In] const char* Name) + ID3D10Effect::GetVariableByName +
    + + +

    Get a variable by semantic.

    +
    +

    The semantic name.

    +

    A reference to the effect variable indicated by the Semantic. See Interface.

    + +

    Each effect variable can have a semantic attached, which is a user defined metadata string. Some system-value semantics are reserved words that trigger built in functionality by pipeline stages.

    The method returns a reference to an effect-variable interface if a variable is not found; you can call to verify whether or not the semantic exists.

    +
    + + bb173769 + ID3D10EffectVariable* ID3D10Effect::GetVariableBySemantic([In] const char* Semantic) + ID3D10Effect::GetVariableBySemantic +
    + + +

    Get a technique by index.

    +
    +

    A zero-based index.

    +

    A reference to an Interface.

    + +

    An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index. For more about techniques, see techniques and passes.

    +
    + + bb173765 + ID3D10EffectTechnique* ID3D10Effect::GetTechniqueByIndex([In] unsigned int Index) + ID3D10Effect::GetTechniqueByIndex +
    + + +

    Get a technique by name.

    +
    +

    The name of the technique.

    +

    A reference to an Interface, or null if the technique is not found.

    + +

    An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index. For more about techniques, see techniques and passes.

    +
    + + bb173766 + ID3D10EffectTechnique* ID3D10Effect::GetTechniqueByName([In] const char* Name) + ID3D10Effect::GetTechniqueByName +
    + + +

    Minimize the amount of memory required for an effect.

    +
    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the API. You can minimize the amount of memory required by an effect by calling which removes the reflection metadata from memory. API methods to read variables will no longer work once reflection data has been removed.

    The following methods will fail after Optimize has been called on an effect.

    Note that references retrieved with these methods before calling are still valid after is called. This allows the application to get all the variables, techniques, and passes it will use, call Optimize, and then use the effect.

    +
    + + bb173773 + HRESULT ID3D10Effect::Optimize() + ID3D10Effect::Optimize +
    + + +

    Test an effect to see if the reflection metadata has been removed from memory.

    +
    +

    TRUE if the effect is optimized; otherwise .

    + +

    An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the API. You can minimize the amount of memory required by an effect by calling which removes the reflection metadata from memory. Of course, API methods to read variables will no longer work once reflection data has been removed.

    +
    + + bb173770 + BOOL ID3D10Effect::IsOptimized() + ID3D10Effect::IsOptimized +
    + + +

    The blend-variable interface accesses blend state.

    +
    + +

    An Interface is created when an effect is read into memory.

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state. For examples, see Two Ways to Get the State in an Effect Variable.

    +
    + + bb173631 + ID3D10EffectBlendVariable + ID3D10EffectBlendVariable +
    + + + Get a pointer to a blend-state interface. + + Returns . + HRESULT ID3D10EffectBlendVariable::GetBlendState([None] int Index,[Out] ID3D10BlendState** ppBlendState) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to a blend-state interface.

    +
    +

    Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.

    +

    The address of a reference to a blend-state interface (see Interface).

    + + bb173633 + HRESULT ID3D10EffectBlendVariable::GetBlendState([In] unsigned int Index,[Out] ID3D10BlendState** ppBlendState) + ID3D10EffectBlendVariable::GetBlendState +
    + + +

    Get a reference to a blend-state variable.

    +
    +

    Index into an array of blend-state descriptions. If there is only one blend-state variable in the effect, use 0.

    +

    A reference to a blend-state description (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.

    +
    + + bb173632 + HRESULT ID3D10EffectBlendVariable::GetBackingStore([In] unsigned int Index,[Out] D3D10_BLEND_DESC* pBlendDesc) + ID3D10EffectBlendVariable::GetBackingStore +
    + + +

    A depth-stencil-variable interface accesses depth-stencil state.

    +
    + +

    An Interface is created when an effect is read into memory.

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state. For examples, see Two Ways to Get the State in an Effect Variable.

    +
    + + bb173639 + ID3D10EffectDepthStencilVariable + ID3D10EffectDepthStencilVariable +
    + + + Get a pointer to a depth-stencil interface. + + Returns a pointer to a blend-state interface (see ). + HRESULT ID3D10EffectDepthStencilVariable::GetDepthStencilState([None] int Index,[Out] ID3D10DepthStencilState** ppDepthStencilState) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to a depth-stencil interface.

    +
    +

    Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.

    +

    The address of a reference to a blend-state interface (see Interface).

    + + bb173641 + HRESULT ID3D10EffectDepthStencilVariable::GetDepthStencilState([In] unsigned int Index,[Out] ID3D10DepthStencilState** ppDepthStencilState) + ID3D10EffectDepthStencilVariable::GetDepthStencilState +
    + + +

    Get a reference to a variable that contains depth-stencil state.

    +
    +

    Index into an array of depth-stencil-state descriptions. If there is only one depth-stencil variable in the effect, use 0.

    +

    A reference to a depth-stencil-state description (see ).

    + +

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.

    +
    + + bb173640 + HRESULT ID3D10EffectDepthStencilVariable::GetBackingStore([In] unsigned int Index,[Out] D3D10_DEPTH_STENCIL_DESC* pDepthStencilDesc) + ID3D10EffectDepthStencilVariable::GetBackingStore +
    + + +

    A depth-stencil-view-variable interface accesses a depth-stencil view.

    +
    + + bb173642 + ID3D10EffectDepthStencilViewVariable + ID3D10EffectDepthStencilViewVariable +
    + + + Set an array of depth-stencil-view resources. + + A pointer to an array of depth-stencil-view interfaces. See . + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectDepthStencilViewVariable::SetDepthStencilArray([In, Buffer] ID3D10DepthStencilView** ppResources,[None] int Offset,[None] int Count) + + + + Set an array of depth-stencil-view resources. + + A pointer to an array of depth-stencil-view interfaces. See . + The zero-based array index to set the first interface. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectDepthStencilViewVariable::SetDepthStencilArray([In, Buffer] ID3D10DepthStencilView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of depth-stencil-view resources. + + The number of elements in the array. + Returns an array of depth-stencil-view interfaces. See . + HRESULT ID3D10EffectDepthStencilViewVariable::GetDepthStencilArray([Out, Buffer] ID3D10DepthStencilView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of depth-stencil-view resources. + + The zero-based array index to get the first interface. + The number of elements in the array. + Returns an array of depth-stencil-view interfaces. See . + HRESULT ID3D10EffectDepthStencilViewVariable::GetDepthStencilArray([Out, Buffer] ID3D10DepthStencilView** ppResources,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a depth-stencil-view resource.

    +
    +

    A reference to a depth-stencil-view interface. See Interface.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173645 + HRESULT ID3D10EffectDepthStencilViewVariable::SetDepthStencil([In, Optional] ID3D10DepthStencilView* pResource) + ID3D10EffectDepthStencilViewVariable::SetDepthStencil +
    + + +

    Get a depth-stencil-view resource.

    +
    +

    The address of a reference to a depth-stencil-view interface. See Interface.

    + + bb173643 + HRESULT ID3D10EffectDepthStencilViewVariable::GetDepthStencil([Out] ID3D10DepthStencilView** ppResource) + ID3D10EffectDepthStencilViewVariable::GetDepthStencil +
    + + +

    Set an array of depth-stencil-view resources.

    +
    +

    A reference to an array of depth-stencil-view interfaces. See Interface.

    +

    The zero-based array index to set the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173646 + HRESULT ID3D10EffectDepthStencilViewVariable::SetDepthStencilArray([In, Buffer] ID3D10DepthStencilView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectDepthStencilViewVariable::SetDepthStencilArray +
    + + +

    Set an array of depth-stencil-view resources.

    +
    +

    A reference to an array of depth-stencil-view interfaces. See Interface.

    +

    The zero-based array index to set the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173646 + HRESULT ID3D10EffectDepthStencilViewVariable::SetDepthStencilArray([In, Buffer] ID3D10DepthStencilView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectDepthStencilViewVariable::SetDepthStencilArray +
    + + +

    Set an array of depth-stencil-view resources.

    +
    +

    A reference to an array of depth-stencil-view interfaces. See Interface.

    +

    The zero-based array index to set the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173646 + HRESULT ID3D10EffectDepthStencilViewVariable::SetDepthStencilArray([In, Buffer] ID3D10DepthStencilView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectDepthStencilViewVariable::SetDepthStencilArray +
    + + +

    Get an array of depth-stencil-view resources.

    +
    +

    A reference to an array of depth-stencil-view interfaces. See Interface.

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173644 + HRESULT ID3D10EffectDepthStencilViewVariable::GetDepthStencilArray([Out, Buffer] ID3D10DepthStencilView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectDepthStencilViewVariable::GetDepthStencilArray +
    + + +

    A matrix-variable interface accesses a matrix.

    +
    + + bb173647 + ID3D10EffectMatrixVariable + ID3D10EffectMatrixVariable +
    + + + Set a floating-point matrix. + + A pointer to the first element in the matrix. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectMatrixVariable::SetMatrix([In] float* pData) + + + + Get a matrix. + + A reference to the first element in a matrix. + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11. + + HRESULT ID3DX11EffectMatrixVariable::GetMatrix([Out] SHARPDX_MATRIX* pData) + + + + Get a matrix. + + A reference to the first element in a matrix. + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11. + + HRESULT ID3DX11EffectMatrixVariable::GetMatrix([Out] SHARPDX_MATRIX* pData) + + + + Set a floating-point matrix. + + A pointer to the first element in the matrix. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectMatrixVariable::SetMatrix([In] float* pData) + + + + Set an array of floating-point matrices. + + A pointer to the first matrix. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectMatrixVariable::SetMatrixArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Set an array of floating-point matrices. + + A pointer to the first matrix. + The number of matrix elements to skip from the start of the array. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectMatrixVariable::SetMatrixArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of matrices. + + The number of matrices in the returned array. + Returns an array of matrix. + HRESULT ID3D10EffectMatrixVariable::GetMatrixArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of matrices. + + The offset (in number of matrices) between the start of the array and the first matrix returned. + The number of matrices in the returned array. + Returns an array of matrix. + HRESULT ID3D10EffectMatrixVariable::GetMatrixArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Transpose and set a floating-point matrix. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + A pointer to the first element of a matrix. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectMatrixVariable::SetMatrixTranspose([In] float* pData) + + + + Transpose and set a floating-point matrix. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + A pointer to the first element of a matrix. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectMatrixVariable::SetMatrixTranspose([In] float* pData) + + + + Transpose and set an array of floating-point matrices. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + A pointer to an array of matrices. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectMatrixVariable::SetMatrixTransposeArray([In] float* pData,[None] int Offset,[None] int Count) + + + + Transpose and set an array of floating-point matrices. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + A pointer to an array of matrices. + The offset (in number of matrices) between the start of the array and the first matrix to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectMatrixVariable::SetMatrixTransposeArray([In] float* pData,[None] int Offset,[None] int Count) + + + + Transpose and get a floating-point matrix. + + The transposed matrix. + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11. + + HRESULT ID3DX11EffectMatrixVariable::GetMatrixTranspose([Out] SHARPDX_MATRIX* pData) + + + + Transpose and get a floating-point matrix. + + The transposed matrix. + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11. + + HRESULT ID3DX11EffectMatrixVariable::GetMatrixTranspose([Out] SHARPDX_MATRIX* pData) + + + + Transpose and get an array of floating-point matrices. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + The number of matrices in the array to get. + Returns an array of transposed . + HRESULT ID3D10EffectMatrixVariable::GetMatrixTransposeArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Transpose and get an array of floating-point matrices. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + The offset (in number of matrices) between the start of the array and the first matrix to get. + The number of matrices in the array to get. + Returns an array of transposed . + HRESULT ID3D10EffectMatrixVariable::GetMatrixTransposeArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a floating-point matrix.

    +
    +

    A reference to the first element in the matrix.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173652 + HRESULT ID3D10EffectMatrixVariable::SetMatrix([In] SHARPDX_MATRIX* pData) + ID3D10EffectMatrixVariable::SetMatrix +
    + + +

    Get a matrix.

    +
    +

    A reference to the first element in a matrix.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173648 + HRESULT ID3D10EffectMatrixVariable::GetMatrix([Out] SHARPDX_MATRIX* pData) + ID3D10EffectMatrixVariable::GetMatrix +
    + + +

    Set an array of floating-point matrices.

    +
    +

    A reference to the first matrix.

    +

    The number of matrix elements to skip from the start of the array.

    +

    The number of elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173653 + HRESULT ID3D10EffectMatrixVariable::SetMatrixArray([In, Buffer] SHARPDX_MATRIX* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectMatrixVariable::SetMatrixArray +
    + + +

    Get an array of matrices.

    +
    +

    A reference to the first element of the first matrix in an array of matrices.

    +

    The offset (in number of matrices) between the start of the array and the first matrix returned.

    +

    The number of matrices in the returned array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173649 + HRESULT ID3D10EffectMatrixVariable::GetMatrixArray([Out, Buffer] SHARPDX_MATRIX* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectMatrixVariable::GetMatrixArray +
    + + +

    Transpose and set a floating-point matrix.

    +
    +

    A reference to the first element of a matrix.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).

    +
    + + bb173654 + HRESULT ID3D10EffectMatrixVariable::SetMatrixTranspose([In] SHARPDX_MATRIX* pData) + ID3D10EffectMatrixVariable::SetMatrixTranspose +
    + + +

    Transpose and get a floating-point matrix.

    +
    +

    A reference to the first element of a transposed matrix.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).

    +
    + + bb173650 + HRESULT ID3D10EffectMatrixVariable::GetMatrixTranspose([Out] SHARPDX_MATRIX* pData) + ID3D10EffectMatrixVariable::GetMatrixTranspose +
    + + +

    Transpose and set an array of floating-point matrices.

    +
    +

    A reference to an array of matrices.

    +

    The offset (in number of matrices) between the start of the array and the first matrix to set.

    +

    The number of matrices in the array to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).

    +
    + + bb173655 + HRESULT ID3D10EffectMatrixVariable::SetMatrixTransposeArray([In, Buffer] SHARPDX_MATRIX* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectMatrixVariable::SetMatrixTransposeArray +
    + + +

    Transpose and get an array of floating-point matrices.

    +
    +

    A reference to the first element of an array of tranposed matrices.

    +

    The offset (in number of matrices) between the start of the array and the first matrix to get.

    +

    The number of matrices in the array to get.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).

    +
    + + bb173651 + HRESULT ID3D10EffectMatrixVariable::GetMatrixTransposeArray([Out, Buffer] SHARPDX_MATRIX* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectMatrixVariable::GetMatrixTransposeArray +
    + + +

    A pass interface encapsulates state assignments within a technique.

    The lifetime of an object is equal to the lifetime of its parent object.

    • Methods
    +
    + +

    A pass is a block of code that sets render-state objects and shaders. A pass is declared within a technique; the syntax for a technique is shown in Effect Technique Syntax (Direct3D 10).

    To get an effect-pass interface, call a method like .

    +
    + + bb173656 + ID3D10EffectPass + ID3D10EffectPass +
    + + + Set the state contained in a pass to the device. + + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT Apply([None] UINT Flags) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Test a pass to see if it contains valid syntax.

    +
    + + bb173665 + IsValid + IsValid + BOOL ID3D10EffectPass::IsValid() +
    + + +

    Get a pass description.

    +
    + +

    A pass is a block of code that sets render state and shaders (which in turn sets constant buffers, samplers and textures). An effect technique contains one or more passes. See techniques and passes.

    +
    + + bb173661 + GetDesc + GetDesc + HRESULT ID3D10EffectPass::GetDesc([Out] D3D10_PASS_DESC* pDesc) +
    + + +

    Get a vertex-shader description.

    +
    + +

    An effect pass can contain render state assignments and shader object assignments.

    +
    + + bb173664 + GetVertexShaderDesc + GetVertexShaderDesc + HRESULT ID3D10EffectPass::GetVertexShaderDesc([Out] D3D10_PASS_SHADER_DESC* pDesc) +
    + + +

    Get a geometry-shader description.

    +
    + +

    An effect pass can contain render state assignments and shader object assignments.

    +
    + + bb173662 + GetGeometryShaderDesc + GetGeometryShaderDesc + HRESULT ID3D10EffectPass::GetGeometryShaderDesc([Out] D3D10_PASS_SHADER_DESC* pDesc) +
    + + +

    Get a pixel-shader description.

    +
    + +

    An effect pass can contain render state assignments and shader object assignments.

    +
    + + bb173663 + GetPixelShaderDesc + GetPixelShaderDesc + HRESULT ID3D10EffectPass::GetPixelShaderDesc([Out] D3D10_PASS_SHADER_DESC* pDesc) +
    + + +

    Test a pass to see if it contains valid syntax.

    +
    +

    TRUE if the code syntax is valid; otherwise .

    + + bb173665 + BOOL ID3D10EffectPass::IsValid() + ID3D10EffectPass::IsValid +
    + + +

    Get a pass description.

    +
    +

    A reference to a pass description (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    A pass is a block of code that sets render state and shaders (which in turn sets constant buffers, samplers and textures). An effect technique contains one or more passes. See techniques and passes.

    +
    + + bb173661 + HRESULT ID3D10EffectPass::GetDesc([Out] D3D10_PASS_DESC* pDesc) + ID3D10EffectPass::GetDesc +
    + + +

    Get a vertex-shader description.

    +
    +

    A reference to a vertex-shader description (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    An effect pass can contain render state assignments and shader object assignments.

    +
    + + bb173664 + HRESULT ID3D10EffectPass::GetVertexShaderDesc([Out] D3D10_PASS_SHADER_DESC* pDesc) + ID3D10EffectPass::GetVertexShaderDesc +
    + + +

    Get a geometry-shader description.

    +
    +

    A reference to a geometry-shader description (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    An effect pass can contain render state assignments and shader object assignments.

    +
    + + bb173662 + HRESULT ID3D10EffectPass::GetGeometryShaderDesc([Out] D3D10_PASS_SHADER_DESC* pDesc) + ID3D10EffectPass::GetGeometryShaderDesc +
    + + +

    Get a pixel-shader description.

    +
    +

    A reference to a pixel-shader description (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    An effect pass can contain render state assignments and shader object assignments.

    +
    + + bb173663 + HRESULT ID3D10EffectPass::GetPixelShaderDesc([Out] D3D10_PASS_SHADER_DESC* pDesc) + ID3D10EffectPass::GetPixelShaderDesc +
    + + +

    Get an annotation by index.

    +
    +

    A zero-based index.

    +

    A reference to an Interface.

    + + bb173659 + ID3D10EffectVariable* ID3D10EffectPass::GetAnnotationByIndex([In] unsigned int Index) + ID3D10EffectPass::GetAnnotationByIndex +
    + + +

    Get an annotation by name.

    +
    +

    The name of the annotation.

    +

    A reference to an Interface.

    + + bb173660 + ID3D10EffectVariable* ID3D10EffectPass::GetAnnotationByName([In] const char* Name) + ID3D10EffectPass::GetAnnotationByName +
    + + +

    Set the state contained in a pass to the device.

    +
    +

    Unused.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173657 + HRESULT ID3D10EffectPass::Apply([In] unsigned int Flags) + ID3D10EffectPass::Apply +
    + + +

    Generate a mask for allowing/preventing state changes.

    +
    +

    A reference to a state-block mask (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173658 + HRESULT ID3D10EffectPass::ComputeStateBlockMask([Out] D3D10_STATE_BLOCK_MASK* pStateBlockMask) + ID3D10EffectPass::ComputeStateBlockMask +
    + + +

    Describes an effect pass, which contains pipeline state.

    +
    + +

    Get a pass description by calling ; an effect technique contains one or more passes.

    +
    + + bb205330 + D3D10_PASS_DESC + D3D10_PASS_DESC +
    + + + Returns the signature of this Effect pass. + + + + +

    A string that contains the name of the pass; otherwise null.

    +
    + + bb205330 + const char* Name + char Name +
    + + +

    The number of annotations.

    +
    + + bb205330 + unsigned int Annotations + unsigned int Annotations +
    + + +

    A reference to the input signature or the vertex shader; otherwise null.

    +
    + + bb205330 + unsigned char* pIAInputSignature + unsigned char pIAInputSignature +
    + + +

    The size of the input signature (in bytes).

    +
    + + bb205330 + SIZE_T IAInputSignatureSize + SIZE_T IAInputSignatureSize +
    + + +

    The stencil-reference value used in the depth-stencil state (see Configuring Depth-Stencil Functionality (Direct3D 10)).

    +
    + + bb205330 + unsigned int StencilRef + unsigned int StencilRef +
    + + +

    The sample mask for the blend state (see Configuring Blending Functionality (Direct3D 10)).

    +
    + + bb205330 + unsigned int SampleMask + unsigned int SampleMask +
    + + +

    The per-component blend factors (RGBA) for the blend state (see Configuring Blending Functionality (Direct3D 10)).

    +
    + + bb205330 + SHARPDX_COLOR4 BlendFactor + SHARPDX_COLOR4 BlendFactor +
    + + +

    Describes an effect variable that contains a shader.

    +
    + +

    To get a shader description, call a method like .

    +
    + + bb205331 + D3D10_PASS_SHADER_DESC + D3D10_PASS_SHADER_DESC +
    + + + A reference to the variable that the shader came from. If it is an inline shader assignment, the returned interface will be an anonymous shader variable, which is not retrievable any other way. Its name in the variable description will be "$Anonymous". If there is no assignment of this type in the pass block, this will point to a shader variable that returns false when IsValid is called. + + ID3D10EffectShaderVariable* pShaderVariable + + + +

    A reference to the variable that the shader came from. If it is an inline shader assignment, the returned interface will be an anonymous shader variable, which is not retrievable any other way. Its name in the variable description will be "$Anonymous". If there is no assignment of this type in the pass block, this will point to a shader variable that returns false when IsValid is called.

    +
    + + bb205331 + ID3D10EffectShaderVariable* pShaderVariable + ID3D10EffectShaderVariable pShaderVariable +
    + + +

    A zero-based array index; otherwise 0.

    +
    + + bb205331 + unsigned int ShaderIndex + unsigned int ShaderIndex +
    + + +

    A pool interface represents a common memory space (or pool) for sharing variables between effects.

    +
    + +

    To create an effect pool, call a function like . Effect pools can improve performance by reducing the number of API calls required to make state changes (see Using Effect Pools).

    +
    + + bb173667 + ID3D10EffectPool + ID3D10EffectPool +
    + + + Initializes a new instance of the class. + + The device. + The effect byte code. + Effect compile options + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the effect that created the effect pool.

    +
    +

    A reference to an Interface interface.

    + + bb173668 + ID3D10Effect* ID3D10EffectPool::AsEffect() + ID3D10EffectPool::AsEffect +
    + + +

    A rasterizer-variable interface accesses rasterizer state.

    +
    + +

    An Interface is created when an effect is read into memory.

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state. For examples, see Two Ways to Get the State in an Effect Variable.

    +
    + + bb173669 + ID3D10EffectRasterizerVariable + ID3D10EffectRasterizerVariable +
    + + + Get a pointer to a rasterizer interface. + + Returns a pointer to a rasterizer interface (see ). + HRESULT ID3D10EffectRasterizerVariable::GetRasterizerState([None] int Index,[Out] ID3D10RasterizerState** ppRasterizerState) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to a rasterizer interface.

    +
    +

    Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0.

    +

    The address of a reference to a rasterizer interface (see Interface).

    + + bb173671 + HRESULT ID3D10EffectRasterizerVariable::GetRasterizerState([In] unsigned int Index,[Out] ID3D10RasterizerState** ppRasterizerState) + ID3D10EffectRasterizerVariable::GetRasterizerState +
    + + +

    Get a reference to a variable that contains rasteriser state.

    +
    +

    Index into an array of rasteriser-state descriptions. If there is only one rasteriser variable in the effect, use 0.

    +

    A reference to a rasteriser-state description (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.

    +
    + + bb173670 + HRESULT ID3D10EffectRasterizerVariable::GetBackingStore([In] unsigned int Index,[Out] D3D10_RASTERIZER_DESC* pRasterizerDesc) + ID3D10EffectRasterizerVariable::GetBackingStore +
    + + +

    A render-target-view interface accesses a render target.

    +
    + + bb173672 + ID3D10EffectRenderTargetViewVariable + ID3D10EffectRenderTargetViewVariable +
    + + + Set an array of render-targets. + + Set an array of render-target-view interfaces. See . + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectRenderTargetViewVariable::SetRenderTargetArray([In, Buffer] ID3D10RenderTargetView** ppResources,[None] int Offset,[None] int Count) + + + + Set an array of render-targets. + + Set an array of render-target-view interfaces. See . + The zero-based array index to store the first interface. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectRenderTargetViewVariable::SetRenderTargetArray([In, Buffer] ID3D10RenderTargetView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of render-targets. + + The number of elements in the array. + Returns an array of . + HRESULT ID3D10EffectRenderTargetViewVariable::GetRenderTargetArray([Out, Buffer] ID3D10RenderTargetView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of render-targets. + + The zero-based array index to get the first interface. + The number of elements in the array. + Returns an array of . + HRESULT ID3D10EffectRenderTargetViewVariable::GetRenderTargetArray([Out, Buffer] ID3D10RenderTargetView** ppResources,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a render-target.

    +
    +

    A reference to a render-target-view interface. See Interface.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173675 + HRESULT ID3D10EffectRenderTargetViewVariable::SetRenderTarget([In, Optional] ID3D10RenderTargetView* pResource) + ID3D10EffectRenderTargetViewVariable::SetRenderTarget +
    + + +

    Get a render-target.

    +
    +

    The address of a reference to a render-target-view interface. See Interface.

    + + bb173673 + HRESULT ID3D10EffectRenderTargetViewVariable::GetRenderTarget([Out] ID3D10RenderTargetView** ppResource) + ID3D10EffectRenderTargetViewVariable::GetRenderTarget +
    + + +

    Set an array of render-targets.

    +
    +

    Set an array of render-target-view interfaces. See Interface.

    +

    The zero-based array index to store the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173676 + HRESULT ID3D10EffectRenderTargetViewVariable::SetRenderTargetArray([In, Buffer] ID3D10RenderTargetView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectRenderTargetViewVariable::SetRenderTargetArray +
    + + +

    Set an array of render-targets.

    +
    +

    Set an array of render-target-view interfaces. See Interface.

    +

    The zero-based array index to store the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173676 + HRESULT ID3D10EffectRenderTargetViewVariable::SetRenderTargetArray([In, Buffer] ID3D10RenderTargetView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectRenderTargetViewVariable::SetRenderTargetArray +
    + + +

    Set an array of render-targets.

    +
    +

    Set an array of render-target-view interfaces. See Interface.

    +

    The zero-based array index to store the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173676 + HRESULT ID3D10EffectRenderTargetViewVariable::SetRenderTargetArray([In, Buffer] ID3D10RenderTargetView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectRenderTargetViewVariable::SetRenderTargetArray +
    + + +

    Get an array of render-targets.

    +
    +

    A reference to an array of render-target-view interfaces. See Interface.

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173674 + HRESULT ID3D10EffectRenderTargetViewVariable::GetRenderTargetArray([Out, Buffer] ID3D10RenderTargetView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectRenderTargetViewVariable::GetRenderTargetArray +
    + + +

    A sampler interface accesses sampler state.

    +
    + +

    An Interface is created when an effect is read into memory.

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state. For examples, see Two Ways to Get the State in an Effect Variable.

    +
    + + bb173677 + ID3D10EffectSamplerVariable + ID3D10EffectSamplerVariable +
    + + + Get a reference to a sampler interface. + + Returns a reference to a sampler interface (see ). + HRESULT ID3D10EffectSamplerVariable::GetSampler([None] int Index,[Out] ID3D10SamplerState** ppSampler) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to a sampler interface.

    +
    +

    Index into an array of sampler interfaces. If there is only one sampler interface, use 0.

    +

    The address of a reference to a sampler interface (see Interface).

    + + bb173679 + HRESULT ID3D10EffectSamplerVariable::GetSampler([In] unsigned int Index,[Out] ID3D10SamplerState** ppSampler) + ID3D10EffectSamplerVariable::GetSampler +
    + + +

    Get a reference to a variable that contains sampler state.

    +
    +

    Index into an array of sampler descriptions. If there is only one sampler variable in the effect, use 0.

    +

    A reference to a sampler description (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173678 + HRESULT ID3D10EffectSamplerVariable::GetBackingStore([In] unsigned int Index,[Out] D3D10_SAMPLER_DESC* pSamplerDesc) + ID3D10EffectSamplerVariable::GetBackingStore +
    + + +

    An effect-scalar-variable interface accesses scalar values.

    +
    + + bb173680 + ID3D10EffectScalarVariable + ID3D10EffectScalarVariable +
    + + + Set a floating-point variable. + + A reference to the variable. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetFloat([None] float Value) + + + + Set an array of floating-point variables. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetFloatArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Set an array of floating-point variables. + + A reference to the start of the data to set. + Must be set to 0; this is reserved for future use. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetFloatArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of floating-point variables. + + The number of array elements to set. + Returns an array of floats. + HRESULT ID3D10EffectScalarVariable::GetFloatArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of floating-point variables. + + Must be set to 0; this is reserved for future use. + The number of array elements to set. + Returns an array of floats. + HRESULT ID3D10EffectScalarVariable::GetFloatArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Set an integer variable. + + A reference to the variable. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetInt([None] int Value) + + + + Set an array of integer variables. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetIntArray([In, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Set an array of integer variables. + + A reference to the start of the data to set. + Must be set to 0; this is reserved for future use. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetIntArray([In, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Get an array of integer variables. + + The number of array elements to set. + Returns an array of integer variables. + HRESULT ID3D10EffectScalarVariable::GetIntArray([Out, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Get an array of integer variables. + + Must be set to 0; this is reserved for future use. + The number of array elements to set. + Returns an array of integer variables. + HRESULT ID3D10EffectScalarVariable::GetIntArray([Out, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Set a boolean variable. + + A reference to the variable. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetBool([None] BOOL Value) + + + + Get a boolean variable. + + Returns a boolean. + HRESULT ID3D10EffectScalarVariable::GetBool([Out] BOOL* pValue) + + + + Set an array of boolean variables. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetBoolArray([In, Buffer] BOOL* pData,[None] int Offset,[None] int Count) + + + + Set an array of boolean variables. + + A reference to the start of the data to set. + Must be set to 0; this is reserved for future use. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetBoolArray([In, Buffer] BOOL* pData,[None] int Offset,[None] int Count) + + + + Get an array of boolean variables. + + Must be set to 0; this is reserved for future use. + The number of array elements to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::GetBoolArray([Out, Buffer] BOOL* pData,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a floating-point variable.

    +
    +

    A reference to the variable.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173689 + HRESULT ID3D10EffectScalarVariable::SetFloat([In] float Value) + ID3D10EffectScalarVariable::SetFloat +
    + + +

    Get a floating-point variable.

    +
    +

    A reference to the variable.

    + + bb173683 + HRESULT ID3D10EffectScalarVariable::GetFloat([Out] float* pValue) + ID3D10EffectScalarVariable::GetFloat +
    + + +

    Set an array of floating-point variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173690 + HRESULT ID3D10EffectScalarVariable::SetFloatArray([In, Buffer] float* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectScalarVariable::SetFloatArray +
    + + +

    Get an array of floating-point variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173684 + HRESULT ID3D10EffectScalarVariable::GetFloatArray([Out, Buffer] float* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectScalarVariable::GetFloatArray +
    + + +

    Set an integer variable.

    +
    +

    A reference to the variable.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173691 + HRESULT ID3D10EffectScalarVariable::SetInt([In] int Value) + ID3D10EffectScalarVariable::SetInt +
    + + +

    Get an integer variable.

    +
    +

    A reference to the variable.

    + + bb173685 + HRESULT ID3D10EffectScalarVariable::GetInt([Out] int* pValue) + ID3D10EffectScalarVariable::GetInt +
    + + +

    Set an array of integer variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173692 + HRESULT ID3D10EffectScalarVariable::SetIntArray([In, Buffer] int* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectScalarVariable::SetIntArray +
    + + +

    Get an array of integer variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173686 + HRESULT ID3D10EffectScalarVariable::GetIntArray([Out, Buffer] int* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectScalarVariable::GetIntArray +
    + + +

    Set a boolean variable.

    +
    +

    A reference to the variable.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173687 + HRESULT ID3D10EffectScalarVariable::SetBool([In] BOOL Value) + ID3D10EffectScalarVariable::SetBool +
    + + +

    Get a boolean variable.

    +
    +

    A reference to the variable.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173681 + HRESULT ID3D10EffectScalarVariable::GetBool([Out] BOOL* pValue) + ID3D10EffectScalarVariable::GetBool +
    + + +

    Set an array of boolean variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173688 + HRESULT ID3D10EffectScalarVariable::SetBoolArray([In, Buffer] BOOL* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectScalarVariable::SetBoolArray +
    + + +

    Get an array of boolean variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173682 + HRESULT ID3D10EffectScalarVariable::GetBoolArray([Out, Buffer] BOOL* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectScalarVariable::GetBoolArray +
    + + +

    Describes an effect shader.

    +
    + +

    To get an effect-shader description, call .

    +
    + + bb205051 + D3D10_EFFECT_SHADER_DESC + D3D10_EFFECT_SHADER_DESC +
    + + + Gets the signature passed into InputLayout. Only valid on a vertex shader or geometry shader. + + The signature. + + + + Gets the bytecode from the compiled shader. + + The bytecode. + + + +

    Passed into CreateInputLayout. Only valid on a vertex shader or geometry shader. See ID3D10Device_CreateInputLayout.

    +
    + + bb205051 + const unsigned char* pInputSignature + unsigned char pInputSignature +
    + + +

    TRUE is the shader is defined inline; otherwise .

    +
    + + bb205051 + BOOL IsInline + BOOL IsInline +
    + + +

    A reference to the compiled shader.

    +
    + + bb205051 + const unsigned char* pBytecode + unsigned char pBytecode +
    + + +

    The length of pBytecode.

    +
    + + bb205051 + unsigned int BytecodeLength + unsigned int BytecodeLength +
    + + +

    A string that constains a declaration of the stream output from a geometry shader.

    +
    + + bb205051 + const char* SODecl + char SODecl +
    + + +

    The number of entries in the input signature.

    +
    + + bb205051 + unsigned int NumInputSignatureEntries + unsigned int NumInputSignatureEntries +
    + + +

    The number of entries in the output signature.

    +
    + + bb205051 + unsigned int NumOutputSignatureEntries + unsigned int NumOutputSignatureEntries +
    + + +

    A shader-resource interface accesses a shader resource.

    +
    + + bb173693 + ID3D10EffectShaderResourceVariable + ID3D10EffectShaderResourceVariable +
    + + + Set an array of shader resources. + + The address of an array of shader-resource-view interfaces. See . + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectShaderResourceVariable::SetResourceArray([None] ID3D10ShaderResourceView** ppResources,[None] int Offset,[None] int Count) + + + + Set an array of shader resources. + + The address of an array of shader-resource-view interfaces. See . + The zero-based array index to get the first interface. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectShaderResourceVariable::SetResourceArray([None] ID3D10ShaderResourceView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of shader resources. + + The number of elements in the array. + Returns an array of shader-resource-view interfaces. See . + HRESULT ID3D10EffectShaderResourceVariable::GetResourceArray([Out] ID3D10ShaderResourceView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of shader resources. + + The zero-based array index to get the first interface. + The number of elements in the array. + Returns an array of shader-resource-view interfaces. See . + HRESULT ID3D10EffectShaderResourceVariable::GetResourceArray([Out] ID3D10ShaderResourceView** ppResources,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a shader resource.

    +
    +

    The address of a reference to a shader-resource-view interface. See Interface.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173696 + HRESULT ID3D10EffectShaderResourceVariable::SetResource([In, Optional] ID3D10ShaderResourceView* pResource) + ID3D10EffectShaderResourceVariable::SetResource +
    + + +

    Get a shader resource.

    +
    +

    The address of a reference to a shader-resource-view interface. See Interface.

    + + bb173694 + HRESULT ID3D10EffectShaderResourceVariable::GetResource([Out] ID3D10ShaderResourceView** ppResource) + ID3D10EffectShaderResourceVariable::GetResource +
    + + +

    Set an array of shader resources.

    +
    +

    The address of an array of shader-resource-view interfaces. See Interface.

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173697 + HRESULT ID3D10EffectShaderResourceVariable::SetResourceArray([In, Buffer] ID3D10ShaderResourceView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectShaderResourceVariable::SetResourceArray +
    + + +

    Set an array of shader resources.

    +
    +

    The address of an array of shader-resource-view interfaces. See Interface.

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173697 + HRESULT ID3D10EffectShaderResourceVariable::SetResourceArray([In, Buffer] ID3D10ShaderResourceView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectShaderResourceVariable::SetResourceArray +
    + + +

    Set an array of shader resources.

    +
    +

    The address of an array of shader-resource-view interfaces. See Interface.

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173697 + HRESULT ID3D10EffectShaderResourceVariable::SetResourceArray([In, Buffer] ID3D10ShaderResourceView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectShaderResourceVariable::SetResourceArray +
    + + +

    Get an array of shader resources.

    +
    +

    The address of an array of shader-resource-view interfaces. See Interface.

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173695 + HRESULT ID3D10EffectShaderResourceVariable::GetResourceArray([Out, Buffer] ID3D10ShaderResourceView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectShaderResourceVariable::GetResourceArray +
    + + +

    A string-variable interface accesses a string variable.

    +
    + + bb173705 + ID3D10EffectStringVariable + ID3D10EffectStringVariable +
    + + + Get the string. + + Returns a reference to the string. + HRESULT ID3D10EffectStringVariable::GetString([Out] const char** ppString) + + + + Get an array of strings. + + The number of strings in the returned array. + Returns a reference to the first string in the array. + HRESULT ID3D10EffectStringVariable::GetStringArray([Out, Buffer] const char** ppStrings,[None] int Offset,[None] int Count) + + + + Get an array of strings. + + The offset (in number of strings) between the start of the array and the first string to get. + The number of strings in the returned array. + Returns a reference to the first string in the array. + HRESULT ID3D10EffectStringVariable::GetStringArray([Out, Buffer] const char** ppStrings,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the string.

    +
    +

    A reference to the string.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173706 + HRESULT ID3D10EffectStringVariable::GetString([Out] const void** ppString) + ID3D10EffectStringVariable::GetString +
    + + +

    Get an array of strings.

    +
    +

    A reference to the first string in the array.

    +

    The offset (in number of strings) between the start of the array and the first string to get.

    +

    The number of strings in the returned array.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173707 + HRESULT ID3D10EffectStringVariable::GetStringArray([Out, Buffer] const void** ppStrings,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectStringVariable::GetStringArray +
    + + +

    The interface is the base class for all effect variables.

    The lifetime of an object is equal to the lifetime of its parent object.

    • Methods
    +
    + + bb173724 + ID3D10EffectVariable + ID3D10EffectVariable +
    + + + Set data. + + A reference to the variable. + size in bytes of data to write. + + Returns one of the following {{Direct3D 10 Return Codes}}. + + + This method does no conversion or type checking; it is therefore a very quick way to access array items. + + HRESULT ID3D10EffectVariable::SetRawValue([None] void* pData,[None] int Offset,[None] int Count) + + + + Get data. + + + This method does no conversion or type checking; it is therefore a very quick way to access array items. + + The number of bytes to get. + Returns a filled with the value. + HRESULT ID3D10EffectVariable::GetRawValue([None] void* pData,[None] int Offset,[None] int Count) + + + + Get a scalar variable. + + + AsScalar returns a version of the effect variable that has been specialized to a scalar variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain scalar data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a scalar variable. See . + ID3D10EffectScalarVariable* ID3D10EffectVariable::AsScalar() + + + + Get a vector variable. + + + AsVector returns a version of the effect variable that has been specialized to a vector variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain vector data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a vector variable. See . + ID3D10EffectVectorVariable* ID3D10EffectVariable::AsVector() + + + + Get a matrix variable. + + + AsMatrix returns a version of the effect variable that has been specialized to a matrix variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain matrix data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a matrix variable. See . + ID3D10EffectMatrixVariable* ID3D10EffectVariable::AsMatrix() + + + + Get a string variable. + + + AsString returns a version of the effect variable that has been specialized to a string variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain string data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a string variable. See . + ID3D10EffectStringVariable* ID3D10EffectVariable::AsString() + + + + Get a shader-resource variable. + + + AsShaderResource returns a version of the effect variable that has been specialized to a shader-resource variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader-resource data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a shader-resource variable. See . + ID3D10EffectShaderResourceVariable* ID3D10EffectVariable::AsShaderResource() + + + + Get a render-target-view variable. + + + This method returns a version of the effect variable that has been specialized to a render-target-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain render-target-view data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a render-target-view variable. See . + ID3D10EffectRenderTargetViewVariable* ID3D10EffectVariable::AsRenderTargetView() + + + + Get a depth-stencil-view variable. + + + This method returns a version of the effect variable that has been specialized to a depth-stencil-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil-view data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a depth-stencil-view variable. See . + ID3D10EffectDepthStencilViewVariable* ID3D10EffectVariable::AsDepthStencilView() + + + + Get a constant buffer. + + + AsConstantBuffer returns a version of the effect variable that has been specialized to a constant buffer. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain constant buffer data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a constant buffer. See . + ID3D10EffectConstantBuffer* ID3D10EffectVariable::AsConstantBuffer() + + + + Get a shader variable. + + + AsShader returns a version of the effect variable that has been specialized to a shader variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a shader variable. See . + ID3D10EffectShaderVariable* ID3D10EffectVariable::AsShader() + + + + Get a effect-blend variable. + + + AsBlend returns a version of the effect variable that has been specialized to an effect-blend variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain effect-blend data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to an effect blend variable. See . + ID3D10EffectBlendVariable* ID3D10EffectVariable::AsBlend() + + + + Get a depth-stencil variable. + + + AsDepthStencil returns a version of the effect variable that has been specialized to a depth-stencil variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a depth-stencil variable. See . + ID3D10EffectDepthStencilVariable* ID3D10EffectVariable::AsDepthStencil() + + + + Get a rasterizer variable. + + + AsRasterizer returns a version of the effect variable that has been specialized to a rasterizer variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain rasterizer data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a rasterizer variable. See . + ID3D10EffectRasterizerVariable* ID3D10EffectVariable::AsRasterizer() + + + + Get a sampler variable. + + + AsSampler returns a version of the effect variable that has been specialized to a sampler variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain sampler data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a sampler variable. See . + ID3D10EffectSamplerVariable* ID3D10EffectVariable::AsSampler() + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Compare the data type with the data stored.

    +
    + +

    This method checks that the data type matches the data stored after casting one interface to another (using any of the As methods).

    +
    + + bb173746 + IsValid + IsValid + BOOL ID3D10EffectVariable::IsValid() +
    + + +

    Get type information.

    +
    + + bb173745 + GetType + GetType + ID3D10EffectType* ID3D10EffectVariable::GetType() +
    + + +

    Get a description.

    +
    + + bb173738 + GetDesc + GetDesc + HRESULT ID3D10EffectVariable::GetDesc([Out] D3D10_EFFECT_VARIABLE_DESC* pDesc) +
    + + +

    Get a constant buffer.

    +
    + +

    Effect variables are read-from or written-to a constant buffer.

    +
    + + bb173743 + GetParentConstantBuffer + GetParentConstantBuffer + ID3D10EffectConstantBuffer* ID3D10EffectVariable::GetParentConstantBuffer() +
    + + +

    Compare the data type with the data stored.

    +
    +

    TRUE if the syntax is valid; otherwise .

    + +

    This method checks that the data type matches the data stored after casting one interface to another (using any of the As methods).

    +
    + + bb173746 + BOOL ID3D10EffectVariable::IsValid() + ID3D10EffectVariable::IsValid +
    + + +

    Get type information.

    +
    +

    A reference to an Interface.

    + + bb173745 + ID3D10EffectType* ID3D10EffectVariable::GetType() + ID3D10EffectVariable::GetType +
    + + +

    Get a description.

    +
    +

    A reference to an effect-variable description (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173738 + HRESULT ID3D10EffectVariable::GetDesc([Out] D3D10_EFFECT_VARIABLE_DESC* pDesc) + ID3D10EffectVariable::GetDesc +
    + + +

    Get an annotation by index.

    +
    +

    A zero-based index.

    +

    A reference to an Interface.

    + +

    Annonations can be attached to a technique, a pass or a gloval variable. For the syntax, see Annotation Syntax (Direct3D 10).

    +
    + + bb173736 + ID3D10EffectVariable* ID3D10EffectVariable::GetAnnotationByIndex([In] unsigned int Index) + ID3D10EffectVariable::GetAnnotationByIndex +
    + + +

    Get an annotation by name.

    +
    +

    The annotation name.

    +

    A reference to an Interface. Note that if the annotation is not found the Interface returned will be empty. The method should be called to determine whether the annotation was found.

    + +

    Annonations can be attached to a technique, a pass or a gloval variable. For the syntax, see Annotation Syntax (Direct3D 10).

    +
    + + bb173737 + ID3D10EffectVariable* ID3D10EffectVariable::GetAnnotationByName([In] const char* Name) + ID3D10EffectVariable::GetAnnotationByName +
    + + +

    Get a structure member by index.

    +
    +

    A zero-based index.

    +

    A reference to an Interface.

    + +

    If the effect variable is an structure, use this method to look up a member by index.

    +
    + + bb173740 + ID3D10EffectVariable* ID3D10EffectVariable::GetMemberByIndex([In] unsigned int Index) + ID3D10EffectVariable::GetMemberByIndex +
    + + +

    Get a structure member by name.

    +
    +

    Member name.

    +

    A reference to an Interface.

    + +

    If the effect variable is an structure, use this method to look up a member by name.

    +
    + + bb173741 + ID3D10EffectVariable* ID3D10EffectVariable::GetMemberByName([In] const char* Name) + ID3D10EffectVariable::GetMemberByName +
    + + +

    Get a structure member by semantic.

    +
    +

    The semantic.

    +

    A reference to an Interface.

    + +

    If the effect variable is an structure, use this method to look up a member by attached semantic.

    +
    + + bb173742 + ID3D10EffectVariable* ID3D10EffectVariable::GetMemberBySemantic([In] const char* Semantic) + ID3D10EffectVariable::GetMemberBySemantic +
    + + +

    Get an array element.

    +
    +

    A zero-based index; otherwise 0.

    +

    A reference to an Interface.

    + +

    If the effect variable is an array, use this method to return one of the elements.

    +
    + + bb173739 + ID3D10EffectVariable* ID3D10EffectVariable::GetElement([In] unsigned int Index) + ID3D10EffectVariable::GetElement +
    + + +

    Get a constant buffer.

    +
    +

    A reference to a Interface.

    + +

    Effect variables are read-from or written-to a constant buffer.

    +
    + + bb173743 + ID3D10EffectConstantBuffer* ID3D10EffectVariable::GetParentConstantBuffer() + ID3D10EffectVariable::GetParentConstantBuffer +
    + + +

    Get a scalar variable.

    +
    +

    A reference to a scalar variable. See .

    + +

    AsScalar returns a version of the effect variable that has been specialized to a scalar variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain scalar data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173731 + ID3D10EffectScalarVariable* ID3D10EffectVariable::AsScalar() + ID3D10EffectVariable::AsScalar +
    + + +

    Get a vector variable.

    +
    +

    A reference to a vector variable. See .

    + +

    AsVector returns a version of the effect variable that has been specialized to a vector variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain vector data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173735 + ID3D10EffectVectorVariable* ID3D10EffectVariable::AsVector() + ID3D10EffectVariable::AsVector +
    + + +

    Get a matrix variable.

    +
    +

    A reference to a matrix variable. See .

    + +

    AsMatrix returns a version of the effect variable that has been specialized to a matrix variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain matrix data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173728 + ID3D10EffectMatrixVariable* ID3D10EffectVariable::AsMatrix() + ID3D10EffectVariable::AsMatrix +
    + + +

    Get a string variable.

    +
    +

    A reference to a string variable. See .

    + +

    AsString returns a version of the effect variable that has been specialized to a string variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain string data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173734 + ID3D10EffectStringVariable* ID3D10EffectVariable::AsString() + ID3D10EffectVariable::AsString +
    + + +

    Get a shader-resource variable.

    +
    +

    A reference to a shader-resource variable. See .

    + +

    AsShaderResource returns a version of the effect variable that has been specialized to a shader-resource variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader-resource data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173733 + ID3D10EffectShaderResourceVariable* ID3D10EffectVariable::AsShaderResource() + ID3D10EffectVariable::AsShaderResource +
    + + +

    Get a render-target-view variable.

    +
    +

    A reference to a render-target-view variable. See Interface.

    + +

    This method returns a version of the effect variable that has been specialized to a render-target-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain render-target-view data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb944008 + ID3D10EffectRenderTargetViewVariable* ID3D10EffectVariable::AsRenderTargetView() + ID3D10EffectVariable::AsRenderTargetView +
    + + +

    Get a depth-stencil-view variable.

    +
    +

    A reference to a depth-stencil-view variable. See Interface.

    + +

    This method returns a version of the effect variable that has been specialized to a depth-stencil-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil-view data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb944007 + ID3D10EffectDepthStencilViewVariable* ID3D10EffectVariable::AsDepthStencilView() + ID3D10EffectVariable::AsDepthStencilView +
    + + +

    Get a constant buffer.

    +
    +

    A reference to a constant buffer. See .

    + +

    AsConstantBuffer returns a version of the effect variable that has been specialized to a constant buffer. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain constant buffer data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173726 + ID3D10EffectConstantBuffer* ID3D10EffectVariable::AsConstantBuffer() + ID3D10EffectVariable::AsConstantBuffer +
    + + +

    Get a shader variable.

    +
    +

    A reference to a shader variable. See .

    + +

    AsShader returns a version of the effect variable that has been specialized to a shader variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173732 + ID3D10EffectShaderVariable* ID3D10EffectVariable::AsShader() + ID3D10EffectVariable::AsShader +
    + + +

    Get a effect-blend variable.

    +
    +

    A reference to an effect blend variable. See .

    + +

    AsBlend returns a version of the effect variable that has been specialized to an effect-blend variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain effect-blend data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173725 + ID3D10EffectBlendVariable* ID3D10EffectVariable::AsBlend() + ID3D10EffectVariable::AsBlend +
    + + +

    Get a depth-stencil variable.

    +
    +

    A reference to a depth-stencil variable. See .

    + +

    AsDepthStencil returns a version of the effect variable that has been specialized to a depth-stencil variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173727 + ID3D10EffectDepthStencilVariable* ID3D10EffectVariable::AsDepthStencil() + ID3D10EffectVariable::AsDepthStencil +
    + + +

    Get a rasterizer variable.

    +
    +

    A reference to a rasterizer variable. See .

    + +

    AsRasterizer returns a version of the effect variable that has been specialized to a rasterizer variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain rasterizer data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173729 + ID3D10EffectRasterizerVariable* ID3D10EffectVariable::AsRasterizer() + ID3D10EffectVariable::AsRasterizer +
    + + +

    Get a sampler variable.

    +
    +

    A reference to a sampler variable. See .

    + +

    AsSampler returns a version of the effect variable that has been specialized to a sampler variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain sampler data.

    Applications can test the returned object for validity by calling IsValid.

    +
    + + bb173730 + ID3D10EffectSamplerVariable* ID3D10EffectVariable::AsSampler() + ID3D10EffectVariable::AsSampler +
    + + +

    Set data.

    +
    +

    A reference to the variable.

    +

    The offset (in bytes) from the beginning of the reference to the data.

    +

    The number of bytes to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    This method does no conversion or type checking; it is therefore a very quick way to access array items.

    +
    + + bb173747 + HRESULT ID3D10EffectVariable::SetRawValue([In, Buffer] void* pData,[In] unsigned int Offset,[In] unsigned int ByteCount) + ID3D10EffectVariable::SetRawValue +
    + + +

    Get data.

    +
    +

    A reference to the variable.

    +

    The offset (in bytes) from the beginning of the reference to the data.

    +

    The number of bytes to get.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    This method does no conversion or type checking; it is therefore a very quick way to access array items.

    +
    + + bb173744 + HRESULT ID3D10EffectVariable::GetRawValue([Out, Buffer] void* pData,[In] unsigned int Offset,[In] unsigned int ByteCount) + ID3D10EffectVariable::GetRawValue +
    + + +

    A vector-variable interface accesses a four-component vector.

    +
    + + bb173748 + ID3D10EffectVectorVariable + ID3D10EffectVectorVariable +
    + + + Get a four-component vector that contains integer data. + + Returns a four-component vector that contains integer data + HRESULT ID3D10EffectVectorVariable::GetIntVector([Out] int* pData) + + + + Get a four-component vector that contains floating-point data. + + Returns a four-component vector that contains floating-point data. + HRESULT ID3D10EffectVectorVariable::GetFloatVector([Out] float* pData) + + + + Get a four-component vector that contains boolean data. + + a four-component vector that contains boolean data. + HRESULT ID3D10EffectVectorVariable::GetBoolVector([Out, Buffer] BOOL* pData) + + + + Get a four-component vector. + + Type of the four-component vector + a four-component vector. + HRESULT ID3D10EffectVectorVariable::GetFloatVector([Out, Buffer] BOOL* pData) + + + + Set an array of four-component vectors that contain integer data. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectVectorVariable::SetIntVectorArray([In, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Set an array of four-component vectors that contain floating-point data. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectVectorVariable::SetFloatVectorArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Set an array of four-component vectors that contain floating-point data. + + Type of the four-component vector + A reference to the start of the data to set. + + Returns one of the following {{Direct3D 10 Return Codes}}. + + HRESULT ID3D10EffectVectorVariable::SetFloatVectorArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Set a x-component vector. + + A reference to the first component. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectVectorVariable::SetFloatVector([In] float* pData) + + + + Set a x-component vector. + + A reference to the first component. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectVectorVariable::SetFloatVector([In] float* pData) + + + + Set a two-component vector that contains floating-point data. + + A reference to the first component. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectVectorVariable::SetFloatVector([In] float* pData) + + + + Set a three-component vector that contains floating-point data. + + A reference to the first component. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectVectorVariable::SetFloatVector([In] float* pData) + + + + Set a four-component color that contains floating-point data. + + A reference to the first component. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectVectorVariable::SetFloatVector([In] float* pData) + + + + Set an array of four-component color that contain floating-point data. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectVectorVariable::SetFloatVectorArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of four-component vectors that contain integer data. + + The number of array elements to set. + Returns an array of four-component vectors that contain integer data. + HRESULT ID3D10EffectVectorVariable::GetIntVectorArray([Out, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Get an array of four-component vectors that contain floating-point data. + + The number of array elements to set. + Returns an array of four-component vectors that contain floating-point data. + HRESULT ID3D10EffectVectorVariable::GetFloatVectorArray([None] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of four-component vectors that contain boolean data. + + The number of array elements to set. + an array of four-component vectors that contain boolean data. + HRESULT ID3D10EffectVectorVariable::GetBoolVectorArray([Out, Buffer] BOOL* pData,[None] int Offset,[None] int Count) + + + + Get an array of four-component vectors that contain boolean data. + + The number of array elements to set. + an array of four-component vectors that contain boolean data. + HRESULT ID3D10EffectVectorVariable::GetBoolVectorArray([Out, Buffer] BOOL* pData,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a four-component vector that contains boolean data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173755 + HRESULT ID3D10EffectVectorVariable::SetBoolVector([In] SHARPDX_BOOL4* pData) + ID3D10EffectVectorVariable::SetBoolVector +
    + + +

    Set a four-component vector that contains integer data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173759 + HRESULT ID3D10EffectVectorVariable::SetIntVector([In] SHARPDX_INT4* pData) + ID3D10EffectVectorVariable::SetIntVector +
    + + +

    Set a four-component vector that contains floating-point data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173757 + HRESULT ID3D10EffectVectorVariable::SetFloatVector([In] float* pData) + ID3D10EffectVectorVariable::SetFloatVector +
    + + +

    Get a four-component vector that contains boolean data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173749 + HRESULT ID3D10EffectVectorVariable::GetBoolVector([Out] SHARPDX_BOOL4* pData) + ID3D10EffectVectorVariable::GetBoolVector +
    + + +

    Get a four-component vector that contains integer data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173753 + HRESULT ID3D10EffectVectorVariable::GetIntVector([Out] SHARPDX_INT4* pData) + ID3D10EffectVectorVariable::GetIntVector +
    + + +

    Get a four-component vector that contains floating-point data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173751 + HRESULT ID3D10EffectVectorVariable::GetFloatVector([Out] SHARPDX_VECTOR4* pData) + ID3D10EffectVectorVariable::GetFloatVector +
    + + +

    Set an array of four-component vectors that contain boolean data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173756 + HRESULT ID3D10EffectVectorVariable::SetBoolVectorArray([In, Buffer] SHARPDX_BOOL4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectVectorVariable::SetBoolVectorArray +
    + + +

    Set an array of four-component vectors that contain integer data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173760 + HRESULT ID3D10EffectVectorVariable::SetIntVectorArray([In, Buffer] SHARPDX_INT4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectVectorVariable::SetIntVectorArray +
    + + +

    Set an array of four-component vectors that contain floating-point data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173758 + HRESULT ID3D10EffectVectorVariable::SetFloatVectorArray([In, Buffer] SHARPDX_VECTOR4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectVectorVariable::SetFloatVectorArray +
    + + +

    Get an array of four-component vectors that contain boolean data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173750 + HRESULT ID3D10EffectVectorVariable::GetBoolVectorArray([Out, Buffer] SHARPDX_BOOL4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectVectorVariable::GetBoolVectorArray +
    + + +

    Get an array of four-component vectors that contain integer data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173754 + HRESULT ID3D10EffectVectorVariable::GetIntVectorArray([Out, Buffer] SHARPDX_INT4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectVectorVariable::GetIntVectorArray +
    + + +

    Get an array of four-component vectors that contain floating-point data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173752 + HRESULT ID3D10EffectVectorVariable::GetFloatVectorArray([Out, Buffer] SHARPDX_VECTOR4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3D10EffectVectorVariable::GetFloatVectorArray +
    + + +

    The interface encapsulates the textures and resources needed to render a specific font on a specific device.

    +
    + +

    The interface is obtained by calling or .

    The LPD3DX10FONT type is defined as a reference to the interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DX10FONT;	
    +            
    +
    + + bb173886 + ID3DX10Font + ID3DX10Font +
    + + + Initializes a new instance of the class. + + The device. + The font description. + + + + Initializes a new instance of the class. + + The device. + The height. + The width. + The weight. + The mip levels. + if set to true [is italic]. + The character set. + The precision. + The quality. + The pitch and family. + Name of the face. + + + + Load formatted text into video memory to improve the efficiency of rendering to the device. This method supports ANSI and Unicode strings. + + + The compiler setting also determines the function version. If Unicode is defined, the function call resolves to PreloadTextW. Otherwise, the function call resolves to PreloadTextA because ANSI strings are being used. This method generates textures that contain glyphs that represent the input text. The glyphs are drawn as a series of triangles. Text will not be rendered to the device; ID3DX10Font::DrawText must still be called to render the text. However, by preloading text into video memory, ID3DX10Font::DrawText will use substantially fewer CPU resources. This method internally converts characters to glyphs using the GDI function {{GetCharacterPlacement}}. + + Pointer to a string of characters to be loaded into video memory. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR; otherwise, the data type resolves to LPCSTR. See Remarks. + If the method succeeds, the return value is S_OK. If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA. + HRESULT ID3DX10Font::PreloadTextW([None] const wchar_t* pString,[None] int Count) + + + + Draw formatted text. + + + The parameters of this method are very similar to those of the {{GDI DrawText}} function. This method supports both ANSI and Unicode strings. Unless the DT_NOCLIP format is used, this method clips the text so that it does not appear outside the specified rectangle. All formatting is assumed to have multiple lines unless the DT_SINGLELINE format is specified. If the selected font is too large for the rectangle, this method does not attempt to substitute a smaller font. This method supports only fonts whose escapement and orientation are both zero. + + Reference to an ID3DX10Sprite object that contains the string you wish to draw. Can be NULL, in which case Direct3D will render the string with its own sprite object. To improve efficiency, a sprite object should be specified if ID3DX10Font::DrawText is to be called more than once in a row. + Pointer to a string to draw. If UNICODE is defined, this parameter type resolves to an LPCWSTR, otherwise, the type resolves to an LPCSTR. If the Count parameter is -1, the string must be NULL terminated. + Pointer to a structure that contains the rectangle, in logical coordinates, in which the text is to be formatted. As with any RECT object, the coordinate value of the rectangle's right side must be greater than that of its left side. Likewise, the coordinate value of the bottom must be greater than that of the top. + Specify the method of formatting the text. It can be any combination of the following values: ItemDescription DT_BOTTOM Justify the text to the bottom of the rectangle. This value must be combined with DT_SINGLELINE. DT_CALCRECT Tell DrawText to automatically calculate the width and height of the rectangle based on the length of the string you tell it to draw. If there are multiple lines of text, ID3DX10Font::DrawText uses the width of the rectangle pointed to by the pRect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, ID3DX10Font::DrawText modifies the right side of the rectangle so that it bounds the last character in the line. In either case, ID3DX10Font::DrawText returns the height of the formatted text but does not draw the text. DT_CENTER Center text horizontally in the rectangle. DT_EXPANDTABS Expand tab characters. The default number of characters per tab is eight. DT_LEFT Align text to the left. DT_NOCLIP Draw without clipping. ID3DX10Font::DrawText is somewhat faster when DT_NOCLIP is used. DT_RIGHT Align text to the right. DT_RTLREADING Display text in right-to-left reading order for bidirectional text when a Hebrew or Arabic font is selected. The default reading order for all text is left-to-right. DT_SINGLELINE Display text on a single line only. Carriage returns and line feeds do not break the line. DT_TOP Top-justify text. DT_VCENTER Center text vertically (single line only). DT_WORDBREAK Break words. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by the pRect parameter. A carriage return/line feed sequence also breaks the line. ? + Color of the text. See . + If the function succeeds, the return value is the height of the text in logical units. If DT_VCENTER or DT_BOTTOM is specified, the return value is the offset from pRect (top to the bottom) of the drawn text. If the function fails, the return value is zero. + int ID3DX10Font::DrawTextW([None] LPD3DX10SPRITE pSprite,[None] const wchar_t* pString,[None] int Count,[None] RECT* pRect,[None] int Format,[None] D3DXCOLOR Color) + + + + Draw formatted text at the specified position. + + Reference to an ID3DX10Sprite object that contains the string you wish to draw. Can be NULL, in which case Direct3D will render the string with its own sprite object. To improve efficiency, a sprite object should be specified if ID3DX10Font::DrawText is to be called more than once in a row. + Pointer to a string to draw. If UNICODE is defined, this parameter type resolves to an LPCWSTR, otherwise, the type resolves to an LPCSTR. If the Count parameter is -1, the string must be NULL terminated. + The x. + The y. + Color of the text. See . + + If the function succeeds, the return value is the height of the text in logical units. If DT_VCENTER or DT_BOTTOM is specified, the return value is the offset from pRect (top to the bottom) of the drawn text. If the function fails, the return value is zero. + + int ID3DX10Font::DrawTextW([None] LPD3DX10SPRITE pSprite,[None] const wchar_t* pString,[None] int Count,[None] RECT* pRect,[None] int Format,[None] D3DXCOLOR Color) + + The parameters of this method are very similar to those of the {{GDI DrawText}} function. This method supports both ANSI and Unicode strings. Unless the DT_NOCLIP format is used, this method clips the text so that it does not appear outside the specified rectangle. All formatting is assumed to have multiple lines unless the DT_SINGLELINE format is specified. If the selected font is too large for the rectangle, this method does not attempt to substitute a smaller font. This method supports only fonts whose escapement and orientation are both zero. + + int ID3DX10Font::DrawTextW([In] ID3DX10Sprite* pSprite,[In] const wchar_t* pString,[In] int Count,[In] RECT* pRect,[In] unsigned int Format,[In] D3DXCOLOR Color) + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieve the Direct3D device associated with the font object.

    +
    + +

    Note??Calling this method will increase the internal reference count on the interface. Be sure to call when you are done using this interface or you will have a memory leak.

    +
    + + bb173891 + GetDevice + GetDevice + HRESULT ID3DX10Font::GetDevice([Out] ID3D10Device** ppDevice) +
    + + +

    Get a description of the current font object.

    +
    + +

    This method describes Unicode font objects if UNICODE is defined. Otherwise GetDescA is called, which returns a reference to the D3DX10FONT_DESCA structure.

    +
    + + bb173890 + GetDescW + GetDescW + HRESULT ID3DX10Font::GetDescW([Out] D3DX10_FONT_DESCW* pDesc) +
    + + +

    Return a handle to a display device context (DC) that has the font set onto it.

    +
    + + bb173889 + GetDC + GetDC + HDC ID3DX10Font::GetDC() +
    + + +

    Retrieve the Direct3D device associated with the font object.

    +
    +

    Address of a reference to an interface, representing the Direct3D device object associated with the font object.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA.

    + +

    Note??Calling this method will increase the internal reference count on the interface. Be sure to call when you are done using this interface or you will have a memory leak.

    +
    + + bb173891 + HRESULT ID3DX10Font::GetDevice([Out] ID3D10Device** ppDevice) + ID3DX10Font::GetDevice +
    + + +

    Get a description of the current font object.

    +
    +

    Pointer to a structure that describes the font object. If UNICODE is defined, a reference to a D3DX10FONT_DESCW is returned; otherwise a reference to a D3DX10FONT_DESCA is returned.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DERR_INVALIDCALL.

    + +

    This method describes Unicode font objects if UNICODE is defined. Otherwise GetDescA is called, which returns a reference to the D3DX10FONT_DESCA structure.

    +
    + + bb173890 + HRESULT ID3DX10Font::GetDescW([Out] D3DX10_FONT_DESCW* pDesc) + ID3DX10Font::GetDescW +
    + + +

    Retrieve font characteristics.

    +
    +

    Pointer to a structure, which contains font properties. If Unicode is defined, the function returns a structure. Otherwise, the function returns a structure.

    +

    Nonzero if the function is successful; otherwise 0.

    + + bb173893 + BOOL ID3DX10Font::GetTextMetricsW([In] void* pTextMetrics) + ID3DX10Font::GetTextMetricsW +
    + + +

    Return a handle to a display device context (DC) that has the font set onto it.

    +
    +

    Handle to a display DC.

    + + bb173889 + HDC ID3DX10Font::GetDC() + ID3DX10Font::GetDC +
    + + +

    Return information about the placement and orientation of a glyph in a character cell.

    +
    +

    Glyph identifier.

    +

    Address of a reference to a ID3D10Texture object that contains the glyph.

    +

    Pointer to the smallest rectangle object that completely encloses the glyph. See .

    +

    Pointer to the two-dimensional vector that connects the origin of the current character cell to the origin of the next character cell. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA.

    + + bb173892 + HRESULT ID3DX10Font::GetGlyphData([In] unsigned int Glyph,[Out] ID3D10ShaderResourceView** ppTexture,[Out] RECT* pBlackBox,[Out] POINT* pCellInc) + ID3DX10Font::GetGlyphData +
    + + +

    Load a series of characters into video memory to improve the efficiency of rendering to the device.

    +
    +

    ID of the first character to be loaded into video memory.

    +

    ID of the last character to be loaded into video memory.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA.

    + +

    This method generates textures containing glyphs that represent the input characters. The glyphs are drawn as a series of triangles.

    Characters will not be rendered to the device; must still be called to render the characters. However, by pre-loading characters into video memory, will use substantially fewer CPU resources.

    This method internally converts characters to glyphs using the GDI function GetCharacterPlacement.

    +
    + + bb173894 + HRESULT ID3DX10Font::PreloadCharacters([In] unsigned int First,[In] unsigned int Last) + ID3DX10Font::PreloadCharacters +
    + + +

    Load a series of glyphs into video memory to improve the efficiency of rendering to the device.

    +
    +

    ID of the first glyph to be loaded into video memory.

    +

    ID of the last glyph to be loaded into video memory.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA.

    + +

    This method generates textures that contain the input glyphs. The glyphs are drawn as a series of triangles.

    Glyphs will not be rendered to the device; must still be called to render the glyphs. However, by pre-loading glyphs into video memory, will use substantially fewer CPU resources.

    +
    + + bb173895 + HRESULT ID3DX10Font::PreloadGlyphs([In] unsigned int First,[In] unsigned int Last) + ID3DX10Font::PreloadGlyphs +
    + + +

    Load formatted text into video memory to improve the efficiency of rendering to the device. This method supports ANSI and Unicode strings.

    +
    +

    Pointer to a string of characters to be loaded into video memory. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR; otherwise, the data type resolves to LPCSTR. See Remarks.

    +

    Number of characters in the text string.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to PreloadTextW. Otherwise, the function call resolves to PreloadTextA because ANSI strings are being used.

    This method generates textures that contain glyphs that represent the input text. The glyphs are drawn as a series of triangles.

    Text will not be rendered to the device; must still be called to render the text. However, by preloading text into video memory, will use substantially fewer CPU resources.

    This method internally converts characters to glyphs using the GDI function GetCharacterPlacement.

    +
    + + bb173896 + HRESULT ID3DX10Font::PreloadTextW([In] const wchar_t* pString,[In] int Count) + ID3DX10Font::PreloadTextW +
    + + +

    Draw formatted text. This method supports ANSI and Unicode strings.

    +
    +

    Pointer to an object that contains the string you wish to draw. Can be null, in which case Direct3D will render the string with its own sprite object. To improve efficiency, a sprite object should be specified if is to be called more than once in a row.

    +

    Pointer to a string to draw. If UNICODE is defined, this parameter type resolves to an LPCWSTR, otherwise, the type resolves to an LPCSTR. If the Count parameter is -1, the string must be null terminated.

    +

    The number of characters in the string. If Count is -1, then the pString parameter is assumed to be a reference to a sprite containing a null-terminated string and computes the character count automatically.

    +

    Pointer to a structure that contains the rectangle, in logical coordinates, in which the text is to be formatted. As with any object, the coordinate value of the rectangle's right side must be greater than that of its left side. Likewise, the coordinate value of the bottom must be greater than that of the top.

    +

    Specify the method of formatting the text. It can be any combination of the following values:

    ItemDescription

    DT_BOTTOM

    Justify the text to the bottom of the rectangle. This value must be combined with DT_SINGLELINE.

    DT_CALCRECT

    Tell DrawText to automatically calculate the width and height of the rectangle based on the length of the string you tell it to draw. If there are multiple lines of text, uses the width of the rectangle pointed to by the pRect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, modifies the right side of the rectangle so that it bounds the last character in the line. In either case, returns the height of the formatted text but does not draw the text.

    DT_CENTER

    Center text horizontally in the rectangle.

    DT_EXPANDTABS

    Expand tab characters. The default number of characters per tab is eight.

    DT_LEFT

    Align text to the left.

    DT_NOCLIP

    Draw without clipping. is somewhat faster when DT_NOCLIP is used.

    DT_RIGHT

    Align text to the right.

    DT_RTLREADING

    Display text in right-to-left reading order for bidirectional text when a Hebrew or Arabic font is selected. The default reading order for all text is left-to-right.

    DT_SINGLELINE

    Display text on a single line only. Carriage returns and line feeds do not break the line.

    DT_TOP

    Top-justify text.

    DT_VCENTER

    Center text vertically (single line only).

    DT_WORDBREAK

    Break words. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by the pRect parameter. A carriage return/line feed sequence also breaks the line.

    ?

    +

    Color of the text. See .

    +

    If the function succeeds, the return value is the height of the text in logical units. If DT_VCENTER or DT_BOTTOM is specified, the return value is the offset from pRect (top to the bottom) of the drawn text. If the function fails, the return value is zero.

    + +

    The parameters of this method are very similar to those of the GDI DrawText function.

    This method supports both ANSI and Unicode strings.

    Unless the DT_NOCLIP format is used, this method clips the text so that it does not appear outside the specified rectangle. All formatting is assumed to have multiple lines unless the DT_SINGLELINE format is specified.

    If the selected font is too large for the rectangle, this method does not attempt to substitute a smaller font.

    This method supports only fonts whose escapement and orientation are both zero.

    +
    + + bb173887 + int ID3DX10Font::DrawTextW([In] ID3DX10Sprite* pSprite,[In] const wchar_t* pString,[In] int Count,[In] void* pRect,[In] unsigned int Format,[In] D3DXCOLOR Color) + ID3DX10Font::DrawTextW +
    + + + Defines possible character sets for fonts. + + CHARSET + + + + The ANSI character set. + + + + + The Arabic character set. + + + + + The Baltic character set. + + + + + The Chinese character set. + + + + + The default system character set. + + + + + The East Europe character set. + + + + + The GB2312 character set. + + + + + The Greek character set. + + + + + The Hangul character set. + + + + + The Hebrew character set. + + + + + The Johab character set. + + + + + The Mac character set. + + + + + The OEM character set. + + + + + The Russian character set. + + + + + The ShiftJIS character set. + + + + + The symbol character set. + + + + + The Thai character set. + + + + + The Turkish character set. + + + + + The Vietnamese character set. + + + + + Specifies formatting options for text rendering. + + DT + + + + Align the text to the bottom. + + + + + Align the text to the center. + + + + + Expand tab characters. + + + + + Align the text to the left. + + + + + Don't clip the text. + + + + + Align the text to the right. + + + + + Rendering the text in right-to-left reading order. + + + + + Force all text to a single line. + + + + + Align the text to the top. + + + + + Vertically align the text to the center. + + + + + Allow word breaks. + + + + + Defines pitch and family settings for fonts. + + + + + Use the Decorative family. + + + + + Default pitch. + + + + + The font family doesn't matter. + + + + + Fixed pitch. + + + + + Use the Modern family. + + + + + Mono pitch. + + + + + Use the Roman family. + + + + + Use the Script family. + + + + + Use the Swiss family. + + + + + Variable pitch. + + + + + Defines precision levels for font rendering. + + OutPrecision + + + + Default + + + + + String + + + + + Character + + + + + Stroke + + + + + TrueType + + + + + Device + + + + + Raster + + + + + TrueTypeOnly + + + + + Outline + + + + + ScreenOutline + + + + + PostScriptOnly + + + + + Specifies quality options for font rendering. + + QUALITY + + + + Default + + + + + Draft + + + + + Proof + + + + + Non antialiased + + + + + Antialiased + + + + + ClearType + + + + + ClearTypeNatural + + + + + Specifies weights for font rendering. + + FW + + + + Use a black weight. + + + + + Use a bold weight. + + + + + Use a demi-bold weight. + + + + + The font weight doesn't matter. + + + + + Use an extra bold weight. + + + + + Make the font extra light. + + + + + Use a heavy weight. + + + + + Make the font light. + + + + + Use a medium weight. + + + + + Use a normal weight. + + + + + Use a regular weight. + + + + + Use a semi-bold weight. + + + + + Make the font thin. + + + + + Use an ultra bold weight. + + + + + Make the font ultra light. + + + + +Flags that defines the behavior of method . + + bb204887 + D3D10_ASYNC_GETDATA_FLAG + D3D10_ASYNC_GETDATA_FLAG + + + + No documentation. + + + bb204887 + D3D10_ASYNC_GETDATA_DONOTFLUSH + D3D10_ASYNC_GETDATA_DONOTFLUSH + + + + None. + + + None + None + + + +

    Identifies how to bind a resource to the pipeline.

    +
    + +

    In general, binding flags can be combined using a logical OR (except the constant-buffer flag); however, you should use a single flag to allow the device to optimize the resource usage.

    This enumeration is used by a:

    • Buffer description when creating a buffer.
    • Texture description when creating a texture (see or or ).

    A shader-resource buffer is NOT a constant buffer; rather, it is a texture or buffer resource that is bound to a shader, that contains texture or buffer data (it is not limited to a single element type in the buffer). A shader-resource buffer is created with the flag and is bound to the pipeline using one of these APIs: , , or . Furthermore, a shader-resource buffer cannot use the flag.

    +
    + + bb204891 + D3D10_BIND_FLAG + D3D10_BIND_FLAG +
    + + +

    Bind a buffer as a vertex buffer to the input-assembler stage.

    +
    + + bb204891 + D3D10_BIND_VERTEX_BUFFER + D3D10_BIND_VERTEX_BUFFER +
    + + +

    Bind a buffer as an index buffer to the input-assembler stage.

    +
    + + bb204891 + D3D10_BIND_INDEX_BUFFER + D3D10_BIND_INDEX_BUFFER +
    + + +

    Bind a buffer as a constant buffer to a shader stage; this flag may NOT be combined with any other bind flag.

    +
    + + bb204891 + D3D10_BIND_CONSTANT_BUFFER + D3D10_BIND_CONSTANT_BUFFER +
    + + +

    Bind a buffer or texture to a shader stage; this flag cannot be used with the flag.

    +
    + + bb204891 + D3D10_BIND_SHADER_RESOURCE + D3D10_BIND_SHADER_RESOURCE +
    + + +

    Bind an output buffer for the stream-output stage.

    +
    + + bb204891 + D3D10_BIND_STREAM_OUTPUT + D3D10_BIND_STREAM_OUTPUT +
    + + +

    Bind a texture as a render target for the output-merger stage.

    +
    + + bb204891 + D3D10_BIND_RENDER_TARGET + D3D10_BIND_RENDER_TARGET +
    + + +

    Bind a texture as a depth-stencil target for the output-merger stage.

    +
    + + bb204891 + D3D10_BIND_DEPTH_STENCIL + D3D10_BIND_DEPTH_STENCIL +
    + + + None. + + + None + None + + + +

    RGB or alpha blending operation.

    +
    + +

    The runtime implements RGB blending and alpha blending separately. Therefore, blend state requires separate blend operations for RGB data and alpha data. These blend operations are specified in a blend description. The two sources ? source 1 and source 2 ? are shown in the blending block diagram.

    Blend state is used by the output-merger stage to determine how to blend together two RGB pixel values and two alpha values. The two RGB pixel values and two alpha values are the RGB pixel value and alpha value that the pixel shader outputs and the RGB pixel value and alpha value already in the output render target. The blend option controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The blend operation controls how the blending stage mathematically combines these modulated values.

    +
    + + bb204894 + D3D10_BLEND_OP + D3D10_BLEND_OP +
    + + +

    Add source 1 and source 2.

    +
    + + bb204894 + D3D10_BLEND_OP_ADD + D3D10_BLEND_OP_ADD +
    + + +

    Subtract source 1 from source 2.

    +
    + + bb204894 + D3D10_BLEND_OP_SUBTRACT + D3D10_BLEND_OP_SUBTRACT +
    + + +

    Subtract source 2 from source 1.

    +
    + + bb204894 + D3D10_BLEND_OP_REV_SUBTRACT + D3D10_BLEND_OP_REV_SUBTRACT +
    + + +

    Find the minimum of source 1 and source 2.

    +
    + + bb204894 + D3D10_BLEND_OP_MIN + D3D10_BLEND_OP_MIN +
    + + +

    Find the maximum of source 1 and source 2.

    +
    + + bb204894 + D3D10_BLEND_OP_MAX + D3D10_BLEND_OP_MAX +
    + + +

    Describes the blend state.

    +
    + +

    To see how blending is done, see Output-Merger Stage (Direct3D 10).

    These are the default values for blend state.

    StateDefault Value
    AlphaToCoverageEnable
    BlendEnable[8] (for all 8)
    SrcBlend
    DestBlend
    BlendOp
    SrcBlendAlpha
    DestBlendAlpha
    BlendOpAlpha
    RenderTargetWriteMask[8] (for all 8)

    ?

    +
    + + bb204893 + D3D10_BLEND + D3D10_BLEND +
    + + +

    Determines whether or not to use alpha-to-coverage as a multisampling technique when setting a pixel to a rendertarget.

    +
    + + bb204893 + D3D10_BLEND_ZERO + D3D10_BLEND_ZERO +
    + + +

    Enable (or disable) blending. There are eight elements in this array; these correspond to the eight rendertargets that can be set to output-merger stage at one time.

    +
    + + bb204893 + D3D10_BLEND_ONE + D3D10_BLEND_ONE +
    + + +

    This blend option specifies the first RGB data source and includes an optional pre-blend operation.

    +
    + + bb204893 + D3D10_BLEND_SRC_COLOR + D3D10_BLEND_SRC_COLOR +
    + + +

    This blend option specifies the second RGB data source and includes an optional pre-blend operation.

    +
    + + bb204893 + D3D10_BLEND_INV_SRC_COLOR + D3D10_BLEND_INV_SRC_COLOR +
    + + +

    This blend operation defines how to combine the RGB data sources.

    +
    + + bb204893 + D3D10_BLEND_SRC_ALPHA + D3D10_BLEND_SRC_ALPHA +
    + + +

    This blend option specifies the first alpha data source and includes an optional pre-blend operation. Blend options that end in _COLOR are not allowed.

    +
    + + bb204893 + D3D10_BLEND_INV_SRC_ALPHA + D3D10_BLEND_INV_SRC_ALPHA +
    + + +

    This blend option specifies the second alpha data source and includes an optional pre-blend operation. Blend options that end in _COLOR are not allowed.

    +
    + + bb204893 + D3D10_BLEND_DEST_ALPHA + D3D10_BLEND_DEST_ALPHA +
    + + +

    This blend operation defines how to combine the alpha data sources.

    +
    + + bb204893 + D3D10_BLEND_INV_DEST_ALPHA + D3D10_BLEND_INV_DEST_ALPHA +
    + + +

    A per-pixel write mask that allows control over which components can be written (see ).

    +
    + + bb204893 + D3D10_BLEND_DEST_COLOR + D3D10_BLEND_DEST_COLOR +
    + + + No documentation. + + + bb204893 + D3D10_BLEND_INV_DEST_COLOR + D3D10_BLEND_INV_DEST_COLOR + + + + No documentation. + + + bb204893 + D3D10_BLEND_SRC_ALPHA_SAT + D3D10_BLEND_SRC_ALPHA_SAT + + + + No documentation. + + + bb204893 + D3D10_BLEND_BLEND_FACTOR + D3D10_BLEND_BLEND_FACTOR + + + + No documentation. + + + bb204893 + D3D10_BLEND_INV_BLEND_FACTOR + D3D10_BLEND_INV_BLEND_FACTOR + + + + No documentation. + + + bb204893 + D3D10_BLEND_SRC1_COLOR + D3D10_BLEND_SRC1_COLOR + + + + No documentation. + + + bb204893 + D3D10_BLEND_INV_SRC1_COLOR + D3D10_BLEND_INV_SRC1_COLOR + + + + No documentation. + + + bb204893 + D3D10_BLEND_SRC1_ALPHA + D3D10_BLEND_SRC1_ALPHA + + + + No documentation. + + + bb204893 + D3D10_BLEND_INV_SRC1_ALPHA + D3D10_BLEND_INV_SRC1_ALPHA + + + +

    These flags are used by functions which operate on one or more channels in a texture.

    +
    + + bb172690 + D3DX10_CHANNEL_FLAG + D3DX10_CHANNEL_FLAG +
    + + +

    Indicates the red channel should be used.

    +
    + + bb172690 + D3DX10_CHANNEL_RED + D3DX10_CHANNEL_RED +
    + + +

    Indicates the blue channel should be used.

    +
    + + bb172690 + D3DX10_CHANNEL_BLUE + D3DX10_CHANNEL_BLUE +
    + + +

    Indicates the green channel should be used.

    +
    + + bb172690 + D3DX10_CHANNEL_GREEN + D3DX10_CHANNEL_GREEN +
    + + +

    Indicates the alpha channel should be used.

    +
    + + bb172690 + D3DX10_CHANNEL_ALPHA + D3DX10_CHANNEL_ALPHA +
    + + +

    Indicates the luminaces of the red, green, and blue channels should be used.

    +
    + + bb172690 + D3DX10_CHANNEL_LUMINANCE + D3DX10_CHANNEL_LUMINANCE +
    + + + None. + + + None + None + + + +

    Identify which components of each pixel of a render target are writable during blending.

    +
    + +

    These flags can be combined with a bitwise OR.

    +
    + + bb204901 + D3D10_COLOR_WRITE_ENABLE + D3D10_COLOR_WRITE_ENABLE +
    + + + No documentation. + + + bb204901 + D3D10_COLOR_WRITE_ENABLE_RED + D3D10_COLOR_WRITE_ENABLE_RED + + + + No documentation. + + + bb204901 + D3D10_COLOR_WRITE_ENABLE_GREEN + D3D10_COLOR_WRITE_ENABLE_GREEN + + + + No documentation. + + + bb204901 + D3D10_COLOR_WRITE_ENABLE_BLUE + D3D10_COLOR_WRITE_ENABLE_BLUE + + + + No documentation. + + + bb204901 + D3D10_COLOR_WRITE_ENABLE_ALPHA + D3D10_COLOR_WRITE_ENABLE_ALPHA + + + + No documentation. + + + bb204901 + D3D10_COLOR_WRITE_ENABLE_ALL + D3D10_COLOR_WRITE_ENABLE_ALL + + + +

    Comparison options.

    +
    + +

    A comparison option determines whether how the runtime compares source (new) data against destination (existing) data before storing the new data. The comparison option is declared in a description before an object is created. The API allows you to set a comparison option for a depth-stencil buffer (see ), depth-stencil operations (see ), or sampler state (see ).

    +
    + + bb204902 + D3D10_COMPARISON_FUNC + D3D10_COMPARISON_FUNC +
    + + +

    Never pass the comparison.

    +
    + + bb204902 + D3D10_COMPARISON_NEVER + D3D10_COMPARISON_NEVER +
    + + +

    If the source data is less than the destination data, the comparison passes.

    +
    + + bb204902 + D3D10_COMPARISON_LESS + D3D10_COMPARISON_LESS +
    + + +

    If the source data is equal to the destination data, the comparison passes.

    +
    + + bb204902 + D3D10_COMPARISON_EQUAL + D3D10_COMPARISON_EQUAL +
    + + +

    If the source data is less than or equal to the destination data, the comparison passes.

    +
    + + bb204902 + D3D10_COMPARISON_LESS_EQUAL + D3D10_COMPARISON_LESS_EQUAL +
    + + +

    If the source data is greater than the destination data, the comparison passes.

    +
    + + bb204902 + D3D10_COMPARISON_GREATER + D3D10_COMPARISON_GREATER +
    + + +

    If the source data is not equal to the destination data, the comparison passes.

    +
    + + bb204902 + D3D10_COMPARISON_NOT_EQUAL + D3D10_COMPARISON_NOT_EQUAL +
    + + +

    If the source data is greater than or equal to the destination data, the comparison passes.

    +
    + + bb204902 + D3D10_COMPARISON_GREATER_EQUAL + D3D10_COMPARISON_GREATER_EQUAL +
    + + +

    Always pass the comparison.

    +
    + + bb204902 + D3D10_COMPARISON_ALWAYS + D3D10_COMPARISON_ALWAYS +
    + + +

    Performance counter types.

    +
    + +

    In addition to these performance counters, independent hardware vendors may define their own set of performance counters for their devices. The enum values for these counters would start after and would be defined by those hardware vendors.

    A device can support one or more of these performance counters, but it is not required to support any of them.

    +
    + + bb204904 + D3D10_COUNTER + D3D10_COUNTER +
    + + +

    Percentage of the time that the GPU is idle.

    +
    + + bb204904 + D3D10_COUNTER_GPU_IDLE + D3D10_COUNTER_GPU_IDLE +
    + + +

    Percentage of the time that the GPU does vertex processing.

    +
    + + bb204904 + D3D10_COUNTER_VERTEX_PROCESSING + D3D10_COUNTER_VERTEX_PROCESSING +
    + + +

    Percentage of the time that the GPU does geometry processing.

    +
    + + bb204904 + D3D10_COUNTER_GEOMETRY_PROCESSING + D3D10_COUNTER_GEOMETRY_PROCESSING +
    + + +

    Percentage of the time that the GPU does pixel processing.

    +
    + + bb204904 + D3D10_COUNTER_PIXEL_PROCESSING + D3D10_COUNTER_PIXEL_PROCESSING +
    + + +

    Percentage of the time that the GPU does other processing (not vertex, geometry, or pixel processing).

    +
    + + bb204904 + D3D10_COUNTER_OTHER_GPU_PROCESSING + D3D10_COUNTER_OTHER_GPU_PROCESSING +
    + + +

    Percentage of bandwidth used on a host adapter. Value returned by between 0.0 and 1.0 when using this counter.

    +
    + + bb204904 + D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION + D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION +
    + + +

    Percentage of bandwidth used by the local video memory. Value returned by between 0.0 and 1.0 when using this counter

    +
    + + bb204904 + D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION + D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION +
    + + +

    Percentage of throughput used for vertices. Value returned by between 0.0 and 1.0 when using this counter

    +
    + + bb204904 + D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION + D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION +
    + + +

    Percentage of throughput used for triangle setup. Value returned by between 0.0 and 1.0 when using this counter

    +
    + + bb204904 + D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION + D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION +
    + + +

    Percentage of throughput used for the fillrate. Value returned by between 0.0 and 1.0 when using this counter.

    +
    + + bb204904 + D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION + D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION +
    + + +

    Percentage of time that a vertex shader spends sampling resources.

    +
    + + bb204904 + D3D10_COUNTER_VS_MEMORY_LIMITED + D3D10_COUNTER_VS_MEMORY_LIMITED +
    + + +

    Percentage of time that a vertex shader spends doing computations.

    +
    + + bb204904 + D3D10_COUNTER_VS_COMPUTATION_LIMITED + D3D10_COUNTER_VS_COMPUTATION_LIMITED +
    + + +

    Percentage of time that a geometry shader spends sampling resources.

    +
    + + bb204904 + D3D10_COUNTER_GS_MEMORY_LIMITED + D3D10_COUNTER_GS_MEMORY_LIMITED +
    + + +

    Percentage of time that a geometry shader spends doing computations.

    +
    + + bb204904 + D3D10_COUNTER_GS_COMPUTATION_LIMITED + D3D10_COUNTER_GS_COMPUTATION_LIMITED +
    + + +

    Percentage of time that a pixel shader spends sampling resources.

    +
    + + bb204904 + D3D10_COUNTER_PS_MEMORY_LIMITED + D3D10_COUNTER_PS_MEMORY_LIMITED +
    + + +

    Percentage of time that a pixel shader spends doing computations.

    +
    + + bb204904 + D3D10_COUNTER_PS_COMPUTATION_LIMITED + D3D10_COUNTER_PS_COMPUTATION_LIMITED +
    + + +

    Percentage of vertex data that was read from the vertex cache. For example, if 6 vertices were added to the cache and 3 of them were read from the cache, then the hit rate would be 0.5.

    +
    + + bb204904 + D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE + D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE +
    + + +

    Percentage of texel data that was read from the vertex cache. For example, if 6 texels were added to the cache and 3 of them were read from the cache, then the hit rate would be 0.5.

    +
    + + bb204904 + D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE + D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE +
    + + +

    Start of the device-dependent counters. See remarks.

    +
    + + bb204904 + D3D10_COUNTER_DEVICE_DEPENDENT_0 + D3D10_COUNTER_DEVICE_DEPENDENT_0 +
    + + +

    Data type of a performance counter.

    +
    + +

    These flags are an output parameter in .

    +
    + + bb204907 + D3D10_COUNTER_TYPE + D3D10_COUNTER_TYPE +
    + + +

    32-bit floating point.

    +
    + + bb204907 + D3D10_COUNTER_TYPE_FLOAT32 + D3D10_COUNTER_TYPE_FLOAT32 +
    + + +

    16-bit unsigned integer.

    +
    + + bb204907 + D3D10_COUNTER_TYPE_UINT16 + D3D10_COUNTER_TYPE_UINT16 +
    + + +

    32-bit unsigned integer.

    +
    + + bb204907 + D3D10_COUNTER_TYPE_UINT32 + D3D10_COUNTER_TYPE_UINT32 +
    + + +

    64-bit unsigned integer.

    +
    + + bb204907 + D3D10_COUNTER_TYPE_UINT64 + D3D10_COUNTER_TYPE_UINT64 +
    + + +

    Specifies the types of CPU access allowed for a resource.

    +
    + +

    This enumeration is used in , , , , and . See Creating Buffer Resources (Direct3D 10) for more details.

    Applications can combine one or more of these flags with a bitwise OR. When possible, create resources with no CPU access flags, as this enables better resource optimization.

    +
    + + bb204908 + D3D10_CPU_ACCESS_FLAG + D3D10_CPU_ACCESS_FLAG +
    + + +

    The resource is to be mappable so that the CPU can change its contents. Resources created with this flag cannot be set as outputs of the pipeline and must be created with either dynamic or staging usage (see ).

    +
    + + bb204908 + D3D10_CPU_ACCESS_WRITE + D3D10_CPU_ACCESS_WRITE +
    + + +

    The resource is to be mappable so that the CPU can read its contents. Resources created with this flag cannot be set as either inputs or outputs to the pipeline and must be created with staging usage (see ).

    +
    + + bb204908 + D3D10_CPU_ACCESS_READ + D3D10_CPU_ACCESS_READ +
    + + + None. + + + None + None + + + +

    Indicates triangles facing a particular direction are not drawn.

    +
    + +

    This enumeration is part of a rasterizer-state object description (see ).

    +
    + + bb204911 + D3D10_CULL_MODE + D3D10_CULL_MODE +
    + + +

    Always draw all triangles.

    +
    + + bb204911 + D3D10_CULL_NONE + D3D10_CULL_NONE +
    + + +

    Do not draw triangles that are front-facing.

    +
    + + bb204911 + D3D10_CULL_FRONT + D3D10_CULL_FRONT +
    + + +

    Do not draw triangles that are back-facing.

    +
    + + bb204911 + D3D10_CULL_BACK + D3D10_CULL_BACK +
    + + + No documentation. + + + D3D10_DEBUG_FEATURE_FLAGS + D3D10_DEBUG_FEATURE_FLAGS + + + + No documentation. + + + D3D10_DEBUG_FEATURE_FLUSH_PER_RENDER_OP + D3D10_DEBUG_FEATURE_FLUSH_PER_RENDER_OP + + + + No documentation. + + + D3D10_DEBUG_FEATURE_FINISH_PER_RENDER_OP + D3D10_DEBUG_FEATURE_FINISH_PER_RENDER_OP + + + + No documentation. + + + D3D10_DEBUG_FEATURE_PRESENT_PER_RENDER_OP + D3D10_DEBUG_FEATURE_PRESENT_PER_RENDER_OP + + + +

    Specifies the parts of the depth stencil to clear. Usually used with .

    +
    + +

    These flags can be bitwise ORed together.

    +
    + + bb204900 + D3D10_CLEAR_FLAG + D3D10_CLEAR_FLAG +
    + + + No documentation. + + + bb204900 + D3D10_CLEAR_DEPTH + D3D10_CLEAR_DEPTH + + + + No documentation. + + + bb204900 + D3D10_CLEAR_STENCIL + D3D10_CLEAR_STENCIL + + + +

    Specifies how to access a resource used in a depth-stencil view.

    +
    + +

    This enumeration is used in to create a depth-stencil view.

    +
    + + bb205043 + D3D10_DSV_DIMENSION + D3D10_DSV_DIMENSION +
    + + + No documentation. + + + bb205043 + D3D10_DSV_DIMENSION_UNKNOWN + D3D10_DSV_DIMENSION_UNKNOWN + + + + No documentation. + + + bb205043 + D3D10_DSV_DIMENSION_TEXTURE1D + D3D10_DSV_DIMENSION_TEXTURE1D + + + + No documentation. + + + bb205043 + D3D10_DSV_DIMENSION_TEXTURE1DARRAY + D3D10_DSV_DIMENSION_TEXTURE1DARRAY + + + + No documentation. + + + bb205043 + D3D10_DSV_DIMENSION_TEXTURE2D + D3D10_DSV_DIMENSION_TEXTURE2D + + + + No documentation. + + + bb205043 + D3D10_DSV_DIMENSION_TEXTURE2DARRAY + D3D10_DSV_DIMENSION_TEXTURE2DARRAY + + + + No documentation. + + + bb205043 + D3D10_DSV_DIMENSION_TEXTURE2DMS + D3D10_DSV_DIMENSION_TEXTURE2DMS + + + + No documentation. + + + bb205043 + D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY + D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY + + + +

    Identify the portion of a depth-stencil buffer for writing depth data.

    +
    + + bb205038 + D3D10_DEPTH_WRITE_MASK + D3D10_DEPTH_WRITE_MASK +
    + + + No documentation. + + + bb205038 + D3D10_DEPTH_WRITE_MASK_ZERO + D3D10_DEPTH_WRITE_MASK_ZERO + + + + No documentation. + + + bb205038 + D3D10_DEPTH_WRITE_MASK_ALL + D3D10_DEPTH_WRITE_MASK_ALL + + + +

    Device creation flags.

    +
    + +

    Device creation flags are used by and .

    An application might dynamically create (and destroy) threads to improve performance especially on a machine with multiple CPU cores. There may be cases, however, when an application needs to prevent extra threads from being created. This can happen when you want to simplify debugging, profile code or develop a tool for instance. For these cases, use to request that the runtime and video driver not create any additional threads that might interfere with the application.

    +
    + + bb204909 + D3D10_CREATE_DEVICE_FLAG + D3D10_CREATE_DEVICE_FLAG +
    + + +

    Use this flag if an application will only be calling D3D10 from a single thread. If this flag is not specified, the default behavior of D3D10 is to enter a lock during each API call to prevent multiple threads altering internal state. By using this flag no locks will be taken which can slightly increase performance, but could result in undefine behavior if D3D10 is called from multiple threads.

    +
    + + bb204909 + D3D10_CREATE_DEVICE_SINGLETHREADED + D3D10_CREATE_DEVICE_SINGLETHREADED +
    + + +

    Create a device that supports the debug layer.

    +
    + + bb204909 + D3D10_CREATE_DEVICE_DEBUG + D3D10_CREATE_DEVICE_DEBUG +
    + + +

    Create both a software (REF) and hardware (HAL) version of the device simultaneously, which allows an application to switch to a reference device to enable debugging. See Interface for more information.

    +
    + + bb204909 + D3D10_CREATE_DEVICE_SWITCH_TO_REF + D3D10_CREATE_DEVICE_SWITCH_TO_REF +
    + + +

    Prevents multiple threads from being created. When this flag is used with a WARP device, no additional threads will be created by WARP and all rasterization will occur on the calling thread. This flag is not recommended for general use. See remarks.

    +
    + + bb204909 + D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS + D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS +
    + + +

    Return a null reference instead of triggering an exception on memory exhaustion during invocations to Map. Without this flag an exception will be raised on memory exhaustion. Only valid on Winodws 7.

    +
    + + bb204909 + D3D10_CREATE_DEVICE_ALLOW_NULL_FROM_MAP + D3D10_CREATE_DEVICE_ALLOW_NULL_FROM_MAP +
    + + +

    Causes device creation to fail if BGRA support is not available.

    BGRA support enables the following formats.

    is only relevant when a device is created with or using the or feature levels, the flag will be ignored when a device is created with other feature levels.

    Note that BGRA support may be present even if the application didn't specify . The flag merely causes device creation to fail if BGRA support isn't available.

    is only valid on Windows 7, Windows Server 2008 R2, and updated Windows Vista (KB971644) systems.

    +
    + + bb204909 + D3D10_CREATE_DEVICE_BGRA_SUPPORT + D3D10_CREATE_DEVICE_BGRA_SUPPORT +
    + + +

    Causes the Direct3D runtime to ignore registry settings that turn on the debug layer. You can turn on the debug layer by using the DirectX Control Panel that was included as part of the DirectX SDK. We shipped the last version of the DirectX SDK in June 2010; you can download it from the Microsoft Download Center. You can set this flag in your app, typically in release builds only, to prevent end users from using the DirectX Control Panel to monitor how the app uses Direct3D.

    Note??You can also set this flag in your app to prevent Direct3D debugging tools, such as Visual Studio Ultimate?2012, from hooking your app.

    Windows?8.1:??This flag doesn't prevent Visual Studio?2013 and later running on Windows?8.1 and later from hooking your app. But, this flag still prevents Visual Studio?2013 and later running on Windows?8 and earlier from hooking your app.

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + bb204909 + D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY + D3D10_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY +
    + + +

    Reserved. This flag is currently not supported. Do not use.

    +
    + + bb204909 + D3D10_CREATE_DEVICE_STRICT_VALIDATION + D3D10_CREATE_DEVICE_STRICT_VALIDATION +
    + + +

    Causes the device and driver to keep information that you can use for shader debugging. The exact impact from this flag will vary from driver to driver. To use this flag, you must have D3D11_1SDKLayers.dll installed; otherwise, device creation fails. The created device supports the debug layer. To get D3D11_1SDKLayers.dll, you must install the SDK for Windows?8.

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + bb204909 + D3D10_CREATE_DEVICE_DEBUGGABLE + D3D10_CREATE_DEVICE_DEBUGGABLE +
    + + + None. + + + None + None + + + +

    The device-driver type.

    +
    + +

    The device-driver type needs to be specified when the device is created (using or ).

    For information about limitations creating nonhardware-type devices on certain feature levels, see Limitations Creating WARP and Reference Devices.

    +
    + + bb205042 + D3D10_DRIVER_TYPE + D3D10_DRIVER_TYPE +
    + + +

    A hardware device; commonly called a HAL device.

    +
    + + bb205042 + D3D10_DRIVER_TYPE_HARDWARE + D3D10_DRIVER_TYPE_HARDWARE +
    + + +

    A reference device; commonly called a REF device.

    +
    + + bb205042 + D3D10_DRIVER_TYPE_REFERENCE + D3D10_DRIVER_TYPE_REFERENCE +
    + + +

    A null device; which is a reference device without render capability.

    +
    + + bb205042 + D3D10_DRIVER_TYPE_NULL + D3D10_DRIVER_TYPE_NULL +
    + + +

    Reserved for later use.

    +
    + + bb205042 + D3D10_DRIVER_TYPE_SOFTWARE + D3D10_DRIVER_TYPE_SOFTWARE +
    + + +

    A WARP driver, which is a high-performance software rasterizer. The rasterizer supports feature level 9_1 through level 10.1 with a high performance software implementation when hardware is not available. For more information about using a WARP driver, see Windows Advanced Rasterization Platform (WARP) In-Depth Guide. Note that WARP is only available with the DirectX 11 Runtime (Windows 7, Windows Server 2008 R2, updated Windows Vista [KB971644]).

    +
    + + bb205042 + D3D10_DRIVER_TYPE_WARP + D3D10_DRIVER_TYPE_WARP +
    + + +

    Describes an effect variable.

    +
    + +

    To get an effect-variable description, call .

    +
    + + bb205056 + D3D10_EFFECT_VARIABLE_FLAGS + D3D10_EFFECT_VARIABLE_FLAGS +
    + + +

    A string that contains the variable name.

    +
    + + bb205056 + D3D10_EFFECT_VARIABLE_POOLED + D3D10_EFFECT_VARIABLE_POOLED +
    + + +

    The semantic attached to the variable; otherwise null.

    +
    + + bb205056 + D3D10_EFFECT_VARIABLE_ANNOTATION + D3D10_EFFECT_VARIABLE_ANNOTATION +
    + + +

    Optional flags for effect variables.

    +
    + + bb205056 + D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT + D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT +
    + + + None. + + + None + None + + + +

    The version of hardware acceleration requested.

    +
    + +

    Use this enumeration when creating a device with or .

    Note that 10level9 feature levels 9_1, 9_2, and 9_3 are only available with the Direct3D 11 runtime (Windows?7, Windows Server?2008?R2, updated Windows?Vista with Service Pack?2 (SP2) [KB 971644], and updated Windows Server?2008 [KB 971512]).

    For information about limitations creating nonhardware-type devices on certain feature levels, see Limitations Creating WARP and Reference Devices.

    For an overview of the capabilities of each feature level, see Overview For Each Feature Level.

    +
    + + bb694529 + D3D10_FEATURE_LEVEL1 + D3D10_FEATURE_LEVEL1 +
    + + +

    The hardware supports Direct3D 10.0 features.

    +
    + + bb694529 + D3D10_FEATURE_LEVEL_10_0 + D3D10_FEATURE_LEVEL_10_0 +
    + + +

    The hardware supports Direct3D 10.1 features.

    +
    + + bb694529 + D3D10_FEATURE_LEVEL_10_1 + D3D10_FEATURE_LEVEL_10_1 +
    + + +

    The hardware supports 9.1 feature level.

    +
    + + bb694529 + D3D10_FEATURE_LEVEL_9_1 + D3D10_FEATURE_LEVEL_9_1 +
    + + +

    The hardware supports 9.2 feature level.

    +
    + + bb694529 + D3D10_FEATURE_LEVEL_9_2 + D3D10_FEATURE_LEVEL_9_2 +
    + + +

    The hardware supports 9.3 feature level.

    +
    + + bb694529 + D3D10_FEATURE_LEVEL_9_3 + D3D10_FEATURE_LEVEL_9_3 +
    + + +

    Determines the fill mode to use when rendering triangles.

    +
    + +

    This enumeration is part of a rasterizer-state object description (see ).

    +
    + + bb205059 + D3D10_FILL_MODE + D3D10_FILL_MODE +
    + + +

    Draw lines connecting the vertices. Adjacent vertices are not drawn.

    +
    + + bb205059 + D3D10_FILL_WIREFRAME + D3D10_FILL_WIREFRAME +
    + + +

    Fill the triangles formed by the vertices. Adjacent vertices are not drawn.

    +
    + + bb205059 + D3D10_FILL_SOLID + D3D10_FILL_SOLID +
    + + +

    Filtering options during texture sampling.

    +
    + +

    During texture sampling, one or more texels are read and combined (this is calling filtering) to produce a single value. Point sampling reads a single texel while linear sampling reads two texels (endpoints) and linearly interpolates a third value between the endpoints.

    HLSL texture-sampling functions also support comparison filtering during texture sampling. Comparison filtering compares each sampled texel against a comparison value. The boolean result is blended the same way that normal texture filtering is blended.

    You can use HLSL intrinsic texture-sampling functions that implement texture filtering only or companion functions that use texture filtering with comparison filtering.

    Texture Sampling FunctionTexture Sampling Function with Comparison Filtering
    sample samplecmp or samplecmplevelzero

    ?

    Comparison filters only work with textures that have the following formats: R32_FLOAT_X8X24_TYPELESS, R32_FLOAT, R24_UNORM_X8_TYPELESS, R16_UNORM.

    +
    + + bb205060 + D3D10_FILTER + D3D10_FILTER +
    + + +

    Use point sampling for minification, magnification, and mip-level sampling.

    +
    + + bb205060 + D3D10_FILTER_MIN_MAG_MIP_POINT + D3D10_FILTER_MIN_MAG_MIP_POINT +
    + + +

    Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.

    +
    + + bb205060 + D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR + D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR +
    + + +

    Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.

    +
    + + bb205060 + D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT + D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT +
    + + +

    Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.

    +
    + + bb205060 + D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR + D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR +
    + + +

    Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.

    +
    + + bb205060 + D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT + D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT +
    + + +

    Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.

    +
    + + bb205060 + D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR + D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR +
    + + +

    Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.

    +
    + + bb205060 + D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT + D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT +
    + + +

    Use linear interpolation for minification, magnification, and mip-level sampling.

    +
    + + bb205060 + D3D10_FILTER_MIN_MAG_MIP_LINEAR + D3D10_FILTER_MIN_MAG_MIP_LINEAR +
    + + +

    Use anisotropic interpolation for minification, magnification, and mip-level sampling.

    +
    + + bb205060 + D3D10_FILTER_ANISOTROPIC + D3D10_FILTER_ANISOTROPIC +
    + + +

    Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value.

    +
    + + bb205060 + D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT + D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT +
    + + +

    Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.

    +
    + + bb205060 + D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR + D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR +
    + + +

    Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.

    +
    + + bb205060 + D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT + D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT +
    + + +

    Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value.

    +
    + + bb205060 + D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR + D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR +
    + + +

    Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value.

    +
    + + bb205060 + D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT + D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT +
    + + +

    Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.

    +
    + + bb205060 + D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR + D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR +
    + + +

    Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.

    +
    + + bb205060 + D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT + D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT +
    + + +

    Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.

    +
    + + bb205060 + D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR + D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR +
    + + +

    Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.

    +
    + + bb205060 + D3D10_FILTER_COMPARISON_ANISOTROPIC + D3D10_FILTER_COMPARISON_ANISOTROPIC +
    + + +

    For use in pixel shaders with textures that have the R1_UNORM format.

    +
    + + bb205060 + D3D10_FILTER_TEXT_1BIT + D3D10_FILTER_TEXT_1BIT +
    + + +

    Texture filtering flags.

    +
    + +

    D3DX10 automatically performs gamma correction (to convert color data from RGB space to standard RGB space) when loading texture data. This is automatically done for instance when RGB data is loaded from a .png file into an sRGB texture. Use the SRGB filter flags to indicate if the data does not need to be converted into sRGB space.

    +
    + + bb172692 + D3DX10_FILTER_FLAG + D3DX10_FILTER_FLAG +
    + + +

    No scaling or filtering will take place. Pixels outside the bounds of the source image are assumed to be transparent black.

    +
    + + bb172692 + D3DX10_FILTER_NONE + D3DX10_FILTER_NONE +
    + + +

    Each destination pixel is computed by sampling the nearest pixel from the source image.

    +
    + + bb172692 + D3DX10_FILTER_POINT + D3DX10_FILTER_POINT +
    + + +

    Each destination pixel is computed by sampling the four nearest pixels from the source image. This filter works best when the scale on both axes is less than two.

    +
    + + bb172692 + D3DX10_FILTER_LINEAR + D3DX10_FILTER_LINEAR +
    + + +

    Every pixel in the source image contributes equally to the destination image. This is the slowest of the filters.

    +
    + + bb172692 + D3DX10_FILTER_TRIANGLE + D3DX10_FILTER_TRIANGLE +
    + + +

    Each pixel is computed by averaging a 2x2(x2) box of pixels from the source image. This filter works only when the dimensions of the destination are half those of the source, as is the case with mipmaps.

    +
    + + bb172692 + D3DX10_FILTER_BOX + D3DX10_FILTER_BOX +
    + + +

    Pixels off the edge of the texture on the u-axis should be mirrored, not wrapped.

    +
    + + bb172692 + D3DX10_FILTER_MIRROR_U + D3DX10_FILTER_MIRROR_U +
    + + +

    Pixels off the edge of the texture on the v-axis should be mirrored, not wrapped.

    +
    + + bb172692 + D3DX10_FILTER_MIRROR_V + D3DX10_FILTER_MIRROR_V +
    + + +

    Pixels off the edge of the texture on the w-axis should be mirrored, not wrapped.

    +
    + + bb172692 + D3DX10_FILTER_MIRROR_W + D3DX10_FILTER_MIRROR_W +
    + + +

    Specifying this flag is the same as specifying the D3DX_FILTER_MIRROR_U, D3DX_FILTER_MIRROR_V, and D3DX_FILTER_MIRROR_W flags.

    +
    + + bb172692 + D3DX10_FILTER_MIRROR + D3DX10_FILTER_MIRROR +
    + + +

    The resulting image must be dithered using a 4x4 ordered dither algorithm. This happens when converting from one format to another.

    +
    + + bb172692 + D3DX10_FILTER_DITHER + D3DX10_FILTER_DITHER +
    + + +

    Do diffuse dithering on the image when changing from one format to another.

    +
    + + bb172692 + D3DX10_FILTER_DITHER_DIFFUSION + D3DX10_FILTER_DITHER_DIFFUSION +
    + + +

    Input data is in standard RGB (sRGB) color space. See remarks.

    +
    + + bb172692 + D3DX10_FILTER_SRGB_IN + D3DX10_FILTER_SRGB_IN +
    + + +

    Output data is in standard RGB (sRGB) color space. See remarks.

    +
    + + bb172692 + D3DX10_FILTER_SRGB_OUT + D3DX10_FILTER_SRGB_OUT +
    + + +

    Same as specifying D3DX_FILTER_SRGB_IN | D3DX_FILTER_SRGB_OUT. See remarks.

    +
    + + bb172692 + D3DX10_FILTER_SRGB + D3DX10_FILTER_SRGB +
    + + +

    Types of magnification or minification sampler filters.

    +
    + + bb205061 + D3D10_FILTER_TYPE + D3D10_FILTER_TYPE +
    + + +

    Point filtering used as a texture magnification or minification filter. The texel with coordinates nearest to the desired pixel value is used. The texture filter to be used between mipmap levels is nearest-point mipmap filtering. The rasterizer uses the color from the texel of the nearest mipmap texture.

    +
    + + bb205061 + D3D10_FILTER_TYPE_POINT + D3D10_FILTER_TYPE_POINT +
    + + +

    Bilinear interpolation filtering used as a texture magnification or minification filter. A weighted average of a 2 x 2 area of texels surrounding the desired pixel is used. The texture filter to use between mipmap levels is trilinear mipmap interpolation. The rasterizer linearly interpolates pixel color, using the texels of the two nearest mipmap textures.

    +
    + + bb205061 + D3D10_FILTER_TYPE_LINEAR + D3D10_FILTER_TYPE_LINEAR +
    + + +

    Which resources are supported for a given format and given device (see ).

    +
    + + bb205063 + D3D10_FORMAT_SUPPORT + D3D10_FORMAT_SUPPORT +
    + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_BUFFER + D3D10_FORMAT_SUPPORT_BUFFER + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_IA_VERTEX_BUFFER + D3D10_FORMAT_SUPPORT_IA_VERTEX_BUFFER + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_IA_INDEX_BUFFER + D3D10_FORMAT_SUPPORT_IA_INDEX_BUFFER + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_SO_BUFFER + D3D10_FORMAT_SUPPORT_SO_BUFFER + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_TEXTURE1D + D3D10_FORMAT_SUPPORT_TEXTURE1D + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_TEXTURE2D + D3D10_FORMAT_SUPPORT_TEXTURE2D + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_TEXTURE3D + D3D10_FORMAT_SUPPORT_TEXTURE3D + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_TEXTURECUBE + D3D10_FORMAT_SUPPORT_TEXTURECUBE + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_SHADER_LOAD + D3D10_FORMAT_SUPPORT_SHADER_LOAD + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_SHADER_SAMPLE + D3D10_FORMAT_SUPPORT_SHADER_SAMPLE + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON + D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT + D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_MIP + D3D10_FORMAT_SUPPORT_MIP + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_MIP_AUTOGEN + D3D10_FORMAT_SUPPORT_MIP_AUTOGEN + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_RENDER_TARGET + D3D10_FORMAT_SUPPORT_RENDER_TARGET + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_BLENDABLE + D3D10_FORMAT_SUPPORT_BLENDABLE + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_DEPTH_STENCIL + D3D10_FORMAT_SUPPORT_DEPTH_STENCIL + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_CPU_LOCKABLE + D3D10_FORMAT_SUPPORT_CPU_LOCKABLE + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE + D3D10_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_DISPLAY + D3D10_FORMAT_SUPPORT_DISPLAY + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT + D3D10_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET + D3D10_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_MULTISAMPLE_LOAD + D3D10_FORMAT_SUPPORT_MULTISAMPLE_LOAD + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_SHADER_GATHER + D3D10_FORMAT_SUPPORT_SHADER_GATHER + + + + No documentation. + + + bb205063 + D3D10_FORMAT_SUPPORT_BACK_BUFFER_CAST + D3D10_FORMAT_SUPPORT_BACK_BUFFER_CAST + + + + None. + + + None + None + + + +

    Image file formats supported by D3DXCreatexxx and D3DX10Savexxx functions.

    +
    + +

    See Types of Bitmaps (GDI+) for more information on some of these formats.

    D3DX10 makes use of the Windows Imaging Component to implement the majority of the supported bitmap file types. See Windows Imaging Component Overview for additional information. +

    +
    + + bb172694 + D3DX10_IMAGE_FILE_FORMAT + D3DX10_IMAGE_FILE_FORMAT +
    + + +

    Windows bitmap (BMP) file format. Contains a header that describes the resolution of the device on which the rectangle of pixels was created, the dimensions of the rectangle, the size of the array of bits, a logical palette, and an array of bits that defines the relationship between pixels in the bitmapped image and entries in the logical palette. The file extension for this format is .bmp.

    +
    + + bb172694 + D3DX10_IFF_BMP + D3DX10_IFF_BMP +
    + + +

    Joint Photographic Experts Group (JPEG) compressed file format. Specifies variable compression of 24-bit RGB color and 8-bit gray-scale Tagged Image File Format (TIFF) image document files. The file extension for this format is .jpg.

    +
    + + bb172694 + D3DX10_IFF_JPG + D3DX10_IFF_JPG +
    + + +

    Portable Network Graphics (PNG) file format. A non-proprietary bitmap format using lossless compression. The file extension for this format is .png.

    +
    + + bb172694 + D3DX10_IFF_PNG + D3DX10_IFF_PNG +
    + + +

    DirectDraw surface (DDS) file format. Stores textures, volume textures, and cubic environment maps, with or without mipmap levels, and with or without pixel compression. The file extension for this format is .dds.

    +
    + + bb172694 + D3DX10_IFF_DDS + D3DX10_IFF_DDS +
    + + +

    Tagged Image File Format (TIFF). The file extensions for this format are .tif and .tiff.

    +
    + + bb172694 + D3DX10_IFF_TIFF + D3DX10_IFF_TIFF +
    + + +

    Graphics Interchange Format (GIF).The file extension for this format is .gif.

    +
    + + bb172694 + D3DX10_IFF_GIF + D3DX10_IFF_GIF +
    + + +

    Windows Media Photo format (WMP). This format is also known as HD Photo and JPEG XR. The file extensions for this format are .hdp, .jxr, and .wdp.

    To work properly, requires that you initialize COM. Therefore, call CoInitialize or CoInitializeEx in your application before you call D3DX.

    +
    + + bb172694 + D3DX10_IFF_WMP + D3DX10_IFF_WMP +
    + + +

    Type of data contained in an input slot.

    +
    + +

    Use these values to specify the type of data for a particular input element (see ) of an input-layout object.

    +
    + + bb205315 + D3D10_INPUT_CLASSIFICATION + D3D10_INPUT_CLASSIFICATION +
    + + +

    Input data is per-vertex data.

    +
    + + bb205315 + D3D10_INPUT_PER_VERTEX_DATA + D3D10_INPUT_PER_VERTEX_DATA +
    + + +

    Input data is per-instance data.

    +
    + + bb205315 + D3D10_INPUT_PER_INSTANCE_DATA + D3D10_INPUT_PER_INSTANCE_DATA +
    + + +

    Specifies how the CPU should respond when Map is called on a resource being used by the GPU.

    +
    + +

    This enumeration is used by , , , and .

    cannot be used with or D3D10_MAP_WRITE_NOOVERWRITE.

    For more information about potential conflicts between the GPU and CPU during resource mapping, see Copying and Accessing Resource Data (Direct3D 10).

    +
    + + bb205321 + D3D10_MAP_FLAG + D3D10_MAP_FLAG +
    + + +

    Specifies that Map should return when the GPU blocks the CPU from accessing a resource.

    +
    + + bb205321 + D3D10_MAP_FLAG_DO_NOT_WAIT + D3D10_MAP_FLAG_DO_NOT_WAIT +
    + + + None. + + + None + None + + + +

    Identifies a resource to be accessed for reading and writing by the CPU. Applications may combine one or more of these flags.

    +
    + +

    This enumeration is used in , , , and .

    These remarks are divided into the following topics:

    • Meaning
    • Common
    +
    + + bb205318 + D3D10_MAP + D3D10_MAP +
    + + +

    Resource is mapped for reading. The resource must have been created with read access (see ).

    +
    + + bb205318 + D3D10_MAP_READ + D3D10_MAP_READ +
    + + +

    Resource is mapped for writing. The resource must have been created with write access (see ).

    +
    + + bb205318 + D3D10_MAP_WRITE + D3D10_MAP_WRITE +
    + + +

    Resource is mapped for reading and writing. The resource must have been created with read and write access (see and ).

    +
    + + bb205318 + D3D10_MAP_READ_WRITE + D3D10_MAP_READ_WRITE +
    + + +

    Resource is mapped for writing; the previous contents of the resource will be undefined. The resource must have been created with write access (see ).

    +
    + + bb205318 + D3D10_MAP_WRITE_DISCARD + D3D10_MAP_WRITE_DISCARD +
    + + +

    Resource is mapped for writing; the existing contents of the resource cannot be overwritten (see Remarks). This flag is only valid on vertex and index buffers. The resource must have been created with write access (see ). Cannot be used on a resource created with the flag.

    +
    + + bb205318 + D3D10_MAP_WRITE_NO_OVERWRITE + D3D10_MAP_WRITE_NO_OVERWRITE +
    + + +

    Specifies which pieces of mesh data to discard from the device. Used with .

    +
    + + bb172700 + D3DX10_MESH_DISCARD_FLAGS + D3DX10_MESH_DISCARD_FLAGS +
    + + + No documentation. + + + bb172700 + D3DX10_MESH_DISCARD_ATTRIBUTE_BUFFER + D3DX10_MESH_DISCARD_ATTRIBUTE_BUFFER + + + + No documentation. + + + bb172700 + D3DX10_MESH_DISCARD_ATTRIBUTE_TABLE + D3DX10_MESH_DISCARD_ATTRIBUTE_TABLE + + + + No documentation. + + + bb172700 + D3DX10_MESH_DISCARD_POINTREPS + D3DX10_MESH_DISCARD_POINTREPS + + + + No documentation. + + + bb172700 + D3DX10_MESH_DISCARD_ADJACENCY + D3DX10_MESH_DISCARD_ADJACENCY + + + + No documentation. + + + bb172700 + D3DX10_MESH_DISCARD_DEVICE_BUFFERS + D3DX10_MESH_DISCARD_DEVICE_BUFFERS + + + +

    Flags used to specify creation options for a mesh.

    +
    + +

    A 32-bit mesh (D3DXMESH_32BIT) can theoretically support (232)-1 faces and vertices. However, allocating memory for a mesh that large on a 32-bit operating system is not practical.

    +
    + + bb172698 + _D3DX10_MESH + _D3DX10_MESH +
    + + +

    The mesh has 32-bit indices instead of 16-bit indices. See Remarks.

    +
    + + bb172698 + D3DX10_MESH_32_BIT + D3DX10_MESH_32_BIT +
    + + +

    Signals that the mesh contains geometry shader adjacency data.

    +
    + + bb172698 + D3DX10_MESH_GS_ADJACENCY + D3DX10_MESH_GS_ADJACENCY +
    + + + None. + + + None + None + + + +

    Specifies the type of mesh optimization to be performed.

    +
    + +

    The D3DXMESHOPT_STRIPREORDER and D3DXMESHOPT_VERTEXCACHE optimization flags are mutually exclusive.

    The D3DXMESHOPT_SHAREVB flag has been removed from this enumeration. Use D3DXMESH_VB_SHARE instead, in D3DXMESH.

    +
    + + bb172699 + _D3DX10_MESHOPT + _D3DX10_MESHOPT +
    + + +

    Reorders faces to remove unused vertices and faces.

    +
    + + bb172699 + D3DX10_MESHOPT_COMPACT + D3DX10_MESHOPT_COMPACT +
    + + +

    Reorders faces to optimize for fewer attribute bundle state changes and enhanced DrawSubset performance.

    +
    + + bb172699 + D3DX10_MESHOPT_ATTR_SORT + D3DX10_MESHOPT_ATTR_SORT +
    + + +

    Reorders faces to increase the cache hit rate of vertex caches.

    +
    + + bb172699 + D3DX10_MESHOPT_VERTEX_CACHE + D3DX10_MESHOPT_VERTEX_CACHE +
    + + +

    Reorders faces to maximize length of adjacent triangles.

    +
    + + bb172699 + D3DX10_MESHOPT_STRIP_REORDER + D3DX10_MESHOPT_STRIP_REORDER +
    + + +

    Optimize the faces only; do not optimize the vertices.

    +
    + + bb172699 + D3DX10_MESHOPT_IGNORE_VERTS + D3DX10_MESHOPT_IGNORE_VERTS +
    + + +

    While attribute sorting, do not split vertices that are shared between attribute groups.

    +
    + + bb172699 + D3DX10_MESHOPT_DO_NOT_SPLIT + D3DX10_MESHOPT_DO_NOT_SPLIT +
    + + +

    Affects the vertex cache size. Using this flag specifies a default vertex cache size that works well on legacy hardware.

    +
    + + bb172699 + D3DX10_MESHOPT_DEVICE_INDEPENDENT + D3DX10_MESHOPT_DEVICE_INDEPENDENT +
    + + +

    Categories of debug messages. This will identify the category of a message when retrieving a message with and when adding a message with . When creating an info queue filter, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters.

    +
    + +

    This is part of the Information Queue feature. See Interface.

    +
    + + bb205323 + D3D10_MESSAGE_CATEGORY + D3D10_MESSAGE_CATEGORY +
    + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_APPLICATION_DEFINED + D3D10_MESSAGE_CATEGORY_APPLICATION_DEFINED + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_MISCELLANEOUS + D3D10_MESSAGE_CATEGORY_MISCELLANEOUS + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_INITIALIZATION + D3D10_MESSAGE_CATEGORY_INITIALIZATION + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_CLEANUP + D3D10_MESSAGE_CATEGORY_CLEANUP + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_COMPILATION + D3D10_MESSAGE_CATEGORY_COMPILATION + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_STATE_CREATION + D3D10_MESSAGE_CATEGORY_STATE_CREATION + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_STATE_SETTING + D3D10_MESSAGE_CATEGORY_STATE_SETTING + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_STATE_GETTING + D3D10_MESSAGE_CATEGORY_STATE_GETTING + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + D3D10_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_EXECUTION + D3D10_MESSAGE_CATEGORY_EXECUTION + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY_SHADER + D3D10_MESSAGE_CATEGORY_SHADER + + + +

    Debug messages for setting up an info-queue filter (see ); use these messages to allow or deny message categories to pass through the storage and retrieval filters. These IDs are used by methods such as or .

    +
    + + bb205324 + D3D10_MESSAGE_ID + D3D10_MESSAGE_ID +
    + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_UNKNOWN + D3D10_MESSAGE_ID_UNKNOWN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD + D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD + D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD + D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD + D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD + D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD + D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD + D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD + D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD + D3D10_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD + D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_STRING_FROM_APPLICATION + D3D10_MESSAGE_ID_STRING_FROM_APPLICATION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_THIS + D3D10_MESSAGE_ID_CORRUPTED_THIS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER1 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER1 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER2 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER2 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER3 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER3 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER4 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER4 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER5 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER5 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER6 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER6 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER7 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER7 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER8 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER8 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER9 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER9 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER10 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER10 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER11 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER11 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER12 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER12 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER13 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER13 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER14 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER14 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER15 + D3D10_MESSAGE_ID_CORRUPTED_PARAMETER15 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CORRUPTED_MULTITHREADING + D3D10_MESSAGE_ID_CORRUPTED_MULTITHREADING + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY + D3D10_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT + D3D10_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_GETPRIVATEDATA_MOREDATA + D3D10_MESSAGE_ID_GETPRIVATEDATA_MOREDATA + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA + D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN + D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS + D3D10_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS + D3D10_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY + D3D10_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT + D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE + D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS + D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS + D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS + D3D10_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_NULLDESC + D3D10_MESSAGE_ID_CREATEBUFFER_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS + D3D10_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION + D3D10_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN + D3D10_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_NULLDESC + D3D10_MESSAGE_ID_CREATETEXTURE1D_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION + D3D10_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN + D3D10_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_NULLDESC + D3D10_MESSAGE_ID_CREATETEXTURE2D_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION + D3D10_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN + D3D10_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_NULLDESC + D3D10_MESSAGE_ID_CREATETEXTURE3D_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION + D3D10_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY + D3D10_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE + D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE + D3D10_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY + D3D10_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE + D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE + D3D10_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK + D3D10_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS + D3D10_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY + D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS + D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG + D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC + D3D10_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED + D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED + D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER + D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE + D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER + D3D10_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID + D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE + D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED + D3D10_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY + D3D10_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER + D3D10_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY + D3D10_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER + D3D10_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER + D3D10_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED + D3D10_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY + D3D10_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER + D3D10_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT + D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR + D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH + D3D10_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH + D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID + D3D10_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY + D3D10_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY + D3D10_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY + D3D10_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY + D3D10_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY + D3D10_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY + D3D10_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID + D3D10_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE + D3D10_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE + D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE + D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE + D3D10_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE + D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX + D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE + D3D10_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID + D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID + D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID + D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID + D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID + D3D10_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE + D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS + D3D10_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED + D3D10_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN + D3D10_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED + D3D10_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE + D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE + D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS + D3D10_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED + D3D10_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN + D3D10_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE + D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED + D3D10_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE + D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE + D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS + D3D10_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED + D3D10_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN + D3D10_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE + D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED + D3D10_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE + D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE + D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS + D3D10_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED + D3D10_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN + D3D10_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE + D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED + D3D10_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED + D3D10_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED + D3D10_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS + D3D10_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN + D3D10_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN + D3D10_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE + D3D10_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_REF_THREADING_MODE + D3D10_MESSAGE_ID_REF_THREADING_MODE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_REF_UMDRIVER_EXCEPTION + D3D10_MESSAGE_ID_REF_UMDRIVER_EXCEPTION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_REF_KMDRIVER_EXCEPTION + D3D10_MESSAGE_ID_REF_KMDRIVER_EXCEPTION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_REF_HARDWARE_EXCEPTION + D3D10_MESSAGE_ID_REF_HARDWARE_EXCEPTION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE + D3D10_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER + D3D10_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_REF_OUT_OF_MEMORY + D3D10_MESSAGE_ID_REF_OUT_OF_MEMORY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_REF_INFO + D3D10_MESSAGE_ID_REF_INFO + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW + D3D10_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW + D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW + D3D10_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW + D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW + D3D10_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS + D3D10_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET + D3D10_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET + D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL + D3D10_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET + D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET + D3D10_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH + D3D10_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET + D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID + D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL + D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH + D3D10_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT + D3D10_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET + D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED + D3D10_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY + D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED + D3D10_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED + D3D10_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED + D3D10_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE + D3D10_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER + D3D10_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING + D3D10_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 + D3D10_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT + D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT + D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT + D3D10_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN + D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN + D3D10_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET + D3D10_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC + D3D10_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH + D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW + D3D10_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS + D3D10_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH + D3D10_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY + D3D10_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY + D3D10_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER + D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED + D3D10_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + D3D10_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN + D3D10_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN + D3D10_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATECOUNTER_NULLDESC + D3D10_MESSAGE_ID_CREATECOUNTER_NULLDESC + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER + D3D10_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + D3D10_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE + D3D10_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED + D3D10_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION + D3D10_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_QUERY_BEGIN_DUPLICATE + D3D10_MESSAGE_ID_QUERY_BEGIN_DUPLICATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + D3D10_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION + D3D10_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS + D3D10_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN + D3D10_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE + D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS + D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL + D3D10_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH + D3D10_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN + D3D10_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE + D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE + D3D10_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH + D3D10_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_OBJECT_SUMMARY + D3D10_MESSAGE_ID_LIVE_OBJECT_SUMMARY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_BUFFER + D3D10_MESSAGE_ID_LIVE_BUFFER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_TEXTURE1D + D3D10_MESSAGE_ID_LIVE_TEXTURE1D + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_TEXTURE2D + D3D10_MESSAGE_ID_LIVE_TEXTURE2D + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_TEXTURE3D + D3D10_MESSAGE_ID_LIVE_TEXTURE3D + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW + D3D10_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_RENDERTARGETVIEW + D3D10_MESSAGE_ID_LIVE_RENDERTARGETVIEW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW + D3D10_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_VERTEXSHADER + D3D10_MESSAGE_ID_LIVE_VERTEXSHADER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_GEOMETRYSHADER + D3D10_MESSAGE_ID_LIVE_GEOMETRYSHADER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_PIXELSHADER + D3D10_MESSAGE_ID_LIVE_PIXELSHADER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_INPUTLAYOUT + D3D10_MESSAGE_ID_LIVE_INPUTLAYOUT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_SAMPLER + D3D10_MESSAGE_ID_LIVE_SAMPLER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_BLENDSTATE + D3D10_MESSAGE_ID_LIVE_BLENDSTATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE + D3D10_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_RASTERIZERSTATE + D3D10_MESSAGE_ID_LIVE_RASTERIZERSTATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_QUERY + D3D10_MESSAGE_ID_LIVE_QUERY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_PREDICATE + D3D10_MESSAGE_ID_LIVE_PREDICATE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_COUNTER + D3D10_MESSAGE_ID_LIVE_COUNTER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_DEVICE + D3D10_MESSAGE_ID_LIVE_DEVICE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_LIVE_SWAPCHAIN + D3D10_MESSAGE_ID_LIVE_SWAPCHAIN + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_D3D10_MESSAGES_END + D3D10_MESSAGE_ID_D3D10_MESSAGES_END + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_D3D10L9_MESSAGES_START + D3D10_MESSAGE_ID_D3D10L9_MESSAGES_START + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED + D3D10_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED + D3D10_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS + D3D10_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS + D3D10_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS + D3D10_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND + D3D10_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D + D3D10_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE + D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE + D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS + D3D10_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS + D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX + D3D10_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS + D3D10_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED + D3D10_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS + D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY + D3D10_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK + D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK + D3D10_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT + D3D10_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE + D3D10_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE + D3D10_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES + D3D10_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET + D3D10_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER + D3D10_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE + D3D10_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE + D3D10_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT + D3D10_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS + D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES + D3D10_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED + D3D10_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED + D3D10_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED + D3D10_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED + D3D10_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED + D3D10_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND + D3D10_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED + D3D10_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED + D3D10_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 + D3D10_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED + D3D10_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO + D3D10_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION + D3D10_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED + D3D10_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR + D3D10_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA + D3D10_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP + D3D10_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED + D3D10_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT + D3D10_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES + D3D10_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES + + + + No documentation. + + + bb205324 + D3D10_MESSAGE_ID_D3D10L9_MESSAGES_END + D3D10_MESSAGE_ID_D3D10L9_MESSAGES_END + + + +

    Debug message severity levels for an information queue.

    +
    + +

    Use these values to allow or deny message categories to pass through the storage and retrieval filters for an information queue (see ). This API is used by .

    +
    + + bb205325 + D3D10_MESSAGE_SEVERITY + D3D10_MESSAGE_SEVERITY +
    + + +

    Defines some type of corruption which has occurred.

    +
    + + bb205325 + D3D10_MESSAGE_SEVERITY_CORRUPTION + D3D10_MESSAGE_SEVERITY_CORRUPTION +
    + + +

    Defines an error message.

    +
    + + bb205325 + D3D10_MESSAGE_SEVERITY_ERROR + D3D10_MESSAGE_SEVERITY_ERROR +
    + + +

    Defines a warning message.

    +
    + + bb205325 + D3D10_MESSAGE_SEVERITY_WARNING + D3D10_MESSAGE_SEVERITY_WARNING +
    + + +

    Defines an information message.

    +
    + + bb205325 + D3D10_MESSAGE_SEVERITY_INFO + D3D10_MESSAGE_SEVERITY_INFO +
    + + + No documentation. + + + bb205325 + D3D10_MESSAGE_SEVERITY_MESSAGE + D3D10_MESSAGE_SEVERITY_MESSAGE + + + +

    These flags are used to control how generates normal maps. Any number of these flags may be OR'd together in any combination.

    +
    + + bb172701 + D3DX10_NORMALMAP_FLAG + D3DX10_NORMALMAP_FLAG +
    + + + No documentation. + + + bb172701 + D3DX10_NORMALMAP_MIRROR_U + D3DX10_NORMALMAP_MIRROR_U + + + + No documentation. + + + bb172701 + D3DX10_NORMALMAP_MIRROR_V + D3DX10_NORMALMAP_MIRROR_V + + + + No documentation. + + + bb172701 + D3DX10_NORMALMAP_MIRROR + D3DX10_NORMALMAP_MIRROR + + + + No documentation. + + + bb172701 + D3DX10_NORMALMAP_INVERTSIGN + D3DX10_NORMALMAP_INVERTSIGN + + + + No documentation. + + + bb172701 + D3DX10_NORMALMAP_COMPUTE_OCCLUSION + D3DX10_NORMALMAP_COMPUTE_OCCLUSION + + + +

    Flags that describe miscellaneous query behavior.

    +
    + +

    This flag is part of a query description (see ).

    +
    + + bb172406 + D3D10_QUERY_MISC_FLAG + D3D10_QUERY_MISC_FLAG +
    + + +

    Tell the hardware that if it is not yet sure if something is hidden or not to draw it anyway. This is only used with an occlusion predicate. Predication data cannot be returned to your application via when using this flag.

    +
    + + bb172406 + D3D10_QUERY_MISC_PREDICATEHINT + D3D10_QUERY_MISC_PREDICATEHINT +
    + + + None. + + + None + None + + + +

    Query types.

    +
    + + bb205335 + D3D10_QUERY + D3D10_QUERY +
    + + +

    Determines whether or not the GPU is finished processing commands. When the GPU is finished processing commands GetData will return , and pData will point to a with a value of TRUE. When using this type of query, Begin is disabled.

    +
    + + bb205335 + D3D10_QUERY_EVENT + D3D10_QUERY_EVENT +
    + + +

    Get the number of samples that passed the depth and stencil tests in between Begin and End. GetData returns a UINT64. If a depth or stencil test is disabled, then each of those tests will be counted as a pass.

    +
    + + bb205335 + D3D10_QUERY_OCCLUSION + D3D10_QUERY_OCCLUSION +
    + + +

    Get a timestamp value where GetData returns a UINT64. This kind of query is only useful if two timestamp queries are done in the middle of a query. The difference of two timestamps can be used to determine how many ticks have elapsed, and the query will determine if that difference is a reliable value and also has a value that shows how to convert the number of ticks into seconds. See . When using this type of query, Begin is disabled.

    +
    + + bb205335 + D3D10_QUERY_TIMESTAMP + D3D10_QUERY_TIMESTAMP +
    + + +

    Determines whether or not a is returning reliable values, and also gives the frequency of the processor enabling you to convert the number of elapsed ticks into seconds. GetData will return a . This type of query should only be invoked once per frame or less.

    +
    + + bb205335 + D3D10_QUERY_TIMESTAMP_DISJOINT + D3D10_QUERY_TIMESTAMP_DISJOINT +
    + + +

    Get pipeline statistics, such as the number of pixel shader invocations in between Begin and End. GetData will return a .

    +
    + + bb205335 + D3D10_QUERY_PIPELINE_STATISTICS + D3D10_QUERY_PIPELINE_STATISTICS +
    + + +

    Similar to , except GetData returns a indicating whether or not any samples passed the depth and stencil tests - TRUE meaning at least one passed, meaning none passed.

    +
    + + bb205335 + D3D10_QUERY_OCCLUSION_PREDICATE + D3D10_QUERY_OCCLUSION_PREDICATE +
    + + +

    Get streaming output statistics, such as the number of primitives streamed out in between Begin and End. GetData will return a structure.

    +
    + + bb205335 + D3D10_QUERY_SO_STATISTICS + D3D10_QUERY_SO_STATISTICS +
    + + +

    Determines whether or not any of the streaming output buffers overflowed in between Begin and End. GetData returns a - TRUE meaning there was an overflow, meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an SO_STATISTICS query so that when an overflow occurs the SO_STATISTIC query will let the application know how much memory was needed to prevent an overflow.

    +
    + + bb205335 + D3D10_QUERY_SO_OVERFLOW_PREDICATE + D3D10_QUERY_SO_OVERFLOW_PREDICATE +
    + + +

    Specifies how to access a resource used in a render-target view.

    +
    + +

    This enumeration is used in to create a render-target view.

    +
    + + bb172414 + D3D10_RTV_DIMENSION + D3D10_RTV_DIMENSION +
    + + + No documentation. + + + bb172414 + D3D10_RTV_DIMENSION_UNKNOWN + D3D10_RTV_DIMENSION_UNKNOWN + + + + No documentation. + + + bb172414 + D3D10_RTV_DIMENSION_BUFFER + D3D10_RTV_DIMENSION_BUFFER + + + + No documentation. + + + bb172414 + D3D10_RTV_DIMENSION_TEXTURE1D + D3D10_RTV_DIMENSION_TEXTURE1D + + + + No documentation. + + + bb172414 + D3D10_RTV_DIMENSION_TEXTURE1DARRAY + D3D10_RTV_DIMENSION_TEXTURE1DARRAY + + + + No documentation. + + + bb172414 + D3D10_RTV_DIMENSION_TEXTURE2D + D3D10_RTV_DIMENSION_TEXTURE2D + + + + No documentation. + + + bb172414 + D3D10_RTV_DIMENSION_TEXTURE2DARRAY + D3D10_RTV_DIMENSION_TEXTURE2DARRAY + + + + No documentation. + + + bb172414 + D3D10_RTV_DIMENSION_TEXTURE2DMS + D3D10_RTV_DIMENSION_TEXTURE2DMS + + + + No documentation. + + + bb172414 + D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY + D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY + + + + No documentation. + + + bb172414 + D3D10_RTV_DIMENSION_TEXTURE3D + D3D10_RTV_DIMENSION_TEXTURE3D + + + +

    Identifies the type of resource being used.

    +
    + +

    This enumeration is used in , and .

    +
    + + bb172411 + D3D10_RESOURCE_DIMENSION + D3D10_RESOURCE_DIMENSION +
    + + + No documentation. + + + bb172411 + D3D10_RESOURCE_DIMENSION_UNKNOWN + D3D10_RESOURCE_DIMENSION_UNKNOWN + + + + No documentation. + + + bb172411 + D3D10_RESOURCE_DIMENSION_BUFFER + D3D10_RESOURCE_DIMENSION_BUFFER + + + + No documentation. + + + bb172411 + D3D10_RESOURCE_DIMENSION_TEXTURE1D + D3D10_RESOURCE_DIMENSION_TEXTURE1D + + + + No documentation. + + + bb172411 + D3D10_RESOURCE_DIMENSION_TEXTURE2D + D3D10_RESOURCE_DIMENSION_TEXTURE2D + + + + No documentation. + + + bb172411 + D3D10_RESOURCE_DIMENSION_TEXTURE3D + D3D10_RESOURCE_DIMENSION_TEXTURE3D + + + +

    Identifies other, less common options for resources.

    +
    + +

    This enumeration is used in , , , , , and .

    These flags can be combined by bitwise OR.

    and are mutually exclusive flags: either one may be set in the resource creation calls but not both simultaneously.

    +
    + + bb172412 + D3D10_RESOURCE_MISC_FLAG + D3D10_RESOURCE_MISC_FLAG +
    + + +

    Enables an application to call on a texture resource. The resource must be created with the bind flags that specify that the resource is a render target and a shader resource.

    +
    + + bb172412 + D3D10_RESOURCE_MISC_GENERATE_MIPS + D3D10_RESOURCE_MISC_GENERATE_MIPS +
    + + +

    Enables the sharing of resource data between two or more Direct3D devices. The only resources that can be shared are 2D non-mipmapped textures.

    WARP and REF devices do not support shared resources. Attempting to create a resource with this flag on either a WARP or REF device will cause the create method to return an E_OUTOFMEMORY error code.

    +
    + + bb172412 + D3D10_RESOURCE_MISC_SHARED + D3D10_RESOURCE_MISC_SHARED +
    + + +

    Enables an application to create a cube texture from a Texture2DArray that contains 6 textures.

    +
    + + bb172412 + D3D10_RESOURCE_MISC_TEXTURECUBE + D3D10_RESOURCE_MISC_TEXTURECUBE +
    + + +

    Enables the resource created to be synchronized using the and ReleaseSync APIs. The following resource creation D3D10 APIs, that all take a parameter, have been extended to support the new flag.

    • ID3D10Device1::CreateTexture1D
    • ID3D10Device1::CreateTexture2D
    • ID3D10Device1::CreateTexture3D
    • ID3D10Device1::CreateBuffer

    If any of the listed functions are called with the flag set, the interface returned can be queried for an interface, which implements AcquireSync and ReleaseSync APIs to synchronize access to the surface. The device creating the surface, and any other device opening the surface (using OpenSharedResource) is required to call before any rendering commands to the surface, and when it is done rendering.

    WARP and REF devices do not support shared resources. Attempting to create a resource with this flag on either a WARP or REF device will cause the create method to return an E_OUTOFMEMORY error code.

    +
    + + bb172412 + D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX + D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX +
    + + +

    Enables a surface to be used for GDI interoperability. Setting this flag enables rendering on the surface via .

    +
    + + bb172412 + D3D10_RESOURCE_MISC_GDI_COMPATIBLE + D3D10_RESOURCE_MISC_GDI_COMPATIBLE +
    + + + None. + + + None + None + + + +

    Identifies expected resource use during rendering. The usage directly reflects whether a resource is accessible by the CPU and/or the GPU.

    +
    + +

    An application identifies the way a resource is intended to be used (its usage) in a resource description. There are several structures for creating resources including: , , , , and .

    Differences between Direct3D 9 and Direct3D 10:

    In Direct3D 9, you specify the type of memory a resource should be created in at resource creation time (using D3DPOOL). It was an application's job to decide what memory pool would provide the best combination of functionality and performance.

    In Direct3D 10, an application no longer specifies what type of memory (the pool) to create a resource in. Instead, you specify the intended usage of the resource, and let the runtime (in concert with the driver and a memory manager) choose the type of memory that will achieve the best performance.

    ?

    +
    + + bb172499 + D3D10_USAGE + D3D10_USAGE +
    + + +

    A resource that requires read and write access by the GPU. This is likely to be the most common usage choice.

    +
    + + bb172499 + D3D10_USAGE_DEFAULT + D3D10_USAGE_DEFAULT +
    + + +

    A resource that can only be read by the GPU. It cannot be written by the GPU, and cannot be accessed at all by the CPU. This type of resource must be initialized when it is created, since it cannot be changed after creation.

    +
    + + bb172499 + D3D10_USAGE_IMMUTABLE + D3D10_USAGE_IMMUTABLE +
    + + +

    A resource that is accessible by both the GPU and the CPU (write only). A dynamic resource is a good choice for a resource that will be updated by the CPU at least once per frame. To write to a dynamic resource on the CPU, use a Map method. You can write to a dynamic resource on the GPU using CopyResource or CopySubresourceRegion.

    +
    + + bb172499 + D3D10_USAGE_DYNAMIC + D3D10_USAGE_DYNAMIC +
    + + +

    A resource that supports data transfer (copy) from the GPU to the CPU.

    +
    + + bb172499 + D3D10_USAGE_STAGING + D3D10_USAGE_STAGING +
    + + +

    Sprite flags that tell the sprite drawing API how to behave. These are passed into .

    +
    + +

    After a front-to-back or back-to-front sort is done, it will automatically do a secondary sort by texture. This is helpful for when there are many sprites with the same texture all on the same plane, such as when drawing the user interface in a game.

    +
    + + bb172704 + D3DX10_SPRITE_FLAG + D3DX10_SPRITE_FLAG +
    + + + No documentation. + + + bb172704 + D3DX10_SPRITE_SORT_TEXTURE + D3DX10_SPRITE_SORT_TEXTURE + + + + No documentation. + + + bb172704 + D3DX10_SPRITE_SORT_DEPTH_BACK_TO_FRONT + D3DX10_SPRITE_SORT_DEPTH_BACK_TO_FRONT + + + + No documentation. + + + bb172704 + D3DX10_SPRITE_SORT_DEPTH_FRONT_TO_BACK + D3DX10_SPRITE_SORT_DEPTH_FRONT_TO_BACK + + + + No documentation. + + + bb172704 + D3DX10_SPRITE_SAVE_STATE + D3DX10_SPRITE_SAVE_STATE + + + + No documentation. + + + bb172704 + D3DX10_SPRITE_ADDREF_TEXTURES + D3DX10_SPRITE_ADDREF_TEXTURES + + + + None. + + + None + None + + + +

    Describes multi-sampling parameters for a resource.

    +
    + +

    The default sampler mode, with no anti-aliasing, has a count of 1 and a quality level of 0.

    If multi-sample antialiasing is being used, all bound render targets and depth buffers must have the same sample counts and quality levels.

    Differences between Direct3D 10.0 and Direct3D 10.1 and between Direct3D 10.0 and Direct3D 11:

    Direct3D 10.1 has defined two standard quality levels: and in the enumeration in D3D10_1.h.

    Direct3D 11 has defined two standard quality levels: and in the enumeration in D3D11.h.

    ?

    +
    + + bb173072 + D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS + D3D10_STANDARD_MULTISAMPLE_QUALITY_LEVELS +
    + + +

    The number of multisamples per pixel.

    +
    + + bb173072 + D3D10_STANDARD_MULTISAMPLE_PATTERN + D3D10_STANDARD_MULTISAMPLE_PATTERN +
    + + +

    The image quality level. The higher the quality, the lower the performance. The valid range is between zero and one less than the level returned by for Direct3D 10 or for Direct3D 11.

    For Direct3D 10.1 and Direct3D 11, you can use two special quality level values. For more information about these quality level values, see Remarks.

    +
    + + bb173072 + D3D10_CENTER_MULTISAMPLE_PATTERN + D3D10_CENTER_MULTISAMPLE_PATTERN +
    + + +

    The stencil operations that can be performed during depth-stencil testing.

    +
    + + bb172455 + D3D10_STENCIL_OP + D3D10_STENCIL_OP +
    + + + No documentation. + + + bb172455 + D3D10_STENCIL_OP_KEEP + D3D10_STENCIL_OP_KEEP + + + + No documentation. + + + bb172455 + D3D10_STENCIL_OP_ZERO + D3D10_STENCIL_OP_ZERO + + + + No documentation. + + + bb172455 + D3D10_STENCIL_OP_REPLACE + D3D10_STENCIL_OP_REPLACE + + + + No documentation. + + + bb172455 + D3D10_STENCIL_OP_INCR_SAT + D3D10_STENCIL_OP_INCR_SAT + + + + No documentation. + + + bb172455 + D3D10_STENCIL_OP_DECR_SAT + D3D10_STENCIL_OP_DECR_SAT + + + + No documentation. + + + bb172455 + D3D10_STENCIL_OP_INVERT + D3D10_STENCIL_OP_INVERT + + + + No documentation. + + + bb172455 + D3D10_STENCIL_OP_INCR + D3D10_STENCIL_OP_INCR + + + + No documentation. + + + bb172455 + D3D10_STENCIL_OP_DECR + D3D10_STENCIL_OP_DECR + + + +

    Identify a technique for resolving texture coordinates that are outside of the boundaries of a texture.

    +
    + + bb172483 + D3D10_TEXTURE_ADDRESS_MODE + D3D10_TEXTURE_ADDRESS_MODE +
    + + +

    Tile the texture at every integer junction. For example, for u values between 0 and 3, the texture is repeated three times.

    +
    + + bb172483 + D3D10_TEXTURE_ADDRESS_WRAP + D3D10_TEXTURE_ADDRESS_WRAP +
    + + +

    Flip the texture at every integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on.

    +
    + + bb172483 + D3D10_TEXTURE_ADDRESS_MIRROR + D3D10_TEXTURE_ADDRESS_MIRROR +
    + + +

    Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively.

    +
    + + bb172483 + D3D10_TEXTURE_ADDRESS_CLAMP + D3D10_TEXTURE_ADDRESS_CLAMP +
    + + +

    Texture coordinates outside the range [0.0, 1.0] are set to the border color specified in or HLSL code.

    +
    + + bb172483 + D3D10_TEXTURE_ADDRESS_BORDER + D3D10_TEXTURE_ADDRESS_BORDER +
    + + +

    Similar to and . Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value.

    +
    + + bb172483 + D3D10_TEXTURE_ADDRESS_MIRROR_ONCE + D3D10_TEXTURE_ADDRESS_MIRROR_ONCE +
    + + +

    The different faces of a cube texture.

    +
    + + bb172482 + D3D10_TEXTURECUBE_FACE + D3D10_TEXTURECUBE_FACE +
    + + +

    Positive X face.

    +
    + + bb172482 + D3D10_TEXTURECUBE_FACE_POSITIVE_X + D3D10_TEXTURECUBE_FACE_POSITIVE_X +
    + + +

    Negative X face.

    +
    + + bb172482 + D3D10_TEXTURECUBE_FACE_NEGATIVE_X + D3D10_TEXTURECUBE_FACE_NEGATIVE_X +
    + + +

    Positive Y face.

    +
    + + bb172482 + D3D10_TEXTURECUBE_FACE_POSITIVE_Y + D3D10_TEXTURECUBE_FACE_POSITIVE_Y +
    + + +

    Negative Y face.

    +
    + + bb172482 + D3D10_TEXTURECUBE_FACE_NEGATIVE_Y + D3D10_TEXTURECUBE_FACE_NEGATIVE_Y +
    + + +

    Positive Z face.

    +
    + + bb172482 + D3D10_TEXTURECUBE_FACE_POSITIVE_Z + D3D10_TEXTURECUBE_FACE_POSITIVE_Z +
    + + +

    Negative Z face.

    +
    + + bb172482 + D3D10_TEXTURECUBE_FACE_NEGATIVE_Z + D3D10_TEXTURECUBE_FACE_NEGATIVE_Z +
    + + + Functions + + + + + Constant SdkVersion. + D3D10_SDK_VERSION + + + Constant SdkVersion1. + D3D10_1_SDK_VERSION + + + +

    Create a Direct3D 10.1 device and a swap chain.

    +
    +

    Pointer to a .

    +

    The type of driver for the device. See .

    +

    A handle to the DLL that implements a software rasterizer. Must be null if DriverType is non-software. The HMODULE of a DLL can be obtained with LoadLibrary, LoadLibraryEx, or GetModuleHandle.

    +

    Optional. Device creation flags (see ) that enable API layers. These flags can be bitwise OR'd together.

    +

    The version of hardware that is available for acceleration (see ).

    +

    Bit flag that indicates the version of the SDK. Should be , defined in D3D10.h.

    +

    Description of the swap chain. See .

    +

    Address of a reference to an .

    +

    Address of a reference to an Interface that will receive the newly created device.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    To create a device without creating a swap chain, see .

    This method requires Windows Vista Service Pack 1, Windows Server 2008, or later release of Windows.

    Note??If you call this API in a Session 0 process, it returns .

    +
    + + bb694527 + HRESULT D3D10CreateDeviceAndSwapChain1([In, Optional] IDXGIAdapter* pAdapter,[In] D3D10_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D10_CREATE_DEVICE_FLAG Flags,[In] D3D10_FEATURE_LEVEL1 HardwareLevel,[In] unsigned int SDKVersion,[In] DXGI_SWAP_CHAIN_DESC* pSwapChainDesc,[Out] IDXGISwapChain** ppSwapChain,[Out] ID3D10Device1** ppDevice) + D3D10CreateDeviceAndSwapChain1 +
    + + +

    Create a Direct3D 10.1 device that represents the display adapter.

    +
    +

    Pointer to the display adapter (see ) when creating a hardware device; otherwise set this parameter to null. If null is specified when creating a hardware device, Direct3D will use the first adapter enumerated by EnumAdapters.

    +

    The device-driver type (see ). The driver type determines the type of device you will create.

    +

    This is set to null except for driver types.

    +

    Optional. Device creation flags (see ) that enable API layers. These flags can be bitwise OR'd together.

    +

    The version of hardware that is available for acceleration (see ).

    +

    Bit flag that indicates the version of the SDK. Should be , defined in D3D10.h.

    +

    Address of a reference to the device created (see Interface).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    To create a device and a swap chain at the same time, see .

    This method requires Windows Vista Service Pack 1, Windows Server 2008, or later release of Windows.

    The object returned by implements the interface and can be queried for other interfaces the object supports. To retrieve the interface of the object the following code could be used.

      * pDXGIDevice;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice); 
    +
    + + bb694526 + HRESULT D3D10CreateDevice1([In, Optional] IDXGIAdapter* pAdapter,[In] D3D10_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D10_CREATE_DEVICE_FLAG Flags,[In] D3D10_FEATURE_LEVEL1 HardwareLevel,[In] unsigned int SDKVersion,[Out, Fast] ID3D10Device1** ppDevice) + D3D10CreateDevice1 +
    + + +

    Create a Direct3D 10.0 device and a swap chain.

    +
    +

    Pointer to a .

    +

    The type of driver for the device. See .

    +

    A handle to the DLL that implements a software rasterizer. Must be null if DriverType is non-software. The HMODULE of a DLL can be obtained with LoadLibrary, LoadLibraryEx, or GetModuleHandle.

    +

    Optional. Device creation flags (see ) that enable API layers. These flags can be bitwise OR'd together.

    +

    Bit flag that indicates the version of the SDK. Should be , defined in d3d10.h.

    +

    Description of the swap chain. See .

    +

    Address of a reference to an .

    +

    Address of a reference to an Interface that will receive the newly created device.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    To create a device without creating a swap chain, see .

    Note??If you call this API in a Session 0 process, it returns .

    +
    + + bb205087 + HRESULT D3D10CreateDeviceAndSwapChain([In, Optional] IDXGIAdapter* pAdapter,[In] D3D10_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D10_CREATE_DEVICE_FLAG Flags,[In] unsigned int SDKVersion,[In] DXGI_SWAP_CHAIN_DESC* pSwapChainDesc,[Out] IDXGISwapChain** ppSwapChain,[Out] ID3D10Device** ppDevice) + D3D10CreateDeviceAndSwapChain +
    + + +

    Create a Direct3D 10.0 device that represents the display adapter.

    +
    +

    Pointer to the display adapter (see ) when creating a hardware device; otherwise set this parameter to null. If null is specified when creating a hardware device, Direct3D will use the first adapter enumerated by EnumAdapters.

    +

    The device-driver type (see ). The driver type determines the type of device you will create.

    +

    Reserved. Set to null.

    +

    Optional. Device creation flags (see ) that enable API layers. These flags can be bitwise OR'd together.

    +

    Bit flag that indicates the version of the SDK. Should always be .

    +

    Address of a reference to the device created (see Interface).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    This example creates a reference device.

     * g_pd3dDevice = null;	
    +            ( null, , null, 0,  , &g_pd3dDevice );              

    To create a device and a swap chain at the same time, see .

    The object returned by implements the interface and can be queried for other interfaces the object supports. To retrieve the interface of the object the following code could be used.

      * pDXGIDevice;	
    +            hr = g_pd3dDevice->QueryInterface(__uuidof(), (void **)&pDXGIDevice); 
    +
    + + bb205086 + HRESULT D3D10CreateDevice([In, Optional] IDXGIAdapter* pAdapter,[In] D3D10_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D10_CREATE_DEVICE_FLAG Flags,[In] unsigned int SDKVersion,[Out, Fast] ID3D10Device** ppDevice) + D3D10CreateDevice +
    + + +

    Get the vertex shader profile best suited to a given device.

    +
    + No documentation. +

    The shader profile.

    + + bb205099 + const char* D3D10GetVertexShaderProfile([In] ID3D10Device* pDevice) + D3D10GetVertexShaderProfile +
    + + +

    Get the pixel shader profile best suited to a given device.

    +
    + No documentation. +

    The shader profile.

    + + bb205097 + const char* D3D10GetPixelShaderProfile([In] ID3D10Device* pDevice) + D3D10GetPixelShaderProfile +
    + + +

    Get the geometry shader profile best suited to a given device.

    +
    + No documentation. +

    The shader profile.

    + + bb205093 + const char* D3D10GetGeometryShaderProfile([In] ID3D10Device* pDevice) + D3D10GetGeometryShaderProfile +
    + + +

    Create an effect pool (or shared memory location), to enable sharing variables between effects.

    +
    +

    A reference to a compiled effect.

    +

    Length of pData.

    +

    Effect compile options.

    +

    A reference to the device (see Interface).

    +

    A reference to the Interface that contains the effect pool.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    A pool is a shared location in memory. Effect variables that are located in a pool can be updated once, and the effect system will take care of updating each effect that uses that variable. To pool an effect variable, tell the effect to locate the variable in a pool when the effect is created, using a helper function such as .

    For help compiling an effect, see Compile an Effect (Direct3D 10).

    +
    + + bb205089 + HRESULT D3D10CreateEffectPoolFromMemory([In, Buffer] void* pData,[In] SIZE_T DataLength,[In] unsigned int FXFlags,[In] ID3D10Device* pDevice,[Out, Fast] ID3D10EffectPool** ppEffectPool) + D3D10CreateEffectPoolFromMemory +
    + + +

    Creates an from a buffer containing a compiled effect.

    +
    +

    A reference to a compiled effect.

    +

    Length of pData.

    +

    Effect compile options.

    +

    A reference to the device (see Interface).

    +

    Optional. A reference to an memory space for effect variables that are shared across effects (see Interface).

    +

    A reference to an Interface which contains the created effect.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    This method is used to create an Interface object from an effect that has been compiled before runtime and loaded into memory. For help precompiling an effect, see Offline Compiling. To load and compile an ASCII .fx file see Compile an Effect (Direct3D 10).

    +
    + + bb205088 + HRESULT D3D10CreateEffectFromMemory([In, Buffer] void* pData,[In] SIZE_T DataLength,[In] unsigned int FXFlags,[In] ID3D10Device* pDevice,[In, Optional] ID3D10EffectPool* pEffectPool,[Out, Fast] ID3D10Effect** ppEffect) + D3D10CreateEffectFromMemory +
    + + +

    Create a state block.

    +
    +

    The device for which the state block will be created.

    +

    Indicates which parts of the device state will be captured when calling and reapplied when calling . See remarks.

    +

    Address of a reference to the buffer created (see Interface).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    A state block is a collection of device state, and is used for saving and restoring device state. Use a state-block mask to enable subsets of state for saving and restoring.

    The structure can be filled manually or by using any of the D3D10StateBlockMaskXXX APIs. A state block mask can also be obtained by calling or .

    Differences between Direct3D 9 and Direct3D 10:

    In Direct3D 10, a state block object does not contain any valid information about the state of the device until is called. In Direct3D 9, state is saved in a state block object, when it is created.

    ?

    +
    + + bb205090 + HRESULT D3D10CreateStateBlock([In] ID3D10Device* pDevice,[In] D3D10_STATE_BLOCK_MASK* pStateBlockMask,[Out, Fast] ID3D10StateBlock** ppStateBlock) + D3D10CreateStateBlock +
    + + +

    Compile an effect. +

    Note??Use D3DX10CompileFromMemory instead of this function.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    This function uses the version of the HLSL compiler released in the November 2006 DirectX SDK.

    For an example, see Compile an Effect (Direct3D 10).

    +
    + + bb205083 + HRESULT D3D10CompileEffectFromMemory([In, Buffer] void* pData,[In] SIZE_T DataLength,[In] const char* pSrcFileName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In, Optional] ID3DInclude* pInclude,[In] D3DCOMPILE_SHADER_FLAGS HLSLFlags,[In] D3DCOMPILE_EFFECT_FLAGS FXFlags,[Out] ID3D10Blob** ppCompiledEffect,[Out, Optional] ID3D10Blob** ppErrors) + D3D10CompileEffectFromMemory +
    + + + Functions + + + + + +

    Creates a font object for a device and font.

    Note??Instead of using this function, we recommend that you use DirectWrite and the DirectXTK library, SpriteFont class.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to D3DXCreateFontW. Otherwise, the function call resolves to D3DXCreateFontA because ANSI strings are being used.

    If you want more information about font parameters, see The Logical Font.

    +
    + + bb172664 + HRESULT D3DX10CreateFontW([In] ID3D10Device* pDevice,[In] int Height,[In] unsigned int Width,[In] unsigned int Weight,[In] unsigned int MipLevels,[In] BOOL Italic,[In] unsigned int CharSet,[In] unsigned int OutputPrecision,[In] unsigned int Quality,[In] unsigned int PitchAndFamily,[In] const wchar_t* pFaceName,[Out, Fast] ID3DX10Font** ppFont) + D3DX10CreateFontW +
    + + +

    Creates a font object.

    Note??Instead of using this function, we recommend that you use DirectWrite and the DirectXTK library, SpriteFont class.

    +
    + No documentation. + No documentation. + No documentation. +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172665 + HRESULT D3DX10CreateFontIndirectW([In] ID3D10Device* pDevice,[In] const D3DX10_FONT_DESCW* pDesc,[Out, Fast] ID3DX10Font** ppFont) + D3DX10CreateFontIndirectW +
    + + +

    Create a sprite for drawing a 2D texture.

    Note??Instead of using this function, we recommend that you use Direct2D and the DirectXTK library, SpriteBatch class.

    +
    + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: D3DERR_INVALIDCALL, E_OUTOFMEMORY.

    + + bb172670 + HRESULT D3DX10CreateSprite([In] ID3D10Device* pDevice,[In] unsigned int cDeviceBufferSize,[Out, Fast] ID3DX10Sprite** ppSprite) + D3DX10CreateSprite +
    + + +

    Create the best Direct3D device and a swap chain.

    +
    +

    Pointer to a .

    +

    The type of driver for the device. See .

    +

    A handle to the DLL that implements a software rasterizer. Must be null if DriverType is non-software. The HMODULE of a DLL can be obtained with LoadLibrary, LoadLibraryEx, or GetModuleHandle.

    +

    Optional. Device creation flags (see ) that enable API layers. These flags can be bitwise OR'd together.

    +

    Description of the swap chain. See .

    +

    Address of a reference to an .

    +

    Address of a reference to an Interface that will receive the newly created device.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    To create the best device, this method implements more than one device creation option. First, the method attempts to create a 10.1 device (and swap chain). If that fails, the method attempts to create a 10.0 device. If that fails, the method will fail. If your application needs to create only a 10.1 device, or a 10.0 device only, use these APIs instead:

    • Use to create a Direct3D 10.0 (only) device and swap chain.
    • Use to create a Direct3D 10.1 (only) device and swap chain.

    This method requires Windows Vista Service Pack 1.

    +
    + + bb694538 + HRESULT D3DX10CreateDeviceAndSwapChain([In] IDXGIAdapter* pAdapter,[In] D3D10_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] unsigned int Flags,[In] DXGI_SWAP_CHAIN_DESC* pSwapChainDesc,[In] IDXGISwapChain** ppSwapChain,[In] ID3D10Device** ppDevice) + D3DX10CreateDeviceAndSwapChain +
    + + +

    Verify that the version of D3DX you compiled with is the version that you are running.

    +
    +

    Use . See remarks.

    +

    Use D3DX10_SDK_VERSION. See remarks.

    +

    If the version doesn't match, the function will return (a number less than or equal to 0, the number itself has no meaning).

    + +

    Use this function during the initialization of your application.

      hr; if( FAILED( (, D3DX10_SDK_VERSION) ) ) return E_FAIL;	
    +            
    +
    + + bb172639 + HRESULT D3DX10CheckVersion([In] unsigned int D3DSdkVersion,[In] unsigned int D3DX10SdkVersion) + D3DX10CheckVersion +
    + + +

    Create the best Direct3D 10 device that represents the display adapter. If a Direct3D 10.1-compatible device can be created, it will be possible to acquire an Interface reference from the returned device interface reference.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    This function returns one of the following Direct3D 10 Return Codes.

    + +

    This function attempts to create the best device for the hardware. First, the function attempts to create a 10.1 device. If a 10.1 device cannot be created, the function attempts to create a 10.0 device. If neither device is successfully created, the function returns E_FAIL.

    If your application needs to create only a 10.1 device, or a 10.0 device only, use the following functions instead:

    • Use the function to create a Direct3D 10.0 device only.
    • Use the function to create a Direct3D 10.1 device only.
    • Use the function to get an interface reference from an interface reference.

    A Direct3D 10.1 device can only be created on computers running Windows Vista Service Pack 1 or later, and with Direct3D 10.1-compatible hardware installed. However, it is legal to call this function on computers running any version of Windows that has the D3DX10 DLL installed.

    +
    + + bb694537 + HRESULT D3DX10CreateDevice([In] IDXGIAdapter* pAdapter,[In] D3D10_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] unsigned int Flags,[In] ID3D10Device** ppDevice) + D3DX10CreateDevice +
    + + +

    Get a Direct3D 10.1 device interface reference from a Direct3D 10.0 interface reference.

    +
    +

    Pointer to the Direct3D 10.0 device (see the interface).

    +

    Pointer to the Direct3D 10.1 device (see the interface).

    +

    This function returns one of the following Direct3D 10 Return Codes. If a Direct3D 10.1 device interface can be acquired, this function succeeds and passes a reference to the 10.1 interface using the ppDevice parameter. If a Direct3D 10.1 device interface cannot be acquired, this function returns E_FAIL, and will not return anything for the ppDevice parameter.

    + +

    For this function to succeed, you must have acquired the supplied reference using a call to the function, the function, the function, or the function.

    You can only create a Direct3D 10.1 device on computers running Windows Vista Service Pack 1 or later, and with Direct3D 10.1-compatible hardware installed. This function will return E_FAIL on any computer not meeting these requirements. + However, you can call this function on any version of Windows that has the D3DX10 DLL installed.

    +
    + + bb694539 + HRESULT D3DX10GetFeatureLevel1([In] ID3D10Device* pDevice,[In] ID3D10Device1** ppDevice1) + D3DX10GetFeatureLevel1 +
    + + +

    Create a shader-resource view from a file.

    +
    +

    A reference to the device (see Interface) that will use the resource.

    +

    Name of the file that contains the shader-resource view. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the data type resolves to LPCSTR.

    +

    Optional. Identifies the characteristics of a texture (see ) when the data processor is created; set this to null to read the characteristics of a texture when the texture is loaded.

    +

    Pointer to a thread-pump interface (see Interface). If null is specified, this function will behave synchronously and will not return until it is finished.

    +

    Address of a reference to the shader-resource view (see Interface).

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    For a list of supported image formats, see .

    +
    + + bb172667 + HRESULT D3DX10CreateShaderResourceViewFromFileW([In] ID3D10Device* pDevice,[In] const wchar_t* pSrcFile,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[In] ID3DX10ThreadPump* pPump,[In] ID3D10ShaderResourceView** ppShaderResourceView,[Out] HRESULT* pHResult) + D3DX10CreateShaderResourceViewFromFileW +
    + + +

    Save a texture to a file.

    +
    +

    Pointer to the texture to be saved. See Interface.

    +

    The format the texture will be saved as (see ). is the preferred format since it is the only option that supports all the formats in .

    +

    Name of the destination output file where the texture will be saved. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the data type resolves to LPCSTR.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes; use the return value to see if the DestFormat is supported.

    + +

    writes out the extra DDS_HEADER_DXT10 structure for the input texture only if necessary (for example, because the input texture is in standard RGB (sRGB) format). If writes out the DDS_HEADER_DXT10 structure, it sets the dwFourCC member of the DDS_PIXELFORMAT structure for the texture to DX10 to indicate the prescense of the DDS_HEADER_DXT10 extended header.

    +
    + + bb172684 + HRESULT D3DX10SaveTextureToFileW([In] ID3D10Resource* pSrcTexture,[In] D3DX10_IMAGE_FILE_FORMAT DestFormat,[In] const wchar_t* pDestFile) + D3DX10SaveTextureToFileW +
    + + +

    Get information about an image already loaded into memory.

    +
    +

    Pointer to the image in memory.

    +

    Size of the image in memory, in bytes.

    +

    Optional thread pump that can be used to load the info asynchronously. Can be null. See .

    +

    Information about the image in memory.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172678 + HRESULT D3DX10GetImageInfoFromMemory([In] const void* pSrcData,[In] SIZE_T SrcDataSize,[In] ID3DX10ThreadPump* pPump,[In] D3DX10_IMAGE_INFO* pSrcInfo,[Out] HRESULT* pHResult) + D3DX10GetImageInfoFromMemory +
    + + +

    Retrieves information about a given image in a resource.

    +
    +

    Module where the resource is loaded. Set this parameter to null to specify the module associated with the image that the operating system used to create the current process.

    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the data type resolves to LPCSTR. See Remarks.

    +

    Optional thread pump that can be used to load the info asynchronously. Can be null. See .

    +

    Pointer to a structure to be filled with the description of the data in the source file.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be the following: D3DERR_INVALIDCALL

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DX10GetImageInfoFromResourceA because ANSI strings are being used.

    +
    + + bb172679 + HRESULT D3DX10GetImageInfoFromResourceW([In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In] ID3DX10ThreadPump* pPump,[In] D3DX10_IMAGE_INFO* pSrcInfo,[Out] HRESULT* pHResult) + D3DX10GetImageInfoFromResourceW +
    + + +

    Create a texture resource from a file.

    +
    +

    A reference to the device (see Interface) that will use the resource.

    +

    The name of the file containing the resource. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the data type resolves to LPCSTR. See enumeration for a list of the supported image file formats.

    +

    Optional. Identifies the characteristics of a texture (see ) when the data processor is created; set this to null to read the characteristics of a texture when the texture is loaded.

    +

    A reference to a thread pump interface (see Interface). If null is specified, this function will behave synchronously and will not return until it is finished.

    +

    The address of a reference to the texture resource (see Interface).

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    For a list of supported image formats see .

    +
    + + bb172671 + HRESULT D3DX10CreateTextureFromFileW([In] ID3D10Device* pDevice,[In] const wchar_t* pSrcFile,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[In] ID3DX10ThreadPump* pPump,[Out] void** ppTexture,[Out] HRESULT* pHResult) + D3DX10CreateTextureFromFileW +
    + + +

    Save a texture to memory.

    +
    +

    Pointer to the texture to be saved. See Interface.

    +

    The format the texture will be saved as. See .

    +

    Address of a reference to the memory containing the saved texture. See Interface.

    +

    Optional.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172685 + HRESULT D3DX10SaveTextureToMemory([In] ID3D10Resource* pSrcTexture,[In] D3DX10_IMAGE_FILE_FORMAT DestFormat,[Out] ID3D10Blob** ppDestBuf,[In] unsigned int Flags) + D3DX10SaveTextureToMemory +
    + + +

    Create a shader-resource view from a resource.

    +
    +

    A reference to the device (see Interface) that will use the resource.

    +

    Handle to the resource module containing the shader-resource view. HMODULE can be obtained with GetModuleHandle Function.

    +

    Name of the shader resource view in hSrcModule. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the data type resolves to LPCSTR.

    +

    Optional. Identifies the characteristics of a texture (see ) when the data processor is created; set this to null to read the characteristics of a texture when the texture is loaded.

    +

    A reference to a thread pump interface (see Interface). If null is specified, this function will behave synchronously and will not return until it is finished.

    +

    Address of a reference to the shader-resource view (see Interface).

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172669 + HRESULT D3DX10CreateShaderResourceViewFromResourceW([In] ID3D10Device* pDevice,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[In] ID3DX10ThreadPump* pPump,[In] ID3D10ShaderResourceView** ppShaderResourceView,[Out] HRESULT* pHResult) + D3DX10CreateShaderResourceViewFromResourceW +
    + + +

    Projects a function represented in a cube map into spherical harmonics.

    +
    +

    Order of the SH evaluation, generates Order^2 coefs, degree is Order-1.

    +

    Cubemap that is going to be projected into spherical harmonics. See .

    +

    Output SH vector for red.

    +

    Output SH vector for green.

    +

    Output SH vector for blue.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172686 + HRESULT D3DX10SHProjectCubeMap([In] unsigned int Order,[In] ID3D10Texture2D* pCubeMap,[Out, Buffer] float* pROut,[Out, Buffer, Optional] float* pGOut,[Out, Buffer, Optional] float* pBOut) + D3DX10SHProjectCubeMap +
    + + +

    Load a texture from a texture.

    +
    +

    Pointer to the source texture. See .

    +

    Pointer to texture loading parameters. See .

    +

    Pointer to the destination texture. See Interface.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172680 + HRESULT D3DX10LoadTextureFromTexture([In] ID3D10Resource* pSrcTexture,[In] D3DX10_TEXTURE_LOAD_INFO* pLoadInfo,[In] ID3D10Resource* pDstTexture) + D3DX10LoadTextureFromTexture +
    + + +

    Retrieves information about a given image file.

    +
    +

    File name of image to retrieve information about. If UNICODE or _UNICODE are defined, this parameter type is LPCWSTR, otherwise, the type is LPCSTR.

    +

    Optional thread pump that can be used to load the info asynchronously. Can be null. See .

    +

    Pointer to a structure to be filled with the description of the data in the source file.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be the following: D3DERR_INVALIDCALL

    + +

    This function supports both Unicode and ANSI strings.

    +
    + + bb172677 + HRESULT D3DX10GetImageInfoFromFileW([In] const wchar_t* pSrcFile,[In] ID3DX10ThreadPump* pPump,[In] D3DX10_IMAGE_INFO* pSrcInfo,[Out] HRESULT* pHResult) + D3DX10GetImageInfoFromFileW +
    + + +

    Create a shader-resource view from a file in memory.

    +
    +

    A reference to the device (see Interface) that will use the resource.

    +

    Pointer to the file in memory that contains the shader-resource view.

    +

    Size of the file in memory.

    +

    Optional. Identifies the characteristics of a texture (see ) when the data processor is created; set this to null to read the characteristics of a texture when the texture is loaded.

    +

    A reference to a thread pump interface (see Interface). If null is specified, this function will behave synchronously and will not return until it is finished.

    +

    Address of a reference to the newly created shader resource view. See Interface.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172668 + HRESULT D3DX10CreateShaderResourceViewFromMemory([In] ID3D10Device* pDevice,[In] const void* pSrcData,[In] SIZE_T SrcDataSize,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[In] ID3DX10ThreadPump* pPump,[In] ID3D10ShaderResourceView** ppShaderResourceView,[Out] HRESULT* pHResult) + D3DX10CreateShaderResourceViewFromMemory +
    + + +

    Converts a height map into a normal map. The (x,y,z) components of each normal are mapped to the (r,g,b) channels of the output texture.

    +
    +

    Pointer to an interface, representing the source height-map texture.

    +

    One or more D3DX_NORMALMAP flags that control generation of normal maps.

    +

    One D3DX_CHANNEL flag specifying the source of height information.

    +

    Constant value multiplier that increases (or decreases) the values in the normal map. Higher values usually make bumps more visible, lower values usually make bumps less visible.

    +

    Pointer to an interface, representing the destination texture.

    +

    If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be the following value: D3DERR_INVALIDCALL.

    + +

    This method computes the normal by using the central difference with a kernel size of 3x3. RGB channels in the destination contain biased (x,y,z) components of the normal. The central differencing denominator is hardcoded to 2.0.

    +
    + + bb172646 + HRESULT D3DX10ComputeNormalMap([In] ID3D10Texture2D* pSrcTexture,[In] D3DX10_NORMALMAP_FLAG Flags,[In] D3DX10_CHANNEL_FLAG Channel,[In] float Amplitude,[In] ID3D10Texture2D* pDestTexture) + D3DX10ComputeNormalMap +
    + + +

    Generates mipmap chain using a particular texture filter.

    +
    +

    The texture object to be filtered. See .

    +

    The mipmap level whose data is used to generate the rest of the mipmap chain.

    +

    Flags controlling how each miplevel is filtered (or D3DX10_DEFAULT for ). See .

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172675 + HRESULT D3DX10FilterTexture([In] ID3D10Resource* pTexture,[In] unsigned int SrcLevel,[In] unsigned int MipFilter) + D3DX10FilterTexture +
    + + +

    Create a texture from another resource.

    +
    +

    A reference to the device (see Interface) that will use the resource.

    +

    A handle to the source resource. HMODULE can be obtained with GetModuleHandle Function.

    +

    A string that contains the name of the source resource. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the data type resolves to LPCSTR.

    +

    Optional. Identifies the characteristics of a texture (see ) when the data processor is created; set this to null to read the characteristics of a texture when the texture is loaded.

    +

    A reference to a thread pump interface (see Interface). If null is specified, this function will behave synchronously and will not return until it is finished.

    +

    The address of a reference to the texture resource (see Interface).

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    For a list of supported image formats see .

    +
    + + bb172673 + HRESULT D3DX10CreateTextureFromResourceW([In] ID3D10Device* pDevice,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[In] ID3DX10ThreadPump* pPump,[Out] void** ppTexture,[Out] HRESULT* pHResult) + D3DX10CreateTextureFromResourceW +
    + + +

    Create a texture resource from a file residing in system memory.

    +
    +

    A reference to the device (see Interface) that will use the resource.

    +

    Pointer to the resource in system memory.

    +

    Size of the resource in system memory.

    +

    Optional. Identifies the characteristics of a texture (see ) when the data processor is created; set this to null to read the characteristics of a texture when the texture is loaded.

    +

    A reference to a thread pump interface (see Interface). If null is specified, this function will behave synchronously and will not return until it is finished.

    +

    Address of a reference to the created resource. See Interface.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    For a list of supported image formats see .

    +
    + + bb172672 + HRESULT D3DX10CreateTextureFromMemory([In] ID3D10Device* pDevice,[In] const void* pSrcData,[In] SIZE_T SrcDataSize,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[In] ID3DX10ThreadPump* pPump,[Out] void** ppTexture,[Out] HRESULT* pHResult) + D3DX10CreateTextureFromMemory +
    + + +

    Creates a mesh object using a declarator.

    +
    +

    Pointer to an Interface, the device object to be associated with the mesh.

    +

    Array of elements, describing the vertex format for the returned mesh. This parameter must map directly to a flexible vertex format (FVF).

    +

    The number of elements in pDeclaration.

    +

    Semantic that identifies which part of the vertex declaration contains position information.

    +

    Number of vertices for the mesh. This parameter must be greater than 0.

    +

    Number of faces for the mesh. The valid range for this number is greater than 0, and one less than the maximum DWORD (typically 65534), because the last index is reserved.

    +

    Combination of one or more flags from the D3DX10_MESH, specifying options for the mesh.

    +

    Address of a reference to an Interface, representing the created mesh object.

    +

    If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be one of the following: D3DERR_INVALIDCALL, E_OUTOFMEMORY.

    + + bb204914 + HRESULT D3DX10CreateMesh([In] ID3D10Device* pDevice,[In, Buffer] const D3D10_INPUT_ELEMENT_DESC* pDeclaration,[In] unsigned int DeclCount,[In] const char* pPositionSemantic,[In] unsigned int VertexCount,[In] unsigned int FaceCount,[In] unsigned int Options,[Out, Fast] ID3DX10Mesh** ppMesh) + D3DX10CreateMesh +
    + + +

    Creates an empty skin mesh object using a declarator.

    +
    +

    Address of a reference to an Interface, representing the created skin mesh object.

    +

    If the function succeeds, the return value is D3D_OK. If the function fails, the return value can be: E_OUTOFMEMORY.

    + +

    Use the to populate the empty skin mesh object returned by this method.

    +
    + + bb204915 + HRESULT D3DX10CreateSkinInfo([In] ID3DX10SkinInfo** ppSkinInfo) + D3DX10CreateSkinInfo +
    + + +

    Create an effect pool from a resource.

    +
    +

    A handle to the resource module containing the effect. HMODULE can be obtained with GetModuleHandle Function.

    +

    The name of the resource in hModule. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the data type resolves to LPCSTR.

    +

    Optional. Effect file name, which is used for error messages only. Can be null.

    +

    A null-terminated array of shader macros (see D3D10_SHADER_MACRO); set this to null to specify no macros.

    +

    A reference to an include interface (see ID3D10Include Interface). This parameter can be null.

    +

    A string that specifies the shader profile, or shader model.

    +

    HLSL compile options (see D3D10_SHADER Constants).

    +

    Effect compile options (see Compile and Effect Flags).

    +

    A reference to the device (see Interface) that will use the resources.

    +

    A reference to a thread pump interface (see Interface). Use null to specify that this function should not return until it is completed.

    +

    The address of a reference to the effect pool (see Interface).

    +

    The address of a reference to memory (see Interface) that contains effect compile errors, if there were any.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172663 + HRESULT D3DX10CreateEffectPoolFromResourceW([In] HINSTANCE hModule,[In] const wchar_t* pResourceName,[In] const wchar_t* pSrcFileName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In] ID3DInclude* pInclude,[In] const char* pProfile,[In] unsigned int HLSLFlags,[In] unsigned int FXFlags,[In] ID3D10Device* pDevice,[In] ID3DX10ThreadPump* pPump,[In] ID3D10EffectPool** ppEffectPool,[In] ID3D10Blob** ppErrors,[Out] HRESULT* pHResult) + D3DX10CreateEffectPoolFromResourceW +
    + + +

    Create an effect pool from an effect file.

    +
    +

    The effect filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the data type resolves to LPCSTR.

    +

    A null-terminated array of shader macros (see D3D10_SHADER_MACRO); set this to null to specify no macros.

    +

    A reference to an include interface (see ID3D10Include Interface). This parameter can be null.

    +

    A string that specifies the shader profile, or shader model.

    +

    HLSL compile options (see D3D10_SHADER Constants).

    +

    Effect compile options (see Compile and Effect Flags).

    +

    A reference to the device (see Interface) that will use the resources.

    +

    A reference to a thread pump interface (see Interface). Use null to specify that this function should not return until it is completed.

    +

    The address of a reference to the effect pool (see Interface).

    +

    The address of a reference to memory (see Interface) that contains effect compile errors, if there were any.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    This example creates an effect pool from the effect used in the BasicHLSL10 Sample.

     // Create an effect pool from an effect in memory	
    +             * l_pEffectPool = null;	
    +            *	l_pBlob_Errors = null;	
    +            WCHAR str[MAX_PATH];	
    +            hr = DXUTFindDXSDKMediaFileCch( str, MAX_PATH, L"BasicHLSL10.fx" );	
    +            hr = ( str,  null, null, D3D10_SHADER_ENABLE_STRICTNESS,  0, pd3dDevice, null, &l_pEffectPool, &l_pBlob_Errors );	
    +            
    +
    + + bb172661 + HRESULT D3DX10CreateEffectPoolFromFileW([In] const wchar_t* pFileName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In] ID3DInclude* pInclude,[In] const char* pProfile,[In] unsigned int HLSLFlags,[In] unsigned int FXFlags,[In] ID3D10Device* pDevice,[In] ID3DX10ThreadPump* pPump,[In] ID3D10EffectPool** ppEffectPool,[In] ID3D10Blob** ppErrors,[Out] HRESULT* pHResult) + D3DX10CreateEffectPoolFromFileW +
    + + +

    Create an effect from a file.

    +
    +

    Name of the ASCII effect file. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the data type resolves to LPCSTR.

    +

    A null-terminated array of shader macros (see D3D10_SHADER_MACRO); set this to null to specify no macros.

    +

    A reference to an include interface (see ID3D10Include Interface). This parameter can be null.

    +

    A string that specifies the shader profile, or shader model.

    +

    HLSL compile options (see D3D10_SHADER Constants).

    +

    Effect compile options (see Compile and Effect Flags).

    +

    A reference to the device (see Interface) that will use the resources.

    +

    Pointer to an effect pool (see Interface) for sharing variables between effects.

    +

    A reference to a thread pump interface (see Interface). Use null to specify that this function should not return until it is completed.

    +

    Address of a reference to the effect (see Interface) that is created.

    +

    The address of a reference to memory (see Interface) that contains effect compile errors, if there were any.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172658 + HRESULT D3DX10CreateEffectFromFileW([In] const wchar_t* pFileName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In] ID3DInclude* pInclude,[In] const char* pProfile,[In] unsigned int HLSLFlags,[In] unsigned int FXFlags,[In] ID3D10Device* pDevice,[In] ID3D10EffectPool* pEffectPool,[In] ID3DX10ThreadPump* pPump,[In] ID3D10Effect** ppEffect,[In] ID3D10Blob** ppErrors,[Out] HRESULT* pHResult) + D3DX10CreateEffectFromFileW +
    + + +

    Create an effect from memory.

    +
    +

    Pointer to the effect in memory.

    +

    Size of the effect in memory.

    +

    Name of the effect file in memory.

    +

    A null-terminated array of shader macros (see D3D10_SHADER_MACRO); set this to null to specify no macros.

    +

    A reference to an include interface (see ID3D10Include Interface). This parameter can be null.

    +

    A string that specifies the shader profile, or shader model.

    +

    HLSL compile options (see D3D10_SHADER Constants).

    +

    Effect compile options (see D3D10_EFFECT Constants).

    +

    A reference to the device (see Interface) that will use the resources.

    +

    Pointer to an effect pool (see Interface) for sharing variables between effects.

    +

    A reference to a thread pump interface (see Interface). Use null to specify that this function should not return until it is completed.

    +

    Address of a reference to the effect (see Interface) that is created.

    +

    The address of a reference to memory (see Interface) that contains effect compile errors, if there were any.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172659 + HRESULT D3DX10CreateEffectFromMemory([In] const void* pData,[In] SIZE_T DataLength,[In] const char* pSrcFileName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In] ID3DInclude* pInclude,[In] const char* pProfile,[In] unsigned int HLSLFlags,[In] unsigned int FXFlags,[In] ID3D10Device* pDevice,[In] ID3D10EffectPool* pEffectPool,[In] ID3DX10ThreadPump* pPump,[In] ID3D10Effect** ppEffect,[In] ID3D10Blob** ppErrors,[Out] HRESULT* pHResult) + D3DX10CreateEffectFromMemory +
    + + +

    Create an effect pool from an effect in memory.

    +
    +

    A reference to the effect.

    +

    The size of the effect.

    +

    The name of the effect file.

    +

    A null-terminated array of shader macros (see D3D10_SHADER_MACRO); set this to null to specify no macros.

    +

    A reference to an include interface (see ID3D10Include Interface). This parameter can be null.

    +

    A string that specifies the shader profile, or shader model.

    +

    HLSL compile options (see D3D10_SHADER Constants).

    +

    Effect compile options (see Compile and Effect Flags).

    +

    A reference to the device (see Interface) that will use the resources.

    +

    A reference to a thread pump interface (see Interface). Use null to specify that this function should not return until it is completed.

    +

    The address of a reference to the effect pool (see Interface).

    +

    The address of a reference to memory (see Interface) that contains effect compile errors, if there were any.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb172662 + HRESULT D3DX10CreateEffectPoolFromMemory([In] const void* pData,[In] SIZE_T DataLength,[In] const char* pSrcFileName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In] ID3DInclude* pInclude,[In] const char* pProfile,[In] unsigned int HLSLFlags,[In] unsigned int FXFlags,[In] ID3D10Device* pDevice,[In] ID3DX10ThreadPump* pPump,[In] ID3D10EffectPool** ppEffectPool,[In] ID3D10Blob** ppErrors,[Out] HRESULT* pHResult) + D3DX10CreateEffectPoolFromMemory +
    + + +

    Create an effect from a resource.

    +
    +

    A handle to the resource module containing the effect. HMODULE can be obtained with GetModuleHandle Function.

    +

    Name of the resource in hModule. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the data type resolves to LPCSTR.

    +

    Optional. Effect file name, which is used for error messages only. Can be null.

    +

    A null-terminated array of shader macros (see D3D10_SHADER_MACRO); set this to null to specify no macros.

    +

    A reference to an include interface (see ID3D10Include Interface). This parameter can be null.

    +

    A string that specifies the shader profile, or shader model.

    +

    HLSL compile options (see D3D10_SHADER Constants).

    +

    Effect compile options (see Compile and Effect Flags).

    +

    A reference to the device (see Interface) that will use the resources.

    +

    Pointer to an effect pool (see Interface) for sharing variables between effects.

    +

    A reference to a thread pump interface (see Interface). Use null to specify that this function should not return until it is completed.

    +

    Address of a reference to the effect (see Interface) that is created.

    +

    The address of a reference to memory (see Interface) that contains effect compile errors, if there were any.

    +

    A reference to the return value. May be null. If pPump is not null, then pHResult must be a valid memory location until the asynchronous execution completes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb172660 + HRESULT D3DX10CreateEffectFromResourceW([In] HINSTANCE hModule,[In] const wchar_t* pResourceName,[In] const wchar_t* pSrcFileName,[In, Buffer, Optional] const D3D_SHADER_MACRO* pDefines,[In] ID3DInclude* pInclude,[In] const char* pProfile,[In] unsigned int HLSLFlags,[In] unsigned int FXFlags,[In] ID3D10Device* pDevice,[In] ID3D10EffectPool* pEffectPool,[In] ID3DX10ThreadPump* pPump,[In] ID3D10Effect** ppEffect,[In] ID3D10Blob** ppErrors,[Out] HRESULT* pHResult) + D3DX10CreateEffectFromResourceW +
    + + +

    A constant-buffer interface accesses constant buffers or texture buffers.

    +
    + +

    Use constant buffers to store many effect constants; grouping constants into buffers based on their frequency of update. This allows you to minimize the number of state changes as well as make the fewest API calls to change state. Both of these factors lead to better performance.

    +
    + + bb173634 + ID3D10EffectConstantBuffer + ID3D10EffectConstantBuffer +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a constant-buffer.

    +
    +

    A reference to a constant-buffer interface. See Interface.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173637 + HRESULT ID3D10EffectConstantBuffer::SetConstantBuffer([In, Optional] ID3D10Buffer* pConstantBuffer) + ID3D10EffectConstantBuffer::SetConstantBuffer +
    + + +

    Get a constant-buffer.

    +
    +

    The address of a reference to a constant-buffer interface. See Interface.

    + + bb173635 + HRESULT ID3D10EffectConstantBuffer::GetConstantBuffer([Out] ID3D10Buffer** ppConstantBuffer) + ID3D10EffectConstantBuffer::GetConstantBuffer +
    + + +

    Set a texture-buffer.

    +
    +

    A reference to a shader-resource-view interface for accessing a texture buffer.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173638 + HRESULT ID3D10EffectConstantBuffer::SetTextureBuffer([In, Optional] ID3D10ShaderResourceView* pTextureBuffer) + ID3D10EffectConstantBuffer::SetTextureBuffer +
    + + +

    Get a texture-buffer.

    +
    +

    The address of a reference to a shader-resource-view interface for accessing a texture buffer. See Interface.

    + + bb173636 + HRESULT ID3D10EffectConstantBuffer::GetTextureBuffer([Out] ID3D10ShaderResourceView** ppTextureBuffer) + ID3D10EffectConstantBuffer::GetTextureBuffer +
    + + +

    A shader-variable interface accesses a shader variable.

    +
    + + bb173698 + ID3D10EffectShaderVariable + ID3D10EffectShaderVariable +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a shader description.

    +
    +

    A zero-based index.

    +

    A reference to a shader description (see ).

    + + bb173703 + HRESULT ID3D10EffectShaderVariable::GetShaderDesc([In] unsigned int ShaderIndex,[Out] D3D10_EFFECT_SHADER_DESC* pDesc) + ID3D10EffectShaderVariable::GetShaderDesc +
    + + +

    Get a vertex shader.

    +
    +

    A zero-based index.

    +

    A reference to a Interface.

    + + bb173704 + HRESULT ID3D10EffectShaderVariable::GetVertexShader([In] unsigned int ShaderIndex,[Out] ID3D10VertexShader** ppVS) + ID3D10EffectShaderVariable::GetVertexShader +
    + + +

    Get a geometry shader.

    +
    +

    A zero-based index.

    +

    A reference to a Interface.

    + + bb173699 + HRESULT ID3D10EffectShaderVariable::GetGeometryShader([In] unsigned int ShaderIndex,[Out] ID3D10GeometryShader** ppGS) + ID3D10EffectShaderVariable::GetGeometryShader +
    + + +

    Get a pixel shader.

    +
    +

    A zero-based index.

    +

    A reference to a Interface.

    + + bb173702 + HRESULT ID3D10EffectShaderVariable::GetPixelShader([In] unsigned int ShaderIndex,[Out] ID3D10PixelShader** ppPS) + ID3D10EffectShaderVariable::GetPixelShader +
    + + +

    Get an input-signature description.

    +
    +

    A zero-based shader index.

    +

    A zero-based shader-element index.

    +

    A reference to a parameter description (see ).

    + +

    An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.

    +
    + + bb173700 + HRESULT ID3D10EffectShaderVariable::GetInputSignatureElementDesc([In] unsigned int ShaderIndex,[In] unsigned int Element,[Out] D3D10_SIGNATURE_PARAMETER_DESC* pDesc) + ID3D10EffectShaderVariable::GetInputSignatureElementDesc +
    + + +

    Get an output-signature description.

    +
    +

    A zero-based shader index.

    +

    A zero-based element index.

    +

    A reference to a parameter description (see ).

    + +

    An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.

    +
    + + bb173701 + HRESULT ID3D10EffectShaderVariable::GetOutputSignatureElementDesc([In] unsigned int ShaderIndex,[In] unsigned int Element,[Out] D3D10_SIGNATURE_PARAMETER_DESC* pDesc) + ID3D10EffectShaderVariable::GetOutputSignatureElementDesc +
    + + +

    An interface is a collection of passes.

    The lifetime of an object is equal to the lifetime of its parent object.

    • Methods
    +
    + +

    An effect contains one or more techniques; each technique contains one or more passes; each pass contains state assignments (see Organizing State in an Effect (Direct3D 10)). The syntax for creating a technique is shown in Effect Technique Syntax (Direct3D 10).

    To get an effect-technique interface, call a method like .

    +
    + + bb173708 + ID3D10EffectTechnique + ID3D10EffectTechnique +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Test a technique to see if it contains valid syntax.

    +
    + + bb173715 + IsValid + IsValid + BOOL ID3D10EffectTechnique::IsValid() +
    + + +

    Get a technique description.

    +
    + + bb173712 + GetDesc + GetDesc + HRESULT ID3D10EffectTechnique::GetDesc([Out] D3D10_TECHNIQUE_DESC* pDesc) +
    + + +

    Test a technique to see if it contains valid syntax.

    +
    +

    TRUE if the code syntax is valid; otherwise .

    + + bb173715 + BOOL ID3D10EffectTechnique::IsValid() + ID3D10EffectTechnique::IsValid +
    + + +

    Get a technique description.

    +
    +

    A reference to a technique description (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173712 + HRESULT ID3D10EffectTechnique::GetDesc([Out] D3D10_TECHNIQUE_DESC* pDesc) + ID3D10EffectTechnique::GetDesc +
    + + +

    Get an annotation by index.

    +
    +

    The zero-based index of the interface reference.

    +

    A reference to an Interface.

    + +

    Use an annotation to attach a piece of metadata to a technique.

    +
    + + bb173710 + ID3D10EffectVariable* ID3D10EffectTechnique::GetAnnotationByIndex([In] unsigned int Index) + ID3D10EffectTechnique::GetAnnotationByIndex +
    + + +

    Get an annotation by name.

    +
    +

    Name of the annotation.

    +

    A reference to an Interface.

    + +

    Use an annotation to attach a piece of metadata to a technique.

    +
    + + bb173711 + ID3D10EffectVariable* ID3D10EffectTechnique::GetAnnotationByName([In] const char* Name) + ID3D10EffectTechnique::GetAnnotationByName +
    + + +

    Get a pass by index.

    +
    +

    A zero-based index.

    +

    A reference to a Interface.

    + +

    A technique contains one or more passes; get a pass using a name or an index.

    +
    + + bb173713 + ID3D10EffectPass* ID3D10EffectTechnique::GetPassByIndex([In] unsigned int Index) + ID3D10EffectTechnique::GetPassByIndex +
    + + +

    Get a pass by name.

    +
    +

    The name of the pass.

    +

    A reference to an Interface.

    + +

    A technique contains one or more passes; get a pass using a name or an index.

    +
    + + bb173714 + ID3D10EffectPass* ID3D10EffectTechnique::GetPassByName([In] const char* Name) + ID3D10EffectTechnique::GetPassByName +
    + + +

    Compute a state-block mask to allow/prevent state changes.

    +
    +

    A reference to a state-block mask (see ).

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173709 + HRESULT ID3D10EffectTechnique::ComputeStateBlockMask([Out] D3D10_STATE_BLOCK_MASK* pStateBlockMask) + ID3D10EffectTechnique::ComputeStateBlockMask +
    + + +

    Get an member type by name.

    +
    + + bb173721 + ID3D10EffectType + ID3D10EffectType +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Tests that the effect type is valid.

    +
    + + bb173723 + IsValid + IsValid + BOOL ID3D10EffectType::IsValid() +
    + + +

    Get an effect-type description.

    +
    + +

    The effect-variable description contains data about the name, annotations, semantic, flags and buffer offset of the effect type.

    +
    + + bb173717 + GetDesc + GetDesc + HRESULT ID3D10EffectType::GetDesc([Out] D3D10_EFFECT_TYPE_DESC* pDesc) +
    + + +

    Tests that the effect type is valid.

    +
    +

    TRUE if it is valid; otherwise .

    + + bb173723 + BOOL ID3D10EffectType::IsValid() + ID3D10EffectType::IsValid +
    + + +

    Get an effect-type description.

    +
    +

    A reference to an effect-type description. See .

    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    The effect-variable description contains data about the name, annotations, semantic, flags and buffer offset of the effect type.

    +
    + + bb173717 + HRESULT ID3D10EffectType::GetDesc([Out] D3D10_EFFECT_TYPE_DESC* pDesc) + ID3D10EffectType::GetDesc +
    + + +

    Get a member type by index.

    +
    +

    A zero-based index.

    +

    A reference to an Interface.

    + + bb173720 + ID3D10EffectType* ID3D10EffectType::GetMemberTypeByIndex([In] unsigned int Index) + ID3D10EffectType::GetMemberTypeByIndex +
    + + +

    Get an member type by name.

    +
    +

    A member's name.

    +

    A reference to an Interface.

    + + bb173721 + ID3D10EffectType* ID3D10EffectType::GetMemberTypeByName([In] const char* Name) + ID3D10EffectType::GetMemberTypeByName +
    + + +

    Get a member type by semantic.

    +
    +

    A semantic.

    +

    A reference to an Interface.

    + + bb173722 + ID3D10EffectType* ID3D10EffectType::GetMemberTypeBySemantic([In] const char* Semantic) + ID3D10EffectType::GetMemberTypeBySemantic +
    + + +

    Get the name of a member.

    +
    +

    A zero-based index.

    +

    The name of the member.

    + + bb173718 + const char* ID3D10EffectType::GetMemberName([In] unsigned int Index) + ID3D10EffectType::GetMemberName +
    + + +

    Get the semantic attached to a member.

    +
    +

    A zero-based index.

    +

    A string that contains the semantic.

    + + bb173719 + const char* ID3D10EffectType::GetMemberSemantic([In] unsigned int Index) + ID3D10EffectType::GetMemberSemantic +
    + + +

    A geometry-shader interface manages an executable program (a geometry shader) that controls the geometry-shader stage.

    +
    + +

    The geometry-shader interface has no methods; use HLSL to implement your shader functionality. All shaders in Direct3D 10 are implemented from a common set of features referred to as the common shader core.

    To create a geometry shader interface, call either or . Before using a geometry shader you must bind it to the device by calling .

    This interface is defined in D3D10.h.

    +
    + + bb173774 + ID3D10GeometryShader + ID3D10GeometryShader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + An array of instances describing the layout of the output buffers. + The size, in bytes, of each element in the array pointed to by pSODeclaration. This parameter is only used when the output slot is 0 for all entries in pSODeclaration. + + + +

    The device interface represents a virtual adapter for Direct3D 10.0; it is used to perform rendering and create Direct3D resources.

    +
    + +

    A device is created using .

    +
    + + bb173528 + ID3D10Device + ID3D10Device +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set the constant buffers used by the geometry shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The method will not hold references to the interfaces passed in. For that reason, applications should be careful not to release interfaces currently in use by the device.

    +
    + + bb173580 + void ID3D10Device::GSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppConstantBuffers) + ID3D10Device::GSSetConstantBuffers +
    + + +

    Set the constant buffers used by the geometry shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The method will not hold references to the interfaces passed in. For that reason, applications should be careful not to release interfaces currently in use by the device.

    +
    + + bb173580 + void ID3D10Device::GSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppConstantBuffers) + ID3D10Device::GSSetConstantBuffers +
    + + +

    Set the constant buffers used by the geometry shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The method will not hold references to the interfaces passed in. For that reason, applications should be careful not to release interfaces currently in use by the device.

    +
    + + bb173580 + void ID3D10Device::GSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppConstantBuffers) + ID3D10Device::GSSetConstantBuffers +
    + + +

    Set a geometry shader to the device.

    +
    +

    Pointer to a geometry shader (see ). Passing in null disables the shader for this pipeline stage.

    + +

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173582 + void ID3D10Device::GSSetShader([In, Optional] ID3D10GeometryShader* pShader) + ID3D10Device::GSSetShader +
    + + +

    Bind an array of shader resources to the geometry shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    If you bind a subresource as an input and an output, this API will fill the destination shader resource slot with null. The debug layer (when active) will alert you if this is true.

    For information about creating shader-resource views, see .

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173583 + void ID3D10Device::GSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::GSSetShaderResources +
    + + +

    Bind an array of shader resources to the geometry shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    If you bind a subresource as an input and an output, this API will fill the destination shader resource slot with null. The debug layer (when active) will alert you if this is true.

    For information about creating shader-resource views, see .

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173583 + void ID3D10Device::GSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::GSSetShaderResources +
    + + +

    Bind an array of shader resources to the geometry shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    If you bind a subresource as an input and an output, this API will fill the destination shader resource slot with null. The debug layer (when active) will alert you if this is true.

    For information about creating shader-resource views, see .

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173583 + void ID3D10Device::GSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::GSSetShaderResources +
    + + +

    Set an array of sampler states to the geometry shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

     //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173581 + void ID3D10Device::GSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const ID3D10SamplerState** ppSamplers) + ID3D10Device::GSSetSamplers +
    + + +

    Set an array of sampler states to the geometry shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

     //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173581 + void ID3D10Device::GSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const ID3D10SamplerState** ppSamplers) + ID3D10Device::GSSetSamplers +
    + + +

    Set an array of sampler states to the geometry shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

     //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173581 + void ID3D10Device::GSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const ID3D10SamplerState** ppSamplers) + ID3D10Device::GSSetSamplers +
    + + +

    Get the constant buffers used by the geometry shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173576 + void ID3D10Device::GSGetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D10Buffer** ppConstantBuffers) + ID3D10Device::GSGetConstantBuffers +
    + + +

    Get the geometry shader currently set on the device.

    +
    +

    Address of a reference to a geometry shader (see ) to be returned by the method.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173578 + void ID3D10Device::GSGetShader([Out] ID3D10GeometryShader** ppGeometryShader) + ID3D10Device::GSGetShader +
    + + +

    Get the geometry shader resources.

    +
    +

    Index into the device's zero-based array to begin getting shader resources from.

    +

    The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources.

    +

    Array of shader resource view interfaces to be returned by the device.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173579 + void ID3D10Device::GSGetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[Out, Buffer, Optional] ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::GSGetShaderResources +
    + + +

    Get an array of sampler states from the geometry shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173577 + void ID3D10Device::GSGetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[Out, Buffer, Optional] ID3D10SamplerState** ppSamplers) + ID3D10Device::GSGetSamplers +
    + + +

    An information-queue interface stores, retrieves, and filters debug messages. The queue consists of a message queue, an optional storage filter stack, and a optional retrieval filter stack.

    +
    + +

    This interface is obtained by turning on the debug layer and querying it from the Interface using IUnknown::QueryInterface.

    hr = ( null, g_driverType, null, , , &sd, &g_pSwapChain, &g_pd3dDevice );	
    +            ...	
    +             * infoQueue;	
    +            g_pd3dDevice->QueryInterface(__uuidof(),  (void **)&infoQueue); 	
    +            
    +
    + + bb173779 + ID3D10InfoQueue + ID3D10InfoQueue +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get or sets the maximum number of messages that can be added to the message queue.

    +
    + +

    When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.

    +
    + + bb173791 + GetMessageCountLimit / SetMessageCountLimit + GetMessageCountLimit + unsigned longlong ID3D10InfoQueue::GetMessageCountLimit() +
    + + +

    Get the number of messages that were allowed to pass through a storage filter.

    +
    + + bb173793 + GetNumMessagesAllowedByStorageFilter + GetNumMessagesAllowedByStorageFilter + unsigned longlong ID3D10InfoQueue::GetNumMessagesAllowedByStorageFilter() +
    + + +

    Get the number of messages that were denied passage through a storage filter.

    +
    + + bb173794 + GetNumMessagesDeniedByStorageFilter + GetNumMessagesDeniedByStorageFilter + unsigned longlong ID3D10InfoQueue::GetNumMessagesDeniedByStorageFilter() +
    + + +

    Get the number of messages currently stored in the message queue.

    +
    + + bb173796 + GetNumStoredMessages + GetNumStoredMessages + unsigned longlong ID3D10InfoQueue::GetNumStoredMessages() +
    + + +

    Get the number of messages that are able to pass through a retrieval filter.

    +
    + + bb173797 + GetNumStoredMessagesAllowedByRetrievalFilter + GetNumStoredMessagesAllowedByRetrievalFilter + unsigned longlong ID3D10InfoQueue::GetNumStoredMessagesAllowedByRetrievalFilter() +
    + + +

    Get the number of messages that were discarded due to the message count limit.

    +
    + +

    Get and set the message count limit with and , respectively.

    +
    + + bb173795 + GetNumMessagesDiscardedByMessageCountLimit + GetNumMessagesDiscardedByMessageCountLimit + unsigned longlong ID3D10InfoQueue::GetNumMessagesDiscardedByMessageCountLimit() +
    + + +

    Get the size of the storage-filter stack in bytes.

    +
    + + bb173801 + GetStorageFilterStackSize + GetStorageFilterStackSize + unsigned int ID3D10InfoQueue::GetStorageFilterStackSize() +
    + + +

    Get the size of the retrieval-filter stack in bytes.

    +
    + + bb173799 + GetRetrievalFilterStackSize + GetRetrievalFilterStackSize + unsigned int ID3D10InfoQueue::GetRetrievalFilterStackSize() +
    + + +

    Get or sets a boolean that turns the debug output on or off.

    +
    + + bb173792 + GetMuteDebugOutput / SetMuteDebugOutput + GetMuteDebugOutput + BOOL ID3D10InfoQueue::GetMuteDebugOutput() +
    + + +

    Set the maximum number of messages that can be added to the message queue.

    +
    +

    Maximum number of messages that can be added to the message queue. -1 means no limit.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.

    +
    + + bb173813 + HRESULT ID3D10InfoQueue::SetMessageCountLimit([In] unsigned longlong MessageCountLimit) + ID3D10InfoQueue::SetMessageCountLimit +
    + + +

    Clear all messages from the message queue.

    +
    + + bb173786 + void ID3D10InfoQueue::ClearStoredMessages() + ID3D10InfoQueue::ClearStoredMessages +
    + + +

    Get a message from the message queue.

    +
    +

    Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with ). 0 is the message at the front of the message queue.

    +

    Returned message (see ).

    +

    Size of pMessage in bytes, including the size of the message string that the pMessage points to.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    This method does not remove any messages from the message queue.

    This method gets messages from the message queue after an optional retrieval filter has been applied.

    Applications should call this method twice to retrieve a message - first to obtain the size of the message and second to get the message. Here is a typical example:

     // Get the size of the message	
    +             messageLength = 0;	
    +             hr = pInfoQueue->GetMessage(0, null, &messageLength); // Allocate space and get the message	
    +             * pMessage = (*)malloc(messageLength);	
    +            hr = pInfoQueue->GetMessage(0, pMessage, &messageLength);	
    +            

    For an overview see Information Queue Overview.

    +
    + + bb173790 + HRESULT ID3D10InfoQueue::GetMessage([In] unsigned longlong MessageIndex,[In] void* pMessage,[InOut] SIZE_T* pMessageByteLength) + ID3D10InfoQueue::GetMessage +
    + + +

    Get the number of messages that were allowed to pass through a storage filter.

    +
    +

    Number of messages allowed by a storage filter.

    + + bb173793 + unsigned longlong ID3D10InfoQueue::GetNumMessagesAllowedByStorageFilter() + ID3D10InfoQueue::GetNumMessagesAllowedByStorageFilter +
    + + +

    Get the number of messages that were denied passage through a storage filter.

    +
    +

    Number of messages denied by a storage filter.

    + + bb173794 + unsigned longlong ID3D10InfoQueue::GetNumMessagesDeniedByStorageFilter() + ID3D10InfoQueue::GetNumMessagesDeniedByStorageFilter +
    + + +

    Get the number of messages currently stored in the message queue.

    +
    +

    Number of messages currently stored in the message queue.

    + + bb173796 + unsigned longlong ID3D10InfoQueue::GetNumStoredMessages() + ID3D10InfoQueue::GetNumStoredMessages +
    + + +

    Get the number of messages that are able to pass through a retrieval filter.

    +
    +

    Number of messages allowed by a retrieval filter.

    + + bb173797 + unsigned longlong ID3D10InfoQueue::GetNumStoredMessagesAllowedByRetrievalFilter() + ID3D10InfoQueue::GetNumStoredMessagesAllowedByRetrievalFilter +
    + + +

    Get the number of messages that were discarded due to the message count limit.

    +
    +

    Number of messages discarded.

    + +

    Get and set the message count limit with and , respectively.

    +
    + + bb173795 + unsigned longlong ID3D10InfoQueue::GetNumMessagesDiscardedByMessageCountLimit() + ID3D10InfoQueue::GetNumMessagesDiscardedByMessageCountLimit +
    + + +

    Get the maximum number of messages that can be added to the message queue.

    +
    +

    Maximum number of messages that can be added to the queue. -1 means no limit.

    + +

    When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.

    +
    + + bb173791 + unsigned longlong ID3D10InfoQueue::GetMessageCountLimit() + ID3D10InfoQueue::GetMessageCountLimit +
    + + +

    Add storage filters to the top of the storage-filter stack.

    +
    +

    Array of storage filters (see ).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    A storage filter defines a grouping of debug messages that should be allowed into the info queue.

    +
    + + bb173783 + HRESULT ID3D10InfoQueue::AddStorageFilterEntries([In] D3D10_INFO_QUEUE_FILTER* pFilter) + ID3D10InfoQueue::AddStorageFilterEntries +
    + + +

    Get the storage filter at the top of the storage-filter stack.

    +
    +

    Storage filter at the top of the storage-filter stack.

    +

    Size of the storage filter in bytes. If pFilter is null, the size of the storage filter will be output to this parameter.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173800 + HRESULT ID3D10InfoQueue::GetStorageFilter([In] void* pFilter,[InOut] SIZE_T* pFilterByteLength) + ID3D10InfoQueue::GetStorageFilter +
    + + +

    Remove a storage filter from the top of the storage-filter stack.

    +
    + + bb173785 + void ID3D10InfoQueue::ClearStorageFilter() + ID3D10InfoQueue::ClearStorageFilter +
    + + +

    Push an empty storage filter onto the storage-filter stack.

    +
    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    An empty storage filter allows all messages to pass through.

    +
    + + bb173807 + HRESULT ID3D10InfoQueue::PushEmptyStorageFilter() + ID3D10InfoQueue::PushEmptyStorageFilter +
    + + +

    Push a copy of storage filter currently on the top of the storage-filter stack onto the storage-filter stack.

    +
    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173805 + HRESULT ID3D10InfoQueue::PushCopyOfStorageFilter() + ID3D10InfoQueue::PushCopyOfStorageFilter +
    + + +

    Push a storage filter onto the storage-filter stack.

    +
    +

    Pointer to a storage filter (see ).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173809 + HRESULT ID3D10InfoQueue::PushStorageFilter([In] D3D10_INFO_QUEUE_FILTER* pFilter) + ID3D10InfoQueue::PushStorageFilter +
    + + +

    Pop a storage filter from the top of the storage-filter stack.

    +
    + + bb173803 + void ID3D10InfoQueue::PopStorageFilter() + ID3D10InfoQueue::PopStorageFilter +
    + + +

    Get the size of the storage-filter stack in bytes.

    +
    +

    Size of the storage-filter stack in bytes.

    + + bb173801 + unsigned int ID3D10InfoQueue::GetStorageFilterStackSize() + ID3D10InfoQueue::GetStorageFilterStackSize +
    + + +

    Add storage filters to the top of the retrieval-filter stack.

    +
    +

    Array of retrieval filters (see ).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    A retrieval filter is used to define a subgroup of the messages that are already in the info queue. Retrieval filters affect the messages that will be returned by .

    The number of messages already in the info queue that will be allowed through the retrieval filter can be determined by calling .

    +
    + + bb173782 + HRESULT ID3D10InfoQueue::AddRetrievalFilterEntries([In] D3D10_INFO_QUEUE_FILTER* pFilter) + ID3D10InfoQueue::AddRetrievalFilterEntries +
    + + +

    Get the retrieval filter at the top of the retrieval-filter stack.

    +
    +

    Retrieval filter at the top of the retrieval-filter stack.

    +

    Size of the retrieval filter in bytes. If pFilter is null, the size of the retrieval filter will be output to this parameter.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173798 + HRESULT ID3D10InfoQueue::GetRetrievalFilter([In] void* pFilter,[InOut] SIZE_T* pFilterByteLength) + ID3D10InfoQueue::GetRetrievalFilter +
    + + +

    Remove a retrieval filter from the top of the retrieval-filter stack.

    +
    + + bb173784 + void ID3D10InfoQueue::ClearRetrievalFilter() + ID3D10InfoQueue::ClearRetrievalFilter +
    + + +

    Push an empty retrieval filter onto the retrieval-filter stack.

    +
    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    An empty retrieval filter allows all messages to pass through.

    +
    + + bb173806 + HRESULT ID3D10InfoQueue::PushEmptyRetrievalFilter() + ID3D10InfoQueue::PushEmptyRetrievalFilter +
    + + +

    Push a copy of retrieval filter currently on the top of the retrieval-filter stack onto the retrieval-filter stack.

    +
    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173804 + HRESULT ID3D10InfoQueue::PushCopyOfRetrievalFilter() + ID3D10InfoQueue::PushCopyOfRetrievalFilter +
    + + +

    Push a retrieval filter onto the retrieval-filter stack.

    +
    +

    Pointer to a retrieval filter (see ).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173808 + HRESULT ID3D10InfoQueue::PushRetrievalFilter([In] D3D10_INFO_QUEUE_FILTER* pFilter) + ID3D10InfoQueue::PushRetrievalFilter +
    + + +

    Pop a retrieval filter from the top of the retrieval-filter stack.

    +
    + + bb173802 + void ID3D10InfoQueue::PopRetrievalFilter() + ID3D10InfoQueue::PopRetrievalFilter +
    + + +

    Get the size of the retrieval-filter stack in bytes.

    +
    +

    Size of the retrieval-filter stack in bytes.

    + + bb173799 + unsigned int ID3D10InfoQueue::GetRetrievalFilterStackSize() + ID3D10InfoQueue::GetRetrievalFilterStackSize +
    + + +

    Add a Direct3D 10 debug message to the message queue and send that message to debug output.

    +
    +

    Category of a message (see ).

    +

    Severity of a message (see ).

    +

    Unique identifier of a message (see ).

    +

    User-defined message.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + +

    This method is used by the runtime's internal mechanisms to add Direct3D 10 debug messages to the message queue and send them to debug output. For applications to add their own custom messages to the message queue and send them to debug output, call .

    +
    + + bb173781 + HRESULT ID3D10InfoQueue::AddMessage([In] D3D10_MESSAGE_CATEGORY Category,[In] D3D10_MESSAGE_SEVERITY Severity,[In] D3D10_MESSAGE_ID ID,[In] const char* pDescription) + ID3D10InfoQueue::AddMessage +
    + + +

    Add a user-defined message to the message queue and send that message to debug output.

    +
    +

    Severity of a message (see ).

    +

    Message string.

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173780 + HRESULT ID3D10InfoQueue::AddApplicationMessage([In] D3D10_MESSAGE_SEVERITY Severity,[In] const char* pDescription) + ID3D10InfoQueue::AddApplicationMessage +
    + + +

    Set a message category to break on when a message with that category passes through the storage filter.

    +
    +

    Message category to break on (see ).

    +

    Turns this breaking condition on or off (true for on, false for off).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173810 + HRESULT ID3D10InfoQueue::SetBreakOnCategory([In] D3D10_MESSAGE_CATEGORY Category,[In] BOOL bEnable) + ID3D10InfoQueue::SetBreakOnCategory +
    + + +

    Set a message severity level to break on when a message with that severity level passes through the storage filter.

    +
    +

    Message severity level to break on (see ).

    +

    Turns this breaking condition on or off (true for on, false for off).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173812 + HRESULT ID3D10InfoQueue::SetBreakOnSeverity([In] D3D10_MESSAGE_SEVERITY Severity,[In] BOOL bEnable) + ID3D10InfoQueue::SetBreakOnSeverity +
    + + +

    Set a message identifier to break on when a message with that identifier passes through the storage filter.

    +
    +

    Message identifier to break on (see ).

    +

    Turns this breaking condition on or off (true for on, false for off).

    +

    This method returns one of the following Direct3D 10 Return Codes.

    + + bb173811 + HRESULT ID3D10InfoQueue::SetBreakOnID([In] D3D10_MESSAGE_ID ID,[In] BOOL bEnable) + ID3D10InfoQueue::SetBreakOnID +
    + + +

    Get a message category to break on when a message with that category passes through the storage filter.

    +
    +

    Message category to break on (see ).

    +

    Whether this breaking condition is turned on or off (true for on, false for off).

    + + bb173787 + BOOL ID3D10InfoQueue::GetBreakOnCategory([In] D3D10_MESSAGE_CATEGORY Category) + ID3D10InfoQueue::GetBreakOnCategory +
    + + +

    Get a message severity level to break on when a message with that severity level passes through the storage filter.

    +
    +

    Message severity level to break on (see ).

    +

    Whether this breaking condition is turned on or off (true for on, false for off).

    + + bb173789 + BOOL ID3D10InfoQueue::GetBreakOnSeverity([In] D3D10_MESSAGE_SEVERITY Severity) + ID3D10InfoQueue::GetBreakOnSeverity +
    + + +

    Get a message identifier to break on when a message with that identifier passes through the storage filter.

    +
    +

    Message identifier to break on (see ).

    +

    Whether this breaking condition is turned on or off (true for on, false for off).

    + + bb173788 + BOOL ID3D10InfoQueue::GetBreakOnID([In] D3D10_MESSAGE_ID ID) + ID3D10InfoQueue::GetBreakOnID +
    + + +

    Set a boolean that turns the debug output on or off.

    +
    +

    Disable/Enable the debug output (TRUE to disable or mute the output, to enable the output).

    + +

    This will stop messages that pass the storage filter from being printed out in the debug output, however those messages will still be added to the message queue.

    +
    + + bb173814 + void ID3D10InfoQueue::SetMuteDebugOutput([In] BOOL bMute) + ID3D10InfoQueue::SetMuteDebugOutput +
    + + +

    Get a boolean that turns the debug output on or off.

    +
    +

    Whether the debug output is on or off (true for on, false for off).

    + + bb173792 + BOOL ID3D10InfoQueue::GetMuteDebugOutput() + ID3D10InfoQueue::GetMuteDebugOutput +
    + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3D10InfoQueue::GetMessageW([In] unsigned longlong MessageIndex,[Out, Buffer, Optional] D3D10_MESSAGE* pMessage,[InOut] SIZE_T* pMessageByteLength) + + + + No documentation. + + No documentation. + + HRESULT ID3D10InfoQueue::GetStorageFilter([Out, Buffer, Optional] D3D10_INFO_QUEUE_FILTER* pFilter,[InOut] SIZE_T* pFilterByteLength) + + + + No documentation. + + No documentation. + + HRESULT ID3D10InfoQueue::GetRetrievalFilter([Out, Buffer, Optional] D3D10_INFO_QUEUE_FILTER* pFilter,[InOut] SIZE_T* pFilterByteLength) + + + +

    An input-layout interface accesses the input data for the input-assembler stage.

    +
    + +

    This interface is created by calling ; use to bind it to the graphics pipeline.

    +
    + + bb173815 + ID3D10InputLayout + ID3D10InputLayout +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Initializes a new instance of the object to describe the + input-buffer data for the input-assembler stage. + + ID3D10Device::CreateInputLayout + The device used to create the layout. + An array of input elements describing the layout of the input data. + The compiled shader used to validate the input elements. + + + +

    Applications use the methods of the interface to manipulate mesh objects.

    +
    + +

    To obtain the interface, call .

    +
    + + bb173897 + ID3DX10Mesh + ID3DX10Mesh +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the number of faces in the mesh.

    +
    + + bb173915 + GetFaceCount + GetFaceCount + unsigned int ID3DX10Mesh::GetFaceCount() +
    + + +

    Get the number of vertices in the mesh. A mesh may contain multiple vertex buffers (i.e. one vertex buffer may contain all position data, another may contains all texture coordinate data, etc.), however each vertex buffer will contain the same number of elements.

    +
    + + bb173921 + GetVertexCount + GetVertexCount + unsigned int ID3DX10Mesh::GetVertexCount() +
    + + +

    Get the number of vertex buffers in the mesh.

    +
    + + bb173920 + GetVertexBufferCount + GetVertexBufferCount + unsigned int ID3DX10Mesh::GetVertexBufferCount() +
    + + +

    Retrieves the number of faces in the mesh.

    +
    +

    Returns the number of faces in the mesh.

    + + bb173915 + unsigned int ID3DX10Mesh::GetFaceCount() + ID3DX10Mesh::GetFaceCount +
    + + +

    Get the number of vertices in the mesh. A mesh may contain multiple vertex buffers (i.e. one vertex buffer may contain all position data, another may contains all texture coordinate data, etc.), however each vertex buffer will contain the same number of elements.

    +
    +

    The number of vertices in the mesh.

    + + bb173921 + unsigned int ID3DX10Mesh::GetVertexCount() + ID3DX10Mesh::GetVertexCount +
    + + +

    Get the number of vertex buffers in the mesh.

    +
    +

    The number of vertex buffers in the mesh.

    + + bb173920 + unsigned int ID3DX10Mesh::GetVertexBufferCount() + ID3DX10Mesh::GetVertexBufferCount +
    + + +

    Access the mesh's creation flags.

    +
    +

    The creation flags passed into the options parameter of when the mesh was created. See D3DX10_MESH.

    + + bb173916 + unsigned int ID3DX10Mesh::GetFlags() + ID3DX10Mesh::GetFlags +
    + + +

    Access the vertex description passed into . The vertex description describes the layout of the mesh's vertex buffers.

    +
    + No documentation. + No documentation. +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173922 + HRESULT ID3DX10Mesh::GetVertexDescription([Out, Buffer] const D3D10_INPUT_ELEMENT_DESC** ppDesc,[In] unsigned int* pDeclCount) + ID3DX10Mesh::GetVertexDescription +
    + + +

    Set vertex data into one of the mesh's vertex buffers.

    +
    +

    The vertex buffer to be filled with pData.

    +

    The vertex data to set.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173931 + HRESULT ID3DX10Mesh::SetVertexData([In] unsigned int iBuffer,[In] const void* pData) + ID3DX10Mesh::SetVertexData +
    + + +

    Retrieves the vertex buffer associated with the mesh.

    +
    +

    The vertex buffer to get. This is an index value.

    +

    The vertex buffer. See

    + + bb173919 + HRESULT ID3DX10Mesh::GetVertexBuffer([In] unsigned int iBuffer,[In] ID3DX10MeshBuffer** ppVertexBuffer) + ID3DX10Mesh::GetVertexBuffer +
    + + +

    Set the mesh's index data.

    +
    +

    The index data.

    +

    The number of indices in pData.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173929 + HRESULT ID3DX10Mesh::SetIndexData([In] const void* pData,[In] unsigned int cIndices) + ID3DX10Mesh::SetIndexData +
    + + +

    Retrieves the data in an index buffer.

    +
    +

    Address of a reference to a interface, representing the index buffer associated with the mesh.

    + + bb173917 + HRESULT ID3DX10Mesh::GetIndexBuffer([In] ID3DX10MeshBuffer** ppIndexBuffer) + ID3DX10Mesh::GetIndexBuffer +
    + + +

    Set the mesh's attribute data.

    +
    +

    The attribute data to set.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173927 + HRESULT ID3DX10Mesh::SetAttributeData([In] const void* pData) + ID3DX10Mesh::SetAttributeData +
    + + +

    Access the mesh's attribute buffer.

    +
    +

    The attribute buffer. See .

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173911 + HRESULT ID3DX10Mesh::GetAttributeBuffer([In] ID3DX10MeshBuffer** ppAttributeBuffer) + ID3DX10Mesh::GetAttributeBuffer +
    + + +

    Sets the attribute table for a mesh and the number of entries stored in the table.

    +
    +

    Pointer to an array of structures, representing the entries in the mesh attribute table.

    +

    Number of attributes in the mesh attribute table.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    If an application keeps track of the information in an attribute table, and rearranges the table as a result of changes to attributes or faces, this method allows the application to update the attribute tables instead of calling again.

    +
    + + bb173928 + HRESULT ID3DX10Mesh::SetAttributeTable([In, Buffer] const D3DX10_ATTRIBUTE_RANGE* pAttribTable,[In] unsigned int cAttribTableSize) + ID3DX10Mesh::SetAttributeTable +
    + + +

    Retrieves either an attribute table for a mesh, or the number of entries stored in an attribute table for a mesh.

    +
    +

    Pointer to an array of structures, representing the entries in the mesh's attribute table. Specify null to retrieve the value for pAttribTableSize.

    +

    Pointer to either the number of entries stored in pAttribTable or a value to be filled in with the number of entries stored in the attribute table for the mesh.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    An attribute table is used to identify areas of the mesh that need to be drawn with different textures, render states, materials, and so on. In addition, the application can use the attribute table to hide portions of a mesh by not drawing a given attribute identifier when drawing the frame.

    +
    + + bb173912 + HRESULT ID3DX10Mesh::GetAttributeTable([Out, Buffer, Optional] D3DX10_ATTRIBUTE_RANGE* pAttribTable,[InOut] unsigned int* pAttribTableSize) + ID3DX10Mesh::GetAttributeTable +
    + + +

    Generate a list of mesh edges, as well as a list of faces that share each edge.

    +
    +

    Specifies that vertices that differ in position by less than epsilon should be treated as coincident.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    After an application generates adjacency information for a mesh, the mesh data can be optimized for better drawing performance.

    The order of the entries in the adjacency buffer is determined by the order of the vertex indices in the index buffer. The adjacent triangle 0 always corresponds to the edge between the indices of the corners 0 and 1. The adjacent triangle 1 always corresponds to the edge between the indices of the corners 1 and 2 while the adjacent triangle 2 corresponds to the edge between the indices of the corners 2 and 0.

    +
    + + bb173907 + HRESULT ID3DX10Mesh::GenerateAdjacencyAndPointReps([In] float Epsilon) + ID3DX10Mesh::GenerateAdjacencyAndPointReps +
    + + +

    Adds adjacency data to the mesh's index buffer. When the mesh is to be sent to a geometry shader that takes adjacency data, it is neccessary for the mesh's index buffer to contain adjacency data.

    +
    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173909 + HRESULT ID3DX10Mesh::GenerateGSAdjacency() + ID3DX10Mesh::GenerateGSAdjacency +
    + + +

    Set the mesh's adjacency data.

    +
    +

    The adjacency data to set.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173926 + HRESULT ID3DX10Mesh::SetAdjacencyData([In] const void* pAdjacency) + ID3DX10Mesh::SetAdjacencyData +
    + + +

    Access the mesh's adjacency buffer.

    +
    +

    The adjacency buffer. See .

    + + bb173910 + HRESULT ID3DX10Mesh::GetAdjacencyBuffer([In] ID3DX10MeshBuffer** ppAdjacency) + ID3DX10Mesh::GetAdjacencyBuffer +
    + + +

    Set the point rep data for the mesh.

    +
    +

    The point rep data to set.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173930 + HRESULT ID3DX10Mesh::SetPointRepData([In] const void* pPointReps) + ID3DX10Mesh::SetPointRepData +
    + + +

    Get the mesh's point rep buffer.

    +
    +

    Pointer to a mesh buffer containing the mesh's point rep data. See .

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173918 + HRESULT ID3DX10Mesh::GetPointRepBuffer([In] ID3DX10MeshBuffer** ppPointReps) + ID3DX10Mesh::GetPointRepBuffer +
    + + +

    Removes mesh data from the device that has been committed to the device (with ).

    +
    + No documentation. +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173904 + HRESULT ID3DX10Mesh::Discard([In] D3DX10_MESH_DISCARD_FLAGS dwDiscard) + ID3DX10Mesh::Discard +
    + + +

    Creates a new mesh and fills it with the data of a previously loaded mesh.

    +
    +

    Creation flags to be applied to the new mesh. See D3DX10_MESH.

    +

    The semantic name for the position data.

    +

    Array of structures, describing the vertex format for the returned mesh. See .

    +

    The number of elements in the pDesc array.

    +

    The new mesh.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173902 + HRESULT ID3DX10Mesh::CloneMesh([In] unsigned int Flags,[In] const char* pPosSemantic,[In, Buffer] const D3D10_INPUT_ELEMENT_DESC* pDesc,[In] unsigned int DeclCount,[In] ID3DX10Mesh** ppCloneMesh) + ID3DX10Mesh::CloneMesh +
    + + +

    Generates a new mesh with reordered faces and vertices to optimize drawing performance.

    +
    +

    Specifies the type of optimization to perform. This parameter can be set to a combination of one or more flags from D3DXMESHOPT and D3DXMESH (except D3DXMESH_32BIT, D3DXMESH_IB_WRITEONLY, and D3DXMESH_WRITEONLY).

    +

    An array of UINTs, one per face, that identifies the original mesh face that corresponds to each face in the optimized mesh. If the value supplied for this argument is null, face remap data is not returned.

    +

    Address of a reference to an Interface, which contains a DWORD for each vertex that specifies how the new vertices map to the old vertices. This remap is useful if you need to alter external data based on the new vertex mapping.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    This method generates a new mesh. Before running Optimize, an application must generate an adjacency buffer by calling . The adjacency buffer contains adjacency data, such as a list of edges and the faces that are adjacent to each other.

    This method is very similar to the method, except that it can perform optimization while generating the new clone of the mesh. The output mesh inherits all of the creation parameters of the input mesh.

    +
    + + bb173925 + HRESULT ID3DX10Mesh::Optimize([In] unsigned int Flags,[Out, Buffer, Optional] unsigned int* pFaceRemap,[In] void** ppVertexRemap) + ID3DX10Mesh::Optimize +
    + + +

    Generate an attribute buffer from the data in the mesh's attribute table. An attribute buffer is another format for storing the data in the attribute table. Both the attribute buffer and the attribute table are internal data structures in the mesh.

    +
    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb173908 + HRESULT ID3DX10Mesh::GenerateAttributeBufferFromTable() + ID3DX10Mesh::GenerateAttributeBufferFromTable +
    + + +

    Commit any changes made to a mesh to the device so that the changes can be rendered. This should be called after a mesh's data is altered and before it is rendered. A mesh cannot be rendered unless it is committed to the device. See remarks.

    +
    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    When a mesh is loaded, it's data is loaded into staging resources, meaning the data can be altered but not rendered. When CommitToDevice is called, the data from the staging resources are copied into device resources so that they can be rendered. Although the data is committed to the device, the staging resources remain and can be modified. If any modifications are made to the staging resources, the staging resources must be committed to the device again in order for those changes to be rendered on screen.

    +
    + + bb173903 + HRESULT ID3DX10Mesh::CommitToDevice() + ID3DX10Mesh::CommitToDevice +
    + + +

    Draws a subset of a mesh.

    +
    +

    Specifies which subset of the mesh to draw. This value is used to differentiate faces in a mesh as belonging to one or more attribute groups.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    An attribute table is used to identify areas of the mesh that need to be drawn with different textures, render states, materials, and so on. In addition, the application can use the attribute table to hide portions of a mesh by not drawing a given attribute identifier (AttribId) when drawing the frame.

    +
    + + bb173905 + HRESULT ID3DX10Mesh::DrawSubset([In] unsigned int AttribId) + ID3DX10Mesh::DrawSubset +
    + + +

    Draw several instances of the same subset of a mesh.

    +
    +

    Specifies which subset of the mesh to draw. This value is used to differentiate faces in a mesh as belonging to one or more attribute groups. See remarks.

    +

    Number of instances to render.

    +

    Which instance to start fetching from in each buffer marked as instance data.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    A mesh contains an attribute table. The attribute table can divide a mesh into subsets, where each subset is identified with an attribute ID. For example, a mesh with 200 faces, divided into three subsets, might have an attribute table that looks like this:

    AttribID 0Faces 0 ~ 50
    AttribID 1Faces 51 ~ 125
    AttribID 2Faces 126 ~ 200

    ?

    Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Indexing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data.

    Drawing instances with DrawSubsetInstanced is very similar to the process used with that is outlined in Instancing Sample. The key difference when using DrawSubsetInstanced is that vertex and index buffers must be extracted from the Interface object before the instancing data can be combined.

    The following code illustrates extracting the vertex and index buffers from the mesh object.

     * vertexBuffer; pDeviceObj->pMesh->GetDeviceVertexBuffer(0, &vertexBuffer); * indexBuffer; pDeviceObj->pMesh->GetDeviceIndexBuffer(&indexBuffer); 
    +
    + + bb173906 + HRESULT ID3DX10Mesh::DrawSubsetInstanced([In] unsigned int AttribId,[In] unsigned int InstanceCount,[In] unsigned int StartInstanceLocation) + ID3DX10Mesh::DrawSubsetInstanced +
    + + +

    Access the mesh's vertex buffer after it has been committed to the device with . This is different from , which returns the vertex buffer before it has been committed to the device.

    +
    + No documentation. + No documentation. + + bb173914 + HRESULT ID3DX10Mesh::GetDeviceVertexBuffer([In] unsigned int iBuffer,[In] ID3D10Buffer** ppVertexBuffer) + ID3DX10Mesh::GetDeviceVertexBuffer +
    + + +

    Access the mesh's index buffer after it has been committed to the device with . This is different from , which returns the index buffer before it has been committed to the device.

    +
    + No documentation. + +

    If the mesh's index buffer has not already been committed to the device, this API will automatically commit the index buffer before it returns a reference to the buffer.

    +
    + + bb173913 + HRESULT ID3DX10Mesh::GetDeviceIndexBuffer([In] ID3D10Buffer** ppIndexBuffer) + ID3DX10Mesh::GetDeviceIndexBuffer +
    + + + Creates a mesh object using a declarator. + + Pointer to an , the device object to be associated with the mesh. + Array of elements, describing the vertex format for the returned mesh. This parameter must map directly to a flexible vertex format (FVF). + Semantic that identifies which part of the vertex declaration contains position information. + Number of vertices for the mesh. This parameter must be greater than 0. + Number of faces for the mesh. The valid range for this number is greater than 0, and one less than the maximum DWORD (typically 65534), because the last index is reserved. + Combination of one or more flags from the , specifying options for the mesh. + HRESULT D3DX10CreateMesh([None] ID3D10Device* pDevice,[In, Buffer] const D3D10_INPUT_ELEMENT_DESC* pDeclaration,[None] int DeclCount,[None] const char* pPositionSemantic,[None] int VertexCount,[None] int FaceCount,[None] int Options,[None] ID3DX10Mesh** ppMesh) + + + + Creates a new mesh and fills it with the data of a previously loaded mesh. + + The semantic name for the position data. + Array of structures, describing the vertex format for the returned mesh. See . + Creation flags to be applied to the new mesh. See . + returns the Mesh cloned. + HRESULT ID3DX10Mesh::CloneMesh([None] int Flags,[None] const char* pPosSemantic,[In, Buffer] const D3D10_INPUT_ELEMENT_DESC* pDesc,[None] int DeclCount,[None] ID3DX10Mesh** ppCloneMesh) + + + + Access the mesh's creation flags. + + The creation flags passed into the options parameter of when the mesh was created. See {{D3DX10_MESH}}. + int ID3DX10Mesh::GetFlags() + + + + Access the mesh's attribute buffer. + + Returns the attribute buffer. See . + HRESULT ID3DX10Mesh::GetAttributeBuffer([None] ID3DX10MeshBuffer** ppAttribute) + + + + Retrieves either an attribute table for a mesh, or the number of entries stored in an attribute table for a mesh. + + + An attribute table is used to identify areas of the mesh that need to be drawn with different textures, render states, materials, and so on. In addition, the application can use the attribute table to hide portions of a mesh by not drawing a given attribute identifier when drawing the frame. + + Returns an array of structures, representing the entries in the mesh's attribute table. + HRESULT ID3DX10Mesh::GetAttributeTable([Out, Buffer, Optional] D3DX10_ATTRIBUTE_RANGE* pAttribTable,[None] int* pAttribTableSize) + + + + Get the mesh's point rep buffer. + + Returns a mesh buffer containing the mesh's point rep data. See . + HRESULT ID3DX10Mesh::GetPointRepBuffer([None] ID3DX10MeshBuffer** ppPointReps) + + + + Optimizes the mesh data. + + Flags indicating which optimizations to perform. + A result code. + + + + Generates a new mesh with reordered faces and vertices to optimize drawing performance. + + + This method generates a new mesh. Before running Optimize, an application must generate an adjacency buffer by calling . The adjacency buffer contains adjacency data, such as a list of edges and the faces that are adjacent to each other. This method is very similar to the method, except that it can perform optimization while generating the new clone of the mesh. The output mesh inherits all of the creation parameters of the input mesh. + + Specifies the type of optimization to perform. This parameter can be set to a combination of one or more flags from D3DXMESHOPT and D3DXMESH (except D3DXMESH_32BIT, D3DXMESH_IB_WRITEONLY, and D3DXMESH_WRITEONLY). + An array of UINTs, one per face, that identifies the original mesh face that corresponds to each face in the optimized mesh. + An array of index for each vertex that specifies how the new vertices map to the old vertices. This remap is useful if you need to alter external data based on the new vertex mapping. + The return value is one of the values listed in {{Direct3D 10 Return Codes}}. + HRESULT ID3DX10Mesh::Optimize([None] int Flags,[Out, Buffer, Optional] int* pFaceRemap,[In] LPD3D10BLOB* ppVertexRemap) + + + + Set the mesh's adjacency data. + + The adjacency data to set + The return value is one of the values listed in {{Direct3D 10 Return Codes}}. + HRESULT ID3DX10Mesh::SetAdjacencyData([In] const int* pAdjacency) + + + + Set the mesh's attribute data. + + The attribute data to set. + The return value is one of the values listed in {{Direct3D 10 Return Codes}}. + HRESULT ID3DX10Mesh::SetAttributeData([In] const int* pData) + + + + Sets the attribute table for a mesh and the number of entries stored in the table. + + + If an application keeps track of the information in an attribute table, and rearranges the table as a result of changes to attributes or faces, this method allows the application to update the attribute tables instead of calling ID3DX10Mesh::Optimize again. + + an array of structures, representing the entries in the mesh attribute table. + The return value is one of the values listed in {{Direct3D 10 Return Codes}}. + HRESULT ID3DX10Mesh::SetAttributeTable([In, Buffer] const D3DX10_ATTRIBUTE_RANGE* pAttribTable,[None] int cAttribTableSize) + + + + Set the mesh's index data. + + The index data. + The number of indices in pData. + The return value is one of the values listed in {{Direct3D 10 Return Codes}}. + HRESULT ID3DX10Mesh::SetIndexData([None] const void* pData,[None] int cIndices) + + + + Set the point rep data for the mesh. + + The point rep data to set. + The return value is one of the values listed in {{Direct3D 10 Return Codes}}. + HRESULT ID3DX10Mesh::SetPointRepData([None] const int* pPointReps) + + + + Set vertex data into one of the mesh's vertex buffers. + + The vertex buffer to be filled with pData. + The vertex data to set. + The return value is one of the values listed in {{Direct3D 10 Return Codes}}. + HRESULT ID3DX10Mesh::SetVertexData([None] int iBuffer,[None] const void* pData) + + + +

    A mesh buffer is a buffer that contains data about a mesh. It can contain one of five different types of data: vertex data, index data, adjacency data, attribute data, or point rep data. The structure is used to access these five pieces of data through the following five APIs: , , , , or .

    +
    + + bb173898 + ID3DX10MeshBuffer + ID3DX10MeshBuffer +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the size of the mesh buffer, in bytes.

    +
    + + bb173899 + GetSize + GetSize + SIZE_T ID3DX10MeshBuffer::GetSize() +
    + + +

    Get a reference to the mesh buffer memory to modify its contents.

    +
    +

    Pointer to the buffer data.

    +

    Size of the buffer in bytes.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    Differences between Direct3D 9 and Direct3D 10:

    Map() in Direct3D 10 is analogous to resource Map() in Direct3D 9.

    ?

    +
    + + bb173900 + HRESULT ID3DX10MeshBuffer::Map([Out] void** ppData,[Out] SIZE_T* pSize) + ID3DX10MeshBuffer::Map +
    + + +

    Unmap a buffer.

    +
    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + +

    Differences between Direct3D 9 and Direct3D 10:

    Unmap() in Direct3D 10 is analogous to resource Unlock() in Direct3D 9.

    ?

    +
    + + bb173901 + HRESULT ID3DX10MeshBuffer::Unmap() + ID3DX10MeshBuffer::Unmap +
    + + +

    Get the size of the mesh buffer, in bytes.

    +
    +

    The size of the mesh buffer, in bytes.

    + + bb173899 + SIZE_T ID3DX10MeshBuffer::GetSize() + ID3DX10MeshBuffer::GetSize +
    + + + Get a reference to the mesh buffer memory to modify its contents. + + + Differences between Direct3D 9 and Direct3D 10: Map() in Direct3D 10 is analogous to resource Map() in Direct3D 9. ? + + Returns a reference to the mesh buffer memory to modify its contents + HRESULT ID3DX10MeshBuffer::Map([Out] void** ppData,[Out] SIZE_T* pSize) + + + +

    A pixel-shader interface manages an executable program (a pixel shader) that controls the pixel-shader stage.

    +
    + +

    The pixel-shader interface has no methods; use HLSL to implement your shader functionality. All shaders in Direct3D 10 are implemented from a common set of features referred to as the common shader core.

    To create a pixel shader interface, call . Before using a pixel shader you must bind it to the device by calling .

    This interface is defined in D3D10.h.

    +
    + + bb173821 + ID3D10PixelShader + ID3D10PixelShader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + + + +

    The device interface represents a virtual adapter for Direct3D 10.0; it is used to perform rendering and create Direct3D resources.

    +
    + +

    A device is created using .

    +
    + + bb173528 + ID3D10Device + ID3D10Device +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Bind an array of shader resources to the pixel shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    If you bind a subresource as an input and an output, this API will fill the destination shader resource slot with null. The debug layer (when active) will alert you if this is true.

    For information about creating shader-resource views, see .

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173606 + void ID3D10Device::PSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::PSSetShaderResources +
    + + +

    Bind an array of shader resources to the pixel shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    If you bind a subresource as an input and an output, this API will fill the destination shader resource slot with null. The debug layer (when active) will alert you if this is true.

    For information about creating shader-resource views, see .

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173606 + void ID3D10Device::PSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::PSSetShaderResources +
    + + +

    Bind an array of shader resources to the pixel shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    If you bind a subresource as an input and an output, this API will fill the destination shader resource slot with null. The debug layer (when active) will alert you if this is true.

    For information about creating shader-resource views, see .

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173606 + void ID3D10Device::PSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::PSSetShaderResources +
    + + +

    Sets a pixel shader to the device.

    +
    +

    Pointer to a pixel shader (see ). Passing in null disables the shader for this pipeline stage.

    + +

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173605 + void ID3D10Device::PSSetShader([In, Optional] ID3D10PixelShader* pPixelShader) + ID3D10Device::PSSetShader +
    + + +

    Set an array of sampler states to the pixel shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

    StateDefault Value
    Filter
    AddressU
    AddressV
    AddressW
    MipLODBias0
    MaxAnisotropy1
    ComparisonFunc
    BorderColor[0]1.0f
    BorderColor[1]1.0f
    BorderColor[2]1.0f
    BorderColor[3]1.0f
    MinLOD-FLT_MAX
    MaxLODFLT_MAX

    ?

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173604 + void ID3D10Device::PSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const ID3D10SamplerState** ppSamplers) + ID3D10Device::PSSetSamplers +
    + + +

    Set an array of sampler states to the pixel shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

    StateDefault Value
    Filter
    AddressU
    AddressV
    AddressW
    MipLODBias0
    MaxAnisotropy1
    ComparisonFunc
    BorderColor[0]1.0f
    BorderColor[1]1.0f
    BorderColor[2]1.0f
    BorderColor[3]1.0f
    MinLOD-FLT_MAX
    MaxLODFLT_MAX

    ?

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173604 + void ID3D10Device::PSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const ID3D10SamplerState** ppSamplers) + ID3D10Device::PSSetSamplers +
    + + +

    Set an array of sampler states to the pixel shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

    StateDefault Value
    Filter
    AddressU
    AddressV
    AddressW
    MipLODBias0
    MaxAnisotropy1
    ComparisonFunc
    BorderColor[0]1.0f
    BorderColor[1]1.0f
    BorderColor[2]1.0f
    BorderColor[3]1.0f
    MinLOD-FLT_MAX
    MaxLODFLT_MAX

    ?

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173604 + void ID3D10Device::PSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const ID3D10SamplerState** ppSamplers) + ID3D10Device::PSSetSamplers +
    + + +

    Set the constant buffers used by the pixel shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173603 + void ID3D10Device::PSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppConstantBuffers) + ID3D10Device::PSSetConstantBuffers +
    + + +

    Set the constant buffers used by the pixel shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173603 + void ID3D10Device::PSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppConstantBuffers) + ID3D10Device::PSSetConstantBuffers +
    + + +

    Set the constant buffers used by the pixel shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173603 + void ID3D10Device::PSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppConstantBuffers) + ID3D10Device::PSSetConstantBuffers +
    + + +

    Get the pixel shader resources.

    +
    +

    Index into the device's zero-based array to begin getting shader resources from.

    +

    The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources.

    +

    Array of shader resource view interfaces to be returned by the device.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173602 + void ID3D10Device::PSGetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[Out, Buffer, Optional] ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::PSGetShaderResources +
    + + +

    Get the pixel shader currently set on the device.

    +
    +

    Address of a reference to a pixel shader (see ) to be returned by the method.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173601 + void ID3D10Device::PSGetShader([Out] ID3D10PixelShader** ppPixelShader) + ID3D10Device::PSGetShader +
    + + +

    Get an array of sampler states from the pixel shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173600 + void ID3D10Device::PSGetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[Out, Buffer, Optional] ID3D10SamplerState** ppSamplers) + ID3D10Device::PSGetSamplers +
    + + +

    Get the constant buffers used by the pixel shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173599 + void ID3D10Device::PSGetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D10Buffer** ppConstantBuffers) + ID3D10Device::PSGetConstantBuffers +
    + + +

    A predicate interface determines whether geometry should be processed depending on the results of a previous draw call.

    +
    + +

    A predicate can be created with , and used with .

    There are two types of predicates in Direct3D 10: stream-output-overflow predicates and occlusion predicates. Stream-output-overflow predicates will cause any geometry residing in stream-output buffers that were overflowed to not be processed. Occlusion predicates will cause any geometry that did not have a single sample pass the depth/stencil tests to not be processed.

    For an example of occlusion-predicated rendering, see Draw Predicated Sample.

    +
    + + bb173822 + ID3D10Predicate + ID3D10Predicate +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The query description. + The newly created object. + + + +

    A query interface queries information from the GPU.

    +
    + +

    A query can be created with .

    This interface inherits the functionality of an Interface.

    Query data is typically gathered by issuing an command, issuing some graphics commands, issuing an command, and then calling to get data about what happened in between the Begin and End calls. The data returned by GetData will be different depending on the type of query.

    There are, however, some queries that do not require calls to Begin. For a list of possible queries see .

    A query is typically executed as shown in the following code:

     queryDesc; ... // Fill out queryDesc structure  * pQuery;	
    +            pDevice->CreateQuery(&queryDesc, &pQuery); pQuery->Begin(); ... // Issue graphis commands, do whatever pQuery->End(); UINT64 queryData; // This data type is different depending on the query type while(  != pQuery->GetData(&queryData, sizeof(UINT64), 0) )	
    +            {	
    +            }	
    +            

    When using a query that does not require a call to Begin, it still requires a call to End. The call to End causes the data returned by GetData to be accurate up until the last call to End.

    +
    + + bb173823 + ID3D10Query + ID3D10Query +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a query description.

    +
    + + bb173824 + GetDesc + GetDesc + void ID3D10Query::GetDesc([Out] D3D10_QUERY_DESC* pDesc) +
    + + +

    Get a query description.

    +
    +

    Pointer to a query description (see ).

    + + bb173824 + void ID3D10Query::GetDesc([Out] D3D10_QUERY_DESC* pDesc) + ID3D10Query::GetDesc +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The query description. + The newly created object. + + + +

    A rasterizer-state interface accesses rasterizer state for the rasterizer stage.

    +
    + +

    A rasterizer-state object is created with and bound to the pipeline with .

    +
    + + bb173825 + ID3D10RasterizerState + ID3D10RasterizerState +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of a rasterizer-state object.

    +
    + + bb173826 + GetDesc + GetDesc + void ID3D10RasterizerState::GetDesc([Out] D3D10_RASTERIZER_DESC* pDesc) +
    + + +

    Get the properties of a rasterizer-state object.

    +
    +

    Pointer to a rasterizer-state description (see ).

    + + bb173826 + void ID3D10RasterizerState::GetDesc([Out] D3D10_RASTERIZER_DESC* pDesc) + ID3D10RasterizerState::GetDesc +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + +

    A render-target-view interface identifies the render-target subresources that can be accessed during rendering.

    +
    + +

    To create a render-target view, call . To bind a render-target view to the pipeline, call .

    A rendertarget is a resource that can be written by the output-merger stage at the end of a render pass. Each render-target should also have a corresponding depth-stencil view.

    +
    + + bb173827 + ID3D10RenderTargetView + ID3D10RenderTargetView +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of a render target view.

    +
    + + bb173828 + GetDesc + GetDesc + void ID3D10RenderTargetView::GetDesc([Out] D3D10_RENDER_TARGET_VIEW_DESC* pDesc) +
    + + +

    Get the properties of a render target view.

    +
    +

    Pointer to the description of a render target view (see ).

    + + bb173828 + void ID3D10RenderTargetView::GetDesc([Out] D3D10_RENDER_TARGET_VIEW_DESC* pDesc) + ID3D10RenderTargetView::GetDesc +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the RenderTarget flag. + ID3D10Device::CreateRenderTargetView + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the RenderTarget flag. + A structure describing the to be created. + ID3D10Device::CreateRenderTargetView + + + +

    A resource interface provides common actions on all resources.

    +
    + +

    A resource interface cannot be created directly; instead, buffers and textures are created that inherit from a resource interface (see Creating Buffer Resources or Creating Texture Resources).

    +
    + + bb173829 + ID3D10Resource + ID3D10Resource +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant MaximumMipLevels. + D3D10_REQ_MIP_LEVELS + + + Constant ResourceSizeInMegabytes. + D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES + + + Constant MaximumTexture1DArraySize. + D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION + + + Constant MaximumTexture2DArraySize. + D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION + + + Constant MaximumTexture1DSize. + D3D10_REQ_TEXTURE1D_U_DIMENSION + + + Constant MaximumTexture2DSize. + D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION + + + Constant MaximumTexture3DSize. + D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION + + + Constant MaximumTextureCubeSize. + D3D10_REQ_TEXTURECUBE_DIMENSION + + + +

    Get the type of the resource.

    +
    + + bb173831 + GetType + GetType + void ID3D10Resource::GetType([Out] D3D10_RESOURCE_DIMENSION* rType) +
    + + +

    Get or sets the eviction priority of a resource.

    +
    + +

    This method is a wrapper for GetEvictionPriority and is provided in the Interface interface for convenience.

    +
    + + bb173830 + GetEvictionPriority / SetEvictionPriority + GetEvictionPriority + unsigned int ID3D10Resource::GetEvictionPriority() +
    + + +

    Get the type of the resource.

    +
    +

    Pointer to the resource type (see ).

    + + bb173831 + void ID3D10Resource::GetType([Out] D3D10_RESOURCE_DIMENSION* rType) + ID3D10Resource::GetType +
    + + +

    Set the eviction priority of a resource.

    +
    +

    Eviction priority for the resource, which is one of the following values:

    + +

    Resource priorities determine which resource to evict from video memory when the system has run out of video memory. The resource will not be lost; it will be removed from video memory and placed into system memory, or possibly placed onto the hard drive. The resource will be loaded back into video memory when it is required.

    A resource that is set to the maximum priority, , is only evicted if there is no other way of resolving the incoming memory request. The Windows Display Driver Model (WDDM) tries to split an incoming memory request to its minimum size and evict lower-priority resources before evicting a resource with maximum priority.

    Changing the priorities of resources should be done carefully. The wrong eviction priorities could be a detriment to performance rather than an improvement. See QueryResourceResidency for additional information.

    This method is a wrapper for SetEvictionPriority and is provided in the Interface interface for convenience.

    +
    + + bb173832 + void ID3D10Resource::SetEvictionPriority([In] unsigned int EvictionPriority) + ID3D10Resource::SetEvictionPriority +
    + + +

    Get the eviction priority of a resource.

    +
    +

    One of the following values, which specifies the eviction priority for the resource:

    + +

    This method is a wrapper for GetEvictionPriority and is provided in the Interface interface for convenience.

    +
    + + bb173830 + unsigned int ID3D10Resource::GetEvictionPriority() + ID3D10Resource::GetEvictionPriority +
    + + + Gets a swap chain back buffer. + + The type of the buffer. + The swap chain to get the buffer from. + The index of the desired buffer. + The buffer interface, or null on failure. + + + + Loads a texture from an image file. + + The device used to load the texture. + Path to the file on disk. + The loaded texture object. + + + + Loads a texture from an image file. + + The device used to load the texture. + Path to the file on disk. + Specifies information used to load the texture. + The loaded texture object. + + + + Loads a texture from an image in memory. + + The device used to load the texture. + Array of memory containing the image data to load. + The loaded texture object. + + + + Loads a texture from an image in memory. + + The device used to load the texture. + Array of memory containing the image data to load. + Specifies information used to load the texture. + The loaded texture object. + + + + Loads a texture from a stream of data. + + The device used to load the texture. + A stream containing the image data to load. + Size of the image to load. + The loaded texture object. + + + + Loads a texture from a stream of data. + + The device used to load the texture. + A stream containing the image data to load. + Size of the image to load. + Specifies information used to load the texture. + The loaded texture object. + + + + Saves a texture to file. + + The texture to save. + The format the texture will be saved as. + Name of the destination output file where the texture will be saved. + A object describing the result of the operation. + + + + Saves a texture to a stream. + + The texture to save. + The format the texture will be saved as. + Destination memory stream where the image will be saved. + A object describing the result of the operation. + + + + Load a texture from a texture. + + Pointer to the source texture. See . + Pointer to the destination texture. See . + Pointer to texture loading parameters. See . + The return value is one of the values listed in {{Direct3D 10 Return Codes}}. + HRESULT D3DX10LoadTextureFromTexture([None] ID3D10Resource* pSrcTexture,[None] D3DX10_TEXTURE_LOAD_INFO* pLoadInfo,[None] ID3D10Resource* pDstTexture) + + + + Generates mipmap chain using a particular texture filter. + + The mipmap level whose data is used to generate the rest of the mipmap chain. + Flags controlling how each miplevel is filtered (or D3DX10_DEFAULT for D3DX10_FILTER_BOX). See . + The return value is one of the values listed in {{Direct3D 10 Return Codes}}. + HRESULT D3DX10FilterTexture([None] ID3D10Resource* pTexture,[None] int SrcLevel,[None] int MipFilter) + + + + Returns a DXGI Surface for this resource. + + The buffer interface, or null on failure. + + + + Calculates a subresource index. + + The index of the desired mip slice. + The index of the desired array slice. + The total number of mip levels. + The subresource index (equivalent to mipSlice + (arraySlice * mipLevels)). + + + + Calculate the MipSize + + + + + + + +

    A view interface specifies the parts of a resource the pipeline can access during rendering (see view).

    +
    + +

    A view interface is the base interface for all views. There are three types of views; a depth-stencil view, a render-target view, and a shader-resource view.

    • To create a render-target view, call .
    • To create a depth-stencil view, call .
    • To create a shader-resource view, call .

    All resources must be bound to the pipeline before they can be accessed.

    • To bind a render-target view or a depth-stencil view, call .
    • To bind a shader-resource view, call .

    A view can also be used to access a typeless resource.

    +
    + + bb173876 + ID3D10View + ID3D10View +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the resource that is accessed through this view.

    +
    + +

    This function increments the reference count of the resource by one, so it is necessary to call Release on the returned reference when the application is done with it. Destroying (or losing) the returned reference before Release is called will result in a memory leak.

    +
    + + bb173877 + GetResource + GetResource + void ID3D10View::GetResource([Out] ID3D10Resource** ppResource) +
    + + +

    Get the resource that is accessed through this view.

    +
    +

    Address of a reference to the resource that is accessed through this view. (See .)

    + +

    This function increments the reference count of the resource by one, so it is necessary to call Release on the returned reference when the application is done with it. Destroying (or losing) the returned reference before Release is called will result in a memory leak.

    +
    + + bb173877 + void ID3D10View::GetResource([Out] ID3D10Resource** ppResource) + ID3D10View::GetResource +
    + + +

    A sampler-state interface accesses sampler state for a texture.

    +
    + +

    Create a sampler-state object by calling .

    To initialize sampler state, bind the sampler-state object to the pipeline by calling , , or .

    +
    + + bb173833 + ID3D10SamplerState + ID3D10SamplerState +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the sampler state.

    +
    + + bb173834 + GetDesc + GetDesc + void ID3D10SamplerState::GetDesc([Out] D3D10_SAMPLER_DESC* pDesc) +
    + + +

    Get the sampler state.

    +
    +

    A reference to the sampler state (see ).

    + + bb173834 + void ID3D10SamplerState::GetDesc([Out] D3D10_SAMPLER_DESC* pDesc) + ID3D10SamplerState::GetDesc +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + +

    A shader-resource-view interface specifies the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, a texture or a sampler.

    +
    + +

    To create a shader-resource view, call .

    A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling , or .

    +
    + + bb173854 + ID3D10ShaderResourceView + ID3D10ShaderResourceView +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the shader resource view's description.

    +
    + + bb173855 + GetDesc + GetDesc + void ID3D10ShaderResourceView::GetDesc([Out] D3D10_SHADER_RESOURCE_VIEW_DESC* pDesc) +
    + + +

    Get the shader resource view's description.

    +
    +

    A reference to a structure to be filled with data about the shader resource view.

    + + bb173855 + void ID3D10ShaderResourceView::GetDesc([Out] D3D10_SHADER_RESOURCE_VIEW_DESC* pDesc) + ID3D10ShaderResourceView::GetDesc +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the ShaderResource flag. + ID3D10Device::CreateShaderResourceView + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the ShaderResource flag. + A structure describing the to be created. + ID3D10Device::CreateShaderResourceView + + + + Create a shader-resource view from a file. Read the characteristics of a texture when the texture is loaded. + + A reference to the device (see ) that will use the resource. + Name of the file that contains the shader-resource view. + Returns a reference to the shader-resource view (see ). + HRESULT D3DX10CreateShaderResourceViewFromFileW([None] ID3D10Device* pDevice,[None] const wchar_t* pSrcFile,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[None] ID3DX10ThreadPump* pPump,[None] ID3D10ShaderResourceView** ppShaderResourceView,[None] HRESULT* pHResult) + + + + Create a shader-resource view from a file. + + A reference to the device (see ) that will use the resource. + Name of the file that contains the shader-resource view. + Identifies the characteristics of a texture (see ) when the data processor is created. + Returns a reference to the shader-resource view (see ). + HRESULT D3DX10CreateShaderResourceViewFromFileW([None] ID3D10Device* pDevice,[None] const wchar_t* pSrcFile,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[None] ID3DX10ThreadPump* pPump,[None] ID3D10ShaderResourceView** ppShaderResourceView,[None] HRESULT* pHResult) + + + + Create a shader-resource view from a file in memory. + + A reference to the device (see ) that will use the resource. + Pointer to a memory location that contains the shader-resource view. + Returns a reference to the shader-resource view (see ). + HRESULT D3DX10CreateShaderResourceViewFromMemory([None] ID3D10Device* pDevice,[None] const void* pSrcData,[None] SIZE_T SrcDataSize,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[None] ID3DX10ThreadPump* pPump,[None] ID3D10ShaderResourceView** ppShaderResourceView,[None] HRESULT* pHResult) + + + + Create a shader-resource view from a file in memory. + + A reference to the device (see ) that will use the resource. + Pointer to a memory location that contains the shader-resource view. + Identifies the characteristics of a texture (see ) when the data processor is created. + Returns a reference to the shader-resource view (see ). + HRESULT D3DX10CreateShaderResourceViewFromMemory([None] ID3D10Device* pDevice,[None] const void* pSrcData,[None] SIZE_T SrcDataSize,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[None] ID3DX10ThreadPump* pPump,[None] ID3D10ShaderResourceView** ppShaderResourceView,[None] HRESULT* pHResult) + + + + Create a shader-resource view from a file in a stream.. + + A reference to the device (see ) that will use the resource. + Pointer to the file in memory that contains the shader-resource view. + Size of the file to read from the stream + Returns a reference to the shader-resource view (see ). + HRESULT D3DX10CreateShaderResourceViewFromMemory([None] ID3D10Device* pDevice,[None] const void* pSrcData,[None] SIZE_T SrcDataSize,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[None] ID3DX10ThreadPump* pPump,[None] ID3D10ShaderResourceView** ppShaderResourceView,[None] HRESULT* pHResult) + + + + Create a shader-resource view from a file in a stream.. + + A reference to the device (see ) that will use the resource. + Pointer to the file in memory that contains the shader-resource view. + Size of the file to read from the stream + Identifies the characteristics of a texture (see ) when the data processor is created. + Returns a reference to the shader-resource view (see ). + HRESULT D3DX10CreateShaderResourceViewFromMemory([None] ID3D10Device* pDevice,[None] const void* pSrcData,[None] SIZE_T SrcDataSize,[In, Optional] D3DX10_IMAGE_LOAD_INFO* pLoadInfo,[None] ID3DX10ThreadPump* pPump,[None] ID3D10ShaderResourceView** ppShaderResourceView,[None] HRESULT* pHResult) + + + +

    A shader-resource-view interface specifies the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, a texture or a sampler.

    +
    + +

    To create a shader-resource view, call .

    A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling , or .

    This method requires Windows Vista Service Pack 1.

    +
    + + bb694557 + ID3D10ShaderResourceView1 + ID3D10ShaderResourceView1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the shader resource view's description.

    +
    + +

    This method requires Windows Vista Service Pack 1.

    +
    + + bb694558 + GetDesc1 + GetDesc1 + void ID3D10ShaderResourceView1::GetDesc1([Out] D3D10_SHADER_RESOURCE_VIEW_DESC1* pDesc) +
    + + +

    Get the shader resource view's description.

    +
    +

    A reference to a structure to be filled with data about the shader resource view.

    + +

    This method requires Windows Vista Service Pack 1.

    +
    + + bb694558 + void ID3D10ShaderResourceView1::GetDesc1([Out] D3D10_SHADER_RESOURCE_VIEW_DESC1* pDesc) + ID3D10ShaderResourceView1::GetDesc1 +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the ShaderResource flag. + ID3D10Device1::CreateShaderResourceView1 + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the ShaderResource flag. + A structure describing the to be created. + ID3D10Device1::CreateShaderResourceView1 + + + +

    allows you to optimize, process, and manually set the relationship between bones and vertices in your meshes (see Skeletal Animation on Wikipedia). It is most useful for making .x files exported by DCC Apps (such as 3DS Max and Maya) more hardware-friendly, and for improving the render speed of your skinned meshes in software render mode.

    +
    + +

    Create a interface with , D3DX10CreateSkinInfoFromBlendedMesh, or D3DX10CreateSkinInfoFVF.

    The LPD3DX10SKININFO type is defined as a reference to the interface.

     typedef struct  *LPD3DX10SKININFO;	
    +            
    +
    + + bb173932 + ID3DX10SkinInfo + ID3DX10SkinInfo +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the number of vertices in .

    +
    + + bb173945 + GetNumVertices + GetNumVertices + unsigned int ID3DX10SkinInfo::GetNumVertices() +
    + + +

    Get the number of bones in .

    +
    + + bb173944 + GetNumBones + GetNumBones + unsigned int ID3DX10SkinInfo::GetNumBones() +
    + + +

    Get the number of vertices a bone can maximally influence.

    +
    + + bb173943 + GetMaxBoneInfluences + GetMaxBoneInfluences + unsigned int ID3DX10SkinInfo::GetMaxBoneInfluences() +
    + + +

    Get the number of vertices in .

    +
    +

    The number of vertices in .

    + + bb173945 + unsigned int ID3DX10SkinInfo::GetNumVertices() + ID3DX10SkinInfo::GetNumVertices +
    + + +

    Get the number of bones in .

    +
    +

    The number of bones in .

    + + bb173944 + unsigned int ID3DX10SkinInfo::GetNumBones() + ID3DX10SkinInfo::GetNumBones +
    + + +

    Get the number of vertices a bone can maximally influence.

    +
    +

    The number of vertices a bone can maximally influence.

    + + bb173943 + unsigned int ID3DX10SkinInfo::GetMaxBoneInfluences() + ID3DX10SkinInfo::GetMaxBoneInfluences +
    + + +

    Allocate space for additional vertices.

    +
    +

    The number of vertices to add.

    +

    If this method succeeds, the return value is . If the method fails, the return value can be: E_OUTOFMEMORY.

    + + bb173935 + HRESULT ID3DX10SkinInfo::AddVertices([In] unsigned int Count) + ID3DX10SkinInfo::AddVertices +
    + + +

    Change which vertices are influenced by which bones.

    +
    +

    The new number of vertices.

    +

    A reference to an array of vertex indices, which describe the remapping. For example, say SkinInfo contains some vertices such that bone0 is mapped to v0, bone1 to v1, and bone2 to v2, and array with 2,1,0 is specified for pBoneRemap. This will cause bone0 to be mapped to v2, bone1 to v1, and bone2 to v0.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: E_OUTOFMEMORY or E_INVALIDARG.

    + + bb173947 + HRESULT ID3DX10SkinInfo::RemapVertices([In] unsigned int NewVertexCount,[In, Buffer] unsigned int* pVertexRemap) + ID3DX10SkinInfo::RemapVertices +
    + + +

    Allocate space for more bones.

    +
    +

    The number of bones to add.

    +

    If this method succeeds, the return value is . If the method fails, the return value can be: E_OUTOFMEMORY.

    + + bb173934 + HRESULT ID3DX10SkinInfo::AddBones([In] unsigned int Count) + ID3DX10SkinInfo::AddBones +
    + + +

    Remove a bone.

    +
    +

    An index that specifies which bone to remove. Must be between 0 and the value returned by .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: E_INVALIDARG.

    + + bb173948 + HRESULT ID3DX10SkinInfo::RemoveBone([In] unsigned int Index) + ID3DX10SkinInfo::RemoveBone +
    + + +

    Change which bones influence which vertices.

    +
    +

    The new number of bones.

    +

    A reference to an array of bone indices, which describe the remapping. For example, say SkinInfo contains some bones such that bone0 is mapped to v0, bone1 to v1, and bone2 to v2, and array with 2,1,0 is specified for pBoneRemap. This will cause bone0 to be mapped to v2, bone1 to v1, and bone2 to v0.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: E_OUTOFMEMORY or E_INVALIDARG.

    + + bb173946 + HRESULT ID3DX10SkinInfo::RemapBones([In] unsigned int NewBoneCount,[In, Buffer] unsigned int* pBoneRemap) + ID3DX10SkinInfo::RemapBones +
    + + +

    Enable an existing bone to influence a group of vertices and define how much influence the bone has on each vertex.

    +
    +

    An index that specifies an existing bone. Must be between 0 and the value returned by .

    +

    Number of vertices to add to the bone's influence.

    +

    Pointer to an array of vertex indices. Each member of this array has a corresponding member in pWeights, such that pIndices[i] corresponds to pWeights[i]. The corresponding value in pWeights[i] determines how much influence BoneIndex will have on the vertex indexed by pIndices[i]. The size of the pIndices array must be equal to or greater than InfluenceCount.

    +

    Pointer to an array of bone weights. Each member of this array has a corresponding member in pIndices, such that pWeights[i] corresponds to pIndices[i]. Each value in pWeights is between 0 and 1 and defines the amount of influence the bone has over each vertex. The size of pWeights must be equal to or greater than InfluenceCount.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: E_INVALIDARG or E_OUTOFMEMORY.

    + + bb173933 + HRESULT ID3DX10SkinInfo::AddBoneInfluences([In] unsigned int BoneIndex,[In] unsigned int InfluenceCount,[In, Buffer] unsigned int* pIndices,[In, Buffer] float* pWeights) + ID3DX10SkinInfo::AddBoneInfluences +
    + + +

    Clear a bone's list of vertices that it influences.

    +
    +

    An index that specifies an existing bone. Must be between 0 and the value returned by .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: E_INVALIDARG.

    + + bb173936 + HRESULT ID3DX10SkinInfo::ClearBoneInfluences([In] unsigned int BoneIndex) + ID3DX10SkinInfo::ClearBoneInfluences +
    + + +

    Get the number of vertices that a given bone influences.

    +
    +

    An index that specifies an existing bone. Must be between 0 and the value returned by .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: E_INVALIDARG.

    + + bb173941 + unsigned int ID3DX10SkinInfo::GetBoneInfluenceCount([In] unsigned int BoneIndex) + ID3DX10SkinInfo::GetBoneInfluenceCount +
    + + +

    Get a list of vertices that a given bone influences and a list of the amount of influence that bone has on each vertex.

    +
    +

    An index that specifies an existing bone. Must be between 0 and the value returned by .

    +

    An offset from the top of the bone's list of influenced vertices. This must be between 0 and the value returned by .

    +

    The number of indices and weights to retrieve. Must be between 0 and the value returned by .

    +

    A list of indices into the vertex buffer, each one representing a vertex influenced by the bone. These values correspond to the values in pDestWeights, such that pDestIndices[i] corresponds to pDestWeights[i].

    +

    A list of the amount of influence the bone has on each vertex. These values correspond to the values in pDestIndices, such that pDestWeights[i] corresponds to pDestIndices[i].f

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: E_INVALIDARG or E_OUTOFMEMORY.

    + + bb173942 + HRESULT ID3DX10SkinInfo::GetBoneInfluences([In] unsigned int BoneIndex,[In] unsigned int Offset,[In] unsigned int Count,[Out, Buffer] unsigned int* pDestIndices,[Out, Buffer] float* pDestWeights) + ID3DX10SkinInfo::GetBoneInfluences +
    + + +

    Find the index that indicates where a given vertex is in a given bone's list of influenced vertices.

    +
    +

    An index that specifies an existing bone. Must be between 0 and the value returned by .

    +

    The index of the vertex in the vertex buffer.

    +

    The index of the vertex in the bone's list of influenced vertices.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: E_INVALIDARG.

    + + bb173939 + HRESULT ID3DX10SkinInfo::FindBoneInfluenceIndex([In] unsigned int BoneIndex,[In] unsigned int VertexIndex,[In] unsigned int* pInfluenceIndex) + ID3DX10SkinInfo::FindBoneInfluenceIndex +
    + + +

    Set the amount of influence a given bone has over a given vertex.

    +
    +

    An index that specifies an existing bone. Must be between 0 and the value returned by .

    +

    An index into the bone's list of vertices that it influences.

    +

    The amount of influence, between 0 and 1, that the bone has over the vertex.

    +

    If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be E_INVALIDARG.

    + + bb173949 + HRESULT ID3DX10SkinInfo::SetBoneInfluence([In] unsigned int BoneIndex,[In] unsigned int InfluenceIndex,[In] float Weight) + ID3DX10SkinInfo::SetBoneInfluence +
    + + +

    Get the amount of influence a given bone has over a given vertex.

    +
    +

    An index that specifies an existing bone. Must be between 0 and the value returned by .

    +

    An index into the bone's list of vertices that it influences.

    +

    The amount of influence, between 0 and 1, that the bone has over the vertex.

    +

    If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be E_INVALIDARG.

    + +

    Use to find out how many vertices the bone influences.

    +
    + + bb173940 + HRESULT ID3DX10SkinInfo::GetBoneInfluence([In] unsigned int BoneIndex,[In] unsigned int InfluenceIndex,[In] float* pWeight) + ID3DX10SkinInfo::GetBoneInfluence +
    + + +

    Limit the number of bones that can influence a vertex and/or limit the amount of influence a bone can have on a vertex.

    +
    +

    The maximum number of bones that can influence any given vertex. This value is ignored if it is greater than the value returned by .

    +

    A flag describing how to scale the remaining weights on a given vertex after some have been chopped off by MinWeight. If D3DX10_SKININFO_NO_SCALING is specified, the weights will not be scaled at all. If D3DX10_SKININFO_SCALE_TO_1 is specified, the weights greater than MinWeight will be scaled up so that they add up to 1.0. If D3DX10_SKININFO_SCALE_TO_TOTAL is specified, the weights greater than MinWeight will be scaled up so that they add up to the original total.

    +

    The minimum percentage of influence, or weight, that any bone can have on any vertex. This value must be between 0 and 1.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: E_OUTOFMEMORY or E_INVALIDARG.

    + + bb173937 + HRESULT ID3DX10SkinInfo::Compact([In] unsigned int MaxPerVertexInfluences,[In] unsigned int ScaleMode,[In] float MinWeight) + ID3DX10SkinInfo::Compact +
    + + +

    Do software skinning on an array of vertices.

    +
    +

    A 0-based index into pSrcVertices.

    +

    Number of vertices to transform.

    +

    Pointer to an array of vertices to transform.

    +

    The size, in bytes, of a vertex in pSrcVertices.

    +

    Pointer to an array of vertices, which will be filled with the transformed vertices.

    +

    The size, in bytes, of a vertex in pDestVertices.

    +

    An array of matrices that will be used to transform the points mapped to each bone, such that the vertices mapped to bone[i] will be transformed by pBoneMatrices[i]. This array will be used to transform the matrices only if the IsNormal value in pChannelDescs is set to , otherwise pInverseTransposeBoneMatrices will be used.

    +

    If this value is null, it will be set equal to pBoneMatrices. This array of matrices will be used to transform the vertices only if the IsNormal value in pChannelDescs is set to TRUE, otherwise pBoneMatrices will be used.

    +

    Pointer to a structure, which determines the member of the vertex decl the software skinning will be done on.

    +

    The number of structures in pChannelDescs.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: E_INVALIDARG.

    + +

    Here is an example of how to use software skinning:

     //vertex definition	
    +            struct MyVertex	
    +            {  Position;  Weight;  TexCoord;	
    +            }; //create vertex data	
    +            const UINT numVertices = 16;	
    +            MyVertex vertices[numVertices] = {...};	
    +            MyVertex destVertices[numVertices]; //create bone matrices	
    +             boneMatrices[2];	
    +            D3DXMatrixIdentity(&boneMatrices[0]);	
    +            D3DXMatrixRotationX(&boneMatrices[1], 3.14159f / 180.0f); //create bone indices and weights	
    +            UINT boneIndices[numVertices] = {...};	
    +            float boneWeights[2][numVertices] = {...}; //create skin info, populate it with bones and vertices, and then map them to each other	
    +             *pSkinInfo = null;	
    +            (&pSkinInfo);	
    +            pSkinInfo->AddBones(2);	
    +            pSkinInfo->AddVertices(numVertices);	
    +            pSkinInfo->AddBoneInfluences(0, numVertices, boneIndices, boneWeights[0]);	
    +            pSkinInfo->AddBoneInfluences(1, numVertices, boneIndices, boneWeights[1]); //create channel desc	
    +             channelDesc;	
    +            channelDesc.SrcOffset = 0;	
    +            channelDesc.DestOffset = 0;	
    +            channelDesc.IsNormal = ; //do the skinning	
    +            pSkinInfo->DoSoftwareSkinning(0, numVertices, vertices, sizeof(MyVertex),  destVertices, sizeof(MyVertex),  boneMatrices, null,  &channelDesc, 1);	
    +            
    +
    + + bb173938 + HRESULT ID3DX10SkinInfo::DoSoftwareSkinning([In] unsigned int StartVertex,[In] unsigned int VertexCount,[In] void* pSrcVertices,[In] unsigned int SrcStride,[In] void* pDestVertices,[In] unsigned int DestStride,[In] D3DXMATRIX* pBoneMatrices,[In, Optional] D3DXMATRIX* pInverseTransposeBoneMatrices,[In] D3DX10_SKINNING_CHANNEL* pChannelDescs,[In] unsigned int NumChannels) + ID3DX10SkinInfo::DoSoftwareSkinning +
    + + + Get a list of vertices that a given bone influences and a list of the amount of influence that bone has on each vertex. + + An index that specifies an existing bone. Must be between 0 and the value returned by . + An offset from the top of the bone's list of influenced vertices. This must be between 0 and the value returned by . + The number of indices and weights to retrieve. Must be between 0 and the value returned by ID3DX10SkinInfo::GetBoneInfluenceCount. + A list of indices into the vertex buffer, each one representing a vertex influenced by the bone. These values correspond to the values in pDestWeights, such that pDestIndices[i] corresponds to pDestWeights[i]. + A list of the amount of influence the bone has on each vertex. These values correspond to the values in pDestIndices, such that pDestWeights[i] corresponds to pDestIndices[i].f + If the method succeeds, the return value is S_OK. If the method fails, the return value can be: E_INVALIDARG or E_OUTOFMEMORY. + HRESULT ID3DX10SkinInfo::GetBoneInfluences([None] int BoneIndex,[None] int Offset,[None] int Count,[Out, Buffer] int* pDestIndices,[Out, Buffer] float* pDestWeights) + + + +

    The interface provides a set of methods that simplify the process of drawing sprites using Microsoft Direct3D. This interface can operate on a set of many sprites.

    +
    + +

    The interface is obtained by calling the function.

    +
    + + bb205601 + ID3DX10Sprite + ID3DX10Sprite +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get or sets the view transform that applies to all sprites.

    +
    + + bb205609 + GetViewTransform / SetViewTransform + GetViewTransform + HRESULT ID3DX10Sprite::GetViewTransform([Out] D3DXMATRIX* pViewTransform) +
    + + +

    Get or sets the sprite projection matrix that is applied to all sprites.

    +
    + + bb205608 + GetProjectionTransform / SetProjectionTransform + GetProjectionTransform + HRESULT ID3DX10Sprite::GetProjectionTransform([Out] D3DXMATRIX* pProjectionTransform) +
    + + +

    Retrieve the device associated with the sprite object.

    +
    + +

    Calling this method will increase the internal reference count on the interface.

    +
    + + bb205607 + GetDevice + GetDevice + HRESULT ID3DX10Sprite::GetDevice([Out] ID3D10Device** ppDevice) +
    + + +

    Prepare a device for drawing sprites.

    +
    +

    Flags that control how the sprites will be drawn. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DERR_OUTOFVIDEOMEMORY, D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    Every call to Begin must be matched with a call to .

    +
    + + bb205602 + HRESULT ID3DX10Sprite::Begin([In] D3DX10_SPRITE_FLAG flags) + ID3DX10Sprite::Begin +
    + + +

    Add an array of sprites to the batch of sprites to be rendered. This must be called in between calls to and , and must be called before End to send all of the batched sprites to the device for rendering. This draw method is most useful when drawing a small number of sprites that you want buffered into a large batch, such as fonts.

    +
    + No documentation. + No documentation. +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA.

    + + bb205603 + HRESULT ID3DX10Sprite::DrawSpritesBuffered([In, Buffer] D3DX10_SPRITE* pSprites,[In] unsigned int cSprites) + ID3DX10Sprite::DrawSpritesBuffered +
    + + +

    Force all batched sprites to be submitted to the device. Device states remain as they were after the last call to . The list of batched sprites is then cleared.

    +
    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DERR_INVALIDCALL.

    + + bb205606 + HRESULT ID3DX10Sprite::Flush() + ID3DX10Sprite::Flush +
    + + +

    Draw an array of sprites. This will immediately send the sprites to the device for rendering, which is different from which only adds an array of sprites to a batch of sprites to be rendered when is called. This draw method is most useful when drawing a large number of sprites that have already been sorted on the CPU (or do not need to be sorted), such as in a particle system. This must be called in between calls to and .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA.

    + + bb205604 + HRESULT ID3DX10Sprite::DrawSpritesImmediate([In, Buffer] D3DX10_SPRITE* pSprites,[In] unsigned int cSprites,[In] unsigned int cbSprite,[In] unsigned int flags) + ID3DX10Sprite::DrawSpritesImmediate +
    + + +

    Call this after . If was specified when was called, this API will restore the device state to how it was before was called.

    +
    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DERR_INVALIDCALL.

    + + bb205605 + HRESULT ID3DX10Sprite::End() + ID3DX10Sprite::End +
    + + +

    Get the view transform that applies to all sprites.

    +
    +

    Pointer to a D3DX10MATRIX that will be set to the transform of the sprite from the original world space.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DERR_INVALIDCALL.

    + + bb205609 + HRESULT ID3DX10Sprite::GetViewTransform([Out] D3DXMATRIX* pViewTransform) + ID3DX10Sprite::GetViewTransform +
    + + +

    Set the view transform that applies to all sprites.

    +
    +

    Pointer to a that contains a transform of the sprite from the original world space. Use this transform to scale, rotate, or transform the sprite.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DERR_INVALIDCALL.

    + + bb205611 + HRESULT ID3DX10Sprite::SetViewTransform([In] D3DXMATRIX* pViewTransform) + ID3DX10Sprite::SetViewTransform +
    + + +

    Get the sprite projection matrix that is applied to all sprites.

    +
    +

    Pointer to a D3DX10MATRIX that will be set to the sprite's projection matrix.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb205608 + HRESULT ID3DX10Sprite::GetProjectionTransform([Out] D3DXMATRIX* pProjectionTransform) + ID3DX10Sprite::GetProjectionTransform +
    + + +

    Set the projection matrix for all sprites.

    +
    +

    The projection matrix to be used on all sprites.

    +

    The return value is one of the values listed in Direct3D 10 Return Codes.

    + + bb205610 + HRESULT ID3DX10Sprite::SetProjectionTransform([In] D3DXMATRIX* pProjectionTransform) + ID3DX10Sprite::SetProjectionTransform +
    + + +

    Retrieve the device associated with the sprite object.

    +
    +

    Address of a reference to an interface, representing the Direct3D device object associated with the sprite object.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DERR_INVALIDCALL.

    + +

    Calling this method will increase the internal reference count on the interface.

    +
    + + bb205607 + HRESULT ID3DX10Sprite::GetDevice([Out] ID3D10Device** ppDevice) + ID3DX10Sprite::GetDevice +
    + + + Create a sprite for drawing a 2D texture. + + A reference to the device (see ) that will draw the sprite. + The size of the vertex buffer, in number of sprites, that will be sent to the device when or is called. This should be a small number if you know you will be rendering a small number of sprites at a time (to save memory) and a large number if you know you will be rendering a large number of sprites at a time. The maximum value is 4096. If 0 is specified, the vertex buffer size will automatically be set to 4096. + HRESULT D3DX10CreateSprite([None] ID3D10Device* pDevice,[None] int cDeviceBufferSize,[None] LPD3DX10SPRITE* ppSprite) + + + + Add an array of sprites to the batch of sprites to be rendered. This must be called in between calls to and , and must be called before End to send all of the batched sprites to the device for rendering. This draw method is most useful when drawing a small number of sprites that you want buffered into a large batch, such as fonts. + + The array of sprites to draw. See . + If the method succeeds, the return value is S_OK. If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA. + HRESULT ID3DX10Sprite::DrawSpritesBuffered([None] D3DX10_SPRITE* pSprites,[None] int cSprites) + + + + Draw an array of sprites. This will immediately send the sprites to the device for rendering, which is different from which only adds an array of sprites to a batch of sprites to be rendered when is called. This draw method is most useful when drawing a large number of sprites that have already been sorted on the CPU (or do not need to be sorted), such as in a particle system. This must be called in between calls to and . + + The array of sprites to draw. See . + If the method succeeds, the return value is S_OK. If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA. + HRESULT ID3DX10Sprite::DrawSpritesImmediate([In, Buffer] D3DX10_SPRITE* pSprites,[None] int cSprites,[None] int cbSprite,[None] int flags) + + + +

    A state-block interface encapsulates render states.

    +
    + +

    To create a state-block interface, call .

    This interface can be used to save and restore pipeline state. It can also be used to capture the current state.

    +
    + + bb173856 + ID3D10StateBlock + ID3D10StateBlock +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the device.

    +
    + + bb173859 + GetDevice + GetDevice + HRESULT ID3D10StateBlock::GetDevice([Out] ID3D10Device** ppDevice) +
    + + +

    Capture the current value of states that are included in a stateblock.

    +
    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    Capture captures current values for states within an existing state block. It does not capture the entire state of the device. Creating an empty stateblock and calling Capture does nothing if no states have been set.

    +
    + + bb173858 + HRESULT ID3D10StateBlock::Capture() + ID3D10StateBlock::Capture +
    + + +

    Apply the state block to the current device state.

    +
    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173857 + HRESULT ID3D10StateBlock::Apply() + ID3D10StateBlock::Apply +
    + + +

    Release all references to device objects.

    +
    +

    Returns one of the following Direct3D 10 Return Codes.

    + +

    Each time you return a reference to an interface (by calling ), the internal reference count is incremented; when you are finished using a stateblock, call this method to release all references and avoid a memory leak.

    +
    + + cc627127 + HRESULT ID3D10StateBlock::ReleaseAllDeviceObjects() + ID3D10StateBlock::ReleaseAllDeviceObjects +
    + + +

    Get the device.

    +
    +

    Pointer to the interface that is returned.

    +

    Returns one of the following Direct3D 10 Return Codes.

    + + bb173859 + HRESULT ID3D10StateBlock::GetDevice([Out] ID3D10Device** ppDevice) + ID3D10StateBlock::GetDevice +
    + + + Create a state block. + + + A state block is a collection of device state, and is used for saving and restoring device state. Use a state-block mask to enable subsets of state for saving and restoring. The structure can be filled manually or by using any of the D3D10StateBlockMaskXXX APIs. A state block mask can also be obtained by calling or . Differences between Direct3D 9 and Direct3D 10: In Direct3D 10, a state block object does not contain any valid information about the state of the device until is called. In Direct3D 9, state is saved in a state block object, when it is created. ? + + The device for which the state block will be created. + Indicates which parts of the device state will be captured when calling and reapplied when calling . See remarks. + HRESULT D3D10CreateStateBlock([None] ID3D10Device* pDevice,[None] D3D10_STATE_BLOCK_MASK* pStateBlockMask,[None] ID3D10StateBlock** ppStateBlock) + + + +

    A switch-to-reference interface (see the switch-to-reference layer) enables an application to switch between a hardware and software device.

    +
    + +

    This interface is obtained by calling QueryInterface on a Interface created with the flag.

    +
    + + bb173860 + ID3D10SwitchToRef + ID3D10SwitchToRef +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a boolean value that indicates the type of device being used.

    +
    + +

    A hardware device is commonly referred to as a HAL device, which stands for a hardware accelerated device. This means that the pipeline is rendering all of the pipeline commands in hardware, using the GPU. Operating the pipeline with a HAL device gives the best performance generally, but it can be more difficult to debug since resources exist on the GPU instead of the CPU.

    A software device implements rendering in software using the CPU with no hardware acceleration. A software device is commonly referred to as a reference device or REF device. Because a REF device implements rendering on the CPU, it is generally slower, but is easier to debug since it allows access to resources.

    +
    + + bb173861 + GetUseRef + GetUseRef + BOOL ID3D10SwitchToRef::GetUseRef() +
    + + +

    Switch between a hardware and a software device.

    +
    +

    A boolean value. Set this to TRUE to change to a software device, set this to to change to a hardware device.

    +

    The previous value of UseRef.

    + +

    This API will fail if the device is not switchable; you must have created a device that is switchable by specifying the flag during device creation (when calling ).

    Switching from a software device to a hardware device clears all cached objects from system memory. Switching from a hardware device to a software device causes resources to be downloaded to system memory.

    +
    + + bb173862 + BOOL ID3D10SwitchToRef::SetUseRef([In] BOOL UseRef) + ID3D10SwitchToRef::SetUseRef +
    + + +

    Get a boolean value that indicates the type of device being used.

    +
    +

    TRUE if the device is a software device, if the device is a hardware device. See remarks.

    + +

    A hardware device is commonly referred to as a HAL device, which stands for a hardware accelerated device. This means that the pipeline is rendering all of the pipeline commands in hardware, using the GPU. Operating the pipeline with a HAL device gives the best performance generally, but it can be more difficult to debug since resources exist on the GPU instead of the CPU.

    A software device implements rendering in software using the CPU with no hardware acceleration. A software device is commonly referred to as a reference device or REF device. Because a REF device implements rendering on the CPU, it is generally slower, but is easier to debug since it allows access to resources.

    +
    + + bb173861 + BOOL ID3D10SwitchToRef::GetUseRef() + ID3D10SwitchToRef::GetUseRef +
    + + +

    A 1D texture interface accesses texel data, which is structured memory.

    +
    + +

    To create an empty 1D texture, call . For more details on creating and loading textures, see Creating Texture Resources.

    Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call , and , respectively. To use the texture as an input to a shader, create a by calling .

    +
    + + bb173863 + ID3D10Texture1D + ID3D10Texture1D +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of the texture resource.

    +
    + + bb173864 + GetDesc + GetDesc + void ID3D10Texture1D::GetDesc([Out] D3D10_TEXTURE1D_DESC* pDesc) +
    + + +

    Get a reference to the data contained in a subresource, and deny the GPU access to that subresource.

    +
    +

    Index number of the subresource. See D3D10CalcSubresource for more details.

    +

    Specifies the CPU's read and write permissions for a resource. For possible values, see .

    +

    Flag that specifies what the CPU should do when the GPU is busy. This flag is optional.

    +

    Pointer to the texture resource data.

    +

    If this function succeeds, it returns . For other restrictions, and a listing of error values that can be returned by any of the Map methods, see Remarks.

    + + bb173865 + HRESULT ID3D10Texture1D::Map([In] unsigned int Subresource,[In] D3D10_MAP MapType,[In] D3D10_MAP_FLAG MapFlags,[Out] void** ppData) + ID3D10Texture1D::Map +
    + + +

    Invalidate the reference to a resource that was retrieved by , and re-enable the GPU's access to that resource.

    +
    + No documentation. + +

    A subresource must be mapped before Unmap is called.

    Differences between Direct3D 9 and Direct3D 10:

    Unmap in Direct3D 10 is analogous to resource Unlock in Direct3D 9.

    ?

    +
    + + bb173866 + void ID3D10Texture1D::Unmap([In] unsigned int Subresource) + ID3D10Texture1D::Unmap +
    + + +

    Get the properties of the texture resource.

    +
    +

    Pointer to a resource description (see ).

    + + bb173864 + void ID3D10Texture1D::GetDesc([Out] D3D10_TEXTURE1D_DESC* pDesc) + ID3D10Texture1D::GetDesc +
    + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + The initial texture data. + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + + + + Maps the texture, providing CPU access to its contents. + + The mip slice to map. + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + A data stream containing the mapped data. This data stream is invalidated + when the buffer is unmapped. + + + +

    A 2D texture interface manages texel data, which is structured memory.

    +
    + +

    To create an empty Texture2D resource, call . For more details on creating and loading textures, see Creating Texture Resources.

    Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call , and , respectively. To use the texture as an input to a shader, create a by calling .

    +
    + + bb173867 + ID3D10Texture2D + ID3D10Texture2D +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of the texture resource.

    +
    + + bb173868 + GetDesc + GetDesc + void ID3D10Texture2D::GetDesc([Out] D3D10_TEXTURE2D_DESC* pDesc) +
    + + +

    Get a reference to the data contained in a subresource, and deny GPU access to that subresource.

    +
    +

    Index number of the subresource. See D3D10CalcSubresource for more details.

    +

    Integer that specifies the CPU's read and write permissions for a resource. For possible values, see .

    +

    Flag that specifies what the CPU should do when the GPU is busy. This flag is optional.

    +

    Pointer to a structure () that is filled in by the function and contains a reference to the resource data.

    +

    If this function succeeds, it returns .

    All of the Map methods have identical return values and operating restrictions. These are listed in the remarks section of .

    + + bb173869 + HRESULT ID3D10Texture2D::Map([In] unsigned int Subresource,[In] D3D10_MAP MapType,[In] D3D10_MAP_FLAG MapFlags,[Out] D3D10_MAPPED_TEXTURE2D* pMappedTex2D) + ID3D10Texture2D::Map +
    + + +

    Invalidate the reference to the resource that was retrieved by , and re-enable GPU access to the resource.

    +
    + No documentation. + +

    A subresource must be mapped before Unmap is called.

    Differences between Direct3D 9 and Direct3D 10:

    Unmap in Direct3D 10 is analogous to resource Unlock in Direct3D 9.

    ?

    +
    + + bb173870 + void ID3D10Texture2D::Unmap([In] unsigned int Subresource) + ID3D10Texture2D::Unmap +
    + + +

    Get the properties of the texture resource.

    +
    +

    Pointer to a resource description (see ).

    + + bb173868 + void ID3D10Texture2D::GetDesc([Out] D3D10_TEXTURE2D_DESC* pDesc) + ID3D10Texture2D::GetDesc +
    + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + The initial texture data. + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + + + + Converts a height map into a normal map. The (x,y,z) components of each normal are mapped to the (r,g,b) channels of the output texture. + + The source height map texture. + The destination texture. + One or more flags that control generation of normal maps. + One or more flag specifying the source of height information. + Constant value multiplier that increases (or decreases) the values in the normal map. Higher values usually make bumps more visible, lower values usually make bumps less visible. + A object describing the result of the operation. + + + + Maps the texture, providing CPU access to its contents. + + The mip slice to map. + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + A data rectangle containing the mapped data. This data stream is invalidated when the buffer is unmapped. + + + + Maps the texture, providing CPU access to its contents. + + The mip slice to map. + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + The data stream. + + A data rectangle containing the mapped data. This data stream is invalidated when the buffer is unmapped. + + + + +

    A 3D texture interface accesses texel data, which is structured memory.

    +
    + +

    To create an empty Texture3D resource, call . For more details on creating and loading textures, see Creating Texture Resources.

    Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call , and , respectively. To use the texture as an input to a shader, create a by calling .

    +
    + + bb173871 + ID3D10Texture3D + ID3D10Texture3D +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of the texture resource.

    +
    + + bb173872 + GetDesc + GetDesc + void ID3D10Texture3D::GetDesc([Out] D3D10_TEXTURE3D_DESC* pDesc) +
    + + +

    Get a reference to the data contained in a subresource, and deny GPU access to that subresource.

    +
    +

    Index number of the subresource. See D3D10CalcSubresourcefor more details.

    +

    Specifies the CPU's read and write permissions for a resource. For possible values, see .

    +

    Flag that specifies what the CPU should do when the GPU is busy. This flag is optional.

    +

    Pointer to a structure () that is filled in by the function and contains a reference to the resource data.

    +

    If this function succeeds, it returns . All of the Map methods have identical return values and operating restrictions. These are listed in the remarks section of .

    + + bb173873 + HRESULT ID3D10Texture3D::Map([In] unsigned int Subresource,[In] D3D10_MAP MapType,[In] D3D10_MAP_FLAG MapFlags,[Out] D3D10_MAPPED_TEXTURE3D* pMappedTex3D) + ID3D10Texture3D::Map +
    + + +

    Invalidate the reference to the resource retrieved by , and re-enable the GPU's access to the resource.

    +
    + No documentation. + +

    A subresource must be mapped before Unmap is called.

    Differences between Direct3D 9 and Direct3D 10:

    Unmap() in Direct3D 10 is analogous to resource Unlock() in Direct3D 9.

    ?

    +
    + + bb173874 + void ID3D10Texture3D::Unmap([In] unsigned int Subresource) + ID3D10Texture3D::Unmap +
    + + +

    Get the properties of the texture resource.

    +
    +

    Pointer to a resource description (see ).

    + + bb173872 + void ID3D10Texture3D::GetDesc([Out] D3D10_TEXTURE3D_DESC* pDesc) + ID3D10Texture3D::GetDesc +
    + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + The initial texture data. + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + + + + Maps the texture, providing CPU access to its contents. + + The mip slice to map. + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + + A databox containing the mapped data. This data stream is invalidated when the buffer is unmapped. + + + + + Maps the texture, providing CPU access to its contents. + + The mip slice to map. + The IO operations to enable on the CPU. + Flags indicating how the CPU should respond when the GPU is busy. + The data stream. + + A databox containing the mapped data. This data stream is invalidated when the buffer is unmapped. + + + + +

    A vertex-shader interface manages an executable program (a vertex shader) that controls the vertex-shader stage.

    +
    + +

    The vertex-shader interface has no methods; use HLSL to implement your shader functionality. All shaders in Direct3D 10 are implemented from a common set of features referred to as the common shader core.

    To create a vertex shader interface, call . Before using a vertex shader you must bind it to the device by calling .

    This interface is defined in D3D10.h.

    +
    + + bb173875 + ID3D10VertexShader + ID3D10VertexShader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + + + +

    The device interface represents a virtual adapter for Direct3D 10.0; it is used to perform rendering and create Direct3D resources.

    +
    + +

    A device is created using .

    +
    + + bb173528 + ID3D10Device + ID3D10Device +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set the constant buffers used by the vertex shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173626 + void ID3D10Device::VSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppConstantBuffers) + ID3D10Device::VSSetConstantBuffers +
    + + +

    Set the constant buffers used by the vertex shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173626 + void ID3D10Device::VSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppConstantBuffers) + ID3D10Device::VSSetConstantBuffers +
    + + +

    Set the constant buffers used by the vertex shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173626 + void ID3D10Device::VSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppConstantBuffers) + ID3D10Device::VSSetConstantBuffers +
    + + +

    Set a vertex shader to the device.

    +
    +

    Pointer to a vertex shader (see ). Passing in null disables the shader for this pipeline stage.

    + +

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173628 + void ID3D10Device::VSSetShader([In, Optional] ID3D10VertexShader* pVertexShader) + ID3D10Device::VSSetShader +
    + + +

    Bind an array of shader resources to the vertex shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    If you bind a subresource as an input and an output, this API will fill the destination shader resource slot with null. The debug layer (when active) will alert you if this is true.

    For information about creating shader-resource views, see .

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173629 + void ID3D10Device::VSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::VSSetShaderResources +
    + + +

    Bind an array of shader resources to the vertex shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    If you bind a subresource as an input and an output, this API will fill the destination shader resource slot with null. The debug layer (when active) will alert you if this is true.

    For information about creating shader-resource views, see .

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173629 + void ID3D10Device::VSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::VSSetShaderResources +
    + + +

    Bind an array of shader resources to the vertex shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    If you bind a subresource as an input and an output, this API will fill the destination shader resource slot with null. The debug layer (when active) will alert you if this is true.

    For information about creating shader-resource views, see .

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173629 + void ID3D10Device::VSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::VSSetShaderResources +
    + + +

    Set an array of sampler states to the vertex shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

     //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173627 + void ID3D10Device::VSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const ID3D10SamplerState** ppSamplers) + ID3D10Device::VSSetSamplers +
    + + +

    Set an array of sampler states to the vertex shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

     //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173627 + void ID3D10Device::VSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const ID3D10SamplerState** ppSamplers) + ID3D10Device::VSSetSamplers +
    + + +

    Set an array of sampler states to the vertex shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

     //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device.

    +
    + + bb173627 + void ID3D10Device::VSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const ID3D10SamplerState** ppSamplers) + ID3D10Device::VSSetSamplers +
    + + +

    Get the constant buffers used by the vertex shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173622 + void ID3D10Device::VSGetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D10Buffer** ppConstantBuffers) + ID3D10Device::VSGetConstantBuffers +
    + + +

    Get the vertex shader currently set on the device.

    +
    +

    Address of a reference to a vertex shader (see ) to be returned by the method.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173624 + void ID3D10Device::VSGetShader([Out] ID3D10VertexShader** ppVertexShader) + ID3D10Device::VSGetShader +
    + + +

    Get the vertex shader resources.

    +
    +

    Index into the device's zero-based array to begin getting shader resources from.

    +

    The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources.

    +

    Array of shader resource view interfaces to be returned by the device.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173625 + void ID3D10Device::VSGetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[Out, Buffer, Optional] ID3D10ShaderResourceView** ppShaderResourceViews) + ID3D10Device::VSGetShaderResources +
    + + +

    Get an array of sampler states from the vertex shader pipeline stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + bb173623 + void ID3D10Device::VSGetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[Out, Buffer, Optional] ID3D10SamplerState** ppSamplers) + ID3D10Device::VSGetSamplers +
    + + +

    Describes the blend state.

    +
    + +

    To see how blending is done, see Output-Merger Stage (Direct3D 10).

    These are the default values for blend state.

    StateDefault Value
    AlphaToCoverageEnable
    BlendEnable[8] (for all 8)
    SrcBlend
    DestBlend
    BlendOp
    SrcBlendAlpha
    DestBlendAlpha
    BlendOpAlpha
    RenderTargetWriteMask[8] (for all 8)

    ?

    +
    + + bb204893 + D3D10_BLEND_DESC + D3D10_BLEND_DESC +
    + + +

    Determines whether or not to use alpha-to-coverage as a multisampling technique when setting a pixel to a rendertarget.

    +
    + + bb204893 + BOOL AlphaToCoverageEnable + BOOL AlphaToCoverageEnable +
    + + +

    Enable (or disable) blending. There are eight elements in this array; these correspond to the eight rendertargets that can be set to output-merger stage at one time.

    +
    + + bb204893 + BOOL BlendEnable[8] + BOOL BlendEnable +
    + + +

    This blend option specifies the first RGB data source and includes an optional pre-blend operation.

    +
    + + bb204893 + D3D10_BLEND SrcBlend + D3D10_BLEND SrcBlend +
    + + +

    This blend option specifies the second RGB data source and includes an optional pre-blend operation.

    +
    + + bb204893 + D3D10_BLEND DestBlend + D3D10_BLEND DestBlend +
    + + +

    This blend operation defines how to combine the RGB data sources.

    +
    + + bb204893 + D3D10_BLEND_OP BlendOp + D3D10_BLEND_OP BlendOp +
    + + +

    This blend option specifies the first alpha data source and includes an optional pre-blend operation. Blend options that end in _COLOR are not allowed.

    +
    + + bb204893 + D3D10_BLEND SrcBlendAlpha + D3D10_BLEND SrcBlendAlpha +
    + + +

    This blend option specifies the second alpha data source and includes an optional pre-blend operation. Blend options that end in _COLOR are not allowed.

    +
    + + bb204893 + D3D10_BLEND DestBlendAlpha + D3D10_BLEND DestBlendAlpha +
    + + +

    This blend operation defines how to combine the alpha data sources.

    +
    + + bb204893 + D3D10_BLEND_OP BlendOpAlpha + D3D10_BLEND_OP BlendOpAlpha +
    + + +

    A per-pixel write mask that allows control over which components can be written (see ).

    +
    + + bb204893 + D3D10_COLOR_WRITE_ENABLE RenderTargetWriteMask[8] + D3D10_COLOR_WRITE_ENABLE RenderTargetWriteMask +
    + + +

    Describes the blend state for a Direct3D 10.1 device.

    +
    + +

    To see how blending is done, see Output-Merger Stage (Direct3D 10).

    These are the default values for the blend description.

    StateDefault Value
    AlphaToCoverageEnable
    IndependentBlendEnable
    RenderTarget[0].BlendEnable
    RenderTarget[0].SrcBlend
    RenderTarget[0].DestBlend
    RenderTarget[0].BlendOp
    RenderTarget[0].SrcBlendAlpha
    RenderTarget[0].DestBlendAlpha
    RenderTarget[0].BlendOpAlpha
    RenderTarget[0].RenderTargetWriteMask

    ?

    This structure requires Windows Vista Service Pack 1.

    If the driver type is set to , the feature level is set to less than or equal to , and the pixel format of the render target is set to , , or , the device performs the blend in standard RGB (sRGB) space and not in linear space. However, if the feature level is set to greater than , the device performs the blend in linear space.

    +
    + + bb694528 + D3D10_BLEND_DESC1 + D3D10_BLEND_DESC1 +
    + + +

    Determines whether or not to use the alpha-to-coverage multisampling technique when setting a render-target pixel.

    +
    + + bb694528 + BOOL AlphaToCoverageEnable + BOOL AlphaToCoverageEnable +
    + + +

    Set to TRUE to enable independent blending in simultaneous render targets. If set to , only the RenderTarget[0] members are used. RenderTarget[1..7] are ignored.

    +
    + + bb694528 + BOOL IndependentBlendEnable + BOOL IndependentBlendEnable +
    + + +

    An array of render-target-blend descriptions (see ); these correspond to the eight rendertargets that can be set to the output-merger stage at one time.

    +
    + + bb694528 + D3D10_RENDER_TARGET_BLEND_DESC1 RenderTarget[8] + D3D10_RENDER_TARGET_BLEND_DESC1 RenderTarget +
    + + +

    Information about the video card's performance counter capabilities.

    +
    + +

    This structure is returned by .

    +
    + + bb204906 + D3D10_COUNTER_INFO + D3D10_COUNTER_INFO +
    + + +

    Largest device-dependent counter ID that the device supports. If none are supported, this value will be 0. Otherwise it will be greater than or equal to . See .

    +
    + + bb204906 + D3D10_COUNTER LastDeviceDependentCounter + D3D10_COUNTER LastDeviceDependentCounter +
    + + +

    Number of counters that can be simultaneously supported.

    +
    + + bb204906 + unsigned int NumSimultaneousCounters + unsigned int NumSimultaneousCounters +
    + + +

    Number of detectable parallel units that the counter is able to discern. Values are 1 ~ 4. Use NumDetectableParallelUnits to interpret the values of the VERTEX_PROCESSING, GEOMETRY_PROCESSING, PIXEL_PROCESSING, and OTHER_GPU_PROCESSING counters. See for an equation.

    +
    + + bb204906 + unsigned char NumDetectableParallelUnits + unsigned char NumDetectableParallelUnits +
    + + +

    Describes a counter.

    +
    + + bb204905 + D3D10_COUNTER_DESC + D3D10_COUNTER_DESC +
    + + +

    Type of counter (see ).

    +
    + + bb204905 + D3D10_COUNTER Counter + D3D10_COUNTER Counter +
    + + +

    Reserved.

    +
    + + bb204905 + unsigned int MiscFlags + unsigned int MiscFlags +
    + + +

    Describes the stencil operations that can be performed based on the results of stencil test.

    +
    + +

    The stencil operation can be set differently based on the outcome of the stencil test by using the StencilFunc member. This can be done for the stencil test portion of depth-stencil testing.

    The structure is a member of the structure.

    +
    + + bb205035 + D3D10_DEPTH_STENCILOP_DESC + D3D10_DEPTH_STENCILOP_DESC +
    + + + No documentation. + + + bb205035 + D3D10_STENCIL_OP StencilFailOp + D3D10_STENCIL_OP StencilFailOp + + + + No documentation. + + + bb205035 + D3D10_STENCIL_OP StencilDepthFailOp + D3D10_STENCIL_OP StencilDepthFailOp + + + + No documentation. + + + bb205035 + D3D10_STENCIL_OP StencilPassOp + D3D10_STENCIL_OP StencilPassOp + + + + No documentation. + + + bb205035 + D3D10_COMPARISON_FUNC StencilFunc + D3D10_COMPARISON_FUNC StencilFunc + + + +

    Describes depth-stencil state.

    +
    + +

    Depth-stencil state controls how depth-stencil testing is performed by the output-merger stage.

    The formats that support stenciling are and .

    +
    + + bb205036 + D3D10_DEPTH_STENCIL_DESC + D3D10_DEPTH_STENCIL_DESC +
    + + +

    A Boolean value that enables depth testing. The default value is TRUE.

    +
    + + bb205036 + BOOL DepthEnable + BOOL DepthEnable +
    + + +

    A member of the enumerated type that identifies a portion of the depth-stencil buffer that can be modified by depth data. The default value is .

    +
    + + bb205036 + D3D10_DEPTH_WRITE_MASK DepthWriteMask + D3D10_DEPTH_WRITE_MASK DepthWriteMask +
    + + +

    A member of the enumerated type that defines how depth data is compared against existing depth data. The default value is

    +
    + + bb205036 + D3D10_COMPARISON_FUNC DepthFunc + D3D10_COMPARISON_FUNC DepthFunc +
    + + +

    A Boolean value that enables stencil testing. The default value is .

    +
    + + bb205036 + BOOL StencilEnable + BOOL StencilEnable +
    + + +

    A value that identifies a portion of the depth-stencil buffer for reading stencil data. The default value is D3D10_DEFAULT_STENCIL_READ_MASK.

    +
    + + bb205036 + unsigned char StencilReadMask + unsigned char StencilReadMask +
    + + +

    A value that identifies a portion of the depth-stencil buffer for writing stencil data. The default value is D3D10_DEFAULT_STENCIL_WRITE_MASK.

    +
    + + bb205036 + unsigned char StencilWriteMask + unsigned char StencilWriteMask +
    + + +

    A structure that identifies how to use the results of the depth test and the stencil test for pixels whose surface normal is facing toward the camera.

    +
    + + bb205036 + D3D10_DEPTH_STENCILOP_DESC FrontFace + D3D10_DEPTH_STENCILOP_DESC FrontFace +
    + + +

    A structure that identifies how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera.

    +
    + + bb205036 + D3D10_DEPTH_STENCILOP_DESC BackFace + D3D10_DEPTH_STENCILOP_DESC BackFace +
    + + +

    Specifies the subresource(s) from a texture that are accessible using a depth-stencil view.

    +
    + +

    These are valid formats for a depth-stencil view:

    A depth-stencil view cannot use a typeless format. If the format chosen is , then the format of the parent resource is used.

    A depth-stencil-view description is needed when calling .

    +
    + + bb205037 + D3D10_DEPTH_STENCIL_VIEW_DESC + D3D10_DEPTH_STENCIL_VIEW_DESC +
    + + +

    Specifies the subresource(s) from an array 2D textures that are accessible to a depth-stencil view.

    +
    + +

    This structure is one member of a depth-stencil-view description (see ).

    +
    + + bb172470 + D3D10_TEX2D_ARRAY_DSV + D3D10_TEX2D_ARRAY_DSV +
    + + + No documentation. + + + bb172470 + unsigned int MipSlice + unsigned int MipSlice + + + + No documentation. + + + bb172470 + unsigned int FirstArraySlice + unsigned int FirstArraySlice + + + + No documentation. + + + bb172470 + unsigned int ArraySize + unsigned int ArraySize + + + +

    Specifies the subresource(s) from an array of multisampled 2D textures for a depth-stencil view.

    +
    + +

    This structure is one member of a depth-stencil-view description (see ).

    +
    + + bb172464 + D3D10_TEX2DMS_ARRAY_DSV + D3D10_TEX2DMS_ARRAY_DSV +
    + + + No documentation. + + + bb172464 + unsigned int FirstArraySlice + unsigned int FirstArraySlice + + + + No documentation. + + + bb172464 + unsigned int ArraySize + unsigned int ArraySize + + + +

    Specifies the subresource(s) from an array of 1D textures to use in a depth-stencil view.

    +
    + +

    This structure is one member of a depth-stencil-view description (see ).

    +
    + + bb172458 + D3D10_TEX1D_ARRAY_DSV + D3D10_TEX1D_ARRAY_DSV +
    + + + No documentation. + + + bb172458 + unsigned int MipSlice + unsigned int MipSlice + + + + No documentation. + + + bb172458 + unsigned int FirstArraySlice + unsigned int FirstArraySlice + + + + No documentation. + + + bb172458 + unsigned int ArraySize + unsigned int ArraySize + + + +

    Specifies the subresource from a 1D texture that is accessible to a depth-stencil view.

    +
    + +

    This structure is one member of a depth-stencil-view description (see ).

    +
    + + bb172461 + D3D10_TEX1D_DSV + D3D10_TEX1D_DSV +
    + + + No documentation. + + + bb172461 + unsigned int MipSlice + unsigned int MipSlice + + + +

    Specifies the subresource from a 2D texture that is accessible to a depth-stencil view.

    +
    + +

    This structure is one member of a depth-stencil-view description (see ).

    +
    + + bb172473 + D3D10_TEX2D_DSV + D3D10_TEX2D_DSV +
    + + + No documentation. + + + bb172473 + unsigned int MipSlice + unsigned int MipSlice + + + +

    Specifies the subresource from a multisampled 2D texture that is accessible to a depth-stencil view.

    +
    + +

    Since a multisampled 2D texture contains a single subtexture, there is nothing to specify; this unused member is included so that this structure will compile in C.

    +
    + + bb172467 + D3D10_TEX2DMS_DSV + D3D10_TEX2DMS_DSV +
    + + + No documentation. + + + bb172467 + unsigned int UnusedField_NothingToDefine + unsigned int UnusedField_NothingToDefine + + + + No documentation. + + + bb205037 + DXGI_FORMAT Format + DXGI_FORMAT Format + + + + No documentation. + + + bb205037 + D3D10_DSV_DIMENSION ViewDimension + D3D10_DSV_DIMENSION ViewDimension + + + + No documentation. + + + bb205037 + D3D10_TEX1D_DSV Texture1D + D3D10_TEX1D_DSV Texture1D + + + + No documentation. + + + bb205037 + D3D10_TEX1D_ARRAY_DSV Texture1DArray + D3D10_TEX1D_ARRAY_DSV Texture1DArray + + + + No documentation. + + + bb205037 + D3D10_TEX2D_DSV Texture2D + D3D10_TEX2D_DSV Texture2D + + + + No documentation. + + + bb205037 + D3D10_TEX2D_ARRAY_DSV Texture2DArray + D3D10_TEX2D_ARRAY_DSV Texture2DArray + + + + No documentation. + + + bb205037 + D3D10_TEX2DMS_DSV Texture2DMS + D3D10_TEX2DMS_DSV Texture2DMS + + + + No documentation. + + + bb205037 + D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray + D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray + + + +

    Describes an effect.

    +
    + +

    To get an effect description, call .

    +
    + + bb205047 + D3D10_EFFECT_DESC + D3D10_EFFECT_DESC +
    + + +

    TRUE if the effect is a child effect; otherwise .

    +
    + + bb205047 + BOOL IsChildEffect + BOOL IsChildEffect +
    + + +

    The number of constant buffers.

    +
    + + bb205047 + unsigned int ConstantBuffers + unsigned int ConstantBuffers +
    + + +

    The number of constant buffers shared in an effect pool.

    +
    + + bb205047 + unsigned int SharedConstantBuffers + unsigned int SharedConstantBuffers +
    + + +

    The number of global variables.

    +
    + + bb205047 + unsigned int GlobalVariables + unsigned int GlobalVariables +
    + + +

    The number of global variables shared in an effect pool.

    +
    + + bb205047 + unsigned int SharedGlobalVariables + unsigned int SharedGlobalVariables +
    + + +

    The number of techniques.

    +
    + + bb205047 + unsigned int Techniques + unsigned int Techniques +
    + + +

    Describes an effect technique.

    +
    + +

    To get a technique, call .

    +
    + + bb172457 + D3D10_TECHNIQUE_DESC + D3D10_TECHNIQUE_DESC +
    + + +

    A string that contains the technique name; otherwise null.

    +
    + + bb172457 + const char* Name + char Name +
    + + +

    The number of passes in the technique.

    +
    + + bb172457 + unsigned int Passes + unsigned int Passes +
    + + +

    The number of annotations.

    +
    + + bb172457 + unsigned int Annotations + unsigned int Annotations +
    + + +

    Describes an effect-variable type.

    +
    + +

    To get an effect-variable type, call .

    +
    + + bb205054 + D3D10_EFFECT_TYPE_DESC + D3D10_EFFECT_TYPE_DESC +
    + + +

    A string that contains the variable name.

    +
    + + bb205054 + const char* TypeName + char TypeName +
    + + +

    The variable class (see D3D10_SHADER_VARIABLE_CLASS).

    +
    + + bb205054 + D3D_SHADER_VARIABLE_CLASS Class + D3D_SHADER_VARIABLE_CLASS Class +
    + + +

    The variable type (see D3D10_SHADER_VARIABLE_TYPE).

    +
    + + bb205054 + D3D_SHADER_VARIABLE_TYPE Type + D3D_SHADER_VARIABLE_TYPE Type +
    + + +

    The number of elements if the variable is an array; otherwise 0.

    +
    + + bb205054 + unsigned int Elements + unsigned int Elements +
    + + +

    The number of members if the variable is a structure; otherwise 0.

    +
    + + bb205054 + unsigned int Members + unsigned int Members +
    + + +

    The number of rows if the variable is a matrix; otherwise 0.

    +
    + + bb205054 + unsigned int Rows + unsigned int Rows +
    + + +

    The number of columns if the variable is a matrix; otherwise 0.

    +
    + + bb205054 + unsigned int Columns + unsigned int Columns +
    + + +

    The number of bytes that the variable consumes when it is packed tightly by the compiler.

    +
    + + bb205054 + unsigned int PackedSize + unsigned int PackedSize +
    + + +

    The number of bytes that the variable consumes before it is packed by the compiler.

    +
    + + bb205054 + unsigned int UnpackedSize + unsigned int UnpackedSize +
    + + +

    The number of bytes between elements.

    +
    + + bb205054 + unsigned int Stride + unsigned int Stride +
    + + +

    Describes an effect variable.

    +
    + +

    To get an effect-variable description, call .

    +
    + + bb205056 + D3D10_EFFECT_VARIABLE_DESC + D3D10_EFFECT_VARIABLE_DESC +
    + + +

    A string that contains the variable name.

    +
    + + bb205056 + const char* Name + char Name +
    + + +

    The semantic attached to the variable; otherwise null.

    +
    + + bb205056 + const char* Semantic + char Semantic +
    + + +

    Optional flags for effect variables.

    +
    + + bb205056 + D3D10_EFFECT_VARIABLE_FLAGS Flags + D3D10_EFFECT_VARIABLE_FLAGS Flags +
    + + +

    The number of annotations; otherwise 0.

    +
    + + bb205056 + unsigned int Annotations + unsigned int Annotations +
    + + +

    The offset between the beginning of the constant buffer and this variable; otherwise 0.

    +
    + + bb205056 + unsigned int BufferOffset + unsigned int BufferOffset +
    + + +

    The register that this variable is bound to. To bind a variable explicitly use the flag.

    +
    + + bb205056 + unsigned int ExplicitBindPoint + unsigned int ExplicitBindPoint +
    + + +

    Defines font attributes.

    +
    + +

    The compiler setting also determines the structure type. If Unicode is defined, the structure type resolves to a ; otherwise the structure type resolves to a D3DX10_FONT_DESCA.

    Possible values of the above members are given in the GDI structure.

    +
    + + bb172693 + D3DX10_FONT_DESCW + D3DX10_FONT_DESCW +
    + + +

    Height, in logical units, of the font's character cell or character.

    +
    + + bb172693 + int Height + int Height +
    + + +

    Width, in logical units, of characters in the font.

    +
    + + bb172693 + unsigned int Width + unsigned int Width +
    + + +

    Weight of the font in the range from 0 through 1000.

    +
    + + bb172693 + D3DX10_FONT_WEIGHT Weight + D3DX10_FONT_WEIGHT Weight +
    + + +

    Number of mipmap levels requested. If this value is zero or D3DX_DEFAULT, a complete mipmap chain is created. If the value is 1, the texture space is mapped identically to the screen space.

    +
    + + bb172693 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Set to TRUE for an Italic font.

    +
    + + bb172693 + BOOL Italic + BOOL Italic +
    + + +

    Character set.

    +
    + + bb172693 + D3DX10_FONT_CHARSET CharSet + D3DX10_FONT_CHARSET CharSet +
    + + +

    Output precision. The output precision defines how closely the output must match the requested font height, width, character orientation, escapement, pitch, and font type.

    +
    + + bb172693 + D3DX10_FONT_PRECISION OutputPrecision + D3DX10_FONT_PRECISION OutputPrecision +
    + + +

    Output quality.

    +
    + + bb172693 + D3DX10_FONT_QUALITY Quality + D3DX10_FONT_QUALITY Quality +
    + + +

    Pitch and family of the font.

    +
    + + bb172693 + D3DX10_FONT_PITCHFAMILY PitchAndFamily + D3DX10_FONT_PITCHFAMILY PitchAndFamily +
    + + +

    A null-terminated string that specifies the typeface name of the font. The length of the string must not exceed 32 characters, including the terminating null character. If FaceName is an empty string, the first font that matches the other specified attributes will be used. If the compiler settings require Unicode, the data type TCHAR resolves to WCHAR; otherwise, the data type resolves to CHAR. See Remarks.

    +
    + + bb172693 + wchar_t FaceName[32] + wchar_t FaceName +
    + + +

    Returns a description of the original contents of an image file.

    +
    + + bb172695 + D3DX10_IMAGE_INFO + D3DX10_IMAGE_INFO +
    + + +

    Width of original image in pixels.

    +
    + + bb172695 + unsigned int Width + unsigned int Width +
    + + +

    Height of original image in pixels.

    +
    + + bb172695 + unsigned int Height + unsigned int Height +
    + + +

    Depth of original image in pixels.

    +
    + + bb172695 + unsigned int Depth + unsigned int Depth +
    + + +

    Size of the texture array. ArraySize will be 1 for a single image.

    +
    + + bb172695 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Number of mipmap levels in original image.

    +
    + + bb172695 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Miscellaneous resource properties (see ).

    +
    + + bb172695 + D3D10_RESOURCE_MISC_FLAG MiscFlags + D3D10_RESOURCE_MISC_FLAG MiscFlags +
    + + +

    A value from the enumerated type that most closely describes the data in the original image.

    +
    + + bb172695 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    Represents the type of the texture stored in the file. See .

    +
    + + bb172695 + D3D10_RESOURCE_DIMENSION ResourceDimension + D3D10_RESOURCE_DIMENSION ResourceDimension +
    + + +

    Represents the format of the image file. See .

    +
    + + bb172695 + D3DX10_IMAGE_FILE_FORMAT ImageFileFormat + D3DX10_IMAGE_FILE_FORMAT ImageFileFormat +
    + + + Retrieves information about a given image file. + + File name of image to retrieve information about. + If the function succeeds, returns a filled with the description of the data in the source file. else returns null + HRESULT D3DX11GetImageInfoFromFileW([None] const wchar_t* pSrcFile,[None] ID3DX11ThreadPump* pPump,[None] D3DX11_IMAGE_INFO* pSrcInfo,[None] HRESULT* pHResult) + + + + Retrieves information about a given image file from a memory location. + + an array to the image in memory + If the function succeeds, returns a filled with the description of the data from the image memory. else returns null + HRESULT D3DX11GetImageInfoFromFileW([None] const wchar_t* pSrcFile,[None] ID3DX11ThreadPump* pPump,[None] D3DX11_IMAGE_INFO* pSrcInfo,[None] HRESULT* pHResult) + + + +

    Optionally provide information to texture loader APIs to control how textures get loaded. A value of D3DX10_DEFAULT for any of these parameters will cause D3DX to automatically use the value from the source file.

    +
    + +

    When initializing the structure, you may set any member to D3DX10_DEFAULT and D3DX will initialize it with a default value from the source texture when the texture is loaded.

    This structure can be used by APIs that:

    • Create resources, such as and .
    • Create data processors, such as D3DX10CreateAsyncTextureInfoProcessor or + D3DX10CreateAsyncShaderResourceViewProcessor.
    +
    + + bb172696 + D3DX10_IMAGE_LOAD_INFO + D3DX10_IMAGE_LOAD_INFO +
    + + +

    The target width of the texture. If the actual width of the texture is larger or smaller than this value then the texture will be scaled up or down to fit this target width.

    +
    + + bb172696 + unsigned int Width + unsigned int Width +
    + + +

    The target height of the texture. If the actual height of the texture is larger or smaller than this value then the texture will be scaled up or down to fit this target height.

    +
    + + bb172696 + unsigned int Height + unsigned int Height +
    + + +

    The depth of the texture. This only applies to volume textures.

    +
    + + bb172696 + unsigned int Depth + unsigned int Depth +
    + + +

    The highest resolution mipmap level of the texture. If this is greater than 0, then after the texture is loaded FirstMipLevel will be mapped to mipmap level 0.

    +
    + + bb172696 + unsigned int FirstMipLevel + unsigned int FirstMipLevel +
    + + +

    The maximum number of mipmap levels that the texture will have. Using 0 or D3DX10_DEFAULT will cause a full mipmap chain to be created.

    +
    + + bb172696 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    The way the texture resource is intended to be used. See .

    +
    + + bb172696 + D3D10_USAGE Usage + D3D10_USAGE Usage +
    + + +

    The pipeline stages that the texture will be allowed to bind to. See .

    +
    + + bb172696 + D3D10_BIND_FLAG BindFlags + D3D10_BIND_FLAG BindFlags +
    + + +

    The access permissions the cpu will have for the texture resource. See .

    +
    + + bb172696 + D3D10_CPU_ACCESS_FLAG CpuAccessFlags + D3D10_CPU_ACCESS_FLAG CpuAccessFlags +
    + + +

    Miscellaneous resource properties (see ).

    +
    + + bb172696 + D3D10_RESOURCE_MISC_FLAG MiscFlags + D3D10_RESOURCE_MISC_FLAG MiscFlags +
    + + +

    The format the texture will be in after it is loaded. See .

    +
    + + bb172696 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    Filter the texture using the specified filter (only when resampling). See .

    +
    + + bb172696 + D3DX10_FILTER_FLAG Filter + D3DX10_FILTER_FLAG Filter +
    + + +

    Filter the texture mip levels using the specified filter (only if generating mipmaps). Valid values are , , , or . See .

    +
    + + bb172696 + D3DX10_FILTER_FLAG MipFilter + D3DX10_FILTER_FLAG MipFilter +
    + + +

    Information about the original image. See . Can be obtained with , , or .

    +
    + + bb172696 + D3DX10_IMAGE_INFO* pSrcInfo + D3DX10_IMAGE_INFO pSrcInfo +
    + + + The default value for load options. + + + + + Gets an ImageLoadInformation that is setup with all default values (). + + + + +

    Allow or deny certain types of messages to pass through a filter.

    +
    + +

    is used to define the allow list and deny list in the structure.

    +
    + + bb205314 + D3D10_INFO_QUEUE_FILTER + D3D10_INFO_QUEUE_FILTER +
    + + +

    Number of message categories to allow or deny.

    +
    + + bb205314 + D3D10_INFO_QUEUE_FILTER_DESC AllowList + D3D10_INFO_QUEUE_FILTER_DESC AllowList +
    + + +

    Array of message categories to allow or deny. Array must have at least NumCategories members (see ).

    +
    + + bb205314 + D3D10_INFO_QUEUE_FILTER_DESC DenyList + D3D10_INFO_QUEUE_FILTER_DESC DenyList +
    + + +

    Allow or deny certain types of messages to pass through a filter.

    +
    + +

    is used to define the allow list and deny list in the structure.

    +
    + + bb205314 + D3D10_INFO_QUEUE_FILTER_DESC + D3D10_INFO_QUEUE_FILTER_DESC +
    + + +

    Number of message categories to allow or deny.

    +
    + + bb205314 + unsigned int NumCategories + unsigned int NumCategories +
    + + +

    Array of message categories to allow or deny. Array must have at least NumCategories members (see ).

    +
    + + bb205314 + D3D10_MESSAGE_CATEGORY* pCategoryList + D3D10_MESSAGE_CATEGORY pCategoryList +
    + + +

    Number of message severity levels to allow or deny.

    +
    + + bb205314 + unsigned int NumSeverities + unsigned int NumSeverities +
    + + +

    Array of message severity levels to allow or deny. Array must have at least NumSeverities members (see ).

    +
    + + bb205314 + D3D10_MESSAGE_SEVERITY* pSeverityList + D3D10_MESSAGE_SEVERITY pSeverityList +
    + + +

    Number of message IDs to allow or deny.

    +
    + + bb205314 + unsigned int NumIDs + unsigned int NumIDs +
    + + +

    Array of message IDs to allow or deny. Array must have at least NumIDs members (see ).

    +
    + + bb205314 + D3D10_MESSAGE_ID* pIDList + D3D10_MESSAGE_ID pIDList +
    + + + Gets or sets the categories. + + + The categories. + + + + + Gets or sets the severities. + + + The severities. + + + + + Gets or sets the ids. + + + The ids. + + + + +

    A description of a single element for the input-assembler stage.

    +
    + +

    An input-layout object contains an array of structures, each structure defines one element being read from an input slot. Create an input-layout object by calling . For an example, see Create an input-layout object.

    +
    + + bb205316 + D3D10_INPUT_ELEMENT_DESC + D3D10_INPUT_ELEMENT_DESC +
    + + + No documentation. + + + bb205316 + const char* SemanticName + char SemanticName + + + + No documentation. + + + bb205316 + unsigned int SemanticIndex + unsigned int SemanticIndex + + + + No documentation. + + + bb205316 + DXGI_FORMAT Format + DXGI_FORMAT Format + + + + No documentation. + + + bb205316 + unsigned int InputSlot + unsigned int InputSlot + + + + No documentation. + + + bb205316 + unsigned int AlignedByteOffset + unsigned int AlignedByteOffset + + + + No documentation. + + + bb205316 + D3D10_INPUT_CLASSIFICATION InputSlotClass + D3D10_INPUT_CLASSIFICATION InputSlotClass + + + + No documentation. + + + bb205316 + unsigned int InstanceDataStepRate + unsigned int InstanceDataStepRate + + + + Returns a value that can be used for the offset parameter of an InputElement to indicate that the element + should be aligned directly after the previous element, including any packing if necessary. + + A value used to align input elements. + D3D10_APPEND_ALIGNED_ELEMENT + + + + Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + Offset (in bytes) between each element. Use AppendAligned for convenience to define the current element directly after the previous one, including any packing if necessary. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + Identifies the input data class for a single input slot. + The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data. + + + + Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + Offset (in bytes) between each element. Use AppendAligned for convenience to define the current element directly after the previous one, including any packing if necessary. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + + + + Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + + + + + + + Implements the operator ==. + + The left. + The right. + + The result of the operator. + + + + + Implements the operator !=. + + The left. + The right. + + The result of the operator. + + + + +

    Stores an attribute table entry.

    +
    + +

    An attribute table is used to identify areas of the mesh that need to be drawn with different textures, render states, materials, and so on. In addition, the application can use the attribute table to hide portions of a mesh by not drawing a given attribute identifier (AttribId) when drawing the frame.

    The LPD3DX_ATTRIBUTE_RANGE type is defined as a reference to the D3DX_ATTRIBUTE_RANGE structure.

     typedef D3DX_ATTRIBUTE_RANGE* LPD3DX_ATTRIBUTE_RANGE;	
    +            
    +
    + + bb172688 + D3DX10_ATTRIBUTE_RANGE + D3DX10_ATTRIBUTE_RANGE +
    + + +

    Attribute table identifier.

    +
    + + bb172688 + unsigned int AttribId + unsigned int AttribId +
    + + +

    Starting face.

    +
    + + bb172688 + unsigned int FaceStart + unsigned int FaceStart +
    + + +

    Face count.

    +
    + + bb172688 + unsigned int FaceCount + unsigned int FaceCount +
    + + +

    Starting vertex.

    +
    + + bb172688 + unsigned int VertexStart + unsigned int VertexStart +
    + + +

    Vertex count.

    +
    + + bb172688 + unsigned int VertexCount + unsigned int VertexCount +
    + + +

    Specifies mesh weight attributes.

    +
    + +

    This structure describes how a simplification operation will consider vertex data when calculating relative costs between collapsing edges. For example, if the Normal field is 0.0, the simplification operation will ignore the vertex normal component when calculating the error for the collapse. However, if the Normal field is 1.0, the simplification operation will use the vertex normal component. If the Normal field is 2.0, double the amount of errors; if the Normal field is 4.0, then quadruple the number of errors, and so on.

    The LPD3DX_ATTRIBUTE_WEIGHTS type is defined as a reference to the D3DX_ATTRIBUTE_WEIGHTS structure.

     typedef D3DX_ATTRIBUTE_WEIGHTS* LPD3DX_ATTRIBUTE_WEIGHTS;	
    +            
    +
    + + bb172689 + D3DX10_ATTRIBUTE_WEIGHTS + D3DX10_ATTRIBUTE_WEIGHTS +
    + + +

    Position.

    +
    + + bb172689 + float Position + float Position +
    + + +

    Blend weight.

    +
    + + bb172689 + float Boundary + float Boundary +
    + + +

    Normal.

    +
    + + bb172689 + float Normal + float Normal +
    + + +

    Diffuse lighting value.

    +
    + + bb172689 + float Diffuse + float Diffuse +
    + + +

    Specular lighting value.

    +
    + + bb172689 + float Specular + float Specular +
    + + +

    Eight texture coordinates.

    +
    + + bb172689 + float Texcoord[8] + float Texcoord +
    + + +

    Tangent.

    +
    + + bb172689 + float Tangent + float Tangent +
    + + +

    Binormal.

    +
    + + bb172689 + float Binormal + float Binormal +
    + + +

    Categories of debug messages. This will identify the category of a message when retrieving a message with and when adding a message with . When creating an info queue filter, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters.

    +
    + +

    This is part of the Information Queue feature. See Interface.

    +
    + + bb205323 + D3D10_MESSAGE + D3D10_MESSAGE +
    + + + No documentation. + + + bb205323 + D3D10_MESSAGE_CATEGORY Category + D3D10_MESSAGE_CATEGORY Category + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_SEVERITY Severity + D3D10_MESSAGE_SEVERITY Severity + + + + No documentation. + + + bb205323 + D3D10_MESSAGE_ID ID + D3D10_MESSAGE_ID ID + + + + No documentation. + + + bb205323 + const char* pDescription + char pDescription + + + + No documentation. + + + bb205323 + SIZE_T DescriptionByteLength + SIZE_T DescriptionByteLength + + + +

    Query information about graphics-pipeline activity in between calls to and .

    +
    + + bb172402 + D3D10_QUERY_DATA_PIPELINE_STATISTICS + D3D10_QUERY_DATA_PIPELINE_STATISTICS +
    + + + No documentation. + + + bb172402 + unsigned longlong IAVertices + unsigned longlong IAVertices + + + + No documentation. + + + bb172402 + unsigned longlong IAPrimitives + unsigned longlong IAPrimitives + + + + No documentation. + + + bb172402 + unsigned longlong VSInvocations + unsigned longlong VSInvocations + + + + No documentation. + + + bb172402 + unsigned longlong GSInvocations + unsigned longlong GSInvocations + + + + No documentation. + + + bb172402 + unsigned longlong GSPrimitives + unsigned longlong GSPrimitives + + + + No documentation. + + + bb172402 + unsigned longlong CInvocations + unsigned longlong CInvocations + + + + No documentation. + + + bb172402 + unsigned longlong CPrimitives + unsigned longlong CPrimitives + + + + No documentation. + + + bb172402 + unsigned longlong PSInvocations + unsigned longlong PSInvocations + + + +

    Query information about the reliability of a timestamp query.

    +
    + +

    For a list of query types see .

    +
    + + bb172404 + D3D10_QUERY_DATA_TIMESTAMP_DISJOINT + D3D10_QUERY_DATA_TIMESTAMP_DISJOINT +
    + + +

    How frequently the GPU counter increments in Hz.

    +
    + + bb172404 + unsigned longlong Frequency + unsigned longlong Frequency +
    + + +

    If this is TRUE, something occurred in between the query's and calls that caused the timestamp counter to become discontinuous or disjoint, such as unplugging the AC chord on a laptop, overheating, or throttling up/down due to laptop savings events. The timestamp returned by for a timestamp query is only reliable if Disjoint is .

    +
    + + bb172404 + BOOL Disjoint + BOOL Disjoint +
    + + +

    Describes a query.

    +
    + + bb172405 + D3D10_QUERY_DESC + D3D10_QUERY_DESC +
    + + +

    Type of query (see ).

    +
    + + bb172405 + D3D10_QUERY Query + D3D10_QUERY Query +
    + + +

    Miscellaneous flags (see ).

    +
    + + bb172405 + D3D10_QUERY_MISC_FLAG MiscFlags + D3D10_QUERY_MISC_FLAG MiscFlags +
    + + +

    Describes the rasterizer state.

    +
    + +

    Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call . To set rasterizer state, call .

    Note??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set MultisampleEnable to , the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature level 10.1, the setting of MultisampleEnable has no effect on points and triangles with regard to MSAA and impacts only the selection of the line-rendering algorithm as shown in this table:

    Line-rendering algorithmMultisampleEnableAntialiasedLineEnable
    Aliased
    Alpha antialiasedTRUE
    QuadrilateralTRUE
    QuadrilateralTRUETRUE

    ?

    The settings of the MultisampleEnable and AntialiasedLineEnable members apply only to multisample antialiasing (MSAA) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set MultisampleEnable to TRUE whenever you render on MSAA render targets.

    +
    + + bb172408 + D3D10_RASTERIZER_DESC + D3D10_RASTERIZER_DESC +
    + + +

    A member of the enumerated type that determines the fill mode to use when rendering. The default value is .

    +
    + + bb172408 + D3D10_FILL_MODE FillMode + D3D10_FILL_MODE FillMode +
    + + +

    A member of the enumerated type that indicates whether triangles facing the specified direction are drawn. The default value is .

    +
    + + bb172408 + D3D10_CULL_MODE CullMode + D3D10_CULL_MODE CullMode +
    + + +

    Determines if a triangle is front-facing or back-facing. If this parameter is TRUE, then a triangle is considered front-facing if its vertices are counter-clockwise on the render target, and considered back-facing if they are clockwise. If this parameter is , then the opposite is true. The default value is .

    +
    + + bb172408 + BOOL FrontCounterClockwise + BOOL FrontCounterClockwise +
    + + +

    Specifies the depth value added to a given pixel. The default value is 0. For info about depth bias, see Depth Bias.

    +
    + + bb172408 + int DepthBias + int DepthBias +
    + + +

    Specifies the maximum depth bias of a pixel. The default value is 0.0f. For info about depth bias, see Depth Bias.

    +
    + + bb172408 + float DepthBiasClamp + float DepthBiasClamp +
    + + +

    Specifies a scalar on a given pixel's slope. The default value is 0.0f. For info about depth bias, see Depth Bias.

    +
    + + bb172408 + float SlopeScaledDepthBias + float SlopeScaledDepthBias +
    + + +

    Enables or disables clipping based on distance. The default value is TRUE.

    The hardware always performs x and y clipping of rasterized coordinates. When DepthClipEnable is set to the default value, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +

    0 < w + -w <= x <= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) + -w <= y <= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) + 0 <= z <= w +

    When you set DepthClipEnable to , the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 < w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +

    +
    + + bb172408 + BOOL DepthClipEnable + BOOL DepthClipEnable +
    + + +

    Enable or disables scissor-rectangle culling. All pixels outside an active scissor rectangle are culled. The default value is . For more information, see Set the Scissor Rectangle.

    +
    + + bb172408 + BOOL ScissorEnable + BOOL ScissorEnable +
    + + +

    Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing (MSAA) render targets. The default value is . Set to TRUE to use the quadrilateral line anti-aliasing algorithm and to to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.

    +
    + + bb172408 + BOOL MultisampleEnable + BOOL MultisampleEnable +
    + + +

    Specifies whether to enable line antialiasing; only applies when alpha blending is enabled, you are drawing lines, and the MultisampleEnable member is . The default value is . For more info about this member, see Remarks.

    +
    + + bb172408 + BOOL AntialiasedLineEnable + BOOL AntialiasedLineEnable +
    + + +

    Describes the blend state for a render target for a Direct3D 10.1 device

    +
    + +

    To see how blending is done, see Output-Merger Stage (Direct3D 10).

    These are the default values for blend state.

    StateDefault Value
    BlendEnable
    SrcBlend
    DestBlend
    BlendOp
    SrcBlendAlpha
    DestBlendAlpha
    BlendOpAlpha
    RenderTargetWriteMask

    ?

    +
    + + bb694533 + D3D10_RENDER_TARGET_BLEND_DESC1 + D3D10_RENDER_TARGET_BLEND_DESC1 +
    + + +

    Enable (or disable) blending.

    +
    + + bb694533 + BOOL BlendEnable + BOOL BlendEnable +
    + + +

    This blend option specifies the first RGB data source and includes an optional pre-blend operation.

    +
    + + bb694533 + D3D10_BLEND SrcBlend + D3D10_BLEND SrcBlend +
    + + +

    This blend option specifies the second RGB data source and includes an optional pre-blend operation.

    +
    + + bb694533 + D3D10_BLEND DestBlend + D3D10_BLEND DestBlend +
    + + +

    This blend operation defines how to combine the RGB data sources.

    +
    + + bb694533 + D3D10_BLEND_OP BlendOp + D3D10_BLEND_OP BlendOp +
    + + +

    This blend option specifies the first alpha data source and includes an optional pre-blend operation. Blend options that end in _COLOR are not allowed.

    +
    + + bb694533 + D3D10_BLEND SrcBlendAlpha + D3D10_BLEND SrcBlendAlpha +
    + + +

    This blend option specifies the second alpha data source and includes an optional pre-blend operation. Blend options that end in _COLOR are not allowed.

    +
    + + bb694533 + D3D10_BLEND DestBlendAlpha + D3D10_BLEND DestBlendAlpha +
    + + +

    This blend operation defines how to combine the alpha data sources.

    +
    + + bb694533 + D3D10_BLEND_OP BlendOpAlpha + D3D10_BLEND_OP BlendOpAlpha +
    + + +

    A write mask.

    +
    + + bb694533 + D3D10_COLOR_WRITE_ENABLE RenderTargetWriteMask + D3D10_COLOR_WRITE_ENABLE RenderTargetWriteMask +
    + + +

    Specifies the subresource(s) from a resource that are accessible using a render-target view.

    +
    + +

    A render-target-view description is passed into to create a render target.

    A render-target-view cannot use the following formats:

    • Any typeless format.
    • if the view will be used to bind a buffer (vertex, index, constant, or stream-output).

    If the format is set to , then the format of the resource that the view binds to the pipeline will be used.

    +
    + + bb172410 + D3D10_RENDER_TARGET_VIEW_DESC + D3D10_RENDER_TARGET_VIEW_DESC +
    + + +

    Specifies the subresource(s) from a 3D texture to use in a render-target view.

    +
    + +

    This structure is one member of a render target view. See .

    +
    + + bb172476 + D3D10_TEX3D_RTV + D3D10_TEX3D_RTV +
    + + + No documentation. + + + bb172476 + unsigned int MipSlice + unsigned int MipSlice + + + + No documentation. + + + bb172476 + unsigned int FirstWSlice + unsigned int FirstWSlice + + + + No documentation. + + + bb172476 + unsigned int WSize + unsigned int WSize + + + +

    Specifies the subresource(s) from an array of 2D textures to use in a render-target view.

    +
    + +

    This structure is one member of a render-target-view description (see ).

    +
    + + bb172471 + D3D10_TEX2D_ARRAY_RTV + D3D10_TEX2D_ARRAY_RTV +
    + + + No documentation. + + + bb172471 + unsigned int MipSlice + unsigned int MipSlice + + + + No documentation. + + + bb172471 + unsigned int FirstArraySlice + unsigned int FirstArraySlice + + + + No documentation. + + + bb172471 + unsigned int ArraySize + unsigned int ArraySize + + + +

    Specifies the subresource(s) from a an array of multisampled 2D textures to use in a render-target view.

    +
    + +

    This structure is one member of a render-target-view description (see ).

    +
    + + bb172465 + D3D10_TEX2DMS_ARRAY_RTV + D3D10_TEX2DMS_ARRAY_RTV +
    + + + No documentation. + + + bb172465 + unsigned int FirstArraySlice + unsigned int FirstArraySlice + + + + No documentation. + + + bb172465 + unsigned int ArraySize + unsigned int ArraySize + + + +

    Specifies the elements from a buffer resource to use in a render-target view.

    +
    + +

    A render-target view is a member of a render-target-view description (see ). Create a render-target view by calling .

    +
    + + bb204897 + D3D10_BUFFER_RTV + D3D10_BUFFER_RTV +
    + + + No documentation. + + + bb204897 + unsigned int FirstElement + unsigned int FirstElement + + + + No documentation. + + + bb204897 + unsigned int ElementOffset + unsigned int ElementOffset + + + + No documentation. + + + bb204897 + unsigned int NumElements + unsigned int NumElements + + + + No documentation. + + + bb204897 + unsigned int ElementWidth + unsigned int ElementWidth + + + +

    Specifies the subresource from a 1D texture to use in a render-target view.

    +
    + +

    This structure is one member of a render-target-view description (see ).

    +
    + + bb172462 + D3D10_TEX1D_RTV + D3D10_TEX1D_RTV +
    + + + No documentation. + + + bb172462 + unsigned int MipSlice + unsigned int MipSlice + + + +

    Specifies the subresource(s) from an array of 1D textures to use in a render-target view.

    +
    + +

    This structure is one member of a render-target-view description (see ).

    +
    + + bb172459 + D3D10_TEX1D_ARRAY_RTV + D3D10_TEX1D_ARRAY_RTV +
    + + + No documentation. + + + bb172459 + unsigned int MipSlice + unsigned int MipSlice + + + + No documentation. + + + bb172459 + unsigned int FirstArraySlice + unsigned int FirstArraySlice + + + + No documentation. + + + bb172459 + unsigned int ArraySize + unsigned int ArraySize + + + +

    Specifies the subresource from a 2D texture to use in a render-target view.

    +
    + +

    This structure is one member of a render-target-view description (see ).

    +
    + + bb172474 + D3D10_TEX2D_RTV + D3D10_TEX2D_RTV +
    + + + No documentation. + + + bb172474 + unsigned int MipSlice + unsigned int MipSlice + + + +

    Specifies the subresource from a multisampled 2D texture to use in a render-target view.

    +
    + +

    Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in . Consequently, UnusedField_NothingToDefine is included so that this structure will compile in C.

    +
    + + bb172468 + D3D10_TEX2DMS_RTV + D3D10_TEX2DMS_RTV +
    + + + No documentation. + + + bb172468 + unsigned int UnusedField_NothingToDefine + unsigned int UnusedField_NothingToDefine + + + + No documentation. + + + bb172410 + DXGI_FORMAT Format + DXGI_FORMAT Format + + + + No documentation. + + + bb172410 + D3D10_RTV_DIMENSION ViewDimension + D3D10_RTV_DIMENSION ViewDimension + + + + No documentation. + + + bb172410 + D3D10_BUFFER_RTV Buffer + D3D10_BUFFER_RTV Buffer + + + + No documentation. + + + bb172410 + D3D10_TEX1D_RTV Texture1D + D3D10_TEX1D_RTV Texture1D + + + + No documentation. + + + bb172410 + D3D10_TEX1D_ARRAY_RTV Texture1DArray + D3D10_TEX1D_ARRAY_RTV Texture1DArray + + + + No documentation. + + + bb172410 + D3D10_TEX2D_RTV Texture2D + D3D10_TEX2D_RTV Texture2D + + + + No documentation. + + + bb172410 + D3D10_TEX2D_ARRAY_RTV Texture2DArray + D3D10_TEX2D_ARRAY_RTV Texture2DArray + + + + No documentation. + + + bb172410 + D3D10_TEX2DMS_RTV Texture2DMS + D3D10_TEX2DMS_RTV Texture2DMS + + + + No documentation. + + + bb172410 + D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray + D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray + + + + No documentation. + + + bb172410 + D3D10_TEX3D_RTV Texture3D + D3D10_TEX3D_RTV Texture3D + + + +

    Defines a 3D box.

    +
    + +

    The following diagram shows a 3D box, where the origin is the left, front, top corner.

    +
    + + bb204895 + D3D10_BOX + D3D10_BOX +
    + + +

    The x position of the left hand side of the box.

    +
    + + bb204895 + unsigned int left + unsigned int left +
    + + +

    The y position of the top of the box.

    +
    + + bb204895 + unsigned int top + unsigned int top +
    + + +

    The z position of the front of the box.

    +
    + + bb204895 + unsigned int front + unsigned int front +
    + + +

    The x position of the right hand side of the box.

    +
    + + bb204895 + unsigned int right + unsigned int right +
    + + +

    The y position of the bottom of the box.

    +
    + + bb204895 + unsigned int bottom + unsigned int bottom +
    + + +

    The z position of the back of the box.

    +
    + + bb204895 + unsigned int back + unsigned int back +
    + + +

    Describes a sampler state.

    +
    + +

    These are the default values for sampler state.

    StateDefault Value
    FilterMin_Mag_Mip_Point
    AddressUClamp
    AddressVClamp
    AddressWClamp
    MinLOD0.0f
    MaxLOD3.402823466e+38F (FLT_MAX)
    MipMapLODBias0.0f
    MaxAnisotropy16
    ComparisonFuncNever
    BorderColorfloat4(0.0f, 0.0f, 0.0f, 0.0f)
    TextureN/A

    ?

    +
    + + bb172415 + D3D10_SAMPLER_DESC + D3D10_SAMPLER_DESC +
    + + +

    Filtering method to use when sampling a texture (see ).

    +
    + + bb172415 + D3D10_FILTER Filter + D3D10_FILTER Filter +
    + + +

    Method to use for resolving a u texture coordinate that is outside the 0 to 1 range (see ).

    +
    + + bb172415 + D3D10_TEXTURE_ADDRESS_MODE AddressU + D3D10_TEXTURE_ADDRESS_MODE AddressU +
    + + +

    Method to use for resolving a v texture coordinate that is outside the 0 to 1 range.

    +
    + + bb172415 + D3D10_TEXTURE_ADDRESS_MODE AddressV + D3D10_TEXTURE_ADDRESS_MODE AddressV +
    + + +

    Method to use for resolving a w texture coordinate that is outside the 0 to 1 range.

    +
    + + bb172415 + D3D10_TEXTURE_ADDRESS_MODE AddressW + D3D10_TEXTURE_ADDRESS_MODE AddressW +
    + + +

    Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5.

    +
    + + bb172415 + float MipLODBias + float MipLODBias +
    + + +

    Clamping value used if or is specified in Filter. Valid values are between 1 and 16.

    +
    + + bb172415 + unsigned int MaxAnisotropy + unsigned int MaxAnisotropy +
    + + +

    A function that compares sampled data against existing sampled data. The function options are listed in .

    +
    + + bb172415 + D3D10_COMPARISON_FUNC ComparisonFunc + D3D10_COMPARISON_FUNC ComparisonFunc +
    + + +

    Border color to use if is specified for AddressU, AddressV, or AddressW. Range must be between 0.0 and 1.0 inclusive.

    +
    + + bb172415 + SHARPDX_COLOR4 BorderColor + SHARPDX_COLOR4 BorderColor +
    + + +

    Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed.

    +
    + + bb172415 + float MinLOD + float MinLOD +
    + + +

    Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinLOD. To have no upper limit on LOD set this to a large value such as D3D10_FLOAT32_MAX.

    +
    + + bb172415 + float MaxLOD + float MaxLOD +
    + + +

    Describes a shader constant-buffer.

    +
    + +

    Constants are supplied to shaders in a shader-constant buffer. Get the description of a shader-constant-buffer by calling ID3D10ShaderReflectionConstantBuffer::GetDesc.

    +
    + + bb172417 + D3D10_SHADER_BUFFER_DESC + D3D10_SHADER_BUFFER_DESC +
    + + +

    The name of the buffer.

    +
    + + bb172417 + const char* Name + char Name +
    + + +

    The intended use of the constant data. See D3D10_CBUFFER_TYPE.

    +
    + + bb172417 + D3D_CBUFFER_TYPE Type + D3D_CBUFFER_TYPE Type +
    + + +

    The number of unique variables.

    +
    + + bb172417 + unsigned int Variables + unsigned int Variables +
    + + +

    Buffer size (in bytes).

    +
    + + bb172417 + unsigned int Size + unsigned int Size +
    + + +

    Shader buffer properties. See D3D10_SHADER_CBUFFER_FLAGS.

    +
    + + bb172417 + D3D_SHADER_CBUFFER_FLAGS uFlags + D3D_SHADER_CBUFFER_FLAGS uFlags +
    + + +

    Describes a shader signature.

    +
    + +

    A shader can take n inputs and can produce m outputs. The order of the input (or output) parameters, their associated types, and any attached semantics make up the shader signature. Each shader has an input and an output signature.

    When compiling a shader or an effect, some API calls validate shader signatures (such as D3D10CompileShader and ). That is, they compare the output signature of one shader (like a vertex shader) with the input signature of another shader (like a pixel shader). This ensures that a shader outputs data that is compatible with a downstream shader that is consuming that data. Compatible means that a shader signature is a exact-match subset of the preceding shader stage. Exact match means parameter types and semantics must exactly match. Subset means that a parameter that is not required by a downstream stage, does not need to include that parameter in its shader signature.

    Get a shader-signature from a shader or an effect by calling APIs such as ID3D10ShaderReflection::GetInputParameterDesc or .

    +
    + + bb172446 + D3D10_SIGNATURE_PARAMETER_DESC + D3D10_SIGNATURE_PARAMETER_DESC +
    + + +

    A per-parameter string that identifies how the data will be used. See Semantics (DirectX HLSL).

    +
    + + bb172446 + const char* SemanticName + char SemanticName +
    + + +

    Semantic index that modifies the semantic. Used to differentiate different parameters that use the same semantic.

    +
    + + bb172446 + unsigned int SemanticIndex + unsigned int SemanticIndex +
    + + +

    The register that will contain this variable's data.

    +
    + + bb172446 + unsigned int Register + unsigned int Register +
    + + +

    A predefined string that determines the functionality of certain pipeline stages. See D3D10_NAME.

    +
    + + bb172446 + D3D_NAME SystemValueType + D3D_NAME SystemValueType +
    + + +

    The per-component-data type that is stored in a register. See D3D10_REGISTER_COMPONENT_TYPE. Each register can store up to four-components of data.

    +
    + + bb172446 + D3D_REGISTER_COMPONENT_TYPE ComponentType + D3D_REGISTER_COMPONENT_TYPE ComponentType +
    + + +

    Mask which indicates which components of a register are used.

    +
    + + bb172446 + unsigned char Mask + unsigned char Mask +
    + + +

    Mask which indicates whether a given component is never written (if the signature is an output signature) or always read (if the signature is an input signature). The mask is a combination of D3D10_REGISTER_COMPONENT_TYPE values.

    +
    + + bb172446 + unsigned char ReadWriteMask + unsigned char ReadWriteMask +
    + + +

    Describes a shader-resource view.

    +
    + +

    A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read. For more information about how views work, see Views

    When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a resource can be viewed with one of these typed formats: , , and , since these typed formats are compatible with the typeless resource.

    Create a shader-resource-view description by calling . To view a shader-resource-view description, call .

    +
    + + bb172437 + D3D10_SHADER_RESOURCE_VIEW_DESC + D3D10_SHADER_RESOURCE_VIEW_DESC +
    + + +

    Specifies the elements in a buffer resource to use in a shader-resource view.

    +
    + +

    The structure is a member of the structure, which represents a shader-resource view description. You can create a shader-resource view by calling the method.

    +
    + + bb204898 + D3D10_BUFFER_SRV + D3D10_BUFFER_SRV +
    + + + No documentation. + + + bb204898 + unsigned int FirstElement + unsigned int FirstElement + + + + No documentation. + + + bb204898 + unsigned int ElementOffset + unsigned int ElementOffset + + + + No documentation. + + + bb204898 + unsigned int NumElements + unsigned int NumElements + + + + No documentation. + + + bb204898 + unsigned int ElementWidth + unsigned int ElementWidth + + + +

    Specifies the subresource from a 1D texture to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + bb172463 + D3D10_TEX1D_SRV + D3D10_TEX1D_SRV +
    + + + No documentation. + + + bb172463 + unsigned int MostDetailedMip + unsigned int MostDetailedMip + + + + No documentation. + + + bb172463 + unsigned int MipLevels + unsigned int MipLevels + + + +

    Specifies the subresource(s) from an array of 1D textures to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + bb172460 + D3D10_TEX1D_ARRAY_SRV + D3D10_TEX1D_ARRAY_SRV +
    + + + No documentation. + + + bb172460 + unsigned int MostDetailedMip + unsigned int MostDetailedMip + + + + No documentation. + + + bb172460 + unsigned int MipLevels + unsigned int MipLevels + + + + No documentation. + + + bb172460 + unsigned int FirstArraySlice + unsigned int FirstArraySlice + + + + No documentation. + + + bb172460 + unsigned int ArraySize + unsigned int ArraySize + + + +

    Specifies the subresource from a 2D texture to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + bb172475 + D3D10_TEX2D_SRV + D3D10_TEX2D_SRV +
    + + + No documentation. + + + bb172475 + unsigned int MostDetailedMip + unsigned int MostDetailedMip + + + + No documentation. + + + bb172475 + unsigned int MipLevels + unsigned int MipLevels + + + +

    Specifies the subresource(s) from an array of 2D textures to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + bb172472 + D3D10_TEX2D_ARRAY_SRV + D3D10_TEX2D_ARRAY_SRV +
    + + + No documentation. + + + bb172472 + unsigned int MostDetailedMip + unsigned int MostDetailedMip + + + + No documentation. + + + bb172472 + unsigned int MipLevels + unsigned int MipLevels + + + + No documentation. + + + bb172472 + unsigned int FirstArraySlice + unsigned int FirstArraySlice + + + + No documentation. + + + bb172472 + unsigned int ArraySize + unsigned int ArraySize + + + +

    Specifies the subresource(s) from a multisampled 2D texture to use in a shader-resource view.

    +
    + +

    Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in . Consequently, UnusedField_NothingToDefine is included so that this structure will compile in C.

    +
    + + bb172469 + D3D10_TEX2DMS_SRV + D3D10_TEX2DMS_SRV +
    + + + No documentation. + + + bb172469 + unsigned int UnusedField_NothingToDefine + unsigned int UnusedField_NothingToDefine + + + +

    Specifies the subresource(s) from an array of multisampled 2D textures to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + bb172466 + D3D10_TEX2DMS_ARRAY_SRV + D3D10_TEX2DMS_ARRAY_SRV +
    + + + No documentation. + + + bb172466 + unsigned int FirstArraySlice + unsigned int FirstArraySlice + + + + No documentation. + + + bb172466 + unsigned int ArraySize + unsigned int ArraySize + + + +

    Specifies the subresource(s) from a 3D texture to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + bb172477 + D3D10_TEX3D_SRV + D3D10_TEX3D_SRV +
    + + + No documentation. + + + bb172477 + unsigned int MostDetailedMip + unsigned int MostDetailedMip + + + + No documentation. + + + bb172477 + unsigned int MipLevels + unsigned int MipLevels + + + +

    Specifies the subresource from a cube texture to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + bb172478 + D3D10_TEXCUBE_SRV + D3D10_TEXCUBE_SRV +
    + + + No documentation. + + + bb172478 + unsigned int MostDetailedMip + unsigned int MostDetailedMip + + + + No documentation. + + + bb172478 + unsigned int MipLevels + unsigned int MipLevels + + + +

    The viewing format. See remarks.

    +
    + + bb172437 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    The resource type of the view. See D3D10_SRV_DIMENSION. This should be the same as the resource type of the underlying resource. This parameter also determines which _SRV to use in the union below.

    +
    + + bb172437 + D3D_SRV_DIMENSION ViewDimension + D3D_SRV_DIMENSION ViewDimension +
    + + +

    View the resource as a buffer using information from a shader-resource view (see ).

    +
    + + bb172437 + D3D10_BUFFER_SRV Buffer + D3D10_BUFFER_SRV Buffer +
    + + +

    View the resource as a 1D texture using information from a shader-resource view (see ).

    +
    + + bb172437 + D3D10_TEX1D_SRV Texture1D + D3D10_TEX1D_SRV Texture1D +
    + + +

    View the resource as a 1D-texture array using information from a shader-resource view (see .

    +
    + + bb172437 + D3D10_TEX1D_ARRAY_SRV Texture1DArray + D3D10_TEX1D_ARRAY_SRV Texture1DArray +
    + + +

    View the resource as a 2D-texture using information from a shader-resource view (see .

    +
    + + bb172437 + D3D10_TEX2D_SRV Texture2D + D3D10_TEX2D_SRV Texture2D +
    + + +

    View the resource as a 2D-texture array using information from a shader-resource view (see .

    +
    + + bb172437 + D3D10_TEX2D_ARRAY_SRV Texture2DArray + D3D10_TEX2D_ARRAY_SRV Texture2DArray +
    + + +

    View the resource as a 2D-multisampled texture using information from a shader-resource view (see .

    +
    + + bb172437 + D3D10_TEX2DMS_SRV Texture2DMS + D3D10_TEX2DMS_SRV Texture2DMS +
    + + +

    View the resource as a 2D-multisampled-texture array using information from a shader-resource view (see .

    +
    + + bb172437 + D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray + D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray +
    + + +

    View the resource as a 3D texture using information from a shader-resource view (see .

    +
    + + bb172437 + D3D10_TEX3D_SRV Texture3D + D3D10_TEX3D_SRV Texture3D +
    + + +

    View the resource as a 3D-cube texture using information from a shader-resource view (see ).

    +
    + + bb172437 + D3D10_TEXCUBE_SRV TextureCube + D3D10_TEXCUBE_SRV TextureCube +
    + + +

    Describes a shader-resource view.

    +
    + +

    A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read. For more information about how views work, see Views

    When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a resource can be viewed with one of these typed formats: , , and , since these typed formats are compatible with the typeless resource.

    Create a shader-resource-view description by calling . To view a shader-resource-view description, call .

    This structure requires Windows Vista Service Pack 1.

    +
    + + bb694534 + D3D10_SHADER_RESOURCE_VIEW_DESC1 + D3D10_SHADER_RESOURCE_VIEW_DESC1 +
    + + +

    Specifies the subresource(s) from an array of cube textures to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    This structure requires Windows Vista Service Pack 1.

    +
    + + bb694536 + D3D10_TEXCUBE_ARRAY_SRV1 + D3D10_TEXCUBE_ARRAY_SRV1 +
    + + + No documentation. + + + bb694536 + unsigned int MostDetailedMip + unsigned int MostDetailedMip + + + + No documentation. + + + bb694536 + unsigned int MipLevels + unsigned int MipLevels + + + + No documentation. + + + bb694536 + unsigned int First2DArrayFace + unsigned int First2DArrayFace + + + + No documentation. + + + bb694536 + unsigned int NumCubes + unsigned int NumCubes + + + +

    The viewing format. See remarks.

    +
    + + bb694534 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    The resource type of the view. See D3D10_SRV_DIMENSION1. This should be the same as the resource type of the underlying resource. This parameter also determines which _SRV to use in the union below.

    +
    + + bb694534 + D3D_SRV_DIMENSION ViewDimension + D3D_SRV_DIMENSION ViewDimension +
    + + +

    View the resource as a buffer using information from a shader-resource view (see ).

    +
    + + bb694534 + D3D10_BUFFER_SRV Buffer + D3D10_BUFFER_SRV Buffer +
    + + +

    View the resource as a 1D texture using information from a shader-resource view (see ).

    +
    + + bb694534 + D3D10_TEX1D_SRV Texture1D + D3D10_TEX1D_SRV Texture1D +
    + + +

    View the resource as a 1D-texture array using information from a shader-resource view (see .

    +
    + + bb694534 + D3D10_TEX1D_ARRAY_SRV Texture1DArray + D3D10_TEX1D_ARRAY_SRV Texture1DArray +
    + + +

    View the resource as a 2D-texture using information from a shader-resource view (see .

    +
    + + bb694534 + D3D10_TEX2D_SRV Texture2D + D3D10_TEX2D_SRV Texture2D +
    + + +

    View the resource as a 2D-texture array using information from a shader-resource view (see .

    +
    + + bb694534 + D3D10_TEX2D_ARRAY_SRV Texture2DArray + D3D10_TEX2D_ARRAY_SRV Texture2DArray +
    + + +

    View the resource as a 2D-multisampled texture using information from a shader-resource view (see .

    +
    + + bb694534 + D3D10_TEX2DMS_SRV Texture2DMS + D3D10_TEX2DMS_SRV Texture2DMS +
    + + +

    View the resource as a 2D-multisampled-texture array using information from a shader-resource view (see .

    +
    + + bb694534 + D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray + D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray +
    + + +

    View the resource as a 3D texture using information from a shader-resource view (see .

    +
    + + bb694534 + D3D10_TEX3D_SRV Texture3D + D3D10_TEX3D_SRV Texture3D +
    + + +

    View the resource as a 3D-cube texture using information from a shader-resource view (see ).

    +
    + + bb694534 + D3D10_TEXCUBE_SRV TextureCube + D3D10_TEXCUBE_SRV TextureCube +
    + + +

    View the resource as an array of cube textures using information from a shader-resource view (see ).

    +
    + + bb694534 + D3D10_TEXCUBE_ARRAY_SRV1 TextureCubeArray + D3D10_TEXCUBE_ARRAY_SRV1 TextureCubeArray +
    + + +

    The member of the vertex decl to do the software skinning on. This is used with the API.

    +
    + + bb172702 + D3DX10_SKINNING_CHANNEL + D3DX10_SKINNING_CHANNEL +
    + + + No documentation. + + + bb172702 + unsigned int SrcOffset + unsigned int SrcOffset + + + + No documentation. + + + bb172702 + unsigned int DestOffset + unsigned int DestOffset + + + + No documentation. + + + bb172702 + BOOL IsNormal + BOOL IsNormal + + + +

    Defines position, texture, and color information about a sprite.

    +
    + + bb172703 + D3DX10_SPRITE + D3DX10_SPRITE +
    + + +

    The sprite's model-world transformation. This defines the position and orientation of the sprite in world space.

    +
    + + bb172703 + D3DXMATRIX matWorld + D3DXMATRIX matWorld +
    + + +

    Offset from the upper-left corner of the texture indicating where the sprite image should start in the texture. TexCoord is in texture coordinates.

    +
    + + bb172703 + D3DXVECTOR2 TexCoord + D3DXVECTOR2 TexCoord +
    + + +

    A vector containing the width and height of the sprite in texture coordinates.

    +
    + + bb172703 + D3DXVECTOR2 TexSize + D3DXVECTOR2 TexSize +
    + + +

    A color that will be multiplied with the pixel color before rendering.

    +
    + + bb172703 + D3DXCOLOR ColorModulate + D3DXCOLOR ColorModulate +
    + + +

    Pointer to a shader-resource view representing the sprite's texture. See Interface.

    +
    + + bb172703 + ID3D10ShaderResourceView* pTexture + ID3D10ShaderResourceView pTexture +
    + + +

    The index of the texture. If pTexture does not represent a texture array, then this should be 0.

    +
    + + bb172703 + unsigned int TextureIndex + unsigned int TextureIndex +
    + + + Gets or sets the texture. + + The texture. + + + +

    Indicates the device state.

    +
    + +

    A state-block mask indicates the device states that a pass or a technique changes. The D3D10StateBlockMaskEnableCapture function provides a convenient way of setting a range of bitmasks for the array members of .

    +
    + + bb172453 + D3D10_STATE_BLOCK_MASK + D3D10_STATE_BLOCK_MASK +
    + + +

    Boolean value indicating whether to save the vertex shader state.

    +
    + + bb172453 + bool VS + bool VS +
    + + +

    Array of vertex-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.

    +
    + + bb172453 + bool VSSamplers[2] + bool VSSamplers +
    + + +

    Array of vertex-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + bb172453 + bool VSShaderResources[16] + bool VSShaderResources +
    + + +

    Array of vertex-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.

    +
    + + bb172453 + bool VSConstantBuffers[2] + bool VSConstantBuffers +
    + + +

    Boolean value indicating whether to save the geometry shader state.

    +
    + + bb172453 + bool GS + bool GS +
    + + +

    Array of geometry-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.

    +
    + + bb172453 + bool GSSamplers[2] + bool GSSamplers +
    + + +

    Array of geometry-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + bb172453 + bool GSShaderResources[16] + bool GSShaderResources +
    + + +

    Array of geometry-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot.

    +
    + + bb172453 + bool GSConstantBuffers[2] + bool GSConstantBuffers +
    + + +

    Boolean value indicating whether to save the pixel shader state.

    +
    + + bb172453 + bool PS + bool PS +
    + + +

    Array of pixel-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.

    +
    + + bb172453 + bool PSSamplers[2] + bool PSSamplers +
    + + +

    Array of pixel-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + bb172453 + bool PSShaderResources[16] + bool PSShaderResources +
    + + +

    Array of pixel-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.

    +
    + + bb172453 + bool PSConstantBuffers[2] + bool PSConstantBuffers +
    + + +

    Array of vertex buffers. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + bb172453 + bool IAVertexBuffers[2] + bool IAVertexBuffers +
    + + +

    Boolean value indicating whether to save the index buffer state.

    +
    + + bb172453 + bool IAIndexBuffer + bool IAIndexBuffer +
    + + +

    Boolean value indicating whether to save the input layout state.

    +
    + + bb172453 + bool IAInputLayout + bool IAInputLayout +
    + + +

    Boolean value indicating whether to save the primitive topology state.

    +
    + + bb172453 + bool IAPrimitiveTopology + bool IAPrimitiveTopology +
    + + +

    Boolean value indicating whether to save the render targets states.

    +
    + + bb172453 + bool OMRenderTargets + bool OMRenderTargets +
    + + +

    Boolean value indicating whether to save the depth-stencil state.

    +
    + + bb172453 + bool OMDepthStencilState + bool OMDepthStencilState +
    + + +

    Boolean value indicating whether to save the blend state.

    +
    + + bb172453 + bool OMBlendState + bool OMBlendState +
    + + +

    Boolean value indicating whether to save the viewports states.

    +
    + + bb172453 + bool RSViewports + bool RSViewports +
    + + +

    Boolean value indicating whether to save the scissor rectangles states.

    +
    + + bb172453 + bool RSScissorRects + bool RSScissorRects +
    + + +

    Boolean value indicating whether to save the rasterizer state.

    +
    + + bb172453 + bool RSRasterizerState + bool RSRasterizerState +
    + + +

    Boolean value indicating whether to save the stream-out buffers states.

    +
    + + bb172453 + bool SOBuffers + bool SOBuffers +
    + + +

    Boolean value indicating whether to save the predication state.

    +
    + + bb172453 + bool Predication + bool Predication +
    + + +

    Description of a vertex element in a vertex buffer in an output slot.

    +
    + + bb172450 + D3D10_SO_DECLARATION_ENTRY + D3D10_SO_DECLARATION_ENTRY +
    + + +

    Type of output element. Possible values: "POSITION", "NORMAL", or "TEXCOORD0".

    +
    + + bb172450 + const char* SemanticName + char SemanticName +
    + + +

    Output element's zero-based index. Should be used if, for example, you have more than one texture coordinate stored in each vertex.

    +
    + + bb172450 + unsigned int SemanticIndex + unsigned int SemanticIndex +
    + + +

    Which component of the entry to begin writing out to. Valid values are 0 ~ 3. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2.

    +
    + + bb172450 + unsigned char StartComponent + unsigned char StartComponent +
    + + +

    The number of components of the entry to write out to. Valid values are 1 ~ 4. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2.

    +
    + + bb172450 + unsigned char ComponentCount + unsigned char ComponentCount +
    + + +

    The output slot that contains the vertex buffer that contains this output entry.

    +
    + + bb172450 + unsigned char OutputSlot + unsigned char OutputSlot +
    + + + Initializes a new instance of the struct. + + Name of the semantic. + Index of the semantic. + The start component. + The component count. + The output slot. + + + +

    Query information about the amount of data streamed out to the stream-output buffers in between and .

    +
    + + bb172403 + D3D10_QUERY_DATA_SO_STATISTICS + D3D10_QUERY_DATA_SO_STATISTICS +
    + + + No documentation. + + + bb172403 + unsigned longlong NumPrimitivesWritten + unsigned longlong NumPrimitivesWritten + + + + No documentation. + + + bb172403 + unsigned longlong PrimitivesStorageNeeded + unsigned longlong PrimitivesStorageNeeded + + + +

    Describes a 1D texture.

    +
    + +

    This structure is used in a call to . A helpful derived structure CD3D10_TEXTURE1D_DESC is declared in D3D10.h, to help create a texture description.

    +
    + + bb172479 + D3D10_TEXTURE1D_DESC + D3D10_TEXTURE1D_DESC +
    + + + No documentation. + + + bb172479 + unsigned int Width + unsigned int Width + + + + No documentation. + + + bb172479 + unsigned int MipLevels + unsigned int MipLevels + + + + No documentation. + + + bb172479 + unsigned int ArraySize + unsigned int ArraySize + + + + No documentation. + + + bb172479 + DXGI_FORMAT Format + DXGI_FORMAT Format + + + + No documentation. + + + bb172479 + D3D10_USAGE Usage + D3D10_USAGE Usage + + + + No documentation. + + + bb172479 + D3D10_BIND_FLAG BindFlags + D3D10_BIND_FLAG BindFlags + + + + No documentation. + + + bb172479 + D3D10_CPU_ACCESS_FLAG CPUAccessFlags + D3D10_CPU_ACCESS_FLAG CPUAccessFlags + + + + No documentation. + + + bb172479 + D3D10_RESOURCE_MISC_FLAG MiscFlags + D3D10_RESOURCE_MISC_FLAG MiscFlags + + + +

    Describes a 2D texture.

    +
    + +

    This structure is used in a call to . A helpful derived structure CD3D10_TEXTURE2D_DESC is declared in D3D10.h, to help create a texture description.

    The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.

    +
    + + bb172480 + D3D10_TEXTURE2D_DESC + D3D10_TEXTURE2D_DESC +
    + + + No documentation. + + + bb172480 + unsigned int Width + unsigned int Width + + + + No documentation. + + + bb172480 + unsigned int Height + unsigned int Height + + + + No documentation. + + + bb172480 + unsigned int MipLevels + unsigned int MipLevels + + + + No documentation. + + + bb172480 + unsigned int ArraySize + unsigned int ArraySize + + + + No documentation. + + + bb172480 + DXGI_FORMAT Format + DXGI_FORMAT Format + + + + No documentation. + + + bb172480 + DXGI_SAMPLE_DESC SampleDesc + DXGI_SAMPLE_DESC SampleDesc + + + + No documentation. + + + bb172480 + D3D10_USAGE Usage + D3D10_USAGE Usage + + + + No documentation. + + + bb172480 + D3D10_BIND_FLAG BindFlags + D3D10_BIND_FLAG BindFlags + + + + No documentation. + + + bb172480 + D3D10_CPU_ACCESS_FLAG CPUAccessFlags + D3D10_CPU_ACCESS_FLAG CPUAccessFlags + + + + No documentation. + + + bb172480 + D3D10_RESOURCE_MISC_FLAG MiscFlags + D3D10_RESOURCE_MISC_FLAG MiscFlags + + + +

    Describes a 3D texture.

    +
    + +

    This structure is used in a call to . A helpful derived structure CD3D10_TEXTURE3D_DESC is declared in D3D10.h, to help create a texture description.

    The device restricts the size of subsampled, block compressed (see Block Compression (Direct3D 10)), and bit format resources to be multiples of sizes specific to each format.

    +
    + + bb172481 + D3D10_TEXTURE3D_DESC + D3D10_TEXTURE3D_DESC +
    + + + No documentation. + + + bb172481 + unsigned int Width + unsigned int Width + + + + No documentation. + + + bb172481 + unsigned int Height + unsigned int Height + + + + No documentation. + + + bb172481 + unsigned int Depth + unsigned int Depth + + + + No documentation. + + + bb172481 + unsigned int MipLevels + unsigned int MipLevels + + + + No documentation. + + + bb172481 + DXGI_FORMAT Format + DXGI_FORMAT Format + + + + No documentation. + + + bb172481 + D3D10_USAGE Usage + D3D10_USAGE Usage + + + + No documentation. + + + bb172481 + D3D10_BIND_FLAG BindFlags + D3D10_BIND_FLAG BindFlags + + + + No documentation. + + + bb172481 + D3D10_CPU_ACCESS_FLAG CPUAccessFlags + D3D10_CPU_ACCESS_FLAG CPUAccessFlags + + + + No documentation. + + + bb172481 + D3D10_RESOURCE_MISC_FLAG MiscFlags + D3D10_RESOURCE_MISC_FLAG MiscFlags + + + +

    Describes parameters used to load a texture from another texture.

    +
    + +

    This structure is used in a call to .

    +
    + + bb172705 + D3DX10_TEXTURE_LOAD_INFO + D3DX10_TEXTURE_LOAD_INFO +
    + + +

    Source texture box (see ).

    +
    + + bb172705 + D3D10_BOX* pSrcBox + D3D10_BOX pSrcBox +
    + + +

    Destination texture box (see ).

    +
    + + bb172705 + D3D10_BOX* pDstBox + D3D10_BOX pDstBox +
    + + +

    Source texture mipmap level, see D3D10CalcSubresource for more detail.

    +
    + + bb172705 + unsigned int SrcFirstMip + unsigned int SrcFirstMip +
    + + +

    Destination texture mipmap level, see D3D10CalcSubresource for more detail.

    +
    + + bb172705 + unsigned int DstFirstMip + unsigned int DstFirstMip +
    + + +

    Number of mipmap levels in the source texture.

    +
    + + bb172705 + unsigned int NumMips + unsigned int NumMips +
    + + +

    First element of the source texture.

    +
    + + bb172705 + unsigned int SrcFirstElement + unsigned int SrcFirstElement +
    + + +

    First element of the destination texture.

    +
    + + bb172705 + unsigned int DstFirstElement + unsigned int DstFirstElement +
    + + +

    Number of elements to load.

    +
    + + bb172705 + unsigned int NumElements + unsigned int NumElements +
    + + +

    Filtering options during resampling (see ).

    +
    + + bb172705 + D3DX10_FILTER_FLAG Filter + D3DX10_FILTER_FLAG Filter +
    + + +

    Filtering options when generating mip levels (see ).

    +
    + + bb172705 + D3DX10_FILTER_FLAG MipFilter + D3DX10_FILTER_FLAG MipFilter +
    + + + Source texture box (see ). + + D3D11_BOX* pSrcBox + + + + Destination texture box (see ). + + D3D11_BOX* pDstBox + + + + The namespace provides a managed Direct3D10 API. + + bb205066 + Direct3D10 + Direct3D10 + + + + Properties defining the way a buffer is bound to the pipeline as a target for stream output operations. + + + + + Gets or sets the buffer being bound. + + + + + Gets or sets the offset from the start of the buffer of the first vertex to use (in bytes). + + + + + Initializes a new instance of the struct. + + The buffer being bound. + The offset to the first vertex (in bytes). + + + + Properties defining the way a buffer (containing vertex data) is bound + to the pipeline for rendering. + + + + + Gets or sets the buffer being bound. + + + + + Gets or sets the stride between vertex elements in the buffer (in bytes). + + + + + Gets or sets the offset from the start of the buffer of the first vertex to use (in bytes). + + + + + Initializes a new instance of the struct. + + The buffer being bound. + The stride between vertex element (in bytes). + The offset to the first vertex (in bytes). + +
    +
    diff --git a/RenderHookAPI/bin/SharpDX.Direct3D11.Effects.dll b/RenderHookAPI/bin/SharpDX.Direct3D11.Effects.dll new file mode 100644 index 0000000000000000000000000000000000000000..16af35a9124849fb8239c6f1e803e740ebafa4ca GIT binary patch literal 57856 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 literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/SharpDX.Direct3D11.Effects.xml b/RenderHookAPI/bin/SharpDX.Direct3D11.Effects.xml new file mode 100644 index 0000000..0318fe1 --- /dev/null +++ b/RenderHookAPI/bin/SharpDX.Direct3D11.Effects.xml @@ -0,0 +1,5240 @@ + + + + SharpDX.Direct3D11.Effects + + + + + The assembly provides Effects11 managed API for Direct3D11. + + ff476080 + Direct3D11 + Direct3D11 + + + + Functions + + + + Functions + + + + + +

    Creates an effect from a binary effect or file.

    +
    +

    Blob of compiled effect data.

    +

    Length of the data blob.

    +

    No effect flags exist. Set to zero.

    +

    Pointer to the on which to create Effect resources.

    +

    Address of the newly created interface.

    + No documentation. +

    The return value is one of the values listed in Direct3D 11 Return Codes.

    + +

    Note??You must use Effects 11 source to build your effects-type application. For more info about using Effects 11 source, see Differences Between Effects 10 and Effects 11.

    +
    + + ff476273 + HRESULT D3DX11CreateEffectFromMemory([In, Buffer] const void* pData,[In] SIZE_T DataLength,[In] unsigned int FXFlags,[In] ID3D11Device* pDevice,[Out, Fast] ID3DX11Effect** ppEffect,[In, Optional] const char* srcName) + D3DX11CreateEffectFromMemory +
    + + +

    An interface manages a set of state objects, resources, and shaders for implementing a rendering effect.

    +
    + +

    An effect is created by calling D3DX11CreateEffectFromMemory.

    The effect system groups the information required for rendering into an effect which contains: state objects for assigning state changes in groups, resources for supplying input data and storing output data, and programs that control how the rendering is done called shaders.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.?Note??

    If you call QueryInterface on an object to retrieve the interface, QueryInterface returns E_NOINTERFACE. To work around this issue, use the following code:

     * pIUnknown = (*)pEffect; pIUnknown->AddRef();	
    +            
    ? +
    + + ff476652 + ID3DX11Effect + ID3DX11Effect +
    + + + Initializes a new instance of the class. + + The device. + The effect byte code. + Effect compile options + Name of the effect source file. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Test an effect to see if it contains valid syntax.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476844 + IsValid + IsValid + BOOL ID3DX11Effect::IsValid() +
    + + +

    Get the device that created the effect.

    +
    + +

    An effect is created for a specific device, by calling a function such as D3DX11CreateEffectFromMemory.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476835 + GetDevice + GetDevice + HRESULT ID3DX11Effect::GetDevice([Out] ID3D11Device** ppDevice) +
    + + +

    Get an effect description.

    +
    + +

    An effect description contains basic information about an effect such as the techniques it contains and the constant buffer resources it requires.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476834 + GetDesc + GetDesc + HRESULT ID3DX11Effect::GetDesc([Out] D3DX11_EFFECT_DESC* pDesc) +
    + + +

    Gets a class linkage interface.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476831 + GetClassLinkage + GetClassLinkage + ID3D11ClassLinkage* ID3DX11Effect::GetClassLinkage() +
    + + +

    Test an effect to see if the reflection metadata has been removed from memory.

    +
    + +

    An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the API. You can minimize the amount of memory required by an effect by calling which removes the reflection metadata from memory. Of course, API methods to read variables will no longer work once reflection data has been removed.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476843 + IsOptimized + IsOptimized + BOOL ID3DX11Effect::IsOptimized() +
    + + +

    Test an effect to see if it contains valid syntax.

    +
    +

    TRUE if the code syntax is valid; otherwise .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476844 + BOOL ID3DX11Effect::IsValid() + ID3DX11Effect::IsValid +
    + + +

    Get the device that created the effect.

    +
    +

    A reference to an .

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    An effect is created for a specific device, by calling a function such as D3DX11CreateEffectFromMemory.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476835 + HRESULT ID3DX11Effect::GetDevice([Out] ID3D11Device** ppDevice) + ID3DX11Effect::GetDevice +
    + + +

    Get an effect description.

    +
    +

    A reference to an effect description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    An effect description contains basic information about an effect such as the techniques it contains and the constant buffer resources it requires.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476834 + HRESULT ID3DX11Effect::GetDesc([Out] D3DX11_EFFECT_DESC* pDesc) + ID3DX11Effect::GetDesc +
    + + +

    Get a constant buffer by index.

    +
    +

    A zero-based index.

    +

    A reference to a .

    + +

    An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476832 + ID3DX11EffectConstantBuffer* ID3DX11Effect::GetConstantBufferByIndex([In] unsigned int Index) + ID3DX11Effect::GetConstantBufferByIndex +
    + + +

    Get a constant buffer by name.

    +
    +

    The constant-buffer name.

    +

    A reference to the constant buffer indicated by the Name. See .

    + +

    An effect that contains a variable that will be read/written by an application requires at least one constant buffer. For best performance, an effect should organize variables into one or more constant buffers based on their frequency of update.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476833 + ID3DX11EffectConstantBuffer* ID3DX11Effect::GetConstantBufferByName([In] const char* Name) + ID3DX11Effect::GetConstantBufferByName +
    + + +

    Get a variable by index.

    +
    +

    A zero-based index.

    +

    A reference to a .

    + +

    An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access any local non-static effect variable using its name or with an index.

    The method returns a reference to an effect-variable interface if a variable is not found; you can call to verify whether or not the index exists.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476840 + ID3DX11EffectVariable* ID3DX11Effect::GetVariableByIndex([In] unsigned int Index) + ID3DX11Effect::GetVariableByIndex +
    + + +

    Get a variable by name.

    +
    +

    The variable name.

    +

    A reference to an . Returns an invalid variable if the specified name cannot be found.

    + +

    An effect may contain one or more variables. Variables outside of a technique are considered global to all effects, those located inside of a technique are local to that technique. You can access an effect variable using its name or with an index.

    The method returns a reference to an effect-variable interface whether or not a variable is found. should be called to verify whether or not the name exists.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476841 + ID3DX11EffectVariable* ID3DX11Effect::GetVariableByName([In] const char* Name) + ID3DX11Effect::GetVariableByName +
    + + +

    Get a variable by semantic.

    +
    +

    The semantic name.

    +

    A reference to the effect variable indicated by the Semantic. See .

    + +

    Each effect variable can have a semantic attached, which is a user defined metadata string. Some system-value semantics are reserved words that trigger built in functionality by pipeline stages.

    The method returns a reference to an effect-variable interface if a variable is not found; you can call to verify whether or not the semantic exists.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476842 + ID3DX11EffectVariable* ID3DX11Effect::GetVariableBySemantic([In] const char* Semantic) + ID3DX11Effect::GetVariableBySemantic +
    + + +

    Gets an effect group by index.

    +
    +

    Index of the effect group.

    +

    A reference to an interface.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476836 + ID3DX11EffectGroup* ID3DX11Effect::GetGroupByIndex([In] unsigned int Index) + ID3DX11Effect::GetGroupByIndex +
    + + +

    Gets an effect group by name.

    +
    +

    Name of the effect group.

    +

    A reference to an interface.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476837 + ID3DX11EffectGroup* ID3DX11Effect::GetGroupByName([In] const char* Name) + ID3DX11Effect::GetGroupByName +
    + + +

    Get a technique by index.

    +
    +

    A zero-based index.

    +

    A reference to an .

    + +

    An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476838 + ID3DX11EffectTechnique* ID3DX11Effect::GetTechniqueByIndex([In] unsigned int Index) + ID3DX11Effect::GetTechniqueByIndex +
    + + +

    Get a technique by name.

    +
    +

    The name of the technique.

    +

    A reference to an . If a technique with the appropriate name is not found an invalid technique is returned. should be called on the returned technique to determine whether it is valid.

    + +

    An effect contains one or more techniques; each technique contains one or more passes. You can access a technique using its name or with an index.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476839 + ID3DX11EffectTechnique* ID3DX11Effect::GetTechniqueByName([In] const char* Name) + ID3DX11Effect::GetTechniqueByName +
    + + +

    Gets a class linkage interface.

    +
    +

    Returns a reference to an interface.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476831 + ID3D11ClassLinkage* ID3DX11Effect::GetClassLinkage() + ID3DX11Effect::GetClassLinkage +
    + + +

    Creates a copy of an effect interface.

    +
    +

    Flags affecting the creation of the cloned effect. Can be 0 or one of the following values.

    FlagDescription
    D3DX11_EFFECT_CLONE_FORCE_NONSINGLEIgnore all "single" qualifiers on cbuffers. All cbuffers will have their own s created in the cloned effect.

    ?

    +

    Pointer to an reference that will be set to the copy of the effect.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476830 + HRESULT ID3DX11Effect::CloneEffect([In] unsigned int Flags,[Out] ID3DX11Effect** ppClonedEffect) + ID3DX11Effect::CloneEffect +
    + + +

    Minimize the amount of memory required for an effect.

    +
    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the API. You can minimize the amount of memory required by an effect by calling which removes the reflection metadata from memory. API methods to read variables will no longer work once reflection data has been removed.

    The following methods will fail after Optimize has been called on an effect.

    Note??References retrieved with these methods before calling are still valid after is called. This allows the application to get all the variables, techniques, and passes it will use, call Optimize, and then use the effect.?Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476845 + HRESULT ID3DX11Effect::Optimize() + ID3DX11Effect::Optimize +
    + + +

    Test an effect to see if the reflection metadata has been removed from memory.

    +
    +

    TRUE if the effect is optimized; otherwise .

    + +

    An effect uses memory space two different ways: to store the information required by the runtime to execute an effect, and to store the metadata required to reflect information back to an application using the API. You can minimize the amount of memory required by an effect by calling which removes the reflection metadata from memory. Of course, API methods to read variables will no longer work once reflection data has been removed.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476843 + BOOL ID3DX11Effect::IsOptimized() + ID3DX11Effect::IsOptimized +
    + + +

    The blend-variable interface accesses blend state.

    +
    + +

    An interface is created when an effect is read into memory.

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476653 + ID3DX11EffectBlendVariable + ID3DX11EffectBlendVariable +
    + + + Get a pointer to a blend-state interface. + + Returns . + HRESULT ID3D10EffectBlendVariable::GetBlendState([None] int Index,[Out] ID3D10BlendState** ppBlendState) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to a blend-state interface.

    +
    +

    Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.

    +

    The address of a reference to a blend-state interface (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476655 + HRESULT ID3DX11EffectBlendVariable::GetBlendState([In] unsigned int Index,[Out] ID3D11BlendState** ppState) + ID3DX11EffectBlendVariable::GetBlendState +
    + + +

    Sets an effect's blend-state.

    +
    +

    Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.

    +

    A reference to an interface containing the blend-state to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476656 + HRESULT ID3DX11EffectBlendVariable::SetBlendState([In] unsigned int Index,[In] ID3D11BlendState* pState) + ID3DX11EffectBlendVariable::SetBlendState +
    + + +

    Reverts a previously set blend-state.

    +
    +

    Index into an array of blend-state interfaces. If there is only one blend-state interface, use 0.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476657 + HRESULT ID3DX11EffectBlendVariable::UndoSetBlendState([In] unsigned int Index) + ID3DX11EffectBlendVariable::UndoSetBlendState +
    + + +

    Get a reference to a blend-state variable.

    +
    +

    Index into an array of blend-state descriptions. If there is only one blend-state variable in the effect, use 0.

    +

    A reference to a blend-state description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476654 + HRESULT ID3DX11EffectBlendVariable::GetBackingStore([In] unsigned int Index,[Out] D3D11_BLEND_DESC* pDesc) + ID3DX11EffectBlendVariable::GetBackingStore +
    + + +

    A depth-stencil-variable interface accesses depth-stencil state.

    +
    + +

    An interface is created when an effect is read into memory.

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476677 + ID3DX11EffectDepthStencilVariable + ID3DX11EffectDepthStencilVariable +
    + + + Get a pointer to a depth-stencil interface. + + Returns a pointer to a blend-state interface (see ). + HRESULT ID3D10EffectDepthStencilVariable::GetDepthStencilState([None] int Index,[Out] ID3D10DepthStencilState** ppDepthStencilState) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to a depth-stencil interface.

    +
    +

    Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.

    +

    The address of a reference to a blend-state interface (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476679 + HRESULT ID3DX11EffectDepthStencilVariable::GetDepthStencilState([In] unsigned int Index,[Out] ID3D11DepthStencilState** ppState) + ID3DX11EffectDepthStencilVariable::GetDepthStencilState +
    + + +

    Sets the depth stencil state.

    +
    +

    Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.

    +

    Pointer to an interface containing the new depth stencil state.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476680 + HRESULT ID3DX11EffectDepthStencilVariable::SetDepthStencilState([In] unsigned int Index,[In] ID3D11DepthStencilState* pState) + ID3DX11EffectDepthStencilVariable::SetDepthStencilState +
    + + +

    Reverts a previously set depth stencil state.

    +
    +

    Index into an array of depth-stencil interfaces. If there is only one depth-stencil interface, use 0.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476681 + HRESULT ID3DX11EffectDepthStencilVariable::UndoSetDepthStencilState([In] unsigned int Index) + ID3DX11EffectDepthStencilVariable::UndoSetDepthStencilState +
    + + +

    Get a reference to a variable that contains depth-stencil state.

    +
    +

    Index into an array of depth-stencil-state descriptions. If there is only one depth-stencil variable in the effect, use 0.

    +

    A reference to a depth-stencil-state description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476678 + HRESULT ID3DX11EffectDepthStencilVariable::GetBackingStore([In] unsigned int Index,[Out] D3D11_DEPTH_STENCIL_DESC* pDesc) + ID3DX11EffectDepthStencilVariable::GetBackingStore +
    + + +

    A depth-stencil-view-variable interface accesses a depth-stencil view.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476682 + ID3DX11EffectDepthStencilViewVariable + ID3DX11EffectDepthStencilViewVariable +
    + + + Set an array of depth-stencil-view resources. + + A pointer to an array of depth-stencil-view interfaces. See . + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectDepthStencilViewVariable::SetDepthStencilArray([In, Buffer] ID3D10DepthStencilView** ppResources,[None] int Offset,[None] int Count) + + + + Set an array of depth-stencil-view resources. + + A pointer to an array of depth-stencil-view interfaces. See . + The zero-based array index to set the first interface. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectDepthStencilViewVariable::SetDepthStencilArray([In, Buffer] ID3D10DepthStencilView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of depth-stencil-view resources. + + The number of elements in the array. + Returns an array of depth-stencil-view interfaces. See . + HRESULT ID3D10EffectDepthStencilViewVariable::GetDepthStencilArray([Out, Buffer] ID3D10DepthStencilView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of depth-stencil-view resources. + + The zero-based array index to get the first interface. + The number of elements in the array. + Returns an array of depth-stencil-view interfaces. See . + HRESULT ID3D10EffectDepthStencilViewVariable::GetDepthStencilArray([Out, Buffer] ID3D10DepthStencilView** ppResources,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a depth-stencil-view resource.

    +
    +

    A reference to a depth-stencil-view interface. See .

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476685 + HRESULT ID3DX11EffectDepthStencilViewVariable::SetDepthStencil([In] ID3D11DepthStencilView* pResource) + ID3DX11EffectDepthStencilViewVariable::SetDepthStencil +
    + + +

    Get a depth-stencil-view resource.

    +
    +

    The address of a reference to a depth-stencil-view interface. See .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476683 + HRESULT ID3DX11EffectDepthStencilViewVariable::GetDepthStencil([Out] ID3D11DepthStencilView** ppResource) + ID3DX11EffectDepthStencilViewVariable::GetDepthStencil +
    + + +

    Set an array of depth-stencil-view resources.

    +
    +

    A reference to an array of depth-stencil-view interfaces. See .

    +

    The zero-based array index to set the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476686 + HRESULT ID3DX11EffectDepthStencilViewVariable::SetDepthStencilArray([In, Buffer] ID3D11DepthStencilView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectDepthStencilViewVariable::SetDepthStencilArray +
    + + +

    Set an array of depth-stencil-view resources.

    +
    +

    A reference to an array of depth-stencil-view interfaces. See .

    +

    The zero-based array index to set the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476686 + HRESULT ID3DX11EffectDepthStencilViewVariable::SetDepthStencilArray([In, Buffer] ID3D11DepthStencilView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectDepthStencilViewVariable::SetDepthStencilArray +
    + + +

    Set an array of depth-stencil-view resources.

    +
    +

    A reference to an array of depth-stencil-view interfaces. See .

    +

    The zero-based array index to set the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476686 + HRESULT ID3DX11EffectDepthStencilViewVariable::SetDepthStencilArray([In, Buffer] ID3D11DepthStencilView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectDepthStencilViewVariable::SetDepthStencilArray +
    + + +

    Get an array of depth-stencil-view resources.

    +
    +

    A reference to an array of depth-stencil-view interfaces. See .

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476684 + HRESULT ID3DX11EffectDepthStencilViewVariable::GetDepthStencilArray([Out, Buffer] ID3D11DepthStencilView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectDepthStencilViewVariable::GetDepthStencilArray +
    + + +

    Transpose and set an array of floating-point matrices.

    +
    + +

    Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476705 + ID3DX11EffectMatrixVariable + ID3DX11EffectMatrixVariable +
    + + + Set a floating-point matrix. + + A pointer to the first element in the matrix. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectMatrixVariable::SetMatrix([In] float* pData) + + + + Get a matrix. + + A reference to the first element in a matrix. + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11. + + HRESULT ID3DX11EffectMatrixVariable::GetMatrix([Out] SHARPDX_MATRIX* pData) + + + + Get a matrix. + + A reference to the first element in a matrix. + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11. + + HRESULT ID3DX11EffectMatrixVariable::GetMatrix([Out] SHARPDX_MATRIX* pData) + + + + Set a floating-point matrix. + + A pointer to the first element in the matrix. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectMatrixVariable::SetMatrix([In] float* pData) + + + + Set an array of floating-point matrices. + + A pointer to the first matrix. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectMatrixVariable::SetMatrixArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Set an array of floating-point matrices. + + A pointer to the first matrix. + The number of matrix elements to skip from the start of the array. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectMatrixVariable::SetMatrixArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of matrices. + + The number of matrices in the returned array. + Returns an array of matrix. + HRESULT ID3D11EffectMatrixVariable::GetMatrixArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of matrices. + + The offset (in number of matrices) between the start of the array and the first matrix returned. + The number of matrices in the returned array. + Returns an array of matrix. + HRESULT ID3D11EffectMatrixVariable::GetMatrixArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Transpose and set a floating-point matrix. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + A pointer to the first element of a matrix. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectMatrixVariable::SetMatrixTranspose([In] float* pData) + + + + Transpose and set a floating-point matrix. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + A pointer to the first element of a matrix. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectMatrixVariable::SetMatrixTranspose([In] float* pData) + + + + Transpose and set an array of floating-point matrices. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + A pointer to an array of matrices. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectMatrixVariable::SetMatrixTransposeArray([In] float* pData,[None] int Offset,[None] int Count) + + + + Transpose and set an array of floating-point matrices. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + A pointer to an array of matrices. + The offset (in number of matrices) between the start of the array and the first matrix to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectMatrixVariable::SetMatrixTransposeArray([In] float* pData,[None] int Offset,[None] int Count) + + + + Transpose and get a floating-point matrix. + + The transposed matrix. + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11. + + HRESULT ID3DX11EffectMatrixVariable::GetMatrixTranspose([Out] SHARPDX_MATRIX* pData) + + + + Transpose and get a floating-point matrix. + + The transposed matrix. + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11. + + HRESULT ID3DX11EffectMatrixVariable::GetMatrixTranspose([Out] SHARPDX_MATRIX* pData) + + + + Transpose and get an array of floating-point matrices. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + The number of matrices in the array to get. + Returns an array of transposed . + HRESULT ID3D11EffectMatrixVariable::GetMatrixTransposeArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Transpose and get an array of floating-point matrices. + + + Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa). + + The offset (in number of matrices) between the start of the array and the first matrix to get. + The number of matrices in the array to get. + Returns an array of transposed . + HRESULT ID3D11EffectMatrixVariable::GetMatrixTransposeArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a floating-point matrix.

    +
    +

    A reference to the first element in the matrix.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476702 + HRESULT ID3DX11EffectMatrixVariable::SetMatrix([In] const SHARPDX_MATRIX* pData) + ID3DX11EffectMatrixVariable::SetMatrix +
    + + +

    Get a matrix.

    +
    +

    A reference to the first element in a matrix.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476698 + HRESULT ID3DX11EffectMatrixVariable::GetMatrix([Out] SHARPDX_MATRIX* pData) + ID3DX11EffectMatrixVariable::GetMatrix +
    + + +

    Set an array of floating-point matrices.

    +
    +

    A reference to the first matrix.

    +

    The number of matrix elements to skip from the start of the array.

    +

    The number of elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476703 + HRESULT ID3DX11EffectMatrixVariable::SetMatrixArray([In, Buffer] const SHARPDX_MATRIX* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectMatrixVariable::SetMatrixArray +
    + + +

    Get an array of matrices.

    +
    +

    A reference to the first element of the first matrix in an array of matrices.

    +

    The offset (in number of matrices) between the start of the array and the first matrix returned.

    +

    The number of matrices in the returned array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476699 + HRESULT ID3DX11EffectMatrixVariable::GetMatrixArray([Out, Buffer] SHARPDX_MATRIX* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectMatrixVariable::GetMatrixArray +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DX11EffectMatrixVariable::SetMatrixPointerArray([In, Buffer] const float** ppData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectMatrixVariable::SetMatrixPointerArray + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DX11EffectMatrixVariable::GetMatrixPointerArray([Out, Buffer] float** ppData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectMatrixVariable::GetMatrixPointerArray + + + +

    Transpose and set a floating-point matrix.

    +
    +

    A reference to the first element of a matrix.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476704 + HRESULT ID3DX11EffectMatrixVariable::SetMatrixTranspose([In] const SHARPDX_MATRIX* pData) + ID3DX11EffectMatrixVariable::SetMatrixTranspose +
    + + +

    Transpose and get a floating-point matrix.

    +
    +

    A reference to the first element of a transposed matrix.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476700 + HRESULT ID3DX11EffectMatrixVariable::GetMatrixTranspose([Out] SHARPDX_MATRIX* pData) + ID3DX11EffectMatrixVariable::GetMatrixTranspose +
    + + +

    Transpose and set an array of floating-point matrices.

    +
    +

    A reference to an array of matrices.

    +

    The offset (in number of matrices) between the start of the array and the first matrix to set.

    +

    The number of matrices in the array to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476705 + HRESULT ID3DX11EffectMatrixVariable::SetMatrixTransposeArray([In, Buffer] const SHARPDX_MATRIX* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectMatrixVariable::SetMatrixTransposeArray +
    + + +

    Transpose and get an array of floating-point matrices.

    +
    +

    A reference to the first element of an array of tranposed matrices.

    +

    The offset (in number of matrices) between the start of the array and the first matrix to get.

    +

    The number of matrices in the array to get.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    Transposing a matrix will rearrange the data order from row-column order to column-row order (or vice versa).

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476701 + HRESULT ID3DX11EffectMatrixVariable::GetMatrixTransposeArray([Out, Buffer] SHARPDX_MATRIX* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectMatrixVariable::GetMatrixTransposeArray +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DX11EffectMatrixVariable::SetMatrixTransposePointerArray([In, Buffer] const float** ppData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectMatrixVariable::SetMatrixTransposePointerArray + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DX11EffectMatrixVariable::GetMatrixTransposePointerArray([Out, Buffer] float** ppData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectMatrixVariable::GetMatrixTransposePointerArray + + + +

    An interface encapsulates state assignments within a technique.

    The lifetime of an object is equal to the lifetime of its parent object.

    • Methods
    +
    + +

    A pass is a block of code that sets render-state objects and shaders. A pass is declared within a technique.

    To get an effect-pass interface, call a method like .

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476706 + ID3DX11EffectPass + ID3DX11EffectPass +
    + + + Set the state contained in a pass to the device. + + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT Apply([None] UINT Flags) + + + + Set the state contained in a pass to the device. + + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT Apply([None] UINT Flags) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Test a pass to see if it contains valid syntax.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476718 + IsValid + IsValid + BOOL ID3DX11EffectPass::IsValid() +
    + + +

    Get a pass description.

    +
    + +

    A pass is a block of code that sets render state and shaders (which in turn sets constant buffers, samplers and textures). An effect technique contains one or more passes.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476712 + GetDesc + GetDesc + HRESULT ID3DX11EffectPass::GetDesc([Out] D3DX11_PASS_DESC* pDesc) +
    + + +

    Get a vertex-shader description.

    +
    + +

    An effect pass can contain render state assignments and shader object assignments.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476717 + GetVertexShaderDesc + GetVertexShaderDesc + HRESULT ID3DX11EffectPass::GetVertexShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) +
    + + +

    Get a geometry-shader description.

    +
    + +

    An effect pass can contain render state assignments and shader object assignments.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476714 + GetGeometryShaderDesc + GetGeometryShaderDesc + HRESULT ID3DX11EffectPass::GetGeometryShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) +
    + + +

    Get a pixel-shader description.

    +
    + +

    An effect pass can contain render state assignments and shader object assignments.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476716 + GetPixelShaderDesc + GetPixelShaderDesc + HRESULT ID3DX11EffectPass::GetPixelShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) +
    + + +

    Get hull-shader description.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476715 + GetHullShaderDesc + GetHullShaderDesc + HRESULT ID3DX11EffectPass::GetHullShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) +
    + + +

    Get a domain-shader description.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476713 + GetDomainShaderDesc + GetDomainShaderDesc + HRESULT ID3DX11EffectPass::GetDomainShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) +
    + + +

    Get a compute-shader description.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476711 + GetComputeShaderDesc + GetComputeShaderDesc + HRESULT ID3DX11EffectPass::GetComputeShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) +
    + + +

    Test a pass to see if it contains valid syntax.

    +
    +

    TRUE if the code syntax is valid; otherwise .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476718 + BOOL ID3DX11EffectPass::IsValid() + ID3DX11EffectPass::IsValid +
    + + +

    Get a pass description.

    +
    +

    A reference to a pass description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    A pass is a block of code that sets render state and shaders (which in turn sets constant buffers, samplers and textures). An effect technique contains one or more passes.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476712 + HRESULT ID3DX11EffectPass::GetDesc([Out] D3DX11_PASS_DESC* pDesc) + ID3DX11EffectPass::GetDesc +
    + + +

    Get a vertex-shader description.

    +
    +

    A reference to a vertex-shader description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    An effect pass can contain render state assignments and shader object assignments.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476717 + HRESULT ID3DX11EffectPass::GetVertexShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) + ID3DX11EffectPass::GetVertexShaderDesc +
    + + +

    Get a geometry-shader description.

    +
    +

    A reference to a geometry-shader description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    An effect pass can contain render state assignments and shader object assignments.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476714 + HRESULT ID3DX11EffectPass::GetGeometryShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) + ID3DX11EffectPass::GetGeometryShaderDesc +
    + + +

    Get a pixel-shader description.

    +
    +

    A reference to a pixel-shader description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    An effect pass can contain render state assignments and shader object assignments.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476716 + HRESULT ID3DX11EffectPass::GetPixelShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) + ID3DX11EffectPass::GetPixelShaderDesc +
    + + +

    Get hull-shader description.

    +
    +

    A reference to a hull-shader description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476715 + HRESULT ID3DX11EffectPass::GetHullShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) + ID3DX11EffectPass::GetHullShaderDesc +
    + + +

    Get a domain-shader description.

    +
    +

    A reference to a domain-shader description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476713 + HRESULT ID3DX11EffectPass::GetDomainShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) + ID3DX11EffectPass::GetDomainShaderDesc +
    + + +

    Get a compute-shader description.

    +
    +

    A reference to a compute-shader description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476711 + HRESULT ID3DX11EffectPass::GetComputeShaderDesc([Out] D3DX11_PASS_SHADER_DESC* pDesc) + ID3DX11EffectPass::GetComputeShaderDesc +
    + + +

    Get an annotation by index.

    +
    +

    A zero-based index.

    +

    A reference to an .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476709 + ID3DX11EffectVariable* ID3DX11EffectPass::GetAnnotationByIndex([In] unsigned int Index) + ID3DX11EffectPass::GetAnnotationByIndex +
    + + +

    Get an annotation by name.

    +
    +

    The name of the annotation.

    +

    A reference to an .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476710 + ID3DX11EffectVariable* ID3DX11EffectPass::GetAnnotationByName([In] const char* Name) + ID3DX11EffectPass::GetAnnotationByName +
    + + +

    Set the state contained in a pass to the device.

    +
    +

    Unused.

    +

    The to apply the pass to.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476707 + HRESULT ID3DX11EffectPass::Apply([In] unsigned int Flags,[In] ID3D11DeviceContext* pContext) + ID3DX11EffectPass::Apply +
    + + +

    Generate a mask for allowing/preventing state changes.

    +
    +

    A reference to a state-block mask (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476708 + HRESULT ID3DX11EffectPass::ComputeStateBlockMask([InOut] D3DX11_STATE_BLOCK_MASK* pStateBlockMask) + ID3DX11EffectPass::ComputeStateBlockMask +
    + + +

    Describes an effect pass, which contains pipeline state.

    +
    + +

    is used with .

    +
    + + ff476319 + D3DX11_PASS_DESC + D3DX11_PASS_DESC +
    + + + Returns the signature of this Effect pass. + + + + + Returns true if this Effect pass has a Signature (eg: if a VertexShader or Geometry Shader is present), false otherwise + + + + +

    Name of this pass (null if not anonymous).

    +
    + + ff476319 + const char* Name + char Name +
    + + +

    Number of annotations on this pass.

    +
    + + ff476319 + unsigned int Annotations + unsigned int Annotations +
    + + +

    Signature from the vertex shader or geometry shader (if there is no vertex shader) or null if neither exists.

    +
    + + ff476319 + unsigned char* pIAInputSignature + unsigned char pIAInputSignature +
    + + +

    Singature size in bytes.

    +
    + + ff476319 + unsigned int IAInputSignatureSize + unsigned int IAInputSignatureSize +
    + + +

    The stencil-reference value used in the depth-stencil state.

    +
    + + ff476319 + unsigned int StencilRef + unsigned int StencilRef +
    + + +

    The sample mask for the blend state.

    +
    + + ff476319 + unsigned int SampleMask + unsigned int SampleMask +
    + + +

    The per-component blend factors (RGBA) for the blend state.

    +
    + + ff476319 + SHARPDX_COLOR4 BlendFactor + SHARPDX_COLOR4 BlendFactor +
    + + +

    Describes an effect pass.

    +
    + +

    is used with Get*ShaderDesc methods.

    If this is an inline shader assignment, the returned interface will be an anonymous shader variable, which is not retrievable any other way. It's name in the variable description will be "$Anonymous". If there is no assignment of this type in the pass block, pShaderVariable != null, but pShaderVariable->IsValid() == .

    +
    + + ff476320 + D3DX11_PASS_SHADER_DESC + D3DX11_PASS_SHADER_DESC +
    + + + A reference to the variable that the shader came from. If it is an inline shader assignment, the returned interface will be an anonymous shader variable, which is not retrievable any other way. Its name in the variable description will be "$Anonymous". If there is no assignment of this type in the pass block, this will point to a shader variable that returns false when IsValid is called. + + ID3D10EffectShaderVariable* pShaderVariable + + + +

    The variable that this shader came from.

    +
    + + ff476320 + ID3DX11EffectShaderVariable* pShaderVariable + ID3DX11EffectShaderVariable pShaderVariable +
    + + +

    The element of pShaderVariable (if an array) or 0 if not applicable.

    +
    + + ff476320 + unsigned int ShaderIndex + unsigned int ShaderIndex +
    + + +

    Reverts a previously set rasterizer state.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476723 + ID3DX11EffectRasterizerVariable + ID3DX11EffectRasterizerVariable +
    + + + Get a pointer to a rasterizer interface. + + Returns a pointer to a rasterizer interface (see ). + HRESULT ID3D10EffectRasterizerVariable::GetRasterizerState([None] int Index,[Out] ID3D10RasterizerState** ppRasterizerState) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to a rasterizer interface.

    +
    +

    Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0.

    +

    The address of a reference to a rasterizer interface (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476721 + HRESULT ID3DX11EffectRasterizerVariable::GetRasterizerState([In] unsigned int Index,[Out] ID3D11RasterizerState** ppState) + ID3DX11EffectRasterizerVariable::GetRasterizerState +
    + + +

    Sets the rasterizer state.

    +
    +

    Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0.

    +

    Pointer to an interface.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476722 + HRESULT ID3DX11EffectRasterizerVariable::SetRasterizerState([In] unsigned int Index,[In] ID3D11RasterizerState* pState) + ID3DX11EffectRasterizerVariable::SetRasterizerState +
    + + +

    Reverts a previously set rasterizer state.

    +
    +

    Index into an array of rasterizer interfaces. If there is only one rasterizer interface, use 0.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476723 + HRESULT ID3DX11EffectRasterizerVariable::UndoSetRasterizerState([In] unsigned int Index) + ID3DX11EffectRasterizerVariable::UndoSetRasterizerState +
    + + +

    Get a reference to a variable that contains rasteriser state.

    +
    +

    Index into an array of rasteriser-state descriptions. If there is only one rasteriser variable in the effect, use 0.

    +

    A reference to a rasteriser-state description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. Backing store data can used to recreate the variable when necessary.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476720 + HRESULT ID3DX11EffectRasterizerVariable::GetBackingStore([In] unsigned int Index,[Out] D3D11_RASTERIZER_DESC* pDesc) + ID3DX11EffectRasterizerVariable::GetBackingStore +
    + + +

    Set a render-target.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476727 + ID3DX11EffectRenderTargetViewVariable + ID3DX11EffectRenderTargetViewVariable +
    + + + Set an array of render-targets. + + Set an array of render-target-view interfaces. See . + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectRenderTargetViewVariable::SetRenderTargetArray([In, Buffer] ID3D10RenderTargetView** ppResources,[None] int Offset,[None] int Count) + + + + Set an array of render-targets. + + Set an array of render-target-view interfaces. See . + The zero-based array index to store the first interface. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectRenderTargetViewVariable::SetRenderTargetArray([In, Buffer] ID3D10RenderTargetView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of render-targets. + + The number of elements in the array. + Returns an array of . + HRESULT ID3D10EffectRenderTargetViewVariable::GetRenderTargetArray([Out, Buffer] ID3D10RenderTargetView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of render-targets. + + The zero-based array index to get the first interface. + The number of elements in the array. + Returns an array of . + HRESULT ID3D10EffectRenderTargetViewVariable::GetRenderTargetArray([Out, Buffer] ID3D10RenderTargetView** ppResources,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a render-target.

    +
    +

    A reference to a render-target-view interface. See .

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476727 + HRESULT ID3DX11EffectRenderTargetViewVariable::SetRenderTarget([In] ID3D11RenderTargetView* pResource) + ID3DX11EffectRenderTargetViewVariable::SetRenderTarget +
    + + +

    Get a render-target.

    +
    +

    The address of a reference to a render-target-view interface. See .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476725 + HRESULT ID3DX11EffectRenderTargetViewVariable::GetRenderTarget([Out] ID3D11RenderTargetView** ppResource) + ID3DX11EffectRenderTargetViewVariable::GetRenderTarget +
    + + +

    Set an array of render-targets.

    +
    +

    Set an array of render-target-view interfaces. See .

    +

    The zero-based array index to store the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476728 + HRESULT ID3DX11EffectRenderTargetViewVariable::SetRenderTargetArray([In, Buffer] ID3D11RenderTargetView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectRenderTargetViewVariable::SetRenderTargetArray +
    + + +

    Set an array of render-targets.

    +
    +

    Set an array of render-target-view interfaces. See .

    +

    The zero-based array index to store the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476728 + HRESULT ID3DX11EffectRenderTargetViewVariable::SetRenderTargetArray([In, Buffer] ID3D11RenderTargetView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectRenderTargetViewVariable::SetRenderTargetArray +
    + + +

    Set an array of render-targets.

    +
    +

    Set an array of render-target-view interfaces. See .

    +

    The zero-based array index to store the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476728 + HRESULT ID3DX11EffectRenderTargetViewVariable::SetRenderTargetArray([In, Buffer] ID3D11RenderTargetView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectRenderTargetViewVariable::SetRenderTargetArray +
    + + +

    Get an array of render-targets.

    +
    +

    A reference to an array of render-target-view interfaces. See .

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476726 + HRESULT ID3DX11EffectRenderTargetViewVariable::GetRenderTargetArray([Out, Buffer] ID3D11RenderTargetView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectRenderTargetViewVariable::GetRenderTargetArray +
    + + +

    A sampler interface accesses sampler state.

    +
    + +

    An interface is created when an effect is read into memory.

    Effect variables are saved in memory in the backing store; when a technique is applied, the values in the backing store are copied to the device. You can use either of these methods to return state.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476729 + ID3DX11EffectSamplerVariable + ID3DX11EffectSamplerVariable +
    + + + Get a reference to a sampler interface. + + Returns a reference to a sampler interface (see ). + HRESULT ID3D10EffectSamplerVariable::GetSampler([None] int Index,[Out] ID3D10SamplerState** ppSampler) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to a sampler interface.

    +
    +

    Index into an array of sampler interfaces. If there is only one sampler interface, use 0.

    +

    The address of a reference to a sampler interface (see ).

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476731 + HRESULT ID3DX11EffectSamplerVariable::GetSampler([In] unsigned int Index,[Out] ID3D11SamplerState** ppSampler) + ID3DX11EffectSamplerVariable::GetSampler +
    + + +

    Set sampler state.

    +
    +

    Index into an array of sampler interfaces. If there is only one sampler interface, use 0.

    +

    Pointer to an interface containing the sampler state.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476732 + HRESULT ID3DX11EffectSamplerVariable::SetSampler([In] unsigned int Index,[In] ID3D11SamplerState* pSampler) + ID3DX11EffectSamplerVariable::SetSampler +
    + + +

    Revert a previously set sampler state.

    +
    +

    Index into an array of sampler interfaces. If there is only one sampler interface, use 0.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476733 + HRESULT ID3DX11EffectSamplerVariable::UndoSetSampler([In] unsigned int Index) + ID3DX11EffectSamplerVariable::UndoSetSampler +
    + + +

    Get a reference to a variable that contains sampler state.

    +
    +

    Index into an array of sampler descriptions. If there is only one sampler variable in the effect, use 0.

    +

    A reference to a sampler description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476730 + HRESULT ID3DX11EffectSamplerVariable::GetBackingStore([In] unsigned int Index,[Out] D3D11_SAMPLER_DESC* pDesc) + ID3DX11EffectSamplerVariable::GetBackingStore +
    + + +

    Set an array of boolean variables.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476742 + ID3DX11EffectScalarVariable + ID3DX11EffectScalarVariable +
    + + + Set a floating-point variable. + + A reference to the variable. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetFloat([None] float Value) + + + + Set an array of floating-point variables. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetFloatArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Set an array of floating-point variables. + + A reference to the start of the data to set. + Must be set to 0; this is reserved for future use. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetFloatArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of floating-point variables. + + The number of array elements to set. + Returns an array of floats. + HRESULT ID3D10EffectScalarVariable::GetFloatArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of floating-point variables. + + Must be set to 0; this is reserved for future use. + The number of array elements to set. + Returns an array of floats. + HRESULT ID3D10EffectScalarVariable::GetFloatArray([Out, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Set an unsigned integer variable. + + A reference to the variable. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetInt([None] int Value) + + + + Set an array of unsigned integer variables. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetIntArray([In, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Set an integer variable. + + A reference to the variable. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetInt([None] int Value) + + + + Set an array of integer variables. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetIntArray([In, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Set an array of integer variables. + + A reference to the start of the data to set. + Must be set to 0; this is reserved for future use. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetIntArray([In, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Get an array of integer variables. + + The number of array elements to set. + Returns an array of integer variables. + HRESULT ID3D10EffectScalarVariable::GetIntArray([Out, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Get an array of integer variables. + + Must be set to 0; this is reserved for future use. + The number of array elements to set. + Returns an array of integer variables. + HRESULT ID3D10EffectScalarVariable::GetIntArray([Out, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Set a boolean variable. + + A reference to the variable. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetBool([None] BOOL Value) + + + + Get a boolean variable. + + Returns a boolean. + HRESULT ID3D10EffectScalarVariable::GetBool([Out] BOOL* pValue) + + + + Set an array of boolean variables. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetBoolArray([In, Buffer] BOOL* pData,[None] int Offset,[None] int Count) + + + + Set an array of boolean variables. + + A reference to the start of the data to set. + Must be set to 0; this is reserved for future use. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::SetBoolArray([In, Buffer] BOOL* pData,[None] int Offset,[None] int Count) + + + + Get an array of boolean variables. + + Must be set to 0; this is reserved for future use. + The number of array elements to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectScalarVariable::GetBoolArray([Out, Buffer] BOOL* pData,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a floating-point variable.

    +
    +

    A reference to the variable.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476743 + HRESULT ID3DX11EffectScalarVariable::SetFloat([In] const float Value) + ID3DX11EffectScalarVariable::SetFloat +
    + + +

    Get a floating-point variable.

    +
    +

    A reference to the variable.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476737 + HRESULT ID3DX11EffectScalarVariable::GetFloat([Out] float* pValue) + ID3DX11EffectScalarVariable::GetFloat +
    + + +

    Set an array of floating-point variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476744 + HRESULT ID3DX11EffectScalarVariable::SetFloatArray([In, Buffer] const float* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectScalarVariable::SetFloatArray +
    + + +

    Get an array of floating-point variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476738 + HRESULT ID3DX11EffectScalarVariable::GetFloatArray([Out, Buffer] float* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectScalarVariable::GetFloatArray +
    + + +

    Set an integer variable.

    +
    +

    A reference to the variable.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476745 + HRESULT ID3DX11EffectScalarVariable::SetInt([In] const int Value) + ID3DX11EffectScalarVariable::SetInt +
    + + +

    Get an integer variable.

    +
    +

    A reference to the variable.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476739 + HRESULT ID3DX11EffectScalarVariable::GetInt([Out] int* pValue) + ID3DX11EffectScalarVariable::GetInt +
    + + +

    Set an array of integer variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476746 + HRESULT ID3DX11EffectScalarVariable::SetIntArray([In, Buffer] const int* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectScalarVariable::SetIntArray +
    + + +

    Get an array of integer variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476740 + HRESULT ID3DX11EffectScalarVariable::GetIntArray([Out, Buffer] int* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectScalarVariable::GetIntArray +
    + + +

    Set a boolean variable.

    +
    +

    A reference to the variable.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476741 + HRESULT ID3DX11EffectScalarVariable::SetBool([In] const BOOL Value) + ID3DX11EffectScalarVariable::SetBool +
    + + +

    Get a boolean variable.

    +
    +

    A reference to the variable.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476735 + HRESULT ID3DX11EffectScalarVariable::GetBool([Out] BOOL* pValue) + ID3DX11EffectScalarVariable::GetBool +
    + + +

    Set an array of boolean variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476742 + HRESULT ID3DX11EffectScalarVariable::SetBoolArray([In, Buffer] const BOOL* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectScalarVariable::SetBoolArray +
    + + +

    Get an array of boolean variables.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476736 + HRESULT ID3DX11EffectScalarVariable::GetBoolArray([Out, Buffer] BOOL* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectScalarVariable::GetBoolArray +
    + + +

    Describes an effect shader.

    +
    + +

    is used with .

    +
    + + ff476304 + D3DX11_EFFECT_SHADER_DESC + D3DX11_EFFECT_SHADER_DESC +
    + + + Gets the signature passed into InputLayout. Only valid on a vertex shader or geometry shader. + + The signature. + + + + Gets the bytecode from the compiled shader. + + The bytecode. + + + +

    Passed into CreateInputLayout. Only valid on a vertex shader or geometry shader. See .

    +
    + + ff476304 + const unsigned char* pInputSignature + unsigned char pInputSignature +
    + + +

    TRUE is the shader is defined inline; otherwise .

    +
    + + ff476304 + BOOL IsInline + BOOL IsInline +
    + + +

    Shader bytecode.

    +
    + + ff476304 + const unsigned char* pBytecode + unsigned char pBytecode +
    + + +

    The length of pBytecode.

    +
    + + ff476304 + unsigned int BytecodeLength + unsigned int BytecodeLength +
    + + +

    Stream out declaration string (for geometry shader with SO).

    +
    + + ff476304 + const void* SODecls[4] + void SODecls +
    + + +

    Indicates which stream is rasterized. D3D11 geometry shaders can output up to four streams of data, one of which can be rasterized.

    +
    + + ff476304 + unsigned int RasterizedStream + unsigned int RasterizedStream +
    + + +

    Number of entries in the input signature.

    +
    + + ff476304 + unsigned int NumInputSignatureEntries + unsigned int NumInputSignatureEntries +
    + + +

    Number of entries in the output signature.

    +
    + + ff476304 + unsigned int NumOutputSignatureEntries + unsigned int NumOutputSignatureEntries +
    + + +

    Number of entries in the patch constant signature.

    +
    + + ff476304 + unsigned int NumPatchConstantSignatureEntries + unsigned int NumPatchConstantSignatureEntries +
    + + +

    Set a shader resource.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476750 + ID3DX11EffectShaderResourceVariable + ID3DX11EffectShaderResourceVariable +
    + + + Set an array of shader resources. + + The address of an array of shader-resource-view interfaces. See . + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectShaderResourceVariable::SetResourceArray([None] ID3D10ShaderResourceView** ppResources,[None] int Offset,[None] int Count) + + + + Set an array of shader resources. + + The address of an array of shader-resource-view interfaces. See . + The zero-based array index to get the first interface. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D10EffectShaderResourceVariable::SetResourceArray([None] ID3D10ShaderResourceView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of shader resources. + + The number of elements in the array. + Returns an array of shader-resource-view interfaces. See . + HRESULT ID3D10EffectShaderResourceVariable::GetResourceArray([Out] ID3D10ShaderResourceView** ppResources,[None] int Offset,[None] int Count) + + + + Get an array of shader resources. + + The zero-based array index to get the first interface. + The number of elements in the array. + Returns an array of shader-resource-view interfaces. See . + HRESULT ID3D10EffectShaderResourceVariable::GetResourceArray([Out] ID3D10ShaderResourceView** ppResources,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a shader resource.

    +
    +

    The address of a reference to a shader-resource-view interface. See .

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476750 + HRESULT ID3DX11EffectShaderResourceVariable::SetResource([In] ID3D11ShaderResourceView* pResource) + ID3DX11EffectShaderResourceVariable::SetResource +
    + + +

    Get a shader resource.

    +
    +

    The address of a reference to a shader-resource-view interface. See .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476748 + HRESULT ID3DX11EffectShaderResourceVariable::GetResource([Out] ID3D11ShaderResourceView** ppResource) + ID3DX11EffectShaderResourceVariable::GetResource +
    + + +

    Set an array of shader resources.

    +
    +

    The address of an array of shader-resource-view interfaces. See .

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476751 + HRESULT ID3DX11EffectShaderResourceVariable::SetResourceArray([In, Buffer] ID3D11ShaderResourceView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectShaderResourceVariable::SetResourceArray +
    + + +

    Set an array of shader resources.

    +
    +

    The address of an array of shader-resource-view interfaces. See .

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476751 + HRESULT ID3DX11EffectShaderResourceVariable::SetResourceArray([In, Buffer] ID3D11ShaderResourceView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectShaderResourceVariable::SetResourceArray +
    + + +

    Set an array of shader resources.

    +
    +

    The address of an array of shader-resource-view interfaces. See .

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476751 + HRESULT ID3DX11EffectShaderResourceVariable::SetResourceArray([In, Buffer] ID3D11ShaderResourceView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectShaderResourceVariable::SetResourceArray +
    + + +

    Get an array of shader resources.

    +
    +

    The address of an array of shader-resource-view interfaces. See .

    +

    The zero-based array index to get the first interface.

    +

    The number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476749 + HRESULT ID3DX11EffectShaderResourceVariable::GetResourceArray([Out, Buffer] ID3D11ShaderResourceView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectShaderResourceVariable::GetResourceArray +
    + + +

    A string-variable interface accesses a string variable.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476763 + ID3DX11EffectStringVariable + ID3DX11EffectStringVariable +
    + + + Get the string. + + Returns a reference to the string. + HRESULT ID3D10EffectStringVariable::GetString([Out] const char** ppString) + + + + Get an array of strings. + + The number of strings in the returned array. + Returns a reference to the first string in the array. + HRESULT ID3D10EffectStringVariable::GetStringArray([Out, Buffer] const char** ppStrings,[None] int Offset,[None] int Count) + + + + Get an array of strings. + + The offset (in number of strings) between the start of the array and the first string to get. + The number of strings in the returned array. + Returns a reference to the first string in the array. + HRESULT ID3D10EffectStringVariable::GetStringArray([Out, Buffer] const char** ppStrings,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the string.

    +
    +

    A reference to the string.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476764 + HRESULT ID3DX11EffectStringVariable::GetString([Out] const void** ppString) + ID3DX11EffectStringVariable::GetString +
    + + +

    Get an array of strings.

    +
    +

    A reference to the first string in the array.

    +

    The offset (in number of strings) between the start of the array and the first string to get.

    +

    The number of strings in the returned array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476765 + HRESULT ID3DX11EffectStringVariable::GetStringArray([Out, Buffer] const void** ppStrings,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectStringVariable::GetStringArray +
    + + +

    Accesses an unordered access view.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476783 + ID3DX11EffectUnorderedAccessViewVariable + ID3DX11EffectUnorderedAccessViewVariable +
    + + + Sets the specified view. + + The view. + A object describing the result of the operation. + HRESULT ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray([In, Buffer] ID3D11UnorderedAccessView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + + + + Sets the specified data ref. + + The data ref. + The offset. + A object describing the result of the operation. + HRESULT ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray([In, Buffer] ID3D11UnorderedAccessView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + + + + Sets the specified data ref. + + The data ref. + A object describing the result of the operation. + HRESULT ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray([In, Buffer] ID3D11UnorderedAccessView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + + + + Sets the specified data ref. + + The data ref. + The offset. + A object describing the result of the operation. + HRESULT ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray([In, Buffer] ID3D11UnorderedAccessView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + + + + Gets the unordered access view array. + + The count. + A object describing the result of the operation. + HRESULT ID3DX11EffectUnorderedAccessViewVariable::GetUnorderedAccessViewArray([Out, Buffer] ID3D11UnorderedAccessView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + + + + Gets the unordered access view array. + + The offset. + The count. + A object describing the result of the operation. + HRESULT ID3DX11EffectUnorderedAccessViewVariable::GetUnorderedAccessViewArray([Out, Buffer] ID3D11UnorderedAccessView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set an unordered-access-view.

    +
    +

    Pointer to an .

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476786 + HRESULT ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessView([In] ID3D11UnorderedAccessView* pResource) + ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessView +
    + + +

    Get an unordered-access-view.

    +
    +

    Pointer to an reference that will be set on return.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476784 + HRESULT ID3DX11EffectUnorderedAccessViewVariable::GetUnorderedAccessView([Out] ID3D11UnorderedAccessView** ppResource) + ID3DX11EffectUnorderedAccessViewVariable::GetUnorderedAccessView +
    + + +

    Set an array of unordered-access-views.

    +
    +

    An array of references.

    +

    Index of the first unordered-access-view.

    +

    Number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476787 + HRESULT ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray([In, Buffer] ID3D11UnorderedAccessView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray +
    + + +

    Set an array of unordered-access-views.

    +
    +

    An array of references.

    +

    Index of the first unordered-access-view.

    +

    Number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476787 + HRESULT ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray([In, Buffer] ID3D11UnorderedAccessView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray +
    + + +

    Set an array of unordered-access-views.

    +
    +

    An array of references.

    +

    Index of the first unordered-access-view.

    +

    Number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476787 + HRESULT ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray([In, Buffer] ID3D11UnorderedAccessView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectUnorderedAccessViewVariable::SetUnorderedAccessViewArray +
    + + +

    Get an array of unordered-access-views.

    +
    +

    Pointer to an reference that will be set to the UAV array on return.

    +

    Index of the first interface.

    +

    Number of elements in the array.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476785 + HRESULT ID3DX11EffectUnorderedAccessViewVariable::GetUnorderedAccessViewArray([Out, Buffer] ID3D11UnorderedAccessView** ppResources,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectUnorderedAccessViewVariable::GetUnorderedAccessViewArray +
    + + +

    The interface is the base class for all effect variables.

    The lifetime of an object is equal to the lifetime of its parent object.

    • Methods
    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476788 + ID3DX11EffectVariable + ID3DX11EffectVariable +
    + + + Set data. + + A reference to the variable. + size in bytes of data to write. + + Returns one of the following {{Direct3D 10 Return Codes}}. + + + This method does no conversion or type checking; it is therefore a very quick way to access array items. + + HRESULT ID3D11EffectVariable::SetRawValue([None] void* pData,[None] int Offset,[None] int Count) + + + + Get data. + + + This method does no conversion or type checking; it is therefore a very quick way to access array items. + + The number of bytes to get. + Returns a filled with the value. + HRESULT ID3D11EffectVariable::GetRawValue([None] void* pData,[None] int Offset,[None] int Count) + + + + Get a scalar variable. + + + AsScalar returns a version of the effect variable that has been specialized to a scalar variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain scalar data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a scalar variable. See . + ID3D11EffectScalarVariable* ID3D11EffectVariable::AsScalar() + + + + Get a vector variable. + + + AsVector returns a version of the effect variable that has been specialized to a vector variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain vector data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a vector variable. See . + ID3D11EffectVectorVariable* ID3D11EffectVariable::AsVector() + + + + Get a matrix variable. + + + AsMatrix returns a version of the effect variable that has been specialized to a matrix variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain matrix data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a matrix variable. See . + ID3D11EffectMatrixVariable* ID3D11EffectVariable::AsMatrix() + + + + Get a string variable. + + + AsString returns a version of the effect variable that has been specialized to a string variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain string data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a string variable. See . + ID3D11EffectStringVariable* ID3D11EffectVariable::AsString() + + + + Get a shader-resource variable. + + + AsShaderResource returns a version of the effect variable that has been specialized to a shader-resource variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader-resource data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a shader-resource variable. See . + ID3D11EffectShaderResourceVariable* ID3D11EffectVariable::AsShaderResource() + + + + Get a render-target-view variable. + + + This method returns a version of the effect variable that has been specialized to a render-target-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain render-target-view data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a render-target-view variable. See . + ID3D11EffectRenderTargetViewVariable* ID3D11EffectVariable::AsRenderTargetView() + + + + Get a depth-stencil-view variable. + + + This method returns a version of the effect variable that has been specialized to a depth-stencil-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil-view data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a depth-stencil-view variable. See . + ID3D11EffectDepthStencilViewVariable* ID3D11EffectVariable::AsDepthStencilView() + + + + Get a class instance variable. + + A reference to a . + ID3D11EffectClassInstanceVariable* ID3D11EffectVariable::AsClassInstance() + + + + Get an interface variable. + + A reference to a . + ID3D11EffectClassInstanceVariable* ID3D11EffectVariable::AsInterface() + + + + Get an unordered access view variable. + + A reference to a . + ID3D11EffectUnorderedAccessViewVariable* ID3D11EffectVariable::AsDepthStencilView() + + + + Get a constant buffer. + + + AsConstantBuffer returns a version of the effect variable that has been specialized to a constant buffer. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain constant buffer data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a constant buffer. See . + ID3D11EffectConstantBuffer* ID3D11EffectVariable::AsConstantBuffer() + + + + Get a shader variable. + + + AsShader returns a version of the effect variable that has been specialized to a shader variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a shader variable. See . + ID3D11EffectShaderVariable* ID3D11EffectVariable::AsShader() + + + + Get a effect-blend variable. + + + AsBlend returns a version of the effect variable that has been specialized to an effect-blend variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain effect-blend data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to an effect blend variable. See . + ID3D11EffectBlendVariable* ID3D11EffectVariable::AsBlend() + + + + Get a depth-stencil variable. + + + AsDepthStencil returns a version of the effect variable that has been specialized to a depth-stencil variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a depth-stencil variable. See . + ID3D11EffectDepthStencilVariable* ID3D11EffectVariable::AsDepthStencil() + + + + Get a rasterizer variable. + + + AsRasterizer returns a version of the effect variable that has been specialized to a rasterizer variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain rasterizer data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a rasterizer variable. See . + ID3D11EffectRasterizerVariable* ID3D11EffectVariable::AsRasterizer() + + + + Get a sampler variable. + + + AsSampler returns a version of the effect variable that has been specialized to a sampler variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain sampler data. Applications can test the returned object for validity by calling {{IsValid}}. + + A reference to a sampler variable. See . + ID3D11EffectSamplerVariable* ID3D11EffectVariable::AsSampler() + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Compare the data type with the data stored.

    +
    + +

    This method checks that the data type matches the data stored after casting one interface to another (using any of the As methods).

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476815 + IsValid + IsValid + BOOL ID3DX11EffectVariable::IsValid() +
    + + +

    Get type information.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476814 + GetType + GetType + ID3DX11EffectType* ID3DX11EffectVariable::GetType() +
    + + +

    Get a description.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476807 + GetDesc + GetDesc + HRESULT ID3DX11EffectVariable::GetDesc([Out] D3DX11_EFFECT_VARIABLE_DESC* pDesc) +
    + + +

    Get a constant buffer.

    +
    + +

    Effect variables are read-from or written-to a constant buffer.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476812 + GetParentConstantBuffer + GetParentConstantBuffer + ID3DX11EffectConstantBuffer* ID3DX11EffectVariable::GetParentConstantBuffer() +
    + + +

    Compare the data type with the data stored.

    +
    +

    TRUE if the syntax is valid; otherwise .

    + +

    This method checks that the data type matches the data stored after casting one interface to another (using any of the As methods).

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476815 + BOOL ID3DX11EffectVariable::IsValid() + ID3DX11EffectVariable::IsValid +
    + + +

    Get type information.

    +
    +

    A reference to an .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476814 + ID3DX11EffectType* ID3DX11EffectVariable::GetType() + ID3DX11EffectVariable::GetType +
    + + +

    Get a description.

    +
    +

    A reference to an effect-variable description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476807 + HRESULT ID3DX11EffectVariable::GetDesc([Out] D3DX11_EFFECT_VARIABLE_DESC* pDesc) + ID3DX11EffectVariable::GetDesc +
    + + +

    Get an annotation by index.

    +
    +

    A zero-based index.

    +

    A reference to an .

    + +

    Annonations can be attached to a technique, a pass, or a global variable.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476805 + ID3DX11EffectVariable* ID3DX11EffectVariable::GetAnnotationByIndex([In] unsigned int Index) + ID3DX11EffectVariable::GetAnnotationByIndex +
    + + +

    Get an annotation by name.

    +
    +

    The annotation name.

    +

    A reference to an . Note that if the annotation is not found the returned will be empty. The method should be called to determine whether the annotation was found.

    + +

    Annonations can be attached to a technique, a pass, or a global variable.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476806 + ID3DX11EffectVariable* ID3DX11EffectVariable::GetAnnotationByName([In] const char* Name) + ID3DX11EffectVariable::GetAnnotationByName +
    + + +

    Get a structure member by index.

    +
    +

    A zero-based index.

    +

    A reference to an .

    + +

    If the effect variable is an structure, use this method to look up a member by index.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476809 + ID3DX11EffectVariable* ID3DX11EffectVariable::GetMemberByIndex([In] unsigned int Index) + ID3DX11EffectVariable::GetMemberByIndex +
    + + +

    Get a structure member by name.

    +
    +

    Member name.

    +

    A reference to an .

    + +

    If the effect variable is an structure, use this method to look up a member by name.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476810 + ID3DX11EffectVariable* ID3DX11EffectVariable::GetMemberByName([In] const char* Name) + ID3DX11EffectVariable::GetMemberByName +
    + + +

    Get a structure member by semantic.

    +
    +

    The semantic.

    +

    A reference to an .

    + +

    If the effect variable is an structure, use this method to look up a member by attached semantic.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476811 + ID3DX11EffectVariable* ID3DX11EffectVariable::GetMemberBySemantic([In] const char* Semantic) + ID3DX11EffectVariable::GetMemberBySemantic +
    + + +

    Get an array element.

    +
    +

    A zero-based index; otherwise 0.

    +

    A reference to an .

    + +

    If the effect variable is an array, use this method to return one of the elements.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476808 + ID3DX11EffectVariable* ID3DX11EffectVariable::GetElement([In] unsigned int Index) + ID3DX11EffectVariable::GetElement +
    + + +

    Get a constant buffer.

    +
    +

    A reference to a .

    + +

    Effect variables are read-from or written-to a constant buffer.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476812 + ID3DX11EffectConstantBuffer* ID3DX11EffectVariable::GetParentConstantBuffer() + ID3DX11EffectVariable::GetParentConstantBuffer +
    + + +

    Get a scalar variable.

    +
    +

    A reference to a scalar variable. See .

    + +

    AsScalar returns a version of the effect variable that has been specialized to a scalar variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain scalar data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476799 + ID3DX11EffectScalarVariable* ID3DX11EffectVariable::AsScalar() + ID3DX11EffectVariable::AsScalar +
    + + +

    Get a vector variable.

    +
    +

    A reference to a vector variable. See .

    + +

    AsVector returns a version of the effect variable that has been specialized to a vector variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain vector data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476804 + ID3DX11EffectVectorVariable* ID3DX11EffectVariable::AsVector() + ID3DX11EffectVariable::AsVector +
    + + +

    Get a matrix variable.

    +
    +

    A reference to a matrix variable. See .

    + +

    AsMatrix returns a version of the effect variable that has been specialized to a matrix variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain matrix data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476795 + ID3DX11EffectMatrixVariable* ID3DX11EffectVariable::AsMatrix() + ID3DX11EffectVariable::AsMatrix +
    + + +

    Get a string variable.

    +
    +

    A reference to a string variable. See .

    + +

    AsString returns a version of the effect variable that has been specialized to a string variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain string data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476802 + ID3DX11EffectStringVariable* ID3DX11EffectVariable::AsString() + ID3DX11EffectVariable::AsString +
    + + +

    Get a class-instance variable.

    +
    +

    A reference to class-instance variable. See .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476790 + ID3DX11EffectClassInstanceVariable* ID3DX11EffectVariable::AsClassInstance() + ID3DX11EffectVariable::AsClassInstance +
    + + +

    Get an interface variable.

    +
    +

    A reference to an interface variable. See .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476794 + ID3DX11EffectInterfaceVariable* ID3DX11EffectVariable::AsInterface() + ID3DX11EffectVariable::AsInterface +
    + + +

    Get a shader-resource variable.

    +
    +

    A reference to a shader-resource variable. See .

    + +

    AsShaderResource returns a version of the effect variable that has been specialized to a shader-resource variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader-resource data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476801 + ID3DX11EffectShaderResourceVariable* ID3DX11EffectVariable::AsShaderResource() + ID3DX11EffectVariable::AsShaderResource +
    + + +

    Get an unordered-access-view variable.

    +
    +

    A reference to an unordered-access-view variable. See .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476803 + ID3DX11EffectUnorderedAccessViewVariable* ID3DX11EffectVariable::AsUnorderedAccessView() + ID3DX11EffectVariable::AsUnorderedAccessView +
    + + +

    Get a render-target-view variable.

    +
    +

    A reference to a render-target-view variable. See .

    + +

    This method returns a version of the effect variable that has been specialized to a render-target-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain render-target-view data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476797 + ID3DX11EffectRenderTargetViewVariable* ID3DX11EffectVariable::AsRenderTargetView() + ID3DX11EffectVariable::AsRenderTargetView +
    + + +

    Get a depth-stencil-view variable.

    +
    +

    A reference to a depth-stencil-view variable. See .

    + +

    This method returns a version of the effect variable that has been specialized to a depth-stencil-view variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil-view data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476793 + ID3DX11EffectDepthStencilViewVariable* ID3DX11EffectVariable::AsDepthStencilView() + ID3DX11EffectVariable::AsDepthStencilView +
    + + +

    Get a constant buffer.

    +
    +

    A reference to a constant buffer. See .

    + +

    AsConstantBuffer returns a version of the effect variable that has been specialized to a constant buffer. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain constant buffer data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476791 + ID3DX11EffectConstantBuffer* ID3DX11EffectVariable::AsConstantBuffer() + ID3DX11EffectVariable::AsConstantBuffer +
    + + +

    Get a shader variable.

    +
    +

    A reference to a shader variable. See .

    + +

    AsShader returns a version of the effect variable that has been specialized to a shader variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain shader data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476800 + ID3DX11EffectShaderVariable* ID3DX11EffectVariable::AsShader() + ID3DX11EffectVariable::AsShader +
    + + +

    Get a effect-blend variable.

    +
    +

    A reference to an effect blend variable. See .

    + +

    AsBlend returns a version of the effect variable that has been specialized to an effect-blend variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain effect-blend data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476789 + ID3DX11EffectBlendVariable* ID3DX11EffectVariable::AsBlend() + ID3DX11EffectVariable::AsBlend +
    + + +

    Get a depth-stencil variable.

    +
    +

    A reference to a depth-stencil variable. See .

    + +

    AsDepthStencil returns a version of the effect variable that has been specialized to a depth-stencil variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain depth-stencil data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476792 + ID3DX11EffectDepthStencilVariable* ID3DX11EffectVariable::AsDepthStencil() + ID3DX11EffectVariable::AsDepthStencil +
    + + +

    Get a rasterizer variable.

    +
    +

    A reference to a rasterizer variable. See .

    + +

    AsRasterizer returns a version of the effect variable that has been specialized to a rasterizer variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain rasterizer data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476796 + ID3DX11EffectRasterizerVariable* ID3DX11EffectVariable::AsRasterizer() + ID3DX11EffectVariable::AsRasterizer +
    + + +

    Get a sampler variable.

    +
    +

    A reference to a sampler variable. See .

    + +

    AsSampler returns a version of the effect variable that has been specialized to a sampler variable. Similar to a cast, this specialization will return an invalid object if the effect variable does not contain sampler data.

    Applications can test the returned object for validity by calling IsValid.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476798 + ID3DX11EffectSamplerVariable* ID3DX11EffectVariable::AsSampler() + ID3DX11EffectVariable::AsSampler +
    + + +

    Set data.

    +
    +

    A reference to the variable.

    +

    The offset (in bytes) from the beginning of the reference to the data.

    +

    The number of bytes to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    This method does no conversion or type checking; it is therefore a very quick way to access array items.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476816 + HRESULT ID3DX11EffectVariable::SetRawValue([In, Buffer] const void* pData,[In] unsigned int ByteOffset,[In] unsigned int ByteCount) + ID3DX11EffectVariable::SetRawValue +
    + + +

    Get data.

    +
    +

    A reference to the variable.

    +

    The offset (in bytes) from the beginning of the reference to the data.

    +

    The number of bytes to get.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    This method does no conversion or type checking; it is therefore a very quick way to access array items.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476813 + HRESULT ID3DX11EffectVariable::GetRawValue([Out, Buffer] void* pData,[In] unsigned int ByteOffset,[In] unsigned int ByteCount) + ID3DX11EffectVariable::GetRawValue +
    + + +

    A vector-variable interface accesses a four-component vector.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476817 + ID3DX11EffectVectorVariable + ID3DX11EffectVectorVariable +
    + + + Get a four-component vector that contains integer data. + + Returns a four-component vector that contains integer data + HRESULT ID3D11EffectVectorVariable::GetIntVector([Out] int* pData) + + + + Get a four-component vector that contains floating-point data. + + Returns a four-component vector that contains floating-point data. + HRESULT ID3D11EffectVectorVariable::GetFloatVector([Out] float* pData) + + + + Get a four-component vector that contains boolean data. + + a four-component vector that contains boolean data. + HRESULT ID3D11EffectVectorVariable::GetBoolVector([Out, Buffer] BOOL* pData) + + + + Get a four-component vector. + + Type of the four-component vector + a four-component vector. + HRESULT ID3D11EffectVectorVariable::GetFloatVector([Out, Buffer] BOOL* pData) + + + + Set an array of four-component vectors that contain integer data. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectVectorVariable::SetIntVectorArray([In, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Set an array of four-component vectors that contain floating-point data. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectVectorVariable::SetFloatVectorArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Set an array of four-component vectors that contain floating-point data. + + Type of the four-component vector + A reference to the start of the data to set. + + Returns one of the following {{Direct3D 10 Return Codes}}. + + HRESULT ID3D11EffectVectorVariable::SetFloatVectorArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Set a x-component vector. + + A reference to the first component. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectVectorVariable::SetFloatVector([In] float* pData) + + + + Set a x-component vector. + + A reference to the first component. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectVectorVariable::SetFloatVector([In] float* pData) + + + + Set a two-component vector that contains floating-point data. + + A reference to the first component. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectVectorVariable::SetFloatVector([In] float* pData) + + + + Set a three-component vector that contains floating-point data. + + A reference to the first component. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectVectorVariable::SetFloatVector([In] float* pData) + + + + Set a four-component color that contains floating-point data. + + A reference to the first component. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectVectorVariable::SetFloatVector([In] float* pData) + + + + Set an array of four-component color that contain floating-point data. + + A reference to the start of the data to set. + Returns one of the following {{Direct3D 10 Return Codes}}. + HRESULT ID3D11EffectVectorVariable::SetFloatVectorArray([In, Buffer] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of four-component vectors that contain integer data. + + The number of array elements to set. + Returns an array of four-component vectors that contain integer data. + HRESULT ID3D11EffectVectorVariable::GetIntVectorArray([Out, Buffer] int* pData,[None] int Offset,[None] int Count) + + + + Get an array of four-component vectors that contain floating-point data. + + The number of array elements to set. + Returns an array of four-component vectors that contain floating-point data. + HRESULT ID3D11EffectVectorVariable::GetFloatVectorArray([None] float* pData,[None] int Offset,[None] int Count) + + + + Get an array of four-component vectors that contain boolean data. + + The number of array elements to set. + an array of four-component vectors that contain boolean data. + HRESULT ID3D11EffectVectorVariable::GetBoolVectorArray([Out, Buffer] BOOL* pData,[None] int Offset,[None] int Count) + + + + Get an array of four-component vectors that contain boolean data. + + The number of array elements to set. + an array of four-component vectors that contain boolean data. + HRESULT ID3D11EffectVectorVariable::GetBoolVectorArray([Out, Buffer] BOOL* pData,[None] int Offset,[None] int Count) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a four-component vector that contains boolean data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476824 + HRESULT ID3DX11EffectVectorVariable::SetBoolVector([In] const SHARPDX_BOOL4* pData) + ID3DX11EffectVectorVariable::SetBoolVector +
    + + +

    Set a four-component vector that contains integer data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476828 + HRESULT ID3DX11EffectVectorVariable::SetIntVector([In] const SHARPDX_INT4* pData) + ID3DX11EffectVectorVariable::SetIntVector +
    + + +

    Set a four-component vector that contains floating-point data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476826 + HRESULT ID3DX11EffectVectorVariable::SetFloatVector([In, Buffer] const float* pData) + ID3DX11EffectVectorVariable::SetFloatVector +
    + + +

    Get a four-component vector that contains boolean data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476818 + HRESULT ID3DX11EffectVectorVariable::GetBoolVector([Out] SHARPDX_BOOL4* pData) + ID3DX11EffectVectorVariable::GetBoolVector +
    + + +

    Get a four-component vector that contains integer data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476822 + HRESULT ID3DX11EffectVectorVariable::GetIntVector([Out] SHARPDX_INT4* pData) + ID3DX11EffectVectorVariable::GetIntVector +
    + + +

    Get a four-component vector that contains floating-point data.

    +
    +

    A reference to the first component.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476820 + HRESULT ID3DX11EffectVectorVariable::GetFloatVector([Out] SHARPDX_VECTOR4* pData) + ID3DX11EffectVectorVariable::GetFloatVector +
    + + +

    Set an array of four-component vectors that contain boolean data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476825 + HRESULT ID3DX11EffectVectorVariable::SetBoolVectorArray([In, Buffer] const SHARPDX_BOOL4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectVectorVariable::SetBoolVectorArray +
    + + +

    Set an array of four-component vectors that contain integer data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476829 + HRESULT ID3DX11EffectVectorVariable::SetIntVectorArray([In, Buffer] const SHARPDX_INT4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectVectorVariable::SetIntVectorArray +
    + + +

    Set an array of four-component vectors that contain floating-point data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476827 + HRESULT ID3DX11EffectVectorVariable::SetFloatVectorArray([In, Buffer] const SHARPDX_VECTOR4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectVectorVariable::SetFloatVectorArray +
    + + +

    Get an array of four-component vectors that contain boolean data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476819 + HRESULT ID3DX11EffectVectorVariable::GetBoolVectorArray([Out, Buffer] SHARPDX_BOOL4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectVectorVariable::GetBoolVectorArray +
    + + +

    Get an array of four-component vectors that contain integer data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476823 + HRESULT ID3DX11EffectVectorVariable::GetIntVectorArray([Out, Buffer] SHARPDX_INT4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectVectorVariable::GetIntVectorArray +
    + + +

    Get an array of four-component vectors that contain floating-point data.

    +
    +

    A reference to the start of the data to set.

    +

    Must be set to 0; this is reserved for future use.

    +

    The number of array elements to set.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476821 + HRESULT ID3DX11EffectVectorVariable::GetFloatVectorArray([Out, Buffer] SHARPDX_VECTOR4* pData,[In] unsigned int Offset,[In] unsigned int Count) + ID3DX11EffectVectorVariable::GetFloatVectorArray +
    + + + No documentation. + + + D3DX11_EFFECT_VARIABLE_FLAGS + D3DX11_EFFECT_VARIABLE_FLAGS + + + + No documentation. + + + D3DX11_EFFECT_VARIABLE_ANNOTATION + D3DX11_EFFECT_VARIABLE_ANNOTATION + + + + No documentation. + + + D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT + D3DX11_EFFECT_VARIABLE_EXPLICIT_BIND_POINT + + + + None. + + + None + None + + + +

    Gets a class instance.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476659 + ID3DX11EffectClassInstanceVariable + ID3DX11EffectClassInstanceVariable +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a class instance.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476659 + GetClassInstance + GetClassInstance + HRESULT ID3DX11EffectClassInstanceVariable::GetClassInstance([Out] ID3D11ClassInstance** ppClassInstance) +
    + + +

    Gets a class instance.

    +
    +

    Pointer to an reference that will be set to class instance.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476659 + HRESULT ID3DX11EffectClassInstanceVariable::GetClassInstance([Out] ID3D11ClassInstance** ppClassInstance) + ID3DX11EffectClassInstanceVariable::GetClassInstance +
    + + +

    Reverts a previously set texture buffer.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476676 + ID3DX11EffectConstantBuffer + ID3DX11EffectConstantBuffer +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set a constant-buffer.

    +
    +

    A reference to a constant-buffer interface. See .

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476673 + HRESULT ID3DX11EffectConstantBuffer::SetConstantBuffer([In] ID3D11Buffer* pConstantBuffer) + ID3DX11EffectConstantBuffer::SetConstantBuffer +
    + + +

    Reverts a previously set constant buffer.

    +
    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476675 + HRESULT ID3DX11EffectConstantBuffer::UndoSetConstantBuffer() + ID3DX11EffectConstantBuffer::UndoSetConstantBuffer +
    + + +

    Get a constant-buffer.

    +
    +

    The address of a reference to a constant-buffer interface. See .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476671 + HRESULT ID3DX11EffectConstantBuffer::GetConstantBuffer([Out] ID3D11Buffer** ppConstantBuffer) + ID3DX11EffectConstantBuffer::GetConstantBuffer +
    + + +

    Set a texture-buffer.

    +
    +

    A reference to a shader-resource-view interface for accessing a texture buffer.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476674 + HRESULT ID3DX11EffectConstantBuffer::SetTextureBuffer([In] ID3D11ShaderResourceView* pTextureBuffer) + ID3DX11EffectConstantBuffer::SetTextureBuffer +
    + + +

    Reverts a previously set texture buffer.

    +
    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476676 + HRESULT ID3DX11EffectConstantBuffer::UndoSetTextureBuffer() + ID3DX11EffectConstantBuffer::UndoSetTextureBuffer +
    + + +

    Get a texture-buffer.

    +
    +

    The address of a reference to a shader-resource-view interface for accessing a texture buffer. See .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476672 + HRESULT ID3DX11EffectConstantBuffer::GetTextureBuffer([Out] ID3D11ShaderResourceView** ppTextureBuffer) + ID3DX11EffectConstantBuffer::GetTextureBuffer +
    + + +

    The interface accesses an Effect group.

    The lifetime of an object is equal to the lifetime of its parent object.

    • Methods
    +
    + +

    To get an interface, call a method like .

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476687 + ID3DX11EffectGroup + ID3DX11EffectGroup +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Test an effect to see if it contains valid syntax.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476693 + IsValid + IsValid + BOOL ID3DX11EffectGroup::IsValid() +
    + + +

    Gets a group description.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476690 + GetDesc + GetDesc + HRESULT ID3DX11EffectGroup::GetDesc([Out] D3DX11_GROUP_DESC* pDesc) +
    + + +

    Test an effect to see if it contains valid syntax.

    +
    +

    TRUE if the code syntax is valid; otherwise .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476693 + BOOL ID3DX11EffectGroup::IsValid() + ID3DX11EffectGroup::IsValid +
    + + +

    Gets a group description.

    +
    +

    A reference to a structure.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476690 + HRESULT ID3DX11EffectGroup::GetDesc([Out] D3DX11_GROUP_DESC* pDesc) + ID3DX11EffectGroup::GetDesc +
    + + +

    Get an annotation by index.

    +
    +

    Index of the annotation.

    +

    Pointer to an interface.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476688 + ID3DX11EffectVariable* ID3DX11EffectGroup::GetAnnotationByIndex([In] unsigned int Index) + ID3DX11EffectGroup::GetAnnotationByIndex +
    + + +

    Get an annotation by name.

    +
    +

    The name of the annotation.

    +

    A reference to an . Note that if the annotation is not found the returned will be empty. The method should be called to determine whether the annotation was found.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476689 + ID3DX11EffectVariable* ID3DX11EffectGroup::GetAnnotationByName([In] const char* Name) + ID3DX11EffectGroup::GetAnnotationByName +
    + + +

    Get a technique by index.

    +
    +

    A zero-based index.

    +

    A reference to an .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476691 + ID3DX11EffectTechnique* ID3DX11EffectGroup::GetTechniqueByIndex([In] unsigned int Index) + ID3DX11EffectGroup::GetTechniqueByIndex +
    + + +

    Get a technique by name.

    +
    +

    The name of the technique.

    +

    A reference to an , or null if the technique is not found.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476692 + ID3DX11EffectTechnique* ID3DX11EffectGroup::GetTechniqueByName([In] const char* Name) + ID3DX11EffectGroup::GetTechniqueByName +
    + + +

    Accesses an interface variable.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476694 + ID3DX11EffectInterfaceVariable + ID3DX11EffectInterfaceVariable +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get or sets a class instance.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476695 + GetClassInstance / SetClassInstance + GetClassInstance + HRESULT ID3DX11EffectInterfaceVariable::GetClassInstance([Out] ID3DX11EffectClassInstanceVariable** ppEffectClassInstance) +
    + + +

    Sets a class instance.

    +
    +

    Pointer to an interface.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476696 + HRESULT ID3DX11EffectInterfaceVariable::SetClassInstance([In] ID3DX11EffectClassInstanceVariable* pEffectClassInstance) + ID3DX11EffectInterfaceVariable::SetClassInstance +
    + + +

    Get a class instance.

    +
    +

    Pointer to an reference that will be set to the class instance.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476695 + HRESULT ID3DX11EffectInterfaceVariable::GetClassInstance([Out] ID3DX11EffectClassInstanceVariable** ppEffectClassInstance) + ID3DX11EffectInterfaceVariable::GetClassInstance +
    + + +

    A shader-variable interface accesses a shader variable.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476752 + ID3DX11EffectShaderVariable + ID3DX11EffectShaderVariable +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a shader description.

    +
    +

    A zero-based index.

    +

    A reference to a shader description (see ).

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476761 + HRESULT ID3DX11EffectShaderVariable::GetShaderDesc([In] unsigned int ShaderIndex,[Out] D3DX11_EFFECT_SHADER_DESC* pDesc) + ID3DX11EffectShaderVariable::GetShaderDesc +
    + + +

    Get a vertex shader.

    +
    +

    A zero-based index.

    +

    A reference to an reference that will be set to the vertex shader on return.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476762 + HRESULT ID3DX11EffectShaderVariable::GetVertexShader([In] unsigned int ShaderIndex,[Out] ID3D11VertexShader** ppVS) + ID3DX11EffectShaderVariable::GetVertexShader +
    + + +

    Get a geometry shader.

    +
    +

    A zero-based index.

    +

    A reference to an reference that will be set to the geometry shader on return.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476755 + HRESULT ID3DX11EffectShaderVariable::GetGeometryShader([In] unsigned int ShaderIndex,[Out] ID3D11GeometryShader** ppGS) + ID3DX11EffectShaderVariable::GetGeometryShader +
    + + +

    Get a pixel shader.

    +
    +

    A zero-based index.

    +

    A reference to an reference that will be set to the pixel shader on return.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476760 + HRESULT ID3DX11EffectShaderVariable::GetPixelShader([In] unsigned int ShaderIndex,[Out] ID3D11PixelShader** ppPS) + ID3DX11EffectShaderVariable::GetPixelShader +
    + + +

    Get a hull shader.

    +
    +

    Index of the shader.

    +

    A reference to an reference that will be set to the hull shader on return.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476756 + HRESULT ID3DX11EffectShaderVariable::GetHullShader([In] unsigned int ShaderIndex,[Out] ID3D11HullShader** ppHS) + ID3DX11EffectShaderVariable::GetHullShader +
    + + +

    Get a domain shader.

    +
    +

    Index of the domain shader.

    +

    Pointer to an reference that will be set to the domain shader on return.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476754 + HRESULT ID3DX11EffectShaderVariable::GetDomainShader([In] unsigned int ShaderIndex,[Out] ID3D11DomainShader** ppDS) + ID3DX11EffectShaderVariable::GetDomainShader +
    + + +

    Get a compute shader.

    +
    +

    Index of the compute shader.

    +

    Pointer to an reference that will be set to the compute shader on return.

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476753 + HRESULT ID3DX11EffectShaderVariable::GetComputeShader([In] unsigned int ShaderIndex,[Out] ID3D11ComputeShader** ppCS) + ID3DX11EffectShaderVariable::GetComputeShader +
    + + +

    Get an input-signature description.

    +
    +

    A zero-based shader index.

    +

    A zero-based shader-element index.

    +

    A reference to a parameter description (see ).

    + +

    An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476757 + HRESULT ID3DX11EffectShaderVariable::GetInputSignatureElementDesc([In] unsigned int ShaderIndex,[In] unsigned int Element,[Out] D3D11_SIGNATURE_PARAMETER_DESC* pDesc) + ID3DX11EffectShaderVariable::GetInputSignatureElementDesc +
    + + +

    Get an output-signature description.

    +
    +

    A zero-based shader index.

    +

    A zero-based element index.

    +

    A reference to a parameter description (see ).

    + +

    An effect contains one or more shaders; each shader has an input and output signature; each signature contains one or more elements (or parameters). The shader index identifies the shader and the element index identifies the element (or parameter) in the shader signature.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476758 + HRESULT ID3DX11EffectShaderVariable::GetOutputSignatureElementDesc([In] unsigned int ShaderIndex,[In] unsigned int Element,[Out] D3D11_SIGNATURE_PARAMETER_DESC* pDesc) + ID3DX11EffectShaderVariable::GetOutputSignatureElementDesc +
    + + +

    Get a patch constant signature description.

    +
    +

    A zero-based shader index.

    +

    A zero-based element index.

    +

    A reference to a parameter description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476759 + HRESULT ID3DX11EffectShaderVariable::GetPatchConstantSignatureElementDesc([In] unsigned int ShaderIndex,[In] unsigned int Element,[Out] D3D11_SIGNATURE_PARAMETER_DESC* pDesc) + ID3DX11EffectShaderVariable::GetPatchConstantSignatureElementDesc +
    + + +

    An interface is a collection of passes.

    The lifetime of an object is equal to the lifetime of its parent object.

    • Methods
    +
    + +

    An effect contains one or more techniques; each technique contains one or more passes; each pass contains state assignments.

    To get an effect-technique interface, call a method such as .

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476766 + ID3DX11EffectTechnique + ID3DX11EffectTechnique +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Test a technique to see if it contains valid syntax.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476773 + IsValid + IsValid + BOOL ID3DX11EffectTechnique::IsValid() +
    + + +

    Get a technique description.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476770 + GetDesc + GetDesc + HRESULT ID3DX11EffectTechnique::GetDesc([Out] D3DX11_TECHNIQUE_DESC* pDesc) +
    + + +

    Test a technique to see if it contains valid syntax.

    +
    +

    TRUE if the code syntax is valid; otherwise .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476773 + BOOL ID3DX11EffectTechnique::IsValid() + ID3DX11EffectTechnique::IsValid +
    + + +

    Get a technique description.

    +
    +

    A reference to a technique description (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476770 + HRESULT ID3DX11EffectTechnique::GetDesc([Out] D3DX11_TECHNIQUE_DESC* pDesc) + ID3DX11EffectTechnique::GetDesc +
    + + +

    Get an annotation by index.

    +
    +

    The zero-based index of the interface reference.

    +

    A reference to an .

    + +

    Use an annotation to attach a piece of metadata to a technique.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476768 + ID3DX11EffectVariable* ID3DX11EffectTechnique::GetAnnotationByIndex([In] unsigned int Index) + ID3DX11EffectTechnique::GetAnnotationByIndex +
    + + +

    Get an annotation by name.

    +
    +

    Name of the annotation.

    +

    A reference to an .

    + +

    Use an annotation to attach a piece of metadata to a technique.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476769 + ID3DX11EffectVariable* ID3DX11EffectTechnique::GetAnnotationByName([In] const char* Name) + ID3DX11EffectTechnique::GetAnnotationByName +
    + + +

    Get a pass by index.

    +
    +

    A zero-based index.

    +

    A reference to a .

    + +

    A technique contains one or more passes; get a pass using a name or an index.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476771 + ID3DX11EffectPass* ID3DX11EffectTechnique::GetPassByIndex([In] unsigned int Index) + ID3DX11EffectTechnique::GetPassByIndex +
    + + +

    Get a pass by name.

    +
    +

    The name of the pass.

    +

    A reference to an .

    + +

    A technique contains one or more passes; get a pass using a name or an index.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476772 + ID3DX11EffectPass* ID3DX11EffectTechnique::GetPassByName([In] const char* Name) + ID3DX11EffectTechnique::GetPassByName +
    + + +

    Compute a state-block mask to allow/prevent state changes.

    +
    +

    A reference to a state-block mask (see ).

    +

    Returns one of the following Direct3D 11 Return Codes.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476767 + HRESULT ID3DX11EffectTechnique::ComputeStateBlockMask([InOut] D3DX11_STATE_BLOCK_MASK* pStateBlockMask) + ID3DX11EffectTechnique::ComputeStateBlockMask +
    + + +

    Get the semantic attached to a member.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476778 + ID3DX11EffectType + ID3DX11EffectType +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Tests that the effect type is valid.

    +
    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476782 + IsValid + IsValid + BOOL ID3DX11EffectType::IsValid() +
    + + +

    Get an effect-type description.

    +
    + +

    The effect-variable description contains data about the name, annotations, semantic, flags and buffer offset of the effect type.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476775 + GetDesc + GetDesc + HRESULT ID3DX11EffectType::GetDesc([Out] D3DX11_EFFECT_TYPE_DESC* pDesc) +
    + + +

    Tests that the effect type is valid.

    +
    +

    TRUE if it is valid; otherwise .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476782 + BOOL ID3DX11EffectType::IsValid() + ID3DX11EffectType::IsValid +
    + + +

    Get an effect-type description.

    +
    +

    A reference to an effect-type description. See .

    +

    Returns one of the following Direct3D 11 Return Codes.

    + +

    The effect-variable description contains data about the name, annotations, semantic, flags and buffer offset of the effect type.

    Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? +
    + + ff476775 + HRESULT ID3DX11EffectType::GetDesc([Out] D3DX11_EFFECT_TYPE_DESC* pDesc) + ID3DX11EffectType::GetDesc +
    + + +

    Get a member type by index.

    +
    +

    A zero-based index.

    +

    A reference to an .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476779 + ID3DX11EffectType* ID3DX11EffectType::GetMemberTypeByIndex([In] unsigned int Index) + ID3DX11EffectType::GetMemberTypeByIndex +
    + + +

    Get an member type by name.

    +
    +

    A member's name.

    +

    A reference to an .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476780 + ID3DX11EffectType* ID3DX11EffectType::GetMemberTypeByName([In] const char* Name) + ID3DX11EffectType::GetMemberTypeByName +
    + + +

    Get a member type by semantic.

    +
    +

    A semantic.

    +

    A reference to an .

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476781 + ID3DX11EffectType* ID3DX11EffectType::GetMemberTypeBySemantic([In] const char* Semantic) + ID3DX11EffectType::GetMemberTypeBySemantic +
    + + +

    Get the name of a member.

    +
    +

    A zero-based index.

    +

    The name of the member.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476776 + const char* ID3DX11EffectType::GetMemberName([In] unsigned int Index) + ID3DX11EffectType::GetMemberName +
    + + +

    Get the semantic attached to a member.

    +
    +

    A zero-based index.

    +

    A string that contains the semantic.

    + + Note??The DirectX SDK does not supply any compiled binaries for effects. You must use Effects 11 source to build your effects-type application. For more information about using Effects 11 source, see Differences Between Effects 10 and Effects 11.? + + + ff476778 + const char* ID3DX11EffectType::GetMemberSemantic([In] unsigned int Index) + ID3DX11EffectType::GetMemberSemantic +
    + + +

    Describes an effect.

    +
    + +

    is used with .

    +
    + + ff476303 + D3DX11_EFFECT_DESC + D3DX11_EFFECT_DESC +
    + + +

    Number of constant buffers in this effect.

    +
    + + ff476303 + unsigned int ConstantBuffers + unsigned int ConstantBuffers +
    + + +

    Number of global variables in this effect.

    +
    + + ff476303 + unsigned int GlobalVariables + unsigned int GlobalVariables +
    + + +

    Number of global interfaces in this effect.

    +
    + + ff476303 + unsigned int InterfaceVariables + unsigned int InterfaceVariables +
    + + +

    Number of techniques in this effect.

    +
    + + ff476303 + unsigned int Techniques + unsigned int Techniques +
    + + +

    Number of groups in this effect.

    +
    + + ff476303 + unsigned int Groups + unsigned int Groups +
    + + +

    Describes an effect group.

    +
    + +

    is used with .

    +
    + + ff476314 + D3DX11_GROUP_DESC + D3DX11_GROUP_DESC +
    + + +

    Name of this group (only null if global).

    +
    + + ff476314 + const char* Name + char Name +
    + + +

    Number of techniques contained in group.

    +
    + + ff476314 + unsigned int Techniques + unsigned int Techniques +
    + + +

    Number of annotations on this group.

    +
    + + ff476314 + unsigned int Annotations + unsigned int Annotations +
    + + +

    Describes an effect technique.

    +
    + +

    is used with .

    +
    + + ff476326 + D3DX11_TECHNIQUE_DESC + D3DX11_TECHNIQUE_DESC +
    + + +

    Name of this technique (null if not anonymous).

    +
    + + ff476326 + const char* Name + char Name +
    + + +

    Number of passes contained in the technique.

    +
    + + ff476326 + unsigned int Passes + unsigned int Passes +
    + + +

    Number of annotations on this technique.

    +
    + + ff476326 + unsigned int Annotations + unsigned int Annotations +
    + + +

    Describes an effect-variable type.

    +
    + +

    is used with

    +
    + + ff476305 + D3DX11_EFFECT_TYPE_DESC + D3DX11_EFFECT_TYPE_DESC +
    + + +

    Name of the type, for example "float4" or "MyStruct".

    +
    + + ff476305 + const char* TypeName + char TypeName +
    + + +

    The variable class (see D3D10_SHADER_VARIABLE_CLASS).

    +
    + + ff476305 + D3D_SHADER_VARIABLE_CLASS Class + D3D_SHADER_VARIABLE_CLASS Class +
    + + +

    The variable type (see D3D10_SHADER_VARIABLE_TYPE).

    +
    + + ff476305 + D3D_SHADER_VARIABLE_TYPE Type + D3D_SHADER_VARIABLE_TYPE Type +
    + + +

    Number of elements in this type (0 if not an array).

    +
    + + ff476305 + unsigned int Elements + unsigned int Elements +
    + + +

    Number of members (0 if not a structure).

    +
    + + ff476305 + unsigned int Members + unsigned int Members +
    + + +

    Number of rows in this type (0 if not a numeric primitive).

    +
    + + ff476305 + unsigned int Rows + unsigned int Rows +
    + + +

    Number of columns in this type (0 if not a numeric primitive).

    +
    + + ff476305 + unsigned int Columns + unsigned int Columns +
    + + +

    Number of bytes required to represent this data type, when tightly packed.

    +
    + + ff476305 + unsigned int PackedSize + unsigned int PackedSize +
    + + +

    Number of bytes occupied by this data type, when laid out in a constant buffer.

    +
    + + ff476305 + unsigned int UnpackedSize + unsigned int UnpackedSize +
    + + +

    Number of bytes to seek between elements, when laid out in a constant buffer.

    +
    + + ff476305 + unsigned int Stride + unsigned int Stride +
    + + +

    Describes an effect variable.

    +
    + +

    is used with .

    +
    + + ff476306 + D3DX11_EFFECT_VARIABLE_DESC + D3DX11_EFFECT_VARIABLE_DESC +
    + + +

    Name of this variable, annotation, or structure member.

    +
    + + ff476306 + const char* Name + char Name +
    + + +

    Semantic string of this variable or structure member (null for annotations or if not present).

    +
    + + ff476306 + const char* Semantic + char Semantic +
    + + +

    Optional flags for effect variables.

    +
    + + ff476306 + D3DX11_EFFECT_VARIABLE_FLAGS Flags + D3DX11_EFFECT_VARIABLE_FLAGS Flags +
    + + +

    Number of annotations on this variable (always 0 for annotations).

    +
    + + ff476306 + unsigned int Annotations + unsigned int Annotations +
    + + +

    Offset into containing cbuffer or tbuffer (always 0 for annotations or variables not in constant buffers).

    +
    + + ff476306 + unsigned int BufferOffset + unsigned int BufferOffset +
    + + +

    Used if the variable has been explicitly bound using the register keyword. Check Flags for .

    +
    + + ff476306 + unsigned int ExplicitBindPoint + unsigned int ExplicitBindPoint +
    + + +

    Indicates the device state.

    +
    + +

    A state-block mask indicates the device states that a pass or a technique changes.

    +
    + + ff476325 + D3DX11_STATE_BLOCK_MASK + D3DX11_STATE_BLOCK_MASK +
    + + +

    Boolean value indicating whether to save the vertex shader state.

    +
    + + ff476325 + unsigned char VS + unsigned char VS +
    + + +

    Array of vertex-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.

    +
    + + ff476325 + unsigned char VSSamplers[2] + unsigned char VSSamplers +
    + + +

    Array of vertex-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + ff476325 + unsigned char VSShaderResources[16] + unsigned char VSShaderResources +
    + + +

    Array of vertex-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.

    +
    + + ff476325 + unsigned char VSConstantBuffers[2] + unsigned char VSConstantBuffers +
    + + +

    Array of vertex-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.

    +
    + + ff476325 + unsigned char VSInterfaces[32] + unsigned char VSInterfaces +
    + + +

    Boolean value indicating whether to save the hull shader state.

    +
    + + ff476325 + unsigned char HS + unsigned char HS +
    + + +

    Array of hull-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.

    +
    + + ff476325 + unsigned char HSSamplers[2] + unsigned char HSSamplers +
    + + +

    Array of hull-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + ff476325 + unsigned char HSShaderResources[16] + unsigned char HSShaderResources +
    + + +

    Array of hull-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.

    +
    + + ff476325 + unsigned char HSConstantBuffers[2] + unsigned char HSConstantBuffers +
    + + +

    Array of hull-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.

    +
    + + ff476325 + unsigned char HSInterfaces[32] + unsigned char HSInterfaces +
    + + +

    Boolean value indicating whether to save the domain shader state.

    +
    + + ff476325 + unsigned char DS + unsigned char DS +
    + + +

    Array of domain-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.

    +
    + + ff476325 + unsigned char DSSamplers[2] + unsigned char DSSamplers +
    + + +

    Array of domain-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + ff476325 + unsigned char DSShaderResources[16] + unsigned char DSShaderResources +
    + + +

    Array of domain-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot.

    +
    + + ff476325 + unsigned char DSConstantBuffers[2] + unsigned char DSConstantBuffers +
    + + +

    Array of domain-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.

    +
    + + ff476325 + unsigned char DSInterfaces[32] + unsigned char DSInterfaces +
    + + +

    Boolean value indicating whether to save the geometry shader state.

    +
    + + ff476325 + unsigned char GS + unsigned char GS +
    + + +

    Array of geometry-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.

    +
    + + ff476325 + unsigned char GSSamplers[2] + unsigned char GSSamplers +
    + + +

    Array of geometry-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + ff476325 + unsigned char GSShaderResources[16] + unsigned char GSShaderResources +
    + + +

    Array of geometry-shader constant buffers. The array is a multi-byte bitmask where each bit represents one buffer slot.

    +
    + + ff476325 + unsigned char GSConstantBuffers[2] + unsigned char GSConstantBuffers +
    + + +

    Array of geometry-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.

    +
    + + ff476325 + unsigned char GSInterfaces[32] + unsigned char GSInterfaces +
    + + +

    Boolean value indicating whether to save the pixel shader state.

    +
    + + ff476325 + unsigned char PS + unsigned char PS +
    + + +

    Array of pixel-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.

    +
    + + ff476325 + unsigned char PSSamplers[2] + unsigned char PSSamplers +
    + + +

    Array of pixel-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + ff476325 + unsigned char PSShaderResources[16] + unsigned char PSShaderResources +
    + + +

    Array of pixel-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.

    +
    + + ff476325 + unsigned char PSConstantBuffers[2] + unsigned char PSConstantBuffers +
    + + +

    Array of pixel-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.

    +
    + + ff476325 + unsigned char PSInterfaces[32] + unsigned char PSInterfaces +
    + + +

    Boolean value indicating whether to save the pixel shader unordered access views.

    +
    + + ff476325 + unsigned char PSUnorderedAccessViews + unsigned char PSUnorderedAccessViews +
    + + +

    Boolean value indicating whether to save the compute shader state.

    +
    + + ff476325 + unsigned char CS + unsigned char CS +
    + + +

    Array of compute-shader samplers. The array is a multi-byte bitmask where each bit represents one sampler slot.

    +
    + + ff476325 + unsigned char CSSamplers[2] + unsigned char CSSamplers +
    + + +

    Array of compute-shader resources. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + ff476325 + unsigned char CSShaderResources[16] + unsigned char CSShaderResources +
    + + +

    Array of compute-shader constant buffers. The array is a multi-byte bitmask where each bit represents one constant buffer slot.

    +
    + + ff476325 + unsigned char CSConstantBuffers[2] + unsigned char CSConstantBuffers +
    + + +

    Array of compute-shader interfaces. The array is a multi-byte bitmask where each bit represents one interface slot.

    +
    + + ff476325 + unsigned char CSInterfaces[32] + unsigned char CSInterfaces +
    + + +

    Boolean value indicating whether to save the compute shader unordered access views.

    +
    + + ff476325 + unsigned char CSUnorderedAccessViews + unsigned char CSUnorderedAccessViews +
    + + +

    Array of vertex buffers. The array is a multi-byte bitmask where each bit represents one resource slot.

    +
    + + ff476325 + unsigned char IAVertexBuffers[4] + unsigned char IAVertexBuffers +
    + + +

    Boolean value indicating whether to save the index buffer state.

    +
    + + ff476325 + unsigned char IAIndexBuffer + unsigned char IAIndexBuffer +
    + + +

    Boolean value indicating whether to save the input layout state.

    +
    + + ff476325 + unsigned char IAInputLayout + unsigned char IAInputLayout +
    + + +

    Boolean value indicating whether to save the primitive topology state.

    +
    + + ff476325 + unsigned char IAPrimitiveTopology + unsigned char IAPrimitiveTopology +
    + + +

    Boolean value indicating whether to save the render targets states.

    +
    + + ff476325 + unsigned char OMRenderTargets + unsigned char OMRenderTargets +
    + + +

    Boolean value indicating whether to save the depth-stencil state.

    +
    + + ff476325 + unsigned char OMDepthStencilState + unsigned char OMDepthStencilState +
    + + +

    Boolean value indicating whether to save the blend state.

    +
    + + ff476325 + unsigned char OMBlendState + unsigned char OMBlendState +
    + + +

    Boolean value indicating whether to save the viewports states.

    +
    + + ff476325 + unsigned char RSViewports + unsigned char RSViewports +
    + + +

    Boolean value indicating whether to save the scissor rectangles states.

    +
    + + ff476325 + unsigned char RSScissorRects + unsigned char RSScissorRects +
    + + +

    Boolean value indicating whether to save the rasterizer state.

    +
    + + ff476325 + unsigned char RSRasterizerState + unsigned char RSRasterizerState +
    + + +

    Boolean value indicating whether to save the stream-out buffers states.

    +
    + + ff476325 + unsigned char SOBuffers + unsigned char SOBuffers +
    + + +

    Boolean value indicating whether to save the predication state.

    +
    + + ff476325 + unsigned char Predication + unsigned char Predication +
    +
    +
    diff --git a/RenderHookAPI/bin/SharpDX.Direct3D11.dll b/RenderHookAPI/bin/SharpDX.Direct3D11.dll new file mode 100644 index 0000000000000000000000000000000000000000..9f86c5f6295ae85380e5136cfe07e431a6085147 GIT binary patch literal 285696 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�uw-Pt-{y+wX?(n@zH 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 l6NrE4OtX+s6AR!F}sE3Lv^Lom@!;uq`n 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 n{yHkdV`7Uq^6#Jd4==;+0%z#d)yyB_!xvu6Oa literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/SharpDX.Direct3D11.xml b/RenderHookAPI/bin/SharpDX.Direct3D11.xml new file mode 100644 index 0000000..c388518 --- /dev/null +++ b/RenderHookAPI/bin/SharpDX.Direct3D11.xml @@ -0,0 +1,37730 @@ + + + + SharpDX.Direct3D11 + + + +

    + The assembly provides managed Direct3D11 API. + + ff476080 + Direct3D11 + Direct3D11 + + + +

    The blend-state interface holds a description for blending state that you can bind to the output-merger stage.

    +
    + +

    Blending applies a simple function to combine output values from a pixel shader with data in a render target. You have control over how the pixels are blended by using a predefined set of blending operations and preblending operations.

    To create a blend-state object, call . To bind the blend-state object to the output-merger stage, call .

    +
    + + ff476349 + ID3D11BlendState + ID3D11BlendState +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the description for blending state that you used to create the blend-state object.

    +
    + +

    You use the description for blending state in a call to the method to create the blend-state object.

    +
    + + ff476350 + GetDesc + GetDesc + void ID3D11BlendState::GetDesc([Out] D3D11_BLEND_DESC* pDesc) +
    + + +

    Gets the description for blending state that you used to create the blend-state object.

    +
    +

    A reference to a structure that receives a description of the blend state.

    + +

    You use the description for blending state in a call to the method to create the blend-state object.

    +
    + + ff476350 + void ID3D11BlendState::GetDesc([Out] D3D11_BLEND_DESC* pDesc) + ID3D11BlendState::GetDesc +
    + + +

    The blend-state interface holds a description for blending state that you can bind to the output-merger stage. This blend-state interface supports logical operations as well as blending operations.

    +
    + +

    Blending applies a simple function to combine output values from a pixel shader with data in a render target. You have control over how the pixels are blended by using a predefined set of blending operations and preblending operations.

    To create a blend-state object, call . To bind the blend-state object to the output-merger stage, call .

    +
    + + hh404571 + ID3D11BlendState1 + ID3D11BlendState1 +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the description for blending state that you used to create the blend-state object.

    +
    + +

    You use the description for blending state in a call to the method to create the blend-state object.

    +
    + + hh404573 + GetDesc1 + GetDesc1 + void ID3D11BlendState1::GetDesc1([Out] D3D11_BLEND_DESC1* pDesc) +
    + + +

    Gets the description for blending state that you used to create the blend-state object.

    +
    +

    A reference to a structure that receives a description of the blend state. This blend state can specify logical operations as well as blending operations.

    + +

    You use the description for blending state in a call to the method to create the blend-state object.

    +
    + + hh404573 + void ID3D11BlendState1::GetDesc1([Out] D3D11_BLEND_DESC1* pDesc) + ID3D11BlendState1::GetDesc1 +
    + + +

    Describes the blend state that you use in a call to to create a blend-state object.

    +
    + +

    Here are the default values for blend state.

    StateDefault Value
    AlphaToCoverageEnable
    IndependentBlendEnable
    RenderTarget[0].BlendEnable
    RenderTarget[0].SrcBlend
    RenderTarget[0].DestBlend
    RenderTarget[0].BlendOp
    RenderTarget[0].SrcBlendAlpha
    RenderTarget[0].DestBlendAlpha
    RenderTarget[0].BlendOpAlpha
    RenderTarget[0].RenderTargetWriteMask

    ?

    Note?? is identical to D3D10_BLEND_DESC1.?

    If the driver type is set to , the feature level is set to less than or equal to , and the pixel format of the render target is set to , , or , the display device performs the blend in standard RGB (sRGB) space and not in linear space. However, if the feature level is set to greater than , the display device performs the blend in linear space, which is ideal.

    +
    + + ff476087 + D3D11_BLEND_DESC + D3D11_BLEND_DESC +
    + + + Returns default values for . + + + See MSDN documentation for default values. + + + + + Clones this instance. + + A copy of this instance. + + Because this structure contains an array, it is not possible to modify it without making an explicit clone method. + + + + + No documentation. + + + ff476087 + BOOL AlphaToCoverageEnable + BOOL AlphaToCoverageEnable + + + + No documentation. + + + ff476087 + BOOL IndependentBlendEnable + BOOL IndependentBlendEnable + + + + No documentation. + + + ff476087 + D3D11_RENDER_TARGET_BLEND_DESC RenderTarget[8] + D3D11_RENDER_TARGET_BLEND_DESC RenderTarget + + + + Note?? This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Describes the blend state that you use in a call to to create a blend-state object.

    +
    + +

    Here are the default values for blend state.

    StateDefault Value
    AlphaToCoverageEnable
    IndependentBlendEnable
    RenderTarget[0].BlendEnable
    RenderTarget[0].LogicOpEnable
    RenderTarget[0].SrcBlend
    RenderTarget[0].DestBlend
    RenderTarget[0].BlendOp
    RenderTarget[0].SrcBlendAlpha
    RenderTarget[0].DestBlendAlpha
    RenderTarget[0].BlendOpAlpha
    RenderTarget[0].LogicOp
    RenderTarget[0].RenderTargetWriteMask

    ?

    If the driver type is set to , the feature level is set to less than or equal to , and the pixel format of the render target is set to , , or , the display device performs the blend in standard RGB (sRGB) space and not in linear space. However, if the feature level is set to greater than , the display device performs the blend in linear space, which is ideal.

    When you set the LogicOpEnable member of the first element of the RenderTarget array (RenderTarget[0]) to TRUE, you must also set the BlendEnable member of RenderTarget[0] to , and the IndependentBlendEnable member of this to . This reflects the limitation in hardware that you can't mix logic operations with blending across multiple render targets, and that when you use a logic operation, you must apply the same logic operation to all render targets.

    +
    + + hh404435 + D3D11_BLEND_DESC1 + D3D11_BLEND_DESC1 +
    + + + Returns default values for . + + + See MSDN documentation for default values. + + + + + Clones this instance. + + A copy of this instance. + + Because this structure contains an array, it is not possible to modify it without making an explicit clone method. + + + + + No documentation. + + + hh404435 + BOOL AlphaToCoverageEnable + BOOL AlphaToCoverageEnable + + + + No documentation. + + + hh404435 + BOOL IndependentBlendEnable + BOOL IndependentBlendEnable + + + + No documentation. + + + hh404435 + D3D11_RENDER_TARGET_BLEND_DESC1 RenderTarget[8] + D3D11_RENDER_TARGET_BLEND_DESC1 RenderTarget + + + +

    A buffer interface accesses a buffer resource, which is unstructured memory. Buffers typically store vertex or index data.

    +
    + +

    There are three types of buffers: vertex, index, or a shader-constant buffer. Create a buffer resource by calling .

    A buffer must be bound to the pipeline before it can be accessed. Buffers can be bound to the input-assembler stage by calls to and , to the stream-output stage by a call to , and to a shader stage by calling the appropriate shader method (such as for example).

    Buffers can be bound to multiple pipeline stages simultaneously for reading. A buffer can also be bound to a single pipeline stage for writing; however, the same buffer cannot be bound for reading and writing simultaneously.

    +
    + + ff476351 + ID3D11Buffer + ID3D11Buffer +
    + + + Initializes a new instance of the class. + + The device with which to associate the buffer. + The description of the buffer. + ff476501 + HRESULT ID3D11Device::CreateBuffer([In] const D3D11_BUFFER_DESC* pDesc,[In, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Buffer** ppBuffer) + ID3D11Device::CreateBuffer + + + + Initializes a new instance of the class. + + The device with which to associate the buffer. + Initial data used to initialize the buffer. + The description of the buffer. + ff476501 + HRESULT ID3D11Device::CreateBuffer([In] const D3D11_BUFFER_DESC* pDesc,[In, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Buffer** ppBuffer) + ID3D11Device::CreateBuffer + + + + Initializes a new instance of the class. + + The device with which to associate the buffer. + The data pointer. + The description of the buffer. + ff476501 + HRESULT ID3D11Device::CreateBuffer([In] const D3D11_BUFFER_DESC* pDesc,[In, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Buffer** ppBuffer) + ID3D11Device::CreateBuffer + + + + Initializes a new instance of the class. + + The device with which to associate the buffer. + The size, in bytes, of the buffer. + The usage pattern for the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + The size (in bytes) of the structure element for structured buffers. + ff476501 + HRESULT ID3D11Device::CreateBuffer([In] const D3D11_BUFFER_DESC* pDesc,[In, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Buffer** ppBuffer) + ID3D11Device::CreateBuffer + + + + Initializes a new instance of the class. + + The device with which to associate the buffer. + Initial data used to initialize the buffer. + The size, in bytes, of the buffer. + The usage pattern for the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + The size (in bytes) of the structure element for structured buffers. + ff476501 + HRESULT ID3D11Device::CreateBuffer([In] const D3D11_BUFFER_DESC* pDesc,[In, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Buffer** ppBuffer) + ID3D11Device::CreateBuffer + + + + Creates a new instance of the class. + + Type of the data to upload + The device with which to associate the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Initial data used to initialize the buffer. + The size, in bytes, of the buffer. If 0 is specified, sizeof(T) is used. + The usage pattern for the buffer. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + The size (in bytes) of the structure element for structured buffers. + An initialized buffer + ff476501 + HRESULT ID3D11Device::CreateBuffer([In] const D3D11_BUFFER_DESC* pDesc,[In, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Buffer** ppBuffer) + ID3D11Device::CreateBuffer + + + + Creates a new instance of the class. + + Type of the data to upload + The device with which to associate the buffer. + Flags specifying how the buffer will be bound to the pipeline. + Initial data used to initialize the buffer. + The size, in bytes, of the buffer. If 0 is specified, sizeof(T) * data.Length is used. + The usage pattern for the buffer. + Flags specifying how the buffer will be accessible from the CPU. + Miscellaneous resource options. + The size (in bytes) of the structure element for structured buffers. + An initialized buffer + ff476501 + HRESULT ID3D11Device::CreateBuffer([In] const D3D11_BUFFER_DESC* pDesc,[In, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Buffer** ppBuffer) + ID3D11Device::CreateBuffer + + + + Creates a new instance of the class. + + Type of the data to upload + The device with which to associate the buffer. + Initial data used to initialize the buffer. + The description. + + An initialized buffer + + + If the is at 0, sizeof(T) is used. + + ff476501 + HRESULT ID3D11Device::CreateBuffer([In] const D3D11_BUFFER_DESC* pDesc,[In, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Buffer** ppBuffer) + ID3D11Device::CreateBuffer + + + + Creates a new instance of the class. + + Type of the data to upload + The device with which to associate the buffer. + Initial data used to initialize the buffer. + The description. + + An initialized buffer + + + If the is at 0, sizeof(T) * data.Length is used. + + ff476501 + HRESULT ID3D11Device::CreateBuffer([In] const D3D11_BUFFER_DESC* pDesc,[In, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Buffer** ppBuffer) + ID3D11Device::CreateBuffer + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of a buffer resource.

    +
    + + ff476352 + GetDesc + GetDesc + void ID3D11Buffer::GetDesc([Out] D3D11_BUFFER_DESC* pDesc) +
    + + +

    Get the properties of a buffer resource.

    +
    +

    Pointer to a resource description (see ) filled in by the method.

    + + ff476352 + void ID3D11Buffer::GetDesc([Out] D3D11_BUFFER_DESC* pDesc) + ID3D11Buffer::GetDesc +
    + + +

    Describes a buffer resource.

    +
    + +

    This structure is used by to create buffer resources.

    In addition to this structure, you can also use the CD3D11_BUFFER_DESC derived structure, which is defined in D3D11.h and behaves like an inherited class, to help create a buffer description.

    If the bind flag is , you must set the ByteWidth value in multiples of 16, and less than or equal to D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT.

    +
    + + ff476092 + D3D11_BUFFER_DESC + D3D11_BUFFER_DESC +
    + + + Initializes a new instance of the struct. + + The size in bytes. + The usage. + The bind flags. + The CPU access flags. + The option flags. + The structure byte stride. + + + + Initializes a new instance of the struct. + + The size in bytes. + The bind flags. + The usage. + + + +

    Size of the buffer in bytes.

    +
    + + ff476092 + unsigned int ByteWidth + unsigned int ByteWidth +
    + + +

    Identify how the buffer is expected to be read from and written to. Frequency of update is a key factor. The most common value is typically ; see for all possible values.

    +
    + + ff476092 + D3D11_USAGE Usage + D3D11_USAGE Usage +
    + + +

    Identify how the buffer will be bound to the pipeline. Flags (see ) can be combined with a logical OR.

    +
    + + ff476092 + D3D11_BIND_FLAG BindFlags + D3D11_BIND_FLAG BindFlags +
    + + +

    CPU access flags (see ) or 0 if no CPU access is necessary. Flags can be combined with a logical OR.

    +
    + + ff476092 + D3D11_CPU_ACCESS_FLAG CPUAccessFlags + D3D11_CPU_ACCESS_FLAG CPUAccessFlags +
    + + +

    Miscellaneous flags (see ) or 0 if unused. Flags can be combined with a logical OR.

    +
    + + ff476092 + D3D11_RESOURCE_MISC_FLAG MiscFlags + D3D11_RESOURCE_MISC_FLAG MiscFlags +
    + + +

    The size of each element in the buffer structure (in bytes) when the buffer represents a structured buffer. For more info about structured buffers, see Structured Buffer.

    The size value in StructureByteStride must match the size of the format that you use for views of the buffer. For example, if you use a shader resource view (SRV) to read a buffer in a pixel shader, the SRV format size must match the size value in StructureByteStride.

    +
    + + ff476092 + unsigned int StructureByteStride + unsigned int StructureByteStride +
    + + +

    This interface encapsulates an HLSL class.

    +
    + +

    This interface is created by calling . The interface is used when binding shader resources to the pipeline using APIs such as .

    +
    + + ff476353 + ID3D11ClassInstance + ID3D11ClassInstance +
    + + + Initializes a class-instance object that represents an HLSL class instance. + + + Instances can be created (or gotten) before or after a shader is created. Use the same shader linkage object to acquire a class instance and create the shader the instance is going to be used in. For more information about using the interface, see {{Dynamic Linking}}. + + An instance of . + The type name of a class to initialize. + Identifies the constant buffer that contains the class data. + The four-component vector offset from the start of the constant buffer where the class data will begin. Consequently, this is not a byte offset. + The texture slot for the first texture; there may be multiple textures following the offset. + The sampler slot for the first sampler; there may be multiple samplers following the offset. + Returns S_OK if successful; otherwise, returns one of the following {{Direct3D 11 Return Codes}}. + HRESULT ID3D11ClassLinkage::CreateClassInstance([In] const char* pClassTypeName,[In] int ConstantBufferOffset,[In] int ConstantVectorOffset,[In] int TextureOffset,[In] int SamplerOffset,[Out] ID3D11ClassInstance** ppInstance) + + + + Gets the instance name of the current HLSL class. + + + GetInstanceName will return a valid name only for instances acquired using .For more information about using the interface, see {{Dynamic Linking}}. + + The instance name of the current HLSL class. + void GetInstanceName([Out, Buffer, Optional] LPSTR pInstanceName,[InOut] SIZE_T* pBufferLength) + + + + Gets the type of the current HLSL class. + + + GetTypeName will return a valid name only for instances acquired using .For more information about using the interface, see {{Dynamic Linking}}. + + Type of the current HLSL class. + void GetTypeName([Out, Buffer, Optional] LPSTR pTypeName,[InOut] SIZE_T* pBufferLength) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the object associated with the current HLSL class.

    +
    + +

    For more information about using the interface, see Dynamic Linking.

    Windows?Phone?8: This API is supported.

    +
    + + ff476354 + GetClassLinkage + GetClassLinkage + void ID3D11ClassInstance::GetClassLinkage([Out] ID3D11ClassLinkage** ppLinkage) +
    + + +

    Gets a description of the current HLSL class.

    +
    + +

    For more information about using the interface, see Dynamic Linking.

    An instance is not restricted to being used for a single type in a single shader. An instance is flexible and can be used for any shader that used the same type name or instance name when the instance was generated.

    • A created instance will work for any shader that contains a type of the same type name. For instance, a class instance created with the type name DefaultShader would work in any shader that contained a type DefaultShader even though several shaders could describe a different type.
    • A gotten instance maps directly to an instance name/index in a shader. A class instance aquired using GetClassInstance will work for any shader that contains a class instance of the name used to generate the runtime instance, the instance does not have to be the same type in all of the shaders it's used in.

    An instance does not replace the importance of reflection for a particular shader since a gotten instance will not know its slot location and a created instance only specifies a type name.

    Windows?Phone?8: This API is supported.

    +
    + + ff476355 + GetDesc + GetDesc + void ID3D11ClassInstance::GetDesc([Out] D3D11_CLASS_INSTANCE_DESC* pDesc) +
    + + +

    Gets the object associated with the current HLSL class.

    +
    + No documentation. + +

    For more information about using the interface, see Dynamic Linking.

    Windows?Phone?8: This API is supported.

    +
    + + ff476354 + void ID3D11ClassInstance::GetClassLinkage([Out] ID3D11ClassLinkage** ppLinkage) + ID3D11ClassInstance::GetClassLinkage +
    + + +

    Gets a description of the current HLSL class.

    +
    +

    A reference to a structure that describes the current HLSL class.

    + +

    For more information about using the interface, see Dynamic Linking.

    An instance is not restricted to being used for a single type in a single shader. An instance is flexible and can be used for any shader that used the same type name or instance name when the instance was generated.

    • A created instance will work for any shader that contains a type of the same type name. For instance, a class instance created with the type name DefaultShader would work in any shader that contained a type DefaultShader even though several shaders could describe a different type.
    • A gotten instance maps directly to an instance name/index in a shader. A class instance aquired using GetClassInstance will work for any shader that contains a class instance of the name used to generate the runtime instance, the instance does not have to be the same type in all of the shaders it's used in.

    An instance does not replace the importance of reflection for a particular shader since a gotten instance will not know its slot location and a created instance only specifies a type name.

    Windows?Phone?8: This API is supported.

    +
    + + ff476355 + void ID3D11ClassInstance::GetDesc([Out] D3D11_CLASS_INSTANCE_DESC* pDesc) + ID3D11ClassInstance::GetDesc +
    + + +

    Gets the instance name of the current HLSL class.

    +
    +

    The instance name of the current HLSL class.

    +

    The length of the pInstanceName parameter.

    + +

    GetInstanceName will return a valid name only for instances acquired using .

    For more information about using the interface, see Dynamic Linking.

    Windows?Phone?8: This API is supported.

    +
    + + ff476356 + void ID3D11ClassInstance::GetInstanceName([Out, Buffer, Optional] char* pInstanceName,[InOut] SIZE_T* pBufferLength) + ID3D11ClassInstance::GetInstanceName +
    + + +

    Gets the type of the current HLSL class.

    +
    +

    Type of the current HLSL class.

    +

    The length of the pTypeName parameter.

    + +

    GetTypeName will return a valid name only for instances acquired using .

    For more information about using the interface, see Dynamic Linking.

    Windows?Phone?8: This API is supported.

    +
    + + ff476357 + void ID3D11ClassInstance::GetTypeName([Out, Buffer, Optional] char* pTypeName,[InOut] SIZE_T* pBufferLength) + ID3D11ClassInstance::GetTypeName +
    + + +

    This interface encapsulates an HLSL dynamic linkage.

    +
    + +

    A class linkage object can hold up to 64K gotten instances. A gotten instance is a handle that references a variable name in any shader that is created with that linkage object. When you create a shader with a class linkage object, the runtime gathers these instances and stores them in the class linkage object. For more information about how a class linkage object is used, see Storing Variables and Types for Shaders to Share.

    An object is created using the method.

    +
    + + ff476358 + ID3D11ClassLinkage + ID3D11ClassLinkage +
    + + + Create a new instance of . + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the class-instance object that represents the specified HLSL class.

    +
    +

    The name of a class for which to get the class instance.

    +

    The index of the class instance.

    +

    The address of a reference to an interface to initialize.

    + +

    For more information about using the interface, see Dynamic Linking.

    A class instance must have at least 1 data member in order to be available for the runtime to use with . Any instance with no members will be optimized out of a compiled shader blob as a zero-sized object. If you have a class with no data members, use instead.

    Windows?Phone?8: This API is supported.

    +
    + + ff476360 + HRESULT ID3D11ClassLinkage::GetClassInstance([In] const char* pClassInstanceName,[In] unsigned int InstanceIndex,[Out] ID3D11ClassInstance** ppInstance) + ID3D11ClassLinkage::GetClassInstance +
    + + +

    Initializes a class-instance object that represents an HLSL class instance.

    +
    +

    The type name of a class to initialize.

    +

    Identifies the constant buffer that contains the class data.

    +

    The four-component vector offset from the start of the constant buffer where the class data will begin. Consequently, this is not a byte offset.

    +

    The texture slot for the first texture; there may be multiple textures following the offset.

    +

    The sampler slot for the first sampler; there may be multiple samplers following the offset.

    +

    The address of a reference to an interface to initialize.

    +

    Returns if successful; otherwise, returns one of the following Direct3D 11 Return Codes.

    + +

    Instances can be created (or gotten) before or after a shader is created. Use the same shader linkage object to acquire a class instance and create the shader the instance is going to be used in.

    For more information about using the interface, see Dynamic Linking.

    Windows?Phone?8: This API is supported.

    +
    + + ff476359 + HRESULT ID3D11ClassLinkage::CreateClassInstance([In] const char* pClassTypeName,[In] unsigned int ConstantBufferOffset,[In] unsigned int ConstantVectorOffset,[In] unsigned int TextureOffset,[In] unsigned int SamplerOffset,[Out, Fast] ID3D11ClassInstance** ppInstance) + ID3D11ClassLinkage::CreateClassInstance +
    + + +

    A compute-shader interface manages an executable program (a compute shader) that controls the compute-shader stage.

    +
    + +

    The compute-shader interface has no methods; use HLSL to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..

    To create a compute-shader interface, call . Before using a compute shader you must bind it to the device by calling .

    This interface is defined in D3D11.h.

    +
    + + ff476363 + ID3D11ComputeShader + ID3D11ComputeShader +
    + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    This interface encapsulates methods for measuring GPU performance.

    +
    + +

    A counter can be created with .

    This is a derived class of .

    Counter data is gathered by issuing an command, issuing some graphics commands, issuing an command, and then calling to get data about what happened in between the Begin and End calls. The data returned by GetData will be different depending on the type of counter. The call to End causes the data returned by GetData to be accurate up until the last call to End.

    Counters are best suited for profiling.

    For a list of the types of performance counters, see .

    +
    + + ff476364 + ID3D11Counter + ID3D11Counter +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The counter description. + The newly created object. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a counter description.

    +
    + + ff476365 + GetDesc + GetDesc + void ID3D11Counter::GetDesc([Out] D3D11_COUNTER_DESC* pDesc) +
    + + +

    Get a counter description.

    +
    +

    Pointer to a counter description (see ).

    + + ff476365 + void ID3D11Counter::GetDesc([Out] D3D11_COUNTER_DESC* pDesc) + ID3D11Counter::GetDesc +
    + + + Counter metadata that contains the type, name, units of measure, and a description of an existing counter. + + + + + Gets the data type of a counter (see ). + + The type. + + + + Gets the number of hardware counters that are needed for this counter type to be created. All instances of the same counter type use the same hardware counters. + + The hardware counter count. + + + + Gets a brief name for the counter. + + The name. + + + + Gets the units a counter measures. + + The units. + + + + Gets a description of the counter. + + The description. + + + +

    The depth-stencil-state interface holds a description for depth-stencil state that you can bind to the output-merger stage.

    +
    + +

    To create a depth-stencil-state object, call . To bind the depth-stencil-state object to the output-merger stage, call .

    +
    + + ff476375 + ID3D11DepthStencilState + ID3D11DepthStencilState +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + ff476506 + HRESULT ID3D11Device::CreateDepthStencilState([In] const D3D11_DEPTH_STENCIL_DESC* pDepthStencilDesc,[Out, Fast] ID3D11DepthStencilState** ppDepthStencilState) + ID3D11Device::CreateDepthStencilState + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the description for depth-stencil state that you used to create the depth-stencil-state object.

    +
    + +

    You use the description for depth-stencil state in a call to the method to create the depth-stencil-state object.

    +
    + + ff476376 + GetDesc + GetDesc + void ID3D11DepthStencilState::GetDesc([Out] D3D11_DEPTH_STENCIL_DESC* pDesc) +
    + + +

    Gets the description for depth-stencil state that you used to create the depth-stencil-state object.

    +
    +

    A reference to a structure that receives a description of the depth-stencil state.

    + +

    You use the description for depth-stencil state in a call to the method to create the depth-stencil-state object.

    +
    + + ff476376 + void ID3D11DepthStencilState::GetDesc([Out] D3D11_DEPTH_STENCIL_DESC* pDesc) + ID3D11DepthStencilState::GetDesc +
    + + +

    Describes depth-stencil state.

    +
    + +

    Pass a reference to to the method to create the depth-stencil state object.

    Depth-stencil state controls how depth-stencil testing is performed by the output-merger stage.

    The following table shows the default values of depth-stencil states.

    StateDefault Value
    DepthEnableTRUE
    DepthWriteMask
    DepthFunc
    StencilEnable
    StencilReadMaskD3D11_DEFAULT_STENCIL_READ_MASK
    StencilWriteMaskD3D11_DEFAULT_STENCIL_WRITE_MASK

    FrontFace.StencilFunc

    and

    BackFace.StencilFunc

    FrontFace.StencilDepthFailOp

    and

    BackFace.StencilDepthFailOp

    FrontFace.StencilPassOp

    and

    BackFace.StencilPassOp

    FrontFace.StencilFailOp

    and

    BackFace.StencilFailOp

    ?

    The formats that support stenciling are and .

    +
    + + ff476110 + D3D11_DEPTH_STENCIL_DESC + D3D11_DEPTH_STENCIL_DESC +
    + + + Returns default values for . + + + See MSDN documentation for default values. + + + + +

    Enable depth testing.

    +
    + + ff476110 + BOOL DepthEnable + BOOL DepthEnable +
    + + +

    Identify a portion of the depth-stencil buffer that can be modified by depth data (see ).

    +
    + + ff476110 + D3D11_DEPTH_WRITE_MASK DepthWriteMask + D3D11_DEPTH_WRITE_MASK DepthWriteMask +
    + + +

    A function that compares depth data against existing depth data. The function options are listed in .

    +
    + + ff476110 + D3D11_COMPARISON_FUNC DepthFunc + D3D11_COMPARISON_FUNC DepthFunc +
    + + +

    Enable stencil testing.

    +
    + + ff476110 + BOOL StencilEnable + BOOL StencilEnable +
    + + +

    Identify a portion of the depth-stencil buffer for reading stencil data.

    +
    + + ff476110 + unsigned char StencilReadMask + unsigned char StencilReadMask +
    + + +

    Identify a portion of the depth-stencil buffer for writing stencil data.

    +
    + + ff476110 + unsigned char StencilWriteMask + unsigned char StencilWriteMask +
    + + +

    Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing towards the camera (see ).

    +
    + + ff476110 + D3D11_DEPTH_STENCILOP_DESC FrontFace + D3D11_DEPTH_STENCILOP_DESC FrontFace +
    + + +

    Identify how to use the results of the depth test and the stencil test for pixels whose surface normal is facing away from the camera (see ).

    +
    + + ff476110 + D3D11_DEPTH_STENCILOP_DESC BackFace + D3D11_DEPTH_STENCILOP_DESC BackFace +
    + + +

    A depth-stencil-view interface accesses a texture resource during depth-stencil testing.

    +
    + +

    To create a depth-stencil view, call .

    To bind a depth-stencil view to the pipeline, call .

    +
    + + ff476377 + ID3D11DepthStencilView + ID3D11DepthStencilView +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the DepthStencil flag. + ID3D11Device::CreateDepthStencilView + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the DepthStencil flag. + A structure describing the to be created. + ID3D11Device::CreateDepthStencilView + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    A depth-stencil-view interface accesses a texture resource during depth-stencil testing.

    +
    + +

    To create a depth-stencil view, call .

    To bind a depth-stencil view to the pipeline, call .

    +
    + + ff476377 + GetDesc + GetDesc + void ID3D11DepthStencilView::GetDesc([Out] D3D11_DEPTH_STENCIL_VIEW_DESC* pDesc) +
    + + +

    A depth-stencil-view interface accesses a texture resource during depth-stencil testing.

    +
    + No documentation. + +

    To create a depth-stencil view, call .

    To bind a depth-stencil view to the pipeline, call .

    +
    + + ff476377 + void ID3D11DepthStencilView::GetDesc([Out] D3D11_DEPTH_STENCIL_VIEW_DESC* pDesc) + ID3D11DepthStencilView::GetDesc +
    + + +

    The device interface represents a virtual adapter; it is used to create resources.

    +
    + +

    A device is created using .

    Windows?Phone?8: This API is supported.

    +
    + + ff476379 + ID3D11Device + ID3D11Device +
    + + + Initializes a new instance of the class. + + + Type of the driver. + + ff476082 + HRESULT D3D11CreateDevice([In, Optional] IDXGIAdapter* pAdapter,[In] D3D_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D11_CREATE_DEVICE_FLAG Flags,[In, Buffer, Optional] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In] unsigned int SDKVersion,[Out, Fast] ID3D11Device** ppDevice,[Out, Optional] D3D_FEATURE_LEVEL* pFeatureLevel,[Out, Optional] ID3D11DeviceContext** ppImmediateContext) + D3D11CreateDevice + + + + Initializes a new instance of the class. + + + The adapter. + + ff476082 + HRESULT D3D11CreateDevice([In, Optional] IDXGIAdapter* pAdapter,[In] D3D_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D11_CREATE_DEVICE_FLAG Flags,[In, Buffer, Optional] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In] unsigned int SDKVersion,[Out, Fast] ID3D11Device** ppDevice,[Out, Optional] D3D_FEATURE_LEVEL* pFeatureLevel,[Out, Optional] ID3D11DeviceContext** ppImmediateContext) + D3D11CreateDevice + + + + Constructor for a D3D11 Device. See for more information. + + Type of the driver. + The flags. + ff476082 + HRESULT D3D11CreateDevice([In, Optional] IDXGIAdapter* pAdapter,[In] D3D_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D11_CREATE_DEVICE_FLAG Flags,[In, Buffer, Optional] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In] unsigned int SDKVersion,[Out, Fast] ID3D11Device** ppDevice,[Out, Optional] D3D_FEATURE_LEVEL* pFeatureLevel,[Out, Optional] ID3D11DeviceContext** ppImmediateContext) + D3D11CreateDevice + + + + Constructor for a D3D11 Device. See for more information. + + + + ff476082 + HRESULT D3D11CreateDevice([In, Optional] IDXGIAdapter* pAdapter,[In] D3D_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D11_CREATE_DEVICE_FLAG Flags,[In, Buffer, Optional] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In] unsigned int SDKVersion,[Out, Fast] ID3D11Device** ppDevice,[Out, Optional] D3D_FEATURE_LEVEL* pFeatureLevel,[Out, Optional] ID3D11DeviceContext** ppImmediateContext) + D3D11CreateDevice + + + + Constructor for a D3D11 Device. See for more information. + + + + + ff476082 + HRESULT D3D11CreateDevice([In, Optional] IDXGIAdapter* pAdapter,[In] D3D_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D11_CREATE_DEVICE_FLAG Flags,[In, Buffer, Optional] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In] unsigned int SDKVersion,[Out, Fast] ID3D11Device** ppDevice,[Out, Optional] D3D_FEATURE_LEVEL* pFeatureLevel,[Out, Optional] ID3D11DeviceContext** ppImmediateContext) + D3D11CreateDevice + + + + Constructor for a D3D11 Device. See for more information. + + + + + ff476082 + HRESULT D3D11CreateDevice([In, Optional] IDXGIAdapter* pAdapter,[In] D3D_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D11_CREATE_DEVICE_FLAG Flags,[In, Buffer, Optional] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In] unsigned int SDKVersion,[Out, Fast] ID3D11Device** ppDevice,[Out, Optional] D3D_FEATURE_LEVEL* pFeatureLevel,[Out, Optional] ID3D11DeviceContext** ppImmediateContext) + D3D11CreateDevice + + + + Initializes a new instance of the class along with a new used for rendering. + + The type of device to create. + A list of runtime layers to enable. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + + Initializes a new instance of the class along with a new used for rendering. + + The video adapter on which the device should be created. + A list of runtime layers to enable. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + + Initializes a new instance of the class along with a new used for rendering. + + The type of device to create. + A list of runtime layers to enable. + A list of feature levels which determine the order of feature levels to attempt to create. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + + Initializes a new instance of the class along with a new used for rendering. + + The video adapter on which the device should be created. + A list of runtime layers to enable. + A list of feature levels which determine the order of feature levels to attempt to create. + Details used to create the swap chain. + When the method completes, contains the created device instance. + When the method completes, contains the created swap chain instance. + A object describing the result of the operation. + + + + This overload has been deprecated. Use one of the alternatives that does not take both an adapter and a driver type. + + + + + Get the type, name, units of measure, and a description of an existing counter. + + The counter description. + Description of the counter + + + + Give a device access to a shared resource created on a different Direct3d device. + + The type of the resource we are gaining access to. + A resource handle. See remarks. + + This method returns a reference to the resource we are gaining access to. + + + To share a resource between two Direct3D 10 devices the resource must have been created with the flag, if it was created using the ID3D10Device interface. If it was created using the IDXGIDevice interface, then the resource is always shared. The REFIID, or GUID, of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof(ID3D10Buffer) will get the GUID of the interface to a buffer resource. When sharing a resource between two Direct3D 10 devices the unique handle of the resource can be obtained by querying the resource for the interface and then calling {{GetSharedHandle}}. + IDXGIResource* pOtherResource(NULL); + hr = pOtherDeviceResource->QueryInterface( __uuidof(IDXGIResource), (void**)&pOtherResource ); + HANDLE sharedHandle; + pOtherResource->GetSharedHandle(&sharedHandle); + The only resources that can be shared are 2D non-mipmapped textures. To share a resource between a Direct3D 9 device and a Direct3D 10 device the texture must have been created using the pSharedHandle argument of {{CreateTexture}}. The shared Direct3D 9 handle is then passed to OpenSharedResource in the hResource argument. The following code illustrates the method calls involved. + sharedHandle = NULL; // must be set to NULL to create, can use a valid handle here to open in D3D9 + pDevice9->CreateTexture(..., pTex2D_9, &sharedHandle); + ... + pDevice10->OpenSharedResource(sharedHandle, __uuidof(ID3D10Resource), (void**)(&tempResource10)); + tempResource10->QueryInterface(__uuidof(ID3D10Texture2D), (void**)(&pTex2D_10)); + tempResource10->Release(); + // now use pTex2D_10 with pDevice10 + Textures being shared from D3D9 to D3D10 have the following restrictions. Textures must be 2D Only 1 mip level is allowed Texture must have default usage Texture must be write only MSAA textures are not allowed Bind flags must have SHADER_RESOURCE and RENDER_TARGET set Only R10G10B10A2_UNORM, R16G16B16A16_FLOAT and R8G8B8A8_UNORM formats are allowed If a shared texture is updated on one device must be called on that device. + + HRESULT ID3D10Device::OpenSharedResource([In] void* hResource,[In] GUID* ReturnedInterface,[Out, Optional] void** ppResource) + + + + Check if this device is supporting compute shaders for the specified format. + + The format for which to check support. + Flags indicating usage contexts in which the specified format is supported. + + + +

    Gets information about the features that are supported by the current graphics driver.

    +
    + Returns a structure + ff476497 + HRESULT ID3D11Device::CheckFeatureSupport([In] D3D11_FEATURE Feature,[Out, Buffer] void* pFeatureSupportData,[In] unsigned int FeatureSupportDataSize) + ID3D11Device::CheckFeatureSupport +
    + + +

    Gets information about the features that are supported by the current graphics driver.

    +
    + Returns a structure + ff476497 + HRESULT ID3D11Device::CheckFeatureSupport([In] D3D11_FEATURE Feature,[Out, Buffer] void* pFeatureSupportData,[In] unsigned int FeatureSupportDataSize) + ID3D11Device::CheckFeatureSupport +
    + + +

    Gets information about whether the driver supports the nonpowers-of-2-unconditionally feature. TRUE for hardware at Direct3D 10 and higher feature levels.

    +
    + Returns true if this hardware supports non-powers-of-2 texture. This returns always true Direct3D 10 and higher feature levels. + ff476497 + HRESULT ID3D11Device::CheckFeatureSupport([In] D3D11_FEATURE Feature,[Out, Buffer] void* pFeatureSupportData,[In] unsigned int FeatureSupportDataSize) + ID3D11Device::CheckFeatureSupport +
    + + +

    Gets information about whether a rendering device batches rendering commands and performs multipass rendering into tiles or bins over a render area. Certain API usage patterns that are fine TileBasedDefferredRenderers (TBDRs) can perform worse on non-TBDRs and vice versa. Applications that are careful about rendering can be friendly to both TBDR and non-TBDR architectures.

    +
    + Returns TRUE if the rendering device batches rendering commands and otherwise. + ff476497 + HRESULT ID3D11Device::CheckFeatureSupport([In] D3D11_FEATURE Feature,[Out, Buffer] void* pFeatureSupportData,[In] unsigned int FeatureSupportDataSize) + ID3D11Device::CheckFeatureSupport +
    + + + Retrieves information about Direct3D11.3 feature options in the current graphics driver + + dn879499 + Returns a structure + + + + Retrieves additional information about Direct3D11.3 feature options in the current graphics driver + + dn933226 + Returns a structure + + + + Retrieves additional information about Direct3D11.3 feature options in the current graphics driver + + dn933226 + Returns a structure + + + + Check if this device is supporting a feature. + + The feature to check. + + Returns true if this device supports this feature, otherwise false. + + + + + Check if this device is supporting threading. + + Support concurrent resources. + Support command lists. + + A object describing the result of the operation. + + + + + Check if a feature level is supported by a primary adapter. + + The feature level. + true if the primary adapter is supporting this feature level; otherwise, false. + + + + Check if a feature level is supported by a particular adapter. + + The adapter. + The feature level. + true if the specified adapter is supporting this feature level; otherwise, false. + + + + Gets the highest supported hardware feature level of the primary adapter. + + The highest supported hardware feature level. + + + + Gets the highest supported hardware feature level of the primary adapter. + + The adapter. + + The highest supported hardware feature level. + + + + + Gets a value indicating whether the current device is using the reference rasterizer. + + + + + Gets or sets the debug-name for this object. + + + The debug name. + + + + + Internal CreateDevice + + + + + + + + +

    Creates a device that uses Direct3D 11 functionality in Direct3D 12, specifying a pre-existing D3D12 device to use for D3D11 interop.

    +
    +

    Specifies a pre-existing D3D12 device to use for D3D11 interop. May not be null.

    +

    Any of those documented for D3D11CreateDeviceAndSwapChain. Specifies which runtime layers to enable (see the enumeration); values can be bitwise OR'd together. Flags must be compatible with device flags, and its NodeMask must be a subset of the NodeMask provided to the present API.

    +

    An array of any of the following:

    The first feature level which is less than or equal to the D3D12 device's feature level will be used to perform D3D11 validation. Creation will fail if no acceptable feature levels are provided. Providing null will default to the D3D12 device's feature level.

    +

    An array of unique queues for D3D11On12 to use. Valid queue types: 3D command queue.

    + The Direct3D11 device created around the specified Direct3D12 device + +

    The function signature PFN_D3D11ON12_CREATE_DEVICE is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking.

    +
    + dn933209 + HRESULT D3D11On12CreateDevice([In] IUnknown* pDevice,[In] D3D11_CREATE_DEVICE_FLAG Flags,[In, Buffer, Optional] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In, Buffer, Optional] const IUnknown** ppCommandQueues,[In] unsigned int NumQueues,[In] unsigned int NodeMask,[Out] ID3D11Device** ppDevice,[Out, Optional] ID3D11DeviceContext** ppImmediateContext,[Out, Optional] D3D_FEATURE_LEVEL* pChosenFeatureLevel) + D3D11On12CreateDevice +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant MultisampleCountMaximum. + D3D11_MAX_MULTISAMPLE_SAMPLE_COUNT + + + +

    Gets the feature level of the hardware device.

    +
    + +

    Feature levels determine the capabilities of your device.

    +
    + + ff476528 + GetFeatureLevel + GetFeatureLevel + D3D_FEATURE_LEVEL ID3D11Device::GetFeatureLevel() +
    + + +

    Get the flags used during the call to create the device with .

    +
    + + ff476525 + GetCreationFlags + GetCreationFlags + unsigned int ID3D11Device::GetCreationFlags() +
    + + +

    Get the reason why the device was removed.

    +
    + + ff476526 + GetDeviceRemovedReason + GetDeviceRemovedReason + HRESULT ID3D11Device::GetDeviceRemovedReason() +
    + + +

    Gets an immediate context, which can play back command lists.

    +
    + +

    The GetImmediateContext method returns an object that represents an immediate context which is used to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.

    The GetImmediateContext method increments the reference count of the immediate context by one. Therefore, you must call Release on the returned interface reference when you are done with it to avoid a memory leak.

    +
    + + ff476529 + GetImmediateContext + GetImmediateContext + void ID3D11Device::GetImmediateContext([Out] ID3D11DeviceContext** ppImmediateContext) +
    + + +

    Get or sets the exception-mode flags.

    +
    + +

    An exception-mode flag is used to elevate an error condition to a non-continuable exception.

    +
    + + ff476527 + GetExceptionMode / SetExceptionMode + GetExceptionMode + unsigned int ID3D11Device::GetExceptionMode() +
    + + +

    Creates a buffer (vertex buffer, index buffer, or shader-constant buffer).

    +
    +

    A reference to a structure that describes the buffer.

    +

    A reference to a structure that describes the initialization data; use null to allocate space only (with the exception that it cannot be null if the usage flag is ).

    If you don't pass anything to pInitialData, the initial content of the memory for the buffer is undefined. In this case, you need to write the buffer content some other way before the resource is read.

    +

    Address of a reference to the interface for the buffer object created. Set this parameter to null to validate the other input parameters (S_FALSE indicates a pass).

    +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the buffer. See Direct3D 11 Return Codes for other possible return values.

    + +

    For example code, see How to: Create a Vertex Buffer, How to: Create an Index Buffer or How to: Create a Constant Buffer.

    For a constant buffer (BindFlags of set to ), you must set the ByteWidth value of in multiples of 16, and less than or equal to D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT.

    The Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems, provides the following new functionality for CreateBuffer:

    You can create a constant buffer that is larger than the maximum constant buffer size that a shader can access (4096 32-bit*4-component constants ? 64KB). When you bind the constant buffer to the pipeline (for example, via PSSetConstantBuffers or PSSetConstantBuffers1), you can define a range of the buffer that the shader can access that fits within the 4096 constant limit.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher. On existing drivers that are implemented to feature level 10 and higher, a call to CreateBuffer to request a constant buffer that is larger than 4096 fails.

    +
    + + ff476501 + HRESULT ID3D11Device::CreateBuffer([In] const D3D11_BUFFER_DESC* pDesc,[In, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Buffer** ppBuffer) + ID3D11Device::CreateBuffer +
    + + +

    Creates an array of 1D textures.

    +
    + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return code is . See Direct3D 11 Return Codes for failing error codes.

    + +

    CreateTexture1D creates a 1D texture resource, which can contain a number of 1D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.

    All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of structures pointed to by pInitialData, or they can use one of the D3DX texture functions such as D3DX11CreateTextureFromFile.

    For a 32 width texture with a full mipmap chain, the pInitialData array has the following 6 elements: +

    • pInitialData[0] = 32x1
    • pInitialData[1] = 16x1
    • pInitialData[2] = 8x1
    • pInitialData[3] = 4x1 +
    • pInitialData[4] = 2x1 +
    • pInitialData[5] = 1x1 +
    +
    + + ff476520 + HRESULT ID3D11Device::CreateTexture1D([In] const D3D11_TEXTURE1D_DESC* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture1D** ppTexture1D) + ID3D11Device::CreateTexture1D +
    + + +

    Create an array of 2D textures.

    +
    + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return code is . See Direct3D 11 Return Codes for failing error codes.

    + +

    CreateTexture2D creates a 2D texture resource, which can contain a number of 2D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.

    All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of structures pointed to by pInitialData, or it may use one of the D3DX texture functions such as D3DX11CreateTextureFromFile.

    For a 32 x 32 texture with a full mipmap chain, the pInitialData array has the following 6 elements: +

    • pInitialData[0] = 32x32
    • pInitialData[1] = 16x16
    • pInitialData[2] = 8x8
    • pInitialData[3] = 4x4 +
    • pInitialData[4] = 2x2 +
    • pInitialData[5] = 1x1 +
    +
    + + ff476521 + HRESULT ID3D11Device::CreateTexture2D([In] const D3D11_TEXTURE2D_DESC* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture2D** ppTexture2D) + ID3D11Device::CreateTexture2D +
    + + +

    Create a single 3D texture.

    +
    + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return code is . See Direct3D 11 Return Codes for failing error codes.

    + +

    CreateTexture3D creates a 3D texture resource, which can contain a number of 3D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.

    All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of structures pointed to by pInitialData, or they can use one of the D3DX texture functions such as D3DX11CreateTextureFromFile.

    Each element of pInitialData provides all of the slices that are defined for a given miplevel. For example, for a 32 x 32 x 4 volume texture with a full mipmap chain, the array has the following 6 elements:

    • pInitialData[0] = 32x32 with 4 slices
    • pInitialData[1] = 16x16 with 2 slices
    • pInitialData[2] = 8x8 with 1 slice
    • pInitialData[3] = 4x4 + with 1 slice
    • pInitialData[4] = 2x2 + with 1 slice
    • pInitialData[5] = 1x1 + with 1 slice
    +
    + + ff476522 + HRESULT ID3D11Device::CreateTexture3D([In] const D3D11_TEXTURE3D_DESC* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture3D** ppTexture3D) + ID3D11Device::CreateTexture3D +
    + + +

    Create a shader-resource view for accessing data in a resource.

    +
    +

    Pointer to the resource that will serve as input to a shader. This resource must have been created with the flag.

    +

    Pointer to a shader-resource view description (see ). Set this parameter to null to create a view that accesses the entire resource (using the format the resource was created with).

    +

    Address of a reference to an . Set this parameter to null to validate the other input parameters (the method will return S_FALSE if the other input parameters pass validation).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    A resource is made up of one or more subresources; a view identifies which subresources to allow the pipeline to access. In addition, each resource is bound to the pipeline using a view. A shader-resource view is designed to bind any buffer or texture resource to the shader stages using the following API methods: , and .

    Because a view is fully typed, this means that typeless resources become fully typed when bound to the pipeline.

    Note?? To successfully create a shader-resource view from a typeless buffer (for example, ), you must set the flag when you create the buffer.?

    The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use CreateShaderResourceView for the following new purpose.

    You can create shader-resource views of video resources so that Direct3D shaders can process those shader-resource views. These video resources are either Texture2D or Texture2DArray. The value in the ViewDimension member of the structure for a created shader-resource view must match the type of video resource, D3D11_SRV_DIMENSION_TEXTURE2D for Texture2D and D3D11_SRV_DIMENSION_TEXTURE2DARRAY for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the reference page specify the format values that views are restricted to.

    The runtime read+write conflict prevention logic (which stops a resource from being bound as an SRV and RTV or UAV at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.

    Windows?Phone?8: This API is supported.

    +
    + + ff476519 + HRESULT ID3D11Device::CreateShaderResourceView([In] ID3D11Resource* pResource,[In, Optional] const D3D11_SHADER_RESOURCE_VIEW_DESC* pDesc,[Out, Fast] ID3D11ShaderResourceView** ppSRView) + ID3D11Device::CreateShaderResourceView +
    + + +

    Creates a view for accessing an unordered access resource.

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns one of the Direct3D 11 Return Codes.

    + +

    The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use CreateUnorderedAccessView for the following new purpose.

    You can create unordered-access views of video resources so that Direct3D shaders can process those unordered-access views. These video resources are either Texture2D or Texture2DArray. The value in the ViewDimension member of the structure for a created unordered-access view must match the type of video resource, for Texture2D and for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the reference page specify the format values that views are restricted to.

    The runtime read+write conflict prevention logic (which stops a resource from being bound as an SRV and RTV or UAV at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.

    +
    + + ff476523 + HRESULT ID3D11Device::CreateUnorderedAccessView([In] ID3D11Resource* pResource,[In, Optional] const D3D11_UNORDERED_ACCESS_VIEW_DESC* pDesc,[Out, Fast] ID3D11UnorderedAccessView** ppUAView) + ID3D11Device::CreateUnorderedAccessView +
    + + +

    Creates a render-target view for accessing resource data.

    +
    +

    Pointer to a that represents a render target. This resource must have been created with the flag.

    +

    Pointer to a that represents a render-target view description. Set this parameter to null to create a view that accesses all of the subresources in mipmap level 0.

    +

    Address of a reference to an . Set this parameter to null to validate the other input parameters (the method will return S_FALSE if the other input parameters pass validation).

    +

    This method returns one of the Direct3D 11 Return Codes.

    + +

    A render-target view can be bound to the output-merger stage by calling .

    The Direct3D 11.1 runtime, which is available starting with Windows?8, allows you to use CreateRenderTargetView for the following new purpose.

    You can create render-target views of video resources so that Direct3D shaders can process those render-target views. These video resources are either Texture2D or Texture2DArray. The value in the ViewDimension member of the structure for a created render-target view must match the type of video resource, for Texture2D and for Texture2DArray. Additionally, the format of the underlying video resource restricts the formats that the view can use. The video resource format values on the reference page specify the format values that views are restricted to.

    The runtime read+write conflict prevention logic (which stops a resource from being bound as an SRV and RTV or UAV at the same time) treats views of different parts of the same video surface as conflicting for simplicity. Therefore, the runtime does not allow an application to read from luma while the application simultaneously renders to chroma in the same surface even though the hardware might allow these simultaneous operations.

    +
    + + ff476517 + HRESULT ID3D11Device::CreateRenderTargetView([In] ID3D11Resource* pResource,[In, Optional] const D3D11_RENDER_TARGET_VIEW_DESC* pDesc,[Out, Fast] ID3D11RenderTargetView** ppRTView) + ID3D11Device::CreateRenderTargetView +
    + + +

    Create a depth-stencil view for accessing resource data.

    +
    +

    Pointer to the resource that will serve as the depth-stencil surface. This resource must have been created with the flag.

    +

    Pointer to a depth-stencil-view description (see ). Set this parameter to null to create a view that accesses mipmap level 0 of the entire resource (using the format the resource was created with).

    +

    Address of a reference to an . Set this parameter to null to validate the other input parameters (the method will return S_FALSE if the other input parameters pass validation).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    A depth-stencil view can be bound to the output-merger stage by calling .

    +
    + + ff476507 + HRESULT ID3D11Device::CreateDepthStencilView([In] ID3D11Resource* pResource,[In, Optional] const D3D11_DEPTH_STENCIL_VIEW_DESC* pDesc,[Out, Fast] ID3D11DepthStencilView** ppDepthStencilView) + ID3D11Device::CreateDepthStencilView +
    + + +

    Create an input-layout object to describe the input-buffer data for the input-assembler stage.

    +
    +

    An array of the input-assembler stage input data types; each type is described by an element description (see ).

    +

    The number of input-data types in the array of input-elements.

    +

    A reference to the compiled shader. The compiled shader code contains a input signature which is validated against the array of elements. See remarks.

    +

    Size of the compiled shader.

    +

    A reference to the input-layout object created (see ). To validate the other input parameters, set this reference to be null and verify that the method returns S_FALSE.

    +

    If the method succeeds, the return code is . See Direct3D 11 Return Codes for failing error codes.

    + +

    After creating an input layout object, it must be bound to the input-assembler stage before calling a draw API.

    Once an input-layout object is created from a shader signature, the input-layout object can be reused with any other shader that has an identical input signature (semantics included). This can simplify the creation of input-layout objects when you are working with many shaders with identical inputs.

    If a data type in the input-layout declaration does not match the data type in a shader-input signature, CreateInputLayout will generate a warning during compilation. The warning is simply to call attention to the fact that the data may be reinterpreted when read from a register. You may either disregard this warning (if reinterpretation is intentional) or make the data types match in both declarations to eliminate the warning.

    Windows?Phone?8: This API is supported.

    +
    + + ff476512 + HRESULT ID3D11Device::CreateInputLayout([In, Buffer] const D3D11_INPUT_ELEMENT_DESC* pInputElementDescs,[In] unsigned int NumElements,[In, Buffer] const void* pShaderBytecodeWithInputSignature,[In] SIZE_T BytecodeLength,[Out, Fast] ID3D11InputLayout** ppInputLayout) + ID3D11Device::CreateInputLayout +
    + + +

    Create a vertex-shader object from a compiled shader.

    +
    +

    A reference to the compiled shader.

    +

    Size of the compiled vertex shader.

    +

    A reference to a class linkage interface (see ); the value can be null.

    +

    Address of a reference to a interface. If this is null, all other parameters will be validated, and if all parameters pass validation this API will return S_FALSE instead of .

    +

    This method returns one of the Direct3D 11 Return Codes.

    + +

    The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for CreateVertexShader.

    The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views (UAV) are available at all shader stages, you can use these instructions in all shader stages.

    Therefore, if you use the following shader model 5.0 instructions in a vertex shader, you can successfully pass the compiled vertex shader to pShaderBytecode. That is, the call to CreateVertexShader succeeds.

    If you pass a compiled shader to pShaderBytecode that uses any of the following instructions on a device that doesn?t support UAVs at every shader stage (including existing drivers that are not implemented to support UAVs at every shader stage), CreateVertexShader fails. CreateVertexShader also fails if the shader tries to use a UAV slot beyond the set of UAV slots that the hardware supports.

    • dcl_uav_typed
    • dcl_uav_raw
    • dcl_uav_structured
    • ld_raw
    • ld_structured
    • ld_uav_typed
    • store_raw
    • store_structured
    • store_uav_typed
    • sync_uglobal
    • All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)
    +
    + + ff476524 + HRESULT ID3D11Device::CreateVertexShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[In, Optional] ID3D11ClassLinkage* pClassLinkage,[Out, Fast] ID3D11VertexShader** ppVertexShader) + ID3D11Device::CreateVertexShader +
    + + +

    Create a geometry shader.

    +
    +

    A reference to the compiled shader.

    +

    Size of the compiled geometry shader.

    +

    A reference to a class linkage interface (see ); the value can be null.

    +

    Address of a reference to a interface. If this is null, all other parameters will be validated, and if all parameters pass validation this API will return S_FALSE instead of .

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    After it is created, the shader can be set to the device by calling .

    The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for CreateGeometryShader.

    The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views (UAV) are available at all shader stages, you can use these instructions in all shader stages.

    Therefore, if you use the following shader model 5.0 instructions in a geometry shader, you can successfully pass the compiled geometry shader to pShaderBytecode. That is, the call to CreateGeometryShader succeeds.

    If you pass a compiled shader to pShaderBytecode that uses any of the following instructions on a device that doesn?t support UAVs at every shader stage (including existing drivers that are not implemented to support UAVs at every shader stage), CreateGeometryShader fails. CreateGeometryShader also fails if the shader tries to use a UAV slot beyond the set of UAV slots that the hardware supports.

    • dcl_uav_typed
    • dcl_uav_raw
    • dcl_uav_structured
    • ld_raw
    • ld_structured
    • ld_uav_typed
    • store_raw
    • store_structured
    • store_uav_typed
    • sync_uglobal
    • All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)
    +
    + + ff476509 + HRESULT ID3D11Device::CreateGeometryShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[In, Optional] ID3D11ClassLinkage* pClassLinkage,[Out, Fast] ID3D11GeometryShader** ppGeometryShader) + ID3D11Device::CreateGeometryShader +
    + + +

    Creates a geometry shader that can write to streaming output buffers.

    +
    +

    A reference to the compiled geometry shader for a standard geometry shader plus stream output. For info on how to get this reference, see Getting a Pointer to a Compiled Shader.

    To create the stream output without using a geometry shader, pass a reference to the output signature for the prior stage. To obtain this output signature, call the compiler function. You can also pass a reference to the compiled shader for the prior stage (for example, the vertex-shader stage or domain-shader stage). This compiled shader provides the output signature for the data.

    +

    Size of the compiled geometry shader.

    +

    Pointer to a array. Cannot be null if NumEntries > 0.

    +

    The number of entries in the stream output declaration ( ranges from 0 to * ).

    +

    An array of buffer strides; each stride is the size of an element for that buffer.

    +

    The number of strides (or buffers) in pBufferStrides (ranges from 0 to ).

    +

    The index number of the stream to be sent to the rasterizer stage (ranges from 0 to - 1). Set to if no stream is to be rasterized.

    +

    A reference to a class linkage interface (see ); the value can be null.

    +

    Address of a reference to an interface, representing the geometry shader that was created. Set this to null to validate the other parameters; if validation passes, the method will return S_FALSE instead of .

    +

    This method returns one of the Direct3D 11 Return Codes.

    + +

    For more info about using CreateGeometryShaderWithStreamOutput, see Create a Geometry-Shader Object with Stream Output.

    The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for CreateGeometryShaderWithStreamOutput.

    The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views (UAV) are available at all shader stages, you can use these instructions in all shader stages.

    Therefore, if you use the following shader model 5.0 instructions in a geometry shader, you can successfully pass the compiled geometry shader to pShaderBytecode. That is, the call to CreateGeometryShaderWithStreamOutput succeeds.

    If you pass a compiled shader to pShaderBytecode that uses any of the following instructions on a device that doesn?t support UAVs at every shader stage (including existing drivers that are not implemented to support UAVs at every shader stage), CreateGeometryShaderWithStreamOutput fails. CreateGeometryShaderWithStreamOutput also fails if the shader tries to use a UAV slot beyond the set of UAV slots that the hardware supports.

    • dcl_uav_typed
    • dcl_uav_raw
    • dcl_uav_structured
    • ld_raw
    • ld_structured
    • ld_uav_typed
    • store_raw
    • store_structured
    • store_uav_typed
    • sync_uglobal
    • All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)

    Windows?Phone?8: This API is supported.

    +
    + + ff476510 + HRESULT ID3D11Device::CreateGeometryShaderWithStreamOutput([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[In, Buffer, Optional] const D3D11_SO_DECLARATION_ENTRY* pSODeclaration,[In] unsigned int NumEntries,[In, Buffer, Optional] const unsigned int* pBufferStrides,[In] unsigned int NumStrides,[In] unsigned int RasterizedStream,[In, Optional] ID3D11ClassLinkage* pClassLinkage,[Out, Fast] ID3D11GeometryShader** ppGeometryShader) + ID3D11Device::CreateGeometryShaderWithStreamOutput +
    + + +

    Create a pixel shader.

    +
    +

    A reference to the compiled shader.

    +

    Size of the compiled pixel shader.

    +

    A reference to a class linkage interface (see ); the value can be null.

    +

    Address of a reference to a interface. If this is null, all other parameters will be validated, and if all parameters pass validation this API will return S_FALSE instead of .

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    After creating the pixel shader, you can set it to the device using .

    +
    + + ff476513 + HRESULT ID3D11Device::CreatePixelShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[In, Optional] ID3D11ClassLinkage* pClassLinkage,[Out, Fast] ID3D11PixelShader** ppPixelShader) + ID3D11Device::CreatePixelShader +
    + + +

    Create a hull shader.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    This method returns one of the Direct3D 11 Return Codes.

    + +

    The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for CreateHullShader.

    The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views (UAV) are available at all shader stages, you can use these instructions in all shader stages.

    Therefore, if you use the following shader model 5.0 instructions in a hull shader, you can successfully pass the compiled hull shader to pShaderBytecode. That is, the call to CreateHullShader succeeds.

    If you pass a compiled shader to pShaderBytecode that uses any of the following instructions on a device that doesn?t support UAVs at every shader stage (including existing drivers that are not implemented to support UAVs at every shader stage), CreateHullShader fails. CreateHullShader also fails if the shader tries to use a UAV slot beyond the set of UAV slots that the hardware supports.

    • dcl_uav_typed
    • dcl_uav_raw
    • dcl_uav_structured
    • ld_raw
    • ld_structured
    • ld_uav_typed
    • store_raw
    • store_structured
    • store_uav_typed
    • sync_uglobal
    • All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)
    +
    + + ff476511 + HRESULT ID3D11Device::CreateHullShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[In, Optional] ID3D11ClassLinkage* pClassLinkage,[Out, Fast] ID3D11HullShader** ppHullShader) + ID3D11Device::CreateHullShader +
    + + +

    Create a domain shader .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    The Direct3D 11.1 runtime, which is available starting with Windows?8, provides the following new functionality for CreateDomainShader.

    The following shader model 5.0 instructions are available to just pixel shaders and compute shaders in the Direct3D 11.0 runtime. For the Direct3D 11.1 runtime, because unordered access views (UAV) are available at all shader stages, you can use these instructions in all shader stages.

    Therefore, if you use the following shader model 5.0 instructions in a domain shader, you can successfully pass the compiled domain shader to pShaderBytecode. That is, the call to CreateDomainShader succeeds.

    If you pass a compiled shader to pShaderBytecode that uses any of the following instructions on a device that doesn?t support UAVs at every shader stage (including existing drivers that are not implemented to support UAVs at every shader stage), CreateDomainShader fails. CreateDomainShader also fails if the shader tries to use a UAV slot beyond the set of UAV slots that the hardware supports.

    • dcl_uav_typed
    • dcl_uav_raw
    • dcl_uav_structured
    • ld_raw
    • ld_structured
    • ld_uav_typed
    • store_raw
    • store_structured
    • store_uav_typed
    • sync_uglobal
    • All atomics and immediate atomics (for example, atomic_and and imm_atomic_and)
    +
    + + ff476508 + HRESULT ID3D11Device::CreateDomainShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[In, Optional] ID3D11ClassLinkage* pClassLinkage,[Out, Fast] ID3D11DomainShader** ppDomainShader) + ID3D11Device::CreateDomainShader +
    + + +

    Create a compute shader.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the compute shader. See Direct3D 11 Return Codes for other possible return values.

    + +

    For an example, see How To: Create a Compute Shader and HDRToneMappingCS11 Sample.

    +
    + + ff476503 + HRESULT ID3D11Device::CreateComputeShader([In, Buffer] const void* pShaderBytecode,[In] SIZE_T BytecodeLength,[In, Optional] ID3D11ClassLinkage* pClassLinkage,[Out, Fast] ID3D11ComputeShader** ppComputeShader) + ID3D11Device::CreateComputeShader +
    + + +

    Creates class linkage libraries to enable dynamic shader linkage.

    +
    +

    A reference to a class-linkage interface reference (see ).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    The interface returned in ppLinkage is associated with a shader by passing it as a parameter to one of the create shader methods such as .

    +
    + + ff476502 + HRESULT ID3D11Device::CreateClassLinkage([Out, Fast] ID3D11ClassLinkage** ppLinkage) + ID3D11Device::CreateClassLinkage +
    + + +

    Create a blend-state object that encapsules blend state for the output-merger stage.

    +
    +

    Pointer to a blend-state description (see ).

    +

    Address of a reference to the blend-state object created (see ).

    +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the blend-state object. See Direct3D 11 Return Codes for other possible return values.

    + +

    An application can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.

    Windows?Phone?8: This API is supported.

    +
    + + ff476500 + HRESULT ID3D11Device::CreateBlendState([In] const D3D11_BLEND_DESC* pBlendStateDesc,[Out, Fast] ID3D11BlendState** ppBlendState) + ID3D11Device::CreateBlendState +
    + + +

    Create a depth-stencil state object that encapsulates depth-stencil test information for the output-merger stage.

    +
    +

    Pointer to a depth-stencil state description (see ).

    +

    Address of a reference to the depth-stencil state object created (see ).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    4096 unique depth-stencil state objects can be created on a device at a time.

    If an application attempts to create a depth-stencil-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique depth-stencil state objects will stay the same.

    +
    + + ff476506 + HRESULT ID3D11Device::CreateDepthStencilState([In] const D3D11_DEPTH_STENCIL_DESC* pDepthStencilDesc,[Out, Fast] ID3D11DepthStencilState** ppDepthStencilState) + ID3D11Device::CreateDepthStencilState +
    + + +

    Create a rasterizer state object that tells the rasterizer stage how to behave.

    +
    +

    Pointer to a rasterizer state description (see ).

    +

    Address of a reference to the rasterizer state object created (see ).

    +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the compute shader. See Direct3D 11 Return Codes for other possible return values.

    + +

    4096 unique rasterizer state objects can be created on a device at a time.

    If an application attempts to create a rasterizer-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique rasterizer state objects will stay the same.

    +
    + + ff476516 + HRESULT ID3D11Device::CreateRasterizerState([In] const D3D11_RASTERIZER_DESC* pRasterizerDesc,[Out, Fast] ID3D11RasterizerState** ppRasterizerState) + ID3D11Device::CreateRasterizerState +
    + + +

    Create a sampler-state object that encapsulates sampling information for a texture.

    +
    +

    Pointer to a sampler state description (see ).

    +

    Address of a reference to the sampler state object created (see ).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    4096 unique sampler state objects can be created on a device at a time.

    If an application attempts to create a sampler-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique sampler state objects will stay the same.

    +
    + + ff476518 + HRESULT ID3D11Device::CreateSamplerState([In] const D3D11_SAMPLER_DESC* pSamplerDesc,[Out, Fast] ID3D11SamplerState** ppSamplerState) + ID3D11Device::CreateSamplerState +
    + + +

    This interface encapsulates methods for querying information from the GPU.

    +
    +

    Pointer to a query description (see ).

    +

    Address of a reference to the query object created (see ).

    +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.

    + + ff476515 + HRESULT ID3D11Device::CreateQuery([In] const D3D11_QUERY_DESC* pQueryDesc,[Out, Fast] ID3D11Query** ppQuery) + ID3D11Device::CreateQuery +
    + + +

    Creates a predicate.

    +
    +

    Pointer to a query description where the type of query must be a or (see ).

    +

    Address of a reference to a predicate (see ).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476514 + HRESULT ID3D11Device::CreatePredicate([In] const D3D11_QUERY_DESC* pPredicateDesc,[Out, Fast] ID3D11Predicate** ppPredicate) + ID3D11Device::CreatePredicate +
    + + +

    Create a counter object for measuring GPU performance.

    +
    +

    Pointer to a counter description (see ).

    +

    Address of a reference to a counter (see ).

    +

    If this function succeeds, it will return . If it fails, possible return values are: S_FALSE, E_OUTOFMEMORY, , , or E_INVALIDARG.

    is returned whenever the application requests to create a well-known counter, but the current device does not support it.

    indicates that another device object is currently using the counters, so they cannot be used by this device at the moment.

    E_INVALIDARG is returned whenever an out-of-range well-known or device-dependent counter is requested, or when the simulataneously active counters have been exhausted.

    + + ff476504 + HRESULT ID3D11Device::CreateCounter([In] const D3D11_COUNTER_DESC* pCounterDesc,[Out, Fast] ID3D11Counter** ppCounter) + ID3D11Device::CreateCounter +
    + + +

    Creates a deferred context, which can record command lists.

    +
    +

    Reserved for future use. Pass 0.

    +

    Upon completion of the method, the passed reference to an interface reference is initialized.

    +

    Returns if successful; otherwise, returns one of the following:

    • Returns if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device.
    • Returns if the CreateDeferredContext method cannot be called from the current context. For example, if the device was created with the value, CreateDeferredContext returns .
    • Returns E_INVALIDARG if the ContextFlags parameter is invalid.
    • Returns E_OUTOFMEMORY if the application has exhausted available memory.
    + +

    A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. Using a deferred context, you can record graphics commands into a command list that is encapsulated by the interface. After all scene items are recorded, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core CPU scenarios.

    You can create multiple deferred contexts.

    Note?? If you use the value to create the device that is represented by , the CreateDeferredContext method will fail, and you will not be able to create a deferred context.?

    For more information about deferred contexts, see Immediate and Deferred Rendering.

    Windows?Phone?8: This API is supported.

    +
    + + ff476505 + HRESULT ID3D11Device::CreateDeferredContext([In] unsigned int ContextFlags,[Out, Fast] ID3D11DeviceContext** ppDeferredContext) + ID3D11Device::CreateDeferredContext +
    + + +

    Give a device access to a shared resource created on a different device.

    +
    +

    A resource handle. See remarks.

    +

    The globally unique identifier () for the resource interface. See remarks.

    +

    Address of a reference to the resource we are gaining access to.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    The REFIID, or , of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof() will get the of the interface to a buffer resource.

    The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.

    To share a resource between two Direct3D 11 devices the resource must have been created with the flag, if it was created using the interface. If it was created using a DXGI device interface, then the resource is always shared.

    The REFIID, or , of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof() will get the of the interface to a buffer resource.

    When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the interface and then calling GetSharedHandle.

     * pOtherResource(null);	
    +            hr = pOtherDeviceResource->QueryInterface( __uuidof(), (void**)&pOtherResource );	
    +            HANDLE sharedHandle;	
    +            pOtherResource->GetSharedHandle(&sharedHandle); 

    The only resources that can be shared are 2D non-mipmapped textures.

    To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using the pSharedHandle argument of CreateTexture. The shared Direct3D 9 handle is then passed to OpenSharedResource in the hResource argument.

    The following code illustrates the method calls involved.

     sharedHandle = null; // must be set to null to create, can use a valid handle here to open in D3D9 	
    +            pDevice9->CreateTexture(..., pTex2D_9, &sharedHandle); 	
    +            ... 	
    +            pDevice11->OpenSharedResource(sharedHandle, __uuidof(), (void**)(&tempResource11)); 	
    +            tempResource11->QueryInterface(__uuidof(), (void**)(&pTex2D_11)); 	
    +            tempResource11->Release(); 	
    +            // now use pTex2D_11 with pDevice11    

    Textures being shared from D3D9 to D3D11 have the following restrictions.

    • Textures must be 2D
    • Only 1 mip level is allowed
    • Texture must have default usage
    • Texture must be write only
    • MSAA textures are not allowed
    • Bind flags must have SHADER_RESOURCE and RENDER_TARGET set
    • Only R10G10B10A2_UNORM, R16G16B16A16_FLOAT and R8G8B8A8_UNORM formats are allowed

    If a shared texture is updated on one device must be called on that device.

    +
    + + ff476531 + HRESULT ID3D11Device::OpenSharedResource([In] void* hResource,[In] const GUID& ReturnedInterface,[Out, Optional] void** ppResource) + ID3D11Device::OpenSharedResource +
    + + +

    Get the support of a given format on the installed video device.

    +
    +

    A enumeration that describes a format for which to check for support.

    +

    A bitfield of enumeration values describing how the specified format is supported on the installed device. The values are ORed together.

    + + ff476498 + HRESULT ID3D11Device::CheckFormatSupport([In] DXGI_FORMAT Format,[Out] D3D11_FORMAT_SUPPORT* pFormatSupport) + ID3D11Device::CheckFormatSupport +
    + + +

    Get the number of quality levels available during multisampling.

    +
    +

    The texture format. See .

    +

    The number of samples during multisampling.

    +

    Number of quality levels supported by the adapter. See remarks.

    + +

    When multisampling a texture, the number of quality levels available for an adapter is dependent on the texture format used and the number of samples requested. The maximum number of quality levels is defined by in D3D11.h. If this method returns 0, the format and sample count combination is not supported for the installed adapter.

    Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.

    Note that FEATURE_LEVEL_10_1 devices are required to support 4x MSAA for all render targets except R32G32B32A32 and R32G32B32. FEATURE_LEVEL_11_0 devices are required to support 4x MSAA for all render target formats, and 8x MSAA for all render target formats except R32G32B32A32 formats.

    +
    + + ff476499 + HRESULT ID3D11Device::CheckMultisampleQualityLevels([In] DXGI_FORMAT Format,[In] unsigned int SampleCount,[Out] unsigned int* pNumQualityLevels) + ID3D11Device::CheckMultisampleQualityLevels +
    + + +

    Get a counter's information.

    +
    + + ff476496 + void ID3D11Device::CheckCounterInfo([Out] D3D11_COUNTER_INFO* pCounterInfo) + ID3D11Device::CheckCounterInfo +
    + + +

    Get the type, name, units of measure, and a description of an existing counter.

    +
    +

    Pointer to a counter description (see ). Specifies which counter information is to be retrieved about.

    +

    Pointer to the data type of a counter (see ). Specifies the data type of the counter being retrieved.

    +

    Pointer to the number of hardware counters that are needed for this counter type to be created. All instances of the same counter type use the same hardware counters.

    +

    String to be filled with a brief name for the counter. May be null if the application is not interested in the name of the counter.

    +

    Length of the string returned to szName. Can be null.

    +

    Name of the units a counter measures, provided the memory the reference points to has enough room to hold the string. Can be null. The returned string will always be in English.

    +

    Length of the string returned to szUnits. Can be null.

    +

    A description of the counter, provided the memory the reference points to has enough room to hold the string. Can be null. The returned string will always be in English.

    +

    Length of the string returned to szDescription. Can be null.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    Length parameters can be null, which indicates the application is not interested in the length nor the corresponding string value. When a length parameter is non-null and the corresponding string is null, the input value of the length parameter is ignored, and the length of the corresponding string (including terminating null) will be returned through the length parameter. When length and the corresponding parameter are both non-null, the input value of length is checked to ensure there is enough room, and then the length of the string (including terminating null character) is passed out through the length parameter.

    Windows?Phone?8: This API is supported.

    +
    + + ff476495 + HRESULT ID3D11Device::CheckCounter([In] const D3D11_COUNTER_DESC* pDesc,[Out] D3D11_COUNTER_TYPE* pType,[Out] unsigned int* pActiveCounters,[Out, Buffer, Optional] char* szName,[InOut, Optional] unsigned int* pNameLength,[Out, Buffer, Optional] char* szUnits,[InOut, Optional] unsigned int* pUnitsLength,[Out, Buffer, Optional] char* szDescription,[InOut, Optional] unsigned int* pDescriptionLength) + ID3D11Device::CheckCounter +
    + + +

    Gets information about the features that are supported by the current graphics driver.

    +
    +

    A member of the enumerated type that describes which feature to query for support.

    +

    Upon completion of the method, the passed structure is filled with data that describes the feature support.

    +

    The size of the structure passed to the pFeatureSupportData parameter.

    +

    Returns if successful; otherwise, returns E_INVALIDARG if an unsupported data type is passed to the pFeatureSupportData parameter or a size mismatch is detected for the FeatureSupportDataSize parameter.

    + +

    To query for multi-threading support, pass the value to the Feature parameter, pass the structure to the pFeatureSupportData parameter, and pass the size of the structure to the FeatureSupportDataSize parameter.

    Calling CheckFeatureSupport with Feature set to causes the method to return the same information that would be returned by .

    +
    + + ff476497 + HRESULT ID3D11Device::CheckFeatureSupport([In] D3D11_FEATURE Feature,[Out, Buffer] void* pFeatureSupportData,[In] unsigned int FeatureSupportDataSize) + ID3D11Device::CheckFeatureSupport +
    + + +

    Get application-defined data from a device.

    +
    +

    Guid associated with the data.

    +

    A reference to a variable that on input contains the size, in bytes, of the buffer that pData points to, and on output contains the size, in bytes, of the amount of data that GetPrivateData retrieved.

    +

    A reference to a buffer that GetPrivateData fills with data from the device if pDataSize points to a value that specifies a buffer large enough to hold the data.

    +

    This method returns one of the codes described in the topic Direct3D 11 Return Codes.

    + + ff476530 + HRESULT ID3D11Device::GetPrivateData([In] const GUID& guid,[InOut] unsigned int* pDataSize,[Out, Buffer, Optional] void* pData) + ID3D11Device::GetPrivateData +
    + + +

    Set data to a device and associate that data with a guid.

    +
    +

    Guid associated with the data.

    +

    Size of the data.

    +

    Pointer to the data to be stored with this device. If pData is null, DataSize must also be 0, and any data previously associated with the guid will be destroyed.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    The data stored in the device with this method can be retrieved with .

    The data and guid set with this method will typically be application-defined.

    The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "<unnamed>". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the SetPrivateData method and the that is in D3Dcommon.h. For example, to give pContext a friendly name of My name, use the following code:

     static const char c_szName[] = "My name";	
    +            hr = pContext->SetPrivateData( , sizeof( c_szName ) - 1, c_szName );	
    +            
    +
    + + ff476533 + HRESULT ID3D11Device::SetPrivateData([In] const GUID& guid,[In] unsigned int DataSize,[In, Buffer, Optional] const void* pData) + ID3D11Device::SetPrivateData +
    + + +

    Associate an -derived interface with this device child and associate that interface with an application-defined guid.

    +
    +

    Guid associated with the interface.

    +

    Pointer to an -derived interface to be associated with the device child.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476534 + HRESULT ID3D11Device::SetPrivateDataInterface([In] const GUID& guid,[In, Optional] const IUnknown* pData) + ID3D11Device::SetPrivateDataInterface +
    + + +

    Gets the feature level of the hardware device.

    +
    +

    A member of the enumerated type that describes the feature level of the hardware device.

    + +

    Feature levels determine the capabilities of your device.

    +
    + + ff476528 + D3D_FEATURE_LEVEL ID3D11Device::GetFeatureLevel() + ID3D11Device::GetFeatureLevel +
    + + +

    Get the flags used during the call to create the device with .

    +
    +

    A bitfield containing the flags used to create the device. See .

    + + ff476525 + unsigned int ID3D11Device::GetCreationFlags() + ID3D11Device::GetCreationFlags +
    + + +

    Get the reason why the device was removed.

    +
    +

    Possible return values include:

    For more detail on these return codes, see DXGI_ERROR.

    + + ff476526 + HRESULT ID3D11Device::GetDeviceRemovedReason() + ID3D11Device::GetDeviceRemovedReason +
    + + +

    Gets an immediate context, which can play back command lists.

    +
    +

    Upon completion of the method, the passed reference to an interface reference is initialized.

    + +

    The GetImmediateContext method returns an object that represents an immediate context which is used to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.

    The GetImmediateContext method increments the reference count of the immediate context by one. Therefore, you must call Release on the returned interface reference when you are done with it to avoid a memory leak.

    +
    + + ff476529 + void ID3D11Device::GetImmediateContext([Out] ID3D11DeviceContext** ppImmediateContext) + ID3D11Device::GetImmediateContext +
    + + +

    Get the exception-mode flags.

    +
    +

    A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in D3D11_RAISE_FLAG. A default value of 0 means there are no flags.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    Set an exception-mode flag to elevate an error condition to a non-continuable exception.

    Whenever an error occurs, a Direct3D device enters the DEVICEREMOVED state and if the appropriate exception flag has been set, an exception is raised. A raised exception is designed to terminate an application. Before termination, the last chance an application has to persist data is by using an UnhandledExceptionFilter (see Structured Exception Handling). In general, UnhandledExceptionFilters are leveraged to try to persist data when an application is crashing (to disk, for example). Any code that executes during an UnhandledExceptionFilter is not guaranteed to reliably execute (due to possible process corruption). Any data that the UnhandledExceptionFilter manages to persist, before the UnhandledExceptionFilter crashes again, should be treated as suspect, and therefore inspected by a new, non-corrupted process to see if it is usable.

    +
    + + ff476532 + HRESULT ID3D11Device::SetExceptionMode([In] unsigned int RaiseFlags) + ID3D11Device::SetExceptionMode +
    + + +

    Get the exception-mode flags.

    +
    +

    A value that contains one or more exception flags; each flag specifies a condition which will cause an exception to be raised. The flags are listed in D3D11_RAISE_FLAG. A default value of 0 means there are no flags.

    + +

    An exception-mode flag is used to elevate an error condition to a non-continuable exception.

    +
    + + ff476527 + unsigned int ID3D11Device::GetExceptionMode() + ID3D11Device::GetExceptionMode +
    + + +

    The device interface represents a virtual adapter; it is used to create resources. adds new methods to those in .

    +
    + + hh404575 + ID3D11Device1 + ID3D11Device1 +
    + + + Creates a context state object that holds all Microsoft Direct3D state and some Direct3D behavior. + + The type of the emulated interface. This value specifies the behavior of the device when the context state object is active. Valid values are , , , and . See Remarks. + A combination of values that are combined by using a bitwise OR operation. The resulting value specifies how to create the context state object. The flag is currently the only defined flag. If the original device was created with , you must create all context state objects from that device with the flag. The context state object that CreateDeviceContextState creates inherits the threading model of its associated device context. By default the context state object is rent-threaded, so that an application synchronizes access to the device context, typically by use of critical sections. In contrast, the context state object is free-threaded if you used the ID3D10Multithread interface to turn on thread protection for the device context. If you set the single-threaded flag for both the context state object and the device, you guarantee that you will call the whole set of context methods and device methods only from one thread. You therefore do not need to use critical sections to synchronize access to the device context, and the runtime can avoid working with those processor-intensive critical sections. + A reference to an array of values. The array determines the order of feature levels for which creation is attempted. To get the greatest feature level available, set pFeatureLevels to null, so that CreateDeviceContextState uses the following array of feature level values: { , , , , , , ,}; + A reference to a variable that receives a value from the pFeatureLevels array. This is the first array value with which CreateDeviceContextState succeeded in creating the context state object. If the call to CreateDeviceContextState fails, the variable pointed to by pChosenFeatureLevel is set to zero. + A object that represents the state of a Direct3D device. + + The REFIID value of the emulated interface is a obtained by use of the __uuidof operator. For example, __uuidof() gets the of the interface to a Microsoft Direct3D?11 device.Call the method to activate the context state object. When the context state object is active, the device behaviors that are associated with both the context state object's feature level and its compatible interface are activated on the Direct3D device until the next call to SwapDeviceContextState.When a context state object is active, the runtime disables certain methods on the device and context interfaces. For example, a context state object that is created with __uuidof() will cause the runtime to turn off most of the Microsoft Direct3D?10 device interfaces, and a context state object that is created with __uuidof() or __uuidof() will cause the runtime to turn off most of the methods. + This behavior ensures that a user of either emulated interface cannot set device state that the other emulated interface is unable to express. This restriction helps guarantee that the emulated interface accurately reflects the full state of the pipeline and that the emulated interface will not operate contrary to its original interface definition.For example, suppose the tessellation stage is made active through the interface + when you create the device through or D3D11CreateDeviceAndSwapChain, instead of through the Direct3D?10 equivalents. Because the Direct3D?11 context is active, a Direct3D?10 interface is inactive when you first retrieve it via QueryInterface. This means that you cannot immediately pass a Direct3D?10 interface that you retrieved from a Direct3D?11 device to a function. You must first call SwapDeviceContextState to activate a Direct3D?10-compatible context state object.The following table shows the methods that are active and inactive for each emulated interface.Emulated interface Active device or immediate context interfaces Inactive device or immediate context interfaces or + + + + + + + + ID3D10Multithread + or + + + + + + + ID3D10Multithread + + (As published by the immediate context. The Direct3D?10 or Microsoft Direct3D?10.1 emulated interface has no effect on deferred contexts.)?The following table shows the immediate context methods that the runtime disables when the indicated context state objects are active.Methods of when __uuidof() or __uuidof() is active Methods of when __uuidof() is active Begin + ClearDepthStencilView + ClearDepthStencilView + ClearRenderTargetView + ClearRenderTargetView + ClearState + ClearState + ClearUnorderedAccessViewUint + ClearUnorderedAccessViewFloat + CopyResource + CopyResource + CopyStructureCount + CopySubresourceRegion + CopySubresourceRegion + CSGetConstantBuffers + CSGetSamplers + CSGetShader + CSGetShaderResources + CSGetUnorderedAccessViews + CSSetConstantBuffers + CSSetSamplers + CSSetShader + CSSetShaderResources + CSSetUnorderedAccessViews + Dispatch + DispatchIndirect + CreateBlendState + Draw + Draw + DrawAuto + DrawAuto + DrawIndexed + DrawIndexed + DrawIndexedInstanced + DrawIndexedInstanced + DrawIndexedInstancedIndirect + DrawInstanced + DrawInstanced + DrawInstancedIndirect + DSGetConstantBuffers + DSGetSamplers + DSGetShader + DSGetShaderResources + DSSetConstantBuffers + DSSetSamplers + DSSetShader + DSSetShaderResources + End + ExecuteCommandList + FinishCommandList + Flush + Flush + GenerateMips + GenerateMips + GetData + GetPredication + GetPredication + GetResourceMinLOD + GetType + GetTextFilterSize + GSGetConstantBuffers + GSGetConstantBuffers + GSGetSamplers + GSGetSamplers + GSGetShader + GSGetShader + GSGetShaderResources + GSGetShaderResources + GSSetConstantBuffers + GSSetConstantBuffers + GSSetSamplers + GSSetSamplers + GSSetShader + GSSetShader + GSSetShaderResources + GSSetShaderResources + HSGetConstantBuffers + HSGetSamplers + HSGetShader + HSGetShaderResources + HSSetConstantBuffers + HSSetSamplers + HSSetShader + HSSetShaderResources + IAGetIndexBuffer + IAGetIndexBuffer + IAGetInputLayout + IAGetInputLayout + IAGetPrimitiveTopology + IAGetPrimitiveTopology + IAGetVertexBuffers + IASetIndexBuffer + IASetInputLayout + IASetPrimitiveTopology + IASetVertexBuffers + OMGetBlendState + OMGetBlendState + OMGetDepthStencilState + OMGetDepthStencilState + OMGetRenderTargets + OMGetRenderTargets + OMGetRenderTargetsAndUnorderedAccessViews + OMSetBlendState + OMSetBlendState + OMSetDepthStencilState + OMSetDepthStencilState + OMSetRenderTargets + OMSetRenderTargets + OMSetRenderTargetsAndUnorderedAccessViews + PSGetConstantBuffers + PSGetConstantBuffers + PSGetSamplers + PSGetSamplers + PSGetShader + PSGetShader + PSGetShaderResources + PSGetShaderResources + PSSetConstantBuffers + PSSetConstantBuffers + PSSetSamplers + PSSetSamplers + PSSetShader + PSSetShader + PSSetShaderResources + PSSetShaderResources + ResolveSubresource + ResolveSubresource + RSGetScissorRects + RSGetScissorRects + RSGetState + RSGetState + RSGetViewports + RSGetViewports + RSSetScissorRects + RSSetScissorRects + RSSetState + RSSetState + RSSetViewports + RSSetViewports + SetPredication + SetPredication + SetResourceMinLOD + SetTextFilterSize + SOGetTargets + SOGetTargets + SOSetTargets + SOSetTargets + UpdateSubresource + UpdateSubresource + VSGetConstantBuffers + VSGetConstantBuffers + VSGetSamplers + VSGetSamplers + VSGetShader + VSGetShader + VSGetShaderResources + VSGetShaderResources + VSSetConstantBuffers + VSSetConstantBuffers + VSSetSamplers + VSSetSamplers + VSSetShader + VSSetShader + VSSetShaderResources + VSSetShaderResources ?The following table shows the immediate context methods that the runtime does not disable when the indicated context state objects are active.Methods of when __uuidof() or __uuidof() is active Methods of when __uuidof() is active GetCreationFlags + GetPrivateData + GetContextFlags + Map + Unmap ?The following table shows the interface methods that the runtime does not disable because they are not immediate context methods.Methods of CheckCounter + CheckCounterInfo + Create*, like CreateQuery + GetDeviceRemovedReason + GetExceptionMode + OpenSharedResource + SetExceptionMode + SetPrivateData + SetPrivateDataInterface ? + + HRESULT ID3D11Device1::CreateDeviceContextState([In] D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG Flags,[In, Buffer] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In] unsigned int SDKVersion,[In] const GUID& EmulatedInterface,[Out, Optional] D3D_FEATURE_LEVEL* pChosenFeatureLevel,[Out, Fast] ID3DDeviceContextState** ppContextState) + + + + Gives a device access to a shared resource that is referenced by name and that was created on a different device. You must have previously created the resource as shared and specified that it uses NT handles (that is, you set the flag). + + Type of the resource + The resource handle. + An instance of T + + The behavior of OpenSharedResource1 is similar to the behavior of the method; each call to OpenSharedResource1 to access a resource creates a new resource object. In other words, if you call OpenSharedResource1 twice and pass the same resource handle to hResource, you receive two resource objects with different references.To share a resource between two devicesCreate the resource as shared and specify that it uses NT handles, by setting the flag. Obtain the REFIID, or , of the interface to the resource by using the __uuidof() macro. For example, __uuidof() retrieves the of the interface to a 2D texture. Query the resource for the interface. Call the method to obtain the unique handle to the resource. + + HRESULT ID3D11Device1::OpenSharedResource1([In] void* hResource,[In] const GUID& returnedInterface,[Out] void** ppResource) + + + + Gives a device access to a shared resource that is referenced by name and that was created on a different device. You must have previously created the resource as shared and specified that it uses NT handles (that is, you set the flag). + + Type of the resource + Name of the resource to open for sharing. + The requested access rights to the resource. + An instance of T. + + The behavior of OpenSharedResourceByName is similar to the behavior of the method; each call to OpenSharedResourceByName to access a resource creates a new resource object. In other words, if you call OpenSharedResourceByName twice and pass the same resource name to lpName, you receive two resource objects with different references.To share a resource between two devicesCreate the resource as shared and specify that it uses NT handles, by setting the flag. Obtain the REFIID, or , of the interface to the resource by using the __uuidof() macro. For example, __uuidof() retrieves the of the interface to a 2D texture. Query the resource for the interface. Call the method to obtain the unique handle to the resource. In this call, you must pass a name for the resource if you want to subsequently call OpenSharedResourceByName to access the resource by name. + + HRESULT ID3D11Device1::OpenSharedResourceByName([In] const wchar_t* lpName,[In] unsigned int dwDesiredAccess,[In] const GUID& returnedInterface,[Out] void** ppResource) + + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets an immediate context, which can play back command lists.

    +
    + +

    GetImmediateContext1 returns an object that represents an immediate context. You can use this immediate context to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.

    GetImmediateContext1 increments the reference count of the immediate context by one. So, call Release on the returned interface reference when you are done with it to avoid a memory leak.

    +
    + + hh404589 + GetImmediateContext1 + GetImmediateContext1 + void ID3D11Device1::GetImmediateContext1([Out] ID3D11DeviceContext1** ppImmediateContext) +
    + + +

    Gets an immediate context, which can play back command lists.

    +
    +

    Upon completion of the method, the passed reference to an interface reference is initialized.

    + +

    GetImmediateContext1 returns an object that represents an immediate context. You can use this immediate context to perform rendering that you want immediately submitted to a device. For most applications, an immediate context is the primary object that is used to draw your scene.

    GetImmediateContext1 increments the reference count of the immediate context by one. So, call Release on the returned interface reference when you are done with it to avoid a memory leak.

    +
    + + hh404589 + void ID3D11Device1::GetImmediateContext1([Out] ID3D11DeviceContext1** ppImmediateContext) + ID3D11Device1::GetImmediateContext1 +
    + + +

    Creates a deferred context, which can record command lists.

    +
    +

    Reserved for future use. Pass 0.

    +

    Upon completion of the method, the passed reference to an interface reference is initialized.

    +

    Returns if successful; otherwise, returns one of the following:

    • Returns if the graphics adapter has been physically removed from the computer or a driver upgrade for the graphics adapter has occurred. If this error occurs, you should destroy and re-create the device.
    • Returns if the CreateDeferredContext1 method cannot be called from the current context. For example, if the device was created with the value, CreateDeferredContext1 returns .
    • Returns E_INVALIDARG if the ContextFlags parameter is invalid.
    • Returns E_OUTOFMEMORY if the application has exhausted available memory.
    + +

    A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. By using a deferred context, you can record graphics commands into a command list that is encapsulated by the interface. After you record all scene items, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core CPU scenarios.

    You can create multiple deferred contexts.

    Note?? If you use the value to create the device that is represented by , the CreateDeferredContext1 method will fail, and you will not be able to create a deferred context.?

    For more information about deferred contexts, see Immediate and Deferred Rendering.

    Windows?Phone?8: This API is supported.

    +
    + + hh404580 + HRESULT ID3D11Device1::CreateDeferredContext1([In] unsigned int ContextFlags,[Out, Fast] ID3D11DeviceContext1** ppDeferredContext) + ID3D11Device1::CreateDeferredContext1 +
    + + +

    Creates a blend-state object that encapsulates blend state for the output-merger stage and allows the configuration of logic operations.

    +
    + No documentation. + No documentation. +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the blend-state object. See Direct3D 11 Return Codes for other possible return values.

    + +

    The logical operations (those that enable bitwise logical operations between pixel shader output and render target contents, refer to ) are only available on certain feature levels; call CheckFeatureSupport with set, to ensure support by checking the boolean field OutputMergerLogicOp of .

    An app can create up to 4096 unique blend-state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.

    +
    + + hh404577 + HRESULT ID3D11Device1::CreateBlendState1([In] const D3D11_BLEND_DESC1* pBlendStateDesc,[Out, Fast] ID3D11BlendState1** ppBlendState) + ID3D11Device1::CreateBlendState1 +
    + + +

    Creates a rasterizer state object that informs the rasterizer stage how to behave and forces the sample count while UAV rendering or rasterizing.

    +
    + No documentation. + No documentation. +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the rasterizer state object. See Direct3D 11 Return Codes for other possible return values.

    + +

    An app can create up to 4096 unique rasterizer state objects. For each object created, the runtime checks to see if a previous object has the same state. If such a previous object exists, the runtime will return a reference to previous instance instead of creating a duplicate object.

    +
    + + hh404586 + HRESULT ID3D11Device1::CreateRasterizerState1([In] const D3D11_RASTERIZER_DESC1* pRasterizerDesc,[Out, Fast] ID3D11RasterizerState1** ppRasterizerState) + ID3D11Device1::CreateRasterizerState1 +
    + + +

    Creates a context state object that holds all Microsoft Direct3D state and some Direct3D behavior.

    +
    +

    A combination of values that are combined by using a bitwise OR operation. The resulting value specifies how to create the context state object. The flag is currently the only defined flag. If the original device was created with , you must create all context state objects from that device with the flag.

    If you set the single-threaded flag for both the context state object and the device, you guarantee that you will call the whole set of context methods and device methods only from one thread. You therefore do not need to use critical sections to synchronize access to the device context, and the runtime can avoid working with those processor-intensive critical sections.

    +

    A reference to an array of values. The array can contain elements from the following list and determines the order of feature levels for which creation is attempted. Unlike , you can't set pFeatureLevels to null because there is no default feature level array.

    { , , , , , , ,}; 
    +

    The number of elements in pFeatureLevels. Unlike , you must set FeatureLevels to greater than 0 because you can't set pFeatureLevels to null.

    +

    The SDK version. You must set this parameter to .

    +

    The globally unique identifier () for the emulated interface. This value specifies the behavior of the device when the context state object is active. Valid values are obtained by using the __uuidof operator on the ID3D10Device, ID3D10Device1, , and interfaces. See Remarks.

    +

    A reference to a variable that receives a value from the pFeatureLevels array. This is the first array value with which CreateDeviceContextState succeeded in creating the context state object. If the call to CreateDeviceContextState fails, the variable pointed to by pChosenFeatureLevel is set to zero.

    +

    The address of a reference to an object that represents the state of a Direct3D device.

    +

    This method returns one of the Direct3D 11 Return Codes.

    + +

    The REFIID value of the emulated interface is a obtained by use of the __uuidof operator. For example, __uuidof() gets the of the interface to a Microsoft Direct3D?11 device.

    Call the method to activate the context state object. When the context state object is active, the device behaviors that are associated with both the context state object's feature level and its compatible interface are activated on the Direct3D device until the next call to SwapDeviceContextState.

    When a context state object is active, the runtime disables certain methods on the device and context interfaces. For example, a context state object that is created with __uuidof() will cause the runtime to turn off most of the Microsoft Direct3D?10 device interfaces, and a context state object that is created with __uuidof(ID3D10Device1) or __uuidof(ID3D10Device) will cause the runtime to turn off most of the methods. This behavior ensures that a user of either emulated interface cannot set device state that the other emulated interface is unable to express. This restriction helps guarantee that the ID3D10Device1 emulated interface accurately reflects the full state of the pipeline and that the emulated interface will not operate contrary to its original interface definition.

    For example, suppose the tessellation stage is made active through the interface when you create the device through or D3D11CreateDeviceAndSwapChain, instead of through the Direct3D?10 equivalents. Because the Direct3D?11 context is active, a Direct3D?10 interface is inactive when you first retrieve it via QueryInterface. This means that you cannot immediately pass a Direct3D?10 interface that you retrieved from a Direct3D?11 device to a function. You must first call SwapDeviceContextState to activate a Direct3D?10-compatible context state object.

    The following table shows the methods that are active and inactive for each emulated interface.

    Emulated interface Active device or immediate context interfaces Inactive device or immediate context interfaces

    or

    +

    +

    ID3D10Device

    ID3D10Device1 or

    ID3D10Device

    ID3D10Device

    ID3D10Device1

    +

    (As published by the immediate context. The Direct3D?10 or Microsoft Direct3D?10.1 emulated interface has no effect on deferred contexts.)

    ?

    The following table shows the immediate context methods that the runtime disables when the indicated context state objects are active.

    Methods of when __uuidof(ID3D10Device1) or __uuidof(ID3D10Device) is active Methods of ID3D10Device when __uuidof() is active

    ClearDepthStencilView

    ClearDepthStencilView

    ClearRenderTargetView

    ClearRenderTargetView

    ClearState

    ClearState

    ClearUnorderedAccessViewUint

    ClearUnorderedAccessViewFloat

    CopyResource

    CopyResource

    CopyStructureCount

    CopySubresourceRegion

    CopySubresourceRegion

    CSGetConstantBuffers

    CSGetSamplers

    CSGetShader

    CSGetShaderResources

    CSGetUnorderedAccessViews

    CSSetConstantBuffers

    CSSetSamplers

    CSSetShader

    CSSetShaderResources

    CSSetUnorderedAccessViews

    Dispatch

    DispatchIndirect

    CreateBlendState

    Draw

    Draw

    DrawAuto

    DrawAuto

    DrawIndexed

    DrawIndexed

    DrawIndexedInstanced

    DrawIndexedInstanced

    DrawIndexedInstancedIndirect

    DrawInstanced

    DrawInstanced

    DrawInstancedIndirect

    DSGetConstantBuffers

    DSGetSamplers

    DSGetShader

    DSGetShaderResources

    DSSetConstantBuffers

    DSSetSamplers

    DSSetShader

    DSSetShaderResources

    ExecuteCommandList

    FinishCommandList

    Flush

    Flush

    GenerateMips

    GenerateMips

    GetPredication

    GetPredication

    GetResourceMinLOD

    GetType

    GetTextFilterSize

    GSGetConstantBuffers

    GSGetConstantBuffers

    GSGetSamplers

    GSGetSamplers

    GSGetShader

    GSGetShader

    GSGetShaderResources

    GSGetShaderResources

    GSSetConstantBuffers

    GSSetConstantBuffers

    GSSetSamplers

    GSSetSamplers

    GSSetShader

    GSSetShader

    GSSetShaderResources

    GSSetShaderResources

    HSGetConstantBuffers

    HSGetSamplers

    HSGetShader

    HSGetShaderResources

    HSSetConstantBuffers

    HSSetSamplers

    HSSetShader

    HSSetShaderResources

    IAGetIndexBuffer

    IAGetIndexBuffer

    IAGetInputLayout

    IAGetInputLayout

    IAGetPrimitiveTopology

    IAGetPrimitiveTopology

    IAGetVertexBuffers

    IAGetVertexBuffers

    IASetIndexBuffer

    IASetIndexBuffer

    IASetInputLayout

    IASetInputLayout

    IASetPrimitiveTopology

    IASetPrimitiveTopology

    IASetVertexBuffers

    IASetVertexBuffers

    OMGetBlendState

    OMGetBlendState

    OMGetDepthStencilState

    OMGetDepthStencilState

    OMGetRenderTargets

    OMGetRenderTargets

    OMGetRenderTargetsAndUnorderedAccessViews

    OMSetBlendState

    OMSetBlendState

    OMSetDepthStencilState

    OMSetDepthStencilState

    OMSetRenderTargets

    OMSetRenderTargets

    OMSetRenderTargetsAndUnorderedAccessViews

    PSGetConstantBuffers

    PSGetConstantBuffers

    PSGetSamplers

    PSGetSamplers

    PSGetShader

    PSGetShader

    PSGetShaderResources

    PSGetShaderResources

    PSSetConstantBuffers

    PSSetConstantBuffers

    PSSetSamplers

    PSSetSamplers

    PSSetShader

    PSSetShader

    PSSetShaderResources

    PSSetShaderResources

    ResolveSubresource

    ResolveSubresource

    RSGetScissorRects

    RSGetScissorRects

    RSGetState

    RSGetState

    RSGetViewports

    RSGetViewports

    RSSetScissorRects

    RSSetScissorRects

    RSSetState

    RSSetState

    RSSetViewports

    RSSetViewports

    SetPredication

    SetPredication

    SetResourceMinLOD

    SetTextFilterSize

    SOGetTargets

    SOGetTargets

    SOSetTargets

    SOSetTargets

    UpdateSubresource

    UpdateSubresource

    VSGetConstantBuffers

    VSGetConstantBuffers

    VSGetSamplers

    VSGetSamplers

    VSGetShader

    VSGetShader

    VSGetShaderResources

    VSGetShaderResources

    VSSetConstantBuffers

    VSSetConstantBuffers

    VSSetSamplers

    VSSetSamplers

    VSSetShader

    VSSetShader

    VSSetShaderResources

    VSSetShaderResources

    ?

    The following table shows the immediate context methods that the runtime does not disable when the indicated context state objects are active.

    Methods of when __uuidof(ID3D10Device1) or __uuidof(ID3D10Device) is active Methods of ID3D10Device when __uuidof() is active

    Begin

    End

    GetCreationFlags

    GetPrivateData

    GetContextFlags

    GetData

    Map

    Unmap

    ?

    The following table shows the ID3D10Device interface methods that the runtime does not disable because they are not immediate context methods.

    Methods of ID3D10Device

    CheckCounter

    CheckCounterInfo

    Create*, like CreateQuery

    GetDeviceRemovedReason

    GetExceptionMode

    OpenSharedResource

    SetExceptionMode

    SetPrivateData

    SetPrivateDataInterface

    ?

    Windows?Phone?8: This API is supported.

    +
    + + hh404583 + HRESULT ID3D11Device1::CreateDeviceContextState([In] D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG Flags,[In, Buffer] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In] unsigned int SDKVersion,[In] const GUID& EmulatedInterface,[Out, Optional] D3D_FEATURE_LEVEL* pChosenFeatureLevel,[Out, Fast] ID3DDeviceContextState** ppContextState) + ID3D11Device1::CreateDeviceContextState +
    + + +

    Give a device access to a shared resource created on a different device.

    +
    +

    A resource handle. See remarks.

    +

    The globally unique identifier () for the resource interface. See remarks.

    +

    Address of a reference to the resource we are gaining access to.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    The REFIID, or , of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof() will get the of the interface to a buffer resource.

    The unique handle of the resource is obtained differently depending on the type of device that originally created the resource.

    To share a resource between two Direct3D 11 devices the resource must have been created with the flag, if it was created using the interface. If it was created using a DXGI device interface, then the resource is always shared.

    The REFIID, or , of the interface to the resource can be obtained by using the __uuidof() macro. For example, __uuidof() will get the of the interface to a buffer resource.

    When sharing a resource between two Direct3D 10/11 devices the unique handle of the resource can be obtained by querying the resource for the interface and then calling GetSharedHandle.

     * pOtherResource(null);	
    +            hr = pOtherDeviceResource->QueryInterface( __uuidof(), (void**)&pOtherResource );	
    +            HANDLE sharedHandle;	
    +            pOtherResource->GetSharedHandle(&sharedHandle); 

    The only resources that can be shared are 2D non-mipmapped textures.

    To share a resource between a Direct3D 9 device and a Direct3D 11 device the texture must have been created using the pSharedHandle argument of CreateTexture. The shared Direct3D 9 handle is then passed to OpenSharedResource in the hResource argument.

    The following code illustrates the method calls involved.

     sharedHandle = null; // must be set to null to create, can use a valid handle here to open in D3D9 	
    +            pDevice9->CreateTexture(..., pTex2D_9, &sharedHandle); 	
    +            ... 	
    +            pDevice11->OpenSharedResource(sharedHandle, __uuidof(), (void**)(&tempResource11)); 	
    +            tempResource11->QueryInterface(__uuidof(), (void**)(&pTex2D_11)); 	
    +            tempResource11->Release(); 	
    +            // now use pTex2D_11 with pDevice11    

    Textures being shared from D3D9 to D3D11 have the following restrictions.

    • Textures must be 2D
    • Only 1 mip level is allowed
    • Texture must have default usage
    • Texture must be write only
    • MSAA textures are not allowed
    • Bind flags must have SHADER_RESOURCE and RENDER_TARGET set
    • Only R10G10B10A2_UNORM, R16G16B16A16_FLOAT and R8G8B8A8_UNORM formats are allowed

    If a shared texture is updated on one device must be called on that device.

    +
    + + ff476531 + HRESULT ID3D11Device1::OpenSharedResource1([In] void* hResource,[In] const GUID& returnedInterface,[Out] void** ppResource) + ID3D11Device1::OpenSharedResource1 +
    + + +

    Gives a device access to a shared resource that is referenced by name and that was created on a different device. You must have previously created the resource as shared and specified that it uses NT handles (that is, you set the flag).

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    This method returns one of the Direct3D 11 return codes. This method also returns E_ACCESSDENIED if the permissions to access the resource aren't valid.

    Platform Update for Windows?7:??On Windows?7 or Windows Server?2008?R2 with the Platform Update for Windows?7 installed, OpenSharedResourceByName fails with E_NOTIMPL because NTHANDLES are used. For more info about the Platform Update for Windows?7, see Platform Update for Windows 7.

    + +

    The behavior of OpenSharedResourceByName is similar to the behavior of the method; each call to OpenSharedResourceByName to access a resource creates a new resource object. In other words, if you call OpenSharedResourceByName twice and pass the same resource name to lpName, you receive two resource objects with different references.

    To share a resource between two devices

    1. Create the resource as shared and specify that it uses NT handles, by setting the flag.
    2. Obtain the REFIID, or , of the interface to the resource by using the __uuidof() macro. For example, __uuidof() retrieves the of the interface to a 2D texture.
    3. Query the resource for the interface.
    4. Call the method to obtain the unique handle to the resource. In this call, you must pass a name for the resource if you want to subsequently call OpenSharedResourceByName to access the resource by name.
    +
    + + hh404595 + HRESULT ID3D11Device1::OpenSharedResourceByName([In] const wchar_t* lpName,[In] DXGI_SHARED_RESOURCE_FLAGS dwDesiredAccess,[In] const GUID& returnedInterface,[Out] void** ppResource) + ID3D11Device1::OpenSharedResourceByName +
    + + +

    The device interface represents a virtual adapter; it is used to create resources. adds new methods to those in .

    +
    + + dn280493 + ID3D11Device2 + ID3D11Device2 +
    + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets an immediate context, which can play back command lists.

    +
    + +

    The GetImmediateContext2 method returns an object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene.

    The GetImmediateContext2 method increments the reference count of the immediate context by one. Therefore, you must call Release on the returned interface reference when you are done with it to avoid a memory leak.

    +
    + + dn280496 + GetImmediateContext2 + GetImmediateContext2 + void ID3D11Device2::GetImmediateContext2([Out] ID3D11DeviceContext2** ppImmediateContext) +
    + + +

    Gets an immediate context, which can play back command lists.

    +
    + No documentation. + +

    The GetImmediateContext2 method returns an object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene.

    The GetImmediateContext2 method increments the reference count of the immediate context by one. Therefore, you must call Release on the returned interface reference when you are done with it to avoid a memory leak.

    +
    + + dn280496 + void ID3D11Device2::GetImmediateContext2([Out] ID3D11DeviceContext2** ppImmediateContext) + ID3D11Device2::GetImmediateContext2 +
    + + +

    Creates a deferred context, which can record command lists.

    +
    + No documentation. + No documentation. +

    Returns if successful; otherwise, returns one of the following:

    • Returns if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device.
    • Returns if the CreateDeferredContext2 method can't be called from the current context. For example, if the device was created with the value, CreateDeferredContext2 returns .
    • Returns E_INVALIDARG if the ContextFlags parameter is invalid.
    • Returns E_OUTOFMEMORY if the app has exhausted available memory.
    + +

    A deferred context is a thread-safe context that you can use to record graphics commands on a thread other than the main rendering thread. By using a deferred context, you can record graphics commands into a command list that is encapsulated by the interface. After you record all scene items, you can then submit them to the main render thread for final rendering. In this manner, you can perform rendering tasks concurrently across multiple threads and potentially improve performance in multi-core CPU scenarios.

    You can create multiple deferred contexts.

    Note?? If you use the value to create the device, CreateDeferredContext2 fails with , and you can't create a deferred context.?

    For more information about deferred contexts, see Immediate and Deferred Rendering.

    +
    + + dn280495 + HRESULT ID3D11Device2::CreateDeferredContext2([In] unsigned int ContextFlags,[Out, Fast] ID3D11DeviceContext2** ppDeferredContext) + ID3D11Device2::CreateDeferredContext2 +
    + + +

    Gets info about how a tiled resource is broken into tiles.

    +
    +

    A reference to the tiled resource to get info about.

    +

    A reference to a variable that receives the number of tiles needed to store the entire tiled resource.

    +

    A reference to a structure that GetResourceTiling fills with info about how the tiled resource's mipmaps are packed.

    +

    A reference to a structure that GetResourceTiling fills with info about the tile shape. This is info about how pixels fit in the tiles, independent of tiled resource's dimensions, not including packed mipmaps. If the entire tiled resource is packed, this parameter is meaningless because the tiled resource has no defined layout for packed mipmaps. In this situation, GetResourceTiling sets the members of to zeros.

    +

    A reference to a variable that contains the number of tiles in the subresource. On input, this is the number of subresources to query tilings for; on output, this is the number that was actually retrieved at pSubresourceTilingsForNonPackedMips (clamped to what's available).

    +

    The number of the first subresource tile to get. GetResourceTiling ignores this parameter if the number that pNumSubresourceTilings points to is 0.

    +

    A reference to a structure that GetResourceTiling fills with info about subresource tiles.

    If subresource tiles are part of packed mipmaps, GetResourceTiling sets the members of to zeros, except the StartTileIndexInOverallResource member, which GetResourceTiling sets to D3D11_PACKED_TILE (0xffffffff). The D3D11_PACKED_TILE constant indicates that the whole structure is meaningless for this situation, and the info that the pPackedMipDesc parameter points to applies.

    + +

    For more info about tiled resources, see Tiled resources.

    +
    + + dn280497 + void ID3D11Device2::GetResourceTiling([In] ID3D11Resource* pTiledResource,[Out, Optional] unsigned int* pNumTilesForEntireResource,[Out, Optional] D3D11_PACKED_MIP_DESC* pPackedMipDesc,[Out, Optional] D3D11_TILE_SHAPE* pStandardTileShapeForNonPackedMips,[InOut] unsigned int* pNumSubresourceTilings,[In] unsigned int FirstSubresourceTilingToGet,[Out, Buffer] D3D11_SUBRESOURCE_TILING* pSubresourceTilingsForNonPackedMips) + ID3D11Device2::GetResourceTiling +
    + + +

    Get the number of quality levels available during multisampling.

    +
    +

    The texture format during multisampling.

    +

    The number of samples during multisampling.

    +

    A combination of D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAGS values that are combined by using a bitwise OR operation. Currently, only is supported.

    +

    A reference to a variable the receives the number of quality levels supported by the adapter. See Remarks.

    + +

    When you multisample a texture, the number of quality levels available for an adapter is dependent on the texture format that you use and the number of samples that you request. The maximum number of quality levels is defined by in D3D11.h. If this method returns 0, the format and sample count combination is not supported for the installed adapter.

    Furthermore, the definition of a quality level is up to each hardware vendor to define, however no facility is provided by Direct3D to help discover this information.

    Note that FEATURE_LEVEL_10_1 devices are required to support 4x MSAA for all render targets except R32G32B32A32 and R32G32B32. FEATURE_LEVEL_11_0 devices are required to support 4x MSAA for all render target formats, and 8x MSAA for all render target formats except R32G32B32A32 formats.

    +
    + + dn280494 + HRESULT ID3D11Device2::CheckMultisampleQualityLevels1([In] DXGI_FORMAT Format,[In] unsigned int SampleCount,[In] D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG Flags,[Out] unsigned int* pNumQualityLevels) + ID3D11Device2::CheckMultisampleQualityLevels1 +
    + + +

    The device interface represents a virtual adapter; it is used to create resources. adds new methods to those in .

    +
    + + dn899218 + ID3D11Device3 + ID3D11Device3 +
    + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets an immediate context, which can play back command lists.

    +
    + +

    The GetImmediateContext3 method outputs an object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene.

    The GetImmediateContext3 method increments the reference count of the immediate context by one. Therefore, you must call Release on the returned interface reference when you are done with it to avoid a memory leak.

    +
    + + dn912872 + GetImmediateContext3 + GetImmediateContext3 + void ID3D11Device3::GetImmediateContext3([Out] ID3D11DeviceContext3** ppImmediateContext) +
    + + +

    Creates a 2D texture.

    +
    + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return code is . See Direct3D 11 Return Codes for failing error codes.

    + +

    CreateTexture2D1 creates a 2D texture resource, which can contain a number of 2D subresources. The number of subresources is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.

    All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of structures pointed to by pInitialData, or they can use one of the D3DX texture functions such as D3DX11CreateTextureFromFile.

    For a 32 x 32 texture with a full mipmap chain, the pInitialData array has the following 6 elements: +

    • pInitialData[0] = 32x32
    • pInitialData[1] = 16x16
    • pInitialData[2] = 8x8
    • pInitialData[3] = 4x4 +
    • pInitialData[4] = 2x2 +
    • pInitialData[5] = 1x1 +
    +
    + + dn899229 + HRESULT ID3D11Device3::CreateTexture2D1([In] const D3D11_TEXTURE2D_DESC1* pDesc1,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture2D1** ppTexture2D) + ID3D11Device3::CreateTexture2D1 +
    + + +

    Creates a 3D texture.

    +
    + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return code is . See Direct3D 11 Return Codes for failing error codes.

    + +

    CreateTexture3D1 creates a 3D texture resource, which can contain a number of 3D subresources. The number of textures is specified in the texture description. All textures in a resource must have the same format, size, and number of mipmap levels.

    All resources are made up of one or more subresources. To load data into the texture, applications can supply the data initially as an array of structures pointed to by pInitialData, or they can use one of the D3DX texture functions such as D3DX11CreateTextureFromFile.

    Each element of pInitialData provides all of the slices that are defined for a given miplevel. For example, for a 32 x 32 x 4 volume texture with a full mipmap chain, the array has the following 6 elements:

    • pInitialData[0] = 32x32 with 4 slices
    • pInitialData[1] = 16x16 with 2 slices
    • pInitialData[2] = 8x8 with 1 slice
    • pInitialData[3] = 4x4 + with 1 slice
    • pInitialData[4] = 2x2 + with 1 slice
    • pInitialData[5] = 1x1 + with 1 slice
    +
    + + dn899231 + HRESULT ID3D11Device3::CreateTexture3D1([In] const D3D11_TEXTURE3D_DESC1* pDesc1,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture3D1** ppTexture3D) + ID3D11Device3::CreateTexture3D1 +
    + + +

    Creates a rasterizer state object that informs the rasterizer stage how to behave and forces the sample count while UAV rendering or rasterizing.

    +
    + No documentation. + No documentation. +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the rasterizer state object. See Direct3D 11 Return Codes for other possible return values.

    + + dn899221 + HRESULT ID3D11Device3::CreateRasterizerState2([In] const D3D11_RASTERIZER_DESC2* pRasterizerDesc,[Out, Fast] ID3D11RasterizerState2** ppRasterizerState) + ID3D11Device3::CreateRasterizerState2 +
    + + +

    Creates a shader-resource view for accessing data in a resource.

    +
    +

    Pointer to the resource that will serve as input to a shader. This resource must have been created with the flag.

    +

    A reference to a structure that describes a shader-resource view. Set this parameter to null to create a view that accesses the entire resource (using the format the resource was created with).

    +

    A reference to a memory block that receives a reference to a interface for the created shader-resource view. Set this parameter to null to validate the other input parameters (the method will return S_FALSE if the other input parameters pass validation).

    +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the shader-resource view. See Direct3D 11 Return Codes for other possible return values.

    + + dn899227 + HRESULT ID3D11Device3::CreateShaderResourceView1([In] ID3D11Resource* pResource,[In, Optional] const D3D11_SHADER_RESOURCE_VIEW_DESC1* pDesc1,[Out, Fast] ID3D11ShaderResourceView1** ppSRView1) + ID3D11Device3::CreateShaderResourceView1 +
    + + +

    Creates a view for accessing an unordered access resource.

    +
    + No documentation. + No documentation. + No documentation. +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the unordered-access view. See Direct3D 11 Return Codes for other possible return values.

    + + dn899232 + HRESULT ID3D11Device3::CreateUnorderedAccessView1([In] ID3D11Resource* pResource,[In, Optional] const D3D11_UNORDERED_ACCESS_VIEW_DESC1* pDesc1,[Out, Fast] ID3D11UnorderedAccessView1** ppUAView1) + ID3D11Device3::CreateUnorderedAccessView1 +
    + + +

    Creates a render-target view for accessing resource data.

    +
    +

    Pointer to a that represents a render target. This resource must have been created with the flag.

    +

    Pointer to a that represents a render-target view description. Set this parameter to null to create a view that accesses all of the subresources in mipmap level 0.

    +

    A reference to a memory block that receives a reference to a interface for the created render-target view. Set this parameter to null to validate the other input parameters (the method will return S_FALSE if the other input parameters pass validation).

    +

    This method returns one of the Direct3D 11 Return Codes.

    + +

    A render-target view can be bound to the output-merger stage by calling .

    +
    + + dn899224 + HRESULT ID3D11Device3::CreateRenderTargetView1([In] ID3D11Resource* pResource,[In, Optional] const D3D11_RENDER_TARGET_VIEW_DESC1* pDesc1,[Out, Fast] ID3D11RenderTargetView1** ppRTView1) + ID3D11Device3::CreateRenderTargetView1 +
    + + +

    Creates a query object for querying information from the graphics processing unit (GPU).

    +
    +

    Pointer to a structure that represents a query description.

    +

    A reference to a memory block that receives a reference to a interface for the created query object. Set this parameter to null to validate the other input parameters (the method will return S_FALSE if the other input parameters pass validation).

    +

    This method returns E_OUTOFMEMORY if there is insufficient memory to create the query object. See Direct3D 11 Return Codes for other possible return values.

    + + dn899220 + HRESULT ID3D11Device3::CreateQuery1([In] const D3D11_QUERY_DESC1* pQueryDesc1,[Out, Fast] ID3D11Query1** ppQuery1) + ID3D11Device3::CreateQuery1 +
    + + +

    Gets an immediate context, which can play back command lists.

    +
    + No documentation. + +

    The GetImmediateContext3 method outputs an object that represents an immediate context, which is used to perform rendering that you want immediately submitted to a device. For most apps, an immediate context is the primary object that is used to draw your scene.

    The GetImmediateContext3 method increments the reference count of the immediate context by one. Therefore, you must call Release on the returned interface reference when you are done with it to avoid a memory leak.

    +
    + + dn912872 + void ID3D11Device3::GetImmediateContext3([Out] ID3D11DeviceContext3** ppImmediateContext) + ID3D11Device3::GetImmediateContext3 +
    + + +

    Creates a deferred context, which can record command lists.

    +
    + No documentation. + No documentation. +

    Returns if successful; otherwise, returns one of the following:

    • Returns if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device.
    • Returns if the CreateDeferredContext3 method can't be called from the current context. For example, if the device was created with the value, CreateDeferredContext3 returns .
    • Returns E_INVALIDARG if the ContextFlags parameter is invalid.
    • Returns E_OUTOFMEMORY if the app has exhausted available memory.
    + + dn912871 + HRESULT ID3D11Device3::CreateDeferredContext3([In] unsigned int ContextFlags,[Out, Fast] ID3D11DeviceContext3** ppDeferredContext) + ID3D11Device3::CreateDeferredContext3 +
    + + +

    Copies data into a texture which was mapped using ID3D11DeviceContext3::Map while providing a null parameter.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    The provided resource must be a texture which was mapped for writing by a previous call to ID3D11DeviceContext3::Map while providing a null parameter.

    This API is intended for calling at high frequency. Callers can reduce memory by making iterative calls that update progressive regions of the texture, while provide a small buffer during each call. It is most efficient to specify large enough regions, though, because this enables D3D to fill whole cache lines in the texture before returning.

    For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned.

    When writing to sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offsetting which can interfere with alignment to cache lines.

    +
    + + dn912874 + void ID3D11Device3::WriteToSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + ID3D11Device3::WriteToSubresource +
    + + +

    Copies data from a texture which was mapped using ID3D11DeviceContext3::Map while providing a null parameter.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    The provided resource must be a texture which was mapped for writing by a previous call to ID3D11DeviceContext3::Map while providing a null parameter.

    This API is intended for calling at high frequency. Callers can reduce memory by making iterative calls that update progressive regions of the texture, while provide a small buffer during each call. It is most efficient to specify large enough regions, though, because this enables D3D to fill whole cache lines in the texture before returning.

    For efficiency, ensure the bounds and alignment of the extents within the box are ( 64 / [Bytes per pixel] ) pixels horizontally. Vertical bounds and alignment should be 2 rows, except when 1-byte-per-pixel formats are used, in which case 4 rows are recommended. Single depth slices per call are handled efficiently. It is recommended but not necessary to provide references and strides which are 128-byte aligned.

    When reading from sub mipmap levels, it is recommended to use larger width and heights than described above. This is because small mipmap levels may actually be stored within a larger block of memory, with an opaque amount of offseting which can interfere with alignment to cache lines.

    +
    + + dn912873 + void ID3D11Device3::ReadFromSubresource([Out] void* pDstData,[In] unsigned int DstRowPitch,[In] unsigned int DstDepthPitch,[In] ID3D11Resource* pSrcResource,[In] unsigned int SrcSubresource,[In, Optional] const D3D11_BOX* pSrcBox) + ID3D11Device3::ReadFromSubresource +
    + + +

    The device interface represents a virtual adapter; it is used to create resources.

    Note??The latest version of this interface is introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the interface instead of .? +
    + +

    A device is created using .

    Windows?Phone?8: This API is supported.

    +
    + + ff476379 + ID3D11Device5 + ID3D11Device5 +
    + + + Opens a handle for a shared fence by using resourceHandle. + + The handle that was returned by a call to ID3D11Fence::CreateSharedHandle or ID3D12Device::CreateSharedHandle + Fence + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3D11Device5::OpenSharedFence([In] void* hFence,[In] const GUID& ReturnedInterface,[Out, Optional] void** ppFence) + ID3D11Device5::OpenSharedFence + + + +

    The device interface represents a virtual adapter; it is used to create resources. adds new methods to those in .

    Note??This interface, introduced in the Windows 10 Creators Update, is the latest version of the interface. Applications targetting Windows 10 Creators Update should use this interface instead of earlier versions.? +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + mt492478 + HRESULT ID3D11Device5::CreateFence([In] unsigned longlong InitialValue,[In] D3D11_FENCE_FLAG Flags,[In] const GUID& ReturnedInterface,[Out, Fast] ID3D11Fence** ppFence) + ID3D11Device5::CreateFence +
    + + +

    A device-child interface accesses data used by a device.

    +
    + +

    There are several types of device child interfaces, all of which inherit this interface. They include shaders, state objects, and input layouts.

    Windows?Phone?8: This API is supported.

    +
    + + ff476380 + ID3D11DeviceChild + ID3D11DeviceChild +
    + + + Gets or sets the debug-name for this object. + + + The debug name. + + + + + + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to the device that created this interface.

    +
    + +

    Any returned interfaces will have their reference count incremented by one, so be sure to call ::release() on the returned reference(s) before they are freed or else you will have a memory leak.

    +
    + + ff476381 + GetDevice + GetDevice + void ID3D11DeviceChild::GetDevice([Out] ID3D11Device** ppDevice) +
    + + +

    Get a reference to the device that created this interface.

    +
    +

    Address of a reference to a device (see ).

    + +

    Any returned interfaces will have their reference count incremented by one, so be sure to call ::release() on the returned reference(s) before they are freed or else you will have a memory leak.

    +
    + + ff476381 + void ID3D11DeviceChild::GetDevice([Out] ID3D11Device** ppDevice) + ID3D11DeviceChild::GetDevice +
    + + +

    Get application-defined data from a device child.

    +
    +

    Guid associated with the data.

    +

    A reference to a variable that on input contains the size, in bytes, of the buffer that pData points to, and on output contains the size, in bytes, of the amount of data that GetPrivateData retrieved.

    +

    A reference to a buffer that GetPrivateData fills with data from the device child if pDataSize points to a value that specifies a buffer large enough to hold the data.

    +

    This method returns one of the Direct3D 11 Return Codes.

    + +

    The data stored in the device child is set by calling .

    Windows?Phone?8: This API is supported.

    +
    + + ff476382 + HRESULT ID3D11DeviceChild::GetPrivateData([In] const GUID& guid,[InOut] unsigned int* pDataSize,[Out, Buffer, Optional] void* pData) + ID3D11DeviceChild::GetPrivateData +
    + + +

    Set application-defined data to a device child and associate that data with an application-defined guid.

    +
    +

    Guid associated with the data.

    +

    Size of the data.

    +

    Pointer to the data to be stored with this device child. If pData is null, DataSize must also be 0, and any data previously associated with the specified guid will be destroyed.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    The data stored in the device child with this method can be retrieved with .

    The debug layer reports memory leaks by outputting a list of object interface references along with their friendly names. The default friendly name is "<unnamed>". You can set the friendly name so that you can determine if the corresponding object interface reference caused the leak. To set the friendly name, use the SetPrivateData method and the that is in D3Dcommon.h. For example, to give pContext a friendly name of My name, use the following code:

     static const char c_szName[] = "My name";	
    +            hr = pContext->SetPrivateData( , sizeof( c_szName ) - 1, c_szName );	
    +            
    +
    + + ff476383 + HRESULT ID3D11DeviceChild::SetPrivateData([In] const GUID& guid,[In] unsigned int DataSize,[In, Buffer, Optional] const void* pData) + ID3D11DeviceChild::SetPrivateData +
    + + +

    Associate an -derived interface with this device child and associate that interface with an application-defined guid.

    +
    +

    Guid associated with the interface.

    +

    Pointer to an -derived interface to be associated with the device child.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    When this method is called ::addref() will be called on the -derived interface, and when the device child is detroyed ::release() will be called on the -derived interface.

    +
    + + ff476384 + HRESULT ID3D11DeviceChild::SetPrivateDataInterface([In] const GUID& guid,[In, Optional] const IUnknown* pData) + ID3D11DeviceChild::SetPrivateDataInterface +
    + + + Common Shader class. Provides a common set of methods for a Shader Stage. + TODO: check if usage of abstract is not introducing an unacceptable overhead... + + + Functions + + + + + + Initializes a new instance of the class. + + The pointer. + + + + Gets the constant buffers used by the shader stage. + + Index into the device's zero-based array from which to begin retrieving constant buffers. + Number of buffers to retrieve. + An array of constant buffers. + + + + Gets the sampler states used by the shader stage. + + Index into the device's zero-based array from which to begin retrieving samplers. + Number of samplers to retrieve. + An array of sampler states. + + + + Gets the shader resources used by the shader stage. + + Index into the device's zero-based array from which to begin retrieving shader resources. + Number of resources to retrieve. + An array of shader resources. + + + + Sets a single constant buffer to be used by the shader stage. + + Index into the device's zero-based array to which to set the constant buffer. + constant buffer to set + + + + Sets an array of constant buffers to be used by the shader stage. + + Index into the device's zero-based array to which to set the array of constant buffers. + An array of constant buffer to set + + + + Sets an array of constant buffers to be used by the shader stage. + + Index into the device's zero-based array to which to set the array of constant buffers. + An array of constant buffer to set + + + + Sets a single sampler to be used by the shader stage. + + Index into the device's zero-based array to which to set the sampler. + sampler state to set + + + + Sets an array of samplers to be used by the shader stage. + + Index into the device's zero-based array to which to set the array of sampler states. + An array of sampler state to set + + + + Sets an array of samplers to be used by the shader stage. + + Index into the device's zero-based array to which to set the array of sampler states. + An array of sampler state to set + + + + Sets a single shader resource to be used by the shader stage. + + Index into the device's zero-based array to which to set the resource. + Resource view to attach + + + + Bind an array of shader resources to the shader stage. + + + If an overlapping resource view is already bound to an output slot, such as a render target, then this API will fill the destination shader resource slot with NULL.For information about creating shader-resource views, see . The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1). + Array of {{shader resource view}} interfaces to set to the device. + + + + Bind an array of shader resources to the shader stage. + + + If an overlapping resource view is already bound to an output slot, such as a render target, then this API will fill the destination shader resource slot with NULL.For information about creating shader-resource views, see . The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1). + Array of {{shader resource view}} interfaces to set to the device. + + + + Get the shader resources. + + + Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks. + + Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1). + The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot). + Array of {{shader resource view}} interfaces to be returned by the device. + void PSGetShaderResources([In] UINT StartSlot,[In] UINT NumViews,[Out, Buffer] ID3D11ShaderResourceView** ppShaderResourceViews) + + + + Get an array of sampler states from the shader pipeline stage. + + + Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks. + + Index into a zero-based array to begin getting samplers from (ranges from 0 to D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1). + Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot). + Array of sampler-state interface pointers (see ) to be returned by the device. + void PSGetSamplers([In] UINT StartSlot,[In] UINT NumSamplers,[Out, Buffer] ID3D11SamplerState** ppSamplers) + + + + Get the constant buffers used by the shader pipeline stage. + + + Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks. + + Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1). + Number of buffers to retrieve (ranges from 0 to D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot). + Array of constant buffer interface pointers (see ) to be returned by the method. + void PSGetConstantBuffers([In] UINT StartSlot,[In] UINT NumBuffers,[Out, Buffer] ID3D11Buffer** ppConstantBuffers) + + + + Bind an array of shader resources to the shader stage. + + + If an overlapping resource view is already bound to an output slot, such as a render target, then this API will fill the destination shader resource slot with NULL.For information about creating shader-resource views, see . The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1). + Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot). + Array of {{shader resource view}} interfaces to set to the device. + void PSSetShaderResources([In] UINT StartSlot,[In] UINT NumViews,[In, Buffer] const ID3D11ShaderResourceView** ppShaderResourceViews) + + + + Bind an array of shader resources to the shader stage. + + + If an overlapping resource view is already bound to an output slot, such as a render target, then this API will fill the destination shader resource slot with NULL.For information about creating shader-resource views, see . The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1). + Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot). + Array of {{shader resource view}} interfaces to set to the device. + void PSSetShaderResources([In] UINT StartSlot,[In] UINT NumViews,[In, Buffer] const ID3D11ShaderResourceView** ppShaderResourceViews) + + + + Bind an array of shader resources to the shader stage. + + + If an overlapping resource view is already bound to an output slot, such as a render target, then this API will fill the destination shader resource slot with NULL.For information about creating shader-resource views, see . The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - 1). + Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT - StartSlot). + Array of {{shader resource view}} interfaces to set to the device. + void PSSetShaderResources([In] UINT StartSlot,[In] UINT NumViews,[In, Buffer] const ID3D11ShaderResourceView** ppShaderResourceViews) + + + + Set an array of sampler states to the shader pipeline stage. + + + Any sampler may be set to NULL; this invokes the default state, which is defined to be the following.StateDefault ValueFilterD3D11_FILTER_MIN_MAG_MIP_LINEARAddressUD3D11_TEXTURE_ADDRESS_CLAMPAddressVD3D11_TEXTURE_ADDRESS_CLAMPAddressWD3D11_TEXTURE_ADDRESS_CLAMPMipLODBias0MaxAnisotropy1ComparisonFuncD3D11_COMPARISON_NEVERBorderColor[0]1.0fBorderColor[1]1.0fBorderColor[2]1.0fBorderColor[3]1.0fMinLOD-FLT_MAXMaxLODFLT_MAX The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting samplers to (ranges from 0 to D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1). + Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot). + Pointer to an array of sampler-state interfaces (see ). See Remarks. + void PSSetSamplers([In] UINT StartSlot,[In] UINT NumSamplers,[In, Buffer] const ID3D11SamplerState** ppSamplers) + + + + Set an array of sampler states to the shader pipeline stage. + + + Any sampler may be set to NULL; this invokes the default state, which is defined to be the following.StateDefault ValueFilterD3D11_FILTER_MIN_MAG_MIP_LINEARAddressUD3D11_TEXTURE_ADDRESS_CLAMPAddressVD3D11_TEXTURE_ADDRESS_CLAMPAddressWD3D11_TEXTURE_ADDRESS_CLAMPMipLODBias0MaxAnisotropy1ComparisonFuncD3D11_COMPARISON_NEVERBorderColor[0]1.0fBorderColor[1]1.0fBorderColor[2]1.0fBorderColor[3]1.0fMinLOD-FLT_MAXMaxLODFLT_MAX The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting samplers to (ranges from 0 to D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - 1). + Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT - StartSlot). + Pointer to an array of sampler-state interfaces (see ). See Remarks. + void PSSetSamplers([In] UINT StartSlot,[In] UINT NumSamplers,[In, Buffer] const ID3D11SamplerState** ppSamplers) + + + + Set the constant buffers used by the shader pipeline stage. + + + The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1). + Number of buffers to set (ranges from 0 to D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot). + Array of constant buffers (see ) being given to the device. + void PSSetConstantBuffers([In] UINT StartSlot,[In] UINT NumBuffers,[In, Buffer] const ID3D11Buffer** ppConstantBuffers) + + + + Set the constant buffers used by the shader pipeline stage. + + + The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - 1). + Number of buffers to set (ranges from 0 to D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - StartSlot). + Array of constant buffers (see ) being given to the device. + void PSSetConstantBuffers([In] UINT StartSlot,[In] UINT NumBuffers,[In, Buffer] const ID3D11Buffer** ppConstantBuffers) + + + Constant ConstantBufferApiSlotCount. + D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT + + + Constant ConstantBufferComponents. + D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS + + + Constant ConstantBufferComponentBitCount. + D3D11_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT + + + Constant ConstantBufferHwSlotCount. + D3D11_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT + + + Constant ConstantBufferPartialUpdateExtentsByteAlignment. + D3D11_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT + + + Constant ConstantBufferRegisterComponents. + D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS + + + Constant ConstantBufferRegisterCount. + D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT + + + Constant ConstantBufferRegisterReadsPerInst. + D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST + + + Constant ConstantBufferRegisterReadPorts. + D3D11_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS + + + Constant FlowcontrolNestingLimit. + D3D11_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT + + + Constant ImmediateConstantBufferRegisterComponents. + D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS + + + Constant ImmediateConstantBufferRegisterCount. + D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT + + + Constant ImmediateConstantBufferRegisterReadsPerInst. + D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST + + + Constant ImmediateConstantBufferRegisterReadPorts. + D3D11_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS + + + Constant ImmediateValueComponentBitCount. + D3D11_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT + + + Constant InputResourceRegisterComponents. + D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS + + + Constant InputResourceRegisterCount. + D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT + + + Constant InputResourceRegisterReadsPerInst. + D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST + + + Constant InputResourceRegisterReadPorts. + D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS + + + Constant InputResourceSlotCount. + D3D11_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT + + + Constant SamplerRegisterComponents. + D3D11_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS + + + Constant SamplerRegisterCount. + D3D11_COMMONSHADER_SAMPLER_REGISTER_COUNT + + + Constant SamplerRegisterReadsPerInst. + D3D11_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST + + + Constant SamplerRegisterReadPorts. + D3D11_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS + + + Constant SamplerSlotCount. + D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT + + + Constant SubRoutineNestingLimit. + D3D11_COMMONSHADER_SUBROUTINE_NESTING_LIMIT + + + Constant TempRegisterComponents. + D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENTS + + + Constant TempRegisterComponentBitCount. + D3D11_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT + + + Constant TempRegisterCount. + D3D11_COMMONSHADER_TEMP_REGISTER_COUNT + + + Constant TempRegisterReadsPerInst. + D3D11_COMMONSHADER_TEMP_REGISTER_READS_PER_INST + + + Constant TempRegisterReadPorts. + D3D11_COMMONSHADER_TEMP_REGISTER_READ_PORTS + + + Constant TextureCoordRangeReductionMaximum. + D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX + + + Constant TextureCoordRangeReductionMinimum. + D3D11_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN + + + Constant TextureElOffsetMaximumNegative. + D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE + + + Constant TextureElOffsetMaximumPositive. + D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE + + + + Common Shader class. Provides a common set of methods for a Shader Stage. + TODO: check if usage of abstract is not introducing an unacceptable overhead... + + Type of the shader + + + + Initializes a new instance of the class. + + The pointer. + + + + Gets the shader currently assigned to the device. + + The shader (null if no shader is assigned). + + + + Gets the shader currently assigned to the device. + + An array that will be used to contain any class instances currently active. + The shader (null if no shader is assigned). + + + + Assigns a compute shader to the device. + + The shader to assign to the device. Assign null to disable the compute shader. + + + + Assigns a compute shader to the device. + + The shader to assign to the device. Assign null to disable the compute shader. + An array of class-instance interfaces. Each interface used by a shader must have a corresponding class instance or the shader will get disabled. + + + + Assigns a compute shader to the device. + + The shader to assign to the device. Assign null to disable the compute shader. + An array of class-instance interfaces. Each interface used by a shader must have a corresponding class instance or the shader will get disabled. + + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + + Gets an array of views for an unordered resource. + + + Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks. + + Index of the first element in the zero-based array to return (ranges from 0 to D3D11_PS_CS_UAV_REGISTER_COUNT - 1). + Number of views to get (ranges from 0 to D3D11_PS_CS_UAV_REGISTER_COUNT - StartSlot). + void CSGetUnorderedAccessViews([In] int StartSlot,[In] int NumUAVs,[Out, Buffer] ID3D11UnorderedAccessView** ppUnorderedAccessViews) + + + + Sets an array of views for an unordered resource. + + + + Index of the first element in the zero-based array to begin setting. + A reference to an references to be set by the method. + void CSSetUnorderedAccessViews([In] int StartSlot,[In] int NumUAVs,[In, Buffer] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer] const int* pUAVInitialCounts) + + + + Sets an array of views for an unordered resource. + + + + Index of the first element in the zero-based array to begin setting. + A reference to an references to be set by the method. + An Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumable UAV. uAVInitialCount is only relevant for UAVs which have the flag, otherwise the argument is ignored. + void CSSetUnorderedAccessViews([In] int StartSlot,[In] int NumUAVs,[In, Buffer] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer] const int* pUAVInitialCounts) + + + + Sets an array of views for an unordered resource. + + + + Index of the first element in the zero-based array to begin setting. + A reference to an array of references to be set by the method. + void CSSetUnorderedAccessViews([In] int StartSlot,[In] int NumUAVs,[In, Buffer] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer] const int* pUAVInitialCounts) + + + + Sets an array of views for an unordered resource. + + + + Index of the first element in the zero-based array to begin setting. + A reference to an array of references to be set by the method. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumable UAV. pUAVInitialCounts is only relevant for UAVs which have the flag, otherwise the argument is ignored. + void CSSetUnorderedAccessViews([In] int StartSlot,[In] int NumUAVs,[In, Buffer] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer] const int* pUAVInitialCounts) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant UnorderedAccessViewSlotCount. + D3D11_PS_CS_UAV_REGISTER_COUNT + + + Constant DispatchMaximumThreadGroupsPerDimension. + D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION + + + Constant ThreadGroupSharedMemoryRegisterCount. + D3D11_CS_TGSM_REGISTER_COUNT + + + Constant ThreadGroupSharedMemoryRegisterReadsPerInst. + D3D11_CS_TGSM_REGISTER_READS_PER_INST + + + Constant ThreadGroupSharedMemoryResourceRegisterComponents. + D3D11_CS_TGSM_RESOURCE_REGISTER_COMPONENTS + + + Constant ThreadGroupSharedMemoryResourceRegisterReadPorts. + D3D11_CS_TGSM_RESOURCE_REGISTER_READ_PORTS + + + Constant ThreadgroupidRegisterComponents. + D3D11_CS_THREADGROUPID_REGISTER_COMPONENTS + + + Constant ThreadgroupidRegisterCount. + D3D11_CS_THREADGROUPID_REGISTER_COUNT + + + Constant ThreadidingroupflattenedRegisterComponents. + D3D11_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS + + + Constant ThreadidingroupflattenedRegisterCount. + D3D11_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT + + + Constant ThreadidingroupRegisterComponents. + D3D11_CS_THREADIDINGROUP_REGISTER_COMPONENTS + + + Constant ThreadidingroupRegisterCount. + D3D11_CS_THREADIDINGROUP_REGISTER_COUNT + + + Constant ThreadidRegisterComponents. + D3D11_CS_THREADID_REGISTER_COMPONENTS + + + Constant ThreadidRegisterCount. + D3D11_CS_THREADID_REGISTER_COUNT + + + Constant ThreadGroupMaximumThreadsPerGroup. + D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP + + + Constant ThreadGroupMaximumX. + D3D11_CS_THREAD_GROUP_MAX_X + + + Constant ThreadGroupMaximumY. + D3D11_CS_THREAD_GROUP_MAX_Y + + + Constant ThreadGroupMaximumZ. + D3D11_CS_THREAD_GROUP_MAX_Z + + + Constant ThreadGroupMinimumX. + D3D11_CS_THREAD_GROUP_MIN_X + + + Constant ThreadGroupMinimumY. + D3D11_CS_THREAD_GROUP_MIN_Y + + + Constant ThreadGroupMinimumZ. + D3D11_CS_THREAD_GROUP_MIN_Z + + + Constant ThreadLocalTempRegisterPool. + D3D11_CS_THREAD_LOCAL_TEMP_REGISTER_POOL + + + +

    Bind an array of shader resources to the compute-shader stage.

    +
    +

    Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to - 1).

    +

    Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to set to the device.

    + +

    If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with null.

    For information about creating shader-resource views, see .

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. +

    +
    + + ff476403 + void ID3D11DeviceContext::CSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const void** ppShaderResourceViews) + ID3D11DeviceContext::CSSetShaderResources +
    + + +

    Sets an array of views for an unordered resource.

    +
    +

    Index of the first element in the zero-based array to begin setting (ranges from 0 to D3D11_1_UAV_SLOT_COUNT - 1). D3D11_1_UAV_SLOT_COUNT is defined as 64.

    +

    Number of views to set (ranges from 0 to D3D11_1_UAV_SLOT_COUNT - StartSlot).

    +

    A reference to an array of references to be set by the method.

    +

    An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable UAV. pUAVInitialCounts is only relevant for UAVs that were created with either or specified when the UAV was created; otherwise, the argument is ignored.

    + +

    Windows?Phone?8: This API is supported.

    +
    + + ff476404 + void ID3D11DeviceContext::CSSetUnorderedAccessViews([In] unsigned int StartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const void** ppUnorderedAccessViews,[In, Buffer, Optional] const void* pUAVInitialCounts) + ID3D11DeviceContext::CSSetUnorderedAccessViews +
    + + +

    Set a compute shader to the device.

    +
    +

    Pointer to a compute shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476402 + void ID3D11DeviceContext::CSSetShader([In, Optional] ID3D11ComputeShader* pComputeShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::CSSetShader +
    + + +

    Set a compute shader to the device.

    +
    +

    Pointer to a compute shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476402 + void ID3D11DeviceContext::CSSetShader([In, Optional] ID3D11ComputeShader* pComputeShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::CSSetShader +
    + + +

    Set a compute shader to the device.

    +
    +

    Pointer to a compute shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476402 + void ID3D11DeviceContext::CSSetShader([In, Optional] ID3D11ComputeShader* pComputeShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::CSSetShader +
    + + +

    Set an array of sampler states to the compute-shader stage.

    +
    +

    Index into the device's zero-based array to begin setting samplers to (ranges from 0 to - 1).

    +

    Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to - StartSlot).

    +

    Pointer to an array of sampler-state interfaces (see ). See Remarks.

    + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

    //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476401 + void ID3D11DeviceContext::CSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const void** ppSamplers) + ID3D11DeviceContext::CSSetSamplers +
    + + +

    Sets the constant buffers used by the compute-shader stage.

    +
    +

    Index into the zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer.

    If the application wants the shader to access other parts of the buffer, it must call the CSSetConstantBuffers1 method instead.

    +
    + + ff476400 + void ID3D11DeviceContext::CSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const void** ppConstantBuffers) + ID3D11DeviceContext::CSSetConstantBuffers +
    + + +

    Get the compute-shader resources.

    +
    +

    Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to - 1).

    +

    The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to be returned by the device.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476398 + void ID3D11DeviceContext::CSGetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[Out, Buffer, Optional] ID3D11ShaderResourceView** ppShaderResourceViews) + ID3D11DeviceContext::CSGetShaderResources +
    + + +

    Gets an array of views for an unordered resource.

    +
    +

    Index of the first element in the zero-based array to return (ranges from 0 to D3D11_1_UAV_SLOT_COUNT - 1).

    +

    Number of views to get (ranges from 0 to D3D11_1_UAV_SLOT_COUNT - StartSlot).

    +

    A reference to an array of interface references (see ) to get.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476399 + void ID3D11DeviceContext::CSGetUnorderedAccessViews([In] unsigned int StartSlot,[In] unsigned int NumUAVs,[Out, Buffer, Optional] ID3D11UnorderedAccessView** ppUnorderedAccessViews) + ID3D11DeviceContext::CSGetUnorderedAccessViews +
    + + +

    Get the compute shader currently set on the device.

    +
    +

    Address of a reference to a Compute shader (see ) to be returned by the method.

    +

    Pointer to an array of class instance interfaces (see ).

    +

    The number of class-instance elements in the array.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476397 + void ID3D11DeviceContext::CSGetShader([Out, Optional] ID3D11ComputeShader** ppComputeShader,[Out, Buffer, Optional] ID3D11ClassInstance** ppClassInstances,[InOut] unsigned int* pNumClassInstances) + ID3D11DeviceContext::CSGetShader +
    + + +

    Get an array of sampler state interfaces from the compute-shader stage.

    +
    +

    Index into a zero-based array to begin getting samplers from (ranges from 0 to - 1).

    +

    Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to - StartSlot).

    +

    Pointer to an array of sampler-state interfaces (see ).

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476396 + void ID3D11DeviceContext::CSGetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[Out, Buffer, Optional] ID3D11SamplerState** ppSamplers) + ID3D11DeviceContext::CSGetSamplers +
    + + +

    Get the constant buffers used by the compute-shader stage.

    +
    +

    Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to - 1).

    +

    Number of buffers to retrieve (ranges from 0 to - StartSlot).

    +

    Array of constant buffer interface references (see ) to be returned by the method.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476395 + void ID3D11DeviceContext::CSGetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers) + ID3D11DeviceContext::CSGetConstantBuffers +
    + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + + Constructs a new deferred context . + + The device with which to associate the state object. + The newly created object. + + + + Create a command list and record graphics commands into it. + + A flag indicating whether the immediate context state is saved (prior) and restored (after) the execution of a command list. + The created command list containing the queued rendering commands. + + + + Determines whether asynchronous query data is available. + + The data. + + true if asynchronous query data is available; otherwise, false. + + HRESULT ID3D11DeviceContext::GetData([In] ID3D11Asynchronous* pAsync,[Out, Buffer, Optional] void* pData,[In] unsigned int DataSize,[In] D3D11_ASYNC_GETDATA_FLAG GetDataFlags) + + + + Determines whether asynchronous query data is available. + + The data. + Optional flags + + true if asynchronous query data is available; otherwise, false. + + HRESULT ID3D11DeviceContext::GetData([In] ID3D11Asynchronous* pAsync,[Out, Buffer, Optional] void* pData,[In] unsigned int DataSize,[In] D3D11_ASYNC_GETDATA_FLAG GetDataFlags) + + + + Gets data from the GPU asynchronously. + + The asynchronous data provider. + The data retrieved from the GPU. + + + + Gets data from the GPU asynchronously. + + The asynchronous data provider. + The data retrieved from the GPU. + + + + Gets data from the GPU asynchronously. + + + The asynchronous data provider. + The data retrieved from the GPU. + + True if result contains valid data, false otherwise. + + + + + Gets data from the GPU asynchronously. + + The asynchronous data provider. + Flags specifying how the command should operate. + The data retrieved from the GPU. + + + + Gets data from the GPU asynchronously. + + The asynchronous data provider. + Flags specifying how the command should operate. + The data retrieved from the GPU. + + + + Gets data from the GPU asynchronously. + + + The asynchronous data provider. + Flags specifying how the command should operate. + The data retrieved from the GPU. + + True if result contains valid data, false otherwise. + + + + + Copy the entire contents of the source resource to the destination resource using the GPU. + + + This method is unusual in that it causes the GPU to perform the copy operation (similar to a memcpy by the CPU). As a result, it has a few restrictions designed for improving performance. For instance, the source and destination resources: Must be different resources. Must be the same type. Must have identical dimensions (including width, height, depth, and size as appropriate). Will only be copied. CopyResource does not support any stretch, color key, blend, or format conversions. Must have compatible DXGI formats, which means the formats must be identical or at least from the same type group. For example, a DXGI_FORMAT_R32G32B32_FLOAT texture can be copied to an DXGI_FORMAT_R32G32B32_UINT texture since both of these formats are in the DXGI_FORMAT_R32G32B32_TYPELESS group. Might not be currently mapped. You cannot use an {{Immutable}} resource as a destination. You can use a {{depth-stencil}} resource as either a source or a destination. Resources created with multisampling capability (see ) can be used as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or if one is multisampled and the other is not multisampled the call to ID3D11DeviceContext::CopyResource fails. The method is an asynchronous call which may be added to the command-buffer queue. This attempts to remove pipeline stalls that may occur when copying data. An application that only needs to copy a portion of the data in a resource should use instead. + + A reference to the source resource (see ). + A reference to the destination resource (see ). + void ID3D11DeviceContext::CopyResource([In] ID3D11Resource* pDstResource,[In] ID3D11Resource* pSrcResource) + ff476392 + void ID3D11DeviceContext::CopyResource([In] ID3D11Resource* pDstResource,[In] ID3D11Resource* pSrcResource) + ID3D11DeviceContext::CopyResource + + + + Copy a region from a source resource to a destination resource. + + + The source box must be within the size of the source resource. The destination offsets, (x, y, and z) allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. {{D3D11CalcSubresource}} is a helper function for calculating subresource indexes. CopySubresourceRegion performs the copy on the GPU (similar to a memcpy by the CPU). As a consequence, the source and destination resources: Must be different subresources (although they can be from the same resource). Must be the same type. Must have compatible DXGI formats (identical or from the same type group). For example, a DXGI_FORMAT_R32G32B32_FLOAT texture can be copied to an DXGI_FORMAT_R32G32B32_UINT texture since both of these formats are in the DXGI_FORMAT_R32G32B32_TYPELESS group. May not be currently mapped. CopySubresourceRegion only supports copy; it does not support any stretch, color key, blend, or format conversions. An application that needs to copy an entire resource should use instead. CopySubresourceRegion is an asynchronous call which may be added to the command-buffer queue, this attempts to remove pipeline stalls that may occur when copying data. See performance considerations for more details. Note??If you use CopySubresourceRegion with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the DstX, DstY, and DstZ parameters and NULL to the pSrcBox parameter. In addition, source and destination resources, which are represented by the pSrcResource and pDstResource parameters, should have identical sample count values. Example The following code snippet copies a box (located at (120,100),(200,220)) from a source texture into a region (10,20),(90,140) in a destination texture. + D3D11_BOX sourceRegion; + sourceRegion.left = 120; + sourceRegion.right = 200; + sourceRegion.top = 100; + sourceRegion.bottom = 220; + sourceRegion.front = 0; + sourceRegion.back = 1; pd3dDeviceContext->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion ); + + Notice, that for a 2D texture, front and back are set to 0 and 1 respectively. + + A reference to the source resource (see ). + Source subresource index. + A reference to a 3D box (see ) that defines the source subresources that can be copied. If NULL, the entire source subresource is copied. The box must fit within the source resource. + A reference to the destination resource (see ). + Destination subresource index. + The x-coordinate of the upper left corner of the destination region. + The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero. + The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero. + ff476394 + void ID3D11DeviceContext::CopySubresourceRegion([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In] unsigned int DstX,[In] unsigned int DstY,[In] unsigned int DstZ,[In] ID3D11Resource* pSrcResource,[In] unsigned int SrcSubresource,[In, Optional] const D3D11_BOX* pSrcBox) + ID3D11DeviceContext::CopySubresourceRegion + + + + Copy a multisampled resource into a non-multisampled resource. + + + This API is most useful when re-using the resulting render target of one render pass as an input to a second render pass. The source and destination resources must be the same resource type and have the same dimensions. In addition, they must have compatible formats. There are three scenarios for this: ScenarioRequirements Source and destination are prestructured and typedBoth the source and destination must have identical formats and that format must be specified in the Format parameter. One resource is prestructured and typed and the other is prestructured and typelessThe typed resource must have a format that is compatible with the typeless resource (i.e. the typed resource is DXGI_FORMAT_R32_FLOAT and the typeless resource is DXGI_FORMAT_R32_TYPELESS). The format of the typed resource must be specified in the Format parameter. Source and destination are prestructured and typelessBoth the source and destination must have the same typeless format (i.e. both must have DXGI_FORMAT_R32_TYPELESS), and the Format parameter must specify a format that is compatible with the source and destination (i.e. if both are DXGI_FORMAT_R32_TYPELESS then DXGI_FORMAT_R32_FLOAT could be specified in the Format parameter). For example, given the DXGI_FORMAT_R16G16B16A16_TYPELESS format: The source (or dest) format could be DXGI_FORMAT_R16G16B16A16_UNORM The dest (or source) format could be DXGI_FORMAT_R16G16B16A16_FLOAT ? + + Source resource. Must be multisampled. + >The source subresource of the source resource. + Destination resource. Must be a created with the flag and be single-sampled. See . + A zero-based index, that identifies the destination subresource. Use {{D3D11CalcSubresource}} to calculate the index. + A that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks. + void ID3D11DeviceContext::ResolveSubresource([In] ID3D11Resource* pDstResource,[In] int DstSubresource,[In] ID3D11Resource* pSrcResource,[In] int SrcSubresource,[In] DXGI_FORMAT Format) + + + + Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource. + + The resource. + The mip slice. + The array slice. + The mode. + The flags. + The output stream containing the pointer. + + The locked + + HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource) + + + + Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource. + + The resource. + The mip slice. + The array slice. + The mode. + The flags. + The output stream containing the pointer. + + The locked + + HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource) + + + + Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource. + + The resource. + The mip slice. + The array slice. + The mode. + The flags. + The output stream containing the pointer. + + The locked + + HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource) + + + + Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource. + + The resource. + The mode. + The flags. + The output stream containing the pointer. + + The locked + + HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource) + + + + Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource. + + The resource. + The mip slice. + The array slice. + The mode. + The flags. + Size of the selected miplevel. + + The locked + + HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource) + + + + Maps the data contained in a subresource to a memory pointer, and denies the GPU access to that subresource. + + The resource. + The subresource. + The mode. + The flags. + The output stream containing the pointer. + The locked + HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource) + + + +

    Gets a reference to the data contained in a subresource, and denies the GPU access to that subresource.

    +
    +

    A reference to a interface.

    +

    Index number of the subresource.

    +

    Specifies the CPU's read and write permissions for a resource. For possible values, see .

    +

    Flag that specifies what the CPU should do when the GPU is busy. This flag is optional.

    +

    A reference to the mapped subresource (see ).

    + The mapped subresource (see ). If is used and the resource is still being used by the GPU, this method return an empty DataBox whose property returns true.

    This method also throws an exception with the code if MapType allows any CPU read access and the video card has been removed.

    For more information about these error codes, see DXGI_ERROR.

    + +

    If you call Map on a deferred context, you can only pass , , or both to the MapType parameter. Other -typed values are not supported for a deferred context.

    The Direct3D 11.1 runtime, which is available starting with Windows Developer Preview, can map shader resource views (SRVs) of dynamic buffers with . The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers.

    + If is used and the resource is still being used by the GPU, this method return an empty DataBox whose property returns true. +
    + ff476457 + HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out] D3D11_MAPPED_SUBRESOURCE* pMappedResource) + ID3D11DeviceContext::Map +
    + + + Copies data from the CPU to to a non-mappable subresource region. + + Type of the data to upload + A reference to the data to upload. + The destination resource. + The destination subresource. + The row pitch. + The depth pitch. + The region + + This method is implementing the
    workaround for deferred context. + + ff476486 + void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + ID3D11DeviceContext::UpdateSubresource + + + + Copies data from the CPU to to a non-mappable subresource region. + + Type of the data to upload + A reference to the data to upload. + The destination resource. + The destination subresource. + The row pitch. + The depth pitch. + A region that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. + ff476486 + void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + ID3D11DeviceContext::UpdateSubresource + This method is implementing the workaround for deferred context. + + + + Copies data from the CPU to to a non-mappable subresource region. + + The source data. + The destination resource. + The destination subresource. + + This method is implementing the workaround for deferred context. + + void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + + + + Copies data from the CPU to to a non-mappable subresource region. + + The source data. + The destination resource. + The destination subresource. + The destination region within the resource. + + This method is implementing the workaround for deferred context. + + void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + + + + Copies data from the CPU to to a non-mappable subresource region. + + Type of the data to upload + A reference to the data to upload. + The destination resource. + The size in bytes per pixel/block element. + The destination subresource. + The row pitch. + The depth pitch. + if set to true the resource is a block/compressed resource + void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + + This method is implementing the workaround for deferred context. + + + + + Copies data from the CPU to to a non-mappable subresource region. + + Type of the data to upload + A reference to the data to upload. + The destination resource. + The size in bytes per pixel/block element. + The destination subresource. + The row pitch. + The depth pitch. + if set to true the resource is a block/compressed resource + + This method is implementing the workaround for deferred context. + + void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + + + + Copies data from the CPU to to a non-mappable subresource region. + + The source data. + The destination resource. + The size in bytes per pixel/block element. + The destination subresource. + if set to true the resource is a block/compressed resource + + This method is implementing the workaround for deferred context. + + void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + + + + Copies data from the CPU to to a non-mappable subresource region. + + The source data. + The destination resource. + The size in bytes per pixel/block element. + The destination subresource. + The destination region within the resource. + if set to true the resource is a block/compressed resource + + This method is implementing the workaround for deferred context. + + void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + + + + Updates the subresource safe method. + + The DST resource ref. + The DST subresource. + The DST box ref. + The p SRC data. + The SRC row pitch. + The SRC depth pitch. + The size in bytes per pixel/block element. + if set to true the resource is a block/compressed resource + + + This method is implementing the workaround for deferred context. + + + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Update nested inner interfaces pointer + + + Inner interface giving access to VertexShaderStage methods. + + + Inner interface giving access to PixelShaderStage methods. + + + Inner interface giving access to InputAssemblerStage methods. + + + Inner interface giving access to GeometryShaderStage methods. + + + Inner interface giving access to OutputMergerStage methods. + + + Inner interface giving access to StreamOutputStage methods. + + + Inner interface giving access to RasterizerStage methods. + + + Inner interface giving access to HullShaderStage methods. + + + Inner interface giving access to DomainShaderStage methods. + + + Inner interface giving access to ComputeShaderStage methods. + + + +

    Gets the type of device context.

    +
    + + ff476431 + GetType + GetType + D3D11_DEVICE_CONTEXT_TYPE ID3D11DeviceContext::GetType() +
    + + +

    Gets the initialization flags associated with the current deferred context.

    +
    + +

    The GetContextFlags method gets the flags that were supplied to the ContextFlags parameter of ; however, the context flag is reserved for future use.

    +
    + + ff476427 + GetContextFlags + GetContextFlags + unsigned int ID3D11DeviceContext::GetContextFlags() +
    + + +

    Draw indexed, non-instanced primitives.

    +
    +

    Number of indices to draw.

    +

    The location of the first index read by the GPU from the index buffer.

    +

    A value added to each index before reading a vertex from the vertex buffer.

    + +

    A draw API submits work to the rendering pipeline.

    If the sum of both indices is negative, the result of the function call is undefined.

    +
    + + ff476409 + void ID3D11DeviceContext::DrawIndexed([In] unsigned int IndexCount,[In] unsigned int StartIndexLocation,[In] int BaseVertexLocation) + ID3D11DeviceContext::DrawIndexed +
    + + +

    Draw non-indexed, non-instanced primitives.

    +
    +

    Number of vertices to draw.

    +

    Index of the first vertex, which is usually an offset in a vertex buffer.

    + +

    Draw submits work to the rendering pipeline.

    The vertex data for a draw call normally comes from a vertex buffer that is bound to the pipeline.

    Even without any vertex buffer bound to the pipeline, you can generate your own vertex data in your vertex shader by using the SV_VertexID system-value semantic to determine the current vertex that the runtime is processing.

    +
    + + ff476407 + void ID3D11DeviceContext::Draw([In] unsigned int VertexCount,[In] unsigned int StartVertexLocation) + ID3D11DeviceContext::Draw +
    + + +

    Gets a reference to the data contained in a subresource, and denies the GPU access to that subresource.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    This method returns one of the Direct3D 11 Return Codes.

    This method also returns if MapFlags specifies and the GPU is not yet finished with the resource.

    This method also returns if MapType allows any CPU read access and the video card has been removed.

    For more information about these error codes, see DXGI_ERROR.

    + +

    If you call Map on a deferred context, you can only pass , , or both to the MapType parameter. Other -typed values are not supported for a deferred context.

    Note?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views (SRVs) of dynamic buffers with . The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call with . CheckFeatureSupport fills members of a structure with the device's features. The relevant members here are MapNoOverwriteOnDynamicConstantBuffer and MapNoOverwriteOnDynamicBufferSRV.?

    For info about how to use Map, see How to: Use dynamic resources.

    +
    + + ff476457 + HRESULT ID3D11DeviceContext::Map([In] ID3D11Resource* pResource,[In] unsigned int Subresource,[In] D3D11_MAP MapType,[In] D3D11_MAP_FLAG MapFlags,[Out, Optional] D3D11_MAPPED_SUBRESOURCE* pMappedResource) + ID3D11DeviceContext::Map +
    + + +

    Invalidate the reference to a resource and reenable the GPU's access to that resource.

    +
    +

    A reference to a interface.

    +

    A subresource to be unmapped.

    + +

    For info about how to use Unmap, see How to: Use dynamic resources.

    Windows?Phone?8: This API is supported.

    +
    + + ff476485 + void ID3D11DeviceContext::Unmap([In] ID3D11Resource* pResource,[In] unsigned int Subresource) + ID3D11DeviceContext::Unmap +
    + + +

    Draw indexed, instanced primitives.

    +
    +

    Number of indices read from the index buffer for each instance.

    +

    Number of instances to draw.

    +

    The location of the first index read by the GPU from the index buffer.

    +

    A value added to each index before reading a vertex from the vertex buffer.

    +

    A value added to each index before reading per-instance data from a vertex buffer.

    + +

    A draw API submits work to the rendering pipeline.

    Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors. Instancing requires multiple vertex buffers: at least one for per-vertex data and a second buffer for per-instance data.

    +
    + + ff476410 + void ID3D11DeviceContext::DrawIndexedInstanced([In] unsigned int IndexCountPerInstance,[In] unsigned int InstanceCount,[In] unsigned int StartIndexLocation,[In] int BaseVertexLocation,[In] unsigned int StartInstanceLocation) + ID3D11DeviceContext::DrawIndexedInstanced +
    + + +

    Draw non-indexed, instanced primitives.

    +
    +

    Number of vertices to draw.

    +

    Number of instances to draw.

    +

    Index of the first vertex.

    +

    A value added to each index before reading per-instance data from a vertex buffer.

    + +

    A draw API submits work to the rendering pipeline.

    Instancing may extend performance by reusing the same geometry to draw multiple objects in a scene. One example of instancing could be to draw the same object with different positions and colors.

    The vertex data for an instanced draw call normally comes from a vertex buffer that is bound to the pipeline. However, you could also provide the vertex data from a shader that has instanced data identified with a system-value semantic (SV_InstanceID).

    +
    + + ff476412 + void ID3D11DeviceContext::DrawInstanced([In] unsigned int VertexCountPerInstance,[In] unsigned int InstanceCount,[In] unsigned int StartVertexLocation,[In] unsigned int StartInstanceLocation) + ID3D11DeviceContext::DrawInstanced +
    + + +

    Mark the beginning of a series of commands.

    +
    +

    A reference to an interface.

    + +

    Use to mark the ending of the series of commands.

    +
    + + ff476386 + void ID3D11DeviceContext::Begin([In] ID3D11Asynchronous* pAsync) + ID3D11DeviceContext::Begin +
    + + +

    Mark the end of a series of commands.

    +
    +

    A reference to an interface.

    + +

    Use to mark the beginning of the series of commands.

    +
    + + ff476422 + void ID3D11DeviceContext::End([In] ID3D11Asynchronous* pAsync) + ID3D11DeviceContext::End +
    + + +

    Get data from the graphics processing unit (GPU) asynchronously.

    +
    +

    A reference to an interface for the object about which GetData retrieves data.

    +

    Address of memory that will receive the data. If null, GetData will be used only to check status. The type of data output depends on the type of asynchronous interface.

    +

    Size of the data to retrieve or 0. Must be 0 when pData is null.

    +

    Optional flags. Can be 0 or any combination of the flags enumerated by .

    +

    This method returns one of the Direct3D 11 Return Codes. A return value of indicates that the data at pData is available for the calling application to access. A return value of S_FALSE indicates that the data is not yet available. If the data is not yet available, the application must call GetData until the data is available.

    + +

    Queries in a deferred context are limited to predicated drawing. That is, you cannot call on a deferred context to get data about a query; you can only call GetData on the immediate context to get data about a query. For predicated drawing, the results of a predication-type query are used by the GPU and not returned to an application. For more information about predication and predicated drawing, see D3D11DeviceContext::SetPredication.

    GetData retrieves the data that the runtime collected between calls to and . Certain queries only require a call to in which case the data returned by GetData is accurate up to the last call to . For information about the queries that only require a call to and about the type of data that GetData retrieves for each query, see .

    If DataSize is 0, GetData is only used to check status.

    An application gathers counter data by calling , issuing some graphics commands, calling , and then calling to get data about what happened in between the Begin and End calls. For information about performance counter types, see .

    +
    + + ff476428 + HRESULT ID3D11DeviceContext::GetData([In] ID3D11Asynchronous* pAsync,[Out, Buffer, Optional] void* pData,[In] unsigned int DataSize,[In] D3D11_ASYNC_GETDATA_FLAG GetDataFlags) + ID3D11DeviceContext::GetData +
    + + +

    Set a rendering predicate.

    +
    +

    A reference to the interface that represents the rendering predicate. A null value indicates "no" predication; in this case, the value of PredicateValue is irrelevant but will be preserved for .

    +

    If TRUE, rendering will be affected by when the predicate's conditions are met. If , rendering will be affected when the conditions are not met.

    + +

    The predicate must be in the "issued" or "signaled" state to be used for predication. While the predicate is set for predication, calls to and are invalid.

    Use this method to denote that subsequent rendering and resource manipulation commands are not actually performed if the resulting predicate data of the predicate is equal to the PredicateValue. However, some predicates are only hints, so they may not actually prevent operations from being performed.

    The primary usefulness of predication is to allow an application to issue rendering and resource manipulation commands without taking the performance hit of spinning, waiting for to return. So, predication can occur while returns S_FALSE. Another way to think of it: an application can also use predication as a fallback, if it is possible that returns S_FALSE. If returns , the application can skip calling the rendering and resource manipulation commands manually with it's own application logic.

    Rendering and resource manipulation commands for Direct3D?11 include these Draw, Dispatch, Copy, Update, Clear, Generate, and Resolve operations.

    • Draw
    • DrawAuto
    • DrawIndexed
    • DrawIndexedInstanced
    • DrawIndexedInstancedIndirect
    • DrawInstanced
    • DrawInstancedIndirect
    • Dispatch
    • DispatchIndirect
    • CopyResource
    • CopyStructureCount
    • CopySubresourceRegion
    • CopySubresourceRegion1
    • CopyTiles
    • CopyTileMappings
    • UpdateSubresource
    • UpdateSubresource1
    • UpdateTiles
    • UpdateTileMappings
    • ClearRenderTargetView
    • ClearUnorderedAccessViewFloat
    • ClearUnorderedAccessViewUint
    • ClearView
    • ClearDepthStencilView
    • GenerateMips
    • ResolveSubresource

    You can set a rendering predicate on an immediate or a deferred context. For info about immediate and deferred contexts, see Immediate and Deferred Rendering.

    +
    + + ff476481 + void ID3D11DeviceContext::SetPredication([In, Optional] ID3D11Predicate* pPredicate,[In] BOOL PredicateValue) + ID3D11DeviceContext::SetPredication +
    + + +

    Draw geometry of an unknown size.

    +
    + +

    A draw API submits work to the rendering pipeline. This API submits work of an unknown size that was processed by the input assembler, vertex shader, and stream-output stages; the work may or may not have gone through the geometry-shader stage.

    After data has been streamed out to stream-output stage buffers, those buffers can be again bound to the Input Assembler stage at input slot 0 and DrawAuto will draw them without the application needing to know the amount of data that was written to the buffers. A measurement of the amount of data written to the SO stage buffers is maintained internally when the data is streamed out. This means that the CPU does not need to fetch the measurement before re-binding the data that was streamed as input data. Although this amount is tracked internally, it is still the responsibility of applications to use input layouts to describe the format of the data in the SO stage buffers so that the layouts are available when the buffers are again bound to the input assembler.

    The following diagram shows the DrawAuto process.

    Calling DrawAuto does not change the state of the streaming-output buffers that were bound again as inputs.

    DrawAuto only works when drawing with one input buffer bound as an input to the IA stage at slot 0. Applications must create the SO buffer resource with both binding flags, and .

    This API does not support indexing or instancing.

    If an application needs to retrieve the size of the streaming-output buffer, it can query for statistics on streaming output by using .

    +
    + + ff476408 + void ID3D11DeviceContext::DrawAuto() + ID3D11DeviceContext::DrawAuto +
    + + +

    Draw indexed, instanced, GPU-generated primitives.

    +
    +

    A reference to an , which is a buffer containing the GPU generated primitives.

    +

    Offset in pBufferForArgs to the start of the GPU generated primitives.

    + +

    When an application creates a buffer that is associated with the interface that pBufferForArgs points to, the application must set the flag in the MiscFlags member of the structure that describes the buffer. To create the buffer, the application calls the method and in this call passes a reference to in the pDesc parameter.

    Windows?Phone?8: This API is supported.

    +
    + + ff476411 + void ID3D11DeviceContext::DrawIndexedInstancedIndirect([In] ID3D11Buffer* pBufferForArgs,[In] unsigned int AlignedByteOffsetForArgs) + ID3D11DeviceContext::DrawIndexedInstancedIndirect +
    + + +

    Draw instanced, GPU-generated primitives.

    +
    +

    A reference to an , which is a buffer containing the GPU generated primitives.

    +

    Offset in pBufferForArgs to the start of the GPU generated primitives.

    + +

    When an application creates a buffer that is associated with the interface that pBufferForArgs points to, the application must set the flag in the MiscFlags member of the structure that describes the buffer. To create the buffer, the application calls the method and in this call passes a reference to in the pDesc parameter.

    +
    + + ff476413 + void ID3D11DeviceContext::DrawInstancedIndirect([In] ID3D11Buffer* pBufferForArgs,[In] unsigned int AlignedByteOffsetForArgs) + ID3D11DeviceContext::DrawInstancedIndirect +
    + + +

    Execute a command list from a thread group.

    +
    +

    The number of groups dispatched in the x direction. ThreadGroupCountX must be less than or equal to (65535).

    +

    The number of groups dispatched in the y direction. ThreadGroupCountY must be less than or equal to (65535).

    +

    The number of groups dispatched in the z direction. ThreadGroupCountZ must be less than or equal to (65535). In feature level 10 the value for ThreadGroupCountZ must be 1.

    + +

    You call the Dispatch method to execute commands in a compute shader. A compute shader can be run on many threads in parallel, within a thread group. Index a particular thread, within a thread group using a 3D vector given by (x,y,z).

    In the following illustration, assume a thread group with 50 threads where the size of the group is given by (5,5,2). A single thread is identified from a thread group with 50 threads in it, using the vector (4,1,1).

    The following illustration shows the relationship between the parameters passed to , Dispatch(5,3,2), the values specified in the numthreads attribute, numthreads(10,8,3), and values that will passed to the compute shader for the thread-related system values + (SV_GroupIndex,SV_DispatchThreadID,SV_GroupThreadID,SV_GroupID).

    + + + ff476405 + void ID3D11DeviceContext::Dispatch([In] unsigned int ThreadGroupCountX,[In] unsigned int ThreadGroupCountY,[In] unsigned int ThreadGroupCountZ) + ID3D11DeviceContext::Dispatch + + +

    +

    Execute a command list over one or more thread groups.

    +
    +

    A reference to an , which must be loaded with data that matches the argument list for .

    +

    A byte-aligned offset between the start of the buffer and the arguments.

    + +

    You call the DispatchIndirect method to execute commands in a compute shader.

    When an application creates a buffer that is associated with the interface that pBufferForArgs points to, the application must set the flag in the MiscFlags member of the structure that describes the buffer. To create the buffer, the application calls the method and in this call passes a reference to in the pDesc parameter.

    +
    + + ff476406 + void ID3D11DeviceContext::DispatchIndirect([In] ID3D11Buffer* pBufferForArgs,[In] unsigned int AlignedByteOffsetForArgs) + ID3D11DeviceContext::DispatchIndirect +
    + + +

    Copy a region from a source resource to a destination resource.

    +
    +

    A reference to the destination resource (see ).

    +

    Destination subresource index.

    +

    The x-coordinate of the upper left corner of the destination region.

    +

    The y-coordinate of the upper left corner of the destination region. For a 1D subresource, this must be zero.

    +

    The z-coordinate of the upper left corner of the destination region. For a 1D or 2D subresource, this must be zero.

    +

    A reference to the source resource (see ).

    +

    Source subresource index.

    +

    A reference to a 3D box (see ) that defines the source subresource that can be copied. If null, the entire source subresource is copied. The box must fit within the source resource.

    An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, CopySubresourceRegion doesn't perform a copy operation.

    + +

    The source box must be within the size of the source resource. The destination offsets, (x, y, and z), allow the source box to be offset when writing into the destination resource; however, the dimensions of the source box and the offsets must be within the size of the resource. If you try and copy outside the destination resource or specify a source box that is larger than the source resource, the behavior of CopySubresourceRegion is undefined. If you created a device that supports the debug layer, the debug output reports an error on this invalid CopySubresourceRegion call. Invalid parameters to CopySubresourceRegion cause undefined behavior and might result in incorrect rendering, clipping, no copy, or even the removal of the rendering device.

    If the resources are buffers, all coordinates are in bytes; if the resources are textures, all coordinates are in texels. D3D11CalcSubresource is a helper function for calculating subresource indexes.

    CopySubresourceRegion performs the copy on the GPU (similar to a memcpy by the CPU). As a consequence, the source and destination resources:

    • Must be different subresources (although they can be from the same resource).
    • Must be the same type.
    • Must have compatible DXGI formats (identical or from the same type group). For example, a texture can be copied to an texture since both of these formats are in the group. CopySubresourceRegion can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.
    • May not be currently mapped.

    CopySubresourceRegion only supports copy; it does not support any stretch, color key, or blend. CopySubresourceRegion can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.

    If your app needs to copy an entire resource, we recommend to use instead.

    CopySubresourceRegion is an asynchronous call, which may be added to the command-buffer queue, this attempts to remove pipeline stalls that may occur when copying data. For more information about pipeline stalls, see performance considerations.

    Note??Applies only to feature level 9_x hardware If you use or CopySubresourceRegion to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a null source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.?Note??Applies only to feature level 9_x hardware You can't use CopySubresourceRegion to copy mipmapped volume textures.?Note??Applies only to feature levels 9_x Subresources created with the flag can only be used as a source for CopySubresourceRegion.?Note??If you use CopySubresourceRegion with a depth-stencil buffer or a multisampled resource, you must copy the whole subresource. In this situation, you must pass 0 to the DstX, DstY, and DstZ parameters and null to the pSrcBox parameter. In addition, source and destination resources, which are represented by the pSrcResource and pDstResource parameters, should have identical sample count values.? +
    + + ff476394 + void ID3D11DeviceContext::CopySubresourceRegion([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In] unsigned int DstX,[In] unsigned int DstY,[In] unsigned int DstZ,[In] ID3D11Resource* pSrcResource,[In] unsigned int SrcSubresource,[In, Optional] const D3D11_BOX* pSrcBox) + ID3D11DeviceContext::CopySubresourceRegion +
    + + +

    Copy the entire contents of the source resource to the destination resource using the GPU.

    +
    +

    A reference to the interface that represents the destination resource.

    +

    A reference to the interface that represents the source resource.

    + +

    This method is unusual in that it causes the GPU to perform the copy operation (similar to a memcpy by the CPU). As a result, it has a few restrictions designed for improving performance. For instance, the source and destination resources:

    • Must be different resources.
    • Must be the same type.
    • Must have identical dimensions (including width, height, depth, and size as appropriate).
    • Must have compatible DXGI formats, which means the formats must be identical or at least from the same type group. For example, a texture can be copied to an texture since both of these formats are in the group. CopyResource can copy between a few format types. For more info, see Format Conversion using Direct3D 10.1.
    • Can't be currently mapped.

    CopyResource only supports copy; it doesn't support any stretch, color key, or blend. CopyResource can reinterpret the resource data between a few format types. For more info, see Format Conversion using Direct3D 10.1.

    You can't use an Immutable resource as a destination. You can use a depth-stencil resource as either a source or a destination provided that the feature level is or greater. For feature levels 9_x, resources created with the flag can only be used as a source for CopyResource. Resources created with multisampling capability (see ) can be used as source and destination only if both source and destination have identical multisampled count and quality. If source and destination differ in multisampled count and quality or if one is multisampled and the other is not multisampled, the call to fails. Use to resolve a multisampled resource to a resource that is not multisampled.

    The method is an asynchronous call, which may be added to the command-buffer queue. This attempts to remove pipeline stalls that may occur when copying data. For more info, see performance considerations.

    We recommend to use instead if you only need to copy a portion of the data in a resource.

    +
    + + ff476392 + void ID3D11DeviceContext::CopyResource([In] ID3D11Resource* pDstResource,[In] ID3D11Resource* pSrcResource) + ID3D11DeviceContext::CopyResource +
    + + +

    The CPU copies data from memory to a subresource created in non-mappable memory.

    +
    +

    A reference to the destination resource (see ).

    +

    A zero-based index, that identifies the destination subresource. See D3D11CalcSubresource for more details.

    +

    A reference to a box that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. If null, the data is written to the destination subresource with no offset. The dimensions of the source must fit the destination (see ).

    An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, UpdateSubresource doesn't perform an update operation.

    +

    A reference to the source data in memory.

    +

    The size of one row of the source data.

    +

    The size of one depth slice of source data.

    + +

    For a shader-constant buffer; set pDstBox to null. It is not possible to use this method to partially update a shader-constant buffer.

    A resource cannot be used as a destination if:

    • the resource is created with immutable or dynamic usage.
    • the resource is created as a depth-stencil resource.
    • the resource is created with multisampling capability (see ).

    When UpdateSubresource returns, the application is free to change or even free the data pointed to by pSrcData because the method has already copied/snapped away the original contents.

    The performance of UpdateSubresource depends on whether or not there is contention for the destination resource. For example, contention for a vertex buffer resource occurs when the application executes a Draw call and later calls UpdateSubresource on the same vertex buffer before the Draw call is actually executed by the GPU.

    • When there is contention for the resource, UpdateSubresource will perform 2 copies of the source data. First, the data is copied by the CPU to a temporary storage space accessible by the command buffer. This copy happens before the method returns. A second copy is then performed by the GPU to copy the source data into non-mappable memory. This second copy happens asynchronously because it is executed by GPU when the command buffer is flushed.
    • When there is no resource contention, the behavior of UpdateSubresource is dependent on which is faster (from the CPU's perspective): copying the data to the command buffer and then having a second copy execute when the command buffer is flushed, or having the CPU copy the data to the final resource location. This is dependent on the architecture of the underlying system.
    Note??Applies only to feature level 9_x hardware If you use UpdateSubresource or to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a null source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.?

    To better understand the source row pitch and source depth pitch parameters, the following illustration shows a 3D volume texture.

    Each block in this visual represents an element of data, and the size of each element is dependent on the resource's format. For example, if the resource format is , the size of each element would be 128 bits, or 16 bytes. This 3D volume texture has a width of two, a height of three, and a depth of four.

    To calculate the source row pitch and source depth pitch for a given resource, use the following formulas:

    • Source Row Pitch = [size of one element in bytes] * [number of elements in one row]
    • Source Depth Pitch = [Source Row Pitch] * [number of rows (height)]

    In the case of this example 3D volume texture where the size of each element is 16 bytes, the formulas are as follows:

    • Source Row Pitch = 16 * 2 = 32
    • Source Depth Pitch = 16 * 2 * 3 = 96

    The following illustration shows the resource as it is laid out in memory.

    For example, the following code snippet shows how to specify a destination region in a 2D texture. Assume the destination texture is 512x512 and the operation will copy the data pointed to by pData to [(120,100)..(200,220)] in the destination texture. Also assume that rowPitch has been initialized with the proper value (as explained above). front and back are set to 0 and 1 respectively, because by having front equal to back, the box is technically empty.

      destRegion;	
    +            destRegion.left = 120;	
    +            destRegion.right = 200;	
    +            destRegion.top = 100;	
    +            destRegion.bottom = 220;	
    +            destRegion.front = 0;	
    +            destRegion.back = 1; pd3dDeviceContext->UpdateSubresource( pDestTexture, 0, &destRegion, pData, rowPitch, 0 );	
    +            

    The 1D case is similar. The following snippet shows how to specify a destination region in a 1D texture. Use the same assumptions as above, except that the texture is 512 in length.

      destRegion;	
    +            destRegion.left = 120;	
    +            destRegion.right = 200;	
    +            destRegion.top = 0;	
    +            destRegion.bottom = 1;	
    +            destRegion.front = 0;	
    +            destRegion.back = 1; pd3dDeviceContext->UpdateSubresource( pDestTexture, 0, &destRegion, pData, rowPitch, 0 );	
    +            

    For info about various resource types and how UpdateSubresource might work with each resource type, see Introduction to a Resource in Direct3D 11.

    +
    + + ff476486 + void ID3D11DeviceContext::UpdateSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch) + ID3D11DeviceContext::UpdateSubresource +
    + + +

    Copies data from a buffer holding variable length data.

    +
    +

    Pointer to . This can be any buffer resource that other copy commands, such as or , are able to write to.

    +

    Offset from the start of pDstBuffer to write 32-bit UINT structure (vertex) count from pSrcView.

    +

    Pointer to an of a Structured Buffer resource created with either or specified when the UAV was created. These types of resources have hidden counters tracking "how many" records have been written.

    + + ff476393 + void ID3D11DeviceContext::CopyStructureCount([In] ID3D11Buffer* pDstBuffer,[In] unsigned int DstAlignedByteOffset,[In] ID3D11UnorderedAccessView* pSrcView) + ID3D11DeviceContext::CopyStructureCount +
    + + +

    Set all the elements in a render target to one value.

    +
    +

    Pointer to the render target.

    +

    A 4-component array that represents the color to fill the render target with.

    + +

    Applications that wish to clear a render target to a specific integer value bit pattern should render a screen-aligned quad instead of using this method. The reason for this is because this method accepts as input a floating point value, which may not have the same bit pattern as the original integer.

    Differences between Direct3D 9 and Direct3D 11/10:

    Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.

    ?

    When using D3D_FEATURE_LEVEL_9_x, ClearRenderTargetView only clears the first array slice in the render target view. This can impact (for example) cube map rendering scenarios. Applications should create a render target view for each face or array slice, then clear each view individually.

    +
    + + ff476388 + void ID3D11DeviceContext::ClearRenderTargetView([In] ID3D11RenderTargetView* pRenderTargetView,[In] const SHARPDX_COLOR4* ColorRGBA) + ID3D11DeviceContext::ClearRenderTargetView +
    + + +

    Clears an unordered access resource with bit-precise values.

    +
    + No documentation. + No documentation. + +

    This API copies the lower ni bits from each array element i to the corresponding channel, where ni is the number of bits in the ith channel of the resource format (for example, R8G8B8_FLOAT has 8 bits for the first 3 channels). This works on any UAV with no format conversion. For a raw or structured buffer view, only the first array element value is used.

    +
    + + ff476391 + void ID3D11DeviceContext::ClearUnorderedAccessViewUint([In] ID3D11UnorderedAccessView* pUnorderedAccessView,[In] const SHARPDX_INT4* Values) + ID3D11DeviceContext::ClearUnorderedAccessViewUint +
    + + +

    Clears an unordered access resource with a float value.

    +
    + No documentation. + No documentation. + +

    This API works on FLOAT, UNORM, and SNORM unordered access views (UAVs), with format conversion from FLOAT to *NORM where appropriate. On other UAVs, the operation is invalid and the call will not reach the driver.

    +
    + + ff476390 + void ID3D11DeviceContext::ClearUnorderedAccessViewFloat([In] ID3D11UnorderedAccessView* pUnorderedAccessView,[In] const SHARPDX_VECTOR4* Values) + ID3D11DeviceContext::ClearUnorderedAccessViewFloat +
    + + +

    Clears the depth-stencil resource.

    +
    +

    Pointer to the depth stencil to be cleared.

    +

    Identify the type of data to clear (see ).

    +

    Clear the depth buffer with this value. This value will be clamped between 0 and 1.

    +

    Clear the stencil buffer with this value.

    + +

    Differences between Direct3D 9 and Direct3D 11/10:

    Unlike Direct3D 9, the full extent of the resource view is always cleared. Viewport and scissor settings are not applied.

    ?

    +
    + + ff476387 + void ID3D11DeviceContext::ClearDepthStencilView([In] ID3D11DepthStencilView* pDepthStencilView,[In] D3D11_CLEAR_FLAG ClearFlags,[In] float Depth,[In] unsigned char Stencil) + ID3D11DeviceContext::ClearDepthStencilView +
    + + +

    Generates mipmaps for the given shader resource.

    +
    +

    A reference to an interface that represents the shader resource.

    + +

    You can call GenerateMips on any shader-resource view to generate the lower mipmap levels for the shader resource. GenerateMips uses the largest mipmap level of the view to recursively generate the lower levels of the mip and stops with the smallest level that is specified by the view. If the base resource wasn't created with , , and , the call to GenerateMips has no effect.

    Feature levels 9.1, 9.2, and 9.3 can't support automatic generation of mipmaps for 3D (volume) textures.

    Video adapters that support feature level 9.1 and higher support generating mipmaps if you use any of these formats:

     	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            

    Video adapters that support feature level 9.2 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature level 9.1:

     	
    +            	
    +            	
    +            	
    +            	
    +            

    Video adapters that support feature level 9.3 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1 and 9.2:

     	
    +            DXGI_FORMAT_B4G4R4A4 (optional)	
    +            

    Video adapters that support feature level 10 and higher support generating mipmaps if you use any of these formats in addition to any of the formats for feature levels 9.1, 9.2, and 9.3:

      (optional)	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +            	
    +             (optional)	
    +            

    For all other unsupported formats, GenerateMips will silently fail.

    +
    + + ff476426 + void ID3D11DeviceContext::GenerateMips([In] ID3D11ShaderResourceView* pShaderResourceView) + ID3D11DeviceContext::GenerateMips +
    + + +

    Sets the minimum level-of-detail (LOD) for a resource.

    +
    +

    A reference to an that represents the resource.

    +

    The level-of-detail, which ranges between 0 and the maximum number of mipmap levels of the resource. For example, the maximum number of mipmap levels of a 1D texture is specified in the MipLevels member of the structure.

    + +

    To use a resource with SetResourceMinLOD, you must set the flag when you create that resource.

    For Direct3D 10 and Direct3D 10.1, when sampling from a texture resource in a shader, the sampler can define a minimum LOD clamp to force sampling from less detailed mip levels. For Direct3D 11, this functionality is extended from the sampler to the entire resource. Therefore, the application can specify the highest-resolution mip level of a resource that is available for access. This restricts the set of mip levels that are required to be resident in GPU memory, thereby saving memory.

    The set of mip levels resident per-resource in GPU memory can be specified by the user.

    Minimum LOD affects all of the resident mip levels. Therefore, only the resident mip levels can be updated and read from.

    All methods that access texture resources must adhere to minimum LOD clamps.

    Empty-set accesses are handled as out-of-bounds cases.

    +
    + + ff476482 + void ID3D11DeviceContext::SetResourceMinLOD([In] ID3D11Resource* pResource,[In] float MinLOD) + ID3D11DeviceContext::SetResourceMinLOD +
    + + +

    Gets the minimum level-of-detail (LOD).

    +
    +

    A reference to an which represents the resource.

    +

    Returns the minimum LOD.

    + + ff476430 + float ID3D11DeviceContext::GetResourceMinLOD([In] ID3D11Resource* pResource) + ID3D11DeviceContext::GetResourceMinLOD +
    + + +

    Copy a multisampled resource into a non-multisampled resource.

    +
    +

    Destination resource. Must be a created with the flag and be single-sampled. See .

    +

    A zero-based index, that identifies the destination subresource. Use D3D11CalcSubresource to calculate the index.

    +

    Source resource. Must be multisampled.

    +

    The source subresource of the source resource.

    +

    A that indicates how the multisampled resource will be resolved to a single-sampled resource. See remarks.

    + +

    This API is most useful when re-using the resulting rendertarget of one render pass as an input to a second render pass.

    The source and destination resources must be the same resource type and have the same dimensions. In addition, they must have compatible formats. There are three scenarios for this:

    ScenarioRequirements
    Source and destination are prestructured and typedBoth the source and destination must have identical formats and that format must be specified in the Format parameter.
    One resource is prestructured and typed and the other is prestructured and typelessThe typed resource must have a format that is compatible with the typeless resource (i.e. the typed resource is and the typeless resource is ). The format of the typed resource must be specified in the Format parameter.
    Source and destination are prestructured and typelessBoth the source and desintation must have the same typeless format (i.e. both must have ), and the Format parameter must specify a format that is compatible with the source and destination (i.e. if both are then could be specified in the Format parameter).

    For example, given the format:

    • The source (or dest) format could be
    • The dest (or source) format could be

    ?

    +
    + + ff476474 + void ID3D11DeviceContext::ResolveSubresource([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In] ID3D11Resource* pSrcResource,[In] unsigned int SrcSubresource,[In] DXGI_FORMAT Format) + ID3D11DeviceContext::ResolveSubresource +
    + + +

    Queues commands from a command list onto a device.

    +
    +

    A reference to an interface that encapsulates a command list.

    +

    A Boolean flag that determines whether the target context state is saved prior to and restored after the execution of a command list. Use TRUE to indicate that the runtime needs to save and restore the state. Use to indicate that no state shall be saved or restored, which causes the target context to return to its default state after the command list executes. Applications should typically use unless they will restore the state to be nearly equivalent to the state that the runtime would restore if TRUE were passed. When applications use , they can avoid unnecessary and inefficient state transitions.

    + +

    Use this method to play back a command list that was recorded by a deferred context on any thread.

    A call to ExecuteCommandList of a command list from a deferred context onto the immediate context is required for the recorded commands to be executed on the graphics processing unit (GPU). A call to ExecuteCommandList of a command list from a deferred context onto another deferred context can be used to merge recorded lists. But to run the commands from the merged deferred command list on the GPU, you need to execute them on the immediate context.

    This method performs some runtime validation related to queries. Queries that are begun in a device context cannot be manipulated indirectly by executing a command list (that is, Begin or End was invoked against the same query by the deferred context which generated the command list). If such a condition occurs, the ExecuteCommandList method does not execute the command list. However, the state of the device context is still maintained, as would be expected ( is performed, unless the application indicates to preserve the device context state).

    Windows?Phone?8: This API is supported.

    +
    + + ff476423 + void ID3D11DeviceContext::ExecuteCommandList([In] ID3D11CommandList* pCommandList,[In] BOOL RestoreContextState) + ID3D11DeviceContext::ExecuteCommandList +
    + + +

    Get the rendering predicate state.

    +
    +

    Address of a boolean to fill with the predicate comparison value. upon device creation.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476429 + void ID3D11DeviceContext::GetPredication([Out, Optional] ID3D11Predicate** ppPredicate,[Out, Optional] BOOL* pPredicateValue) + ID3D11DeviceContext::GetPredication +
    + + +

    Restore all default settings.

    +
    + +

    This method resets any device context to the default settings. This sets all input/output resource slots, shaders, input layouts, predications, scissor rectangles, depth-stencil state, rasterizer state, blend state, sampler state, and viewports to null. The primitive topology is set to UNDEFINED.

    For a scenario where you would like to clear a list of commands recorded so far, call and throw away the resulting .

    +
    + + ff476389 + void ID3D11DeviceContext::ClearState() + ID3D11DeviceContext::ClearState +
    + + +

    Sends queued-up commands in the command buffer to the graphics processing unit (GPU).

    +
    + +

    Most applications don't need to call this method. If an application calls this method when not necessary, it incurs a performance penalty. Each call to Flush incurs a significant amount of overhead.

    When Microsoft Direct3D state-setting, present, or draw commands are called by an application, those commands are queued into an internal command buffer. Flush sends those commands to the GPU for processing. Typically, the Direct3D runtime sends these commands to the GPU automatically whenever the runtime determines that they need to be sent, such as when the command buffer is full or when an application maps a resource. Flush sends the commands manually.

    We recommend that you use Flush when the CPU waits for an arbitrary amount of time (such as when you call the Sleep function).

    Because Flush operates asynchronously, it can return either before or after the GPU finishes executing the queued graphics commands. However, the graphics commands eventually always complete. You can call the method with the value to create an event query; you can then use that event query in a call to the method to determine when the GPU is finished processing the graphics commands. +

    Microsoft Direct3D?11 defers the destruction of objects. Therefore, an application can't rely upon objects immediately being destroyed. By calling Flush, you destroy any objects whose destruction was deferred. If an application requires synchronous destruction of an object, we recommend that the application release all its references, call , and then call Flush.

    +
    + + ff476425 + void ID3D11DeviceContext::Flush() + ID3D11DeviceContext::Flush +
    + + +

    Gets the type of device context.

    +
    +

    A member of that indicates the type of device context.

    + + ff476431 + D3D11_DEVICE_CONTEXT_TYPE ID3D11DeviceContext::GetType() + ID3D11DeviceContext::GetType +
    + + +

    Gets the initialization flags associated with the current deferred context.

    +
    + No documentation. + +

    The GetContextFlags method gets the flags that were supplied to the ContextFlags parameter of ; however, the context flag is reserved for future use.

    +
    + + ff476427 + unsigned int ID3D11DeviceContext::GetContextFlags() + ID3D11DeviceContext::GetContextFlags +
    + + +

    Create a command list and record graphics commands into it.

    +
    +

    A Boolean flag that determines whether the runtime saves deferred context state before it executes FinishCommandList and restores it afterwards. Use TRUE to indicate that the runtime needs to save and restore the state. Use to indicate that the runtime will not save or restore any state. In this case, the deferred context will return to its default state after the call to FinishCommandList completes. For information about default state, see . Typically, use unless you restore the state to be nearly equivalent to the state that the runtime would restore if you passed TRUE. When you use , you can avoid unnecessary and inefficient state transitions.

    Note?? This parameter does not affect the command list that the current call to FinishCommandList returns. However, this parameter affects the command list of the next call to FinishCommandList on the same deferred context. ?
    +

    Upon completion of the method, the passed reference to an interface reference is initialized with the recorded command list information. The resulting object is immutable and can only be used with .

    +

    Returns if successful; otherwise, returns one of the following:

    • Returns if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred. If this error occurs, you should destroy and recreate the device.
    • Returns if FinishCommandList cannot be called from the current context. See remarks.
    • Returns E_OUTOFMEMORY if the application has exhausted available memory.
    + +

    Create a command list from a deferred context and record commands into it by calling FinishCommandList. Play back a command list with an immediate context by calling .

    Immediate context state is cleared before and after a command list is executed. A command list has no concept of inheritance. Each call to FinishCommandList will record only the state set since any previous call to FinishCommandList.

    For example, the state of a device context is its render state or pipeline state. To retrieve device context state, an application can call or .

    For more information about how to use FinishCommandList, see How to: Record a Command List.

    Windows?Phone?8: This API is supported.

    +
    + + ff476424 + HRESULT ID3D11DeviceContext::FinishCommandList([In] BOOL RestoreDeferredContextState,[Out, Optional] ID3D11CommandList** ppCommandList) + ID3D11DeviceContext::FinishCommandList +
    + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + +

    Bind a single vertex buffer to the input-assembler stage.

    +
    +

    The first input slot for binding. The first vertex buffer is explicitly bound to the start slot; this causes each additional vertex buffer in the array to be implicitly bound to each subsequent input slot. The maximum of 16 or 32 input slots (ranges from 0 to - 1) are available; the maximum number of input slots depends on the feature level.

    +

    A . The vertex buffer must have been created with the flag.

    /// +

    For information about creating vertex buffers, see Create a Vertex Buffer.

    Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + ff476456 + void ID3D11DeviceContext::IASetVertexBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer] const void* ppVertexBuffers,[In, Buffer] const void* pStrides,[In, Buffer] const void* pOffsets) + ID3D11DeviceContext::IASetVertexBuffers +
    + + +

    Bind an array of vertex buffers to the input-assembler stage.

    +
    +

    The first input slot for binding. The first vertex buffer is explicitly bound to the start slot; this causes each additional vertex buffer in the array to be implicitly bound to each subsequent input slot. The maximum of 16 or 32 input slots (ranges from 0 to - 1) are available; the maximum number of input slots depends on the feature level.

    +

    A reference to an array of . The vertex buffers must have been created with the flag.

    /// +

    For information about creating vertex buffers, see Create a Vertex Buffer.

    Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + ff476456 + void ID3D11DeviceContext::IASetVertexBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer] const void* ppVertexBuffers,[In, Buffer] const void* pStrides,[In, Buffer] const void* pOffsets) + ID3D11DeviceContext::IASetVertexBuffers +
    + + +

    Bind an array of vertex buffers to the input-assembler stage.

    +
    +

    The first input slot for binding. The first vertex buffer is explicitly bound to the start slot; this causes each additional vertex buffer in the array to be implicitly bound to each subsequent input slot. The maximum of 16 or 32 input slots (ranges from 0 to - 1) are available; the maximum number of input slots depends on the feature level.

    +

    A reference to an array of vertex buffers (see ). The vertex buffers must have been created with the flag.

    +

    Pointer to an array of stride values; one stride value for each buffer in the vertex-buffer array. Each stride is the size (in bytes) of the elements that are to be used from that vertex buffer.

    +

    Pointer to an array of offset values; one offset value for each buffer in the vertex-buffer array. Each offset is the number of bytes between the first element of a vertex buffer and the first element that will be used.

    + +

    For information about creating vertex buffers, see Create a Vertex Buffer.

    Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + ff476456 + void ID3D11DeviceContext::IASetVertexBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer] const void* ppVertexBuffers,[In, Buffer] const void* pStrides,[In, Buffer] const void* pOffsets) + ID3D11DeviceContext::IASetVertexBuffers +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant DefaultIndexBufferOffsetInBytes. + D3D11_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES + + + Constant DefaultPrimitiveTopology. + D3D11_IA_DEFAULT_PRIMITIVE_TOPOLOGY + + + Constant DefaultVertexBufferOffsetInBytes. + D3D11_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES + + + Constant IndexInputResourceSlotCount. + D3D11_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT + + + Constant InstanceIdBitCount. + D3D11_IA_INSTANCE_ID_BIT_COUNT + + + Constant IntegerArithmeticBitCount. + D3D11_IA_INTEGER_ARITHMETIC_BIT_COUNT + + + Constant PatchMaximumControlPointCount. + D3D11_IA_PATCH_MAX_CONTROL_POINT_COUNT + + + Constant PrimitiveIdBitCount. + D3D11_IA_PRIMITIVE_ID_BIT_COUNT + + + Constant VertexIdBitCount. + D3D11_IA_VERTEX_ID_BIT_COUNT + + + Constant VertexInputResourceSlotCount. + D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT + + + Constant VertexInputStructureElementsComponents. + D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS + + + Constant VertexInputStructureElementCount. + D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT + + + +

    Get or sets a reference to the input-layout object that is bound to the input-assembler stage.

    +
    + +

    For information about creating an input-layout object, see Creating the Input-Layout Object.

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476450 + IAGetInputLayout / IASetInputLayout + IAGetInputLayout + void ID3D11DeviceContext::IAGetInputLayout([Out, Optional] ID3D11InputLayout** ppInputLayout) +
    + + +

    Get or sets information about the primitive type, and data order that describes input data for the input assembler stage.

    +
    + + ff476451 + IAGetPrimitiveTopology / IASetPrimitiveTopology + IAGetPrimitiveTopology + void ID3D11DeviceContext::IAGetPrimitiveTopology([Out] D3D_PRIMITIVE_TOPOLOGY* pTopology) +
    + + +

    Bind an input-layout object to the input-assembler stage.

    +
    +

    A reference to the input-layout object (see ), which describes the input buffers that will be read by the IA stage.

    + +

    Input-layout objects describe how vertex buffer data is streamed into the IA pipeline stage. To create an input-layout object, call .

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476454 + void ID3D11DeviceContext::IASetInputLayout([In, Optional] ID3D11InputLayout* pInputLayout) + ID3D11DeviceContext::IASetInputLayout +
    + + +

    Bind an array of vertex buffers to the input-assembler stage.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    For info about creating vertex buffers, see How to: Create a Vertex Buffer.

    Calling this method using a buffer that is currently bound for writing (that is, bound to the stream output pipeline stage) will effectively bind null instead because a buffer can't be bound as both an input and an output at the same time.

    The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    Windows?Phone?8: This API is supported.

    +
    + + ff476456 + void ID3D11DeviceContext::IASetVertexBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const void* ppVertexBuffers,[In, Buffer, Optional] const void* pStrides,[In, Buffer, Optional] const void* pOffsets) + ID3D11DeviceContext::IASetVertexBuffers +
    + + +

    Bind an index buffer to the input-assembler stage.

    +
    +

    A reference to an object, that contains indices. The index buffer must have been created with the flag.

    +

    A that specifies the format of the data in the index buffer. The only formats allowed for index buffer data are 16-bit () and 32-bit () integers.

    +

    Offset (in bytes) from the start of the index buffer to the first index to use.

    + +

    For information about creating index buffers, see How to: Create an Index Buffer.

    Calling this method using a buffer that is currently bound for writing (i.e. bound to the stream output pipeline stage) will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    Windows?Phone?8: This API is supported.

    +
    + + ff476453 + void ID3D11DeviceContext::IASetIndexBuffer([In, Optional] ID3D11Buffer* pIndexBuffer,[In] DXGI_FORMAT Format,[In] unsigned int Offset) + ID3D11DeviceContext::IASetIndexBuffer +
    + + +

    Bind information about the primitive type, and data order that describes input data for the input assembler stage.

    +
    +

    The type of primitive and ordering of the primitive data (see D3D11_PRIMITIVE_TOPOLOGY).

    + +

    Windows?Phone?8: This API is supported.

    +
    + + ff476455 + void ID3D11DeviceContext::IASetPrimitiveTopology([In] D3D_PRIMITIVE_TOPOLOGY Topology) + ID3D11DeviceContext::IASetPrimitiveTopology +
    + + +

    Get a reference to the input-layout object that is bound to the input-assembler stage.

    +
    +

    A reference to the input-layout object (see ), which describes the input buffers that will be read by the IA stage.

    + +

    For information about creating an input-layout object, see Creating the Input-Layout Object.

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476450 + void ID3D11DeviceContext::IAGetInputLayout([Out, Optional] ID3D11InputLayout** ppInputLayout) + ID3D11DeviceContext::IAGetInputLayout +
    + + +

    Get the vertex buffers bound to the input-assembler stage.

    +
    +

    The input slot of the first vertex buffer to get. The first vertex buffer is explicitly bound to the start slot; this causes each additional vertex buffer in the array to be implicitly bound to each subsequent input slot. The maximum of 16 or 32 input slots (ranges from 0 to - 1) are available; the maximum number of input slots depends on the feature level.

    +

    The number of vertex buffers to get starting at the offset. The number of buffers (plus the starting slot) cannot exceed the total number of IA-stage input slots.

    +

    A reference to an array of vertex buffers returned by the method (see ).

    +

    Pointer to an array of stride values returned by the method; one stride value for each buffer in the vertex-buffer array. Each stride value is the size (in bytes) of the elements that are to be used from that vertex buffer.

    +

    Pointer to an array of offset values returned by the method; one offset value for each buffer in the vertex-buffer array. Each offset is the number of bytes between the first element of a vertex buffer and the first element that will be used.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476452 + void ID3D11DeviceContext::IAGetVertexBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppVertexBuffers,[Out, Buffer, Optional] unsigned int* pStrides,[Out, Buffer, Optional] unsigned int* pOffsets) + ID3D11DeviceContext::IAGetVertexBuffers +
    + + +

    Get a reference to the index buffer that is bound to the input-assembler stage.

    +
    +

    A reference to an index buffer returned by the method (see ).

    +

    Specifies format of the data in the index buffer (see ). These formats provide the size and type of the data in the buffer. The only formats allowed for index buffer data are 16-bit () and 32-bit () integers.

    +

    Offset (in bytes) from the start of the index buffer, to the first index to use.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476449 + void ID3D11DeviceContext::IAGetIndexBuffer([Out, Optional] ID3D11Buffer** pIndexBuffer,[Out, Optional] DXGI_FORMAT* Format,[Out, Optional] unsigned int* Offset) + ID3D11DeviceContext::IAGetIndexBuffer +
    + + +

    Get information about the primitive type, and data order that describes input data for the input assembler stage.

    +
    +

    A reference to the type of primitive, and ordering of the primitive data (see D3D11_PRIMITIVE_TOPOLOGY).

    + + ff476451 + void ID3D11DeviceContext::IAGetPrimitiveTopology([Out] D3D_PRIMITIVE_TOPOLOGY* pTopology) + ID3D11DeviceContext::IAGetPrimitiveTopology +
    + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + + Get references to the render targets that are available to the {{output-merger stage}}. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + a depth-stencil view (see ) to be filled with the depth-stencil information from the device. + void OMGetRenderTargets([In] int NumViews,[Out, Buffer, Optional] ID3D10RenderTargetView** ppRenderTargetViews,[Out, Optional] ID3D10DepthStencilView** ppDepthStencilView) + + + + Get references to the render targets that are available to the {{output-merger stage}}. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + Number of render targets to retrieve. + an array of render targets views (see ) to be filled with the render targets from the device. + void OMGetRenderTargets([In] int NumViews,[Out, Buffer, Optional] ID3D10RenderTargetView** ppRenderTargetViews,[Out, Optional] ID3D10DepthStencilView** ppDepthStencilView) + + + + Get references to the render targets and the depth-stencil buffer that are available to the {{output-merger stage}}. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + Number of render targets to retrieve. + Pointer to a depth-stencil view (see ) to be filled with the depth-stencil information from the device. + an array of render targets views (see ) to be filled with the render targets from the device. + void OMGetRenderTargets([In] int NumViews,[Out, Buffer, Optional] ID3D10RenderTargetView** ppRenderTargetViews,[Out, Optional] ID3D10DepthStencilView** ppDepthStencilView) + + + + Get the {{blend state}} of the output-merger stage. + + + The reference count of the returned interface will be incremented by one when the blend state is retrieved. Applications must release returned reference(s) when they are no longer needed, or else there will be a memory leak. + + Array of blend factors, one for each RGBA component. + Pointer to a {{sample mask}}. + a reference to a blend-state interface (see ). + void OMGetBlendState([Out, Optional] ID3D10BlendState** ppBlendState,[Out, Optional] float BlendFactor[4],[Out, Optional] int* pSampleMask) + + + + Gets the {{depth-stencil}} state of the output-merger stage. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + Pointer to the stencil reference value used in the {{depth-stencil}} test. + a reference to a depth-stencil state interface (see ) to be filled with information from the device. + void OMGetDepthStencilState([Out, Optional] ID3D10DepthStencilState** ppDepthStencilState,[Out, Optional] int* pStencilRef) + + + + Gets an array of views for an unordered resource. + + + Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks. + + Index of the first element in the zero-based array to return (ranges from 0 to D3D11_PS_CS_UAV_REGISTER_COUNT - 1). + Number of views to get (ranges from 0 to D3D11_PS_CS_UAV_REGISTER_COUNT - StartSlot). + void OMGetRenderTargetsAndUnorderedAccessViews([In] int NumRTVs,[Out, Buffer, Optional] ID3D11RenderTargetView** ppRenderTargetViews,[Out, Optional] ID3D11DepthStencilView** ppDepthStencilView,[In] int UAVStartSlot,[In] int NumUAVs,[Out, Buffer, Optional] ID3D11UnorderedAccessView** ppUnorderedAccessViews) + + + + Unbinds all depth-stencil buffer and render targets from the output-merger stage. + + ff476464 + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In] const void** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + ID3D11DeviceContext::OMSetRenderTargets + + + +

    Bind one or more render targets atomically and the depth-stencil buffer to the output-merger stage.

    +
    + A set of render target views to bind. + +

    The maximum number of active render targets a device can have active at any given time is set by a #define in D3D11.h called D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to null.

    If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to null, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    If the render-target views were created from an array resource type, then all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + ff476464 + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In] const void** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + ID3D11DeviceContext::OMSetRenderTargets +
    + + + Binds a single render target to the output-merger stage. + + A view of the render target to bind. + +

    The maximum number of active render targets a device can have active at any given time is set by a #define in D3D11.h called D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to null.

    If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to null, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    If the render-target views were created from an array resource type, then all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + ff476464 + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In] const void** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + ID3D11DeviceContext::OMSetRenderTargets +
    + + + Binds a depth-stencil buffer and a set of render targets to the output-merger stage. + + A view of the depth-stencil buffer to bind. + A set of render target views to bind. + +

    The maximum number of active render targets a device can have active at any given time is set by a #define in D3D11.h called D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to null.

    If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to null, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    If the render-target views were created from an array resource type, then all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + ff476464 + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In] const void** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + ID3D11DeviceContext::OMSetRenderTargets +
    + + + Binds a depth-stencil buffer and a set of render targets to the output-merger stage. + + A view of the depth-stencil buffer to bind. + The render target count. + A set of render target views to bind. + ff476464 + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In] const void** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + ID3D11DeviceContext::OMSetRenderTargets +

    The maximum number of active render targets a device can have active at any given time is set by a #define in D3D11.h called D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to null.

    If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to null, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    If the render-target views were created from an array resource type, then all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + + + Binds a depth-stencil buffer and a single render target to the output-merger stage. + + A view of the depth-stencil buffer to bind. + A view of the render target to bind. + +

    The maximum number of active render targets a device can have active at any given time is set by a #define in D3D11.h called D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to null.

    If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to null, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    If the render-target views were created from an array resource type, then all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + ff476464 + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In] const void** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + ID3D11DeviceContext::OMSetRenderTargets +
    + + + Binds a depth-stencil buffer and a set of render targets to the output-merger stage. + + A view of the depth-stencil buffer to bind. + A set of render target views to bind. + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + +

    The maximum number of active render targets a device can have active at any given time is set by a #define in D3D11.h called D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to null.

    If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to null, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    If the render-target views were created from an array resource type, then all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + ff476464 + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In] const void** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + ID3D11DeviceContext::OMSetRenderTargets +
    + + + Binds a set of render targets to the output-merger stage and clear the depth stencil view. + + A set of render target views to bind. + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + +

    The maximum number of active render targets a device can have active at any given time is set by a #define in D3D11.h called D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT. It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to null.

    If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to null, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    If the render-target views were created from an array resource type, then all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + ff476464 + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In] const void** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + ID3D11DeviceContext::OMSetRenderTargets +
    + + + Binds a set of unordered access views and a single render target to the output-merger stage. + + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A view of the render target to bind. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Binds a set of unordered access views and a set of render targets to the output-merger stage. + + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A set of render target views to bind. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Binds a depth-stencil buffer, a set of unordered access views, and a single render target to the output-merger stage. + + A view of the depth-stencil buffer to bind. + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A view of the render target to bind. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Binds a depth-stencil buffer, a set of unordered access views, and a set of render targets to the output-merger stage. + + A view of the depth-stencil buffer to bind. + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A set of render target views to bind. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Binds a set of unordered access views and a single render target to the output-merger stage. + + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A view of the render target to bind. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumable UAV. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Binds a set of unordered access views and a set of render targets to the output-merger stage. + + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A set of render target views to bind. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumable UAV. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Binds a depth-stencil buffer, a set of unordered access views, and a single render target to the output-merger stage. + + A view of the depth-stencil buffer to bind. + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A view of the render target to bind. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumable UAV. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Binds a depth-stencil buffer, a set of unordered access views, and a set of render targets to the output-merger stage. + + A view of the depth-stencil buffer to bind. + Index into a zero-based array to begin setting unordered access views. + A set of unordered access views to bind. + A set of render target views to bind. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumable UAV. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + + + + Binds a depth stencil view and a render target view to the output-merger stage keeping existing unordered access views bindings. + + A view of the depth-stencil buffer to bind. + A view to a render target to bind. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Binds a render target view to the output-merger stage keeping existing unordered access views bindings. + + A view to a render target to bind. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Binds a depth stencil view and a render target view to the output-merger stage keeping existing unordered access views bindings. + + A view of the depth-stencil buffer to bind. + A set of render target views to bind. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Sets an array of views for an unordered resource keeping existing render targets bindings. + + + + Index of the first element in the zero-based array to begin setting. + A reference to an references to be set by the method. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Sets an array of views for an unordered resource keeping existing render targets bindings. + + + + Index of the first element in the zero-based array to begin setting. + A reference to an references to be set by the method. + An Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumable UAV. uAVInitialCount is only relevant for UAVs which have the flag, otherwise the argument is ignored. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Sets an array of views for an unordered resource keeping existing render targets bindings. + + + + Index of the first element in the zero-based array to begin setting. + A reference to an array of references to be set by the method. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + + Sets an array of views for an unordered resource keeping existing render targets bindings. + + + + Index of the first element in the zero-based array to begin setting. + A reference to an array of references to be set by the method. + An array of Append/Consume buffer offsets. A value of -1 indicates the current offset should be kept. Any other values set the hidden counter for that Appendable/Consumable UAV. pUAVInitialCounts is only relevant for UAVs which have the flag, otherwise the argument is ignored. + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews + + + +

    Binds resources to the output-merger stage.

    +
    +

    Number of render-target views (ppRenderTargetViews) and depth-stencil view (ppDepthStencilView) to bind. If you set NumViews to D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL (0xffffffff), this method does not modify the currently bound render-target views (RTVs) and also does not modify depth-stencil view (DSV).

    +

    Pointer to an array of s, which represent render-target views. Specify null to set none.

    +

    Pointer to a , which represents a depth-stencil view. Specify null to set none.

    +

    Index into a zero-based array to begin setting unordered-access views (ranges from 0 to - 1).

    For the Direct3D 11.1 runtime, which is available starting with Windows Developer Preview, this value can range from 0 to D3D11_1_UAV_SLOT_COUNT - 1. D3D11_1_UAV_SLOT_COUNT is defined as 64.

    For pixel shaders, UAVStartSlot should be equal to the number of render-target views being bound.

    +

    Number of unordered-access views (UAVs) in ppUnorderedAccessView. If you set NumUAVs to D3D11_KEEP_UNORDERED_ACCESS_VIEWS (0xffffffff), this method does not modify the currently bound unordered-access views.

    For the Direct3D 11.1 runtime, which is available starting with Windows Developer Preview, this value can range from 0 to D3D11_1_UAV_SLOT_COUNT - UAVStartSlot.

    +

    Pointer to an array of s, which represent unordered-access views.

    +

    An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable UAV. pUAVInitialCounts is relevant only for UAVs that were created with either or specified when the UAV was created; otherwise, the argument is ignored.

    + +

    For pixel shaders, the render targets and unordered-access views share the same resource slots when being written out. This means that UAVs must be given an offset so that they are placed in the slots after the render target views that are being bound.

    Note??RTVs, DSV, and UAVs cannot be set independently; they all need to be set at the same time.

    Two RTVs conflict if they share a subresource (and therefore share the same resource).

    Two UAVs conflict if they share a subresource (and therefore share the same resource).

    An RTV conflicts with a UAV if they share a subresource or share a bind point.

    OMSetRenderTargetsAndUnorderedAccessViews operates properly in the following situations:

    1. NumViews != D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL and NumUAVs != D3D11_KEEP_UNORDERED_ACCESS_VIEWS

      The following conditions must be true for OMSetRenderTargetsAndUnorderedAccessViews to succeed and for the runtime to pass the bind information to the driver:

      • NumViews <= 8
      • UAVStartSlot >= NumViews
      • UAVStartSlot + NumUAVs <= 8
      • There must be no conflicts in the set of all ppRenderTargetViews and ppUnorderedAccessView.
      • ppDepthStencilView must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11.

      OMSetRenderTargetsAndUnorderedAccessViews performs the following tasks:

      • Unbinds all currently bound conflicting resources (stream-output target resources (SOTargets), compute shader (CS) UAVs, shader-resource views (SRVs)).
      • Binds ppRenderTargetViews, ppDepthStencilView, and ppUnorderedAccessView.
    2. NumViews == D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL

      In this situation, OMSetRenderTargetsAndUnorderedAccessViews binds only UAVs.

      The following conditions must be true for OMSetRenderTargetsAndUnorderedAccessViews to succeed and for the runtime to pass the bind information to the driver:

      • UAVStartSlot + NumUAVs <= 8
      • There must be no conflicts in ppUnorderedAccessView.

      OMSetRenderTargetsAndUnorderedAccessViews unbinds the following items:

      • All RTVs in slots >= UAVStartSlot
      • All RTVs that conflict with any UAVs in ppUnorderedAccessView
      • All currently bound resources (SOTargets, CS UAVs, SRVs) that conflict with ppUnorderedAccessView

      OMSetRenderTargetsAndUnorderedAccessViews binds ppUnorderedAccessView.

      OMSetRenderTargetsAndUnorderedAccessViews ignores ppDepthStencilView, and the current depth-stencil view remains bound.

    3. NumUAVs == D3D11_KEEP_UNORDERED_ACCESS_VIEWS

      In this situation, OMSetRenderTargetsAndUnorderedAccessViews binds only RTVs and DSV.

      The following conditions must be true for OMSetRenderTargetsAndUnorderedAccessViews to succeed and for the runtime to pass the bind information to the driver:

      • NumViews <= 8
      • There must be no conflicts in ppRenderTargetViews.
      • ppDepthStencilView must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11.

      OMSetRenderTargetsAndUnorderedAccessViews unbinds the following items:

      • All UAVs in slots < NumViews
      • All UAVs that conflict with any RTVs in ppRenderTargetViews
      • All currently bound resources (SOTargets, CS UAVs, SRVs) that conflict with ppRenderTargetViews

      OMSetRenderTargetsAndUnorderedAccessViews binds ppRenderTargetViews and ppDepthStencilView.

      OMSetRenderTargetsAndUnorderedAccessViews ignores UAVStartSlot.

    +
    + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews +
    + + +

    Binds resources to the output-merger stage.

    +
    +

    Number of render-target views (ppRenderTargetViews) and depth-stencil view (ppDepthStencilView) to bind. If you set NumViews to D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL (0xffffffff), this method does not modify the currently bound render-target views (RTVs) and also does not modify depth-stencil view (DSV).

    +

    Pointer to an array of s, which represent render-target views. Specify null to set none.

    +

    Pointer to a , which represents a depth-stencil view. Specify null to set none.

    +

    Index into a zero-based array to begin setting unordered-access views (ranges from 0 to - 1).

    For the Direct3D 11.1 runtime, which is available starting with Windows Developer Preview, this value can range from 0 to D3D11_1_UAV_SLOT_COUNT - 1. D3D11_1_UAV_SLOT_COUNT is defined as 64.

    For pixel shaders, UAVStartSlot should be equal to the number of render-target views being bound.

    +

    Number of unordered-access views (UAVs) in ppUnorderedAccessView. If you set NumUAVs to D3D11_KEEP_UNORDERED_ACCESS_VIEWS (0xffffffff), this method does not modify the currently bound unordered-access views.

    For the Direct3D 11.1 runtime, which is available starting with Windows Developer Preview, this value can range from 0 to D3D11_1_UAV_SLOT_COUNT - UAVStartSlot.

    +

    Pointer to an array of s, which represent unordered-access views.

    +

    An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable UAV. pUAVInitialCounts is relevant only for UAVs that were created with either or specified when the UAV was created; otherwise, the argument is ignored.

    + +

    For pixel shaders, the render targets and unordered-access views share the same resource slots when being written out. This means that UAVs must be given an offset so that they are placed in the slots after the render target views that are being bound.

    Note??RTVs, DSV, and UAVs cannot be set independently; they all need to be set at the same time.

    Two RTVs conflict if they share a subresource (and therefore share the same resource).

    Two UAVs conflict if they share a subresource (and therefore share the same resource).

    An RTV conflicts with a UAV if they share a subresource or share a bind point.

    OMSetRenderTargetsAndUnorderedAccessViews operates properly in the following situations:

    1. NumViews != D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL and NumUAVs != D3D11_KEEP_UNORDERED_ACCESS_VIEWS

      The following conditions must be true for OMSetRenderTargetsAndUnorderedAccessViews to succeed and for the runtime to pass the bind information to the driver:

      • NumViews <= 8
      • UAVStartSlot >= NumViews
      • UAVStartSlot + NumUAVs <= 8
      • There must be no conflicts in the set of all ppRenderTargetViews and ppUnorderedAccessView.
      • ppDepthStencilView must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11.

      OMSetRenderTargetsAndUnorderedAccessViews performs the following tasks:

      • Unbinds all currently bound conflicting resources (stream-output target resources (SOTargets), compute shader (CS) UAVs, shader-resource views (SRVs)).
      • Binds ppRenderTargetViews, ppDepthStencilView, and ppUnorderedAccessView.
    2. NumViews == D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL

      In this situation, OMSetRenderTargetsAndUnorderedAccessViews binds only UAVs.

      The following conditions must be true for OMSetRenderTargetsAndUnorderedAccessViews to succeed and for the runtime to pass the bind information to the driver:

      • UAVStartSlot + NumUAVs <= 8
      • There must be no conflicts in ppUnorderedAccessView.

      OMSetRenderTargetsAndUnorderedAccessViews unbinds the following items:

      • All RTVs in slots >= UAVStartSlot
      • All RTVs that conflict with any UAVs in ppUnorderedAccessView
      • All currently bound resources (SOTargets, CS UAVs, SRVs) that conflict with ppUnorderedAccessView

      OMSetRenderTargetsAndUnorderedAccessViews binds ppUnorderedAccessView.

      OMSetRenderTargetsAndUnorderedAccessViews ignores ppDepthStencilView, and the current depth-stencil view remains bound.

    3. NumUAVs == D3D11_KEEP_UNORDERED_ACCESS_VIEWS

      In this situation, OMSetRenderTargetsAndUnorderedAccessViews binds only RTVs and DSV.

      The following conditions must be true for OMSetRenderTargetsAndUnorderedAccessViews to succeed and for the runtime to pass the bind information to the driver:

      • NumViews <= 8
      • There must be no conflicts in ppRenderTargetViews.
      • ppDepthStencilView must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11.

      OMSetRenderTargetsAndUnorderedAccessViews unbinds the following items:

      • All UAVs in slots < NumViews
      • All UAVs that conflict with any RTVs in ppRenderTargetViews
      • All currently bound resources (SOTargets, CS UAVs, SRVs) that conflict with ppRenderTargetViews

      OMSetRenderTargetsAndUnorderedAccessViews binds ppRenderTargetViews and ppDepthStencilView.

      OMSetRenderTargetsAndUnorderedAccessViews ignores UAVStartSlot.

    +
    + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const ID3D11RenderTargetView** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const ID3D11UnorderedAccessView** ppUnorderedAccessViews,[In, Buffer, Optional] const unsigned int* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews +
    + + + Set the blend state of the output-merger stage. + + Pointer to a blend-state interface (see ). Passing in null implies a default blend state. See remarks for further details. + Array of blend factors, one for each RGBA component. This requires a blend state object that specifies the option. + 32-bit sample coverage. The default value is 0xffffffff. See remarks. + + Blend state is used by the output-merger stage to determine how to blend together two pixel values. The two values are commonly the current pixel value and the pixel value already in the output render target. Use the blend operation to control where the two pixel values come from and how they are mathematically combined.To create a blend-state interface, call .Passing in null for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.StateDefault Value AlphaToCoverageEnableFALSE BlendEnableFALSE[8] SrcBlendD3D11_BLEND_ONE DstBlendD3D11_BLEND_ZERO BlendOpD3D11_BLEND_OP_ADD SrcBlendAlphaD3D11_BLEND_ONE DstBlendAlphaD3D11_BLEND_ZERO BlendOpAlphaD3D11_BLEND_OP_ADD RenderTargetWriteMask[8][8]?A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10. + + void ID3D11DeviceContext::OMSetBlendState([In, Optional] ID3D11BlendState* pBlendState,[In, Optional] const SHARPDX_COLOR4* BlendFactor,[In] unsigned int SampleMask) + + + + Gets or sets the blend factor. + + The blend factor. + + + + Gets or sets the blend sample mask. + + The blend sample mask. + + + + Gets or sets the state of the blend. + + The state of the blend. + + + + Gets or sets the depth stencil reference. + + The depth stencil reference. + + + + Gets or sets the state of the depth stencil. + + The state of the depth stencil. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant SimultaneousRenderTargetCount. + D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT + + + +

    Bind one or more render targets atomically and the depth-stencil buffer to the output-merger stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The maximum number of active render targets a device can have active at any given time is set by a #define in D3D11.h called . It is invalid to try to set the same subresource to multiple render target slots. Any render targets not defined by this call are set to null.

    If any subresources are also currently bound for reading in a different stage or writing (perhaps in a different part of the pipeline), those bind points will be set to null, in order to prevent the same subresource from being read and written simultaneously in a single rendering operation.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    If the render-target views were created from an array resource type, all of the render-target views must have the same array size. This restriction also applies to the depth-stencil view, its array size must match that of the render-target views being bound.

    The pixel shader must be able to simultaneously render to at least eight separate render targets. All of these render targets must access the same type of resource: Buffer, Texture1D, Texture1DArray, Texture2D, Texture2DArray, Texture3D, or TextureCube. All render targets must have the same size in all dimensions (width and height, and depth for 3D or array size for *Array types). If render targets use multisample anti-aliasing, all bound render targets and depth buffer must be the same form of multisample resource (that is, the sample counts must be the same). Each render target can have a different data format. These render target formats are not required to have identical bit-per-element counts.

    Any combination of the eight slots for render targets can have a render target set or not set.

    The same resource view cannot be bound to multiple render target slots simultaneously. However, you can set multiple non-overlapping resource views of a single resource as simultaneous multiple render targets.

    +
    + + ff476464 + void ID3D11DeviceContext::OMSetRenderTargets([In] unsigned int NumViews,[In] const void** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView) + ID3D11DeviceContext::OMSetRenderTargets +
    + + +

    Binds resources to the output-merger stage.

    +
    +

    Number of render targets to bind (ranges between 0 and ). If this parameter is nonzero, the number of entries in the array to which ppRenderTargetViews points must equal the number in this parameter. If you set NumRTVs to D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL (0xffffffff), this method does not modify the currently bound render-target views (RTVs) and also does not modify depth-stencil view (DSV).

    +

    Pointer to an array of s that represent the render targets to bind to the device. If this parameter is null and NumRTVs is 0, no render targets are bound.

    +

    Pointer to a that represents the depth-stencil view to bind to the device. If this parameter is null, the depth-stencil state is not bound.

    +

    Index into a zero-based array to begin setting unordered-access views (ranges from 0 to - 1).

    For the Direct3D 11.1 runtime, which is available starting with Windows?8, this value can range from 0 to D3D11_1_UAV_SLOT_COUNT - 1. D3D11_1_UAV_SLOT_COUNT is defined as 64.

    For pixel shaders, UAVStartSlot should be equal to the number of render-target views being bound.

    +

    Number of unordered-access views (UAVs) in ppUnorderedAccessViews. If you set NumUAVs to D3D11_KEEP_UNORDERED_ACCESS_VIEWS (0xffffffff), this method does not modify the currently bound unordered-access views.

    For the Direct3D 11.1 runtime, which is available starting with Windows?8, this value can range from 0 to D3D11_1_UAV_SLOT_COUNT - UAVStartSlot.

    +

    Pointer to an array of s that represent the unordered-access views to bind to the device. If this parameter is null and NumUAVs is 0, no unordered-access views are bound.

    +

    An array of append and consume buffer offsets. A value of -1 indicates to keep the current offset. Any other values set the hidden counter for that appendable and consumable UAV. pUAVInitialCounts is relevant only for UAVs that were created with either or specified when the UAV was created; otherwise, the argument is ignored.

    + +

    For pixel shaders, the render targets and unordered-access views share the same resource slots when being written out. This means that UAVs must be given an offset so that they are placed in the slots after the render target views that are being bound.

    Note??RTVs, DSV, and UAVs cannot be set independently; they all need to be set at the same time.?

    Two RTVs conflict if they share a subresource (and therefore share the same resource).

    Two UAVs conflict if they share a subresource (and therefore share the same resource).

    An RTV conflicts with a UAV if they share a subresource or share a bind point.

    OMSetRenderTargetsAndUnorderedAccessViews operates properly in the following situations:

    1. NumRTVs != D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL and NumUAVs != D3D11_KEEP_UNORDERED_ACCESS_VIEWS

      The following conditions must be true for OMSetRenderTargetsAndUnorderedAccessViews to succeed and for the runtime to pass the bind information to the driver:

      • NumRTVs <= 8
      • UAVStartSlot >= NumRTVs
      • UAVStartSlot + NumUAVs <= 8
      • There must be no conflicts in the set of all ppRenderTargetViews and ppUnorderedAccessViews.
      • ppDepthStencilView must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11.

      OMSetRenderTargetsAndUnorderedAccessViews performs the following tasks:

      • Unbinds all currently bound conflicting resources (stream-output target resources (SOTargets), compute shader (CS) UAVs, shader-resource views (SRVs)).
      • Binds ppRenderTargetViews, ppDepthStencilView, and ppUnorderedAccessViews.
    2. NumRTVs == D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL

      In this situation, OMSetRenderTargetsAndUnorderedAccessViews binds only UAVs.

      The following conditions must be true for OMSetRenderTargetsAndUnorderedAccessViews to succeed and for the runtime to pass the bind information to the driver:

      • UAVStartSlot + NumUAVs <= 8
      • There must be no conflicts in ppUnorderedAccessViews.

      OMSetRenderTargetsAndUnorderedAccessViews unbinds the following items:

      • All RTVs in slots >= UAVStartSlot
      • All RTVs that conflict with any UAVs in ppUnorderedAccessViews
      • All currently bound resources (SOTargets, CS UAVs, SRVs) that conflict with ppUnorderedAccessViews

      OMSetRenderTargetsAndUnorderedAccessViews binds ppUnorderedAccessViews.

      OMSetRenderTargetsAndUnorderedAccessViews ignores ppDepthStencilView, and the current depth-stencil view remains bound.

    3. NumUAVs == D3D11_KEEP_UNORDERED_ACCESS_VIEWS

      In this situation, OMSetRenderTargetsAndUnorderedAccessViews binds only RTVs and DSV.

      The following conditions must be true for OMSetRenderTargetsAndUnorderedAccessViews to succeed and for the runtime to pass the bind information to the driver:

      • NumRTVs <= 8
      • There must be no conflicts in ppRenderTargetViews.
      • ppDepthStencilView must match the render-target views. For more information about resource views, see Introduction to a Resource in Direct3D 11.

      OMSetRenderTargetsAndUnorderedAccessViews unbinds the following items:

      • All UAVs in slots < NumRTVs
      • All UAVs that conflict with any RTVs in ppRenderTargetViews
      • All currently bound resources (SOTargets, CS UAVs, SRVs) that conflict with ppRenderTargetViews

      OMSetRenderTargetsAndUnorderedAccessViews binds ppRenderTargetViews and ppDepthStencilView.

      OMSetRenderTargetsAndUnorderedAccessViews ignores UAVStartSlot.

    Windows?Phone?8: This API is supported.

    +
    + + ff476465 + void ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[In, Buffer, Optional] const void** ppRenderTargetViews,[In, Optional] ID3D11DepthStencilView* pDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[In, Buffer, Optional] const void** ppUnorderedAccessViews,[In, Buffer, Optional] const void* pUAVInitialCounts) + ID3D11DeviceContext::OMSetRenderTargetsAndUnorderedAccessViews +
    + + +

    Set the blend state of the output-merger stage.

    +
    +

    Pointer to a blend-state interface (see ). Pass null for a default blend state. For more info about default blend state, see Remarks.

    +

    Array of blend factors, one for each RGBA component. The blend factors modulate values for the pixel shader, render target, or both. If you created the blend-state object with or , the blending stage uses the non-null array of blend factors. If you didn't create the blend-state object with or , the blending stage does not use the non-null array of blend factors; the runtime stores the blend factors, and you can later call to retrieve the blend factors. If you pass null, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }.

    +

    32-bit sample coverage. The default value is 0xffffffff. See remarks.

    + +

    Blend state is used by the output-merger stage to determine how to blend together two RGB pixel values and two alpha values. The two RGB pixel values and two alpha values are the RGB pixel value and alpha value that the pixel shader outputs and the RGB pixel value and alpha value already in the output render target. The blend option controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The blend operation controls how the blending stage mathematically combines these modulated values.

    To create a blend-state interface, call .

    Passing in null for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.

    StateDefault Value
    AlphaToCoverageEnable
    IndependentBlendEnable
    RenderTarget[0].BlendEnable
    RenderTarget[0].SrcBlend
    RenderTarget[0].DestBlend
    RenderTarget[0].BlendOp
    RenderTarget[0].SrcBlendAlpha
    RenderTarget[0].DestBlendAlpha
    RenderTarget[0].BlendOpAlpha
    RenderTarget[0].RenderTargetWriteMask

    ?

    A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476462 + void ID3D11DeviceContext::OMSetBlendState([In, Optional] ID3D11BlendState* pBlendState,[In, Optional] const SHARPDX_COLOR4* BlendFactor,[In] unsigned int SampleMask) + ID3D11DeviceContext::OMSetBlendState +
    + + +

    Sets the depth-stencil state of the output-merger stage.

    +
    +

    Pointer to a depth-stencil state interface (see ) to bind to the device. Set this to null to use the default state listed in .

    +

    Reference value to perform against when doing a depth-stencil test. See remarks.

    + +

    To create a depth-stencil state interface, call .

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476463 + void ID3D11DeviceContext::OMSetDepthStencilState([In, Optional] ID3D11DepthStencilState* pDepthStencilState,[In] unsigned int StencilRef) + ID3D11DeviceContext::OMSetDepthStencilState +
    + + +

    Get references to the resources bound to the output-merger stage.

    +
    +

    Number of render targets to retrieve.

    +

    Pointer to an array of s which represent render target views. Specify null for this parameter when retrieval of a render target is not needed.

    +

    Pointer to a , which represents a depth-stencil view. Specify null for this parameter when retrieval of the depth-stencil view is not needed.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476460 + void ID3D11DeviceContext::OMGetRenderTargets([In] unsigned int NumViews,[Out, Buffer, Optional] ID3D11RenderTargetView** ppRenderTargetViews,[Out, Optional] ID3D11DepthStencilView** ppDepthStencilView) + ID3D11DeviceContext::OMGetRenderTargets +
    + + +

    Get references to the resources bound to the output-merger stage.

    +
    +

    The number of render-target views to retrieve.

    +

    Pointer to an array of s, which represent render-target views. Specify null for this parameter when retrieval of render-target views is not required.

    +

    Pointer to a , which represents a depth-stencil view. Specify null for this parameter when retrieval of the depth-stencil view is not required.

    +

    Index into a zero-based array to begin retrieving unordered-access views (ranges from 0 to - 1). For pixel shaders UAVStartSlot should be equal to the number of render-target views that are bound.

    +

    Number of unordered-access views to return in ppUnorderedAccessViews. This number ranges from 0 to - UAVStartSlot.

    +

    Pointer to an array of s, which represent unordered-access views that are retrieved. Specify null for this parameter when retrieval of unordered-access views is not required.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    Windows?Phone?8: This API is supported.

    +
    + + ff476461 + void ID3D11DeviceContext::OMGetRenderTargetsAndUnorderedAccessViews([In] unsigned int NumRTVs,[Out, Buffer, Optional] ID3D11RenderTargetView** ppRenderTargetViews,[Out, Optional] ID3D11DepthStencilView** ppDepthStencilView,[In] unsigned int UAVStartSlot,[In] unsigned int NumUAVs,[Out, Buffer, Optional] ID3D11UnorderedAccessView** ppUnorderedAccessViews) + ID3D11DeviceContext::OMGetRenderTargetsAndUnorderedAccessViews +
    + + +

    Set the blend state of the output-merger stage.

    +
    +

    Pointer to a blend-state interface (see ). Pass null for a default blend state. For more info about default blend state, see Remarks.

    +

    Array of blend factors, one for each RGBA component. The blend factors modulate values for the pixel shader, render target, or both. If you created the blend-state object with or , the blending stage uses the non-null array of blend factors. If you didn't create the blend-state object with or , the blending stage does not use the non-null array of blend factors; the runtime stores the blend factors, and you can later call to retrieve the blend factors. If you pass null, the runtime uses or stores a blend factor equal to { 1, 1, 1, 1 }.

    +

    32-bit sample coverage. The default value is 0xffffffff. See remarks.

    + +

    Blend state is used by the output-merger stage to determine how to blend together two RGB pixel values and two alpha values. The two RGB pixel values and two alpha values are the RGB pixel value and alpha value that the pixel shader outputs and the RGB pixel value and alpha value already in the output render target. The blend option controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The blend operation controls how the blending stage mathematically combines these modulated values.

    To create a blend-state interface, call .

    Passing in null for the blend-state interface indicates to the runtime to set a default blending state. The following table indicates the default blending parameters.

    StateDefault Value
    AlphaToCoverageEnable
    IndependentBlendEnable
    RenderTarget[0].BlendEnable
    RenderTarget[0].SrcBlend
    RenderTarget[0].DestBlend
    RenderTarget[0].BlendOp
    RenderTarget[0].SrcBlendAlpha
    RenderTarget[0].DestBlendAlpha
    RenderTarget[0].BlendOpAlpha
    RenderTarget[0].RenderTargetWriteMask

    ?

    A sample mask determines which samples get updated in all the active render targets. The mapping of bits in a sample mask to samples in a multisample render target is the responsibility of an individual application. A sample mask is always applied; it is independent of whether multisampling is enabled, and does not depend on whether an application uses multisample render targets.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476462 + void ID3D11DeviceContext::OMGetBlendState([Out, Optional] ID3D11BlendState** ppBlendState,[Out, Optional] SHARPDX_COLOR4* BlendFactor,[Out, Optional] unsigned int* pSampleMask) + ID3D11DeviceContext::OMGetBlendState +
    + + +

    Gets the depth-stencil state of the output-merger stage.

    +
    +

    Address of a reference to a depth-stencil state interface (see ) to be filled with information from the device.

    +

    Pointer to the stencil reference value used in the depth-stencil test.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    Windows?Phone?8: This API is supported.

    +
    + + ff476459 + void ID3D11DeviceContext::OMGetDepthStencilState([Out, Optional] ID3D11DepthStencilState** ppDepthStencilState,[Out, Optional] unsigned int* pStencilRef) + ID3D11DeviceContext::OMGetDepthStencilState +
    + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + + Get the array of {{viewports}} bound to the {{rasterizer stage}} + + An array of viewports (see ). + void RSGetViewports([InOut] int* NumViewports,[Out, Buffer, Optional] D3D10_VIEWPORT* pViewports) + ff476477 + void ID3D11DeviceContext::RSGetViewports([InOut] unsigned int* pNumViewports,[Out, Buffer, Optional] D3D11_VIEWPORT* pViewports) + ID3D11DeviceContext::RSGetViewports + + + + Get the array of {{viewports}} bound to the {{rasterizer stage}} + + An array of viewports (see ). + void RSGetViewports([InOut] int* NumViewports,[Out, Buffer, Optional] D3D10_VIEWPORT* pViewports) + ff476477 + void ID3D11DeviceContext::RSGetViewports([InOut] unsigned int* pNumViewports,[Out, Buffer, Optional] D3D11_VIEWPORT* pViewports) + ID3D11DeviceContext::RSGetViewports + + + + Get the array of {{scissor rectangles}} bound to the {{rasterizer stage}}. + + An array of scissor rectangles (see ). + void RSGetScissorRects([InOut] int* NumRects,[Out, Buffer, Optional] D3D10_RECT* pRects) + ff476475 + void ID3D11DeviceContext::RSGetScissorRects([InOut] unsigned int* pNumRects,[Out, Buffer, Optional] RECT* pRects) + ID3D11DeviceContext::RSGetScissorRects + + + + Get the array of {{scissor rectangles}} bound to the {{rasterizer stage}}. + + An array of scissor rectangles (see ). + void RSGetScissorRects([InOut] int* NumRects,[Out, Buffer, Optional] D3D10_RECT* pRects) + ff476475 + void ID3D11DeviceContext::RSGetScissorRects([InOut] unsigned int* pNumRects,[Out, Buffer, Optional] RECT* pRects) + ID3D11DeviceContext::RSGetScissorRects + + + + Binds a single scissor rectangle to the rasterizer stage. + + The left. + The top. + The right. + The bottom. + +

    All scissor rects must be set atomically as one operation. Any scissor rects not defined by the call are disabled.

    The scissor rectangles will only be used if ScissorEnable is set to true in the rasterizer state (see ).

    Which scissor rectangle to use is determined by the SV_ViewportArrayIndex semantic output by a geometry shader (see shader semantic syntax). If a geometry shader does not make use of the SV_ViewportArrayIndex semantic then Direct3D will use the first scissor rectangle in the array.

    Each scissor rectangle in the array corresponds to a viewport in an array of viewports (see ).

    +
    + ff476478 + void ID3D11DeviceContext::RSSetScissorRects([In] unsigned int NumRects,[In, Buffer, Optional] const void* pRects) + ID3D11DeviceContext::RSSetScissorRects +
    + + + Binds a set of scissor rectangles to the rasterizer stage. + + The set of scissor rectangles to bind. + +

    All scissor rects must be set atomically as one operation. Any scissor rects not defined by the call are disabled.

    The scissor rectangles will only be used if ScissorEnable is set to true in the rasterizer state (see ).

    Which scissor rectangle to use is determined by the SV_ViewportArrayIndex semantic output by a geometry shader (see shader semantic syntax). If a geometry shader does not make use of the SV_ViewportArrayIndex semantic then Direct3D will use the first scissor rectangle in the array.

    Each scissor rectangle in the array corresponds to a viewport in an array of viewports (see ).

    +
    + ff476478 + void ID3D11DeviceContext::RSSetScissorRects([In] unsigned int NumRects,[In, Buffer, Optional] const void* pRects) + ID3D11DeviceContext::RSSetScissorRects +
    + + + Binds a single viewport to the rasterizer stage. + + The x coordinate of the viewport. + The y coordinate of the viewport. + The width. + The height. + The min Z. + The max Z. + +

    All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled.

    Which viewport to use is determined by the SV_ViewportArrayIndex semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array.

    +
    + ff476480 + void ID3D11DeviceContext::RSSetViewports([In] unsigned int NumViewports,[In, Buffer, Optional] const void* pViewports) + ID3D11DeviceContext::RSSetViewports +
    + + + Binds a single viewport to the rasterizer stage. + + The viewport. + +

    All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled.

    Which viewport to use is determined by the SV_ViewportArrayIndex semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array.

    +
    + ff476480 + void ID3D11DeviceContext::RSSetViewports([In] unsigned int NumViewports,[In, Buffer, Optional] const void* pViewports) + ID3D11DeviceContext::RSSetViewports +
    + + + Binds a set of viewports to the rasterizer stage. + + The set of viewports to bind. + The number of viewport to set. + ff476480 + void ID3D11DeviceContext::RSSetViewports([In] unsigned int NumViewports,[In, Buffer, Optional] const void* pViewports) + ID3D11DeviceContext::RSSetViewports +

    All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled.

    Which viewport to use is determined by the SV_ViewportArrayIndex semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array.

    +
    + + + Binds a set of viewports to the rasterizer stage. + + The set of viewports to bind. + The number of viewport to set. + ff476480 + void ID3D11DeviceContext::RSSetViewports([In] unsigned int NumViewports,[In, Buffer, Optional] const void* pViewports) + ID3D11DeviceContext::RSSetViewports +

    All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled.

    Which viewport to use is determined by the SV_ViewportArrayIndex semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array.

    +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets a reference to the data contained in a subresource, and denies the GPU access to that subresource.

    +
    + +

    If you call Map on a deferred context, you can only pass , , or both to the MapType parameter. Other -typed values are not supported for a deferred context.

    Note?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views (SRVs) of dynamic buffers with . The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call with . CheckFeatureSupport fills members of a structure with the device's features. The relevant members here are MapNoOverwriteOnDynamicConstantBuffer and MapNoOverwriteOnDynamicBufferSRV.?

    For info about how to use Map, see How to: Use dynamic resources.

    +
    + + ff476457 + RSGetState / RSSetState + RSGetState + void ID3D11DeviceContext::RSGetState([Out, Optional] ID3D11RasterizerState** ppRasterizerState) +
    + + +

    Set the rasterizer state for the rasterizer stage of the pipeline.

    +
    + No documentation. + +

    To create a rasterizer state interface, call .

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476479 + void ID3D11DeviceContext::RSSetState([In, Optional] ID3D11RasterizerState* pRasterizerState) + ID3D11DeviceContext::RSSetState +
    + + +

    Bind an array of viewports to the rasterizer stage of the pipeline.

    +
    +

    Number of viewports to bind.

    +

    An array of structures to bind to the device. See the structure page for details about how the viewport size is dependent on the device feature level which has changed between Direct3D 11 and Direct3D 10.

    + +

    All viewports must be set atomically as one operation. Any viewports not defined by the call are disabled.

    Which viewport to use is determined by the SV_ViewportArrayIndex semantic output by a geometry shader; if a geometry shader does not specify the semantic, Direct3D will use the first viewport in the array.

    Note??Even though you specify float values to the members of the structure for the pViewports array in a call to for feature levels 9_x, RSSetViewports uses DWORDs internally. Because of this behavior, when you use a negative top left corner for the viewport, the call to RSSetViewports for feature levels 9_x fails. This failure occurs because RSSetViewports for 9_x casts the floating point values into unsigned integers without validation, which results in integer overflow.? +
    + + ff476480 + void ID3D11DeviceContext::RSSetViewports([In] unsigned int NumViewports,[In, Buffer, Optional] const void* pViewports) + ID3D11DeviceContext::RSSetViewports +
    + + +

    Bind an array of scissor rectangles to the rasterizer stage.

    +
    +

    Number of scissor rectangles to bind.

    +

    An array of scissor rectangles (see D3D11_RECT).

    + +

    All scissor rects must be set atomically as one operation. Any scissor rects not defined by the call are disabled.

    The scissor rectangles will only be used if ScissorEnable is set to true in the rasterizer state (see ).

    Which scissor rectangle to use is determined by the SV_ViewportArrayIndex semantic output by a geometry shader (see shader semantic syntax). If a geometry shader does not make use of the SV_ViewportArrayIndex semantic then Direct3D will use the first scissor rectangle in the array.

    Each scissor rectangle in the array corresponds to a viewport in an array of viewports (see ).

    Windows?Phone?8: This API is supported.

    +
    + + ff476478 + void ID3D11DeviceContext::RSSetScissorRects([In] unsigned int NumRects,[In, Buffer, Optional] const void* pRects) + ID3D11DeviceContext::RSSetScissorRects +
    + + +

    Gets a reference to the data contained in a subresource, and denies the GPU access to that subresource.

    +
    + No documentation. + +

    If you call Map on a deferred context, you can only pass , , or both to the MapType parameter. Other -typed values are not supported for a deferred context.

    Note?? The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views (SRVs) of dynamic buffers with . The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call with . CheckFeatureSupport fills members of a structure with the device's features. The relevant members here are MapNoOverwriteOnDynamicConstantBuffer and MapNoOverwriteOnDynamicBufferSRV.?

    For info about how to use Map, see How to: Use dynamic resources.

    +
    + + ff476457 + void ID3D11DeviceContext::RSGetState([Out, Optional] ID3D11RasterizerState** ppRasterizerState) + ID3D11DeviceContext::RSGetState +
    + + +

    Gets the array of viewports bound to the rasterizer stage.

    +
    +

    A reference to a variable that, on input, specifies the number of viewports (ranges from 0 to D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) in the pViewports array; on output, the variable contains the actual number of viewports that are bound to the rasterizer stage. If pViewports is null, RSGetViewports fills the variable with the number of viewports currently bound.

    Note?? In some versions of the Windows SDK, a debug device will raise an exception if the input value in the variable to which pNumViewports points is greater than D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE even if pViewports is null. The regular runtime ignores the value in the variable to which pNumViewports points when pViewports is null. This behavior of a debug device might be corrected in a future release of the Windows SDK. ?
    +

    An array of structures for the viewports that are bound to the rasterizer stage. If the number of viewports (in the variable to which pNumViewports points) is greater than the actual number of viewports currently bound, unused elements of the array contain 0. For info about how the viewport size depends on the device feature level, which has changed between Direct3D 11 and Direct3D 10, see .

    + +

    Windows?Phone?8: This API is supported.

    +
    + + ff476477 + void ID3D11DeviceContext::RSGetViewports([InOut] unsigned int* pNumViewports,[Out, Buffer, Optional] void* pViewports) + ID3D11DeviceContext::RSGetViewports +
    + + +

    Get the array of scissor rectangles bound to the rasterizer stage.

    +
    +

    The number of scissor rectangles (ranges between 0 and D3D11_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE) bound; set pRects to null to use pNumRects to see how many rectangles would be returned.

    +

    An array of scissor rectangles (see D3D11_RECT). If NumRects is greater than the number of scissor rects currently bound, then unused members of the array will contain 0.

    + + ff476475 + void ID3D11DeviceContext::RSGetScissorRects([InOut] unsigned int* pNumRects,[Out, Buffer, Optional] void* pRects) + ID3D11DeviceContext::RSGetScissorRects +
    + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + +

    Set the target output buffers for the stream-output stage of the pipeline.

    +
    +

    The number of buffer to bind to the device. A maximum of four output buffers can be set. If less than four are defined by the call, the remaining buffer slots are set to null. See Remarks.

    +

    The array of output buffers (see ) to bind to the device. The buffers must have been created with the flag.

    +

    Array of offsets to the output buffers from ppSOTargets, one offset for each buffer. The offset values must be in bytes.

    + +

    An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass.

    Calling this method using a buffer that is currently bound for writing will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + ff476484 + void ID3D11DeviceContext::SOSetTargets([In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppSOTargets,[In, Buffer, Optional] const unsigned int* pOffsets) + ID3D11DeviceContext::SOSetTargets +
    + + + Sets the stream output targets bound to the StreamOutput stage. + + The buffer to bind on the first stream output slot. + An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass. + ff476484 + void ID3D11DeviceContext::SOSetTargets([In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppSOTargets,[In, Buffer, Optional] const unsigned int* pOffsets) + ID3D11DeviceContext::SOSetTargets + + + + Set the target output {{buffers}} for the {{StreamOutput}} stage, which enables/disables the pipeline to stream-out data. + + + Call ID3D10Device::SOSetTargets (before any draw calls) to stream data out; call SOSetTargets with NULL to stop streaming data out. For an example, see Exercise 01 from the GDC 2007 workshop, which sets the stream output render targets before calling draw methods in the RenderInstanceToStream function. An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass. Calling this method using a buffer that is currently bound for writing will effectively bind NULL instead because a buffer cannot be bound as both an input and an output at the same time. The {{DeviceDebug Layer}} will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime. The method will not hold a reference to the interfaces passed in. For that reason, applications should be careful not to release an interface currently in use by the device. + + an array of output buffers (see ) to bind to the device. The buffers must have been created with the flag. + void SOSetTargets([In] int NumBuffers,[In, Buffer, Optional] const ID3D10Buffer** ppSOTargets,[In, Buffer, Optional] const int* pOffsets) + ff476484 + void ID3D11DeviceContext::SOSetTargets([In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppSOTargets,[In, Buffer, Optional] const unsigned int* pOffsets) + ID3D11DeviceContext::SOSetTargets + + + + Get the target output {{buffers}} for the {{StreamOutput}} stage of the pipeline. + + + Any returned interfaces will have their reference count incremented by one. Applications should call {{IUnknown::Release}} on the returned interfaces when they are no longer needed to avoid memory leaks. + + Number of buffers to get. A maximum of four output buffers can be retrieved. + an array of output buffers (see ) to bind to the device. + void SOGetTargets([In] int NumBuffers,[Out, Buffer, Optional] ID3D10Buffer** ppSOTargets,[Out, Buffer, Optional] int* pOffsets) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Set the target output buffers for the stream-output stage of the pipeline.

    +
    +

    The number of buffer to bind to the device. A maximum of four output buffers can be set. If less than four are defined by the call, the remaining buffer slots are set to null. See Remarks.

    +

    The array of output buffers (see ) to bind to the device. The buffers must have been created with the flag.

    +

    Array of offsets to the output buffers from ppSOTargets, one offset for each buffer. The offset values must be in bytes.

    + +

    An offset of -1 will cause the stream output buffer to be appended, continuing after the last location written to the buffer in a previous stream output pass.

    Calling this method using a buffer that is currently bound for writing will effectively bind null instead because a buffer cannot be bound as both an input and an output at the same time.

    The debug layer will generate a warning whenever a resource is prevented from being bound simultaneously as an input and an output, but this will not prevent invalid data from being used by the runtime.

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    Windows?Phone?8: This API is supported.

    +
    + + ff476484 + void ID3D11DeviceContext::SOSetTargets([In] unsigned int NumBuffers,[In, Buffer, Optional] const void** ppSOTargets,[In, Buffer, Optional] const void* pOffsets) + ID3D11DeviceContext::SOSetTargets +
    + + +

    Get the target output buffers for the stream-output stage of the pipeline.

    +
    +

    Number of buffers to get.

    +

    An array of output buffers (see ) to be retrieved from the device.

    + +

    A maximum of four output buffers can be retrieved.

    The offsets to the output buffers pointed to in the returned ppSOTargets array may be assumed to be -1 (append), as defined for use in .

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    Windows?Phone?8: This API is supported.

    +
    + + ff476483 + void ID3D11DeviceContext::SOGetTargets([In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppSOTargets) + ID3D11DeviceContext::SOGetTargets +
    + + +

    The device context interface represents a device context; it is used to render commands. adds new methods to those in .

    +
    + + hh404598 + ID3D11DeviceContext1 + ID3D11DeviceContext1 +
    + + + Initializes a new deferred context instance of class. + + + + + + Partially clears a view using an array of rectangles + + View to clear + Clear color + Rectangle areas + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Copies a region from a source resource to a destination resource.

    +
    +

    A reference to the destination resource.

    +

    Destination subresource index.

    +

    The x-coordinate of the upper-left corner of the destination region.

    +

    The y-coordinate of the upper-left corner of the destination region. For a 1D subresource, this must be zero.

    +

    The z-coordinate of the upper-left corner of the destination region. For a 1D or 2D subresource, this must be zero.

    +

    A reference to the source resource.

    +

    Source subresource index.

    +

    A reference to a 3D box that defines the region of the source subresource that CopySubresourceRegion1 can copy. If null, CopySubresourceRegion1 copies the entire source subresource. The box must fit within the source resource.

    An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, CopySubresourceRegion1 doesn't perform a copy operation.

    +

    A -typed value that specifies how to perform the copy operation. If you specify zero for no copy option, CopySubresourceRegion1 behaves like . For existing display drivers that can't process these flags, the runtime doesn't use them.

    + +

    If the display driver supports overlapping, the source and destination subresources can be identical, and the source and destination regions can overlap each other. For existing display drivers that don?t support overlapping, the runtime drops calls with identical source and destination subresources, regardless of whether the regions overlap. To determine whether the display driver supports overlapping, check the CopyWithOverlap member of . This overlapping support enables additional scroll functionality in a call to .

    Note??Applies only to feature level 9_x hardware If you use or CopySubresourceRegion1 to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a null source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.? +
    + + hh404604 + void ID3D11DeviceContext1::CopySubresourceRegion1([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In] unsigned int DstX,[In] unsigned int DstY,[In] unsigned int DstZ,[In] ID3D11Resource* pSrcResource,[In] unsigned int SrcSubresource,[In, Optional] const D3D11_BOX* pSrcBox,[In] unsigned int CopyFlags) + ID3D11DeviceContext1::CopySubresourceRegion1 +
    + + +

    The CPU copies data from memory to a subresource created in non-mappable memory.

    +
    +

    A reference to the destination resource.

    +

    A zero-based index that identifies the destination subresource. See D3D11CalcSubresource for more details.

    +

    A reference to a box that defines the portion of the destination subresource to copy the resource data into. Coordinates are in bytes for buffers and in texels for textures. If null, UpdateSubresource1 writes the data to the destination subresource with no offset. The dimensions of the source must fit the destination.

    An empty box results in a no-op. A box is empty if the top value is greater than or equal to the bottom value, or the left value is greater than or equal to the right value, or the front value is greater than or equal to the back value. When the box is empty, UpdateSubresource1 doesn't perform an update operation.

    +

    A reference to the source data in memory.

    +

    The size of one row of the source data.

    +

    The size of one depth slice of source data.

    +

    A -typed value that specifies how to perform the update operation. If you specify zero for no update option, UpdateSubresource1 behaves like . For existing display drivers that can't process these flags, the runtime doesn't use them.

    + +

    If you call UpdateSubresource1 to update a constant buffer, pass any region, and the driver has not been implemented to Windows?8, the runtime drops the call (except feature level 9.1, 9.2, and 9.3 where the runtime emulates support). The runtime also drops the call if you update a constant buffer with a partial region whose extent is not aligned to 16-byte granularity (16 bytes being a full constant). When the runtime drops the call, the runtime doesn't call the corresponding device driver interface (DDI).

    When you record a call to UpdateSubresource with an offset pDstBox in a software command list, the offset in pDstBox is incorrectly applied to pSrcData when you play back the command list. The new-for-Windows?8UpdateSubresource1 fixes this issue. In a call to UpdateSubresource1, pDstBox does not affect pSrcData.

    For info about various resource types and how UpdateSubresource1 might work with each resource type, see Introduction to a Resource in Direct3D 11.

    Note??Applies only to feature level 9_x hardware If you use UpdateSubresource1 or to copy from a staging resource to a default resource, you can corrupt the destination contents. This occurs if you pass a null source box and if the source resource has different dimensions from those of the destination resource or if you use destination offsets, (x, y, and z). In this situation, always pass a source box that is the full size of the source resource.? +
    + + hh446790 + void ID3D11DeviceContext1::UpdateSubresource1([In] ID3D11Resource* pDstResource,[In] unsigned int DstSubresource,[In, Optional] const D3D11_BOX* pDstBox,[In] const void* pSrcData,[In] unsigned int SrcRowPitch,[In] unsigned int SrcDepthPitch,[In] unsigned int CopyFlags) + ID3D11DeviceContext1::UpdateSubresource1 +
    + + +

    Discards a resource from the device context.

    +
    +

    A reference to the interface for the resource to discard. The resource must have been created with usage or , otherwise the runtime drops the call to DiscardResource; if the debug layer is enabled, the runtime returns an error message.

    + +

    DiscardResource informs the graphics processing unit (GPU) that the existing content in the resource that pResource points to is no longer needed.

    +
    + + hh404613 + void ID3D11DeviceContext1::DiscardResource([In] ID3D11Resource* pResource) + ID3D11DeviceContext1::DiscardResource +
    + + +

    Discards a resource view from the device context.

    +
    +

    A reference to the interface for the resource view to discard. The resource that underlies the view must have been created with usage or , otherwise the runtime drops the call to DiscardView; if the debug layer is enabled, the runtime returns an error message.

    + +

    DiscardView informs the graphics processing unit (GPU) that the existing content in the resource view that pResourceView points to is no longer needed. The view can be an SRV, RTV, UAV, or DSV. DiscardView is a variation on the DiscardResource method. DiscardView allows you to discard a subset of a resource that is in a view (such as a single miplevel). More importantly, DiscardView provides a convenience because often views are what are being bound and unbound at the pipeline. Some pipeline bindings do not have views, such as stream output. In that situation, DiscardResource can do the job for any resource.

    +
    + + hh404616 + void ID3D11DeviceContext1::DiscardView([In] ID3D11View* pResourceView) + ID3D11DeviceContext1::DiscardView +
    + + +

    Sets the constant buffers that the vertex shader pipeline stage uses.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to VSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to VSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the VSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh446795 + void ID3D11DeviceContext1::VSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::VSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the vertex shader pipeline stage uses.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to VSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to VSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the VSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh446795 + void ID3D11DeviceContext1::VSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::VSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the vertex shader pipeline stage uses.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to VSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to VSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the VSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh446795 + void ID3D11DeviceContext1::VSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::VSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the hull-shader stage of the pipeline uses.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    The runtime drops the call to HSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to HSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If the pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the HSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404642 + void ID3D11DeviceContext1::HSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::HSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the hull-shader stage of the pipeline uses.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    The runtime drops the call to HSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to HSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If the pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the HSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404642 + void ID3D11DeviceContext1::HSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::HSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the hull-shader stage of the pipeline uses.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    The runtime drops the call to HSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to HSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If the pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the HSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404642 + void ID3D11DeviceContext1::HSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::HSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the domain-shader stage uses.

    +
    +

    Index into the zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to DSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to DSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the DSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404632 + void ID3D11DeviceContext1::DSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::DSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the domain-shader stage uses.

    +
    +

    Index into the zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to DSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to DSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the DSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404632 + void ID3D11DeviceContext1::DSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::DSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the domain-shader stage uses.

    +
    +

    Index into the zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to DSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to DSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the DSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404632 + void ID3D11DeviceContext1::DSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::DSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the geometry shader pipeline stage uses.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to GSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to GSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the GSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404638 + void ID3D11DeviceContext1::GSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::GSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the geometry shader pipeline stage uses.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to GSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to GSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the GSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404638 + void ID3D11DeviceContext1::GSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::GSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the geometry shader pipeline stage uses.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to GSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to GSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the GSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404638 + void ID3D11DeviceContext1::GSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::GSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the pixel shader pipeline stage uses, and enables the shader to access other parts of the buffer.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    To enable the shader to access other parts of the buffer, call PSSetConstantBuffers1 instead of PSSetConstantBuffers. PSSetConstantBuffers1 has additional parameters pFirstConstant and pNumConstants.

    The runtime drops the call to PSSetConstantBuffers1 if the numbers of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders. The maximum constant buffer size that is supported by shaders holds 4096 constants, where each constant has four 32-bit components.

    The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the following window (range):

    [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]

    That is, the window is the range is from (value in an element of pFirstConstant) to (value in an element of pFirstConstant + value in an element of pNumConstants).

    The runtime also drops the call to PSSetConstantBuffers1 on existing drivers that do not support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the PSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404649 + void ID3D11DeviceContext1::PSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::PSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the pixel shader pipeline stage uses, and enables the shader to access other parts of the buffer.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    To enable the shader to access other parts of the buffer, call PSSetConstantBuffers1 instead of PSSetConstantBuffers. PSSetConstantBuffers1 has additional parameters pFirstConstant and pNumConstants.

    The runtime drops the call to PSSetConstantBuffers1 if the numbers of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders. The maximum constant buffer size that is supported by shaders holds 4096 constants, where each constant has four 32-bit components.

    The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the following window (range):

    [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]

    That is, the window is the range is from (value in an element of pFirstConstant) to (value in an element of pFirstConstant + value in an element of pNumConstants).

    The runtime also drops the call to PSSetConstantBuffers1 on existing drivers that do not support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the PSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404649 + void ID3D11DeviceContext1::PSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::PSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the pixel shader pipeline stage uses, and enables the shader to access other parts of the buffer.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    To enable the shader to access other parts of the buffer, call PSSetConstantBuffers1 instead of PSSetConstantBuffers. PSSetConstantBuffers1 has additional parameters pFirstConstant and pNumConstants.

    The runtime drops the call to PSSetConstantBuffers1 if the numbers of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders. The maximum constant buffer size that is supported by shaders holds 4096 constants, where each constant has four 32-bit components.

    The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the following window (range):

    [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]

    That is, the window is the range is from (value in an element of pFirstConstant) to (value in an element of pFirstConstant + value in an element of pNumConstants).

    The runtime also drops the call to PSSetConstantBuffers1 on existing drivers that do not support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the PSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404649 + void ID3D11DeviceContext1::PSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::PSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the compute-shader stage uses.

    +
    +

    Index into the zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to CSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to CSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the CSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404610 + void ID3D11DeviceContext1::CSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::CSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the compute-shader stage uses.

    +
    +

    Index into the zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to CSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to CSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the CSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404610 + void ID3D11DeviceContext1::CSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::CSSetConstantBuffers1 +
    + + +

    Sets the constant buffers that the compute-shader stage uses.

    +
    +

    Index into the zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    +

    An array that holds the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 16 indicates that the start of the associated constant buffer is 256 bytes into the constant buffer. Each offset must be a multiple of 16 constants.

    +

    An array that holds the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. Each number of constants must be a multiple of 16 constants, in the range [0..4096].

    + +

    The runtime drops the call to CSSetConstantBuffers1 if the number of constants to which pNumConstants points is larger than the maximum constant buffer size that is supported by shaders (4096 constants). The values in the elements of the pFirstConstant and pFirstConstant + pNumConstants arrays can exceed the length of each buffer; from the shader's point of view, the constant buffer is the intersection of the actual memory allocation for the buffer and the window [value in an element of pFirstConstant, value in an element of pFirstConstant + value in an element of pNumConstants]. The runtime also drops the call to CSSetConstantBuffers1 on existing drivers that don't support this offsetting.

    The runtime will emulate this feature for feature level 9.1, 9.2, and 9.3; therefore, this feature is supported for feature level 9.1, 9.2, and 9.3. This feature is always available on new drivers for feature level 10 and higher.

    From the shader?s point of view, element [0] in the constant buffers array is the constant at pFirstConstant.

    Out of bounds access to the constant buffers from the shader to the range that is defined by pFirstConstant and pNumConstants returns 0.

    If pFirstConstant and pNumConstants arrays are null, you get the same result as if you were binding the entire buffer into view. You get this same result if you call the CSSetConstantBuffers method. If the buffer is larger than the maximum constant buffer size that is supported by shaders (4096 elements), the shader can access only the first 4096 constants.

    If either pFirstConstant or pNumConstants is null, the other parameter must also be null.

    +
    + + hh404610 + void ID3D11DeviceContext1::CSSetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const ID3D11Buffer** ppConstantBuffers,[In, Buffer, Optional] const unsigned int* pFirstConstant,[In, Buffer, Optional] const unsigned int* pNumConstants) + ID3D11DeviceContext1::CSSetConstantBuffers1 +
    + + +

    Gets the constant buffers that the vertex shader pipeline stage uses.

    +
    +

    Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to - 1).

    +

    Number of buffers to retrieve (ranges from 0 to - StartSlot).

    +

    Array of constant buffer interface references to be returned by the method.

    +

    A reference to an array that receives the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets pFirstConstant to null if the buffers do not have offsets.

    +

    A reference to an array that receives the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. The runtime sets pNumConstants to null if it doesn't specify the numbers of constants in each buffer.

    + +

    If no buffer is bound at a slot, pFirstConstant and pNumConstants are null for that slot.

    +
    + + hh446793 + void ID3D11DeviceContext1::VSGetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers,[Out, Buffer, Optional] unsigned int* pFirstConstant,[Out, Buffer, Optional] unsigned int* pNumConstants) + ID3D11DeviceContext1::VSGetConstantBuffers1 +
    + + +

    Gets the constant buffers that the hull-shader stage uses.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + +

    If no buffer is bound at a slot, pFirstConstant and pNumConstants are null for that slot.

    +
    + + hh404641 + void ID3D11DeviceContext1::HSGetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers,[Out, Buffer, Optional] unsigned int* pFirstConstant,[Out, Buffer, Optional] unsigned int* pNumConstants) + ID3D11DeviceContext1::HSGetConstantBuffers1 +
    + + +

    Gets the constant buffers that the domain-shader stage uses.

    +
    +

    Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to - 1).

    +

    Number of buffers to retrieve (ranges from 0 to - StartSlot).

    +

    Array of constant buffer interface references to be returned by the method.

    +

    A reference to an array that receives the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets pFirstConstant to null if the buffers do not have offsets.

    +

    A reference to an array that receives the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. The runtime sets pNumConstants to null if it doesn't specify the numbers of constants in each buffer.

    + +

    If no buffer is bound at a slot, pFirstConstant and pNumConstants are null for that slot.

    +
    + + hh404630 + void ID3D11DeviceContext1::DSGetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers,[Out, Buffer, Optional] unsigned int* pFirstConstant,[Out, Buffer, Optional] unsigned int* pNumConstants) + ID3D11DeviceContext1::DSGetConstantBuffers1 +
    + + +

    Gets the constant buffers that the geometry shader pipeline stage uses.

    +
    +

    Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to - 1).

    +

    Number of buffers to retrieve (ranges from 0 to - StartSlot).

    +

    Array of constant buffer interface references to be returned by the method.

    +

    A reference to an array that receives the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets pFirstConstant to null if the buffers do not have offsets.

    +

    A reference to an array that receives the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. The runtime sets pNumConstants to null if it doesn't specify the numbers of constants in each buffer.

    + +

    If no buffer is bound at a slot, pFirstConstant and pNumConstants are null for that slot.

    +
    + + hh404635 + void ID3D11DeviceContext1::GSGetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers,[Out, Buffer, Optional] unsigned int* pFirstConstant,[Out, Buffer, Optional] unsigned int* pNumConstants) + ID3D11DeviceContext1::GSGetConstantBuffers1 +
    + + +

    Gets the constant buffers that the pixel shader pipeline stage uses.

    +
    +

    Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to - 1).

    +

    Number of buffers to retrieve (ranges from 0 to - StartSlot).

    +

    Array of constant buffer interface references to be returned by the method.

    +

    A reference to an array that receives the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets pFirstConstant to null if the buffers do not have offsets.

    +

    A reference to an array that receives the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. The runtime sets pNumConstants to null if it doesn't specify the numbers of constants in each buffer.

    + +

    If no buffer is bound at a slot, pFirstConstant and pNumConstants are null for that slot.

    +
    + + hh404645 + void ID3D11DeviceContext1::PSGetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers,[Out, Buffer, Optional] unsigned int* pFirstConstant,[Out, Buffer, Optional] unsigned int* pNumConstants) + ID3D11DeviceContext1::PSGetConstantBuffers1 +
    + + +

    Gets the constant buffers that the compute-shader stage uses.

    +
    +

    Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to - 1).

    +

    Number of buffers to retrieve (ranges from 0 to - StartSlot).

    +

    Array of constant buffer interface references to be returned by the method.

    +

    A reference to an array that receives the offsets into the buffers that ppConstantBuffers specifies. Each offset specifies where, from the shader's point of view, each constant buffer starts. Each offset is measured in shader constants, which are 16 bytes (4*32-bit components). Therefore, an offset of 2 indicates that the start of the associated constant buffer is 32 bytes into the constant buffer. The runtime sets pFirstConstant to null if the buffers do not have offsets.

    +

    A reference to an array that receives the numbers of constants in the buffers that ppConstantBuffers specifies. Each number specifies the number of constants that are contained in the constant buffer that the shader uses. Each number of constants starts from its respective offset that is specified in the pFirstConstant array. The runtime sets pNumConstants to null if it doesn't specify the numbers of constants in each buffer.

    + +

    If no buffer is bound at a slot, pFirstConstant and pNumConstants are null for that slot.

    +
    + + hh404607 + void ID3D11DeviceContext1::CSGetConstantBuffers1([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers,[Out, Buffer, Optional] unsigned int* pFirstConstant,[Out, Buffer, Optional] unsigned int* pNumConstants) + ID3D11DeviceContext1::CSGetConstantBuffers1 +
    + + +

    Activates the given context state object and changes the current device behavior to Direct3D?11, Direct3D?10.1, or Direct3D?10.

    +
    +

    A reference to the interface for the context state object that was previously created through the method. If SwapDeviceContextState is called with pState set to null, the call has no effect.

    +

    A reference to a variable that receives a reference to the interface for the previously-activated context state object.

    + +

    SwapDeviceContextState changes device behavior. This device behavior depends on the emulated interface that you passed to the EmulatedInterface parameter of the method when you created the context state object.

    SwapDeviceContextState is not supported on a deferred context.

    SwapDeviceContextState disables the incompatible device interfaces ID3D10Device, ID3D10Device1, , and . When a context state object is active, the runtime disables certain methods on the device and context interfaces. A context state object that is created with __uuidof() or __uuidof() turns off most of the Direct3D?10 device interfaces. A context state object that is created with __uuidof(ID3D10Device1) or __uuidof(ID3D10Device) turns off most of the methods. + For more information about this behavior, see .

    SwapDeviceContextState activates the context state object specified by pState. This means that the device behaviors that are associated with the context state object's feature level and compatible interface are activated on the Direct3D device until the next call to SwapDeviceContextState. In addition, any state that was saved when this context state object was last active is now reactivated, so that the previous state is replaced.

    SwapDeviceContextState sets ppPreviousState to the most recently activated context state object. The object allows the caller to save and then later restore the previous device state. This behavior is useful in a plug-in architecture such as Direct2D that shares a Direct3D device with its plug-ins. A Direct2D interface can use context state objects to save and restore the application's state.

    If the caller did not previously call the method to create a previous context state object, SwapDeviceContextState sets ppPreviousState to the default context state object. In either case, usage of SwapDeviceContextState is the same.

    The feature level that is specified by the application, and that is chosen by the context state object from the acceptable list that the application supplies to , controls the feature level of the immediate context whenever the context state object is active. Because the Direct3D?11 device is free-threaded, the device methods cannot query the current immediate context feature level. Instead, the device runs at a feature level that is the maximum of all previously created context state objects' feature levels. This means that the device's feature level can increase dynamically.

    The feature level of the context state object controls the functionality available from the immediate context. However, to maintain the free-threaded contract of the Direct3D?11 device methods?the resource-creation methods in particular?the upper-bound feature level of all created context state objects controls the set of resources that the device creates.

    Because the context state object interface is published by the immediate context, the interface requires the same threading model as the immediate context. Specifically, SwapDeviceContextState is single-threaded with respect to the other immediate context methods and with respect to the equivalent methods of ID3D10Device.

    Crucially, because only one of the Direct3D?10 or Direct3D?11 ref-count behaviors can be available at a time, one of the Direct3D?10 and Direct3D?11 interfaces must break its ref-count contract. To avoid this situation, the activation of a context state object turns off the incompatible version interface. Also, if you call a method of an incompatible version interface, the call silently fails if the method has return type void, returns an value of E_INVALIDARG, or sets any out parameter to null.

    When you switch from Direct3D?11 mode to either Direct3D?10 mode or Direct3D?10.1 mode, the binding behavior of the device changes. Specifically, the final release of a resource induces unbind in Direct3D?10 mode or Direct3D?10.1 mode. During final release an application releases all of the resource's references, including indirect references such as the linkage from view to resource, and the linkage from context state object to any of the context state object's bound resources. Any bound resource to which the application has no reference is unbound and destroyed, in order to maintain the Direct3D?10 behavior.

    SwapDeviceContextState does not affect any state that sets.

    Command lists that are generated by deferred contexts do not hold a reference to context state objects and are not affected by future updates to context state objects.

    No asynchronous objects are affected by SwapDeviceContextState. For example, if a query is active before a call to SwapDeviceContextState, it is still active after the call.

    +
    + + hh446787 + void ID3D11DeviceContext1::SwapDeviceContextState([In] ID3DDeviceContextState* pState,[Out, Optional] ID3DDeviceContextState** ppPreviousState) + ID3D11DeviceContext1::SwapDeviceContextState +
    + + +

    Sets all the elements in a resource view to one value.

    +
    +

    A reference to the interface that represents the resource view to clear.

    +

    A 4-component array that represents the color to use to clear the resource view.

    +

    An array of D3D11_RECT structures for the rectangles in the resource view to clear. If null, ClearView clears the entire surface.

    +

    Number of rectangles in the array that the pRect parameter specifies.

    + +

    ClearView works only on render-target views (RTVs), depth/stencil views (DSVs) on depth-only resources (resources with no stencil component), unordered-access views (UAVs), or any video view of a Texture2D surface. The runtime drops invalid calls. Empty rectangles in the pRect array are a no-op. A rectangle is empty if the top value equals the bottom value or the left value equals the right value.

    ClearView doesn?t support 3D textures.

    ClearView applies the same color value to all array slices in a view; all rectangles in the pRect array correspond to each array slice. The pRect array of rectangles is a set of areas to clear on a single surface. If the view is an array, ClearView clears all the rectangles on each array slice individually.

    When you apply rectangles to buffers, set the top value to 0 and the bottom value to 1 and set the left value and right value to describe the extent within the buffer. When the top value equals the bottom value or the left value equals the right value, the rectangle is empty and a no-op is achieved.

    The driver converts and clamps color values to the destination format as appropriate per Direct3D conversion rules. For example, if the format of the view is , the driver clamps inputs to 0.0f to 1.0f (+INF -> 1.0f (0XFF)/NaN -> 0.0f).

    If the format is integer, such as , the runtime interprets inputs as integral floats. Therefore, 235.0f maps to 235 (rounds to zero, out of range/INF values clamp to target range, and NaN to 0).

    Here are the color mappings:

    • Color[0]: R (or Y for video)
    • Color[1]: G (or U/Cb for video)
    • Color[2]: B (or V/Cr for video)
    • Color[3]: A

    For video views with YUV or YCbBr formats, ClearView doesn't convert color values. In situations where the format name doesn?t indicate _UNORM, _UINT, and so on, ClearView assumes _UINT. Therefore, 235.0f maps to 235 (rounds to zero, out of range/INF values clamp to target range, and NaN to 0).

    +
    + + hh404601 + void ID3D11DeviceContext1::ClearView([In] ID3D11View* pView,[In] const SHARPDX_COLOR4* Color,[In, Buffer, Optional] const RECT* pRect,[In] unsigned int NumRects) + ID3D11DeviceContext1::ClearView +
    + + +

    Discards the specified elements in a resource view from the device context.

    +
    +

    A reference to the interface for the resource view to discard. The resource that underlies the view must have been created with usage or , otherwise the runtime drops the call to DiscardView1; if the debug layer is enabled, the runtime returns an error message.

    +

    An array of D3D11_RECT structures for the rectangles in the resource view to discard. If null, DiscardView1 discards the entire view and behaves the same as DiscardView.

    +

    Number of rectangles in the array that the pRects parameter specifies.

    + +

    DiscardView1 informs the graphics processing unit (GPU) that the existing content in the specified elements in the resource view that pResourceView points to is no longer needed. The view can be an SRV, RTV, UAV, or DSV. DiscardView1 is a variation on the DiscardResource method. DiscardView1 allows you to discard elements of a subset of a resource that is in a view (such as elements of a single miplevel). More importantly, DiscardView1 provides a convenience because often views are what are being bound and unbound at the pipeline. Some pipeline bindings do not have views, such as stream output. In that situation, DiscardResource can do the job for any resource.

    +
    + + jj247573 + void ID3D11DeviceContext1::DiscardView1([In] ID3D11View* pResourceView,[In, Buffer, Optional] const RECT* pRects,[In] unsigned int NumRects) + ID3D11DeviceContext1::DiscardView1 +
    + + +

    The device context interface represents a device context; it is used to render commands. adds new methods to those in .

    +
    + + dn280498 + ID3D11DeviceContext2 + ID3D11DeviceContext2 +
    + + + Initializes a new deferred context instance of class. + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Allows apps to determine when either a capture or profiling request is enabled.

    +
    + +

    Returns TRUE if the capture tool is present and capturing or the app is being profiled such that SetMarkerInt or BeginEventInt will be logged to ETW. Otherwise, it returns . Apps can use this to turn off self-throttling mechanisms in order to accurately capture what is currently being seen as app output. Apps can also avoid generating event markers and the associated overhead it may entail when there is no benefit to do so.

    If apps detect that capture is being performed, they can prevent the Direct3D debugging tools, such as Microsoft Visual Studio?2013, from capturing them. The purpose of the flag prior to Windows?8.1 was to allow the Direct3D runtime to prevent debugging tools from capturing apps.

    +
    + + dn280504 + IsAnnotationEnabled + IsAnnotationEnabled + BOOL ID3D11DeviceContext2::IsAnnotationEnabled() +
    + + +

    Updates mappings of tile locations in tiled resources to memory locations in a tile pool.

    +
    +

    A reference to the tiled resource.

    +

    The number of tiled resource regions.

    +

    An array of structures that describe the starting coordinates of the tiled resource regions. The NumTiledResourceRegions parameter specifies the number of structures in the array.

    +

    An array of structures that describe the sizes of the tiled resource regions. The NumTiledResourceRegions parameter specifies the number of structures in the array.

    +

    A reference to the tile pool.

    +

    The number of tile-pool ranges.

    +

    An array of values that describe each tile-pool range. The NumRanges parameter specifies the number of values in the array.

    +

    An array of offsets into the tile pool. These are 0-based tile offsets, counting in tiles (not bytes).

    +

    An array of tiles.

    An array of values that specify the number of tiles in each tile-pool range. The NumRanges parameter specifies the number of values in the array.

    +

    A combination of D3D11_TILE_MAPPING_FLAGS values that are combined by using a bitwise OR operation.

    +

    Returns if successful; otherwise, returns one of the following:

    • Returns E_INVALIDARG if various conditions such as invalid flags result in the call being dropped.

      The debug layer will emit an error.

    • Returns E_OUTOFMEMORY if the call results in the driver having to allocate space for new page table mappings but running out of memory.

      If out of memory occurs when this is called in a commandlist and the commandlist is being executed, the device will be removed. Apps can avoid this situation by only doing update calls that change existing mappings from tiled resources within commandlists (so drivers will not have to allocate page table memory, only change the mapping).

    • Returns if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred.
    + +

    In a single call to UpdateTileMappings, you can map one or more ranges of resource tiles to one or more ranges of tile-pool tiles.

    You can organize the parameters of UpdateTileMappings in these ways to perform an update:

    • Tiled resource whose mappings are updated. This is a resource that was created with the flag. Mappings start off all null when a resource is initially created.
    • Set of tile regions on the tiled resource whose mappings are updated. You can make one UpdateTileMappings call to update many mappings or multiple calls with a bit more API call overhead as well if that is more convenient. NumTiledResourceRegions specifies how many regions there are, pTiledResourceRegionStartCoordinates and pTiledResourceRegionSizes are each arrays that identify the start location and extend of each region. If NumTiledResourceRegions is 1, for convenience either or both of the arrays that describe the regions can be null. null for pTiledResourceRegionStartCoordinates means the start coordinate is all 0s, and null for pTiledResourceRegionSizes identifies a default region that is the full set of tiles for the entire tiled resource, including all mipmaps, array slices, or both.

      If pTiledResourceRegionStartCoordinates isn't null and pTiledResourceRegionSizes is null, the region size defaults to 1 tile for all regions. This makes it easy to define mappings for a set of individual tiles each at disparate locations by providing an array of locations in pTiledResourceRegionStartCoordinates without having to send an array of pTiledResourceRegionSizes all set to 1.

      The updates are applied from first region to last; so, if regions overlap in a single call, the updates later in the list overwrite the areas that overlap with previous updates.

    • Tile pool that provides memory where tile mappings can go. A tiled resource can point to a single tile pool at a time. If a new tile pool is specified (for the first time or different from the last time a tile pool was specified), all existing tile mappings for the tiled resource are cleared and the new set of mappings in the current UpdateTileMappings call are applied for the new tile pool. If no tile pool is specified (null) or the same tile pool as a previous UpdateTileMappings call is provided, the UpdateTileMappings call just adds the new mappings to existing ones (overwriting on overlap). If UpdateTileMappings only defines null mappings, you don't need to specify a tile pool because it is irrelevant. But if you specify a tile pool anyway, it takes the same behavior as previously described when providing a tile pool.
    • Set of tile ranges where mappings are going. Each given tile range can specify one of a few types of ranges: a range of tiles in a tile pool (default), a count of tiles in the tiled resource to map to a single tile in a tile pool (sharing the tile), a count of tile mappings in the tiled resource to skip and leave as they are, or a count of tiles in the tile pool to map to null.

      NumRanges specifies the number of tile ranges, where the total tiles identified across all ranges must match the total number of tiles in the tile regions from the previously described tiled resource. Mappings are defined by iterating through the tiles in the tile regions in sequential order - x then y then z order for box regions - while walking through the set of tile ranges in sequential order. The breakdown of tile regions doesn't have to line up with the breakdown of tile ranges, but the total number of tiles on both sides must be equal so that each tiled resource tile specified has a mapping specified.

      pRangeFlags, pTilePoolStartOffsets, and pRangeTileCounts are all arrays, of size NumRanges, that describe the tile ranges. If pRangeFlags is null, all ranges are sequential tiles in the tile pool; otherwise, for each range i, pRangeFlags[i] identifies how the mappings in that range of tiles work:

      • If pRangeFlags[i] is 0, that range defines sequential tiles in the tile pool, with the number of tiles being pRangeTileCounts[i] and the starting location pTilePoolStartOffsets[i]. If NumRanges is 1, pRangeTileCounts can be null and defaults to the total number of tiles specified by all the tile regions.
      • If pRangeFlags[i] is , pTilePoolStartOffsets[i] identifies the single tile in the tile pool to map to, and pRangeTileCounts[i] specifies how many tiles from the tile regions to map to that tile pool location. If NumRanges is 1, pRangeTileCounts can be null and defaults to the total number of tiles specified by all the tile regions.
      • If pRangeFlags[i] is , pRangeTileCounts[i] specifies how many tiles from the tile regions to map to null. If NumRanges is 1, pRangeTileCounts can be null and defaults to the total number of tiles specified by all the tile regions. pTilePoolStartOffsets[i] is ignored for null mappings.
      • If pRangeFlags[i] is , pRangeTileCounts[i] specifies how many tiles from the tile regions to skip over and leave existing mappings unchanged for. This can be useful if a tile region conveniently bounds an area of tile mappings to update except with some exceptions that need to be left the same as whatever they were mapped to before. pTilePoolStartOffsets[i] is ignored for SKIP mappings.
    • Flags parameter for overall options. means the caller promises that previously submitted commands to the device that may still be executing do not reference any of the tile region being updated. This allows the device to avoid having to flush previously submitted work in order to do the tile mapping update. If the app violates this promise by updating tile mappings for locations in tiled resources still being referenced by outstanding commands, undefined rendering behavior results, which includes the potential for significant slowdowns on some architectures. This is like the "no overwrite" concept that exists elsewhere in the Direct3D API, except applied to tile mapping data structure itself, which in hardware is a page table. The absence of this flag requires that tile mapping updates specified by this UpdateTileMappings call must be completed before any subsequent Direct3D command can proceed.

    If tile mappings have changed on a tiled resource that the app will render via RenderTargetView or DepthStencilView, the app must clear, by using the fixed function Clear APIs, the tiles that have changed within the area being rendered (mapped or not). If an app doesn't clear in these situations, the app receives undefined values when it reads from the tiled resource. +

    Note??In Direct3D 11.2, hardware can now support ClearView on depth-only formats. For more info, see .?

    If an app needs to preserve existing memory contents of areas in a tiled resource where mappings have changed, the app can first save the contents where tile mappings have changed, by copying them to a temporary surface, for example using CopyTiles, issuing the required Clear, and then copying the contents back. +

    Suppose a tile is mapped into multiple tiled resources at the same time and tile contents are manipulated by any means (render, copy, and so on) via one of the tiled resources. Then, if the same tile is to be rendered via any other tiled resource, the tile must be cleared first as previously described. +

    For more info about tiled resources, see Tiled resources.

    Here are some examples of common UpdateTileMappings cases:

    +
    + + dn280508 + HRESULT ID3D11DeviceContext2::UpdateTileMappings([In] ID3D11Resource* pTiledResource,[In] unsigned int NumTiledResourceRegions,[In, Buffer, Optional] const D3D11_TILED_RESOURCE_COORDINATE* pTiledResourceRegionStartCoordinates,[In, Buffer, Optional] const D3D11_TILE_REGION_SIZE* pTiledResourceRegionSizes,[In, Optional] ID3D11Buffer* pTilePool,[In] unsigned int NumRanges,[In, Buffer, Optional] const D3D11_TILE_RANGE_FLAG* pRangeFlags,[In, Buffer, Optional] const unsigned int* pTilePoolStartOffsets,[In, Buffer, Optional] const unsigned int* pRangeTileCounts,[In] D3D11_TILE_MAPPING_FLAG Flags) + ID3D11DeviceContext2::UpdateTileMappings +
    + + +

    Copies mappings from a source tiled resource to a destination tiled resource.

    +
    +

    A reference to the destination tiled resource.

    +

    A reference to a structure that describes the starting coordinates of the destination tiled resource.

    +

    A reference to the source tiled resource.

    +

    A reference to a structure that describes the starting coordinates of the source tiled resource.

    +

    A reference to a structure that describes the size of the tiled region.

    +

    A combination of D3D11_TILE_MAPPING_FLAGS values that are combined by using a bitwise OR operation. The only valid value is , which indicates that previously submitted commands to the device that may still be executing do not reference any of the tile region being updated. The device can then avoid having to flush previously submitted work to perform the tile mapping update. If the app violates this promise by updating tile mappings for locations in tiled resources that are still being referenced by outstanding commands, undefined rendering behavior results, including the potential for significant slowdowns on some architectures. This is like the "no overwrite" concept that exists elsewhere in the Direct3D API, except applied to the tile mapping data structure itself (which in hardware is a page table). The absence of the value requires that tile mapping updates that CopyTileMappings specifies must be completed before any subsequent Direct3D command can proceed.

    +

    Returns if successful; otherwise, returns one of the following:

    • Returns E_INVALIDARG if various conditions such as invalid flags or passing in non Tiled Resources result in the call being dropped.

      The dest and the source regions must each entirely fit in their resource or behavior is undefined (debug layer will emit an error).

    • Returns E_OUTOFMEMORY if the call results in the driver having to allocate space for new page table mappings but running out of memory.

      If out of memory occurs when this is called in a commandlist and the commandlist is being executed, the device will be removed. Applications can avoid this situation by only doing update calls that change existing mappings from Tiled Resources within commandlists (so drivers will not have to allocate page table memory, only change the mapping).

    + +

    CopyTileMappings helps with tasks such as shifting mappings around within and across tiled resources, for example, scrolling tiles. The source and destination regions can overlap; the result of the copy in this situation is as if the source was saved to a temp location and then from there written to the destination.

    For more info about tiled resources, see Tiled resources.

    +
    + + dn280500 + HRESULT ID3D11DeviceContext2::CopyTileMappings([In] ID3D11Resource* pDestTiledResource,[In] const D3D11_TILED_RESOURCE_COORDINATE* pDestRegionStartCoordinate,[In] ID3D11Resource* pSourceTiledResource,[In] const D3D11_TILED_RESOURCE_COORDINATE* pSourceRegionStartCoordinate,[In] const D3D11_TILE_REGION_SIZE* pTileRegionSize,[In] D3D11_TILE_MAPPING_FLAG Flags) + ID3D11DeviceContext2::CopyTileMappings +
    + + +

    Copies tiles from buffer to tiled resource or vice versa.

    +
    +

    A reference to a tiled resource.

    +

    A reference to a structure that describes the starting coordinates of the tiled resource.

    +

    A reference to a structure that describes the size of the tiled region.

    +

    A reference to an that represents a default, dynamic, or staging buffer.

    +

    The offset in bytes into the buffer at pBuffer to start the operation.

    +

    A combination of -typed values that are combined by using a bitwise OR operation and that identifies how to copy tiles.

    + +

    CopyTiles drops write operations to unmapped areas and handles read operations from unmapped areas (except on Tier_1 tiled resources, where reading and writing unmapped areas is invalid).

    If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation.

    The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy and update APIs (like and ) or for the whole mipmap chain.

    The memory layout of the tiles in the non-tiled buffer resource side of the copy operation is linear in memory within 64 KB tiles, which the hardware and driver swizzle and deswizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing (MSAA) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use CopyTiles or to copy to mipmaps that the hardware packs together. You can just use generic copy and update APIs (like and ) to copy small mipmaps individually. Although in the case of a generic copy API (like ), the linear memory must be the same dimension as the tiled resource; can't copy from a buffer resource to a Texture2D for instance.

    For more info about tiled resources, see Tiled resources.

    +
    + + dn280501 + void ID3D11DeviceContext2::CopyTiles([In] ID3D11Resource* pTiledResource,[In] const D3D11_TILED_RESOURCE_COORDINATE* pTileRegionStartCoordinate,[In] const D3D11_TILE_REGION_SIZE* pTileRegionSize,[In] ID3D11Buffer* pBuffer,[In] unsigned longlong BufferStartOffsetInBytes,[In] D3D11_TILE_MAPPING_FLAG Flags) + ID3D11DeviceContext2::CopyTiles +
    + + +

    Updates tiles by copying from app memory to the tiled resource.

    +
    +

    A reference to a tiled resource to update.

    +

    A reference to a structure that describes the starting coordinates of the tiled resource.

    +

    A reference to a structure that describes the size of the tiled region.

    +

    A reference to memory that contains the source tile data that UpdateTiles uses to update the tiled resource.

    +

    A combination of -typed values that are combined by using a bitwise OR operation. The only valid value is . The other values aren't meaningful here, thoughby definition the value is basically what UpdateTiles does, but sources from app memory.

    + +

    UpdateTiles drops write operations to unmapped areas (except on Tier_1 tiled resources, where writing to unmapped areas is invalid).

    If a copy operation involves writing to the same memory location multiple times because multiple locations in the destination resource are mapped to the same tile memory, the resulting write operations to multi-mapped tiles are non-deterministic and non-repeatable; that is, accesses to the tile memory happen in whatever order the hardware happens to execute the copy operation.

    The tiles involved in the copy operation can't include tiles that contain packed mipmaps or results of the copy operation are undefined. To transfer data to and from mipmaps that the hardware packs into one tile, you must use the standard (that is, non-tile specific) copy and update APIs (like and ) or for the whole mipmap chain.

    The memory layout of the data on the source side of the copy operation is linear in memory within 64 KB tiles, which the hardware and driver swizzle and deswizzle per tile as appropriate when they transfer to and from a tiled resource. For multisample antialiasing (MSAA) surfaces, the hardware and driver traverse each pixel's samples in sample-index order before they move to the next pixel. For tiles that are partially filled on the right side (for a surface that has a width not a multiple of tile width in pixels), the pitch and stride to move down a row is the full size in bytes of the number pixels that would fit across the tile if the tile was full. So, there can be a gap between each row of pixels in memory. Mipmaps that are smaller than a tile are not packed together in the linear layout, which might seem to be a waste of memory space, but as mentioned you can't use or UpdateTiles to copy to mipmaps that the hardware packs together. You can just use generic copy and update APIs (like and ) to copy small mipmaps individually. Although in the case of a generic copy API (like ), the linear memory must be the same dimension as the tiled resource; can't copy from a buffer resource to a Texture2D for instance.

    For more info about tiled resources, see Tiled resources.

    +
    + + dn280509 + void ID3D11DeviceContext2::UpdateTiles([In] ID3D11Resource* pDestTiledResource,[In] const D3D11_TILED_RESOURCE_COORDINATE* pDestTileRegionStartCoordinate,[In] const D3D11_TILE_REGION_SIZE* pDestTileRegionSize,[In] const void* pSourceTileData,[In] D3D11_TILE_MAPPING_FLAG Flags) + ID3D11DeviceContext2::UpdateTiles +
    + + +

    Resizes a tile pool.

    +
    +

    A reference to an for the tile pool to resize.

    +

    The new size in bytes of the tile pool. The size must be a multiple of 64 KB or 0.

    +

    Returns if successful; otherwise, returns one of the following:

    • Returns E_INVALIDARG if the new tile pool size isn't a multiple of 64 KB or 0.
    • Returns E_OUTOFMEMORY if the call results in the driver having to allocate space for new page table mappings but running out of memory.
    • Returns if the video card has been physically removed from the system, or a driver upgrade for the video card has occurred.

    For E_INVALIDARG or E_OUTOFMEMORY, the existing tile pool remains unchanged, which includes existing mappings.

    + +

    ResizeTilePool increases or decreases the size of the tile pool depending on whether the app needs more or less working set for the tiled resources that are mapped into it. An app can allocate additional tile pools for new tiled resources, but if any single tiled resource needs more space than initially available in its tile pool, the app can increase the size of the resource's tile pool. A tiled resource can't have mappings into multiple tile pools simultaneously.

    When you increase the size of a tile pool, additional tiles are added to the end of the tile pool via one or more new allocations by the driver; your app can't detect the breakdown into the new allocations. Existing memory in the tile pool is left untouched, and existing tiled resource mappings into that memory remain intact.

    When you decrease the size of a tile pool, tiles are removed from the end (this is allowed even below the initial allocation size, down to 0). This means that new mappings can't be made past the new size. But, existing mappings past the end of the new size remain intact and useable. The memory is kept active as long as mappings to any part of the allocations that are being used for the tile pool memory remains. If after decreasing, some memory has been kept active because tile mappings are pointing to it and the tile pool is increased again (by any amount), the existing memory is reused first before any additional allocations occur to service the size of the increase.

    To be able to save memory, an app has to not only decrease a tile pool but also remove and remap existing mappings past the end of the new smaller tile pool size.

    The act of decreasing (and removing mappings) doesn't necessarily produce immediate memory savings. Freeing of memory depends on how granular the driver's underlying allocations for the tile pool are. When a decrease in the size of a tile pool happens to be enough to make a driver allocation unused, the driver can free the allocation. If a tile pool was increased and if you then decrease to previous sizes (and remove and remap tile mappings correspondingly), you will most likely yield memory savings. But, this scenario isn't guaranteed in the case that the sizes don't exactly align with the underlying allocation sizes chosen by the driver.

    For more info about tiled resources, see Tiled resources.

    +
    + + dn280505 + HRESULT ID3D11DeviceContext2::ResizeTilePool([In] ID3D11Buffer* pTilePool,[In] unsigned longlong NewSizeInBytes) + ID3D11DeviceContext2::ResizeTilePool +
    + + +

    Specifies a data access ordering constraint between multiple tiled resources. For more info about this constraint, see Remarks.

    +
    +

    A reference to an or for a resource that was created with the flag. Access operations on this object must complete before the access operations on the object that pTiledResourceOrViewAccessAfterBarrier specifies.

    +

    A reference to an or for a resource that was created with the flag. Access operations on this object must begin after the access operations on the object that pTiledResourceOrViewAccessBeforeBarrier specifies.

    + +

    Apps can use tiled resources to reuse tiles in different resources. But, a device and driver might not be able to determine whether some memory in a tile pool that was just rendered to is now being used for reading. +

    For example, an app can render to some tiles in a tile pool with one tiled resource but then read from the same tiles by using a different tiled resource. These tiled-resource operations are different from using one resource and then just switching from writing with to reading with . The runtime already tracks and handles these one resource operations using and . +

    When an app transitions from accessing (reading or writing) some location in a tile pool with one resource to accessing the same memory (read or write) via another tiled resource (with mappings to the same memory), the app must call TiledResourceBarrier after the first use of the resource and before the second. The parameters are the pTiledResourceOrViewAccessBeforeBarrier for accesses before the barrier (via rendering, copying), and the pTiledResourceOrViewAccessAfterBarrier for accesses after the barrier by using the same tile pool memory. If the resources are identical, the app doesn't need to call TiledResourceBarrier because this kind of hazard is already tracked and handled. +

    The barrier call informs the driver that operations issued to the resource before the call must complete before any accesses that occur after the call via a different tiled resource that shares the same memory. +

    Either or both of the parameters (before or after the barrier) can be null. null before the barrier means all tiled resource accesses before the barrier must complete before the resource specified after the barrier can be referenced by the graphics processing unit (GPU). null after the barrier means that any tiled resources accessed after the barrier can only be executed by the GPU after accesses to the tiled resources before the barrier are finished. Both null means all previous tiled resource accesses are complete before any subsequent tiled resource access can proceed. +

    An app can pass a view reference, a resource, or null for each parameter. Views are allowed not only for convenience but also to allow the app to scope the barrier effect to a relevant portion of a resource. +

    For more info about tiled resources, see Tiled resources.

    +
    + + dn280507 + void ID3D11DeviceContext2::TiledResourceBarrier([In, Optional] ID3D11DeviceChild* pTiledResourceOrViewAccessBeforeBarrier,[In, Optional] ID3D11DeviceChild* pTiledResourceOrViewAccessAfterBarrier) + ID3D11DeviceContext2::TiledResourceBarrier +
    + + +

    Allows apps to determine when either a capture or profiling request is enabled.

    +
    +

    Returns TRUE if capture or profiling is enabled and otherwise.

    + +

    Returns TRUE if the capture tool is present and capturing or the app is being profiled such that SetMarkerInt or BeginEventInt will be logged to ETW. Otherwise, it returns . Apps can use this to turn off self-throttling mechanisms in order to accurately capture what is currently being seen as app output. Apps can also avoid generating event markers and the associated overhead it may entail when there is no benefit to do so.

    If apps detect that capture is being performed, they can prevent the Direct3D debugging tools, such as Microsoft Visual Studio?2013, from capturing them. The purpose of the flag prior to Windows?8.1 was to allow the Direct3D runtime to prevent debugging tools from capturing apps.

    +
    + + dn280504 + BOOL ID3D11DeviceContext2::IsAnnotationEnabled() + ID3D11DeviceContext2::IsAnnotationEnabled +
    + + +

    Allows applications to annotate graphics commands.

    +
    +

    An optional string that will be logged to ETW when ETW logging is active. If ?#d? appears in the string, it will be replaced by the value of the Data parameter similar to the way printf works.

    +

    A signed data value that will be logged to ETW when ETW logging is active.

    + +

    SetMarkerInt allows applications to annotate graphics commands, in order to provide more context to what the GPU is executing. When ETW logging or a support tool is enabled, an additional marker is correlated between the CPU and GPU timelines. The pLabel and Data value are logged to ETW. When the appropriate ETW logging is not enabled, this method does nothing.

    +
    + + dn280506 + void ID3D11DeviceContext2::SetMarkerInt([In] const wchar_t* pLabel,[In] int Data) + ID3D11DeviceContext2::SetMarkerInt +
    + + +

    Allows applications to annotate the beginning of a range of graphics commands.

    +
    +

    An optional string that will be logged to ETW when ETW logging is active. If ?#d? appears in the string, it will be replaced by the value of the Data parameter similar to the way printf works.

    +

    A signed data value that will be logged to ETW when ETW logging is active.

    + +

    BeginEventInt allows applications to annotate the beginning of a range of graphics commands, in order to provide more context to what the GPU is executing. When ETW logging (or a supported tool) is enabled, an additional marker is correlated between the CPU and GPU timelines. The pLabel and Data value are logged to ETW. When the appropriate ETW logging is not enabled, this method does nothing.

    +
    + + dn280499 + void ID3D11DeviceContext2::BeginEventInt([In] const wchar_t* pLabel,[In] int Data) + ID3D11DeviceContext2::BeginEventInt +
    + + +

    Allows applications to annotate the end of a range of graphics commands.

    +
    + +

    EndEvent allows applications to annotate the end of a range of graphics commands, in order to provide more context to what the GPU is executing. When the appropriate ETW logging is not enabled, this method does nothing. When ETW logging is enabled, an additional marker is correlated between the CPU and GPU timelines.

    +
    + + dn280502 + void ID3D11DeviceContext2::EndEvent() + ID3D11DeviceContext2::EndEvent +
    + + +

    The device context interface represents a device context; it is used to render commands. adds new methods to those in .

    +
    + + dn912875 + ID3D11DeviceContext3 + ID3D11DeviceContext3 +
    + + + Initializes a new deferred context instance of class. + + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets or sets whether hardware protection is enabled.

    +
    + + mt158224 + GetHardwareProtectionState / SetHardwareProtectionState + GetHardwareProtectionState + void ID3D11DeviceContext3::GetHardwareProtectionState([Out] BOOL* pHwProtectionEnable) +
    + + +

    Sends queued-up commands in the command buffer to the graphics processing unit (GPU), with a specified context type and an optional event handle to create an event query.

    +
    +

    A that specifies the context in which a query occurs, such as a 3D command queue, 3D compute queue, 3D copy queue, video, or image.

    +

    An optional event handle. When specified, this method creates an event query.

    Flush1 operates asynchronously, therefore it can return either before or after the GPU finishes executing the queued graphics commands, which will eventually complete. To create an event query, you can call with the value value. To determine when the GPU is finished processing the graphics commands, you can then use that event query in a call to .

    + +

    Flush1 has parameters. For more information, see , which doesn't have parameters.

    +
    + + dn912876 + void ID3D11DeviceContext3::Flush1([In] D3D11_CONTEXT_TYPE ContextType,[In, Optional] void* hEvent) + ID3D11DeviceContext3::Flush1 +
    + + +

    Sets the hardware protection state.

    +
    +

    Specifies whether to enable hardware protection.

    + + mt158225 + void ID3D11DeviceContext3::SetHardwareProtectionState([In] BOOL HwProtectionEnable) + ID3D11DeviceContext3::SetHardwareProtectionState +
    + + +

    Gets whether hardware protection is enabled.

    +
    +

    After this method returns, points to a that indicates whether hardware protection is enabled.

    + + mt158224 + void ID3D11DeviceContext3::GetHardwareProtectionState([Out] BOOL* pHwProtectionEnable) + ID3D11DeviceContext3::GetHardwareProtectionState +
    + + +

    A debug interface controls debug settings, validates pipeline state and can only be used if the debug layer is turned on.

    +
    + +

    This interface is obtained by querying it from the using IUnknown::QueryInterface.

    For more information about the debug layer, see Debug Layer.

    Windows?Phone?8: This API is supported.

    +
    + + ff476366 + ID3D11Debug + ID3D11Debug +
    + + + Initializes a new instance of the class. + + The device. + + + + Gets or sets the feature flags that indicates which debug features are on or off. + + The feature flags. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get or sets the number of milliseconds to sleep after is called.

    +
    + +

    Value is set with .

    +
    + + ff476368 + GetPresentPerRenderOpDelay / SetPresentPerRenderOpDelay + GetPresentPerRenderOpDelay + unsigned int ID3D11Debug::GetPresentPerRenderOpDelay() +
    + + +

    Get or sets the swap chain that the runtime will use for automatically calling .

    +
    + +

    The swap chain retrieved by this method will only be used if is set in the feature mask.

    +
    + + ff476369 + GetSwapChain / SetSwapChain + GetSwapChain + HRESULT ID3D11Debug::GetSwapChain([Out] IDXGISwapChain** ppSwapChain) +
    + + +

    Set a bit field of flags that will turn debug features on and off.

    +
    +

    A combination of feature-mask flags that are combined by using a bitwise OR operation. If a flag is present, that feature will be set to on, otherwise the feature will be set to off. For descriptions of the feature-mask flags, see Remarks.

    +

    This method returns one of the Direct3D 11 Return Codes.

    + + Note??If you call this API in a Session 0 process, it returns .?

    Setting one of the following feature-mask flags will cause a rendering-operation method (listed below) to do some extra task when called.

    (0x2)Application will wait for the GPU to finish processing the rendering operation before continuing.
    (0x1)Runtime will additionally call .
    (0x4)Runtime will call . Presentation of render buffers will occur according to the settings established by prior calls to and .

    ?

    These feature-mask flags apply to the following rendering-operation methods:

    By setting one of the following feature-mask flags, you can control the behavior of the and methods to aid in testing and debugging.

    Note??These flags are supported by the Direct3D 11.1 runtime, which is available starting with Windows?8.?
    (0x8)When you call to offer resources while this flag is enabled, their content is always discarded. Use this flag to test code paths that regenerate resource content on reclaim. You cannot use this flag in combination with .
    (0x10)When you call to offer resources while this flag is enabled, their content is never discarded. Use this flag to test code paths that do not need to regenerate resource content on reclaim. You cannot use this flag in combination with .

    ?

    The behavior of the and methods depends on system-wide memory pressure. Therefore, the scenario where content is lost and must be regenerated is uncommon for most applications. The preceding new options in the Direct3D debug layer let you simulate that scenario consistently and test code paths.

    The following flag is supported by the Direct3D 11.1 runtime.

    (0x40)Disables the following default debugging behavior.

    ?

    When the debug layer is enabled, it performs certain actions to reveal application problems. By setting the feature-mask flag, you can enable the debug layer without getting the following default debugging behavior:

    • If an application calls , the runtime fills in the resource with a random color.
    • If an application calls with partial presentation parameters, the runtime ignores the partial presentation information.

    The following flag is supported by the Direct3D 11.2 runtime.

    (0x80)Disables the following default debugging behavior.

    ?

    By default (that is, without set), the debug layer validates the proper usage of all tile mappings for tiled resources for bound resources for every operation performed on the device context (for example, draw, copy, and so on). Depending on the size of the tiled resources used (if any), this validation can be processor intensive and slow. Apps might want to initially run with tiled resource tile mapping validation on; then, when they determine that the calling pattern is safe, they can disable the validation by setting .

    If is set when a tiled resource is created, the debug layer never performs the tracking of tile mapping for that resource for its entire lifetime. Alternatively, if is set for any given device context method call (like draw or copy calls) involving tiled resources, the debug layer skips all tile mapping validation for the call.

    +
    + + ff476371 + HRESULT ID3D11Debug::SetFeatureMask([In] unsigned int Mask) + ID3D11Debug::SetFeatureMask +
    + + +

    Get a bitfield of flags that indicates which debug features are on or off.

    +
    +

    Mask of feature-mask flags bitwise ORed together. If a flag is present, then that feature will be set to on, otherwise the feature will be set to off. See for a list of possible feature-mask flags.

    + + ff476367 + unsigned int ID3D11Debug::GetFeatureMask() + ID3D11Debug::GetFeatureMask +
    + + +

    Set the number of milliseconds to sleep after is called.

    +
    + No documentation. +

    This method returns one of the following Direct3D 11 Return Codes.

    + + Note??If you call this API in a Session 0 process, it returns .?

    The application will only sleep if is a set in the feature mask. If that flag is not set the number of milliseconds is set but ignored and the application does not sleep. 10ms is used as a default value if this method is never called.

    +
    + + ff476372 + HRESULT ID3D11Debug::SetPresentPerRenderOpDelay([In] unsigned int Milliseconds) + ID3D11Debug::SetPresentPerRenderOpDelay +
    + + +

    Get the number of milliseconds to sleep after is called.

    +
    +

    Number of milliseconds to sleep after Present is called.

    + +

    Value is set with .

    +
    + + ff476368 + unsigned int ID3D11Debug::GetPresentPerRenderOpDelay() + ID3D11Debug::GetPresentPerRenderOpDelay +
    + + +

    Sets a swap chain that the runtime will use for automatically calling .

    +
    + No documentation. +

    This method returns one of the following Direct3D 11 Return Codes.

    + + Note??If you call this API in a Session 0 process, it returns .?

    The swap chain set by this method will only be used if is set in the feature mask.

    +
    + + ff476373 + HRESULT ID3D11Debug::SetSwapChain([In, Optional] IDXGISwapChain* pSwapChain) + ID3D11Debug::SetSwapChain +
    + + +

    Get the swap chain that the runtime will use for automatically calling .

    +
    + No documentation. +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    The swap chain retrieved by this method will only be used if is set in the feature mask.

    +
    + + ff476369 + HRESULT ID3D11Debug::GetSwapChain([Out] IDXGISwapChain** ppSwapChain) + ID3D11Debug::GetSwapChain +
    + + +

    Check to see if the draw pipeline state is valid.

    +
    +

    A reference to the , that represents a device context.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    Use validate prior to calling a draw method (for example, ); validation requires the debug layer.

    +
    + + ff476374 + HRESULT ID3D11Debug::ValidateContext([In] ID3D11DeviceContext* pContext) + ID3D11Debug::ValidateContext +
    + + +

    Report information about a device object's lifetime.

    +
    +

    A value from the enumeration.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    ReportLiveDeviceObjects uses the value in Flags to determine the amount of information to report about a device object's lifetime.

    +
    + + ff476370 + HRESULT ID3D11Debug::ReportLiveDeviceObjects([In] D3D11_RLDO_FLAGS Flags) + ID3D11Debug::ReportLiveDeviceObjects +
    + + +

    Verifies whether the dispatch pipeline state is valid.

    +
    +

    A reference to the that represents a device context.

    +

    This method returns one of the return codes described in the topic Direct3D 11 Return Codes.

    + +

    Use this method before you call a dispatch method (for example, ). Validation requires the debug layer.

    +
    + + ff728740 + HRESULT ID3D11Debug::ValidateContextForDispatch([In] ID3D11DeviceContext* pContext) + ID3D11Debug::ValidateContextForDispatch +
    + + +

    A domain-shader interface manages an executable program (a domain shader) that controls the domain-shader stage.

    +
    + +

    The domain-shader interface has no methods; use HLSL to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..

    To create a domain-shader interface, call . Before using a domain shader you must bind it to the device by calling .

    This interface is defined in D3D11.h.

    +
    + + ff476535 + ID3D11DomainShader + ID3D11DomainShader +
    + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    The device context interface represents a device context; it is used to render commands. adds new methods to those in .

    +
    + + hh404598 + ID3D11Fence + ID3D11Fence +
    + + + Constructs a new + + The device with which to associate the state object. + The initial value for the fence. + A combination of FenceFlags values that are combined by using a bitwise OR operation. The resulting value specifies options for the fence. + The newly created object. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetCompletedValue + GetCompletedValue + unsigned longlong ID3D11Fence::GetCompletedValue() + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3D11Fence::CreateSharedHandle([In, Optional] const SECURITY_ATTRIBUTES* pAttributes,[In] unsigned int dwAccess,[In, Optional] const wchar_t* lpName,[Out] void** pHandle) + ID3D11Fence::CreateSharedHandle + + + + No documentation. + + No documentation. + + unsigned longlong ID3D11Fence::GetCompletedValue() + ID3D11Fence::GetCompletedValue + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID3D11Fence::SetEventOnCompletion([In] unsigned longlong Value,[In] void* hEvent) + ID3D11Fence::SetEventOnCompletion + + + +

    Optional flags that control the behavior of .

    +
    + + ff476084 + D3D11_ASYNC_GETDATA_FLAG + D3D11_ASYNC_GETDATA_FLAG +
    + + + No documentation. + + + ff476084 + D3D11_ASYNC_GETDATA_DONOTFLUSH + D3D11_ASYNC_GETDATA_DONOTFLUSH + + + + None. + + + None + None + + + +

    Specifies the type of Microsoft Direct3D authenticated channel.

    +
    + + hh447599 + D3D11_AUTHENTICATED_CHANNEL_TYPE + D3D11_AUTHENTICATED_CHANNEL_TYPE +
    + + +

    Direct3D?11 channel. This channel provides communication with the Direct3D runtime.

    +
    + + hh447599 + D3D11_AUTHENTICATED_CHANNEL_D3D11 + D3D11_AUTHENTICATED_CHANNEL_D3D11 +
    + + +

    Software driver channel. This channel provides communication with a driver that implements content protection mechanisms in software.

    +
    + + hh447599 + D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE + D3D11_AUTHENTICATED_CHANNEL_DRIVER_SOFTWARE +
    + + +

    Hardware driver channel. This channel provides communication with a driver that implements content protection mechanisms in the GPU hardware.

    +
    + + hh447599 + D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE + D3D11_AUTHENTICATED_CHANNEL_DRIVER_HARDWARE +
    + + +

    Specifies the type of process that is identified in the structure.

    +
    + + hh447606 + D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE + D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE +
    + + + No documentation. + + + hh447606 + D3D11_PROCESSIDTYPE_UNKNOWN + D3D11_PROCESSIDTYPE_UNKNOWN + + + + No documentation. + + + hh447606 + D3D11_PROCESSIDTYPE_DWM + D3D11_PROCESSIDTYPE_DWM + + + + No documentation. + + + hh447606 + D3D11_PROCESSIDTYPE_HANDLE + D3D11_PROCESSIDTYPE_HANDLE + + + +

    Identifies how to bind a resource to the pipeline.

    +
    + +

    In general, binding flags can be combined using a logical OR (except the constant-buffer flag); however, you should use a single flag to allow the device to optimize the resource usage.

    This enumeration is used by a:

    • Buffer description when creating a buffer.
    • Texture description when creating a texture (see or or ).

    A shader-resource buffer is NOT a constant buffer; rather, it is a texture or buffer resource that is bound to a shader, that contains texture or buffer data (it is not limited to a single element type in the buffer). A shader-resource buffer is created with the flag and is bound to the pipeline using one of these APIs: , , or . Furthermore, a shader-resource buffer cannot use the flag.

    Note??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views (SRVs) of dynamic buffers with . The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call with . CheckFeatureSupport fills members of a structure with the device's features. The relevant members here are MapNoOverwriteOnDynamicConstantBuffer and MapNoOverwriteOnDynamicBufferSRV.? +
    + + ff476085 + D3D11_BIND_FLAG + D3D11_BIND_FLAG +
    + + +

    Bind a buffer as a vertex buffer to the input-assembler stage.

    +
    + + ff476085 + D3D11_BIND_VERTEX_BUFFER + D3D11_BIND_VERTEX_BUFFER +
    + + +

    Bind a buffer as an index buffer to the input-assembler stage.

    +
    + + ff476085 + D3D11_BIND_INDEX_BUFFER + D3D11_BIND_INDEX_BUFFER +
    + + +

    Bind a buffer as a constant buffer to a shader stage; this flag may NOT be combined with any other bind flag.

    +
    + + ff476085 + D3D11_BIND_CONSTANT_BUFFER + D3D11_BIND_CONSTANT_BUFFER +
    + + +

    Bind a buffer or texture to a shader stage; this flag cannot be used with the flag.

    Note??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views (SRVs) of dynamic buffers with . The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call with . CheckFeatureSupport fills members of a structure with the device's features. The relevant members here are MapNoOverwriteOnDynamicConstantBuffer and MapNoOverwriteOnDynamicBufferSRV. ?
    +
    + + ff476085 + D3D11_BIND_SHADER_RESOURCE + D3D11_BIND_SHADER_RESOURCE +
    + + +

    Bind an output buffer for the stream-output stage.

    +
    + + ff476085 + D3D11_BIND_STREAM_OUTPUT + D3D11_BIND_STREAM_OUTPUT +
    + + +

    Bind a texture as a render target for the output-merger stage.

    +
    + + ff476085 + D3D11_BIND_RENDER_TARGET + D3D11_BIND_RENDER_TARGET +
    + + +

    Bind a texture as a depth-stencil target for the output-merger stage.

    +
    + + ff476085 + D3D11_BIND_DEPTH_STENCIL + D3D11_BIND_DEPTH_STENCIL +
    + + +

    Bind an unordered access resource.

    +
    + + ff476085 + D3D11_BIND_UNORDERED_ACCESS + D3D11_BIND_UNORDERED_ACCESS +
    + + +

    Set this flag to indicate that a 2D texture is used to receive output from the decoder API. The common way to create resources for a decoder output is by calling the method to create an array of 2D textures. However, you cannot use texture arrays that are created with this flag in calls to .

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476085 + D3D11_BIND_DECODER + D3D11_BIND_DECODER +
    + + +

    Set this flag to indicate that a 2D texture is used to receive input from the video encoder API. The common way to create resources for a video encoder is by calling the method to create an array of 2D textures. However, you cannot use texture arrays that are created with this flag in calls to .

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476085 + D3D11_BIND_VIDEO_ENCODER + D3D11_BIND_VIDEO_ENCODER +
    + + + None. + + + None + None + + + +

    RGB or alpha blending operation.

    +
    + +

    The runtime implements RGB blending and alpha blending separately. Therefore, blend state requires separate blend operations for RGB data and alpha data. These blend operations are specified in a blend description. The two sources ?source 1 and source 2? are shown in the blending block diagram.

    Blend state is used by the output-merger stage to determine how to blend together two RGB pixel values and two alpha values. The two RGB pixel values and two alpha values are the RGB pixel value and alpha value that the pixel shader outputs and the RGB pixel value and alpha value already in the output render target. The blend option controls the data source that the blending stage uses to modulate values for the pixel shader, render target, or both. The blend operation controls how the blending stage mathematically combines these modulated values.

    +
    + + ff476088 + D3D11_BLEND_OP + D3D11_BLEND_OP +
    + + +

    Add source 1 and source 2.

    +
    + + ff476088 + D3D11_BLEND_OP_ADD + D3D11_BLEND_OP_ADD +
    + + +

    Subtract source 1 from source 2.

    +
    + + ff476088 + D3D11_BLEND_OP_SUBTRACT + D3D11_BLEND_OP_SUBTRACT +
    + + +

    Subtract source 2 from source 1.

    +
    + + ff476088 + D3D11_BLEND_OP_REV_SUBTRACT + D3D11_BLEND_OP_REV_SUBTRACT +
    + + +

    Find the minimum of source 1 and source 2.

    +
    + + ff476088 + D3D11_BLEND_OP_MIN + D3D11_BLEND_OP_MIN +
    + + +

    Find the maximum of source 1 and source 2.

    +
    + + ff476088 + D3D11_BLEND_OP_MAX + D3D11_BLEND_OP_MAX +
    + + +

    Blend factors, which modulate values for the pixel shader and render target.

    +
    + +

    Blend operations are specified in a blend description.

    +
    + + ff476086 + D3D11_BLEND + D3D11_BLEND +
    + + +

    The blend factor is (0, 0, 0, 0). No pre-blend operation.

    +
    + + ff476086 + D3D11_BLEND_ZERO + D3D11_BLEND_ZERO +
    + + +

    The blend factor is (1, 1, 1, 1). No pre-blend operation.

    +
    + + ff476086 + D3D11_BLEND_ONE + D3D11_BLEND_ONE +
    + + +

    The blend factor is (R?, G?, B?, A?), that is color data (RGB) from a pixel shader. No pre-blend operation.

    +
    + + ff476086 + D3D11_BLEND_SRC_COLOR + D3D11_BLEND_SRC_COLOR +
    + + +

    The blend factor is (1 - R?, 1 - G?, 1 - B?, 1 - A?), that is color data (RGB) from a pixel shader. The pre-blend operation inverts the data, generating 1 - RGB.

    +
    + + ff476086 + D3D11_BLEND_INV_SRC_COLOR + D3D11_BLEND_INV_SRC_COLOR +
    + + +

    The blend factor is (A?, A?, A?, A?), that is alpha data (A) from a pixel shader. No pre-blend operation.

    +
    + + ff476086 + D3D11_BLEND_SRC_ALPHA + D3D11_BLEND_SRC_ALPHA +
    + + +

    The blend factor is ( 1 - A?, 1 - A?, 1 - A?, 1 - A?), that is alpha data (A) from a pixel shader. The pre-blend operation inverts the data, generating 1 - A.

    +
    + + ff476086 + D3D11_BLEND_INV_SRC_ALPHA + D3D11_BLEND_INV_SRC_ALPHA +
    + + +

    The blend factor is (Ad Ad Ad Ad), that is alpha data from a render target. No pre-blend operation.

    +
    + + ff476086 + D3D11_BLEND_DEST_ALPHA + D3D11_BLEND_DEST_ALPHA +
    + + +

    The blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad), that is alpha data from a render target. The pre-blend operation inverts the data, generating 1 - A.

    +
    + + ff476086 + D3D11_BLEND_INV_DEST_ALPHA + D3D11_BLEND_INV_DEST_ALPHA +
    + + +

    The blend factor is (Rd, Gd, Bd, Ad), that is color data from a render target. No pre-blend operation.

    +
    + + ff476086 + D3D11_BLEND_DEST_COLOR + D3D11_BLEND_DEST_COLOR +
    + + +

    The blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad), that is color data from a render target. The pre-blend operation inverts the data, generating 1 - RGB.

    +
    + + ff476086 + D3D11_BLEND_INV_DEST_COLOR + D3D11_BLEND_INV_DEST_COLOR +
    + + +

    The blend factor is (f, f, f, 1); where f = min(A?, 1 - Ad). The pre-blend operation clamps the data to 1 or less. +

    +
    + + ff476086 + D3D11_BLEND_SRC_ALPHA_SAT + D3D11_BLEND_SRC_ALPHA_SAT +
    + + +

    The blend factor is the blend factor set with . No pre-blend operation.

    +
    + + ff476086 + D3D11_BLEND_BLEND_FACTOR + D3D11_BLEND_BLEND_FACTOR +
    + + +

    The blend factor is the blend factor set with . The pre-blend operation inverts the blend factor, generating 1 - blend_factor.

    +
    + + ff476086 + D3D11_BLEND_INV_BLEND_FACTOR + D3D11_BLEND_INV_BLEND_FACTOR +
    + + +

    The blend factor is data sources both as color data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.

    +
    + + ff476086 + D3D11_BLEND_SRC1_COLOR + D3D11_BLEND_SRC1_COLOR +
    + + +

    The blend factor is data sources both as color data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - RGB. This blend factor supports dual-source color blending.

    +
    + + ff476086 + D3D11_BLEND_INV_SRC1_COLOR + D3D11_BLEND_INV_SRC1_COLOR +
    + + +

    The blend factor is data sources as alpha data output by a pixel shader. There is no pre-blend operation. This blend factor supports dual-source color blending.

    +
    + + ff476086 + D3D11_BLEND_SRC1_ALPHA + D3D11_BLEND_SRC1_ALPHA +
    + + +

    The blend factor is data sources as alpha data output by a pixel shader. The pre-blend operation inverts the data, generating 1 - A. This blend factor supports dual-source color blending.

    +
    + + ff476086 + D3D11_BLEND_INV_SRC1_ALPHA + D3D11_BLEND_INV_SRC1_ALPHA +
    + + +

    Specifies the type of I/O bus that is used by the graphics adapter.

    +
    + + hh447628 + D3D11_BUS_TYPE + D3D11_BUS_TYPE +
    + + +

    Indicates a type of bus other than the types listed here. +

    +
    + + hh447628 + D3D11_BUS_TYPE_OTHER + D3D11_BUS_TYPE_OTHER +
    + + +

    PCI bus. +

    +
    + + hh447628 + D3D11_BUS_TYPE_PCI + D3D11_BUS_TYPE_PCI +
    + + +

    PCI-X bus. +

    +
    + + hh447628 + D3D11_BUS_TYPE_PCIX + D3D11_BUS_TYPE_PCIX +
    + + +

    PCI Express bus. +

    +
    + + hh447628 + D3D11_BUS_TYPE_PCIEXPRESS + D3D11_BUS_TYPE_PCIEXPRESS +
    + + +

    Accelerated Graphics Port (AGP) bus. +

    +
    + + hh447628 + D3D11_BUS_TYPE_AGP + D3D11_BUS_TYPE_AGP +
    + + +

    The implementation for the graphics adapter is in a motherboard chipset's north bridge. This flag implies that data never goes over an expansion bus (such as PCI or AGP) when it is transferred from main memory to the graphics adapter.

    +
    + + hh447628 + D3D11_BUS_IMPL_MODIFIER_INSIDE_OF_CHIPSET + D3D11_BUS_IMPL_MODIFIER_INSIDE_OF_CHIPSET +
    + + +

    Indicates that the graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are soldered to the motherboard. This flag implies that data never goes over an expansion bus (such as PCI or AGP) when it is transferred from main memory to the graphics adapter.

    +
    + + hh447628 + D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP + D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP +
    + + +

    The graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are connected through sockets to the motherboard. +

    +
    + + hh447628 + D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET + D3D11_BUS_IMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET +
    + + +

    The graphics adapter is connected to the motherboard through a daughterboard connector. +

    +
    + + hh447628 + D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR + D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR +
    + + +

    The graphics adapter is connected to the motherboard through a daughterboard connector, and the graphics adapter is inside an enclosure that is not user accessible. +

    +
    + + hh447628 + D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE + D3D11_BUS_IMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE +
    + + +

    One of the D3D11_BUS_IMPL_MODIFIER_Xxx flags is set. +

    +
    + + hh447628 + D3D11_BUS_IMPL_MODIFIER_NON_STANDARD + D3D11_BUS_IMPL_MODIFIER_NON_STANDARD +
    + + +

    Identifies how to check multisample quality levels.

    +
    + + dn280374 + D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG + D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_FLAG +
    + + +

    Indicates to check the multisample quality levels of a tiled resource.

    +
    + + dn280374 + D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE + D3D11_CHECK_MULTISAMPLE_QUALITY_LEVELS_TILED_RESOURCE +
    + + + None. + + + None + None + + + +

    Identify which components of each pixel of a render target are writable during blending.

    +
    + +

    These flags can be combined with a bitwise OR.

    +
    + + ff476100 + D3D11_COLOR_WRITE_ENABLE + D3D11_COLOR_WRITE_ENABLE +
    + + +

    Allow data to be stored in the red component.

    +
    + + ff476100 + D3D11_COLOR_WRITE_ENABLE_RED + D3D11_COLOR_WRITE_ENABLE_RED +
    + + +

    Allow data to be stored in the green component.

    +
    + + ff476100 + D3D11_COLOR_WRITE_ENABLE_GREEN + D3D11_COLOR_WRITE_ENABLE_GREEN +
    + + +

    Allow data to be stored in the blue component.

    +
    + + ff476100 + D3D11_COLOR_WRITE_ENABLE_BLUE + D3D11_COLOR_WRITE_ENABLE_BLUE +
    + + +

    Allow data to be stored in the alpha component.

    +
    + + ff476100 + D3D11_COLOR_WRITE_ENABLE_ALPHA + D3D11_COLOR_WRITE_ENABLE_ALPHA +
    + + +

    Allow data to be stored in all components.

    +
    + + ff476100 + D3D11_COLOR_WRITE_ENABLE_ALL + D3D11_COLOR_WRITE_ENABLE_ALL +
    + + +

    Comparison options.

    +
    + +

    A comparison option determines whether how the runtime compares source (new) data against destination (existing) data before storing the new data. The comparison option is declared in a description before an object is created. The API allows you to set a comparison option for a depth-stencil buffer (see ), depth-stencil operations (see ), or sampler state (see ).

    +
    + + ff476101 + D3D11_COMPARISON_FUNC + D3D11_COMPARISON_FUNC +
    + + +

    Never pass the comparison.

    +
    + + ff476101 + D3D11_COMPARISON_NEVER + D3D11_COMPARISON_NEVER +
    + + +

    If the source data is less than the destination data, the comparison passes.

    +
    + + ff476101 + D3D11_COMPARISON_LESS + D3D11_COMPARISON_LESS +
    + + +

    If the source data is equal to the destination data, the comparison passes.

    +
    + + ff476101 + D3D11_COMPARISON_EQUAL + D3D11_COMPARISON_EQUAL +
    + + +

    If the source data is less than or equal to the destination data, the comparison passes.

    +
    + + ff476101 + D3D11_COMPARISON_LESS_EQUAL + D3D11_COMPARISON_LESS_EQUAL +
    + + +

    If the source data is greater than the destination data, the comparison passes.

    +
    + + ff476101 + D3D11_COMPARISON_GREATER + D3D11_COMPARISON_GREATER +
    + + +

    If the source data is not equal to the destination data, the comparison passes.

    +
    + + ff476101 + D3D11_COMPARISON_NOT_EQUAL + D3D11_COMPARISON_NOT_EQUAL +
    + + +

    If the source data is greater than or equal to the destination data, the comparison passes.

    +
    + + ff476101 + D3D11_COMPARISON_GREATER_EQUAL + D3D11_COMPARISON_GREATER_EQUAL +
    + + +

    Always pass the comparison.

    +
    + + ff476101 + D3D11_COMPARISON_ALWAYS + D3D11_COMPARISON_ALWAYS +
    + + +

    Unordered resource support options for a compute shader resource (see ).

    +
    + + ff476135 + D3D11_FORMAT_SUPPORT2 + D3D11_FORMAT_SUPPORT2 +
    + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_ADD + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_ADD + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX + D3D11_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_UAV_TYPED_LOAD + D3D11_FORMAT_SUPPORT2_UAV_TYPED_LOAD + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_UAV_TYPED_STORE + D3D11_FORMAT_SUPPORT2_UAV_TYPED_STORE + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP + D3D11_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_TILED + D3D11_FORMAT_SUPPORT2_TILED + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_SHAREABLE + D3D11_FORMAT_SUPPORT2_SHAREABLE + + + + No documentation. + + + ff476135 + D3D11_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY + D3D11_FORMAT_SUPPORT2_MULTIPLANE_OVERLAY + + + + None. + + + None + None + + + +

    Identifies whether conservative rasterization is on or off.

    +
    + + dn859360 + D3D11_CONSERVATIVE_RASTERIZATION_MODE + D3D11_CONSERVATIVE_RASTERIZATION_MODE +
    + + +

    Conservative rasterization is off.

    +
    + + dn859360 + D3D11_CONSERVATIVE_RASTERIZATION_MODE_OFF + D3D11_CONSERVATIVE_RASTERIZATION_MODE_OFF +
    + + +

    Conservative rasterization is on.

    +
    + + dn859360 + D3D11_CONSERVATIVE_RASTERIZATION_MODE_ON + D3D11_CONSERVATIVE_RASTERIZATION_MODE_ON +
    + + +

    Specifies if the hardware and driver support conservative rasterization and at what tier level.

    +
    + + dn859364 + D3D11_CONSERVATIVE_RASTERIZATION_TIER + D3D11_CONSERVATIVE_RASTERIZATION_TIER +
    + + +

    Conservative rasterization isn't supported.

    +
    + + dn859364 + D3D11_CONSERVATIVE_RASTERIZATION_NOT_SUPPORTED + D3D11_CONSERVATIVE_RASTERIZATION_NOT_SUPPORTED +
    + + +

    Tier_1 conservative rasterization is supported.

    +
    + + dn859364 + D3D11_CONSERVATIVE_RASTERIZATION_TIER_1 + D3D11_CONSERVATIVE_RASTERIZATION_TIER_1 +
    + + +

    Tier_2 conservative rasterization is supported.

    +
    + + dn859364 + D3D11_CONSERVATIVE_RASTERIZATION_TIER_2 + D3D11_CONSERVATIVE_RASTERIZATION_TIER_2 +
    + + +

    Tier_3 conservative rasterization is supported.

    +
    + + dn859364 + D3D11_CONSERVATIVE_RASTERIZATION_TIER_3 + D3D11_CONSERVATIVE_RASTERIZATION_TIER_3 +
    + + +

    Contains flags that describe content-protection capabilities.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS + D3D11_CONTENT_PROTECTION_CAPS +
    + + +

    The content protection is implemented in software by the driver.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_SOFTWARE + D3D11_CONTENT_PROTECTION_CAPS_SOFTWARE +
    + + +

    The content protection is implemented in hardware by the GPU. +

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_HARDWARE + D3D11_CONTENT_PROTECTION_CAPS_HARDWARE +
    + + +

    Content protection is always applied to a protected surface, regardless of whether the application explicitly enables protection.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_PROTECTION_ALWAYS_ON + D3D11_CONTENT_PROTECTION_CAPS_PROTECTION_ALWAYS_ON +
    + + +

    The driver can use partially encrypted buffers. If this capability is not present, the entire buffer must be either encrypted or clear.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION + D3D11_CONTENT_PROTECTION_CAPS_PARTIAL_DECRYPTION +
    + + +

    The driver can encrypt data using a separate content key that is encrypted using the session key.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY + D3D11_CONTENT_PROTECTION_CAPS_CONTENT_KEY +
    + + +

    The driver can refresh the session key without renegotiating the key.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY + D3D11_CONTENT_PROTECTION_CAPS_FRESHEN_SESSION_KEY +
    + + +

    The driver can read back encrypted data from a protected surface. For more information, see .

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK + D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK +
    + + +

    The driver requires a separate key to read encrypted data from a protected surface.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK_KEY + D3D11_CONTENT_PROTECTION_CAPS_ENCRYPTED_READ_BACK_KEY +
    + + +

    If the encryption type is D3DCRYPTOTYPE_AES128_CTR, the application must use a sequential count in the structure.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_SEQUENTIAL_CTR_IV + D3D11_CONTENT_PROTECTION_CAPS_SEQUENTIAL_CTR_IV +
    + + +

    The driver supports encrypted slice data, but does not support any other encrypted data in the compressed buffer. The caller should not encrypt any data within the buffer other than the slice data.

    Note??The driver should only report this flag for the specific profiles that have this limitation. ?
    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_ENCRYPT_SLICEDATA_ONLY + D3D11_CONTENT_PROTECTION_CAPS_ENCRYPT_SLICEDATA_ONLY +
    + + +

    The driver can copy encrypted data from one resource to another, decrypting the data as part of the process.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT + D3D11_CONTENT_PROTECTION_CAPS_DECRYPTION_BLT +
    + + +

    The hardware supports the protection of specific resources. This means that:

    • The contents of a protected allocation can never be read by the CPU.
    • The hardware can ensure a protected resource cannot be copied to an unprotected resource.

    Note??This enumeration value is supported starting with Windows?10.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECT_UNCOMPRESSED + D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECT_UNCOMPRESSED +
    + + +

    Physical pages of a protected resource can be evicted and potentially paged to disk in low memory conditions without losing the contents of the resource when paged back in.

    Note??This enumeration value is supported starting with Windows?10.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECTED_MEMORY_PAGEABLE + D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_PROTECTED_MEMORY_PAGEABLE +
    + + +

    The hardware supports an automatic teardown mechanism that could trigger hardware keys or protected content to become lost in some conditions. The application can register to be notified when these events occur.

    Note??This enumeration value is supported starting with Windows?10.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN + D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_TEARDOWN +
    + + +

    The secure environment is tightly coupled with the GPU and an should be used for communication between the user mode DRM component and the secure execution environment.

    Note??This enumeration value is supported starting with Windows?10.

    +
    + + hh447629 + D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_DRM_COMMUNICATION + D3D11_CONTENT_PROTECTION_CAPS_HARDWARE_DRM_COMMUNICATION +
    + + +

    Specifies the context in which a query occurs.

    +
    + +

    This enum is used by the following:

    • structure
    • A CD3D11_QUERY_DESC1 constructor.
    • method
    +
    + + dn859366 + D3D11_CONTEXT_TYPE + D3D11_CONTEXT_TYPE +
    + + +

    The query can occur in all contexts.

    +
    + + dn859366 + D3D11_CONTEXT_TYPE_ALL + D3D11_CONTEXT_TYPE_ALL +
    + + +

    The query occurs in the context of a 3D command queue.

    +
    + + dn859366 + D3D11_CONTEXT_TYPE_3D + D3D11_CONTEXT_TYPE_3D +
    + + +

    The query occurs in the context of a 3D compute queue.

    +
    + + dn859366 + D3D11_CONTEXT_TYPE_COMPUTE + D3D11_CONTEXT_TYPE_COMPUTE +
    + + +

    The query occurs in the context of a 3D copy queue.

    +
    + + dn859366 + D3D11_CONTEXT_TYPE_COPY + D3D11_CONTEXT_TYPE_COPY +
    + + +

    The query occurs in the context of video.

    +
    + + dn859366 + D3D11_CONTEXT_TYPE_VIDEO + D3D11_CONTEXT_TYPE_VIDEO +
    + + + Note??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Specifies how to handle the existing contents of a resource during a copy or update operation of a region within that resource.

    +
    + + hh404451 + D3D11_COPY_FLAGS + D3D11_COPY_FLAGS +
    + + +

    The existing contents of the resource cannot be overwritten.

    +
    + + hh404451 + D3D11_COPY_NO_OVERWRITE + D3D11_COPY_NO_OVERWRITE +
    + + +

    The existing contents of the resource are undefined and can be discarded.

    +
    + + hh404451 + D3D11_COPY_DISCARD + D3D11_COPY_DISCARD +
    + + + None. + + + None + None + + + +

    Options for performance counters.

    +
    + +

    Independent hardware vendors may define their own set of performance counters for their devices, by giving the enumeration value a number that is greater than the value for .

    This enumeration is used by and .

    +
    + + ff476102 + D3D11_COUNTER + D3D11_COUNTER +
    + + +

    Define a performance counter that is dependent on the hardware device.

    +
    + + ff476102 + D3D11_COUNTER_DEVICE_DEPENDENT_0 + D3D11_COUNTER_DEVICE_DEPENDENT_0 +
    + + +

    Data type of a performance counter.

    +
    + +

    These flags are an output parameter in .

    +
    + + ff476105 + D3D11_COUNTER_TYPE + D3D11_COUNTER_TYPE +
    + + +

    32-bit floating point.

    +
    + + ff476105 + D3D11_COUNTER_TYPE_FLOAT32 + D3D11_COUNTER_TYPE_FLOAT32 +
    + + +

    16-bit unsigned integer.

    +
    + + ff476105 + D3D11_COUNTER_TYPE_UINT16 + D3D11_COUNTER_TYPE_UINT16 +
    + + +

    32-bit unsigned integer.

    +
    + + ff476105 + D3D11_COUNTER_TYPE_UINT32 + D3D11_COUNTER_TYPE_UINT32 +
    + + +

    64-bit unsigned integer.

    +
    + + ff476105 + D3D11_COUNTER_TYPE_UINT64 + D3D11_COUNTER_TYPE_UINT64 +
    + + +

    Specifies the types of CPU access allowed for a resource.

    +
    + +

    This enumeration is used in , , , .

    Applications may combine one or more of these flags with a logical OR. When possible, create resources with no CPU access flags, as this enables better resource optimization.

    The cannot be used when creating resources with D3D11_CPU_ACCESS flags.

    +
    + + ff476106 + D3D11_CPU_ACCESS_FLAG + D3D11_CPU_ACCESS_FLAG +
    + + +

    The resource is to be mappable so that the CPU can change its contents. Resources created with this flag cannot be set as outputs of the pipeline and must be created with either dynamic or staging usage (see ).

    +
    + + ff476106 + D3D11_CPU_ACCESS_WRITE + D3D11_CPU_ACCESS_WRITE +
    + + +

    The resource is to be mappable so that the CPU can read its contents. Resources created with this flag cannot be set as either inputs or outputs to the pipeline and must be created with staging usage (see ).

    +
    + + ff476106 + D3D11_CPU_ACCESS_READ + D3D11_CPU_ACCESS_READ +
    + + + None. + + + None + None + + + +

    Describes flags that are used to create a device context state object () with the method.

    +
    + + hh404432 + D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG + D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG +
    + + + No documentation. + + + hh404432 + D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED + D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED + + + + None. + + + None + None + + + +

    Represents the status of an interface.

    +
    + + dn894114 + D3D11_CRYPTO_SESSION_STATUS + D3D11_CRYPTO_SESSION_STATUS +
    + + + No documentation. + + + dn894114 + D3D11_CRYPTO_SESSION_STATUS_OK + D3D11_CRYPTO_SESSION_STATUS_OK + + + + No documentation. + + + dn894114 + D3D11_CRYPTO_SESSION_STATUS_KEY_LOST + D3D11_CRYPTO_SESSION_STATUS_KEY_LOST + + + + No documentation. + + + dn894114 + D3D11_CRYPTO_SESSION_STATUS_KEY_AND_CONTENT_LOST + D3D11_CRYPTO_SESSION_STATUS_KEY_AND_CONTENT_LOST + + + +

    Indicates triangles facing a particular direction are not drawn.

    +
    + +

    This enumeration is part of a rasterizer-state object description (see ).

    +
    + + ff476108 + D3D11_CULL_MODE + D3D11_CULL_MODE +
    + + +

    Always draw all triangles.

    +
    + + ff476108 + D3D11_CULL_NONE + D3D11_CULL_NONE +
    + + +

    Do not draw triangles that are front-facing.

    +
    + + ff476108 + D3D11_CULL_FRONT + D3D11_CULL_FRONT +
    + + +

    Do not draw triangles that are back-facing.

    +
    + + ff476108 + D3D11_CULL_BACK + D3D11_CULL_BACK +
    + + + No documentation. + + + D3D11_DEBUG_FEATURE_FLAGS + D3D11_DEBUG_FEATURE_FLAGS + + + + No documentation. + + + D3D11_DEBUG_FEATURE_FLUSH_PER_RENDER_OP + D3D11_DEBUG_FEATURE_FLUSH_PER_RENDER_OP + + + + No documentation. + + + D3D11_DEBUG_FEATURE_FINISH_PER_RENDER_OP + D3D11_DEBUG_FEATURE_FINISH_PER_RENDER_OP + + + + No documentation. + + + D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP + D3D11_DEBUG_FEATURE_PRESENT_PER_RENDER_OP + + + + No documentation. + + + D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE + D3D11_DEBUG_FEATURE_ALWAYS_DISCARD_OFFERED_RESOURCE + + + + No documentation. + + + D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE + D3D11_DEBUG_FEATURE_NEVER_DISCARD_OFFERED_RESOURCE + + + + No documentation. + + + D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS + D3D11_DEBUG_FEATURE_AVOID_BEHAVIOR_CHANGING_DEBUG_AIDS + + + + No documentation. + + + D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION + D3D11_DEBUG_FEATURE_DISABLE_TILED_RESOURCE_MAPPING_TRACKING_AND_VALIDATION + + + +

    Specifies the parts of the depth stencil to clear.

    +
    + +

    These flags are used when calling ; the flags can be combined with a bitwise OR.

    +
    + + ff476099 + D3D11_CLEAR_FLAG + D3D11_CLEAR_FLAG +
    + + +

    Clear the depth buffer, using fast clear if possible, then place the resource in a compressed state.

    +
    + + ff476099 + D3D11_CLEAR_DEPTH + D3D11_CLEAR_DEPTH +
    + + +

    Clear the stencil buffer, using fast clear if possible, then place the resource in a compressed state.

    +
    + + ff476099 + D3D11_CLEAR_STENCIL + D3D11_CLEAR_STENCIL +
    + + +

    Specifies how to access a resource used in a depth-stencil view.

    +
    + +

    This enumeration is used in to create a depth-stencil view.

    +
    + + ff476115 + D3D11_DSV_DIMENSION + D3D11_DSV_DIMENSION +
    + + +

    is not a valid value for and is not used.

    +
    + + ff476115 + D3D11_DSV_DIMENSION_UNKNOWN + D3D11_DSV_DIMENSION_UNKNOWN +
    + + +

    The resource will be accessed as a 1D texture.

    +
    + + ff476115 + D3D11_DSV_DIMENSION_TEXTURE1D + D3D11_DSV_DIMENSION_TEXTURE1D +
    + + +

    The resource will be accessed as an array of 1D textures.

    +
    + + ff476115 + D3D11_DSV_DIMENSION_TEXTURE1DARRAY + D3D11_DSV_DIMENSION_TEXTURE1DARRAY +
    + + +

    The resource will be accessed as a 2D texture.

    +
    + + ff476115 + D3D11_DSV_DIMENSION_TEXTURE2D + D3D11_DSV_DIMENSION_TEXTURE2D +
    + + +

    The resource will be accessed as an array of 2D textures.

    +
    + + ff476115 + D3D11_DSV_DIMENSION_TEXTURE2DARRAY + D3D11_DSV_DIMENSION_TEXTURE2DARRAY +
    + + +

    The resource will be accessed as a 2D texture with multisampling.

    +
    + + ff476115 + D3D11_DSV_DIMENSION_TEXTURE2DMS + D3D11_DSV_DIMENSION_TEXTURE2DMS +
    + + +

    The resource will be accessed as an array of 2D textures with multisampling.

    +
    + + ff476115 + D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY + D3D11_DSV_DIMENSION_TEXTURE2DMSARRAY +
    + + +

    Depth-stencil view options.

    +
    + +

    This enumeration is used by .

    Limiting a depth-stencil buffer to read-only access allows more than one depth-stencil view to be bound to the pipeline simultaneously, since it is not possible to have a read/write conflicts between separate views.

    +
    + + ff476116 + D3D11_DSV_FLAG + D3D11_DSV_FLAG +
    + + +

    Indicates that depth values are read only.

    +
    + + ff476116 + D3D11_DSV_READ_ONLY_DEPTH + D3D11_DSV_READ_ONLY_DEPTH +
    + + +

    Indicates that stencil values are read only.

    +
    + + ff476116 + D3D11_DSV_READ_ONLY_STENCIL + D3D11_DSV_READ_ONLY_STENCIL +
    + + + None. + + + None + None + + + +

    Identify the portion of a depth-stencil buffer for writing depth data.

    +
    + + ff476113 + D3D11_DEPTH_WRITE_MASK + D3D11_DEPTH_WRITE_MASK +
    + + +

    Turn off writes to the depth-stencil buffer.

    +
    + + ff476113 + D3D11_DEPTH_WRITE_MASK_ZERO + D3D11_DEPTH_WRITE_MASK_ZERO +
    + + +

    Turn on writes to the depth-stencil buffer.

    +
    + + ff476113 + D3D11_DEPTH_WRITE_MASK_ALL + D3D11_DEPTH_WRITE_MASK_ALL +
    + + +

    Device context options.

    +
    + +

    This enumeration is used by .

    +
    + + ff476114 + D3D11_DEVICE_CONTEXT_TYPE + D3D11_DEVICE_CONTEXT_TYPE +
    + + +

    The device context is an immediate context.

    +
    + + ff476114 + D3D11_DEVICE_CONTEXT_IMMEDIATE + D3D11_DEVICE_CONTEXT_IMMEDIATE +
    + + +

    The device context is a deferred context.

    +
    + + ff476114 + D3D11_DEVICE_CONTEXT_DEFERRED + D3D11_DEVICE_CONTEXT_DEFERRED +
    + + +

    Describes parameters that are used to create a device.

    +
    + +

    Device creation flags are used by and D3D11CreateDeviceAndSwapChain.

    An application might dynamically create (and destroy) threads to improve performance especially on a machine with multiple CPU cores. There may be cases, however, when an application needs to prevent extra threads from being created. This can happen when you want to simplify debugging, profile code or develop a tool for instance. For these cases, use to request that the runtime and video driver not create any additional threads that might interfere with the application.

    +
    + + ff476107 + D3D11_CREATE_DEVICE_FLAG + D3D11_CREATE_DEVICE_FLAG +
    + + +

    Use this flag if your application will only call methods of Direct3D?11 interfaces from a single thread. By default, the object is thread-safe. By using this flag, you can increase performance. However, if you use this flag and your application calls methods of Direct3D?11 interfaces from multiple threads, undefined behavior might result.

    +
    + + ff476107 + D3D11_CREATE_DEVICE_SINGLETHREADED + D3D11_CREATE_DEVICE_SINGLETHREADED +
    + + +

    Creates a device that supports the debug layer.

    To use this flag, you must have D3D11*SDKLayers.dll installed; otherwise, device creation fails. To get D3D11_1SDKLayers.dll, install the SDK for Windows?8.

    +
    + + ff476107 + D3D11_CREATE_DEVICE_DEBUG + D3D11_CREATE_DEVICE_DEBUG +
    + + +
    Note??This flag is not supported in Direct3D?11. ?
    +
    + + ff476107 + D3D11_CREATE_DEVICE_SWITCH_TO_REF + D3D11_CREATE_DEVICE_SWITCH_TO_REF +
    + + +

    Prevents multiple threads from being created. When this flag is used with a Windows Advanced Rasterization Platform (WARP) device, no additional threads will be created by WARP and all rasterization will occur on the calling thread. This flag is not recommended for general use. See remarks.

    +
    + + ff476107 + D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS + D3D11_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS +
    + + +

    Creates a device that supports BGRA formats ( and ). All 10level9 and higher hardware with WDDM 1.1+ drivers support BGRA formats.

    Note??Required for Direct2D interoperability with Direct3D resources. ?
    +
    + + ff476107 + D3D11_CREATE_DEVICE_BGRA_SUPPORT + D3D11_CREATE_DEVICE_BGRA_SUPPORT +
    + + +

    Causes the device and driver to keep information that you can use for shader debugging. The exact impact from this flag will vary from driver to driver.

    To use this flag, you must have D3D11_1SDKLayers.dll installed; otherwise, device creation fails. The created device supports the debug layer. To get D3D11_1SDKLayers.dll, install the SDK for Windows?8.

    If you use this flag and the current driver does not support shader debugging, device creation fails. Shader debugging requires a driver that is implemented to the WDDM for Windows?8 (WDDM 1.2).

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476107 + D3D11_CREATE_DEVICE_DEBUGGABLE + D3D11_CREATE_DEVICE_DEBUGGABLE +
    + + +

    Causes the Direct3D runtime to ignore registry settings that turn on the debug layer. You can turn on the debug layer by using the DirectX Control Panel that was included as part of the DirectX SDK. We shipped the last version of the DirectX SDK in June 2010; you can download it from the Microsoft Download Center. You can set this flag in your app, typically in release builds only, to prevent end users from using the DirectX Control Panel to monitor how the app uses Direct3D.

    Note??You can also set this flag in your app to prevent Direct3D debugging tools, such as Visual Studio Ultimate?2012, from hooking your app. ?

    Windows?8.1:??This flag doesn't prevent Visual Studio?2013 and later running on Windows?8.1 and later from hooking your app; instead use . This flag still prevents Visual Studio?2013 and later running on Windows?8 and earlier from hooking your app.

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476107 + D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY + D3D11_CREATE_DEVICE_PREVENT_ALTERING_LAYER_SETTINGS_FROM_REGISTRY +
    + + +

    Use this flag if the device will produce GPU workloads that take more than two seconds to complete, and you want the operating system to allow them to successfully finish. If this flag is not set, the operating system performs timeout detection and recovery when it detects a GPU packet that took more than two seconds to execute. If this flag is set, the operating system allows such a long running packet to execute without resetting the GPU. We recommend not to set this flag if your device needs to be highly responsive so that the operating system can detect and recover from GPU timeouts. We recommend to set this flag if your device needs to perform time consuming background tasks such as compute, image recognition, and video encoding to allow such tasks to successfully finish.

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476107 + D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT + D3D11_CREATE_DEVICE_DISABLE_GPU_TIMEOUT +
    + + +

    Forces the creation of the Direct3D device to fail if the display driver is not implemented to the WDDM for Windows?8 (WDDM 1.2). When the display driver is not implemented to WDDM 1.2, only a Direct3D device that is created with feature level 9.1, 9.2, or 9.3 supports video; therefore, if this flag is set, the runtime creates the Direct3D device only for feature level 9.1, 9.2, or 9.3. We recommend not to specify this flag for applications that want to favor Direct3D capability over video. If feature level 10 and higher is available, the runtime will use that feature level regardless of video support.

    If this flag is set, device creation on the Basic Render Device (BRD) will succeed regardless of the BRD's missing support for video decode. This is because the Media Foundation video stack operates in software mode on BRD. In this situation, if you force the video stack to create the Direct3D device twice (create the device once with this flag, next discover BRD, then again create the device without the flag), you actually degrade performance.

    If you attempt to create a Direct3D device with driver type , , or , device creation fails at any feature level because none of the associated drivers provide video capability. If you attempt to create a Direct3D device with driver type , device creation succeeds to allow software fallback for video.

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476107 + D3D11_CREATE_DEVICE_VIDEO_SUPPORT + D3D11_CREATE_DEVICE_VIDEO_SUPPORT +
    + + + None. + + + None + None + + + +

    Direct3D 11 feature options.

    +
    + +

    This enumeration is used when querying a driver about support for these features by calling . Each value in this enumeration has a corresponding data structure that is required to be passed to the pFeatureSupportData parameter of .

    +
    + + ff476124 + D3D11_FEATURE + D3D11_FEATURE +
    + + +

    The driver supports multithreading. To see an example of testing a driver for multithread support, see How To: Check for Driver Support. Refer to .

    +
    + + ff476124 + D3D11_FEATURE_THREADING + D3D11_FEATURE_THREADING +
    + + +

    Supports the use of the double-precision shaders in HLSL. Refer to .

    +
    + + ff476124 + D3D11_FEATURE_DOUBLES + D3D11_FEATURE_DOUBLES +
    + + +

    Supports the formats in . Refer to .

    +
    + + ff476124 + D3D11_FEATURE_FORMAT_SUPPORT + D3D11_FEATURE_FORMAT_SUPPORT +
    + + +

    Supports the formats in . Refer to .

    +
    + + ff476124 + D3D11_FEATURE_FORMAT_SUPPORT2 + D3D11_FEATURE_FORMAT_SUPPORT2 +
    + + +

    Supports compute shaders and raw and structured buffers. Refer to .

    +
    + + ff476124 + D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS + D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS +
    + + +

    Supports Direct3D 11.1 feature options. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476124 + D3D11_FEATURE_D3D11_OPTIONS + D3D11_FEATURE_D3D11_OPTIONS +
    + + +

    Supports specific adapter architecture. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476124 + D3D11_FEATURE_ARCHITECTURE_INFO + D3D11_FEATURE_ARCHITECTURE_INFO +
    + + +

    Supports Direct3D?9 feature options. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476124 + D3D11_FEATURE_D3D9_OPTIONS + D3D11_FEATURE_D3D9_OPTIONS +
    + + +

    Supports minimum precision of shaders. For more info about HLSL minimum precision, see using HLSL minimum precision. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476124 + D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT + D3D11_FEATURE_SHADER_MIN_PRECISION_SUPPORT +
    + + +

    Supports Direct3D?9 shadowing feature. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476124 + D3D11_FEATURE_D3D9_SHADOW_SUPPORT + D3D11_FEATURE_D3D9_SHADOW_SUPPORT +
    + + +

    Supports Direct3D 11.2 feature options. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.2.

    +
    + + ff476124 + D3D11_FEATURE_D3D11_OPTIONS1 + D3D11_FEATURE_D3D11_OPTIONS1 +
    + + +

    Supports Direct3D 11.2 instancing options. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.2.

    +
    + + ff476124 + D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT + D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT +
    + + +

    Supports Direct3D 11.2 marker options. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.2.

    +
    + + ff476124 + D3D11_FEATURE_MARKER_SUPPORT + D3D11_FEATURE_MARKER_SUPPORT +
    + + +

    Supports Direct3D?9 feature options, which includes the Direct3D?9 shadowing feature and instancing support. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.2.

    +
    + + ff476124 + D3D11_FEATURE_D3D9_OPTIONS1 + D3D11_FEATURE_D3D9_OPTIONS1 +
    + + +

    Supports Direct3D 11.3 conservative rasterization feature options. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.3.

    +
    + + ff476124 + D3D11_FEATURE_D3D11_OPTIONS2 + D3D11_FEATURE_D3D11_OPTIONS2 +
    + + +

    Supports Direct3D 11.4 conservative rasterization feature options. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.4.

    +
    + + ff476124 + D3D11_FEATURE_D3D11_OPTIONS3 + D3D11_FEATURE_D3D11_OPTIONS3 +
    + + +

    Supports GPU virtual addresses. Refer to .

    +
    + + ff476124 + D3D11_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT + D3D11_FEATURE_GPU_VIRTUAL_ADDRESS_SUPPORT +
    + + +

    Supports a single boolean for NV12 shared textures. Refer to .

    Direct3D 11:??This value is not supported until Direct3D 11.4.

    +
    + + ff476124 + D3D11_FEATURE_D3D11_OPTIONS4 + D3D11_FEATURE_D3D11_OPTIONS4 +
    + + + No documentation. + + + ff476124 + D3D11_FEATURE_SHADER_CACHE + D3D11_FEATURE_SHADER_CACHE + + + +

    Device context options.

    +
    + +

    This enumeration is used by .

    +
    + + ff476114 + D3D11_FENCE_FLAG + D3D11_FENCE_FLAG +
    + + +

    The device context is an immediate context.

    +
    + + ff476114 + D3D11_FENCE_FLAG_NONE + D3D11_FENCE_FLAG_NONE +
    + + +

    The device context is a deferred context.

    +
    + + ff476114 + D3D11_FENCE_FLAG_SHARED + D3D11_FENCE_FLAG_SHARED +
    + + + No documentation. + + + ff476114 + D3D11_FENCE_FLAG_SHARED_CROSS_ADAPTER + D3D11_FENCE_FLAG_SHARED_CROSS_ADAPTER + + + +

    Determines the fill mode to use when rendering triangles.

    +
    + +

    This enumeration is part of a rasterizer-state object description (see ).

    +
    + + ff476131 + D3D11_FILL_MODE + D3D11_FILL_MODE +
    + + +

    Draw lines connecting the vertices. Adjacent vertices are not drawn.

    +
    + + ff476131 + D3D11_FILL_WIREFRAME + D3D11_FILL_WIREFRAME +
    + + +

    Fill the triangles formed by the vertices. Adjacent vertices are not drawn.

    +
    + + ff476131 + D3D11_FILL_SOLID + D3D11_FILL_SOLID +
    + + +

    Filtering options during texture sampling.

    +
    + + Note??If you use different filter types for min versus mag filter, undefined behavior occurs in certain cases where the choice between whether magnification or minification happens is ambiguous. To prevent this undefined behavior, use filter modes that use similar filter operations for both min and mag (or use anisotropic filtering, which avoids the issue as well).?

    During texture sampling, one or more texels are read and combined (this is calling filtering) to produce a single value. Point sampling reads a single texel while linear sampling reads two texels (endpoints) and linearly interpolates a third value between the endpoints.

    HLSL texture-sampling functions also support comparison filtering during texture sampling. Comparison filtering compares each sampled texel against a comparison value. The boolean result is blended the same way that normal texture filtering is blended.

    You can use HLSL intrinsic texture-sampling functions that implement texture filtering only or companion functions that use texture filtering with comparison filtering.

    Texture Sampling FunctionTexture Sampling Function with Comparison Filtering
    samplesamplecmp or samplecmplevelzero

    ?

    Comparison filters only work with textures that have the following DXGI formats: R32_FLOAT_X8X24_TYPELESS, R32_FLOAT, R24_UNORM_X8_TYPELESS, R16_UNORM.

    +
    + + ff476132 + D3D11_FILTER + D3D11_FILTER +
    + + +

    Use point sampling for minification, magnification, and mip-level sampling.

    +
    + + ff476132 + D3D11_FILTER_MIN_MAG_MIP_POINT + D3D11_FILTER_MIN_MAG_MIP_POINT +
    + + +

    Use point sampling for minification and magnification; use linear interpolation for mip-level sampling.

    +
    + + ff476132 + D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR + D3D11_FILTER_MIN_MAG_POINT_MIP_LINEAR +
    + + +

    Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling.

    +
    + + ff476132 + D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT + D3D11_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT +
    + + +

    Use point sampling for minification; use linear interpolation for magnification and mip-level sampling.

    +
    + + ff476132 + D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR + D3D11_FILTER_MIN_POINT_MAG_MIP_LINEAR +
    + + +

    Use linear interpolation for minification; use point sampling for magnification and mip-level sampling.

    +
    + + ff476132 + D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT + D3D11_FILTER_MIN_LINEAR_MAG_MIP_POINT +
    + + +

    Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling.

    +
    + + ff476132 + D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR + D3D11_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR +
    + + +

    Use linear interpolation for minification and magnification; use point sampling for mip-level sampling.

    +
    + + ff476132 + D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT + D3D11_FILTER_MIN_MAG_LINEAR_MIP_POINT +
    + + +

    Use linear interpolation for minification, magnification, and mip-level sampling.

    +
    + + ff476132 + D3D11_FILTER_MIN_MAG_MIP_LINEAR + D3D11_FILTER_MIN_MAG_MIP_LINEAR +
    + + +

    Use anisotropic interpolation for minification, magnification, and mip-level sampling.

    +
    + + ff476132 + D3D11_FILTER_ANISOTROPIC + D3D11_FILTER_ANISOTROPIC +
    + + +

    Use point sampling for minification, magnification, and mip-level sampling. Compare the result to the comparison value.

    +
    + + ff476132 + D3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT + D3D11_FILTER_COMPARISON_MIN_MAG_MIP_POINT +
    + + +

    Use point sampling for minification and magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.

    +
    + + ff476132 + D3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR + D3D11_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR +
    + + +

    Use point sampling for minification; use linear interpolation for magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.

    +
    + + ff476132 + D3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT + D3D11_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT +
    + + +

    Use point sampling for minification; use linear interpolation for magnification and mip-level sampling. Compare the result to the comparison value.

    +
    + + ff476132 + D3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR + D3D11_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR +
    + + +

    Use linear interpolation for minification; use point sampling for magnification and mip-level sampling. Compare the result to the comparison value.

    +
    + + ff476132 + D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT + D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT +
    + + +

    Use linear interpolation for minification; use point sampling for magnification; use linear interpolation for mip-level sampling. Compare the result to the comparison value.

    +
    + + ff476132 + D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR + D3D11_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR +
    + + +

    Use linear interpolation for minification and magnification; use point sampling for mip-level sampling. Compare the result to the comparison value.

    +
    + + ff476132 + D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT + D3D11_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT +
    + + +

    Use linear interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.

    +
    + + ff476132 + D3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR + D3D11_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR +
    + + +

    Use anisotropic interpolation for minification, magnification, and mip-level sampling. Compare the result to the comparison value.

    +
    + + ff476132 + D3D11_FILTER_COMPARISON_ANISOTROPIC + D3D11_FILTER_COMPARISON_ANISOTROPIC +
    + + +

    Fetch the same set of texels as and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MINIMUM_MIN_MAG_MIP_POINT + D3D11_FILTER_MINIMUM_MIN_MAG_MIP_POINT +
    + + +

    Fetch the same set of texels as and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR + D3D11_FILTER_MINIMUM_MIN_MAG_POINT_MIP_LINEAR +
    + + +

    Fetch the same set of texels as and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT + D3D11_FILTER_MINIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT +
    + + +

    Fetch the same set of texels as and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR + D3D11_FILTER_MINIMUM_MIN_POINT_MAG_MIP_LINEAR +
    + + +

    Fetch the same set of texels as and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT + D3D11_FILTER_MINIMUM_MIN_LINEAR_MAG_MIP_POINT +
    + + +

    Fetch the same set of texels as and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR + D3D11_FILTER_MINIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR +
    + + +

    Fetch the same set of texels as and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT + D3D11_FILTER_MINIMUM_MIN_MAG_LINEAR_MIP_POINT +
    + + +

    Fetch the same set of texels as and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR + D3D11_FILTER_MINIMUM_MIN_MAG_MIP_LINEAR +
    + + +

    Fetch the same set of texels as and instead of filtering them return the minimum of the texels. Texels that are weighted 0 during filtering aren't counted towards the minimum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MINIMUM_ANISOTROPIC + D3D11_FILTER_MINIMUM_ANISOTROPIC +
    + + +

    Fetch the same set of texels as and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MAXIMUM_MIN_MAG_MIP_POINT + D3D11_FILTER_MAXIMUM_MIN_MAG_MIP_POINT +
    + + +

    Fetch the same set of texels as and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR + D3D11_FILTER_MAXIMUM_MIN_MAG_POINT_MIP_LINEAR +
    + + +

    Fetch the same set of texels as and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT + D3D11_FILTER_MAXIMUM_MIN_POINT_MAG_LINEAR_MIP_POINT +
    + + +

    Fetch the same set of texels as and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR + D3D11_FILTER_MAXIMUM_MIN_POINT_MAG_MIP_LINEAR +
    + + +

    Fetch the same set of texels as and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT + D3D11_FILTER_MAXIMUM_MIN_LINEAR_MAG_MIP_POINT +
    + + +

    Fetch the same set of texels as and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR + D3D11_FILTER_MAXIMUM_MIN_LINEAR_MAG_POINT_MIP_LINEAR +
    + + +

    Fetch the same set of texels as and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT + D3D11_FILTER_MAXIMUM_MIN_MAG_LINEAR_MIP_POINT +
    + + +

    Fetch the same set of texels as and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR + D3D11_FILTER_MAXIMUM_MIN_MAG_MIP_LINEAR +
    + + +

    Fetch the same set of texels as and instead of filtering them return the maximum of the texels. Texels that are weighted 0 during filtering aren't counted towards the maximum. You can query support for this filter type from the MinMaxFiltering member in the structure.

    +
    + + ff476132 + D3D11_FILTER_MAXIMUM_ANISOTROPIC + D3D11_FILTER_MAXIMUM_ANISOTROPIC +
    + + +

    Specifies the type of sampler filter reduction.

    +
    + +

    This enum is used by the structure.

    +
    + + dn912870 + D3D11_FILTER_REDUCTION_TYPE + D3D11_FILTER_REDUCTION_TYPE +
    + + +

    Indicates standard (default) filter reduction.

    +
    + + dn912870 + D3D11_FILTER_REDUCTION_TYPE_STANDARD + D3D11_FILTER_REDUCTION_TYPE_STANDARD +
    + + +

    Indicates a comparison filter reduction.

    +
    + + dn912870 + D3D11_FILTER_REDUCTION_TYPE_COMPARISON + D3D11_FILTER_REDUCTION_TYPE_COMPARISON +
    + + +

    Indicates minimum filter reduction.

    +
    + + dn912870 + D3D11_FILTER_REDUCTION_TYPE_MINIMUM + D3D11_FILTER_REDUCTION_TYPE_MINIMUM +
    + + +

    Indicates maximum filter reduction.

    +
    + + dn912870 + D3D11_FILTER_REDUCTION_TYPE_MAXIMUM + D3D11_FILTER_REDUCTION_TYPE_MAXIMUM +
    + + +

    Types of magnification or minification sampler filters.

    +
    + + ff476133 + D3D11_FILTER_TYPE + D3D11_FILTER_TYPE +
    + + +

    Point filtering used as a texture magnification or minification filter. The texel with coordinates nearest to the desired pixel value is used. The texture filter to be used between mipmap levels is nearest-point mipmap filtering. The rasterizer uses the color from the texel of the nearest mipmap texture.

    +
    + + ff476133 + D3D11_FILTER_TYPE_POINT + D3D11_FILTER_TYPE_POINT +
    + + +

    Bilinear interpolation filtering used as a texture magnification or minification filter. A weighted average of a 2 x 2 area of texels surrounding the desired pixel is used. The texture filter to use between mipmap levels is trilinear mipmap interpolation. The rasterizer linearly interpolates pixel color, using the texels of the two nearest mipmap textures.

    +
    + + ff476133 + D3D11_FILTER_TYPE_LINEAR + D3D11_FILTER_TYPE_LINEAR +
    + + +

    Which resources are supported for a given format and given device (see and ).

    +
    + + ff476134 + D3D11_FORMAT_SUPPORT + D3D11_FORMAT_SUPPORT +
    + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_BUFFER + D3D11_FORMAT_SUPPORT_BUFFER + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER + D3D11_FORMAT_SUPPORT_IA_VERTEX_BUFFER + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER + D3D11_FORMAT_SUPPORT_IA_INDEX_BUFFER + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_SO_BUFFER + D3D11_FORMAT_SUPPORT_SO_BUFFER + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_TEXTURE1D + D3D11_FORMAT_SUPPORT_TEXTURE1D + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_TEXTURE2D + D3D11_FORMAT_SUPPORT_TEXTURE2D + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_TEXTURE3D + D3D11_FORMAT_SUPPORT_TEXTURE3D + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_TEXTURECUBE + D3D11_FORMAT_SUPPORT_TEXTURECUBE + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_SHADER_LOAD + D3D11_FORMAT_SUPPORT_SHADER_LOAD + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT + D3D11_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_MIP + D3D11_FORMAT_SUPPORT_MIP + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_MIP_AUTOGEN + D3D11_FORMAT_SUPPORT_MIP_AUTOGEN + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_RENDER_TARGET + D3D11_FORMAT_SUPPORT_RENDER_TARGET + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_BLENDABLE + D3D11_FORMAT_SUPPORT_BLENDABLE + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_DEPTH_STENCIL + D3D11_FORMAT_SUPPORT_DEPTH_STENCIL + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_CPU_LOCKABLE + D3D11_FORMAT_SUPPORT_CPU_LOCKABLE + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE + D3D11_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_DISPLAY + D3D11_FORMAT_SUPPORT_DISPLAY + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT + D3D11_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET + D3D11_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD + D3D11_FORMAT_SUPPORT_MULTISAMPLE_LOAD + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_SHADER_GATHER + D3D11_FORMAT_SUPPORT_SHADER_GATHER + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST + D3D11_FORMAT_SUPPORT_BACK_BUFFER_CAST + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW + D3D11_FORMAT_SUPPORT_TYPED_UNORDERED_ACCESS_VIEW + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON + D3D11_FORMAT_SUPPORT_SHADER_GATHER_COMPARISON + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_DECODER_OUTPUT + D3D11_FORMAT_SUPPORT_DECODER_OUTPUT + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT + D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_OUTPUT + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_INPUT + D3D11_FORMAT_SUPPORT_VIDEO_PROCESSOR_INPUT + + + + No documentation. + + + ff476134 + D3D11_FORMAT_SUPPORT_VIDEO_ENCODER + D3D11_FORMAT_SUPPORT_VIDEO_ENCODER + + + + None. + + + None + None + + + +

    Type of data contained in an input slot.

    +
    + +

    Use these values to specify the type of data for a particular input element (see ) of an input-layout object.

    +
    + + ff476179 + D3D11_INPUT_CLASSIFICATION + D3D11_INPUT_CLASSIFICATION +
    + + +

    Input data is per-vertex data.

    +
    + + ff476179 + D3D11_INPUT_PER_VERTEX_DATA + D3D11_INPUT_PER_VERTEX_DATA +
    + + +

    Input data is per-instance data.

    +
    + + ff476179 + D3D11_INPUT_PER_INSTANCE_DATA + D3D11_INPUT_PER_INSTANCE_DATA +
    + + + Note??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Specifies logical operations to configure for a render target.

    +
    + + hh404484 + D3D11_LOGIC_OP + D3D11_LOGIC_OP +
    + + +

    Clears the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_CLEAR + D3D11_LOGIC_OP_CLEAR +
    + + +

    Sets the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_SET + D3D11_LOGIC_OP_SET +
    + + +

    Copys the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_COPY + D3D11_LOGIC_OP_COPY +
    + + +

    Performs an inverted-copy of the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_COPY_INVERTED + D3D11_LOGIC_OP_COPY_INVERTED +
    + + +

    No operation is performed on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_NOOP + D3D11_LOGIC_OP_NOOP +
    + + +

    Inverts the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_INVERT + D3D11_LOGIC_OP_INVERT +
    + + +

    Performs a logical AND operation on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_AND + D3D11_LOGIC_OP_AND +
    + + +

    Performs a logical NAND operation on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_NAND + D3D11_LOGIC_OP_NAND +
    + + +

    Performs a logical OR operation on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_OR + D3D11_LOGIC_OP_OR +
    + + +

    Performs a logical NOR operation on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_NOR + D3D11_LOGIC_OP_NOR +
    + + +

    Performs a logical XOR operation on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_XOR + D3D11_LOGIC_OP_XOR +
    + + +

    Performs a logical equal operation on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_EQUIV + D3D11_LOGIC_OP_EQUIV +
    + + +

    Performs a logical AND and reverse operation on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_AND_REVERSE + D3D11_LOGIC_OP_AND_REVERSE +
    + + +

    Performs a logical AND and invert operation on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_AND_INVERTED + D3D11_LOGIC_OP_AND_INVERTED +
    + + +

    Performs a logical OR and reverse operation on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_OR_REVERSE + D3D11_LOGIC_OP_OR_REVERSE +
    + + +

    Performs a logical OR and invert operation on the render target.

    +
    + + hh404484 + D3D11_LOGIC_OP_OR_INVERTED + D3D11_LOGIC_OP_OR_INVERTED +
    + + +

    Specifies how the CPU should respond when an application calls the method on a resource that is being used by the GPU.

    +
    + +

    This enumeration is used by .

    cannot be used with or D3D11_MAP_WRITE_NOOVERWRITE.

    +
    + + ff476183 + D3D11_MAP_FLAG + D3D11_MAP_FLAG +
    + + + No documentation. + + + ff476183 + D3D11_MAP_FLAG_DO_NOT_WAIT + D3D11_MAP_FLAG_DO_NOT_WAIT + + + + None. + + + None + None + + + +

    Identifies a resource to be accessed for reading and writing by the CPU. Applications may combine one or more of these flags.

    +
    + +

    This enumeration is used in .

    These remarks are divided into the following topics:

    • Meaning
    • Common
    +
    + + ff476181 + D3D11_MAP + D3D11_MAP +
    + + +

    Resource is mapped for reading. The resource must have been created with read access (see ).

    +
    + + ff476181 + D3D11_MAP_READ + D3D11_MAP_READ +
    + + +

    Resource is mapped for writing. The resource must have been created with write access (see ).

    +
    + + ff476181 + D3D11_MAP_WRITE + D3D11_MAP_WRITE +
    + + +

    Resource is mapped for reading and writing. The resource must have been created with read and write access (see and ).

    +
    + + ff476181 + D3D11_MAP_READ_WRITE + D3D11_MAP_READ_WRITE +
    + + +

    Resource is mapped for writing; the previous contents of the resource will be undefined. The resource must have been created with write access and dynamic usage (See and ).

    +
    + + ff476181 + D3D11_MAP_WRITE_DISCARD + D3D11_MAP_WRITE_DISCARD +
    + + +

    Resource is mapped for writing; the existing contents of the resource cannot be overwritten (see Remarks). This flag is only valid on vertex and index buffers. The resource must have been created with write access (see ). Cannot be used on a resource created with the flag.

    Note??The Direct3D 11.1 runtime, which is available starting with Windows?8, enables mapping dynamic constant buffers and shader resource views (SRVs) of dynamic buffers with . The Direct3D 11 and earlier runtimes limited mapping to vertex or index buffers. To determine if a Direct3D device supports these features, call with . CheckFeatureSupport fills members of a structure with the device's features. The relevant members here are MapNoOverwriteOnDynamicConstantBuffer and MapNoOverwriteOnDynamicBufferSRV. ?
    +
    + + ff476181 + D3D11_MAP_WRITE_NO_OVERWRITE + D3D11_MAP_WRITE_NO_OVERWRITE +
    + + +

    Categories of debug messages. This will identify the category of a message when retrieving a message with and when adding a message with . When creating an info queue filter, these values can be used to allow or deny any categories of messages to pass through the storage and retrieval filters.

    +
    + +

    This is part of the Information Queue feature. See Interface.

    +
    + + ff476185 + D3D11_MESSAGE_CATEGORY + D3D11_MESSAGE_CATEGORY +
    + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED + D3D11_MESSAGE_CATEGORY_APPLICATION_DEFINED + + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_MISCELLANEOUS + D3D11_MESSAGE_CATEGORY_MISCELLANEOUS + + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_INITIALIZATION + D3D11_MESSAGE_CATEGORY_INITIALIZATION + + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_CLEANUP + D3D11_MESSAGE_CATEGORY_CLEANUP + + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_COMPILATION + D3D11_MESSAGE_CATEGORY_COMPILATION + + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_STATE_CREATION + D3D11_MESSAGE_CATEGORY_STATE_CREATION + + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_STATE_SETTING + D3D11_MESSAGE_CATEGORY_STATE_SETTING + + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_STATE_GETTING + D3D11_MESSAGE_CATEGORY_STATE_GETTING + + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + D3D11_MESSAGE_CATEGORY_RESOURCE_MANIPULATION + + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_EXECUTION + D3D11_MESSAGE_CATEGORY_EXECUTION + + + + No documentation. + + + ff476185 + D3D11_MESSAGE_CATEGORY_SHADER + D3D11_MESSAGE_CATEGORY_SHADER + + + + No documentation. + + + D3D11_MESSAGE_ID + D3D11_MESSAGE_ID + + + + No documentation. + + + D3D11_MESSAGE_ID_UNKNOWN + D3D11_MESSAGE_ID_UNKNOWN + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD + D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD + D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD + D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD + D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD + D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD + D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD + D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD + D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD + D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_STRING_FROM_APPLICATION + D3D11_MESSAGE_ID_STRING_FROM_APPLICATION + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_THIS + D3D11_MESSAGE_ID_CORRUPTED_THIS + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER1 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER2 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER3 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER4 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER5 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER6 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER7 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER8 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER9 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER10 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER11 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER12 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER13 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER14 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15 + D3D11_MESSAGE_ID_CORRUPTED_PARAMETER15 + + + + No documentation. + + + D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING + D3D11_MESSAGE_ID_CORRUPTED_MULTITHREADING + + + + No documentation. + + + D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY + D3D11_MESSAGE_ID_MESSAGE_REPORTING_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_IASETINPUTLAYOUT_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_IASETINDEXBUFFER_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_VSSETSHADER_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_VSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_VSSETSAMPLERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_GSSETSHADER_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_GSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_GSSETSAMPLERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_SOSETTARGETS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_PSSETSHADER_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_PSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_PSSETSAMPLERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_RSSETSTATE_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_OMSETBLENDSTATE_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_OMSETDEPTHSTENCILSTATE_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_OMSETRENDERTARGETS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_SETPREDICATION_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA + D3D11_MESSAGE_ID_GETPRIVATEDATA_MOREDATA + + + + No documentation. + + + D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA + D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFREEDATA + + + + No documentation. + + + D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN + D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDIUNKNOWN + + + + No documentation. + + + D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS + D3D11_MESSAGE_ID_SETPRIVATEDATA_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS + D3D11_MESSAGE_ID_SETPRIVATEDATA_CHANGINGPARAMS + + + + No documentation. + + + D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY + D3D11_MESSAGE_ID_SETPRIVATEDATA_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT + D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSAMPLES + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE + D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS + D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDBINDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS + D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDCPUACCESSFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS + D3D11_MESSAGE_ID_CREATEBUFFER_UNRECOGNIZEDMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCPUACCESSFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDBINDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDINITIALDATA + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDDIMENSIONS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMIPLEVELS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEBUFFER_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC + D3D11_MESSAGE_ID_CREATEBUFFER_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDCONSTANTBUFFERBINDINGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION + D3D11_MESSAGE_ID_CREATEBUFFER_LARGEALLOCATION + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNSUPPORTEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDSAMPLES + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDBINDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDCPUACCESSFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE1D_UNRECOGNIZEDMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDCPUACCESSFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDBINDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDINITIALDATA + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDDIMENSIONS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMIPLEVELS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATETEXTURE1D_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC + D3D11_MESSAGE_ID_CREATETEXTURE1D_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION + D3D11_MESSAGE_ID_CREATETEXTURE1D_LARGEALLOCATION + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNSUPPORTEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDSAMPLES + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDBINDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDCPUACCESSFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE2D_UNRECOGNIZEDMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDCPUACCESSFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDBINDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDINITIALDATA + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDDIMENSIONS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMIPLEVELS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATETEXTURE2D_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC + D3D11_MESSAGE_ID_CREATETEXTURE2D_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION + D3D11_MESSAGE_ID_CREATETEXTURE2D_LARGEALLOCATION + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNSUPPORTEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDSAMPLES + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDBINDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDCPUACCESSFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE3D_UNRECOGNIZEDMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDCPUACCESSFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDBINDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDINITIALDATA + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDDIMENSIONS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMIPLEVELS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN + D3D11_MESSAGE_ID_CREATETEXTURE3D_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATETEXTURE3D_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC + D3D11_MESSAGE_ID_CREATETEXTURE3D_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION + D3D11_MESSAGE_ID_CREATETEXTURE3D_LARGEALLOCATION + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_UNRECOGNIZEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDIMENSIONS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_TOOMANYOBJECTS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNRECOGNIZEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_UNSUPPORTEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDIMENSIONS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_TOOMANYOBJECTS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_UNRECOGNIZEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDDIMENSIONS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_TOOMANYOBJECTS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TOOMANYELEMENTS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INCOMPATIBLEFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDINPUTSLOTCLASS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_STEPRATESLOTCLASSMISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSLOTCLASSCHANGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDSTEPRATECHANGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_INVALIDALIGNMENT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_DUPLICATESEMANTIC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNPARSEABLEINPUTSIGNATURE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLSEMANTIC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_MISSINGELEMENT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY + D3D11_MESSAGE_ID_CREATEVERTEXSHADER_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE + D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERBYTECODE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE + D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDSHADERTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERBYTECODE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDSHADERTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERBYTECODE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSHADERTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMENTRIES + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSTREAMSTRIDEUNUSED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDDECL + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_EXPECTEDDECL + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_OUTPUTSLOT0EXPECTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSLOT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_ONLYONEELEMENTPERSLOT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCOMPONENTCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTARTCOMPONENTANDCOMPONENTCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDGAPDEFINITION + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_REPEATEDOUTPUT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDOUTPUTSTREAMSTRIDE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGSEMANTIC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MASKMISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_CANTHAVEONLYGAPS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DECLTOOCOMPLEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_MISSINGOUTPUTSIGNATURE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY + D3D11_MESSAGE_ID_CREATEPIXELSHADER_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE + D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERBYTECODE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE + D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDSHADERTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFILLMODE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDCULLMODE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDDEPTHBIASCLAMP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDSLOPESCALEDDEPTHBIAS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_TOOMANYOBJECTS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHWRITEMASK + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDDEPTHFUNC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFAILOP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILZFAILOP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILPASSOP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDFRONTFACESTENCILFUNC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFAILOP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILZFAILOP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILPASSOP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_INVALIDBACKFACESTENCILFUNC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_TOOMANYOBJECTS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLEND + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLEND + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDSRCBLENDALPHA + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDDESTBLENDALPHA + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDBLENDOPALPHA + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDRENDERTARGETWRITEMASK + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS + D3D11_MESSAGE_ID_CREATEBLENDSTATE_TOOMANYOBJECTS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDFILTER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSU + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSV + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDADDRESSW + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMIPLODBIAS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXANISOTROPY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDCOMPARISONFUNC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMINLOD + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_INVALIDMAXLOD + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_TOOMANYOBJECTS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDQUERY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNEXPECTEDMISCFLAG + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED + D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNRECOGNIZED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED + D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNDEFINED + + + + No documentation. + + + D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER + D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_INVALIDBUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE + D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_OFFSET_TOO_LARGE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER + D3D11_MESSAGE_ID_IASETINDEXBUFFER_INVALIDBUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID + D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_FORMAT_INVALID + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE + D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_TOO_LARGE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED + D3D11_MESSAGE_ID_DEVICE_IASETINDEXBUFFER_OFFSET_UNALIGNED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_VSSETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER + D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_VSSETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_VSSETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_GSSETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER + D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_GSSETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_GSSETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER + D3D11_MESSAGE_ID_SOSETTARGETS_INVALIDBUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED + D3D11_MESSAGE_ID_DEVICE_SOSETTARGETS_OFFSET_UNALIGNED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_PSSETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER + D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_PSSETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_PSSETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT + D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_INVALIDVIEWPORT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR + D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_INVALIDSCISSOR + + + + No documentation. + + + D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH + D3D11_MESSAGE_ID_CLEARRENDERTARGETVIEW_DENORMFLUSH + + + + No documentation. + + + D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH + D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DENORMFLUSH + + + + No documentation. + + + D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID + D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_INVALID + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_IAGETVERTEXBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_VSGETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_VSGETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_VSGETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_GSGETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_GSGETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_GSGETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_SOGETTARGETS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_PSGETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_PSGETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_PSGETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY + D3D11_MESSAGE_ID_DEVICE_RSGETVIEWPORTS_VIEWPORTS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY + D3D11_MESSAGE_ID_DEVICE_RSGETSCISSORRECTS_RECTS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID + D3D11_MESSAGE_ID_DEVICE_GENERATEMIPS_RESOURCE_INVALID + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCEBOX + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDDESTINATIONSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_INVALIDSOURCESTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE + D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE + D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDDESTINATIONSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE + D3D11_MESSAGE_ID_COPYRESOURCE_INVALIDSOURCESTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE + D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX + D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONBOX + + + + No documentation. + + + D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE + D3D11_MESSAGE_ID_UPDATESUBRESOURCE_INVALIDDESTINATIONSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID + D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_INVALID + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID + D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_DESTINATION_SUBRESOURCE_INVALID + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID + D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_INVALID + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID + D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_SOURCE_SUBRESOURCE_INVALID + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID + D3D11_MESSAGE_ID_DEVICE_RESOLVESUBRESOURCE_FORMAT_INVALID + + + + No documentation. + + + D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE + D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDMAPTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS + D3D11_MESSAGE_ID_BUFFER_MAP_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED + D3D11_MESSAGE_ID_BUFFER_MAP_ALREADYMAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN + D3D11_MESSAGE_ID_BUFFER_MAP_DEVICEREMOVED_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED + D3D11_MESSAGE_ID_BUFFER_UNMAP_NOTMAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE + D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDMAPTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE + D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS + D3D11_MESSAGE_ID_TEXTURE1D_MAP_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED + D3D11_MESSAGE_ID_TEXTURE1D_MAP_ALREADYMAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN + D3D11_MESSAGE_ID_TEXTURE1D_MAP_DEVICEREMOVED_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE + D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_INVALIDSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED + D3D11_MESSAGE_ID_TEXTURE1D_UNMAP_NOTMAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE + D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDMAPTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE + D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS + D3D11_MESSAGE_ID_TEXTURE2D_MAP_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED + D3D11_MESSAGE_ID_TEXTURE2D_MAP_ALREADYMAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN + D3D11_MESSAGE_ID_TEXTURE2D_MAP_DEVICEREMOVED_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE + D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_INVALIDSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED + D3D11_MESSAGE_ID_TEXTURE2D_UNMAP_NOTMAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE + D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDMAPTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE + D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS + D3D11_MESSAGE_ID_TEXTURE3D_MAP_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED + D3D11_MESSAGE_ID_TEXTURE3D_MAP_ALREADYMAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN + D3D11_MESSAGE_ID_TEXTURE3D_MAP_DEVICEREMOVED_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE + D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_INVALIDSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED + D3D11_MESSAGE_ID_TEXTURE3D_UNMAP_NOTMAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED + D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_DEPRECATED + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED + D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_FORMAT_DEPRECATED + + + + No documentation. + + + D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS + D3D11_MESSAGE_ID_SETEXCEPTIONMODE_UNRECOGNIZEDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN + D3D11_MESSAGE_ID_SETEXCEPTIONMODE_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN + D3D11_MESSAGE_ID_SETEXCEPTIONMODE_DEVICEREMOVED_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE + D3D11_MESSAGE_ID_REF_SIMULATING_INFINITELY_FAST_HARDWARE + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_THREADING_MODE + D3D11_MESSAGE_ID_REF_THREADING_MODE + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION + D3D11_MESSAGE_ID_REF_UMDRIVER_EXCEPTION + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION + D3D11_MESSAGE_ID_REF_KMDRIVER_EXCEPTION + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION + D3D11_MESSAGE_ID_REF_HARDWARE_EXCEPTION + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE + D3D11_MESSAGE_ID_REF_ACCESSING_INDEXABLE_TEMP_OUT_OF_RANGE + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER + D3D11_MESSAGE_ID_REF_PROBLEM_PARSING_SHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY + D3D11_MESSAGE_ID_REF_OUT_OF_MEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_INFO + D3D11_MESSAGE_ID_REF_INFO + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEXPOS_OVERFLOW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW + D3D11_MESSAGE_ID_DEVICE_DRAWINDEXED_INDEXPOS_OVERFLOW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW + D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_VERTEXPOS_OVERFLOW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW + D3D11_MESSAGE_ID_DEVICE_DRAWINSTANCED_INSTANCEPOS_OVERFLOW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW + D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INSTANCEPOS_OVERFLOW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW + D3D11_MESSAGE_ID_DEVICE_DRAWINDEXEDINSTANCED_INDEXPOS_OVERFLOW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_SHADER_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SEMANTICNAME_NOT_FOUND + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_COMPONENTTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_REGISTERMASK + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_SYSTEMVALUE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_NEVERWRITTEN_ALWAYSREADS + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_INPUTLAYOUT_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL + D3D11_MESSAGE_ID_DEVICE_DRAW_CONSTANT_BUFFER_TOO_SMALL + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_SHADERRESOURCEVIEW_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_VIEW_DIMENSION_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_BUFFER_TOO_SMALL + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID + D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_FORMAT_INVALID + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL + D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_BUFFER_TOO_SMALL + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_GS_INPUT_PRIMITIVE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_RETURN_TYPE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT + D3D11_MESSAGE_ID_DEVICE_DRAW_POSITION_NOT_PRESENT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED + D3D11_MESSAGE_ID_DEVICE_DRAW_BOUND_RESOURCE_MAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY + D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_PRIMITIVETOPOLOGY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_OFFSET_UNALIGNED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED + D3D11_MESSAGE_ID_DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED + D3D11_MESSAGE_ID_DEVICE_DRAW_INDEX_OFFSET_UNALIGNED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED + D3D11_MESSAGE_ID_DEVICE_DRAW_OUTPUT_STREAM_OFFSET_UNALIGNED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_LD_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_SAMPLE_C_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_MULTISAMPLE_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE + D3D11_MESSAGE_ID_DEVICE_DRAW_SO_TARGETS_BOUND_WITHOUT_SOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER + D3D11_MESSAGE_ID_DEVICE_DRAW_SO_STRIDE_LARGER_THAN_BUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING + D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_BLENDING + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 + D3D11_MESSAGE_ID_DEVICE_DRAW_OM_DUAL_SOURCE_BLENDING_CAN_ONLY_HAVE_RENDER_TARGET_0 + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT + D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_AT_FAULT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT + D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_POSSIBLY_AT_FAULT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT + D3D11_MESSAGE_ID_DEVICE_REMOVAL_PROCESS_NOT_AT_FAULT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN + D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN + D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BADINTERFACE_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_VIEWPORT_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TRAILING_DIGIT_IN_SEMANTIC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_TRAILING_DIGIT_IN_SEMANTIC + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH + D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_DENORMFLUSH + + + + No documentation. + + + D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW + D3D11_MESSAGE_ID_OMSETRENDERTARGETS_INVALIDVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS + D3D11_MESSAGE_ID_DEVICE_SETTEXTFILTERSIZE_INVALIDDIMENSIONS + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLER_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_TYPE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY + D3D11_MESSAGE_ID_BLENDSTATE_GETDESC_LEGACY + + + + No documentation. + + + D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY + D3D11_MESSAGE_ID_SHADERRESOURCEVIEW_GETDESC_LEGACY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEQUERY_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEPREDICATE_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER + D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFRANGE_COUNTER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED + D3D11_MESSAGE_ID_CREATECOUNTER_SIMULTANEOUS_ACTIVE_COUNTERS_EXHAUSTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + D3D11_MESSAGE_ID_CREATECOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATECOUNTER_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN + D3D11_MESSAGE_ID_CREATECOUNTER_NONEXCLUSIVE_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC + D3D11_MESSAGE_ID_CREATECOUNTER_NULLDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER + D3D11_MESSAGE_ID_CHECKCOUNTER_OUTOFRANGE_COUNTER + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + D3D11_MESSAGE_ID_CHECKCOUNTER_UNSUPPORTED_WELLKNOWN_COUNTER + + + + No documentation. + + + D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE + D3D11_MESSAGE_ID_SETPREDICATION_INVALID_PREDICATE_STATE + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED + D3D11_MESSAGE_ID_QUERY_BEGIN_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION + D3D11_MESSAGE_ID_PREDICATE_BEGIN_DURING_PREDICATION + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE + D3D11_MESSAGE_ID_QUERY_BEGIN_DUPLICATE + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + D3D11_MESSAGE_ID_QUERY_BEGIN_ABANDONING_PREVIOUS_RESULTS + + + + No documentation. + + + D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION + D3D11_MESSAGE_ID_PREDICATE_END_DURING_PREDICATION + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS + D3D11_MESSAGE_ID_QUERY_END_ABANDONING_PREVIOUS_RESULTS + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN + D3D11_MESSAGE_ID_QUERY_END_WITHOUT_BEGIN + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE + D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_DATASIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS + D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_FLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL + D3D11_MESSAGE_ID_QUERY_GETDATA_INVALID_CALL + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_PS_OUTPUT_TYPE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_FORMAT_GATHER_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN + D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_CENTER_MULTISAMPLE_PATTERN + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE + D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_STRIDE_TOO_LARGE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE + D3D11_MESSAGE_ID_DEVICE_IASETVERTEXBUFFERS_INVALIDRANGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_EMPTY_LAYOUT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_RESOURCE_SAMPLE_COUNT_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY + D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_BUFFER + D3D11_MESSAGE_ID_LIVE_BUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_TEXTURE1D + D3D11_MESSAGE_ID_LIVE_TEXTURE1D + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_TEXTURE2D + D3D11_MESSAGE_ID_LIVE_TEXTURE2D + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_TEXTURE3D + D3D11_MESSAGE_ID_LIVE_TEXTURE3D + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW + D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW + D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW + D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_VERTEXSHADER + D3D11_MESSAGE_ID_LIVE_VERTEXSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER + D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_PIXELSHADER + D3D11_MESSAGE_ID_LIVE_PIXELSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT + D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_SAMPLER + D3D11_MESSAGE_ID_LIVE_SAMPLER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_BLENDSTATE + D3D11_MESSAGE_ID_LIVE_BLENDSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE + D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE + D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_QUERY + D3D11_MESSAGE_ID_LIVE_QUERY + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_PREDICATE + D3D11_MESSAGE_ID_LIVE_PREDICATE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_COUNTER + D3D11_MESSAGE_ID_LIVE_COUNTER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_DEVICE + D3D11_MESSAGE_ID_LIVE_DEVICE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_SWAPCHAIN + D3D11_MESSAGE_ID_LIVE_SWAPCHAIN + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D10_MESSAGES_END + D3D11_MESSAGE_ID_D3D10_MESSAGES_END + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START + D3D11_MESSAGE_ID_D3D10L9_MESSAGES_START + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILSTATE_STENCIL_NO_TWO_SIDED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthBiasClamp_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_COMPARISON_SUPPORT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_EXCESSIVE_ANISOTROPY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_OUT_OF_RANGE + + + + No documentation. + + + D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED + D3D11_MESSAGE_ID_VSSETSAMPLERS_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS + D3D11_MESSAGE_ID_VSSETSAMPLERS_TOO_MANY_SAMPLERS + + + + No documentation. + + + D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS + D3D11_MESSAGE_ID_PSSETSAMPLERS_TOO_MANY_SAMPLERS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS + D3D11_MESSAGE_ID_CREATERESOURCE_NO_ARRAYS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND + D3D11_MESSAGE_ID_CREATERESOURCE_NO_VB_AND_IB_BIND + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D + D3D11_MESSAGE_ID_CREATERESOURCE_NO_TEXTURE_1D + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE + D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_OUT_OF_RANGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE + D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_SHADER_RESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS + D3D11_MESSAGE_ID_OMSETRENDERTARGETS_TOO_MANY_RENDER_TARGETS + + + + No documentation. + + + D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS + D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_DIFFERING_BIT_DEPTHS + + + + No documentation. + + + D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX + D3D11_MESSAGE_ID_IASETVERTEXBUFFERS_BAD_BUFFER_INDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS + D3D11_MESSAGE_ID_DEVICE_RSSETVIEWPORTS_TOO_MANY_VIEWPORTS + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_ADJACENCY_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS + D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_TOO_MANY_SCISSORS + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY + D3D11_MESSAGE_ID_COPYRESOURCE_ONLY_TEXTURE_2D_WITHIN_GPU_MEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK + D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_3D_READBACK + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK + D3D11_MESSAGE_ID_COPYRESOURCE_NO_TEXTURE_ONLY_READBACK + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_UNSUPPORTED_FORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_ALPHA_TO_COVERAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_DepthClipEnable_MUST_BE_TRUE + + + + No documentation. + + + D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE + D3D11_MESSAGE_ID_DRAWINDEXED_STARTINDEXLOCATION_MUST_BE_POSITIVE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_MUST_USE_LOWEST_LOD + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MINLOD_MUST_NOT_BE_FRACTIONAL + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_MAXLOD_MUST_BE_FLT_MAX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_FIRSTARRAYSLICE_MUST_BE_ZERO + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_CUBES_MUST_HAVE_6_SIDES + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET + D3D11_MESSAGE_ID_CREATERESOURCE_NOT_BINDABLE_AS_RENDER_TARGET + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER + D3D11_MESSAGE_ID_CREATERESOURCE_NO_DWORD_INDEX_BUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE + D3D11_MESSAGE_ID_CREATERESOURCE_MSAA_PRECLUDES_SHADER_RESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE + D3D11_MESSAGE_ID_CREATERESOURCE_PRESENTATION_PRECLUDES_SHADER_RESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_BLEND_ENABLE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_INDEPENDENT_WRITE_MASKS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT + D3D11_MESSAGE_ID_CREATERESOURCE_NO_STREAM_OUT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS + D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_VB_IB_FOR_BUFFERS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES + D3D11_MESSAGE_ID_CREATERESOURCE_NO_AUTOGEN_FOR_VOLUMES + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED + D3D11_MESSAGE_ID_CREATERESOURCE_DXGI_FORMAT_R8G8B8A8_CANNOT_BE_SHARED + + + + No documentation. + + + D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED + D3D11_MESSAGE_ID_VSSHADERRESOURCES_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED + D3D11_MESSAGE_ID_GEOMETRY_SHADER_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED + D3D11_MESSAGE_ID_STREAM_OUT_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED + D3D11_MESSAGE_ID_TEXT_FILTER_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_SEPARATE_ALPHA_BLEND + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND + D3D11_MESSAGE_ID_CREATEBLENDSTATE_NO_MRT_BLEND + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED + D3D11_MESSAGE_ID_CREATEBLENDSTATE_OPERATION_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_NO_MIRRORONCE + + + + No documentation. + + + D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED + D3D11_MESSAGE_ID_DRAWINSTANCED_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 + D3D11_MESSAGE_ID_DRAWINDEXEDINSTANCED_NOT_SUPPORTED_BELOW_9_3 + + + + No documentation. + + + D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED + D3D11_MESSAGE_ID_DRAWINDEXED_POINTLIST_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO + D3D11_MESSAGE_ID_SETBLENDSTATE_SAMPLE_MASK_CANNOT_BE_ZERO + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION + D3D11_MESSAGE_ID_CREATERESOURCE_DIMENSION_EXCEEDS_FEATURE_LEVEL_DEFINITION + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED + D3D11_MESSAGE_ID_CREATERESOURCE_ONLY_SINGLE_MIP_LEVEL_DEPTH_STENCIL_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR + D3D11_MESSAGE_ID_DEVICE_RSSETSCISSORRECTS_NEGATIVESCISSOR + + + + No documentation. + + + D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA + D3D11_MESSAGE_ID_SLOT_ZERO_MUST_BE_D3D10_INPUT_PER_VERTEX_DATA + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP + D3D11_MESSAGE_ID_CREATERESOURCE_NON_POW_2_MIPMAP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED + D3D11_MESSAGE_ID_CREATESAMPLERSTATE_BORDER_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT + D3D11_MESSAGE_ID_OMSETRENDERTARGETS_NO_SRGB_MRT + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES + D3D11_MESSAGE_ID_COPYRESOURCE_NO_3D_MISMATCHED_UPDATES + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D10L9_MESSAGES_END + D3D11_MESSAGE_ID_D3D10L9_MESSAGES_END + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D11_MESSAGES_START + D3D11_MESSAGE_ID_D3D11_MESSAGES_START + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS + D3D11_MESSAGE_ID_CREATEDEPTHSTENCILVIEW_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE + D3D11_MESSAGE_ID_CREATEVERTEXSHADER_INVALIDCLASSLINKAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADER_INVALIDCLASSLINKAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTREAMS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAMTORASTERIZER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTREAMS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDCLASSLINKAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE + D3D11_MESSAGE_ID_CREATEPIXELSHADER_INVALIDCLASSLINKAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS + D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_COMMANDLISTFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED + D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_SINGLETHREADED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN + D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN + D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_INVALID_CALL_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEDEFERREDCONTEXT_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT + D3D11_MESSAGE_ID_FINISHDISPLAYLIST_ONIMMEDIATECONTEXT + + + + No documentation. + + + D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_FINISHDISPLAYLIST_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN + D3D11_MESSAGE_ID_FINISHDISPLAYLIST_INVALID_CALL_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDENTRIES + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UNEXPECTEDSTRIDES + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES + D3D11_MESSAGE_ID_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_INVALIDNUMSTRIDES + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD + D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD + D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_HSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL + D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCALL + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY + D3D11_MESSAGE_ID_CREATEHULLSHADER_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE + D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERBYTECODE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE + D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDSHADERTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE + D3D11_MESSAGE_ID_CREATEHULLSHADER_INVALIDCLASSLINKAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_HSSETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER + D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_HSSETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_HSSETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_HSGETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_HSGETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_HSGETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD + D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD + D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_DSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL + D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCALL + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY + D3D11_MESSAGE_ID_CREATEDOMAINSHADER_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE + D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERBYTECODE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE + D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDSHADERTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE + D3D11_MESSAGE_ID_CREATEDOMAINSHADER_INVALIDCLASSLINKAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_DSSETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER + D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_DSSETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_DSSETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_DSGETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_DSGETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_DSGETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_HS_XOR_DS_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT + D3D11_MESSAGE_ID_DEFERRED_CONTEXT_REMOVAL_PROCESS_AT_FAULT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER + D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_INVALID_ARG_BUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED + D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_UNALIGNED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW + D3D11_MESSAGE_ID_DEVICE_DRAWINDIRECT_OFFSET_OVERFLOW + + + + No documentation. + + + D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE + D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDMAPTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE + D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS + D3D11_MESSAGE_ID_RESOURCE_MAP_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED + D3D11_MESSAGE_ID_RESOURCE_MAP_ALREADYMAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN + D3D11_MESSAGE_ID_RESOURCE_MAP_DEVICEREMOVED_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_RESOURCE_MAP_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD + D3D11_MESSAGE_ID_RESOURCE_MAP_WITHOUT_INITIAL_DISCARD + + + + No documentation. + + + D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE + D3D11_MESSAGE_ID_RESOURCE_UNMAP_INVALIDSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED + D3D11_MESSAGE_ID_RESOURCE_UNMAP_NOTMAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS + D3D11_MESSAGE_ID_DEVICE_DRAW_RASTERIZING_CONTROL_POINTS + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_IASETPRIMITIVETOPOLOGY_TOPOLOGY_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_SIGNATURE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_HULL_SHADER_INPUT_TOPOLOGY_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_CONTROL_POINT_COUNT_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH + D3D11_MESSAGE_ID_DEVICE_DRAW_HS_DS_TESSELLATOR_DOMAIN_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_CONTEXT + D3D11_MESSAGE_ID_CREATE_CONTEXT + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_CONTEXT + D3D11_MESSAGE_ID_LIVE_CONTEXT + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_CONTEXT + D3D11_MESSAGE_ID_DESTROY_CONTEXT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_BUFFER + D3D11_MESSAGE_ID_CREATE_BUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_BUFFER_WIN7 + D3D11_MESSAGE_ID_LIVE_BUFFER_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_BUFFER + D3D11_MESSAGE_ID_DESTROY_BUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_TEXTURE1D + D3D11_MESSAGE_ID_CREATE_TEXTURE1D + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_TEXTURE1D_WIN7 + D3D11_MESSAGE_ID_LIVE_TEXTURE1D_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_TEXTURE1D + D3D11_MESSAGE_ID_DESTROY_TEXTURE1D + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_TEXTURE2D + D3D11_MESSAGE_ID_CREATE_TEXTURE2D + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_TEXTURE2D_WIN7 + D3D11_MESSAGE_ID_LIVE_TEXTURE2D_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_TEXTURE2D + D3D11_MESSAGE_ID_DESTROY_TEXTURE2D + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_TEXTURE3D + D3D11_MESSAGE_ID_CREATE_TEXTURE3D + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_TEXTURE3D_WIN7 + D3D11_MESSAGE_ID_LIVE_TEXTURE3D_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_TEXTURE3D + D3D11_MESSAGE_ID_DESTROY_TEXTURE3D + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW + D3D11_MESSAGE_ID_CREATE_SHADERRESOURCEVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW_WIN7 + D3D11_MESSAGE_ID_LIVE_SHADERRESOURCEVIEW_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW + D3D11_MESSAGE_ID_DESTROY_SHADERRESOURCEVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW + D3D11_MESSAGE_ID_CREATE_RENDERTARGETVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW_WIN7 + D3D11_MESSAGE_ID_LIVE_RENDERTARGETVIEW_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW + D3D11_MESSAGE_ID_DESTROY_RENDERTARGETVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW + D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW_WIN7 + D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILVIEW_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW + D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_VERTEXSHADER + D3D11_MESSAGE_ID_CREATE_VERTEXSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_VERTEXSHADER_WIN7 + D3D11_MESSAGE_ID_LIVE_VERTEXSHADER_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER + D3D11_MESSAGE_ID_DESTROY_VERTEXSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_HULLSHADER + D3D11_MESSAGE_ID_CREATE_HULLSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_HULLSHADER + D3D11_MESSAGE_ID_LIVE_HULLSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_HULLSHADER + D3D11_MESSAGE_ID_DESTROY_HULLSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_DOMAINSHADER + D3D11_MESSAGE_ID_CREATE_DOMAINSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_DOMAINSHADER + D3D11_MESSAGE_ID_LIVE_DOMAINSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER + D3D11_MESSAGE_ID_DESTROY_DOMAINSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER + D3D11_MESSAGE_ID_CREATE_GEOMETRYSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER_WIN7 + D3D11_MESSAGE_ID_LIVE_GEOMETRYSHADER_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER + D3D11_MESSAGE_ID_DESTROY_GEOMETRYSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_PIXELSHADER + D3D11_MESSAGE_ID_CREATE_PIXELSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_PIXELSHADER_WIN7 + D3D11_MESSAGE_ID_LIVE_PIXELSHADER_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_PIXELSHADER + D3D11_MESSAGE_ID_DESTROY_PIXELSHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT + D3D11_MESSAGE_ID_CREATE_INPUTLAYOUT + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT_WIN7 + D3D11_MESSAGE_ID_LIVE_INPUTLAYOUT_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT + D3D11_MESSAGE_ID_DESTROY_INPUTLAYOUT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_SAMPLER + D3D11_MESSAGE_ID_CREATE_SAMPLER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_SAMPLER_WIN7 + D3D11_MESSAGE_ID_LIVE_SAMPLER_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_SAMPLER + D3D11_MESSAGE_ID_DESTROY_SAMPLER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_BLENDSTATE + D3D11_MESSAGE_ID_CREATE_BLENDSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_BLENDSTATE_WIN7 + D3D11_MESSAGE_ID_LIVE_BLENDSTATE_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_BLENDSTATE + D3D11_MESSAGE_ID_DESTROY_BLENDSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE + D3D11_MESSAGE_ID_CREATE_DEPTHSTENCILSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE_WIN7 + D3D11_MESSAGE_ID_LIVE_DEPTHSTENCILSTATE_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE + D3D11_MESSAGE_ID_DESTROY_DEPTHSTENCILSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE + D3D11_MESSAGE_ID_CREATE_RASTERIZERSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE_WIN7 + D3D11_MESSAGE_ID_LIVE_RASTERIZERSTATE_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE + D3D11_MESSAGE_ID_DESTROY_RASTERIZERSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_QUERY + D3D11_MESSAGE_ID_CREATE_QUERY + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_QUERY_WIN7 + D3D11_MESSAGE_ID_LIVE_QUERY_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_QUERY + D3D11_MESSAGE_ID_DESTROY_QUERY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_PREDICATE + D3D11_MESSAGE_ID_CREATE_PREDICATE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_PREDICATE_WIN7 + D3D11_MESSAGE_ID_LIVE_PREDICATE_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_PREDICATE + D3D11_MESSAGE_ID_DESTROY_PREDICATE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_COUNTER + D3D11_MESSAGE_ID_CREATE_COUNTER + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_COUNTER + D3D11_MESSAGE_ID_DESTROY_COUNTER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_COMMANDLIST + D3D11_MESSAGE_ID_CREATE_COMMANDLIST + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_COMMANDLIST + D3D11_MESSAGE_ID_LIVE_COMMANDLIST + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_COMMANDLIST + D3D11_MESSAGE_ID_DESTROY_COMMANDLIST + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE + D3D11_MESSAGE_ID_CREATE_CLASSINSTANCE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE + D3D11_MESSAGE_ID_LIVE_CLASSINSTANCE + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE + D3D11_MESSAGE_ID_DESTROY_CLASSINSTANCE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE + D3D11_MESSAGE_ID_CREATE_CLASSLINKAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE + D3D11_MESSAGE_ID_LIVE_CLASSLINKAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE + D3D11_MESSAGE_ID_DESTROY_CLASSLINKAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_DEVICE_WIN7 + D3D11_MESSAGE_ID_LIVE_DEVICE_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY_WIN7 + D3D11_MESSAGE_ID_LIVE_OBJECT_SUMMARY_WIN7 + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_COMPUTESHADER + D3D11_MESSAGE_ID_CREATE_COMPUTESHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_COMPUTESHADER + D3D11_MESSAGE_ID_LIVE_COMPUTESHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER + D3D11_MESSAGE_ID_DESTROY_COMPUTESHADER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW + D3D11_MESSAGE_ID_CREATE_UNORDEREDACCESSVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW + D3D11_MESSAGE_ID_LIVE_UNORDEREDACCESSVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW + D3D11_MESSAGE_ID_DESTROY_UNORDEREDACCESSVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACES_FEATURELEVEL + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INTERFACE_COUNT_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_INDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_TYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INVALID_INSTANCE_DATA + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA + D3D11_MESSAGE_ID_DEVICE_SETSHADER_UNBOUND_INSTANCE_DATA + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS + D3D11_MESSAGE_ID_DEVICE_SETSHADER_INSTANCE_DATA_BINDINGS + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL + D3D11_MESSAGE_ID_DEVICE_CREATESHADER_CLASSLINKAGE_FULL + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE + D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_UNRECOGNIZED_FEATURE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE + D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_MISMATCHED_DATA_SIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN + D3D11_MESSAGE_ID_DEVICE_CHECKFEATURESUPPORT_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD + D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD + D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_CSSETSHADERRESOURCES_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL + D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCALL + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY + D3D11_MESSAGE_ID_CREATECOMPUTESHADER_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE + D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERBYTECODE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE + D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDSHADERTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE + D3D11_MESSAGE_ID_CREATECOMPUTESHADER_INVALIDCLASSLINKAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_CSSETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER + D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_CSSETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_CSSETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_CSGETSHADERRESOURCES_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_CSGETCONSTANTBUFFERS_BUFFERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY + D3D11_MESSAGE_ID_DEVICE_CSGETSAMPLERS_SAMPLERS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEFLOATOPSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEFLOATOPSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEFLOATOPSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEFLOATOPSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEFLOATOPSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEFLOATOPSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEFLOATOPSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDSTRUCTURESTRIDE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDESC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDIMENSIONS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_UNRECOGNIZEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_OVERLAPPING_OLD_SLOTS + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NO_OP + + + + No documentation. + + + D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_CSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_PSSETUNORDEREDACCESSVIEWS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_TOOMANYOBJECTS + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD + D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH + D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEW_DENORMFLUSH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSS_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY + D3D11_MESSAGE_ID_DEVICE_CSGETUNORDEREDACCESSS_VIEWS_EMPTY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS + D3D11_MESSAGE_ID_CREATESHADERRESESOURCEVIEW_TOOMANYOBJECTS + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER + D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_INVALID_ARG_BUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED + D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_UNALIGNED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW + D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_OFFSET_OVERFLOW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT + D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDCONTEXT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE + D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD + D3D11_MESSAGE_ID_DEVICE_SETRESOURCEMINLOD_INVALIDMINLOD + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT + D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDCONTEXT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE + D3D11_MESSAGE_ID_DEVICE_GETRESOURCEMINLOD_INVALIDRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_OMSETDEPTHSTENCIL_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY + D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_DEPTH_READONLY + + + + No documentation. + + + D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY + D3D11_MESSAGE_ID_CLEARDEPTHSTENCILVIEW_STENCIL_READONLY + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED + D3D11_MESSAGE_ID_CHECKFEATURESUPPORT_FORMAT_DEPRECATED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RETURN_TYPE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP + D3D11_MESSAGE_ID_DEVICE_DRAW_UNORDEREDACCESSVIEW_RENDERTARGETVIEW_OVERLAP + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_DIMENSION_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_APPEND_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMICS_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_STRUCTURE_STRIDE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_BUFFER_TYPE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_RAW_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_LD_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_FORMAT_STORE_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_ADD_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_BITWISE_OPS_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_CMPSTORE_CMPEXCHANGE_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_EXCHANGE_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_SIGNED_MINMAX_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_ATOMIC_UNSIGNED_MINMAX_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED + D3D11_MESSAGE_ID_DEVICE_DISPATCH_BOUND_RESOURCE_MAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW + D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_OVERFLOW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO + D3D11_MESSAGE_ID_DEVICE_DISPATCH_THREADGROUPCOUNT_ZERO + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH + D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_STRUCTURE_STRIDE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH + D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_BUFFER_TYPE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_SHADERRESOURCEVIEW_RAW_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_DISPATCH_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_DISPATCHINDIRECT_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET + D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDOFFSET + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET + D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_LARGEOFFSET + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE + D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDDESTINATIONSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE + D3D11_MESSAGE_ID_COPYSTRUCTURECOUNT_INVALIDSOURCESTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED + D3D11_MESSAGE_ID_CHECKFORMATSUPPORT_FORMAT_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW + D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET + D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_INVALIDOFFSET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS + D3D11_MESSAGE_ID_DEVICE_CSSETUNORDEREDACCESSVIEWS_TOOMANYVIEWS + + + + No documentation. + + + D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT + D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_COUNTER_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_WARNING + D3D11_MESSAGE_ID_REF_WARNING + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_PIXEL_SHADER_WITHOUT_RTV_OR_DSV + D3D11_MESSAGE_ID_DEVICE_DRAW_PIXEL_SHADER_WITHOUT_RTV_OR_DSV + + + + No documentation. + + + D3D11_MESSAGE_ID_SHADER_ABORT + D3D11_MESSAGE_ID_SHADER_ABORT + + + + No documentation. + + + D3D11_MESSAGE_ID_SHADER_MESSAGE + D3D11_MESSAGE_ID_SHADER_MESSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_SHADER_ERROR + D3D11_MESSAGE_ID_SHADER_ERROR + + + + No documentation. + + + D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDRESOURCE + D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_HSSETSAMPLERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_HSSETSAMPLERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_DSSETSAMPLERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_DSSETSAMPLERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_CSSETSAMPLERS_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_CSSETSAMPLERS_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_HSSETSHADER_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_HSSETSHADER_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_DSSETSHADER_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_DSSETSHADER_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_CSSETSHADER_UNBINDDELETINGOBJECT + D3D11_MESSAGE_ID_CSSETSHADER_UNBINDDELETINGOBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_ENQUEUESETEVENT_INVALIDARG_RETURN + D3D11_MESSAGE_ID_ENQUEUESETEVENT_INVALIDARG_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_ENQUEUESETEVENT_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_ENQUEUESETEVENT_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_ENQUEUESETEVENT_ACCESSDENIED_RETURN + D3D11_MESSAGE_ID_ENQUEUESETEVENT_ACCESSDENIED_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NUMUAVS_INVALIDRANGE + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_NUMUAVS_INVALIDRANGE + + + + No documentation. + + + D3D11_MESSAGE_ID_USE_OF_ZERO_REFCOUNT_OBJECT + D3D11_MESSAGE_ID_USE_OF_ZERO_REFCOUNT_OBJECT + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D11_MESSAGES_END + D3D11_MESSAGE_ID_D3D11_MESSAGES_END + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D11_1_MESSAGES_START + D3D11_MESSAGE_ID_D3D11_1_MESSAGES_START + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_VIDEODECODER + D3D11_MESSAGE_ID_CREATE_VIDEODECODER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSORENUM + D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSORENUM + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSOR + D3D11_MESSAGE_ID_CREATE_VIDEOPROCESSOR + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_DECODEROUTPUTVIEW + D3D11_MESSAGE_ID_CREATE_DECODEROUTPUTVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_PROCESSORINPUTVIEW + D3D11_MESSAGE_ID_CREATE_PROCESSORINPUTVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_PROCESSOROUTPUTVIEW + D3D11_MESSAGE_ID_CREATE_PROCESSOROUTPUTVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_DEVICECONTEXTSTATE + D3D11_MESSAGE_ID_CREATE_DEVICECONTEXTSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_VIDEODECODER + D3D11_MESSAGE_ID_LIVE_VIDEODECODER + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSORENUM + D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSORENUM + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSOR + D3D11_MESSAGE_ID_LIVE_VIDEOPROCESSOR + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_DECODEROUTPUTVIEW + D3D11_MESSAGE_ID_LIVE_DECODEROUTPUTVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_PROCESSORINPUTVIEW + D3D11_MESSAGE_ID_LIVE_PROCESSORINPUTVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_PROCESSOROUTPUTVIEW + D3D11_MESSAGE_ID_LIVE_PROCESSOROUTPUTVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_DEVICECONTEXTSTATE + D3D11_MESSAGE_ID_LIVE_DEVICECONTEXTSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_VIDEODECODER + D3D11_MESSAGE_ID_DESTROY_VIDEODECODER + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSORENUM + D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSORENUM + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSOR + D3D11_MESSAGE_ID_DESTROY_VIDEOPROCESSOR + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_DECODEROUTPUTVIEW + D3D11_MESSAGE_ID_DESTROY_DECODEROUTPUTVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_PROCESSORINPUTVIEW + D3D11_MESSAGE_ID_DESTROY_PROCESSORINPUTVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_PROCESSOROUTPUTVIEW + D3D11_MESSAGE_ID_DESTROY_PROCESSOROUTPUTVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_DEVICECONTEXTSTATE + D3D11_MESSAGE_ID_DESTROY_DEVICECONTEXTSTATE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFLAGS + D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFEATURELEVEL + D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDFEATURELEVEL + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_FEATURELEVELS_NOT_SUPPORTED + D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_FEATURELEVELS_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDREFIID + D3D11_MESSAGE_ID_CREATEDEVICECONTEXTSTATE_INVALIDREFIID + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DISCARDVIEW_INVALIDVIEW + D3D11_MESSAGE_ID_DEVICE_DISCARDVIEW_INVALIDVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION1_INVALIDCOPYFLAGS + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION1_INVALIDCOPYFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_UPDATESUBRESOURCE1_INVALIDCOPYFLAGS + D3D11_MESSAGE_ID_UPDATESUBRESOURCE1_INVALIDCOPYFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALIDFORCEDSAMPLECOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODER_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEVIDEODECODER_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODER_NULLPARAM + D3D11_MESSAGE_ID_CREATEVIDEODECODER_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODER_INVALIDFORMAT + D3D11_MESSAGE_ID_CREATEVIDEODECODER_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODER_ZEROWIDTHHEIGHT + D3D11_MESSAGE_ID_CREATEVIDEODECODER_ZEROWIDTHHEIGHT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERSIZE + D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERUSAGE + D3D11_MESSAGE_ID_CREATEVIDEODECODER_DRIVER_INVALIDBUFFERUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERPROFILECOUNT_OUTOFMEMORY + D3D11_MESSAGE_ID_GETVIDEODECODERPROFILECOUNT_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_NULLPARAM + D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_INVALIDINDEX + D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_INVALIDINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_GETVIDEODECODERPROFILE_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_NULLPARAM + D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CHECKVIDEODECODERFORMAT_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_NULLPARAM + D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_GETVIDEODECODERCONFIGCOUNT_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_NULLPARAM + D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_INVALIDINDEX + D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_INVALIDINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_GETVIDEODECODERCONFIG_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_GETDECODERCREATIONPARAMS_NULLPARAM + D3D11_MESSAGE_ID_GETDECODERCREATIONPARAMS_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETDECODERDRIVERHANDLE_NULLPARAM + D3D11_MESSAGE_ID_GETDECODERDRIVERHANDLE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETDECODERBUFFER_NULLPARAM + D3D11_MESSAGE_ID_GETDECODERBUFFER_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDBUFFER + D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDBUFFER + + + + No documentation. + + + D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDTYPE + D3D11_MESSAGE_ID_GETDECODERBUFFER_INVALIDTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_GETDECODERBUFFER_LOCKED + D3D11_MESSAGE_ID_GETDECODERBUFFER_LOCKED + + + + No documentation. + + + D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NULLPARAM + D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_INVALIDTYPE + D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_INVALIDTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NOTLOCKED + D3D11_MESSAGE_ID_RELEASEDECODERBUFFER_NOTLOCKED + + + + No documentation. + + + D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM + D3D11_MESSAGE_ID_DECODERBEGINFRAME_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD + D3D11_MESSAGE_ID_DECODERBEGINFRAME_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM + D3D11_MESSAGE_ID_DECODERENDFRAME_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_NULLPARAM + D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_INVALIDTYPE + D3D11_MESSAGE_ID_SUBMITDECODERBUFFERS_INVALIDTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_DECODEREXTENSION_NULLPARAM + D3D11_MESSAGE_ID_DECODEREXTENSION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_DECODEREXTENSION_INVALIDRESOURCE + D3D11_MESSAGE_ID_DECODEREXTENSION_INVALIDRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_NULLPARAM + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDFRAMEFORMAT + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDFRAMEFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDUSAGE + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDINPUTFRAMERATE + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDINPUTFRAMERATE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDOUTPUTFRAMERATE + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDOUTPUTFRAMERATE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDWIDTHHEIGHT + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORENUMERATOR_INVALIDWIDTHHEIGHT + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEOPROCESSORCONTENTDESC_NULLPARAM + D3D11_MESSAGE_ID_GETVIDEOPROCESSORCONTENTDESC_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMAT_NULLPARAM + D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMAT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEOPROCESSORCAPS_NULLPARAM + D3D11_MESSAGE_ID_GETVIDEOPROCESSORCAPS_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_NULLPARAM + D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_INVALIDINDEX + D3D11_MESSAGE_ID_GETVIDEOPROCESSORRATECONVERSIONCAPS_INVALIDINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_NULLPARAM + D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_INVALIDINDEX + D3D11_MESSAGE_ID_GETVIDEOPROCESSORCUSTOMRATE_INVALIDINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_NULLPARAM + D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_UNSUPPORTED + D3D11_MESSAGE_ID_GETVIDEOPROCESSORFILTERRANGE_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_NULLPARAM + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOR_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTTARGETRECT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTTARGETRECT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_INVALIDALPHA + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTBACKGROUNDCOLOR_INVALIDALPHA + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDFILLMODE + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTALPHAFILLMODE_INVALIDFILLMODE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSTEREOMODE_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTEXTENSION_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTEXTENSION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTTARGETRECT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTTARGETRECT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTBACKGROUNDCOLOR_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTBACKGROUNDCOLOR_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTALPHAFILLMODE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTALPHAFILLMODE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCONSTRICTION_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCONSTRICTION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_INVALIDSIZE + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCONSTRICTION_INVALIDSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSTEREOMODE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSTEREOMODE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTEXTENSION_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTEXTENSION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDFORMAT + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFRAMEFORMAT_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDRATE + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDRATE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDFLAG + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDFLAG + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMOUTPUTRATE_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDRECT + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSOURCERECT_INVALIDRECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDRECT + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMDESTRECT_INVALIDRECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDALPHA + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_INVALIDALPHA + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDCOUNT + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDALPHA + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPALETTE_INVALIDALPHA + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDRATIO + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_INVALIDRATIO + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDRANGE + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_INVALIDRANGE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMLUMAKEY_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FLIPUNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FLIPUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_MONOOFFSETUNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_MONOOFFSETUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FORMATUNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_FORMATUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDFORMAT + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMSTEREOFORMAT_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDFILTER + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDFILTER + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDLEVEL + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMFILTER_INVALIDLEVEL + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMEXTENSION_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMEXTENSION_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSTREAMCOUNT + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSTREAMCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_TARGETRECT + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_TARGETRECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDOUTPUT + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDOUTPUT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDPASTFRAMES + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDPASTFRAMES + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDFUTUREFRAMES + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDFUTUREFRAMES + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSOURCERECT + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDSOURCERECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDDESTRECT + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDDESTRECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDINPUTRESOURCE + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDINPUTRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAYSIZE + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAYSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAY + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDARRAY + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTEXPECTED + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTEXPECTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTNOTEXPECTED + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_RIGHTNOTEXPECTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_STEREONOTENABLED + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_STEREONOTENABLED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDRIGHTRESOURCE + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INVALIDRIGHTRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NOSTEREOSTREAMS + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_NOSTEREOSTREAMS + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INPUTHAZARD + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_INPUTHAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_OUTPUTHAZARD + D3D11_MESSAGE_ID_VIDEOPROCESSORBLT_OUTPUTHAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_NULLPARAM + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDTYPE + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDBIND + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDBIND + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEDFORMAT + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDMIP + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDMIP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEMIP + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_UNSUPPORTEMIP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAYSIZE + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAYSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAY + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDARRAY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDDIMENSION + D3D11_MESSAGE_ID_CREATEVIDEODECODEROUTPUTVIEW_INVALIDDIMENSION + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_NULLPARAM + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDTYPE + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDBIND + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDBIND + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMISC + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMISC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDUSAGE + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFORMAT + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFOURCC + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDFOURCC + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMIP + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMIP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_UNSUPPORTEDMIP + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_UNSUPPORTEDMIP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAYSIZE + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAYSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAY + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDARRAY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDDIMENSION + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDDIMENSION + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_NULLPARAM + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDTYPE + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDBIND + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDBIND + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDFORMAT + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMIP + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMIP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDMIP + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDMIP + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDARRAY + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_UNSUPPORTEDARRAY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDARRAY + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDARRAY + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDDIMENSION + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDDIMENSION + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_FORCED_SAMPLE_COUNT + D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_USE_OF_FORCED_SAMPLE_COUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS + D3D11_MESSAGE_ID_CREATEBLENDSTATE_INVALIDLOGICOPS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDARRAYWITHDECODER + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDDARRAYWITHDECODER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDARRAYWITHDECODER + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDDARRAYWITHDECODER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDARRAYWITHDECODER + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDDARRAYWITHDECODER + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_LOCKEDOUT_INTERFACE + D3D11_MESSAGE_ID_DEVICE_LOCKEDOUT_INTERFACE + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_WARNING_ATOMIC_INCONSISTENT + D3D11_MESSAGE_ID_REF_WARNING_ATOMIC_INCONSISTENT + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_WARNING_READING_UNINITIALIZED_RESOURCE + D3D11_MESSAGE_ID_REF_WARNING_READING_UNINITIALIZED_RESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_WARNING_RAW_HAZARD + D3D11_MESSAGE_ID_REF_WARNING_RAW_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_WARNING_WAR_HAZARD + D3D11_MESSAGE_ID_REF_WARNING_WAR_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_REF_WARNING_WAW_HAZARD + D3D11_MESSAGE_ID_REF_WARNING_WAW_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECRYPTOSESSION_NULLPARAM + D3D11_MESSAGE_ID_CREATECRYPTOSESSION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATECRYPTOSESSION_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATECRYPTOSESSION_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_GETCRYPTOTYPE_NULLPARAM + D3D11_MESSAGE_ID_GETCRYPTOTYPE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETDECODERPROFILE_NULLPARAM + D3D11_MESSAGE_ID_GETDECODERPROFILE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATESIZE_NULLPARAM + D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATESIZE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_NULLPARAM + D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_WRONGSIZE + D3D11_MESSAGE_ID_GETCRYPTOSESSIONCERTIFICATE_WRONGSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_WRONGSIZE + D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_WRONGSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_NULLPARAM + D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_UNSUPPORTED + D3D11_MESSAGE_ID_ENCRYPTIONBLT_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_NULLPARAM + D3D11_MESSAGE_ID_ENCRYPTIONBLT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_WRONGDEVICE + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_WRONGDEVICE + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_WRONGDEVICE + D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_WRONGDEVICE + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_FORMAT_MISMATCH + D3D11_MESSAGE_ID_ENCRYPTIONBLT_FORMAT_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SIZE_MISMATCH + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SIZE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MULTISAMPLED + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MULTISAMPLED + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_NOT_STAGING + D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_NOT_STAGING + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MAPPED + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_MAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_MAPPED + D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_MAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_OFFERED + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_OFFERED + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_OFFERED + D3D11_MESSAGE_ID_ENCRYPTIONBLT_DST_OFFERED + + + + No documentation. + + + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_CONTENT_UNDEFINED + D3D11_MESSAGE_ID_ENCRYPTIONBLT_SRC_CONTENT_UNDEFINED + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_UNSUPPORTED + D3D11_MESSAGE_ID_DECRYPTIONBLT_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_NULLPARAM + D3D11_MESSAGE_ID_DECRYPTIONBLT_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_WRONGDEVICE + D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_WRONGDEVICE + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_WRONGDEVICE + D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_WRONGDEVICE + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_FORMAT_MISMATCH + D3D11_MESSAGE_ID_DECRYPTIONBLT_FORMAT_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_SIZE_MISMATCH + D3D11_MESSAGE_ID_DECRYPTIONBLT_SIZE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MULTISAMPLED + D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MULTISAMPLED + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_NOT_STAGING + D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_NOT_STAGING + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_NOT_RENDER_TARGET + D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_NOT_RENDER_TARGET + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_MAPPED + D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_MAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MAPPED + D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_MAPPED + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_OFFERED + D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_OFFERED + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_OFFERED + D3D11_MESSAGE_ID_DECRYPTIONBLT_DST_OFFERED + + + + No documentation. + + + D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_CONTENT_UNDEFINED + D3D11_MESSAGE_ID_DECRYPTIONBLT_SRC_CONTENT_UNDEFINED + + + + No documentation. + + + D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_NULLPARAM + D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_INVALIDSIZE + D3D11_MESSAGE_ID_STARTSESSIONKEYREFRESH_INVALIDSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_FINISHSESSIONKEYREFRESH_NULLPARAM + D3D11_MESSAGE_ID_FINISHSESSIONKEYREFRESH_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_NULLPARAM + D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_INVALIDSIZE + D3D11_MESSAGE_ID_GETENCRYPTIONBLTKEY_INVALIDSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_GETCONTENTPROTECTIONCAPS_NULLPARAM + D3D11_MESSAGE_ID_GETCONTENTPROTECTIONCAPS_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_NULLPARAM + D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_INVALIDINDEX + D3D11_MESSAGE_ID_CHECKCRYPTOKEYEXCHANGE_INVALIDINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_NULLPARAM + D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_UNSUPPORTED + D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_INVALIDTYPE + D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_INVALIDTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_OUTOFMEMORY_RETURN + D3D11_MESSAGE_ID_CREATEAUTHENTICATEDCHANNEL_OUTOFMEMORY_RETURN + + + + No documentation. + + + D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_INVALIDCHANNEL + D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_INVALIDCHANNEL + + + + No documentation. + + + D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_NULLPARAM + D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATESIZE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_INVALIDCHANNEL + D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_INVALIDCHANNEL + + + + No documentation. + + + D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_NULLPARAM + D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_WRONGSIZE + D3D11_MESSAGE_ID_GETAUTHENTICATEDCHANNELCERTIFICATE_WRONGSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDCHANNEL + D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDCHANNEL + + + + No documentation. + + + D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_NULLPARAM + D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_NULLPARAM + D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGCHANNEL + D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGCHANNEL + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_UNSUPPORTEDQUERY + D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_UNSUPPORTEDQUERY + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGSIZE + D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_WRONGSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_INVALIDPROCESSINDEX + D3D11_MESSAGE_ID_QUERYAUTHENTICATEDCHANNEL_INVALIDPROCESSINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_NULLPARAM + D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGCHANNEL + D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGCHANNEL + + + + No documentation. + + + D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_UNSUPPORTEDCONFIGURE + D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_UNSUPPORTEDCONFIGURE + + + + No documentation. + + + D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGSIZE + D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_WRONGSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_INVALIDPROCESSIDTYPE + D3D11_MESSAGE_ID_CONFIGUREAUTHENTICATEDCHANNEL_INVALIDPROCESSIDTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + D3D11_MESSAGE_ID_VSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + D3D11_MESSAGE_ID_DSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + D3D11_MESSAGE_ID_HSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + D3D11_MESSAGE_ID_GSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + D3D11_MESSAGE_ID_PSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + D3D11_MESSAGE_ID_CSSETCONSTANTBUFFERS_INVALIDBUFFEROFFSETORCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_INVALIDSIZE + D3D11_MESSAGE_ID_NEGOTIATECRPYTOSESSIONKEYEXCHANGE_INVALIDSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDSIZE + D3D11_MESSAGE_ID_NEGOTIATEAUTHENTICATEDCHANNELKEYEXCHANGE_INVALIDSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDPRIORITY + D3D11_MESSAGE_ID_OFFERRESOURCES_INVALIDPRIORITY + + + + No documentation. + + + D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_OUTOFMEMORY + D3D11_MESSAGE_ID_GETCRYPTOSESSIONHANDLE_OUTOFMEMORY + + + + No documentation. + + + D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_NULLPARAM + D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDTYPE + D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDBIND + D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDBIND + + + + No documentation. + + + D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDARRAY + D3D11_MESSAGE_ID_ACQUIREHANDLEFORCAPTURE_INVALIDARRAY + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALID + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_INVALID + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMROTATION_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDVIEW + D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDVIEW + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_SHADEREXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_SHADEREXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_SHADEREXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_SHADEREXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_SHADEREXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_SHADEREXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_SHADEREXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_SHADEREXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_DOUBLEEXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_SHADEREXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_SHADEREXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_DOUBLEEXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_SHADEREXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_SHADEREXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_DOUBLEEXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_SHADEREXTENSIONSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_SHADEREXTENSIONSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_MINPRECISION + D3D11_MESSAGE_ID_DEVICE_SHADER_LINKAGE_MINPRECISION + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMALPHA_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMPIXELASPECTRATIO_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEVERTEXSHADER_UAVSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEHULLSHADER_UAVSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEDOMAINSHADER_UAVSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADER_UAVSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEGEOMETRYSHADERWITHSTREAMOUTPUT_UAVSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATEPIXELSHADER_UAVSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CREATECOMPUTESHADER_UAVSNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_INVALIDOFFSET + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_INVALIDOFFSET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_TOOMANYVIEWS + D3D11_MESSAGE_ID_DEVICE_OMSETRENDERTARGETSANDUNORDEREDACCESSVIEWS_TOOMANYVIEWS + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_NOTSUPPORTED + D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_NOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_SWAPDEVICECONTEXTSTATE_NOTSUPPORTED + D3D11_MESSAGE_ID_SWAPDEVICECONTEXTSTATE_NOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_UPDATESUBRESOURCE_PREFERUPDATESUBRESOURCE1 + D3D11_MESSAGE_ID_UPDATESUBRESOURCE_PREFERUPDATESUBRESOURCE1 + + + + No documentation. + + + D3D11_MESSAGE_ID_GETDC_INACCESSIBLE + D3D11_MESSAGE_ID_GETDC_INACCESSIBLE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDRECT + D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDRECT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLE_MASK_IGNORED_ON_FL9 + D3D11_MESSAGE_ID_DEVICE_DRAW_SAMPLE_MASK_IGNORED_ON_FL9 + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE1_NOT_SUPPORTED + D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE1_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BY_NAME_NOT_SUPPORTED + D3D11_MESSAGE_ID_DEVICE_OPEN_SHARED_RESOURCE_BY_NAME_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_ENQUEUESETEVENT_NOT_SUPPORTED + D3D11_MESSAGE_ID_ENQUEUESETEVENT_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_OFFERRELEASE_NOT_SUPPORTED + D3D11_MESSAGE_ID_OFFERRELEASE_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_OFFERRESOURCES_INACCESSIBLE + D3D11_MESSAGE_ID_OFFERRESOURCES_INACCESSIBLE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMSAA + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSORINPUTVIEW_INVALIDMSAA + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMSAA + D3D11_MESSAGE_ID_CREATEVIDEOPROCESSOROUTPUTVIEW_INVALIDMSAA + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT + D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_INVALIDSOURCERECT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT + D3D11_MESSAGE_ID_DEVICE_CLEARVIEW_EMPTYRECT + + + + No documentation. + + + D3D11_MESSAGE_ID_UPDATESUBRESOURCE_EMPTYDESTBOX + D3D11_MESSAGE_ID_UPDATESUBRESOURCE_EMPTYDESTBOX + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_EMPTYSOURCEBOX + D3D11_MESSAGE_ID_COPYSUBRESOURCEREGION_EMPTYSOURCEBOX + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS + D3D11_MESSAGE_ID_DEVICE_DRAW_OM_RENDER_TARGET_DOES_NOT_SUPPORT_LOGIC_OPS + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_DEPTHSTENCILVIEW_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_DEPTHSTENCILVIEW_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET + D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET_DUE_TO_FLIP_PRESENT + D3D11_MESSAGE_ID_DEVICE_DRAW_RENDERTARGETVIEW_NOT_SET_DUE_TO_FLIP_PRESENT + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET_DUE_TO_FLIP_PRESENT + D3D11_MESSAGE_ID_DEVICE_UNORDEREDACCESSVIEW_NOT_SET_DUE_TO_FLIP_PRESENT + + + + No documentation. + + + D3D11_MESSAGE_ID_GETDATAFORNEWHARDWAREKEY_NULLPARAM + D3D11_MESSAGE_ID_GETDATAFORNEWHARDWAREKEY_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKCRYPTOSESSIONSTATUS_NULLPARAM + D3D11_MESSAGE_ID_CHECKCRYPTOSESSIONSTATUS_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETCRYPTOSESSIONPRIVATEDATASIZE_NULLPARAM + D3D11_MESSAGE_ID_GETCRYPTOSESSIONPRIVATEDATASIZE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERCAPS_NULLPARAM + D3D11_MESSAGE_ID_GETVIDEODECODERCAPS_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_GETVIDEODECODERCAPS_ZEROWIDTHHEIGHT + D3D11_MESSAGE_ID_GETVIDEODECODERCAPS_ZEROWIDTHHEIGHT + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_NULLPARAM + D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_INVALIDCOLORSPACE + D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_INVALIDCOLORSPACE + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_ZEROWIDTHHEIGHT + D3D11_MESSAGE_ID_CHECKVIDEODECODERDOWNSAMPLING_ZEROWIDTHHEIGHT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEODECODERENABLEDOWNSAMPLING_NULLPARAM + D3D11_MESSAGE_ID_VIDEODECODERENABLEDOWNSAMPLING_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEODECODERENABLEDOWNSAMPLING_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEODECODERENABLEDOWNSAMPLING_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEODECODERUPDATEDOWNSAMPLING_NULLPARAM + D3D11_MESSAGE_ID_VIDEODECODERUPDATEDOWNSAMPLING_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEODECODERUPDATEDOWNSAMPLING_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEODECODERUPDATEDOWNSAMPLING_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMATCONVERSION_NULLPARAM + D3D11_MESSAGE_ID_CHECKVIDEOPROCESSORFORMATCONVERSION_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE1_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTCOLORSPACE1_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE1_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTCOLORSPACE1_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE1_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE1_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE1_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMCOLORSPACE1_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_UNSUPPORTED + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMMIRROR_UNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE1_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE1_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_NULLPARAM + D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_INVALIDCOLORSPACE + D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_INVALIDCOLORSPACE + + + + No documentation. + + + D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_ZEROWIDTHHEIGHT + D3D11_MESSAGE_ID_RECOMMENDVIDEODECODERDOWNSAMPLING_ZEROWIDTHHEIGHT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSHADERUSAGE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTSHADERUSAGE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSHADERUSAGE_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTSHADERUSAGE_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDSTREAMCOUNT + D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDSTREAMCOUNT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_TARGETRECT + D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_TARGETRECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDSOURCERECT + D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDSOURCERECT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDDESTRECT + D3D11_MESSAGE_ID_VIDEOPROCESSORGETBEHAVIORHINTS_INVALIDDESTRECT + + + + No documentation. + + + D3D11_MESSAGE_ID_GETCRYPTOSESSIONPRIVATEDATASIZE_INVALID_KEY_EXCHANGE_TYPE + D3D11_MESSAGE_ID_GETCRYPTOSESSIONPRIVATEDATASIZE_INVALID_KEY_EXCHANGE_TYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D11_1_MESSAGES_END + D3D11_MESSAGE_ID_D3D11_1_MESSAGES_END + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D11_2_MESSAGES_START + D3D11_MESSAGE_ID_D3D11_2_MESSAGES_START + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDUSAGE + D3D11_MESSAGE_ID_CREATEBUFFER_INVALIDUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDUSAGE + D3D11_MESSAGE_ID_CREATETEXTURE1D_INVALIDUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDUSAGE + D3D11_MESSAGE_ID_CREATETEXTURE2D_INVALIDUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_LEVEL9_STEPRATE_NOT_1 + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_LEVEL9_STEPRATE_NOT_1 + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_LEVEL9_INSTANCING_NOT_SUPPORTED + D3D11_MESSAGE_ID_CREATEINPUTLAYOUT_LEVEL9_INSTANCING_NOT_SUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_UPDATETILEMAPPINGS_INVALID_PARAMETER + D3D11_MESSAGE_ID_UPDATETILEMAPPINGS_INVALID_PARAMETER + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYTILEMAPPINGS_INVALID_PARAMETER + D3D11_MESSAGE_ID_COPYTILEMAPPINGS_INVALID_PARAMETER + + + + No documentation. + + + D3D11_MESSAGE_ID_COPYTILES_INVALID_PARAMETER + D3D11_MESSAGE_ID_COPYTILES_INVALID_PARAMETER + + + + No documentation. + + + D3D11_MESSAGE_ID_UPDATETILES_INVALID_PARAMETER + D3D11_MESSAGE_ID_UPDATETILES_INVALID_PARAMETER + + + + No documentation. + + + D3D11_MESSAGE_ID_RESIZETILEPOOL_INVALID_PARAMETER + D3D11_MESSAGE_ID_RESIZETILEPOOL_INVALID_PARAMETER + + + + No documentation. + + + D3D11_MESSAGE_ID_TILEDRESOURCEBARRIER_INVALID_PARAMETER + D3D11_MESSAGE_ID_TILEDRESOURCEBARRIER_INVALID_PARAMETER + + + + No documentation. + + + D3D11_MESSAGE_ID_NULL_TILE_MAPPING_ACCESS_WARNING + D3D11_MESSAGE_ID_NULL_TILE_MAPPING_ACCESS_WARNING + + + + No documentation. + + + D3D11_MESSAGE_ID_NULL_TILE_MAPPING_ACCESS_ERROR + D3D11_MESSAGE_ID_NULL_TILE_MAPPING_ACCESS_ERROR + + + + No documentation. + + + D3D11_MESSAGE_ID_DIRTY_TILE_MAPPING_ACCESS + D3D11_MESSAGE_ID_DIRTY_TILE_MAPPING_ACCESS + + + + No documentation. + + + D3D11_MESSAGE_ID_DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA + D3D11_MESSAGE_ID_DUPLICATE_TILE_MAPPINGS_IN_COVERED_AREA + + + + No documentation. + + + D3D11_MESSAGE_ID_TILE_MAPPINGS_IN_COVERED_AREA_DUPLICATED_OUTSIDE + D3D11_MESSAGE_ID_TILE_MAPPINGS_IN_COVERED_AREA_DUPLICATED_OUTSIDE + + + + No documentation. + + + D3D11_MESSAGE_ID_TILE_MAPPINGS_SHARED_BETWEEN_INCOMPATIBLE_RESOURCES + D3D11_MESSAGE_ID_TILE_MAPPINGS_SHARED_BETWEEN_INCOMPATIBLE_RESOURCES + + + + No documentation. + + + D3D11_MESSAGE_ID_TILE_MAPPINGS_SHARED_BETWEEN_INPUT_AND_OUTPUT + D3D11_MESSAGE_ID_TILE_MAPPINGS_SHARED_BETWEEN_INPUT_AND_OUTPUT + + + + No documentation. + + + D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_INVALIDFLAGS + D3D11_MESSAGE_ID_CHECKMULTISAMPLEQUALITYLEVELS_INVALIDFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_GETRESOURCETILING_NONTILED_RESOURCE + D3D11_MESSAGE_ID_GETRESOURCETILING_NONTILED_RESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_RESIZETILEPOOL_SHRINK_WITH_MAPPINGS_STILL_DEFINED_PAST_END + D3D11_MESSAGE_ID_RESIZETILEPOOL_SHRINK_WITH_MAPPINGS_STILL_DEFINED_PAST_END + + + + No documentation. + + + D3D11_MESSAGE_ID_NEED_TO_CALL_TILEDRESOURCEBARRIER + D3D11_MESSAGE_ID_NEED_TO_CALL_TILEDRESOURCEBARRIER + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEVICE_INVALIDARGS + D3D11_MESSAGE_ID_CREATEDEVICE_INVALIDARGS + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEDEVICE_WARNING + D3D11_MESSAGE_ID_CREATEDEVICE_WARNING + + + + No documentation. + + + D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWUINT_HAZARD + D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWUINT_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_HAZARD + D3D11_MESSAGE_ID_CLEARUNORDEREDACCESSVIEWFLOAT_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_TILED_RESOURCE_TIER_1_BUFFER_TEXTURE_MISMATCH + D3D11_MESSAGE_ID_TILED_RESOURCE_TIER_1_BUFFER_TEXTURE_MISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_CRYPTOSESSION + D3D11_MESSAGE_ID_CREATE_CRYPTOSESSION + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_AUTHENTICATEDCHANNEL + D3D11_MESSAGE_ID_CREATE_AUTHENTICATEDCHANNEL + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_CRYPTOSESSION + D3D11_MESSAGE_ID_LIVE_CRYPTOSESSION + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_AUTHENTICATEDCHANNEL + D3D11_MESSAGE_ID_LIVE_AUTHENTICATEDCHANNEL + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_CRYPTOSESSION + D3D11_MESSAGE_ID_DESTROY_CRYPTOSESSION + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_AUTHENTICATEDCHANNEL + D3D11_MESSAGE_ID_DESTROY_AUTHENTICATEDCHANNEL + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D11_2_MESSAGES_END + D3D11_MESSAGE_ID_D3D11_2_MESSAGES_END + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D11_3_MESSAGES_START + D3D11_MESSAGE_ID_D3D11_3_MESSAGES_START + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALID_CONSERVATIVERASTERMODE + D3D11_MESSAGE_ID_CREATERASTERIZERSTATE_INVALID_CONSERVATIVERASTERMODE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_SYSTEMVALUE + D3D11_MESSAGE_ID_DEVICE_DRAW_INVALID_SYSTEMVALUE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDCONTEXTTYPE + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_INVALIDCONTEXTTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_DECODENOTSUPPORTED + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_DECODENOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_ENCODENOTSUPPORTED + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_ENCODENOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDPLANEINDEX + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDPLANEINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDVIDEOPLANEINDEX + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_INVALIDVIDEOPLANEINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_AMBIGUOUSVIDEOPLANEINDEX + D3D11_MESSAGE_ID_CREATESHADERRESOURCEVIEW_AMBIGUOUSVIDEOPLANEINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDPLANEINDEX + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDPLANEINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDVIDEOPLANEINDEX + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_INVALIDVIDEOPLANEINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_AMBIGUOUSVIDEOPLANEINDEX + D3D11_MESSAGE_ID_CREATERENDERTARGETVIEW_AMBIGUOUSVIDEOPLANEINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDPLANEINDEX + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDPLANEINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDVIDEOPLANEINDEX + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_INVALIDVIDEOPLANEINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_AMBIGUOUSVIDEOPLANEINDEX + D3D11_MESSAGE_ID_CREATEUNORDEREDACCESSVIEW_AMBIGUOUSVIDEOPLANEINDEX + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSCANDATAOFFSET + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSCANDATAOFFSET + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_NOTSUPPORTED + D3D11_MESSAGE_ID_JPEGDECODE_NOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_DIMENSIONSTOOLARGE + D3D11_MESSAGE_ID_JPEGDECODE_DIMENSIONSTOOLARGE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOMPONENTS + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOMPONENTS + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_DESTINATIONNOT2D + D3D11_MESSAGE_ID_JPEGDECODE_DESTINATIONNOT2D + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_TILEDRESOURCESUNSUPPORTED + D3D11_MESSAGE_ID_JPEGDECODE_TILEDRESOURCESUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_GUARDRECTSUNSUPPORTED + D3D11_MESSAGE_ID_JPEGDECODE_GUARDRECTSUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_FORMATUNSUPPORTED + D3D11_MESSAGE_ID_JPEGDECODE_FORMATUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSUBRESOURCE + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDMIPLEVEL + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDMIPLEVEL + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_EMPTYDESTBOX + D3D11_MESSAGE_ID_JPEGDECODE_EMPTYDESTBOX + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXNOT2D + D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXNOT2D + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXNOTSUB + D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXNOTSUB + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXESINTERSECT + D3D11_MESSAGE_ID_JPEGDECODE_DESTBOXESINTERSECT + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_XSUBSAMPLEMISMATCH + D3D11_MESSAGE_ID_JPEGDECODE_XSUBSAMPLEMISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_YSUBSAMPLEMISMATCH + D3D11_MESSAGE_ID_JPEGDECODE_YSUBSAMPLEMISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_XSUBSAMPLEODD + D3D11_MESSAGE_ID_JPEGDECODE_XSUBSAMPLEODD + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_YSUBSAMPLEODD + D3D11_MESSAGE_ID_JPEGDECODE_YSUBSAMPLEODD + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_OUTPUTDIMENSIONSTOOLARGE + D3D11_MESSAGE_ID_JPEGDECODE_OUTPUTDIMENSIONSTOOLARGE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_NONPOW2SCALEUNSUPPORTED + D3D11_MESSAGE_ID_JPEGDECODE_NONPOW2SCALEUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_FRACTIONALDOWNSCALETOLARGE + D3D11_MESSAGE_ID_JPEGDECODE_FRACTIONALDOWNSCALETOLARGE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_CHROMASIZEMISMATCH + D3D11_MESSAGE_ID_JPEGDECODE_CHROMASIZEMISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_LUMACHROMASIZEMISMATCH + D3D11_MESSAGE_ID_JPEGDECODE_LUMACHROMASIZEMISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDNUMDESTINATIONS + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDNUMDESTINATIONS + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_SUBBOXUNSUPPORTED + D3D11_MESSAGE_ID_JPEGDECODE_SUBBOXUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_1DESTUNSUPPORTEDFORMAT + D3D11_MESSAGE_ID_JPEGDECODE_1DESTUNSUPPORTEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_3DESTUNSUPPORTEDFORMAT + D3D11_MESSAGE_ID_JPEGDECODE_3DESTUNSUPPORTEDFORMAT + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_SCALEUNSUPPORTED + D3D11_MESSAGE_ID_JPEGDECODE_SCALEUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSOURCESIZE + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDSOURCESIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOPYFLAGS + D3D11_MESSAGE_ID_JPEGDECODE_INVALIDCOPYFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_HAZARD + D3D11_MESSAGE_ID_JPEGDECODE_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDSRCBUFFERUSAGE + D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDSRCBUFFERUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDSRCBUFFERMISCFLAGS + D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDSRCBUFFERMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDDSTTEXTUREUSAGE + D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPORTEDDSTTEXTUREUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_BACKBUFFERNOTSUPPORTED + D3D11_MESSAGE_ID_JPEGDECODE_BACKBUFFERNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPRTEDCOPYFLAGS + D3D11_MESSAGE_ID_JPEGDECODE_UNSUPPRTEDCOPYFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_NOTSUPPORTED + D3D11_MESSAGE_ID_JPEGENCODE_NOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_INVALIDSCANDATAOFFSET + D3D11_MESSAGE_ID_JPEGENCODE_INVALIDSCANDATAOFFSET + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_INVALIDCOMPONENTS + D3D11_MESSAGE_ID_JPEGENCODE_INVALIDCOMPONENTS + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_SOURCENOT2D + D3D11_MESSAGE_ID_JPEGENCODE_SOURCENOT2D + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_TILEDRESOURCESUNSUPPORTED + D3D11_MESSAGE_ID_JPEGENCODE_TILEDRESOURCESUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_GUARDRECTSUNSUPPORTED + D3D11_MESSAGE_ID_JPEGENCODE_GUARDRECTSUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_XSUBSAMPLEMISMATCH + D3D11_MESSAGE_ID_JPEGENCODE_XSUBSAMPLEMISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_YSUBSAMPLEMISMATCH + D3D11_MESSAGE_ID_JPEGENCODE_YSUBSAMPLEMISMATCH + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_FORMATUNSUPPORTED + D3D11_MESSAGE_ID_JPEGENCODE_FORMATUNSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_INVALIDSUBRESOURCE + D3D11_MESSAGE_ID_JPEGENCODE_INVALIDSUBRESOURCE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_INVALIDMIPLEVEL + D3D11_MESSAGE_ID_JPEGENCODE_INVALIDMIPLEVEL + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_DIMENSIONSTOOLARGE + D3D11_MESSAGE_ID_JPEGENCODE_DIMENSIONSTOOLARGE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_HAZARD + D3D11_MESSAGE_ID_JPEGENCODE_HAZARD + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDDSTBUFFERUSAGE + D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDDSTBUFFERUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDDSTBUFFERMISCFLAGS + D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDDSTBUFFERMISCFLAGS + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDSRCTEXTUREUSAGE + D3D11_MESSAGE_ID_JPEGENCODE_UNSUPPORTEDSRCTEXTUREUSAGE + + + + No documentation. + + + D3D11_MESSAGE_ID_JPEGENCODE_BACKBUFFERNOTSUPPORTED + D3D11_MESSAGE_ID_JPEGENCODE_BACKBUFFERNOTSUPPORTED + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNSUPPORTEDCONTEXTTTYPEFORQUERY + D3D11_MESSAGE_ID_CREATEQUERYORPREDICATE_UNSUPPORTEDCONTEXTTTYPEFORQUERY + + + + No documentation. + + + D3D11_MESSAGE_ID_FLUSH1_INVALIDCONTEXTTYPE + D3D11_MESSAGE_ID_FLUSH1_INVALIDCONTEXTTYPE + + + + No documentation. + + + D3D11_MESSAGE_ID_DEVICE_SETHARDWAREPROTECTION_INVALIDCONTEXT + D3D11_MESSAGE_ID_DEVICE_SETHARDWAREPROTECTION_INVALIDCONTEXT + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTHDRMETADATA_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTHDRMETADATA_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTHDRMETADATA_INVALIDSIZE + D3D11_MESSAGE_ID_VIDEOPROCESSORSETOUTPUTHDRMETADATA_INVALIDSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTHDRMETADATA_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTHDRMETADATA_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTHDRMETADATA_INVALIDSIZE + D3D11_MESSAGE_ID_VIDEOPROCESSORGETOUTPUTHDRMETADATA_INVALIDSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_INVALIDSIZE + D3D11_MESSAGE_ID_VIDEOPROCESSORSETSTREAMHDRMETADATA_INVALIDSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_NULLPARAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_NULLPARAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_INVALIDSIZE + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMHDRMETADATA_INVALIDSIZE + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFRAMEFORMAT_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMOUTPUTRATE_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSOURCERECT_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMDESTRECT_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMALPHA_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPALETTE_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMPIXELASPECTRATIO_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMLUMAKEY_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMSTEREOFORMAT_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMAUTOPROCESSINGMODE_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMFILTER_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMROTATION_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE1_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMCOLORSPACE1_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_INVALIDSTREAM + D3D11_MESSAGE_ID_VIDEOPROCESSORGETSTREAMMIRROR_INVALIDSTREAM + + + + No documentation. + + + D3D11_MESSAGE_ID_CREATE_FENCE + D3D11_MESSAGE_ID_CREATE_FENCE + + + + No documentation. + + + D3D11_MESSAGE_ID_LIVE_FENCE + D3D11_MESSAGE_ID_LIVE_FENCE + + + + No documentation. + + + D3D11_MESSAGE_ID_DESTROY_FENCE + D3D11_MESSAGE_ID_DESTROY_FENCE + + + + No documentation. + + + D3D11_MESSAGE_ID_D3D11_3_MESSAGES_END + D3D11_MESSAGE_ID_D3D11_3_MESSAGES_END + + + +

    Debug message severity levels for an information queue.

    +
    + +

    Use these values to allow or deny message categories to pass through the storage and retrieval filters for an information queue (see ). This API is used by .

    +
    + + ff476187 + D3D11_MESSAGE_SEVERITY + D3D11_MESSAGE_SEVERITY +
    + + +

    Defines some type of corruption which has occurred.

    +
    + + ff476187 + D3D11_MESSAGE_SEVERITY_CORRUPTION + D3D11_MESSAGE_SEVERITY_CORRUPTION +
    + + +

    Defines an error message.

    +
    + + ff476187 + D3D11_MESSAGE_SEVERITY_ERROR + D3D11_MESSAGE_SEVERITY_ERROR +
    + + +

    Defines a warning message.

    +
    + + ff476187 + D3D11_MESSAGE_SEVERITY_WARNING + D3D11_MESSAGE_SEVERITY_WARNING +
    + + +

    Defines an information message.

    +
    + + ff476187 + D3D11_MESSAGE_SEVERITY_INFO + D3D11_MESSAGE_SEVERITY_INFO +
    + + +

    Defines a message other than corruption, error, warning, or information.

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476187 + D3D11_MESSAGE_SEVERITY_MESSAGE + D3D11_MESSAGE_SEVERITY_MESSAGE +
    + + +

    Flags that describe miscellaneous query behavior.

    +
    + +

    This flag is part of a query description (see ).

    +
    + + ff476196 + D3D11_QUERY_MISC_FLAG + D3D11_QUERY_MISC_FLAG +
    + + +

    Tell the hardware that if it is not yet sure if something is hidden or not to draw it anyway. This is only used with an occlusion predicate. Predication data cannot be returned to your application via when using this flag.

    +
    + + ff476196 + D3D11_QUERY_MISC_PREDICATEHINT + D3D11_QUERY_MISC_PREDICATEHINT +
    + + + None. + + + None + None + + + +

    Query types.

    +
    + +

    Create a query with .

    +
    + + ff476191 + D3D11_QUERY + D3D11_QUERY +
    + + +

    Determines whether or not the GPU is finished processing commands. When the GPU is finished processing commands will return , and pData will point to a with a value of TRUE. When using this type of query, is disabled.

    +
    + + ff476191 + D3D11_QUERY_EVENT + D3D11_QUERY_EVENT +
    + + +

    Get the number of samples that passed the depth and stencil tests in between and . returns a UINT64. If a depth or stencil test is disabled, then each of those tests will be counted as a pass.

    +
    + + ff476191 + D3D11_QUERY_OCCLUSION + D3D11_QUERY_OCCLUSION +
    + + +

    Get a timestamp value where returns a UINT64. This kind of query is only useful if two timestamp queries are done in the middle of a query. The difference of two timestamps can be used to determine how many ticks have elapsed, and the query will determine if that difference is a reliable value and also has a value that shows how to convert the number of ticks into seconds. See . When using this type of query, is disabled.

    +
    + + ff476191 + D3D11_QUERY_TIMESTAMP + D3D11_QUERY_TIMESTAMP +
    + + +

    Determines whether or not a is returning reliable values, and also gives the frequency of the processor enabling you to convert the number of elapsed ticks into seconds. will return a . This type of query should only be invoked once per frame or less.

    +
    + + ff476191 + D3D11_QUERY_TIMESTAMP_DISJOINT + D3D11_QUERY_TIMESTAMP_DISJOINT +
    + + +

    Get pipeline statistics, such as the number of pixel shader invocations in between and . will return a .

    +
    + + ff476191 + D3D11_QUERY_PIPELINE_STATISTICS + D3D11_QUERY_PIPELINE_STATISTICS +
    + + +

    Similar to , except returns a indicating whether or not any samples passed the depth and stencil tests - TRUE meaning at least one passed, meaning none passed.

    +
    + + ff476191 + D3D11_QUERY_OCCLUSION_PREDICATE + D3D11_QUERY_OCCLUSION_PREDICATE +
    + + +

    Get streaming output statistics, such as the number of primitives streamed out in between and . will return a structure.

    +
    + + ff476191 + D3D11_QUERY_SO_STATISTICS + D3D11_QUERY_SO_STATISTICS +
    + + +

    Determines whether or not any of the streaming output buffers overflowed in between and . returns a - TRUE meaning there was an overflow, meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an SO_STATISTICS query so that when an overflow occurs the SO_STATISTIC query will let the application know how much memory was needed to prevent an overflow.

    +
    + + ff476191 + D3D11_QUERY_SO_OVERFLOW_PREDICATE + D3D11_QUERY_SO_OVERFLOW_PREDICATE +
    + + +

    Get streaming output statistics for stream 0, such as the number of primitives streamed out in between and . will return a structure.

    +
    + + ff476191 + D3D11_QUERY_SO_STATISTICS_STREAM0 + D3D11_QUERY_SO_STATISTICS_STREAM0 +
    + + +

    Determines whether or not the stream 0 output buffers overflowed in between and . returns a - TRUE meaning there was an overflow, meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an SO_STATISTICS query so that when an overflow occurs the SO_STATISTIC query will let the application know how much memory was needed to prevent an overflow.

    +
    + + ff476191 + D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0 + D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0 +
    + + +

    Get streaming output statistics for stream 1, such as the number of primitives streamed out in between and . will return a structure.

    +
    + + ff476191 + D3D11_QUERY_SO_STATISTICS_STREAM1 + D3D11_QUERY_SO_STATISTICS_STREAM1 +
    + + +

    Determines whether or not the stream 1 output buffers overflowed in between and . returns a - TRUE meaning there was an overflow, meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an SO_STATISTICS query so that when an overflow occurs the SO_STATISTIC query will let the application know how much memory was needed to prevent an overflow.

    +
    + + ff476191 + D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1 + D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1 +
    + + +

    Get streaming output statistics for stream 2, such as the number of primitives streamed out in between and . will return a structure.

    +
    + + ff476191 + D3D11_QUERY_SO_STATISTICS_STREAM2 + D3D11_QUERY_SO_STATISTICS_STREAM2 +
    + + +

    Determines whether or not the stream 2 output buffers overflowed in between and . returns a - TRUE meaning there was an overflow, meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an SO_STATISTICS query so that when an overflow occurs the SO_STATISTIC query will let the application know how much memory was needed to prevent an overflow.

    +
    + + ff476191 + D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2 + D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2 +
    + + +

    Get streaming output statistics for stream 3, such as the number of primitives streamed out in between and . will return a structure.

    +
    + + ff476191 + D3D11_QUERY_SO_STATISTICS_STREAM3 + D3D11_QUERY_SO_STATISTICS_STREAM3 +
    + + +

    Determines whether or not the stream 3 output buffers overflowed in between and . returns a - TRUE meaning there was an overflow, meaning there was not an overflow. If streaming output writes to multiple buffers, and one of the buffers overflows, then it will stop writing to all the output buffers. When an overflow is detected by Direct3D it is prevented from happening - no memory is corrupted. This predication may be used in conjunction with an SO_STATISTICS query so that when an overflow occurs the SO_STATISTIC query will let the application know how much memory was needed to prevent an overflow.

    +
    + + ff476191 + D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3 + D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3 +
    + + +

    These flags identify the type of resource that will be viewed as a render target.

    +
    + +

    This enumeration is used in to create a render-target view.

    +
    + + ff476206 + D3D11_RTV_DIMENSION + D3D11_RTV_DIMENSION +
    + + +

    Do not use this value, as it will cause to fail.

    +
    + + ff476206 + D3D11_RTV_DIMENSION_UNKNOWN + D3D11_RTV_DIMENSION_UNKNOWN +
    + + +

    The resource will be accessed as a buffer.

    +
    + + ff476206 + D3D11_RTV_DIMENSION_BUFFER + D3D11_RTV_DIMENSION_BUFFER +
    + + +

    The resource will be accessed as a 1D texture.

    +
    + + ff476206 + D3D11_RTV_DIMENSION_TEXTURE1D + D3D11_RTV_DIMENSION_TEXTURE1D +
    + + +

    The resource will be accessed as an array of 1D textures.

    +
    + + ff476206 + D3D11_RTV_DIMENSION_TEXTURE1DARRAY + D3D11_RTV_DIMENSION_TEXTURE1DARRAY +
    + + +

    The resource will be accessed as a 2D texture.

    +
    + + ff476206 + D3D11_RTV_DIMENSION_TEXTURE2D + D3D11_RTV_DIMENSION_TEXTURE2D +
    + + +

    The resource will be accessed as an array of 2D textures.

    +
    + + ff476206 + D3D11_RTV_DIMENSION_TEXTURE2DARRAY + D3D11_RTV_DIMENSION_TEXTURE2DARRAY +
    + + +

    The resource will be accessed as a 2D texture with multisampling.

    +
    + + ff476206 + D3D11_RTV_DIMENSION_TEXTURE2DMS + D3D11_RTV_DIMENSION_TEXTURE2DMS +
    + + +

    The resource will be accessed as an array of 2D textures with multisampling.

    +
    + + ff476206 + D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY + D3D11_RTV_DIMENSION_TEXTURE2DMSARRAY +
    + + +

    The resource will be accessed as a 3D texture.

    +
    + + ff476206 + D3D11_RTV_DIMENSION_TEXTURE3D + D3D11_RTV_DIMENSION_TEXTURE3D +
    + + +

    Options for the amount of information to report about a device object's lifetime.

    +
    + +

    This enumeration is used by .

    Several inline functions exist to combine the options using operators, see the D3D11SDKLayers.h header file for details.

    +
    + + ff476205 + D3D11_RLDO_FLAGS + D3D11_RLDO_FLAGS +
    + + +

    Specifies to obtain a summary about a device object's lifetime.

    +
    + + ff476205 + D3D11_RLDO_SUMMARY + D3D11_RLDO_SUMMARY +
    + + +

    Specifies to obtain detailed information about a device object's lifetime.

    +
    + + ff476205 + D3D11_RLDO_DETAIL + D3D11_RLDO_DETAIL +
    + + +

    Do not use this enumeration constant. It is for internal use only.

    +
    + + ff476205 + D3D11_RLDO_IGNORE_INTERNAL + D3D11_RLDO_IGNORE_INTERNAL +
    + + + None. + + + None + None + + + +

    Identifies the type of resource being used.

    +
    + +

    This enumeration is used in .

    +
    + + ff476202 + D3D11_RESOURCE_DIMENSION + D3D11_RESOURCE_DIMENSION +
    + + +

    Resource is of unknown type.

    +
    + + ff476202 + D3D11_RESOURCE_DIMENSION_UNKNOWN + D3D11_RESOURCE_DIMENSION_UNKNOWN +
    + + +

    Resource is a buffer.

    +
    + + ff476202 + D3D11_RESOURCE_DIMENSION_BUFFER + D3D11_RESOURCE_DIMENSION_BUFFER +
    + + +

    Resource is a 1D texture.

    +
    + + ff476202 + D3D11_RESOURCE_DIMENSION_TEXTURE1D + D3D11_RESOURCE_DIMENSION_TEXTURE1D +
    + + +

    Resource is a 2D texture.

    +
    + + ff476202 + D3D11_RESOURCE_DIMENSION_TEXTURE2D + D3D11_RESOURCE_DIMENSION_TEXTURE2D +
    + + +

    Resource is a 3D texture.

    +
    + + ff476202 + D3D11_RESOURCE_DIMENSION_TEXTURE3D + D3D11_RESOURCE_DIMENSION_TEXTURE3D +
    + + +

    Identifies options for resources.

    +
    + +

    This enumeration is used in , , , .

    These flags can be combined by bitwise OR.

    The cannot be used when creating resources with D3D11_CPU_ACCESS flags.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_FLAG + D3D11_RESOURCE_MISC_FLAG +
    + + +

    Enables MIP map generation by using on a texture resource. The resource must be created with the bind flags that specify that the resource is a render target and a shader resource.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_GENERATE_MIPS + D3D11_RESOURCE_MISC_GENERATE_MIPS +
    + + +

    Enables resource data sharing between two or more Direct3D devices. The only resources that can be shared are 2D non-mipmapped textures.

    and are mutually exclusive.

    WARP and REF devices do not support shared resources. If you try to create a resource with this flag on either a WARP or REF device, the create method will return an E_OUTOFMEMORY error code.

    Note?? Starting with Windows?8, WARP devices fully support shared resources. ? Note?? Starting with Windows?8, we recommend that you enable resource data sharing between two or more Direct3D devices by using a combination of the and flags instead. ?
    +
    + + ff476203 + D3D11_RESOURCE_MISC_SHARED + D3D11_RESOURCE_MISC_SHARED +
    + + +

    Sets a resource to be a cube texture created from a Texture2DArray that contains 6 textures.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_TEXTURECUBE + D3D11_RESOURCE_MISC_TEXTURECUBE +
    + + +

    Enables instancing of GPU-generated content.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS + D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS +
    + + +

    Enables a resource as a byte address buffer.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS + D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS +
    + + +

    Enables a resource as a structured buffer.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_BUFFER_STRUCTURED + D3D11_RESOURCE_MISC_BUFFER_STRUCTURED +
    + + +

    Enables a resource with MIP map clamping for use with .

    +
    + + ff476203 + D3D11_RESOURCE_MISC_RESOURCE_CLAMP + D3D11_RESOURCE_MISC_RESOURCE_CLAMP +
    + + +

    Enables the resource to be synchronized by using the and APIs. The following Direct3D?11 resource creation APIs, that take parameters, have been extended to support the new flag.

    If you call any of these methods with the flag set, the interface returned will support the interface. You can retrieve a reference to the interface from the resource by using IUnknown::QueryInterface. The interface implements the and APIs to synchronize access to the surface. The device that creates the surface, and any other device that opens the surface by using OpenSharedResource, must call before they issue any rendering commands to the surface. When those devices finish rendering, they must call .

    and are mutually exclusive.

    WARP and REF devices do not support shared resources. If you try to create a resource with this flag on either a WARP or REF device, the create method will return an E_OUTOFMEMORY error code.

    Note?? Starting with Windows?8, WARP devices fully support shared resources. ?
    +
    + + ff476203 + D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX + D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX +
    + + +

    Enables a resource compatible with GDI. You must set the flag on surfaces that you use with GDI. Setting the flag allows GDI rendering on the surface via .

    Consider the following programming tips for using when you create a texture or use that texture in a swap chain:

    • and are mutually exclusive. Therefore, do not use them together.
    • and are mutually exclusive. Therefore, do not use them together.
    • You must bind the texture as a render target for the output-merger stage. For example, set the flag in the BindFlags member of the structure.
    • You must set the maximum number of MIP map levels to 1. For example, set the MipLevels member of the structure to 1.
    • You must specify that the texture requires read and write access by the GPU. For example, set the Usage member of the structure to .
    • You must set the texture format to one of the following types.

      For example, set the Format member of the structure to one of these types.
    • You cannot use with multisampling. Therefore, set the Count member of the structure to 1. Then, set the SampleDesc member of the structure to this structure.
    +
    + + ff476203 + D3D11_RESOURCE_MISC_GDI_COMPATIBLE + D3D11_RESOURCE_MISC_GDI_COMPATIBLE +
    + + +

    Set this flag to enable the use of NT HANDLE values when you create a shared resource. By enabling this flag, you deprecate the use of existing HANDLE values.

    When you use this flag, you must combine it with the flag by using a bitwise OR operation. The resulting value specifies a new shared resource type that directs the runtime to use NT HANDLE values for the shared resource. The runtime then must confirm that the shared resource works on all hardware at the specified feature level.

    Without this flag set, the runtime does not strictly validate shared resource parameters (that is, formats, flags, usage, and so on). When the runtime does not validate shared resource parameters, behavior of much of the Direct3D API might be undefined and might vary from driver to driver.

    Direct3D 11 and earlier:??This value is not supported until Direct3D 11.1.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_SHARED_NTHANDLE + D3D11_RESOURCE_MISC_SHARED_NTHANDLE +
    + + +

    Set this flag to indicate that the resource might contain protected content; therefore, the operating system should use the resource only when the driver and hardware support content protection. If the driver and hardware do not support content protection and you try to create a resource with this flag, the resource creation fails.

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_RESTRICTED_CONTENT + D3D11_RESOURCE_MISC_RESTRICTED_CONTENT +
    + + +

    Set this flag to indicate that the operating system restricts access to the shared surface. You can use this flag together with the flag and only when you create a shared surface. The process that creates the shared resource can always open the shared resource.

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE + D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE +
    + + +

    Set this flag to indicate that the driver restricts access to the shared surface. You can use this flag in conjunction with the flag and only when you create a shared surface. The process that creates the shared resource can always open the shared resource.

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER + D3D11_RESOURCE_MISC_RESTRICT_SHARED_RESOURCE_DRIVER +
    + + +

    Set this flag to indicate that the resource is guarded. Such a resource is returned by the (DirectComposition) and (Windows Runtime) APIs. For these APIs, you provide a region of interest (ROI) on a surface to update. This surface isn't compatible with multiple render targets (MRT).

    A guarded resource automatically restricts all writes to the region that is related to one of the preceding APIs. Additionally, the resource enforces access to the ROI with these restrictions:

    • Copy operations from the resource by using or are restricted to only copy from the ROI.
    • When a guarded resource is set as a render target, it must be the only target.

    Direct3D 11:??This value is not supported until Direct3D 11.1.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_GUARDED + D3D11_RESOURCE_MISC_GUARDED +
    + + +

    Set this flag to indicate that the resource is a tile pool.

    Direct3D 11:??This value is not supported until Direct3D 11.2.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_TILE_POOL + D3D11_RESOURCE_MISC_TILE_POOL +
    + + +

    Set this flag to indicate that the resource is a tiled resource.

    Direct3D 11:??This value is not supported until Direct3D 11.2.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_TILED + D3D11_RESOURCE_MISC_TILED +
    + + +

    Set this flag to indicate that the resource should be created such that it will be protected by the hardware. Resource creation will fail if hardware content protection is not supported.

    This flag has the following restrictions:

    • This flag cannot be used with the following values:
    • This flag cannot be used with the following values.
    • No CPU access flags can be specified.
    Note??

    Creating a texture using this flag does not automatically guarantee that hardware protection will be enabled for the underlying allocation. Some implementations require that the DRM components are first initialized prior to any guarantees of protection.

    ?

    Note?? This enumeration value is supported starting with Windows?10.

    +
    + + ff476203 + D3D11_RESOURCE_MISC_HW_PROTECTED + D3D11_RESOURCE_MISC_HW_PROTECTED +
    + + + None. + + + None + None + + + +

    Identifies expected resource use during rendering. The usage directly reflects whether a resource is accessible by the CPU and/or the graphics processing unit (GPU).

    +
    + +

    An application identifies the way a resource is intended to be used (its usage) in a resource description. There are several structures for creating resources including: , , , and .

    Differences between Direct3D 9 and Direct3D 10/11:

    In Direct3D 9, you specify the type of memory a resource should be created in at resource creation time (using D3DPOOL). It was an application's job to decide what memory pool would provide the best combination of functionality and performance.

    In Direct3D 10/11, an application no longer specifies what type of memory (the pool) to create a resource in. Instead, you specify the intended usage of the resource, and let the runtime (in concert with the driver and a memory manager) choose the type of memory that will achieve the best performance.

    ?

    +
    + + ff476259 + D3D11_USAGE + D3D11_USAGE +
    + + +

    A resource that requires read and write access by the GPU. This is likely to be the most common usage choice.

    +
    + + ff476259 + D3D11_USAGE_DEFAULT + D3D11_USAGE_DEFAULT +
    + + +

    A resource that can only be read by the GPU. It cannot be written by the GPU, and cannot be accessed at all by the CPU. This type of resource must be initialized when it is created, since it cannot be changed after creation.

    +
    + + ff476259 + D3D11_USAGE_IMMUTABLE + D3D11_USAGE_IMMUTABLE +
    + + +

    A resource that is accessible by both the GPU (read only) and the CPU (write only). A dynamic resource is a good choice for a resource that will be updated by the CPU at least once per frame. To update a dynamic resource, use a Map method.

    For info about how to use dynamic resources, see How to: Use dynamic resources.

    +
    + + ff476259 + D3D11_USAGE_DYNAMIC + D3D11_USAGE_DYNAMIC +
    + + +

    A resource that supports data transfer (copy) from the GPU to the CPU.

    +
    + + ff476259 + D3D11_USAGE_STAGING + D3D11_USAGE_STAGING +
    + + +

    Describes the level of support for shader caching in the current graphics driver.

    +
    + +

    This enum is used by the D3D_FEATURE_DATA_SHADER_CACHE structure.

    +
    + + mt492476 + D3D11_SHADER_CACHE_SUPPORT_FLAGS + D3D11_SHADER_CACHE_SUPPORT_FLAGS +
    + + +

    Indicates that the driver does not support shader caching.

    +
    + + mt492476 + D3D11_SHADER_CACHE_SUPPORT_NONE + D3D11_SHADER_CACHE_SUPPORT_NONE +
    + + +

    Indicates that the driver supports an OS-managed shader cache that stores compiled shaders in memory during the current run of the application.

    +
    + + mt492476 + D3D11_SHADER_CACHE_SUPPORT_AUTOMATIC_INPROC_CACHE + D3D11_SHADER_CACHE_SUPPORT_AUTOMATIC_INPROC_CACHE +
    + + +

    Indicates that the driver supports an OS-managed shader cache that stores compiled shaders on disk to accelerate future runs of the application.

    +
    + + mt492476 + D3D11_SHADER_CACHE_SUPPORT_AUTOMATIC_DISK_CACHE + D3D11_SHADER_CACHE_SUPPORT_AUTOMATIC_DISK_CACHE +
    + + + Note??This enumeration is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Values that specify minimum precision levels at shader stages.

    +
    + + hh404495 + D3D11_SHADER_MIN_PRECISION_SUPPORT + D3D11_SHADER_MIN_PRECISION_SUPPORT +
    + + +

    Minimum precision level is 10-bit.

    +
    + + hh404495 + D3D11_SHADER_MIN_PRECISION_10_BIT + D3D11_SHADER_MIN_PRECISION_10_BIT +
    + + +

    Minimum precision level is 16-bit.

    +
    + + hh404495 + D3D11_SHADER_MIN_PRECISION_16_BIT + D3D11_SHADER_MIN_PRECISION_16_BIT +
    + + +

    Identifies how to view a buffer resource.

    +
    + +

    This enumeration is used by

    +
    + + ff476091 + D3D11_BUFFEREX_SRV_FLAG + D3D11_BUFFEREX_SRV_FLAG +
    + + +

    View the buffer as raw. For more info about raw viewing of buffers, see Raw Views of Buffers.

    +
    + + ff476091 + D3D11_BUFFEREX_SRV_FLAG_RAW + D3D11_BUFFEREX_SRV_FLAG_RAW +
    + + + None. + + + None + None + + + +

    Options that specify how to perform shader debug tracking.

    +
    + +

    This enumeration is used by the following methods:

    Note?? This API requires the Windows Software Development Kit (SDK) for Windows?8.? +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION + D3D11_SHADER_TRACKING_OPTION +
    + + +

    No debug tracking is performed.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_IGNORE + D3D11_SHADER_TRACKING_OPTION_IGNORE +
    + + +

    Track the reading of uninitialized data.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_TRACK_UNINITIALIZED + D3D11_SHADER_TRACKING_OPTION_TRACK_UNINITIALIZED +
    + + +

    Track read-after-write hazards.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_TRACK_RAW + D3D11_SHADER_TRACKING_OPTION_TRACK_RAW +
    + + +

    Track write-after-read hazards.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_TRACK_WAR + D3D11_SHADER_TRACKING_OPTION_TRACK_WAR +
    + + +

    Track write-after-write hazards.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_TRACK_WAW + D3D11_SHADER_TRACKING_OPTION_TRACK_WAW +
    + + +

    Track that hazards are allowed in which data is written but the value does not change.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_ALLOW_SAME + D3D11_SHADER_TRACKING_OPTION_ALLOW_SAME +
    + + +

    Track that only one type of atomic operation is used on an address.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_TRACK_ATOMIC_CONSISTENCY + D3D11_SHADER_TRACKING_OPTION_TRACK_ATOMIC_CONSISTENCY +
    + + +

    Track read-after-write hazards across thread groups.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_TRACK_RAW_ACROSS_THREADGROUPS + D3D11_SHADER_TRACKING_OPTION_TRACK_RAW_ACROSS_THREADGROUPS +
    + + +

    Track write-after-read hazards across thread groups.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_TRACK_WAR_ACROSS_THREADGROUPS + D3D11_SHADER_TRACKING_OPTION_TRACK_WAR_ACROSS_THREADGROUPS +
    + + +

    Track write-after-write hazards across thread groups.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_TRACK_WAW_ACROSS_THREADGROUPS + D3D11_SHADER_TRACKING_OPTION_TRACK_WAW_ACROSS_THREADGROUPS +
    + + +

    Track that only one type of atomic operation is used on an address across thread groups.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_TRACK_ATOMIC_CONSISTENCY_ACROSS_THREADGROUPS + D3D11_SHADER_TRACKING_OPTION_TRACK_ATOMIC_CONSISTENCY_ACROSS_THREADGROUPS +
    + + +

    Track hazards that are specific to unordered access views (UAVs).

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_UAV_SPECIFIC_FLAGS + D3D11_SHADER_TRACKING_OPTION_UAV_SPECIFIC_FLAGS +
    + + +

    Track all hazards.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_ALL_HAZARDS + D3D11_SHADER_TRACKING_OPTION_ALL_HAZARDS +
    + + +

    Track all hazards and track that hazards are allowed in which data is written but the value does not change.

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_ALL_HAZARDS_ALLOWING_SAME + D3D11_SHADER_TRACKING_OPTION_ALL_HAZARDS_ALLOWING_SAME +
    + + +

    All of the preceding tracking options are set except .

    +
    + + hh404501 + D3D11_SHADER_TRACKING_OPTION_ALL_OPTIONS + D3D11_SHADER_TRACKING_OPTION_ALL_OPTIONS +
    + + +

    Indicates which resource types to track.

    +
    + +

    The or method tracks a specific type of resource.

    Note??This API requires the Windows Software Development Kit (SDK) for Windows?8.? +
    + + hh404503 + D3D11_SHADER_TRACKING_RESOURCE_TYPE + D3D11_SHADER_TRACKING_RESOURCE_TYPE +
    + + +

    No resource types are tracked.

    +
    + + hh404503 + D3D11_SHADER_TRACKING_RESOURCE_TYPE_NONE + D3D11_SHADER_TRACKING_RESOURCE_TYPE_NONE +
    + + +

    Track device memory that is created with unordered access view (UAV) bind flags.

    +
    + + hh404503 + D3D11_SHADER_TRACKING_RESOURCE_TYPE_UAV_DEVICEMEMORY + D3D11_SHADER_TRACKING_RESOURCE_TYPE_UAV_DEVICEMEMORY +
    + + +

    Track device memory that is created without UAV bind flags.

    +
    + + hh404503 + D3D11_SHADER_TRACKING_RESOURCE_TYPE_NON_UAV_DEVICEMEMORY + D3D11_SHADER_TRACKING_RESOURCE_TYPE_NON_UAV_DEVICEMEMORY +
    + + +

    Track all device memory.

    +
    + + hh404503 + D3D11_SHADER_TRACKING_RESOURCE_TYPE_ALL_DEVICEMEMORY + D3D11_SHADER_TRACKING_RESOURCE_TYPE_ALL_DEVICEMEMORY +
    + + +

    Track all shaders that use group shared memory.

    +
    + + hh404503 + D3D11_SHADER_TRACKING_RESOURCE_TYPE_GROUPSHARED_MEMORY + D3D11_SHADER_TRACKING_RESOURCE_TYPE_GROUPSHARED_MEMORY +
    + + +

    Track all device memory except device memory that is created without UAV bind flags.

    +
    + + hh404503 + D3D11_SHADER_TRACKING_RESOURCE_TYPE_ALL_SHARED_MEMORY + D3D11_SHADER_TRACKING_RESOURCE_TYPE_ALL_SHARED_MEMORY +
    + + +

    Track all device memory except device memory that is created with UAV bind flags.

    +
    + + hh404503 + D3D11_SHADER_TRACKING_RESOURCE_TYPE_GROUPSHARED_NON_UAV + D3D11_SHADER_TRACKING_RESOURCE_TYPE_GROUPSHARED_NON_UAV +
    + + +

    Track all memory on the device.

    +
    + + hh404503 + D3D11_SHADER_TRACKING_RESOURCE_TYPE_ALL + D3D11_SHADER_TRACKING_RESOURCE_TYPE_ALL +
    + + +

    Specifies a multi-sample pattern type.

    +
    + +

    An app calls to get the number of quality levels available during multisampling. A 0 quality level means the hardware does not support multisampling for the particular format. If the number of quality levels is greater than 0 and the hardware supports the fixed sample patterns for the sample count, the app can request the fixed patterns by specifying quality level as either or . The app can call to check for support of the standard fixed patterns. If the hardware only supports the fixed patterns but no additional vendor-specific patterns, the runtime can report the number of quality levels as 1, and the hardware can pretend 0 quality level behaves the same as quality level equal to .

    The runtime defines the following standard sample patterns for 1(trivial), 2, 4, 8, and 16 sample counts. Hardware must support 1, 4, and 8 sample counts. Hardware vendors can expose more sample counts beyond these. However, if vendors support 2, 4(required), 8(required), or 16, they must also support the corresponding standard pattern or center pattern for each of those sample counts.

    + + + ff476218 + D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS + D3D11_STANDARD_MULTISAMPLE_QUALITY_LEVELS + + +

    +

    Pre-defined multi-sample patterns required for Direct3D?11 and Direct3D?10.1 hardware.

    +
    + + ff476218 + D3D11_STANDARD_MULTISAMPLE_PATTERN + D3D11_STANDARD_MULTISAMPLE_PATTERN +
    + + +

    Pattern where all of the samples are located at the pixel center.

    +
    + + ff476218 + D3D11_CENTER_MULTISAMPLE_PATTERN + D3D11_CENTER_MULTISAMPLE_PATTERN +
    + + +

    The stencil operations that can be performed during depth-stencil testing.

    +
    + + ff476219 + D3D11_STENCIL_OP + D3D11_STENCIL_OP +
    + + +

    Keep the existing stencil data.

    +
    + + ff476219 + D3D11_STENCIL_OP_KEEP + D3D11_STENCIL_OP_KEEP +
    + + +

    Set the stencil data to 0.

    +
    + + ff476219 + D3D11_STENCIL_OP_ZERO + D3D11_STENCIL_OP_ZERO +
    + + +

    Set the stencil data to the reference value set by calling .

    +
    + + ff476219 + D3D11_STENCIL_OP_REPLACE + D3D11_STENCIL_OP_REPLACE +
    + + +

    Increment the stencil value by 1, and clamp the result.

    +
    + + ff476219 + D3D11_STENCIL_OP_INCR_SAT + D3D11_STENCIL_OP_INCR_SAT +
    + + +

    Decrement the stencil value by 1, and clamp the result.

    +
    + + ff476219 + D3D11_STENCIL_OP_DECR_SAT + D3D11_STENCIL_OP_DECR_SAT +
    + + +

    Invert the stencil data.

    +
    + + ff476219 + D3D11_STENCIL_OP_INVERT + D3D11_STENCIL_OP_INVERT +
    + + +

    Increment the stencil value by 1, and wrap the result if necessary.

    +
    + + ff476219 + D3D11_STENCIL_OP_INCR + D3D11_STENCIL_OP_INCR +
    + + +

    Decrement the stencil value by 1, and wrap the result if necessary.

    +
    + + ff476219 + D3D11_STENCIL_OP_DECR + D3D11_STENCIL_OP_DECR +
    + + +

    Identify a technique for resolving texture coordinates that are outside of the boundaries of a texture.

    +
    + + ff476256 + D3D11_TEXTURE_ADDRESS_MODE + D3D11_TEXTURE_ADDRESS_MODE +
    + + +

    Tile the texture at every (u,v) integer junction. For example, for u values between 0 and 3, the texture is repeated three times.

    +
    + + ff476256 + D3D11_TEXTURE_ADDRESS_WRAP + D3D11_TEXTURE_ADDRESS_WRAP +
    + + +

    Flip the texture at every (u,v) integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on.

    +
    + + ff476256 + D3D11_TEXTURE_ADDRESS_MIRROR + D3D11_TEXTURE_ADDRESS_MIRROR +
    + + +

    Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively.

    +
    + + ff476256 + D3D11_TEXTURE_ADDRESS_CLAMP + D3D11_TEXTURE_ADDRESS_CLAMP +
    + + +

    Texture coordinates outside the range [0.0, 1.0] are set to the border color specified in or HLSL code.

    +
    + + ff476256 + D3D11_TEXTURE_ADDRESS_BORDER + D3D11_TEXTURE_ADDRESS_BORDER +
    + + +

    Similar to and . Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value.

    +
    + + ff476256 + D3D11_TEXTURE_ADDRESS_MIRROR_ONCE + D3D11_TEXTURE_ADDRESS_MIRROR_ONCE +
    + + +

    The different faces of a cube texture.

    +
    + + ff476255 + D3D11_TEXTURECUBE_FACE + D3D11_TEXTURECUBE_FACE +
    + + +

    Positive X face.

    +
    + + ff476255 + D3D11_TEXTURECUBE_FACE_POSITIVE_X + D3D11_TEXTURECUBE_FACE_POSITIVE_X +
    + + +

    Negative X face.

    +
    + + ff476255 + D3D11_TEXTURECUBE_FACE_NEGATIVE_X + D3D11_TEXTURECUBE_FACE_NEGATIVE_X +
    + + +

    Positive Y face.

    +
    + + ff476255 + D3D11_TEXTURECUBE_FACE_POSITIVE_Y + D3D11_TEXTURECUBE_FACE_POSITIVE_Y +
    + + +

    Negative Y face.

    +
    + + ff476255 + D3D11_TEXTURECUBE_FACE_NEGATIVE_Y + D3D11_TEXTURECUBE_FACE_NEGATIVE_Y +
    + + +

    Positive Z face.

    +
    + + ff476255 + D3D11_TEXTURECUBE_FACE_POSITIVE_Z + D3D11_TEXTURECUBE_FACE_POSITIVE_Z +
    + + +

    Negative Z face.

    +
    + + ff476255 + D3D11_TEXTURECUBE_FACE_NEGATIVE_Z + D3D11_TEXTURECUBE_FACE_NEGATIVE_Z +
    + + +

    Specifies texture layout options.

    +
    + +

    This enumeration controls the swizzle pattern of default textures and enable map support on default textures. Callers must query to ensure that each option is supported.

    The standard swizzle formats applies within each page-sized chunk, and pages are laid out in linear order with respect to one another. A 16-bit interleave pattern defines the conversion from pre-swizzled intra-page location to the post-swizzled location.

    To demonstrate, consider the 32bpp swizzle format above. This is represented by the following interleave masks, where bits on the left are most-significant.

    UINT xBytesMask = 1010 1010 1000 1111 + UINT yMask = 0101 0101 0111 0000 +

    To compute the swizzled address, the following code could be used (where the _pdep_u32 instruction is supported):

    UINT swizzledOffset = resourceBaseOffset + _pdep_u32(xOffset, xBytesMask) + _pdep_u32(yOffset, yBytesMask); + +
    + + dn899168 + D3D11_TEXTURE_LAYOUT + D3D11_TEXTURE_LAYOUT +
    + + +

    The texture layout is undefined, and is selected by the driver.

    +
    + + dn899168 + D3D11_TEXTURE_LAYOUT_UNDEFINED + D3D11_TEXTURE_LAYOUT_UNDEFINED +
    + + +

    Data for the texture is stored in row major (sometimes called pitch-linear) order.

    +
    + + dn899168 + D3D11_TEXTURE_LAYOUT_ROW_MAJOR + D3D11_TEXTURE_LAYOUT_ROW_MAJOR +
    + + +

    A default texture uses the standardized swizzle pattern.

    +
    + + dn899168 + D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE + D3D11_TEXTURE_LAYOUT_64K_STANDARD_SWIZZLE +
    + + +

    Identifies how to copy a tile.

    +
    + + dn280439 + D3D11_TILE_COPY_FLAG + D3D11_TILE_COPY_FLAG +
    + + +

    Indicates that the GPU isn't currently referencing any of the portions of destination memory being written. +

    +
    + + dn280439 + D3D11_TILE_COPY_NO_OVERWRITE + D3D11_TILE_COPY_NO_OVERWRITE +
    + + +

    Indicates that the operation involves copying a linear buffer to a swizzled tiled resource. This means to copy tile data from the + specified buffer location, reading tiles sequentially, + to the specified tile region (in x,y,z order if the region is a box), swizzling to optimal hardware memory layout as needed. + In this call, you specify the source data with the pBuffer parameter and the destination with the pTiledResource parameter. +

    +
    + + dn280439 + D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE + D3D11_TILE_COPY_LINEAR_BUFFER_TO_SWIZZLED_TILED_RESOURCE +
    + + +

    Indicates that the operation involves copying a swizzled tiled resource to a linear buffer. This means to copy tile data from the tile region, reading tiles sequentially (in x,y,z order if the region is a box), + to the specified buffer location, deswizzling to linear memory layout as needed. + In this call, you specify the source data with the pTiledResource parameter and the destination with the pBuffer parameter. +

    +
    + + dn280439 + D3D11_TILE_COPY_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER + D3D11_TILE_COPY_SWIZZLED_TILED_RESOURCE_TO_LINEAR_BUFFER +
    + + + None. + + + None + None + + + +

    Indicates the tier level at which tiled resources are supported.

    +
    + + dn280435 + D3D11_TILED_RESOURCES_TIER + D3D11_TILED_RESOURCES_TIER +
    + + +

    Tiled resources are not supported.

    +
    + + dn280435 + D3D11_TILED_RESOURCES_NOT_SUPPORTED + D3D11_TILED_RESOURCES_NOT_SUPPORTED +
    + + +

    Tier_1 tiled resources are supported.

    The device supports calls to CreateTexture2D and so on with the flag.

    The device supports calls to CreateBuffer with the flag.

    If you access tiles (read or write) that are null-mapped, you get undefined behavior, which includes device-removed. Apps can map all tiles to a single "default" tile to avoid this condition.

    +
    + + dn280435 + D3D11_TILED_RESOURCES_TIER_1 + D3D11_TILED_RESOURCES_TIER_1 +
    + + +

    Tier_2 tiled resources are supported.

    Superset of Tier_1 functionality, which includes this additional support:

    • On Tier_1, if the size of a texture mipmap level is an integer multiple of the standard tile shape for its format, it is guaranteed to be nonpacked. On Tier_2, this guarantee is expanded to include mipmap levels whose size is at least one standard tile shape. For more info, see .
    • Shader instructions are available for clamping level-of-detail (LOD) and for obtaining status about the shader operation. For info about one of these shader instructions, see Sample(S,float,int,float,uint).
    • Reading from null-mapped tiles treat that sampled value as zero. Writes to null-mapped tiles are discarded.
    +
    + + dn280435 + D3D11_TILED_RESOURCES_TIER_2 + D3D11_TILED_RESOURCES_TIER_2 +
    + + +

    Tier_3 tiled resources are supported.

    Superset of Tier_2 functionality, Tier 3 is essentially Tier 2 but with the additional support of Texture3D for Tiled Resources.

    +
    + + dn280435 + D3D11_TILED_RESOURCES_TIER_3 + D3D11_TILED_RESOURCES_TIER_3 +
    + + +

    Identifies how to perform a tile-mapping operation.

    +
    + + dn280440 + D3D11_TILE_MAPPING_FLAG + D3D11_TILE_MAPPING_FLAG +
    + + +

    Indicates that no overwriting of tiles occurs in the tile-mapping operation.

    +
    + + dn280440 + D3D11_TILE_MAPPING_NO_OVERWRITE + D3D11_TILE_MAPPING_NO_OVERWRITE +
    + + + None. + + + None + None + + + +

    Specifies a range of tile mappings to use with .

    +
    + + dn280441 + D3D11_TILE_RANGE_FLAG + D3D11_TILE_RANGE_FLAG +
    + + + No documentation. + + + dn280441 + D3D11_TILE_RANGE_NULL + D3D11_TILE_RANGE_NULL + + + + No documentation. + + + dn280441 + D3D11_TILE_RANGE_SKIP + D3D11_TILE_RANGE_SKIP + + + + No documentation. + + + dn280441 + D3D11_TILE_RANGE_REUSE_SINGLE_TILE + D3D11_TILE_RANGE_REUSE_SINGLE_TILE + + + + None. + + + None + None + + + +

    Identifies unordered-access view options for a buffer resource.

    +
    + + ff476096 + D3D11_BUFFER_UAV_FLAG + D3D11_BUFFER_UAV_FLAG +
    + + +

    Resource contains raw, unstructured data. Requires the UAV format to be . For more info about raw viewing of buffers, see Raw Views of Buffers.

    +
    + + ff476096 + D3D11_BUFFER_UAV_FLAG_RAW + D3D11_BUFFER_UAV_FLAG_RAW +
    + + +

    Allow data to be appended to the end of the buffer. flag must also be used for any view that will be used as a AppendStructuredBuffer or a ConsumeStructuredBuffer. Requires the UAV format to be .

    +
    + + ff476096 + D3D11_BUFFER_UAV_FLAG_APPEND + D3D11_BUFFER_UAV_FLAG_APPEND +
    + + +

    Adds a counter to the unordered-access-view buffer. can only be used on a UAV that is a RWStructuredBuffer and it enables the functionality needed for the IncrementCounter and DecrementCounter methods in HLSL. Requires the UAV format to be .

    +
    + + ff476096 + D3D11_BUFFER_UAV_FLAG_COUNTER + D3D11_BUFFER_UAV_FLAG_COUNTER +
    + + + None. + + + None + None + + + +

    Unordered-access view options.

    +
    + +

    This enumeration is used by a unordered access-view description (see ).

    +
    + + ff476257 + D3D11_UAV_DIMENSION + D3D11_UAV_DIMENSION +
    + + +

    The view type is unknown.

    +
    + + ff476257 + D3D11_UAV_DIMENSION_UNKNOWN + D3D11_UAV_DIMENSION_UNKNOWN +
    + + +

    View the resource as a buffer.

    +
    + + ff476257 + D3D11_UAV_DIMENSION_BUFFER + D3D11_UAV_DIMENSION_BUFFER +
    + + +

    View the resource as a 1D texture.

    +
    + + ff476257 + D3D11_UAV_DIMENSION_TEXTURE1D + D3D11_UAV_DIMENSION_TEXTURE1D +
    + + +

    View the resource as a 1D texture array.

    +
    + + ff476257 + D3D11_UAV_DIMENSION_TEXTURE1DARRAY + D3D11_UAV_DIMENSION_TEXTURE1DARRAY +
    + + +

    View the resource as a 2D texture.

    +
    + + ff476257 + D3D11_UAV_DIMENSION_TEXTURE2D + D3D11_UAV_DIMENSION_TEXTURE2D +
    + + +

    View the resource as a 2D texture array.

    +
    + + ff476257 + D3D11_UAV_DIMENSION_TEXTURE2DARRAY + D3D11_UAV_DIMENSION_TEXTURE2DARRAY +
    + + +

    View the resource as a 3D texture array.

    +
    + + ff476257 + D3D11_UAV_DIMENSION_TEXTURE3D + D3D11_UAV_DIMENSION_TEXTURE3D +
    + + +

    Specifies how to access a resource that is used in a video decoding output view.

    +
    + +

    This enumeration is used with the structure.

    +
    + + hh447636 + D3D11_VDOV_DIMENSION + D3D11_VDOV_DIMENSION +
    + + +

    Not a valid value.

    +
    + + hh447636 + D3D11_VDOV_DIMENSION_UNKNOWN + D3D11_VDOV_DIMENSION_UNKNOWN +
    + + +

    The resource will be accessed as a 2D texture. +

    +
    + + hh447636 + D3D11_VDOV_DIMENSION_TEXTURE2D + D3D11_VDOV_DIMENSION_TEXTURE2D +
    + + +

    Specifies a type of compressed buffer for decoding.

    +
    + + hh447642 + D3D11_VIDEO_DECODER_BUFFER_TYPE + D3D11_VIDEO_DECODER_BUFFER_TYPE +
    + + +

    Picture decoding parameter buffer. +

    +
    + + hh447642 + D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS + D3D11_VIDEO_DECODER_BUFFER_PICTURE_PARAMETERS +
    + + +

    Macroblock control command buffer. +

    +
    + + hh447642 + D3D11_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL + D3D11_VIDEO_DECODER_BUFFER_MACROBLOCK_CONTROL +
    + + +

    Residual difference block data buffer. +

    +
    + + hh447642 + D3D11_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE + D3D11_VIDEO_DECODER_BUFFER_RESIDUAL_DIFFERENCE +
    + + +

    Deblocking filter control command buffer. +

    +
    + + hh447642 + D3D11_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL + D3D11_VIDEO_DECODER_BUFFER_DEBLOCKING_CONTROL +
    + + +

    Inverse quantization matrix buffer. +

    +
    + + hh447642 + D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX + D3D11_VIDEO_DECODER_BUFFER_INVERSE_QUANTIZATION_MATRIX +
    + + +

    Slice-control buffer. +

    +
    + + hh447642 + D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL + D3D11_VIDEO_DECODER_BUFFER_SLICE_CONTROL +
    + + +

    Bitstream data buffer. +

    +
    + + hh447642 + D3D11_VIDEO_DECODER_BUFFER_BITSTREAM + D3D11_VIDEO_DECODER_BUFFER_BITSTREAM +
    + + +

    Motion vector buffer. +

    +
    + + hh447642 + D3D11_VIDEO_DECODER_BUFFER_MOTION_VECTOR + D3D11_VIDEO_DECODER_BUFFER_MOTION_VECTOR +
    + + +

    Film grain synthesis data buffer. +

    +
    + + hh447642 + D3D11_VIDEO_DECODER_BUFFER_FILM_GRAIN + D3D11_VIDEO_DECODER_BUFFER_FILM_GRAIN +
    + + +

    Specifies capabilities of the video decoder.

    +
    + + dn894120 + D3D11_VIDEO_DECODER_CAPS + D3D11_VIDEO_DECODER_CAPS +
    + + +

    Indicates that the graphics driver supports at least a subset of downsampling operations.

    +
    + + dn894120 + D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE + D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE +
    + + +

    Indicates that the decoding hardware cannot support the decode operation in real-time. Decoding is still supported for transcoding scenarios. With this capability, it is possible that decoding can occur in real-time if downsampling is enabled. +

    +
    + + dn894120 + D3D11_VIDEO_DECODER_CAPS_NON_REAL_TIME + D3D11_VIDEO_DECODER_CAPS_NON_REAL_TIME +
    + + +

    Indicates that the driver supports changing down sample parameters after the initial down sample parameters have been applied. For more information, see .

    +
    + + dn894120 + D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC + D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC +
    + + + No documentation. + + + dn894120 + D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_REQUIRED + D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_REQUIRED + + + + No documentation. + + + dn894120 + D3D11_VIDEO_DECODER_CAPS_UNSUPPORTED + D3D11_VIDEO_DECODER_CAPS_UNSUPPORTED + + + +

    Describes how a video stream is interlaced.

    +
    + + hh447647 + D3D11_VIDEO_FRAME_FORMAT + D3D11_VIDEO_FRAME_FORMAT +
    + + +

    Frames are progressive.

    +
    + + hh447647 + D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE + D3D11_VIDEO_FRAME_FORMAT_PROGRESSIVE +
    + + +

    Frames are interlaced. The top field of each frame is displayed first.

    +
    + + hh447647 + D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST + D3D11_VIDEO_FRAME_FORMAT_INTERLACED_TOP_FIELD_FIRST +
    + + +

    Frame are interlaced. The bottom field of each frame is displayed first.

    +
    + + hh447647 + D3D11_VIDEO_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST + D3D11_VIDEO_FRAME_FORMAT_INTERLACED_BOTTOM_FIELD_FIRST +
    + + +

    Specifies the alpha fill mode for video processing.

    +
    + + hh447648 + D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE + D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE +
    + + +

    Alpha values inside the target rectangle are set to opaque.

    +
    + + hh447648 + D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE + D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_OPAQUE +
    + + +

    Alpha values inside the target rectangle are set to the alpha value specified in the background color. To set the background color, call the method.

    +
    + + hh447648 + D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_BACKGROUND + D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_BACKGROUND +
    + + +

    Existing alpha values remain unchanged in the output surface.

    +
    + + hh447648 + D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_DESTINATION + D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_DESTINATION +
    + + +

    Alpha values are taken from an input stream, scaled, and copied to the corresponding destination rectangle for that stream. The input stream is specified in the StreamIndex parameter of the method.

    If the input stream does not have alpha data, the video processor sets the alpha values in the target rectangle to opaque. If the input stream is disabled or the source rectangle is empty, the alpha values in the target rectangle are not modified.

    +
    + + hh447648 + D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM + D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE_SOURCE_STREAM +
    + + +

    Specifies the automatic image processing capabilities of the video processor.

    +
    + + hh447649 + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS +
    + + +

    Denoise.

    +
    + + hh447649 + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_DENOISE + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_DENOISE +
    + + +

    Deringing.

    +
    + + hh447649 + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_DERINGING + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_DERINGING +
    + + +

    Edge enhancement.

    +
    + + hh447649 + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_EDGE_ENHANCEMENT + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_EDGE_ENHANCEMENT +
    + + +

    Color correction.

    +
    + + hh447649 + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_COLOR_CORRECTION + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_COLOR_CORRECTION +
    + + +

    Flesh-tone mapping.

    +
    + + hh447649 + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_FLESH_TONE_MAPPING + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_FLESH_TONE_MAPPING +
    + + +

    Image stabilization.

    +
    + + hh447649 + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_IMAGE_STABILIZATION + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_IMAGE_STABILIZATION +
    + + +

    Enhanced image resolution.

    +
    + + hh447649 + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_SUPER_RESOLUTION + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_SUPER_RESOLUTION +
    + + +

    Anamorphic scaling.

    +
    + + hh447649 + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_ANAMORPHIC_SCALING + D3D11_VIDEO_PROCESSOR_AUTO_STREAM_CAPS_ANAMORPHIC_SCALING +
    + + +

    Specifies flags that indicate the most efficient methods for performing video processing operations.

    +
    + + dn894122 + D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINTS + D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINTS +
    + + +

    Multi-plane overlay hardware can perform the rotation operation more efficiently than the method.

    +
    + + dn894122 + D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_ROTATION + D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_ROTATION +
    + + +

    Multi-plane overlay hardware can perform the scaling operation more efficiently than the method.

    +
    + + dn894122 + D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_RESIZE + D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_RESIZE +
    + + +

    Multi-plane overlay hardware can perform the colorspace conversion operation more efficiently than the method.

    +
    + + dn894122 + D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_COLOR_SPACE_CONVERSION + D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_COLOR_SPACE_CONVERSION +
    + + +

    The video processor output data should be at least triple buffered for optimal performance.

    +
    + + dn894122 + D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_TRIPLE_BUFFER_OUTPUT + D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_TRIPLE_BUFFER_OUTPUT +
    + + +

    Defines video processing capabilities for a Microsoft Direct3D?11 video processor.

    +
    + + hh447654 + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS +
    + + +

    The video processor can blend video content in linear color space. Most video content is gamma corrected, resulting in nonlinear values. This capability flag means that the video processor converts colors to linear space before blending, which produces better results.

    +
    + + hh447654 + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_LINEAR_SPACE + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_LINEAR_SPACE +
    + + +

    The video processor supports the xvYCC color space for YCbCr data.

    +
    + + hh447654 + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_xvYCC + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_xvYCC +
    + + +

    The video processor can perform range conversion when the input and output are both RGB but use different color ranges (0-255 or 16-235, for 8-bit RGB).

    +
    + + hh447654 + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_RGB_RANGE_CONVERSION + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_RGB_RANGE_CONVERSION +
    + + +

    The video processor can apply a matrix conversion to YCbCr values when the input and output are both YCbCr. For example, the driver can convert colors from BT.601 to BT.709.

    +
    + + hh447654 + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_YCbCr_MATRIX_CONVERSION + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_YCbCr_MATRIX_CONVERSION +
    + + +

    The video processor supports YUV nominal range .

    Supported in Windows?8.1 and later.

    +
    + + hh447654 + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_NOMINAL_RANGE + D3D11_VIDEO_PROCESSOR_DEVICE_CAPS_NOMINAL_RANGE +
    + + +

    Defines features that a Microsoft Direct3D?11 video processor can support.

    +
    + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS +
    + + +

    The video processor can set alpha values on the output pixels. For more information, see .

    +
    + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_FILL + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_FILL +
    + + +

    The video processor can downsample the video output. For more information, see .

    +
    + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_CONSTRICTION + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_CONSTRICTION +
    + + +

    The video processor can perform luma keying. For more information, see .

    +
    + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LUMA_KEY + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LUMA_KEY +
    + + +

    The video processor can apply alpha values from color palette entries.

    +
    + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_PALETTE +
    + + +

    The driver does not support full video processing capabilities. If this capability flag is set, the video processor has the following limitations:

    • A maximum of two streams are supported:
      • The first stream must be either NV12 or YUY2.
      • The second stream must be AYUV, AI44, or IA44.
    • Image adjustment (proc amp) controls are applied to the entire video processing blit, rather than per stream.
    • Support for per-stream planar alpha is not reliable. (Per-pixel alpha is supported, however.)
    +
    + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LEGACY + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_LEGACY +
    + + +

    The video processor can support 3D stereo video. For more information, see .

    All drivers setting this caps must support the following stereo formats: , , and .

    +
    + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_STEREO +
    + + +

    The driver can rotate the input data either 90, 180, or 270 degrees clockwise as part of the video processing operation.

    +
    + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ROTATION + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ROTATION +
    + + +

    The driver supports the VideoProcessorSetStreamAlpha call.

    +
    + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_STREAM + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALPHA_STREAM +
    + + +

    The driver supports the VideoProcessorSetStreamPixelAspectRatio call.

    +
    + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_PIXEL_ASPECT_RATIO + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_PIXEL_ASPECT_RATIO +
    + + + No documentation. + + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_MIRROR + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_MIRROR + + + + No documentation. + + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_SHADER_USAGE + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_SHADER_USAGE + + + + No documentation. + + + hh447655 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_METADATA_HDR10 + D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_METADATA_HDR10 + + + +

    Identifies a video processor filter.

    +
    + + hh447656 + D3D11_VIDEO_PROCESSOR_FILTER + D3D11_VIDEO_PROCESSOR_FILTER +
    + + +

    Brightness filter.

    +
    + + hh447656 + D3D11_VIDEO_PROCESSOR_FILTER_BRIGHTNESS + D3D11_VIDEO_PROCESSOR_FILTER_BRIGHTNESS +
    + + +

    Contrast filter.

    +
    + + hh447656 + D3D11_VIDEO_PROCESSOR_FILTER_CONTRAST + D3D11_VIDEO_PROCESSOR_FILTER_CONTRAST +
    + + +

    Hue filter.

    +
    + + hh447656 + D3D11_VIDEO_PROCESSOR_FILTER_HUE + D3D11_VIDEO_PROCESSOR_FILTER_HUE +
    + + +

    Saturation filter.

    +
    + + hh447656 + D3D11_VIDEO_PROCESSOR_FILTER_SATURATION + D3D11_VIDEO_PROCESSOR_FILTER_SATURATION +
    + + +

    Noise reduction filter.

    +
    + + hh447656 + D3D11_VIDEO_PROCESSOR_FILTER_NOISE_REDUCTION + D3D11_VIDEO_PROCESSOR_FILTER_NOISE_REDUCTION +
    + + +

    Edge enhancement filter.

    +
    + + hh447656 + D3D11_VIDEO_PROCESSOR_FILTER_EDGE_ENHANCEMENT + D3D11_VIDEO_PROCESSOR_FILTER_EDGE_ENHANCEMENT +
    + + +

    Anamorphic scaling filter.

    +
    + + hh447656 + D3D11_VIDEO_PROCESSOR_FILTER_ANAMORPHIC_SCALING + D3D11_VIDEO_PROCESSOR_FILTER_ANAMORPHIC_SCALING +
    + + +

    Stereo adjustment filter. When stereo 3D video is enabled, this filter adjusts the offset between the left and right views, allowing the user to reduce potential eye strain.

    The filter value indicates the amount by which the left and right views are adjusted. A positive value shifts the images away from each other: the left image toward the left, and the right image toward the right. A negative value shifts the images in the opposite directions, closer to each other.

    +
    + + hh447656 + D3D11_VIDEO_PROCESSOR_FILTER_STEREO_ADJUSTMENT + D3D11_VIDEO_PROCESSOR_FILTER_STEREO_ADJUSTMENT +
    + + +

    Defines image filter capabilities for a Microsoft Direct3D?11 video processor.

    +
    + +

    These capability flags indicate support for the image filters defined by the enumeration. To apply a particular filter, call the method.

    +
    + + hh447671 + D3D11_VIDEO_PROCESSOR_FILTER_CAPS + D3D11_VIDEO_PROCESSOR_FILTER_CAPS +
    + + +

    The video processor can adjust the brightness level.

    +
    + + hh447671 + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_BRIGHTNESS + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_BRIGHTNESS +
    + + +

    The video processor can adjust the contrast level.

    +
    + + hh447671 + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_CONTRAST + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_CONTRAST +
    + + +

    The video processor can adjust hue.

    +
    + + hh447671 + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_HUE + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_HUE +
    + + +

    The video processor can adjust the saturation level.

    +
    + + hh447671 + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_SATURATION + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_SATURATION +
    + + +

    The video processor can perform noise reduction.

    +
    + + hh447671 + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_NOISE_REDUCTION + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_NOISE_REDUCTION +
    + + +

    The video processor can perform edge enhancement.

    +
    + + hh447671 + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_EDGE_ENHANCEMENT + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_EDGE_ENHANCEMENT +
    + + +

    The video processor can perform anamorphic scaling. Anamorphic scaling can be used to stretch 4:3 content to a widescreen 16:9 aspect ratio.

    +
    + + hh447671 + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_ANAMORPHIC_SCALING + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_ANAMORPHIC_SCALING +
    + + +

    For stereo 3D video, the video processor can adjust the offset between the left and right views, allowing the user to reduce potential eye strain.

    +
    + + hh447671 + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_STEREO_ADJUSTMENT + D3D11_VIDEO_PROCESSOR_FILTER_CAPS_STEREO_ADJUSTMENT +
    + + +

    Defines capabilities related to input formats for a Microsoft Direct3D?11 video processor.

    +
    + +

    These flags define video processing capabilities that usually are not needed, and that video devices are therefore not required to support.

    The first three flags relate to RGB support for functions that are normally applied to YCbCr video: deinterlacing, color adjustment, and luma keying. A device that supports these functions for YCbCr is not required to support them for RGB input. Supporting RGB input for these functions is an additional capability, reflected by these constants. Note that the driver might convert the input to another color space, perform the indicated function, and then convert the result back to RGB.

    Similarly, a device that supports deinterlacing is not required to support deinterlacing of palettized formats. This capability is indicated by the flag.

    +
    + + hh447658 + D3D11_VIDEO_PROCESSOR_FORMAT_CAPS + D3D11_VIDEO_PROCESSOR_FORMAT_CAPS +
    + + +

    The video processor can deinterlace an input stream that contains interlaced RGB video.

    +
    + + hh447658 + D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_INTERLACED + D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_INTERLACED +
    + + +

    The video processor can perform color adjustment on RGB video.

    +
    + + hh447658 + D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_PROCAMP + D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_PROCAMP +
    + + +

    The video processor can perform luma keying on RGB video.

    +
    + + hh447658 + D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_LUMA_KEY + D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_RGB_LUMA_KEY +
    + + +

    The video processor can deinterlace input streams with palettized color formats.

    +
    + + hh447658 + D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_PALETTE_INTERLACED + D3D11_VIDEO_PROCESSOR_FORMAT_CAPS_PALETTE_INTERLACED +
    + + +

    Specifies how a video format can be used for video processing.

    +
    + + hh447659 + D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT + D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT +
    + + +

    The format can be used as the input to the video processor.

    +
    + + hh447659 + D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT_INPUT + D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT_INPUT +
    + + +

    The format can be used as the output from the video processor.

    +
    + + hh447659 + D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT_OUTPUT + D3D11_VIDEO_PROCESSOR_FORMAT_SUPPORT_OUTPUT +
    + + +

    Specifies the inverse telecine (IVTC) capabilities of a video processor.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS +
    + + +

    The video processor can reverse 3:2 pulldown.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32 +
    + + +

    The video processor can reverse 2:2 pulldown.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_22 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_22 +
    + + +

    The video processor can reverse 2:2:2:4 pulldown.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2224 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2224 +
    + + +

    The video processor can reverse 2:3:3:2 pulldown.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2332 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_2332 +
    + + +

    The video processor can reverse 3:2:3:2:2 pulldown.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32322 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_32322 +
    + + +

    The video processor can reverse 5:5 pulldown.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_55 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_55 +
    + + +

    The video processor can reverse 6:4 pulldown.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_64 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_64 +
    + + +

    The video processor can reverse 8:7 pulldown.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_87 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_87 +
    + + +

    The video processor can reverse 2:2:2:2:2:2:2:2:2:2:2:3 pulldown.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_222222222223 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_222222222223 +
    + + +

    The video processor can reverse other telecine modes not listed here.

    +
    + + hh447661 + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_OTHER + D3D11_VIDEO_PROCESSOR_ITELECINE_CAPS_OTHER +
    + + +

    Specifies values for the luminance range of YUV data.

    +
    + + dn280649 + D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE + D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE +
    + + +

    Driver defaults are used, which should be Studio luminance range [16-235],

    +
    + + dn280649 + D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_UNDEFINED + D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_UNDEFINED +
    + + +

    Studio luminance range [16-235]

    +
    + + dn280649 + D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_16_235 + D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_16_235 +
    + + +

    Full luminance range [0-255]

    +
    + + dn280649 + D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_0_255 + D3D11_VIDEO_PROCESSOR_NOMINAL_RANGE_0_255 +
    + + +

    Specifies the rate at which the video processor produces output frames from an input stream.

    +
    + + hh447662 + D3D11_VIDEO_PROCESSOR_OUTPUT_RATE + D3D11_VIDEO_PROCESSOR_OUTPUT_RATE +
    + + +

    The output is the normal frame rate.

    +
    + + hh447662 + D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL + D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_NORMAL +
    + + +

    The output is half the frame rate.

    +
    + + hh447662 + D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF + D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_HALF +
    + + +

    The output is a custom frame rate.

    +
    + + hh447662 + D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM + D3D11_VIDEO_PROCESSOR_OUTPUT_RATE_CUSTOM +
    + + +

    Specifies video processing capabilities that relate to deinterlacing, inverse telecine (IVTC), and frame-rate conversion.

    +
    + + hh447664 + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS +
    + + +

    The video processor can perform blend deinterlacing.

    In blend deinterlacing, the two fields from an interlaced frame are blended into a single progressive frame. A video processor uses blend deinterlacing when it deinterlaces at half rate, as when converting 60i to 30p. Blend deinterlacing does not require reference frames.

    +
    + + hh447664 + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BLEND + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BLEND +
    + + +

    The video processor can perform bob deinterlacing.

    In bob deinterlacing, missing field lines are interpolated from the lines above and below. Bob deinterlacing does not require reference frames.

    +
    + + hh447664 + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BOB + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_BOB +
    + + +

    The video processor can perform adaptive deinterlacing.

    Adaptive deinterlacing uses spatial or temporal interpolation, and switches between the two on a field-by-field basis, depending on the amount of motion. If the video processor does not receive enough reference frames to perform adaptive deinterlacing, it falls back to bob deinterlacing.

    +
    + + hh447664 + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_ADAPTIVE +
    + + +

    The video processor can perform motion-compensated deinterlacing.

    Motion-compensated deinterlacing uses motion vectors to recreate missing lines. If the video processor does not receive enough reference frames to perform motion-compensated deinterlacing, it falls back to bob deinterlacing.

    +
    + + hh447664 + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_DEINTERLACE_MOTION_COMPENSATION +
    + + +

    The video processor can perform inverse telecine (IVTC).

    If the video processor supports this capability, the ITelecineCaps member of the structure specifies which IVTC modes are supported.

    +
    + + hh447664 + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_INVERSE_TELECINE + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_INVERSE_TELECINE +
    + + +

    The video processor can convert the frame rate by interpolating frames.

    +
    + + hh447664 + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_FRAME_RATE_CONVERSION + D3D11_VIDEO_PROCESSOR_PROCESSOR_CAPS_FRAME_RATE_CONVERSION +
    + + +

    Specifies the video rotation states.

    +
    + + jj160515 + D3D11_VIDEO_PROCESSOR_ROTATION + D3D11_VIDEO_PROCESSOR_ROTATION +
    + + +

    The video is not rotated.

    +
    + + jj160515 + D3D11_VIDEO_PROCESSOR_ROTATION_IDENTITY + D3D11_VIDEO_PROCESSOR_ROTATION_IDENTITY +
    + + +

    The video is rotated 90 degrees clockwise.

    +
    + + jj160515 + D3D11_VIDEO_PROCESSOR_ROTATION_90 + D3D11_VIDEO_PROCESSOR_ROTATION_90 +
    + + +

    The video is rotated 180 degrees clockwise.

    +
    + + jj160515 + D3D11_VIDEO_PROCESSOR_ROTATION_180 + D3D11_VIDEO_PROCESSOR_ROTATION_180 +
    + + +

    The video is rotated 270 degrees clockwise.

    +
    + + jj160515 + D3D11_VIDEO_PROCESSOR_ROTATION_270 + D3D11_VIDEO_PROCESSOR_ROTATION_270 +
    + + +

    Defines stereo 3D capabilities for a Microsoft Direct3D?11 video processor.

    +
    + + hh447667 + D3D11_VIDEO_PROCESSOR_STEREO_CAPS + D3D11_VIDEO_PROCESSOR_STEREO_CAPS +
    + + +

    The video processor supports the format.

    +
    + + hh447667 + D3D11_VIDEO_PROCESSOR_STEREO_CAPS_MONO_OFFSET + D3D11_VIDEO_PROCESSOR_STEREO_CAPS_MONO_OFFSET +
    + + +

    The video processor supports the format.

    +
    + + hh447667 + D3D11_VIDEO_PROCESSOR_STEREO_CAPS_ROW_INTERLEAVED + D3D11_VIDEO_PROCESSOR_STEREO_CAPS_ROW_INTERLEAVED +
    + + +

    The video processor supports the format.

    +
    + + hh447667 + D3D11_VIDEO_PROCESSOR_STEREO_CAPS_COLUMN_INTERLEAVED + D3D11_VIDEO_PROCESSOR_STEREO_CAPS_COLUMN_INTERLEAVED +
    + + +

    The video processor supports the format.

    +
    + + hh447667 + D3D11_VIDEO_PROCESSOR_STEREO_CAPS_CHECKERBOARD + D3D11_VIDEO_PROCESSOR_STEREO_CAPS_CHECKERBOARD +
    + + +

    The video processor can flip one or both views. For more information, see .

    +
    + + hh447667 + D3D11_VIDEO_PROCESSOR_STEREO_CAPS_FLIP_MODE + D3D11_VIDEO_PROCESSOR_STEREO_CAPS_FLIP_MODE +
    + + +

    For stereo 3D video, specifies whether the data in frame 0 or frame 1 is flipped, either horizontally or vertically.

    +
    + + hh447668 + D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE + D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE +
    + + +

    Neither frame is flipped.

    +
    + + hh447668 + D3D11_VIDEO_PROCESSOR_STEREO_FLIP_NONE + D3D11_VIDEO_PROCESSOR_STEREO_FLIP_NONE +
    + + +

    The data in frame 0 is flipped.

    +
    + + hh447668 + D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME0 + D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME0 +
    + + +

    The data in frame 1 is flipped.

    +
    + + hh447668 + D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME1 + D3D11_VIDEO_PROCESSOR_STEREO_FLIP_FRAME1 +
    + + +

    Specifies the layout in memory of a stereo 3D video frame.

    +
    + +

    This enumeration designates the two stereo views as "frame 0" and "frame 1". The LeftViewFrame0 parameter of the VideoProcessorSetStreamStereoFormat method specifies which view is the left view, and which is the right view.

    For packed formats, if the source rectangle clips part of the surface, the driver interprets the rectangle in logical coordinates relative to the stereo view, rather than absolute pixel coordinates. The result is that frame 0 and frame 1 are clipped proportionately.

    To query whether the device supports stereo 3D video, call and check for the flag in the FeatureCaps member of the structure. If this capability flag is present, it means that the driver supports all of the stereo formats that are not listed as optional. To find out which optional formats are supported, call GetVideoProcessorCaps and check the StereoCaps member of the structure.

    +
    + + hh447669 + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT +
    + + +

    The sample does not contain stereo data. If the stereo format is not specified, this value is the default.

    +
    + + hh447669 + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO +
    + + +

    Frame 0 and frame 1 are packed side-by-side, as shown in the following diagram.

    All drivers that support stereo video must support this format.

    +
    + + hh447669 + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_HORIZONTAL +
    + + +

    Frame 0 and frame 1 are packed top-to-bottom, as shown in the following diagram.

    All drivers that support stereo video must support this format.

    +
    + + hh447669 + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_VERTICAL +
    + + +

    Frame 0 and frame 1 are placed in separate resources or in separate texture array elements within the same resource.

    All drivers that support stereo video must support this format.

    +
    + + hh447669 + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_SEPARATE +
    + + +

    The sample contains non-stereo data. However, the driver should create a left/right output of this sample using a specified offset. The offset is specified in the MonoOffset parameter of the method.

    This format is primarily intended for subtitles and other subpicture data, where the entire sample is presented on the same plane.

    Support for this stereo format is optional.

    +
    + + hh447669 + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_MONO_OFFSET +
    + + +

    Frame 0 and frame 1 are packed into interleaved rows, as shown in the following diagram.

    Support for this stereo format is optional.

    +
    + + hh447669 + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_ROW_INTERLEAVED +
    + + +

    Frame 0 and frame 1 are packed into interleaved columns, as shown in the following diagram.

    Support for this stereo format is optional.

    +
    + + hh447669 + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_COLUMN_INTERLEAVED +
    + + +

    Frame 0 and frame 1 are packed in a checkerboard format, as shown in the following diagram.

    Support for this stereo format is optional.

    +
    + + hh447669 + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD + D3D11_VIDEO_PROCESSOR_STEREO_FORMAT_CHECKERBOARD +
    + + +

    Specifies the intended use for a video processor.

    +
    + + hh447673 + D3D11_VIDEO_USAGE + D3D11_VIDEO_USAGE +
    + + +

    Normal video playback. The graphics driver should expose a set of capabilities that are appropriate for real-time video playback.

    +
    + + hh447673 + D3D11_VIDEO_USAGE_PLAYBACK_NORMAL + D3D11_VIDEO_USAGE_PLAYBACK_NORMAL +
    + + +

    Optimal speed. The graphics driver should expose a minimal set of capabilities that are optimized for performance.

    Use this setting if you want better performance and can accept some reduction in video quality. For example, you might use this setting in power-saving mode or to play video thumbnails.

    +
    + + hh447673 + D3D11_VIDEO_USAGE_OPTIMAL_SPEED + D3D11_VIDEO_USAGE_OPTIMAL_SPEED +
    + + +

    Optimal quality. The grahics driver should expose its maximum set of capabilities.

    Specify this setting to get the best video quality possible. It is appropriate for tasks such as video editing, when quality is more important than speed. It is not appropriate for real-time playback.

    +
    + + hh447673 + D3D11_VIDEO_USAGE_OPTIMAL_QUALITY + D3D11_VIDEO_USAGE_OPTIMAL_QUALITY +
    + + +

    Specifies how to access a resource that is used in a video processor input view.

    +
    + +

    This enumeration is used with the structure.

    +
    + + hh447674 + D3D11_VPIV_DIMENSION + D3D11_VPIV_DIMENSION +
    + + +

    Not a valid value.

    +
    + + hh447674 + D3D11_VPIV_DIMENSION_UNKNOWN + D3D11_VPIV_DIMENSION_UNKNOWN +
    + + +

    The resource will be accessed as a 2D texture.

    +
    + + hh447674 + D3D11_VPIV_DIMENSION_TEXTURE2D + D3D11_VPIV_DIMENSION_TEXTURE2D +
    + + +

    Specifies how to access a resource that is used in a video processor output view.

    +
    + +

    This enumeration is used with the structure.

    +
    + + hh447675 + D3D11_VPOV_DIMENSION + D3D11_VPOV_DIMENSION +
    + + +

    Not a valid value.

    +
    + + hh447675 + D3D11_VPOV_DIMENSION_UNKNOWN + D3D11_VPOV_DIMENSION_UNKNOWN +
    + + +

    The resource will be accessed as a 2D texture.

    +
    + + hh447675 + D3D11_VPOV_DIMENSION_TEXTURE2D + D3D11_VPOV_DIMENSION_TEXTURE2D +
    + + +

    The resource will be accessed as an array of 2D textures.

    +
    + + hh447675 + D3D11_VPOV_DIMENSION_TEXTURE2DARRAY + D3D11_VPOV_DIMENSION_TEXTURE2DARRAY +
    + + + Functions + + + + + Constant SdkVersion. + D3D11_SDK_VERSION + + + +

    Creates a device that represents the display adapter.

    +
    +

    A reference to the video adapter to use when creating a device. Pass null to use the default adapter, which is the first adapter that is enumerated by IDXGIFactory1::EnumAdapters.

    Note?? Do not mix the use of DXGI 1.0 () and DXGI 1.1 () in an application. Use or , but not both in an application. ?
    +

    The , which represents the driver type to create.

    +

    A handle to a DLL that implements a software rasterizer. If DriverType is , Software must not be null. Get the handle by calling LoadLibrary, LoadLibraryEx , or GetModuleHandle.

    +

    The runtime layers to enable (see ); values can be bitwise OR'd together.

    +

    A reference to an array of s, which determine the order of feature levels to attempt to create. If pFeatureLevels is set to null, this function uses the following array of feature levels:

    { , , , , , ,};
    Note?? If the Direct3D 11.1 runtime is present on the computer and pFeatureLevels is set to null, this function won't create a device. To create a device, you must explicitly provide a array that includes . If you provide a array that contains on a computer that doesn't have the Direct3D 11.1 runtime installed, this function immediately fails with E_INVALIDARG. ?
    +

    The number of elements in pFeatureLevels.

    +

    The SDK version; use .

    +

    Returns the address of a reference to an object that represents the device created. If this parameter is null, no will be returned.

    +

    If successful, returns the first from the pFeatureLevels array which succeeded. Supply null as an input if you don't need to determine which feature level is supported.

    +

    Returns the address of a reference to an object that represents the device context. If this parameter is null, no will be returned.

    +

    This method can return one of the Direct3D 11 Return Codes.

    This method returns E_INVALIDARG if you set the pAdapter parameter to a non-null value and the DriverType parameter to the value.

    This method returns if you specify in Flags and the incorrect version of the debug layer is installed on your computer. Install the latest Windows SDK to get the correct version.

    + +

    This entry-point is supported by the Direct3D 11 runtime, which is available on Windows 7, Windows Server 2008 R2, and as an update to Windows Vista (KB971644).

    To create a Direct3D 11.1 device (), which is available on Windows?8, Windows Server?2012, and Windows?7 and Windows Server?2008?R2 with the Platform Update for Windows 7 installed, you first create a with this function, and then call the QueryInterface method on the object to obtain the interface.

    To create a Direct3D 11.2 device (), which is available on Windows?8.1 and Windows Server?2012?R2, you first create a with this function, and then call the QueryInterface method on the object to obtain the interface.

    Set ppDevice and ppImmediateContext to null to determine which feature level is supported by looking at pFeatureLevel without creating a device.

    For an example, see How To: Create a Device and Immediate Context; to create a device and a swap chain at the same time, use D3D11CreateDeviceAndSwapChain.

    If you set the pAdapter parameter to a non-null value, you must also set the DriverType parameter to the value. If you set the pAdapter parameter to a non-null value and the DriverType parameter to the value, returns an of E_INVALIDARG.

    Differences between Direct3D 10 and Direct3D 11:

    In Direct3D 10, the presence of pAdapter dictated which adapter to use and the DriverType could mismatch what the adapter was.

    In Direct3D 11, if you are trying to create a hardware or a software device, set pAdapter != null which constrains the other inputs to be:

    • DriverType must be
    • Software must be null.

    On the other hand, if pAdapter == null, the DriverType cannot be set to ; it can be set to either:

    • If DriverType == , Software cannot be null.
    • If DriverType == , the adapter used will be the default adapter, which is the first adapter that is enumerated by IDXGIFactory1::EnumAdapters

    ?

    The function signature PFN_D3D11_CREATE_DEVICE is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking.

    Windows?Phone?8: This API is supported.

    Windows Phone 8.1: This API is supported.

    +
    + + ff476082 + HRESULT D3D11CreateDevice([In, Optional] IDXGIAdapter* pAdapter,[In] D3D_DRIVER_TYPE DriverType,[In] HINSTANCE Software,[In] D3D11_CREATE_DEVICE_FLAG Flags,[In, Buffer, Optional] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In] unsigned int SDKVersion,[Out, Fast] ID3D11Device** ppDevice,[Out, Optional] D3D_FEATURE_LEVEL* pFeatureLevel,[Out, Optional] ID3D11DeviceContext** ppImmediateContext) + D3D11CreateDevice +
    + + +

    Creates a device that uses Direct3D 11 functionality in Direct3D 12, specifying a pre-existing D3D12 device to use for D3D11 interop.

    +
    +

    Specifies a pre-existing D3D12 device to use for D3D11 interop. May not be null.

    +

    One or more bitwise OR'ed flags from . These are the same flags as those used by D3D11CreateDeviceAndSwapChain. Specifies which runtime layers to enable. Flags must be compatible with device flags, and its NodeMask must be a subset of the NodeMask provided to the present API.

    +

    An array of any of the following:

    The first feature level which is less than or equal to the D3D12 device's feature level will be used to perform D3D11 validation. Creation will fail if no acceptable feature levels are provided. Providing null will default to the D3D12 device's feature level.

    +

    The size of the feature levels array, in bytes.

    +

    An array of unique queues for D3D11On12 to use. Valid queue types: 3D command queue.

    +

    The size of the command queue array, in bytes.

    +

    Which node of the D3D12 device to use. Only 1 bit may be set.

    +

    Pointer to the returned . May be null.

    +

    A reference to the returned . May be null.

    +

    A reference to the returned feature level. May be null.

    +

    This method returns one of the Direct3D 12 Return Codes that are documented for . See Direct3D 12 Return Codes.

    This method returns if you specify in Flags and the incorrect version of the debug layer is installed on your computer. Install the latest Windows SDK to get the correct version.

    + +

    The function signature PFN_D3D11ON12_CREATE_DEVICE is provided as a typedef, so that you can use dynamic linking techniques (GetProcAddress) instead of statically linking.

    +
    + + dn933209 + HRESULT D3D11On12CreateDevice([In] IUnknown* pDevice,[In] D3D11_CREATE_DEVICE_FLAG Flags,[In, Buffer, Optional] const D3D_FEATURE_LEVEL* pFeatureLevels,[In] unsigned int FeatureLevels,[In, Buffer, Optional] const IUnknown** ppCommandQueues,[In] unsigned int NumQueues,[In] unsigned int NodeMask,[Out] ID3D11Device** ppDevice,[Out, Optional] ID3D11DeviceContext** ppImmediateContext,[Out, Optional] D3D_FEATURE_LEVEL* pChosenFeatureLevel) + D3D11On12CreateDevice +
    + + + Functions + + + + + + Functions + + + + + + Functions + + + + + Constant TooManyUniqueStateObjects. + D3D11_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS + + + Constant FileNotFound. + D3D11_ERROR_FILE_NOT_FOUND + + + Constant TooManyUniqueViewObjects. + D3D11_ERROR_TOO_MANY_UNIQUE_VIEW_OBJECTS + + + Constant DeferredContextMapWithoutInitialDiscard. + D3D11_ERROR_DEFERRED_CONTEXT_MAP_WITHOUT_INITIAL_DISCARD + + + +

    This interface encapsulates methods for retrieving data from the GPU asynchronously.

    +
    + +

    There are three types of asynchronous interfaces, all of which inherit this interface:

    • - Queries information from the GPU.
    • - Determines whether a piece of geometry should be processed or not depending on the results of a previous draw call.
    • - Measures GPU performance.
    +
    + + ff476347 + ID3D11Asynchronous + ID3D11Asynchronous +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the size of the data (in bytes) that is output when calling .

    +
    + + ff476348 + GetDataSize + GetDataSize + unsigned int ID3D11Asynchronous::GetDataSize() +
    + + +

    Get the size of the data (in bytes) that is output when calling .

    +
    +

    Size of the data (in bytes) that is output when calling GetData.

    + + ff476348 + unsigned int ID3D11Asynchronous::GetDataSize() + ID3D11Asynchronous::GetDataSize +
    + + +

    Provides a communication channel with the graphics driver or the Microsoft Direct3D runtime.

    +
    + +

    To get a reference to this interface, call .

    +
    + + hh447690 + ID3D11AuthenticatedChannel + ID3D11AuthenticatedChannel +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the size of the driver's certificate chain.

    +
    + + hh447688 + GetCertificateSize + GetCertificateSize + HRESULT ID3D11AuthenticatedChannel::GetCertificateSize([Out] unsigned int* pCertificateSize) +
    + + +

    Gets a handle to the authenticated channel.

    +
    + + hh447689 + GetChannelHandle + GetChannelHandle + void ID3D11AuthenticatedChannel::GetChannelHandle([Out] void** pChannelHandle) +
    + + +

    Gets the size of the driver's certificate chain.

    +
    +

    Receives the size of the certificate chain, in bytes.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447688 + HRESULT ID3D11AuthenticatedChannel::GetCertificateSize([Out] unsigned int* pCertificateSize) + ID3D11AuthenticatedChannel::GetCertificateSize +
    + + +

    Gets the driver's certificate chain.

    +
    +

    The size of the pCertificate array, in bytes. To get the size of the certificate chain, call .

    +

    A reference to a byte array that receives the driver's certificate chain. The caller must allocate the array.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447687 + HRESULT ID3D11AuthenticatedChannel::GetCertificate([In] unsigned int CertificateSize,[Out, Buffer] unsigned char* pCertificate) + ID3D11AuthenticatedChannel::GetCertificate +
    + + +

    Gets a handle to the authenticated channel.

    +
    +

    Receives a handle to the channel.

    + + hh447689 + void ID3D11AuthenticatedChannel::GetChannelHandle([Out] void** pChannelHandle) + ID3D11AuthenticatedChannel::GetChannelHandle +
    + + +

    The interface encapsulates a list of graphics commands for play back.

    +
    + +

    There is no explicit creation method, simply declare an interface, then call to record commands or to play back commands.

    +
    + + ff476361 + ID3D11CommandList + ID3D11CommandList +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the initialization flags associated with the deferred context that created the command list.

    +
    + +

    The GetContextFlags method gets the flags that were supplied to the ContextFlags parameter of ; however, the context flag is reserved for future use.

    +
    + + ff476362 + GetContextFlags + GetContextFlags + unsigned int ID3D11CommandList::GetContextFlags() +
    + + +

    Gets the initialization flags associated with the deferred context that created the command list.

    +
    +

    The context flag is reserved for future use and is always 0.

    + +

    The GetContextFlags method gets the flags that were supplied to the ContextFlags parameter of ; however, the context flag is reserved for future use.

    +
    + + ff476362 + unsigned int ID3D11CommandList::GetContextFlags() + ID3D11CommandList::GetContextFlags +
    + + +

    Represents a cryptographic session.

    +
    + +

    To get a reference to this interface, call .

    +
    + + hh447691 + ID3D11CryptoSession + ID3D11CryptoSession +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the type of encryption that is supported by this session.

    +
    + +

    The application specifies the encryption type when it creates the session.

    +
    + + hh447699 + GetCryptoType + GetCryptoType + void ID3D11CryptoSession::GetCryptoType([Out] GUID* pCryptoType) +
    + + +

    Gets the decoding profile of the session.

    +
    + +

    The application specifies the profile when it creates the session.

    +
    + + hh447701 + GetDecoderProfile + GetDecoderProfile + void ID3D11CryptoSession::GetDecoderProfile([Out] GUID* pDecoderProfile) +
    + + +

    Gets the size of the driver's certificate chain.

    +
    + +

    To get the certificate, call .

    +
    + + hh447695 + GetCertificateSize + GetCertificateSize + HRESULT ID3D11CryptoSession::GetCertificateSize([Out] unsigned int* pCertificateSize) +
    + + +

    Gets a handle to the cryptographic session.

    +
    + +

    You can use this handle to associate the session with a decoder. This enables the decoder to decrypt data that is encrypted using this session.

    +
    + + hh447697 + GetCryptoSessionHandle + GetCryptoSessionHandle + void ID3D11CryptoSession::GetCryptoSessionHandle([Out] void** pCryptoSessionHandle) +
    + + +

    Gets the type of encryption that is supported by this session.

    +
    +

    Receives a that specifies the encryption type. The following GUIDs are defined.

    ValueMeaning
    D3D11_CRYPTO_TYPE_AES128_CTR

    128-bit Advanced Encryption Standard CTR mode (AES-CTR) block cipher.

    ?

    + +

    The application specifies the encryption type when it creates the session.

    +
    + + hh447699 + void ID3D11CryptoSession::GetCryptoType([Out] GUID* pCryptoType) + ID3D11CryptoSession::GetCryptoType +
    + + +

    Gets the decoding profile of the session.

    +
    +

    Receives the decoding profile. For a list of possible values, see .

    + +

    The application specifies the profile when it creates the session.

    +
    + + hh447701 + void ID3D11CryptoSession::GetDecoderProfile([Out] GUID* pDecoderProfile) + ID3D11CryptoSession::GetDecoderProfile +
    + + +

    Gets the size of the driver's certificate chain.

    +
    +

    Receives the size of the certificate chain, in bytes.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    To get the certificate, call .

    +
    + + hh447695 + HRESULT ID3D11CryptoSession::GetCertificateSize([Out] unsigned int* pCertificateSize) + ID3D11CryptoSession::GetCertificateSize +
    + + +

    Gets the driver's certificate chain.

    +
    +

    The size of the pCertificate array, in bytes. To get the size of the certificate chain, call .

    +

    A reference to a byte array that receives the driver's certificate chain. The caller must allocate the array.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447693 + HRESULT ID3D11CryptoSession::GetCertificate([In] unsigned int CertificateSize,[Out, Buffer] unsigned char* pCertificate) + ID3D11CryptoSession::GetCertificate +
    + + +

    Gets a handle to the cryptographic session.

    +
    +

    Receives a handle to the session.

    + +

    You can use this handle to associate the session with a decoder. This enables the decoder to decrypt data that is encrypted using this session.

    +
    + + hh447697 + void ID3D11CryptoSession::GetCryptoSessionHandle([Out] void** pCryptoSessionHandle) + ID3D11CryptoSession::GetCryptoSessionHandle +
    + + +

    Handles the creation, wrapping and releasing of D3D11 resources for Direct3D 11on12.

    +
    + + dn913197 + ID3D11On12Device + ID3D11On12Device +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    This method creates D3D11 resources for use with D3D 11on12.

    +
    +

    A reference to an already-created D3D12 resource or heap.

    +

    A structure that enables an application to override flags that would be inferred by the resource/heap properties. The structure contains bind flags, misc flags, and CPU access flags.

    +

    The use of the resource on input, as a bitwise-OR'd combination of enumeration constants.

    +

    The use of the resource on output, as a bitwise-OR'd combination of enumeration constants.

    +

    The globally unique identifier () for the wrapped resource interface. The REFIID, or , of the interface to the wrapped resource can be obtained by using the __uuidof() macro. For example, __uuidof() will get the of the interface to a wrapped resource.

    +

    After the method returns, points to the newly created wrapped D3D11 resource or heap.

    +

    This method returns one of the Direct3D 12 Return Codes.

    + + dn913199 + HRESULT ID3D11On12Device::CreateWrappedResource([In] IUnknown* pResource12,[In] const D3D11_RESOURCE_FLAGS* pFlags11,[In] int InState,[In] int OutState,[In] const GUID& riid,[Out, Optional] ID3D11Resource** ppResource11) + ID3D11On12Device::CreateWrappedResource +
    + + +

    Releases D3D11 resources that were wrapped for D3D 11on12.

    +
    +

    Specifies a reference to a set of D3D11 resources, defined by .

    +

    Count of the number of resources.

    + +

    Call this method prior to calling Flush, to insert resource barriers to the appropriate "out" state, and to mark that they should then be expected to be in the "in" state. If no resource list is provided, all wrapped resources are transitioned. These resources will be marked as ?not acquired? in hazard tracking until is called.

    Keyed mutex resources cannot be provided to this method; use instead.

    +
    + + dn913200 + void ID3D11On12Device::ReleaseWrappedResources([In, Buffer] const ID3D11Resource** ppResources,[In] unsigned int NumResources) + ID3D11On12Device::ReleaseWrappedResources +
    + + +

    Releases D3D11 resources that were wrapped for D3D 11on12.

    +
    +

    Specifies a reference to a set of D3D11 resources, defined by .

    +

    Count of the number of resources.

    + +

    Call this method prior to calling Flush, to insert resource barriers to the appropriate "out" state, and to mark that they should then be expected to be in the "in" state. If no resource list is provided, all wrapped resources are transitioned. These resources will be marked as ?not acquired? in hazard tracking until is called.

    Keyed mutex resources cannot be provided to this method; use instead.

    +
    + + dn913200 + void ID3D11On12Device::ReleaseWrappedResources([In, Buffer] const ID3D11Resource** ppResources,[In] unsigned int NumResources) + ID3D11On12Device::ReleaseWrappedResources +
    + + +

    Releases D3D11 resources that were wrapped for D3D 11on12.

    +
    +

    Specifies a reference to a set of D3D11 resources, defined by .

    +

    Count of the number of resources.

    + +

    Call this method prior to calling Flush, to insert resource barriers to the appropriate "out" state, and to mark that they should then be expected to be in the "in" state. If no resource list is provided, all wrapped resources are transitioned. These resources will be marked as ?not acquired? in hazard tracking until is called.

    Keyed mutex resources cannot be provided to this method; use instead.

    +
    + + dn913200 + void ID3D11On12Device::ReleaseWrappedResources([In, Buffer] const ID3D11Resource** ppResources,[In] unsigned int NumResources) + ID3D11On12Device::ReleaseWrappedResources +
    + + +

    Acquires D3D11 resources for use with D3D 11on12. Indicates that rendering to the wrapped resources can begin again.

    +
    +

    Specifies a reference to a set of D3D11 resources, defined by .

    +

    Count of the number of resources.

    + +

    This method marks the resources as "acquired" in hazard tracking.

    Keyed mutex resources cannot be provided to this method; use instead.

    +
    + + dn913198 + void ID3D11On12Device::AcquireWrappedResources([In, Buffer] const ID3D11Resource** ppResources,[In] unsigned int NumResources) + ID3D11On12Device::AcquireWrappedResources +
    + + +

    Acquires D3D11 resources for use with D3D 11on12. Indicates that rendering to the wrapped resources can begin again.

    +
    +

    Specifies a reference to a set of D3D11 resources, defined by .

    +

    Count of the number of resources.

    + +

    This method marks the resources as "acquired" in hazard tracking.

    Keyed mutex resources cannot be provided to this method; use instead.

    +
    + + dn913198 + void ID3D11On12Device::AcquireWrappedResources([In, Buffer] const ID3D11Resource** ppResources,[In] unsigned int NumResources) + ID3D11On12Device::AcquireWrappedResources +
    + + +

    Acquires D3D11 resources for use with D3D 11on12. Indicates that rendering to the wrapped resources can begin again.

    +
    +

    Specifies a reference to a set of D3D11 resources, defined by .

    +

    Count of the number of resources.

    + +

    This method marks the resources as "acquired" in hazard tracking.

    Keyed mutex resources cannot be provided to this method; use instead.

    +
    + + dn913198 + void ID3D11On12Device::AcquireWrappedResources([In, Buffer] const ID3D11Resource** ppResources,[In] unsigned int NumResources) + ID3D11On12Device::AcquireWrappedResources +
    + + +

    The device interface represents a virtual adapter; it is used to create resources. adds new methods to those in , such as RegisterDeviceRemovedEvent and UnregisterDeviceRemoved.

    +
    + + mt589889 + ID3D11Device4 + ID3D11Device4 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Registers the "device removed" event and indicates when a Direct3D device has become removed for any reason, using an asynchronous notification mechanism.

    +
    +

    The handle to the "device removed" event.

    +

    A reference to information about the "device removed" event, which can be used in UnregisterDeviceRemoved to unregister the event.

    + +

    Indicates when a Direct3D device has become removed for any reason, using an asynchronous notification mechanism, rather than as an from Present. The reason for device removal can be retrieved using after being notified of the occurrence.

    Applications register and un-register a Win32 event handle with a particular device. That event handle will be signaled when the device becomes removed. A poll into the device's method indicates that the device is removed.

    ISignalableNotifier or SetThreadpoolWait can be used by UWP apps.

    When the graphics device is lost, the app or title will receive the graphics event, so that the app or title knows that its graphics device is no longer valid and it is safe for the app or title to re-create its DirectX devices. In response to this event, the app or title needs to re-create its rendering device and pass it into a SetRenderingDevice call on the composition graphics device objects.

    After setting this new rendering device, the app or title needs to redraw content of all the pre-existing surfaces after the composition graphics device's OnRenderingDeviceReplaced event is fired.

    This method supports Composition for device loss.

    The event is not signaled when it is most ideal to re-create. So, instead, we recommend iterating through the adapter ordinals and creating the first ordinal that will succeed.

    The application can register an event with the device. The application will be signaled when the device becomes removed.

    If the device is already removed, calls to RegisterDeviceRemovedEvent will signal the event immediately. No device-removed error code will be returned from RegisterDeviceRemovedEvent.

    Each "device removed" event is never signaled, or is signaled only once. These events are not signaled during device destruction. These events are unregistered during destruction.

    The semantics of RegisterDeviceRemovedEvent are similar to .

    +
    + + mt589890 + HRESULT ID3D11Device4::RegisterDeviceRemovedEvent([In] void* hEvent,[Out] unsigned int* pdwCookie) + ID3D11Device4::RegisterDeviceRemovedEvent +
    + + +

    Unregisters the "device removed" event.

    +
    +

    Information about the "device removed" event, retrieved during a successful RegisterDeviceRemovedEvent call.

    + +

    See RegisterDeviceRemovedEvent.

    +
    + + mt589892 + void ID3D11Device4::UnregisterDeviceRemoved([In] unsigned int dwCookie) + ID3D11Device4::UnregisterDeviceRemoved +
    + + +

    The interface represents a device context which generates rendering commands.

    Note??The latest version of this interface is introduced in the Windows 10 Creators Update. Applications targetting Windows 10 Creators Update should use the interface instead of .? +
    + + ff476385 + ID3D11DeviceContext4 + ID3D11DeviceContext4 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID3D11DeviceContext4::Signal([In] ID3D11Fence* pFence,[In] unsigned longlong Value) + ID3D11DeviceContext4::Signal + + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID3D11DeviceContext4::Wait([In] ID3D11Fence* pFence,[In] unsigned longlong Value) + ID3D11DeviceContext4::Wait + + + +

    The interface represents a context state object, which holds state and behavior information about a Microsoft Direct3D device.

    +
    + + hh446878 + ID3DDeviceContextState + ID3DDeviceContextState +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Bind an array of shader resources to the domain-shader stage.

    +
    +

    Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to - 1).

    +

    Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to set to the device.

    + +

    If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with null.

    For information about creating shader-resource views, see .

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476421 + void ID3D11DeviceContext::DSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const void** ppShaderResourceViews) + ID3D11DeviceContext::DSSetShaderResources +
    + + +

    Set a domain shader to the device.

    +
    +

    Pointer to a domain shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    Windows?Phone?8: This API is supported.

    +
    + + ff476420 + void ID3D11DeviceContext::DSSetShader([In, Optional] ID3D11DomainShader* pDomainShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::DSSetShader +
    + + +

    Set a domain shader to the device.

    +
    +

    Pointer to a domain shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    Windows?Phone?8: This API is supported.

    +
    + + ff476420 + void ID3D11DeviceContext::DSSetShader([In, Optional] ID3D11DomainShader* pDomainShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::DSSetShader +
    + + +

    Set a domain shader to the device.

    +
    +

    Pointer to a domain shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    Windows?Phone?8: This API is supported.

    +
    + + ff476420 + void ID3D11DeviceContext::DSSetShader([In, Optional] ID3D11DomainShader* pDomainShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::DSSetShader +
    + + +

    Set an array of sampler states to the domain-shader stage.

    +
    +

    Index into the device's zero-based array to begin setting samplers to (ranges from 0 to - 1).

    +

    Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to - StartSlot).

    +

    Pointer to an array of sampler-state interfaces (see ). See Remarks.

    + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

     //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476419 + void ID3D11DeviceContext::DSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const void** ppSamplers) + ID3D11DeviceContext::DSSetSamplers +
    + + +

    Sets the constant buffers used by the domain-shader stage.

    +
    +

    Index into the zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer.

    If the application wants the shader to access other parts of the buffer, it must call the DSSetConstantBuffers1 method instead.

    Windows?Phone?8: This API is supported.

    +
    + + ff476418 + void ID3D11DeviceContext::DSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const void** ppConstantBuffers) + ID3D11DeviceContext::DSSetConstantBuffers +
    + + +

    Get the domain-shader resources.

    +
    +

    Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to - 1).

    +

    The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to be returned by the device.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476417 + void ID3D11DeviceContext::DSGetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[Out, Buffer, Optional] ID3D11ShaderResourceView** ppShaderResourceViews) + ID3D11DeviceContext::DSGetShaderResources +
    + + +

    Get the domain shader currently set on the device.

    +
    +

    Address of a reference to a domain shader (see ) to be returned by the method.

    +

    Pointer to an array of class instance interfaces (see ).

    +

    The number of class-instance elements in the array.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476416 + void ID3D11DeviceContext::DSGetShader([Out, Optional] ID3D11DomainShader** ppDomainShader,[Out, Buffer, Optional] ID3D11ClassInstance** ppClassInstances,[InOut] unsigned int* pNumClassInstances) + ID3D11DeviceContext::DSGetShader +
    + + +

    Get an array of sampler state interfaces from the domain-shader stage.

    +
    +

    Index into a zero-based array to begin getting samplers from (ranges from 0 to - 1).

    +

    Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to - StartSlot).

    +

    Pointer to an array of sampler-state interfaces (see ).

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476415 + void ID3D11DeviceContext::DSGetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[Out, Buffer, Optional] ID3D11SamplerState** ppSamplers) + ID3D11DeviceContext::DSGetSamplers +
    + + +

    Get the constant buffers used by the domain-shader stage.

    +
    +

    Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to - 1).

    +

    Number of buffers to retrieve (ranges from 0 to - StartSlot).

    +

    Array of constant buffer interface references (see ) to be returned by the method.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476414 + void ID3D11DeviceContext::DSGetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers) + ID3D11DeviceContext::DSGetConstantBuffers +
    + + +

    A geometry-shader interface manages an executable program (a geometry shader) that controls the geometry-shader stage.

    +
    + +

    The geometry-shader interface has no methods; use HLSL to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..

    To create a geometry shader interface, call either or . Before using a geometry shader you must bind it to the device by calling .

    This interface is defined in D3D11.h.

    +
    + + ff476536 + ID3D11GeometryShader + ID3D11GeometryShader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant StreamOutputNoRasterizedStream. + D3D11_SO_NO_RASTERIZED_STREAM + + + Constant StreamOutputStreamCount. + D3D11_SO_STREAM_COUNT + + + Constant StreamOutputOutputComponentCount. + D3D11_SO_OUTPUT_COMPONENT_COUNT + + + Constant StreamOutputBufferSlotCount. + D3D11_SO_BUFFER_SLOT_COUNT + + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + An array of instances describing the layout of the output buffers. + An array of buffer strides; each stride is the size of an element for that buffer. + The index number of the stream to be sent to the rasterizer stage. Set to NoRasterizedStream if no stream is to be rasterized. + A dynamic class linkage interface. + + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the constant buffers used by the geometry shader pipeline stage.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    You can't use the interface to get information about what is currently bound to the pipeline in the device context. But you can use to get information from a compiled shader. For example, you can use and to determine the slot in which a geometry shader expects a constant buffer. You can then pass this slot number to GSSetConstantBuffers to set the constant buffer. You can call the D3D11Reflect function to retrieve the address of a reference to the interface and then call to get a reference to .

    The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer.

    If the application wants the shader to access other parts of the buffer, it must call the GSSetConstantBuffers1 method instead.

    +
    + + ff476436 + void ID3D11DeviceContext::GSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const void** ppConstantBuffers) + ID3D11DeviceContext::GSSetConstantBuffers +
    + + +

    Set a geometry shader to the device.

    +
    +

    Pointer to a geometry shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476438 + void ID3D11DeviceContext::GSSetShader([In, Optional] ID3D11GeometryShader* pShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::GSSetShader +
    + + +

    Set a geometry shader to the device.

    +
    +

    Pointer to a geometry shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476438 + void ID3D11DeviceContext::GSSetShader([In, Optional] ID3D11GeometryShader* pShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::GSSetShader +
    + + +

    Set a geometry shader to the device.

    +
    +

    Pointer to a geometry shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476438 + void ID3D11DeviceContext::GSSetShader([In, Optional] ID3D11GeometryShader* pShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::GSSetShader +
    + + +

    Bind an array of shader resources to the geometry shader stage.

    +
    +

    Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to - 1).

    +

    Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources(ranges from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to set to the device.

    + +

    If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with null.

    For information about creating shader-resource views, see .

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476439 + void ID3D11DeviceContext::GSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const void** ppShaderResourceViews) + ID3D11DeviceContext::GSSetShaderResources +
    + + +

    Set an array of sampler states to the geometry shader pipeline stage.

    +
    +

    Index into the device's zero-based array to begin setting samplers to (ranges from 0 to - 1).

    +

    Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to - StartSlot).

    +

    Pointer to an array of sampler-state interfaces (see ). See Remarks.

    + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

     //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476437 + void ID3D11DeviceContext::GSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const void** ppSamplers) + ID3D11DeviceContext::GSSetSamplers +
    + + +

    Get the constant buffers used by the geometry shader pipeline stage.

    +
    +

    Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to - 1).

    +

    Number of buffers to retrieve (ranges from 0 to - StartSlot).

    +

    Array of constant buffer interface references (see ) to be returned by the method.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476432 + void ID3D11DeviceContext::GSGetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers) + ID3D11DeviceContext::GSGetConstantBuffers +
    + + +

    Get the geometry shader currently set on the device.

    +
    +

    Address of a reference to a geometry shader (see ) to be returned by the method.

    +

    Pointer to an array of class instance interfaces (see ).

    +

    The number of class-instance elements in the array.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476434 + void ID3D11DeviceContext::GSGetShader([Out, Optional] ID3D11GeometryShader** ppGeometryShader,[Out, Buffer, Optional] ID3D11ClassInstance** ppClassInstances,[InOut] unsigned int* pNumClassInstances) + ID3D11DeviceContext::GSGetShader +
    + + +

    Get the geometry shader resources.

    +
    +

    Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to - 1).

    +

    The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to be returned by the device.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476435 + void ID3D11DeviceContext::GSGetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[Out, Buffer, Optional] ID3D11ShaderResourceView** ppShaderResourceViews) + ID3D11DeviceContext::GSGetShaderResources +
    + + +

    Get an array of sampler state interfaces from the geometry shader pipeline stage.

    +
    +

    Index into a zero-based array to begin getting samplers from (ranges from 0 to - 1).

    +

    Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to - StartSlot).

    +

    Pointer to an array of sampler-state interfaces (see ).

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476433 + void ID3D11DeviceContext::GSGetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[Out, Buffer, Optional] ID3D11SamplerState** ppSamplers) + ID3D11DeviceContext::GSGetSamplers +
    + + +

    A hull-shader interface manages an executable program (a hull shader) that controls the hull-shader stage.

    +
    + +

    The hull-shader interface has no methods; use HLSL to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..

    To create a hull-shader interface, call . Before using a hull shader you must bind it to the device by calling .

    This interface is defined in D3D11.h.

    +
    + + ff476537 + ID3D11HullShader + ID3D11HullShader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Bind an array of shader resources to the hull-shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    If an overlapping resource view is already bound to an output slot, such as a render target, then the method will fill the destination shader resource slot with null.

    For information about creating shader-resource views, see .

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476448 + void ID3D11DeviceContext::HSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const void** ppShaderResourceViews) + ID3D11DeviceContext::HSSetShaderResources +
    + + +

    Set a hull shader to the device.

    +
    +

    Pointer to a hull shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476447 + void ID3D11DeviceContext::HSSetShader([In, Optional] ID3D11HullShader* pHullShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::HSSetShader +
    + + +

    Set a hull shader to the device.

    +
    +

    Pointer to a hull shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476447 + void ID3D11DeviceContext::HSSetShader([In, Optional] ID3D11HullShader* pHullShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::HSSetShader +
    + + +

    Set a hull shader to the device.

    +
    +

    Pointer to a hull shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476447 + void ID3D11DeviceContext::HSSetShader([In, Optional] ID3D11HullShader* pHullShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::HSSetShader +
    + + +

    Set an array of sampler states to the hull-shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

     //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476446 + void ID3D11DeviceContext::HSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const void** ppSamplers) + ID3D11DeviceContext::HSSetSamplers +
    + + +

    Set the constant buffers used by the hull-shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer.

    If the application wants the shader to access other parts of the buffer, it must call the HSSetConstantBuffers1 method instead.

    +
    + + ff476445 + void ID3D11DeviceContext::HSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const void** ppConstantBuffers) + ID3D11DeviceContext::HSSetConstantBuffers +
    + + +

    Get the hull-shader resources.

    +
    +

    Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to - 1).

    +

    The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to be returned by the device.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476443 + void ID3D11DeviceContext::HSGetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[Out, Buffer, Optional] ID3D11ShaderResourceView** ppShaderResourceViews) + ID3D11DeviceContext::HSGetShaderResources +
    + + +

    Get the hull shader currently set on the device.

    +
    +

    Address of a reference to a hull shader (see ) to be returned by the method.

    +

    Pointer to an array of class instance interfaces (see ).

    +

    The number of class-instance elements in the array.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476442 + void ID3D11DeviceContext::HSGetShader([Out, Optional] ID3D11HullShader** ppHullShader,[Out, Buffer, Optional] ID3D11ClassInstance** ppClassInstances,[InOut] unsigned int* pNumClassInstances) + ID3D11DeviceContext::HSGetShader +
    + + +

    Get an array of sampler state interfaces from the hull-shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476441 + void ID3D11DeviceContext::HSGetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[Out, Buffer, Optional] ID3D11SamplerState** ppSamplers) + ID3D11DeviceContext::HSGetSamplers +
    + + +

    Get the constant buffers used by the hull-shader stage.

    +
    + No documentation. + No documentation. + No documentation. + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476440 + void ID3D11DeviceContext::HSGetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers) + ID3D11DeviceContext::HSGetConstantBuffers +
    + + +

    An information-queue interface stores, retrieves, and filters debug messages. The queue consists of a message queue, an optional storage filter stack, and a optional retrieval filter stack.

    +
    + +

    To get this interface, turn on debug layer and use IUnknown::QueryInterface from the .

    Windows?Phone?8: This API is supported.

    +
    + + ff476538 + ID3D11InfoQueue + ID3D11InfoQueue +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get or sets the maximum number of messages that can be added to the message queue.

    +
    + +

    When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.

    +
    + + ff476550 + GetMessageCountLimit / SetMessageCountLimit + GetMessageCountLimit + unsigned longlong ID3D11InfoQueue::GetMessageCountLimit() +
    + + +

    Get the number of messages that were allowed to pass through a storage filter.

    +
    + + ff476552 + GetNumMessagesAllowedByStorageFilter + GetNumMessagesAllowedByStorageFilter + unsigned longlong ID3D11InfoQueue::GetNumMessagesAllowedByStorageFilter() +
    + + +

    Get the number of messages that were denied passage through a storage filter.

    +
    + + ff476553 + GetNumMessagesDeniedByStorageFilter + GetNumMessagesDeniedByStorageFilter + unsigned longlong ID3D11InfoQueue::GetNumMessagesDeniedByStorageFilter() +
    + + +

    Get the number of messages currently stored in the message queue.

    +
    + + ff476556 + GetNumStoredMessages + GetNumStoredMessages + unsigned longlong ID3D11InfoQueue::GetNumStoredMessages() +
    + + +

    Get the number of messages that are able to pass through a retrieval filter.

    +
    + + ff476557 + GetNumStoredMessagesAllowedByRetrievalFilter + GetNumStoredMessagesAllowedByRetrievalFilter + unsigned longlong ID3D11InfoQueue::GetNumStoredMessagesAllowedByRetrievalFilter() +
    + + +

    Get the number of messages that were discarded due to the message count limit.

    +
    + +

    Get and set the message count limit with and , respectively.

    +
    + + ff476554 + GetNumMessagesDiscardedByMessageCountLimit + GetNumMessagesDiscardedByMessageCountLimit + unsigned longlong ID3D11InfoQueue::GetNumMessagesDiscardedByMessageCountLimit() +
    + + +

    Get the size of the storage-filter stack in bytes.

    +
    + + ff476561 + GetStorageFilterStackSize + GetStorageFilterStackSize + unsigned int ID3D11InfoQueue::GetStorageFilterStackSize() +
    + + +

    Get the size of the retrieval-filter stack in bytes.

    +
    + + ff476559 + GetRetrievalFilterStackSize + GetRetrievalFilterStackSize + unsigned int ID3D11InfoQueue::GetRetrievalFilterStackSize() +
    + + +

    Get or sets a boolean that turns the debug output on or off.

    +
    + + ff476551 + GetMuteDebugOutput / SetMuteDebugOutput + GetMuteDebugOutput + BOOL ID3D11InfoQueue::GetMuteDebugOutput() +
    + + +

    Set the maximum number of messages that can be added to the message queue.

    +
    +

    Maximum number of messages that can be added to the message queue. -1 means no limit.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.

    +
    + + ff476573 + HRESULT ID3D11InfoQueue::SetMessageCountLimit([In] unsigned longlong MessageCountLimit) + ID3D11InfoQueue::SetMessageCountLimit +
    + + +

    Clear all messages from the message queue.

    +
    + + ff476545 + void ID3D11InfoQueue::ClearStoredMessages() + ID3D11InfoQueue::ClearStoredMessages +
    + + +

    Get a message from the message queue.

    +
    +

    Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with ). 0 is the message at the front of the message queue.

    +

    Returned message (see ).

    +

    Size of pMessage in bytes, including the size of the message string that the pMessage points to.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    This method does not remove any messages from the message queue.

    This method gets messages from the message queue after an optional retrieval filter has been applied.

    Applications should call this method twice to retrieve a message - first to obtain the size of the message and second to get the message. Here is a typical example:

     // Get the size of the message	
    +             messageLength = 0;	
    +             hr = pInfoQueue->GetMessage(0, null, &messageLength); // Allocate space and get the message	
    +             * pMessage = (*)malloc(messageLength);	
    +            hr = pInfoQueue->GetMessage(0, pMessage, &messageLength);	
    +            

    For an overview see Information Queue Overview.

    +
    + + ff476549 + HRESULT ID3D11InfoQueue::GetMessageW([In] unsigned longlong MessageIndex,[In] void* pMessage,[InOut] SIZE_T* pMessageByteLength) + ID3D11InfoQueue::GetMessageW +
    + + +

    Get the number of messages that were allowed to pass through a storage filter.

    +
    +

    Number of messages allowed by a storage filter.

    + + ff476552 + unsigned longlong ID3D11InfoQueue::GetNumMessagesAllowedByStorageFilter() + ID3D11InfoQueue::GetNumMessagesAllowedByStorageFilter +
    + + +

    Get the number of messages that were denied passage through a storage filter.

    +
    +

    Number of messages denied by a storage filter.

    + + ff476553 + unsigned longlong ID3D11InfoQueue::GetNumMessagesDeniedByStorageFilter() + ID3D11InfoQueue::GetNumMessagesDeniedByStorageFilter +
    + + +

    Get the number of messages currently stored in the message queue.

    +
    +

    Number of messages currently stored in the message queue.

    + + ff476556 + unsigned longlong ID3D11InfoQueue::GetNumStoredMessages() + ID3D11InfoQueue::GetNumStoredMessages +
    + + +

    Get the number of messages that are able to pass through a retrieval filter.

    +
    +

    Number of messages allowed by a retrieval filter.

    + + ff476557 + unsigned longlong ID3D11InfoQueue::GetNumStoredMessagesAllowedByRetrievalFilter() + ID3D11InfoQueue::GetNumStoredMessagesAllowedByRetrievalFilter +
    + + +

    Get the number of messages that were discarded due to the message count limit.

    +
    +

    Number of messages discarded.

    + +

    Get and set the message count limit with and , respectively.

    +
    + + ff476554 + unsigned longlong ID3D11InfoQueue::GetNumMessagesDiscardedByMessageCountLimit() + ID3D11InfoQueue::GetNumMessagesDiscardedByMessageCountLimit +
    + + +

    Get the maximum number of messages that can be added to the message queue.

    +
    +

    Maximum number of messages that can be added to the queue. -1 means no limit.

    + +

    When the number of messages in the message queue has reached the maximum limit, new messages coming in will push old messages out.

    +
    + + ff476550 + unsigned longlong ID3D11InfoQueue::GetMessageCountLimit() + ID3D11InfoQueue::GetMessageCountLimit +
    + + +

    Add storage filters to the top of the storage-filter stack.

    +
    +

    Array of storage filters (see ).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476542 + HRESULT ID3D11InfoQueue::AddStorageFilterEntries([In] D3D11_INFO_QUEUE_FILTER* pFilter) + ID3D11InfoQueue::AddStorageFilterEntries +
    + + +

    Get the storage filter at the top of the storage-filter stack.

    +
    +

    Storage filter at the top of the storage-filter stack.

    +

    Size of the storage filter in bytes. If pFilter is null, the size of the storage filter will be output to this parameter.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476560 + HRESULT ID3D11InfoQueue::GetStorageFilter([In] void* pFilter,[InOut] SIZE_T* pFilterByteLength) + ID3D11InfoQueue::GetStorageFilter +
    + + +

    Remove a storage filter from the top of the storage-filter stack.

    +
    + + ff476544 + void ID3D11InfoQueue::ClearStorageFilter() + ID3D11InfoQueue::ClearStorageFilter +
    + + +

    Push an empty storage filter onto the storage-filter stack.

    +
    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    An empty storage filter allows all messages to pass through.

    +
    + + ff476567 + HRESULT ID3D11InfoQueue::PushEmptyStorageFilter() + ID3D11InfoQueue::PushEmptyStorageFilter +
    + + +

    Push a copy of storage filter currently on the top of the storage-filter stack onto the storage-filter stack.

    +
    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476565 + HRESULT ID3D11InfoQueue::PushCopyOfStorageFilter() + ID3D11InfoQueue::PushCopyOfStorageFilter +
    + + +

    Push a storage filter onto the storage-filter stack.

    +
    +

    Pointer to a storage filter (see ).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476569 + HRESULT ID3D11InfoQueue::PushStorageFilter([In] D3D11_INFO_QUEUE_FILTER* pFilter) + ID3D11InfoQueue::PushStorageFilter +
    + + +

    Pop a storage filter from the top of the storage-filter stack.

    +
    + + ff476563 + void ID3D11InfoQueue::PopStorageFilter() + ID3D11InfoQueue::PopStorageFilter +
    + + +

    Get the size of the storage-filter stack in bytes.

    +
    +

    Size of the storage-filter stack in bytes.

    + + ff476561 + unsigned int ID3D11InfoQueue::GetStorageFilterStackSize() + ID3D11InfoQueue::GetStorageFilterStackSize +
    + + +

    Add storage filters to the top of the retrieval-filter stack.

    +
    +

    Array of retrieval filters (see ).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    The following code example shows how to use :

      cats[] = { ..., ..., ... };	
    +             sevs[] = { ..., ..., ... };	
    +            UINT ids[] = { ..., ..., ... };  filter;	
    +            memset( &filter, 0, sizeof(filter) ); // To set the type of messages to allow, 	
    +            // set filter.AllowList as follows:	
    +            filter.AllowList.NumCategories = sizeof(cats / sizeof()); 	
    +            filter.AllowList.pCategoryList = cats;	
    +            filter.AllowList.NumSeverities = sizeof(sevs / sizeof()); 	
    +            filter.AllowList.pSeverityList = sevs;	
    +            filter.AllowList.NumIDs = sizeof(ids) / sizeof(UINT);	
    +            filter.AllowList.pIDList = ids; // To set the type of messages to deny, set filter.DenyList 	
    +            // similarly to the preceding filter.AllowList. // The following single call sets all of the preceding information.	
    +            hr = infoQueue->AddRetrievalFilterEntries( &filter );	
    +            
    +
    + + ff476541 + HRESULT ID3D11InfoQueue::AddRetrievalFilterEntries([In] D3D11_INFO_QUEUE_FILTER* pFilter) + ID3D11InfoQueue::AddRetrievalFilterEntries +
    + + +

    Get the retrieval filter at the top of the retrieval-filter stack.

    +
    +

    Retrieval filter at the top of the retrieval-filter stack.

    +

    Size of the retrieval filter in bytes. If pFilter is null, the size of the retrieval filter will be output to this parameter.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476558 + HRESULT ID3D11InfoQueue::GetRetrievalFilter([In] void* pFilter,[InOut] SIZE_T* pFilterByteLength) + ID3D11InfoQueue::GetRetrievalFilter +
    + + +

    Remove a retrieval filter from the top of the retrieval-filter stack.

    +
    + + ff476543 + void ID3D11InfoQueue::ClearRetrievalFilter() + ID3D11InfoQueue::ClearRetrievalFilter +
    + + +

    Push an empty retrieval filter onto the retrieval-filter stack.

    +
    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    An empty retrieval filter allows all messages to pass through.

    +
    + + ff476566 + HRESULT ID3D11InfoQueue::PushEmptyRetrievalFilter() + ID3D11InfoQueue::PushEmptyRetrievalFilter +
    + + +

    Push a copy of retrieval filter currently on the top of the retrieval-filter stack onto the retrieval-filter stack.

    +
    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476564 + HRESULT ID3D11InfoQueue::PushCopyOfRetrievalFilter() + ID3D11InfoQueue::PushCopyOfRetrievalFilter +
    + + +

    Push a retrieval filter onto the retrieval-filter stack.

    +
    +

    Pointer to a retrieval filter (see ).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476568 + HRESULT ID3D11InfoQueue::PushRetrievalFilter([In] D3D11_INFO_QUEUE_FILTER* pFilter) + ID3D11InfoQueue::PushRetrievalFilter +
    + + +

    Pop a retrieval filter from the top of the retrieval-filter stack.

    +
    + + ff476562 + void ID3D11InfoQueue::PopRetrievalFilter() + ID3D11InfoQueue::PopRetrievalFilter +
    + + +

    Get the size of the retrieval-filter stack in bytes.

    +
    +

    Size of the retrieval-filter stack in bytes.

    + + ff476559 + unsigned int ID3D11InfoQueue::GetRetrievalFilterStackSize() + ID3D11InfoQueue::GetRetrievalFilterStackSize +
    + + +

    Add a debug message to the message queue and send that message to debug output.

    +
    +

    Category of a message (see ).

    +

    Severity of a message (see ).

    +

    Unique identifier of a message (see ).

    +

    User-defined message.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + +

    This method is used by the runtime's internal mechanisms to add debug messages to the message queue and send them to debug output. For applications to add their own custom messages to the message queue and send them to debug output, call .

    +
    + + ff476540 + HRESULT ID3D11InfoQueue::AddMessage([In] D3D11_MESSAGE_CATEGORY Category,[In] D3D11_MESSAGE_SEVERITY Severity,[In] D3D11_MESSAGE_ID ID,[In] const char* pDescription) + ID3D11InfoQueue::AddMessage +
    + + +

    Add a user-defined message to the message queue and send that message to debug output.

    +
    +

    Severity of a message (see ).

    +

    Message string.

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476539 + HRESULT ID3D11InfoQueue::AddApplicationMessage([In] D3D11_MESSAGE_SEVERITY Severity,[In] const char* pDescription) + ID3D11InfoQueue::AddApplicationMessage +
    + + +

    Set a message category to break on when a message with that category passes through the storage filter.

    +
    +

    Message category to break on (see ).

    +

    Turns this breaking condition on or off (true for on, false for off).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476570 + HRESULT ID3D11InfoQueue::SetBreakOnCategory([In] D3D11_MESSAGE_CATEGORY Category,[In] BOOL bEnable) + ID3D11InfoQueue::SetBreakOnCategory +
    + + +

    Set a message severity level to break on when a message with that severity level passes through the storage filter.

    +
    +

    A , which represents a message severity level to break on.

    +

    Turns this breaking condition on or off (true for on, false for off).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476572 + HRESULT ID3D11InfoQueue::SetBreakOnSeverity([In] D3D11_MESSAGE_SEVERITY Severity,[In] BOOL bEnable) + ID3D11InfoQueue::SetBreakOnSeverity +
    + + +

    Set a message identifier to break on when a message with that identifier passes through the storage filter.

    +
    +

    Message identifier to break on (see ).

    +

    Turns this breaking condition on or off (true for on, false for off).

    +

    This method returns one of the following Direct3D 11 Return Codes.

    + + ff476571 + HRESULT ID3D11InfoQueue::SetBreakOnID([In] D3D11_MESSAGE_ID ID,[In] BOOL bEnable) + ID3D11InfoQueue::SetBreakOnID +
    + + +

    Get a message category to break on when a message with that category passes through the storage filter.

    +
    +

    Message category to break on (see ).

    +

    Whether this breaking condition is turned on or off (true for on, false for off).

    + + ff476546 + BOOL ID3D11InfoQueue::GetBreakOnCategory([In] D3D11_MESSAGE_CATEGORY Category) + ID3D11InfoQueue::GetBreakOnCategory +
    + + +

    Get a message severity level to break on when a message with that severity level passes through the storage filter.

    +
    +

    Message severity level to break on (see ).

    +

    Whether this breaking condition is turned on or off (true for on, false for off).

    + + ff476548 + BOOL ID3D11InfoQueue::GetBreakOnSeverity([In] D3D11_MESSAGE_SEVERITY Severity) + ID3D11InfoQueue::GetBreakOnSeverity +
    + + +

    Get a message identifier to break on when a message with that identifier passes through the storage filter.

    +
    +

    Message identifier to break on (see ).

    +

    Whether this breaking condition is turned on or off (true for on, false for off).

    + + ff476547 + BOOL ID3D11InfoQueue::GetBreakOnID([In] D3D11_MESSAGE_ID ID) + ID3D11InfoQueue::GetBreakOnID +
    + + +

    Set a boolean that turns the debug output on or off.

    +
    +

    Disable/Enable the debug output (TRUE to disable or mute the output, to enable the output).

    + +

    This will stop messages that pass the storage filter from being printed out in the debug output, however those messages will still be added to the message queue.

    +
    + + ff476574 + void ID3D11InfoQueue::SetMuteDebugOutput([In] BOOL bMute) + ID3D11InfoQueue::SetMuteDebugOutput +
    + + +

    Get a boolean that turns the debug output on or off.

    +
    +

    Whether the debug output is on or off (true for on, false for off).

    + + ff476551 + BOOL ID3D11InfoQueue::GetMuteDebugOutput() + ID3D11InfoQueue::GetMuteDebugOutput +
    + + +

    Get a message from the message queue.

    +
    +

    Index into message queue after an optional retrieval filter has been applied. This can be between 0 and the number of messages in the message queue that pass through the retrieval filter (which can be obtained with ). 0 is the message at the front of the message queue.

    + Returned message (see ) + ff476549 + HRESULT ID3D11InfoQueue::GetMessageW([In] unsigned longlong MessageIndex,[In] void* pMessage,[InOut] SIZE_T* pMessageByteLength) + ID3D11InfoQueue::GetMessageW +
    + + +

    Get the storage filter at the top of the storage-filter stack.

    +
    + The storage filter at the top of the storage-filter stack. + ff476560 + HRESULT ID3D11InfoQueue::GetStorageFilter([In] void* pFilter,[InOut] SIZE_T* pFilterByteLength) + ID3D11InfoQueue::GetStorageFilter +
    + + +

    Get the retrieval filter at the top of the retrieval-filter stack.

    +
    + The retrieval filter at the top of the retrieval-filter stack. + ff476558 + HRESULT ID3D11InfoQueue::GetRetrievalFilter([In] void* pFilter,[InOut] SIZE_T* pFilterByteLength) + ID3D11InfoQueue::GetRetrievalFilter +
    + + +

    An input-layout interface holds a definition of how to feed vertex data that is laid out in memory into the input-assembler stage of the graphics pipeline.

    +
    + +

    To create an input-layout object, call . To bind the input-layout object to the input-assembler stage, call .

    +
    + + ff476575 + ID3D11InputLayout + ID3D11InputLayout +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Initializes a new instance of the object to describe the + input-buffer data for the input-assembler stage. + + ID3D11Device::CreateInputLayout + The device used to create the layout. + An array of input elements describing the layout of the input data. + The compiled shader used to validate the input elements. + + + +

    Provides threading protection for critical sections of a multi-threaded application.

    +
    + +

    This interface is obtained by querying it from an immediate device context created with the (or later versions of this) interface using IUnknown::QueryInterface.

    Unlike D3D10, there is no multithreaded layer in D3D11. By default, multithread protection is turned off. Use SetMultithreadProtected to turn it on, then Enter and Leave to encapsulate graphics commands that must be executed in a specific order.

    By default in D3D11, applications can only use one thread with the immediate context at a time. But, applications can use this interface to change that restriction. The interface can turn on threading protection for the immediate context, which will increase the overhead of each immediate context call in order to share one context with multiple threads.

    +
    + + mt644886 + ID3D11Multithread + ID3D11Multithread +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Find out if multithread protection is turned on or not.

    +
    + + mt644889 + GetMultithreadProtected + GetMultithreadProtected + BOOL ID3D11Multithread::GetMultithreadProtected() +
    + + +

    Enter a device's critical section.

    +
    + +

    If SetMultithreadProtected is set to true, then entering a device's critical section prevents other threads from simultaneously calling that device's methods, calling DXGI methods, and calling the methods of all resource, view, shader, state, and asynchronous interfaces.

    This function should be used in multithreaded applications when there is a series of graphics commands that must happen in order. This function is typically called at the beginning of the series of graphics commands, and Leave is typically called after those graphics commands.

    +
    + + mt644887 + void ID3D11Multithread::Enter() + ID3D11Multithread::Enter +
    + + +

    Leave a device's critical section.

    +
    + +

    This function is typically used in multithreaded applications when there is a series of graphics commands that must happen in order. Enter is typically called at the beginning of a series of graphics commands, and this function is typically called after those graphics commands.

    +
    + + mt644890 + void ID3D11Multithread::Leave() + ID3D11Multithread::Leave +
    + + +

    Turns multithread protection on or off.

    +
    +

    Set to true to turn multithread protection on, false to turn it off.

    +

    True if multithread protection was already turned on prior to calling this method, false otherwise.

    + + mt644891 + BOOL ID3D11Multithread::SetMultithreadProtected([In] BOOL bMTProtect) + ID3D11Multithread::SetMultithreadProtected +
    + + +

    Find out if multithread protection is turned on or not.

    +
    +

    Returns true if multithread protection is turned on, false otherwise.

    + + mt644889 + BOOL ID3D11Multithread::GetMultithreadProtected() + ID3D11Multithread::GetMultithreadProtected +
    + + +

    A pixel-shader interface manages an executable program (a pixel shader) that controls the pixel-shader stage.

    +
    + +

    The pixel-shader interface has no methods; use HLSL to implement your shader functionality. All shaders in are implemented from a common set of features referred to as the common-shader core..

    To create a pixel shader interface, call . Before using a pixel shader you must bind it to the device by calling .

    This interface is defined in D3D11.h.

    +
    + + ff476576 + ID3D11PixelShader + ID3D11PixelShader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant FrontfacingDefaultValue. + D3D11_PS_FRONTFACING_DEFAULT_VALUE + + + Constant FrontfacingFalseValue. + D3D11_PS_FRONTFACING_FALSE_VALUE + + + Constant FrontfacingTrueValue. + D3D11_PS_FRONTFACING_TRUE_VALUE + + + Constant InputRegisterComponents. + D3D11_PS_INPUT_REGISTER_COMPONENTS + + + Constant InputRegisterComponentBitCount. + D3D11_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT + + + Constant InputRegisterCount. + D3D11_PS_INPUT_REGISTER_COUNT + + + Constant InputRegisterReadsPerInst. + D3D11_PS_INPUT_REGISTER_READS_PER_INST + + + Constant InputRegisterReadPorts. + D3D11_PS_INPUT_REGISTER_READ_PORTS + + + Constant LegacyPixelCenterFractionalComponent. + D3D11_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT + + + Constant OutputDepthRegisterComponents. + D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS + + + Constant OutputDepthRegisterComponentBitCount. + D3D11_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT + + + Constant OutputDepthRegisterCount. + D3D11_PS_OUTPUT_DEPTH_REGISTER_COUNT + + + Constant OutputMaskRegisterComponents. + D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENTS + + + Constant OutputMaskRegisterComponentBitCount. + D3D11_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT + + + Constant OutputMaskRegisterCount. + D3D11_PS_OUTPUT_MASK_REGISTER_COUNT + + + Constant OutputRegisterComponents. + D3D11_PS_OUTPUT_REGISTER_COMPONENTS + + + Constant OutputRegisterComponentBitCount. + D3D11_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT + + + Constant OutputRegisterCount. + D3D11_PS_OUTPUT_REGISTER_COUNT + + + Constant PixelCenterFractionalComponent. + D3D11_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT + + + +

    Bind an array of shader resources to the pixel shader stage.

    +
    +

    Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to - 1).

    +

    Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to set to the device.

    + +

    If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this API will fill the destination shader resource slot with null.

    For information about creating shader-resource views, see .

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476473 + void ID3D11DeviceContext::PSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const void** ppShaderResourceViews) + ID3D11DeviceContext::PSSetShaderResources +
    + + +

    Sets a pixel shader to the device.

    +
    +

    Pointer to a pixel shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    Set ppClassInstances to null if no interfaces are used in the shader. If it is not null, the number of class instances must match the number of interfaces used in the shader. Furthermore, each interface reference must have a corresponding class instance or the assigned shader will be disabled.

    Windows?Phone?8: This API is supported.

    +
    + + ff476472 + void ID3D11DeviceContext::PSSetShader([In, Optional] ID3D11PixelShader* pPixelShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::PSSetShader +
    + + +

    Sets a pixel shader to the device.

    +
    +

    Pointer to a pixel shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    Set ppClassInstances to null if no interfaces are used in the shader. If it is not null, the number of class instances must match the number of interfaces used in the shader. Furthermore, each interface reference must have a corresponding class instance or the assigned shader will be disabled.

    Windows?Phone?8: This API is supported.

    +
    + + ff476472 + void ID3D11DeviceContext::PSSetShader([In, Optional] ID3D11PixelShader* pPixelShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::PSSetShader +
    + + +

    Sets a pixel shader to the device.

    +
    +

    Pointer to a pixel shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    Set ppClassInstances to null if no interfaces are used in the shader. If it is not null, the number of class instances must match the number of interfaces used in the shader. Furthermore, each interface reference must have a corresponding class instance or the assigned shader will be disabled.

    Windows?Phone?8: This API is supported.

    +
    + + ff476472 + void ID3D11DeviceContext::PSSetShader([In, Optional] ID3D11PixelShader* pPixelShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::PSSetShader +
    + + +

    Set an array of sampler states to the pixel shader pipeline stage.

    +
    +

    Index into the device's zero-based array to begin setting samplers to (ranges from 0 to - 1).

    +

    Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to - StartSlot).

    +

    Pointer to an array of sampler-state interfaces (see ). See Remarks.

    + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

    StateDefault Value
    Filter
    AddressU
    AddressV
    AddressW
    MipLODBias0
    MaxAnisotropy1
    ComparisonFunc
    BorderColor[0]1.0f
    BorderColor[1]1.0f
    BorderColor[2]1.0f
    BorderColor[3]1.0f
    MinLOD-FLT_MAX
    MaxLODFLT_MAX

    ?

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476471 + void ID3D11DeviceContext::PSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const void** ppSamplers) + ID3D11DeviceContext::PSSetSamplers +
    + + +

    Sets the constant buffers used by the pixel shader pipeline stage.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems, can bind a larger number of resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer.

    To enable the shader to access other parts of the buffer, call PSSetConstantBuffers1 instead of PSSetConstantBuffers. PSSetConstantBuffers1 has additional parameters pFirstConstant and pNumConstants.

    +
    + + ff476470 + void ID3D11DeviceContext::PSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const void** ppConstantBuffers) + ID3D11DeviceContext::PSSetConstantBuffers +
    + + +

    Bind an array of shader resources to the pixel shader stage.

    +
    +

    Index into the device's zero-based array to begin setting shader resources to (ranges from 0 to - 1).

    +

    Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to set to the device.

    + +

    If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this API will fill the destination shader resource slot with null.

    For information about creating shader-resource views, see .

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476473 + void ID3D11DeviceContext::PSGetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[Out, Buffer, Optional] ID3D11ShaderResourceView** ppShaderResourceViews) + ID3D11DeviceContext::PSGetShaderResources +
    + + +

    Get the pixel shader currently set on the device.

    +
    +

    Address of a reference to a pixel shader (see ) to be returned by the method.

    +

    Pointer to an array of class instance interfaces (see ).

    +

    The number of class-instance elements in the array.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed, to avoid memory leaks.

    Windows?Phone?8: This API is supported.

    +
    + + ff476468 + void ID3D11DeviceContext::PSGetShader([Out, Optional] ID3D11PixelShader** ppPixelShader,[Out, Buffer, Optional] ID3D11ClassInstance** ppClassInstances,[InOut] unsigned int* pNumClassInstances) + ID3D11DeviceContext::PSGetShader +
    + + +

    Get an array of sampler states from the pixel shader pipeline stage.

    +
    +

    Index into a zero-based array to begin getting samplers from (ranges from 0 to - 1).

    +

    Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to - StartSlot).

    +

    Arry of sampler-state interface references (see ) to be returned by the device.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476467 + void ID3D11DeviceContext::PSGetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[Out, Buffer, Optional] ID3D11SamplerState** ppSamplers) + ID3D11DeviceContext::PSGetSamplers +
    + + +

    Get the constant buffers used by the pixel shader pipeline stage.

    +
    +

    Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to - 1).

    +

    Number of buffers to retrieve (ranges from 0 to - StartSlot).

    +

    Array of constant buffer interface references (see ) to be returned by the method.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476466 + void ID3D11DeviceContext::PSGetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers) + ID3D11DeviceContext::PSGetConstantBuffers +
    + + +

    A predicate interface determines whether geometry should be processed depending on the results of a previous draw call.

    +
    + +

    To create a predicate object, call . To set the predicate object, call .

    There are two types of predicates: stream-output-overflow predicates and occlusion predicates. Stream-output-overflow predicates cause any geometry residing in stream-output buffers that were overflowed to not be processed. Occlusion predicates cause any geometry that did not have a single sample pass the depth/stencil tests to not be processed.

    +
    + + ff476577 + ID3D11Predicate + ID3D11Predicate +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The query description. + The newly created object. + + + +

    A query interface queries information from the GPU.

    +
    + +

    A query can be created with .

    Query data is typically gathered by issuing an command, issuing some graphics commands, issuing an command, and then calling to get data about what happened in between the Begin and End calls. The data returned by GetData will be different depending on the type of query.

    There are, however, some queries that do not require calls to Begin. For a list of possible queries see .

    A query is typically executed as shown in the following code:

      queryDesc;	
    +            ... // Fill out queryDesc structure	
    +             * pQuery;	
    +            pDevice->CreateQuery(&queryDesc, &pQuery);	
    +            pDeviceContext->Begin(pQuery); ... // Issue graphics commands pDeviceContext->End(pQuery);	
    +            UINT64 queryData; // This data type is different depending on the query type while(  != pDeviceContext->GetData(pQuery, &queryData, sizeof(UINT64), 0) )	
    +            {	
    +            }	
    +            

    When using a query that does not require a call to Begin, it still requires a call to End. The call to End causes the data returned by GetData to be accurate up until the last call to End.

    +
    + + ff476578 + ID3D11Query + ID3D11Query +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a query description.

    +
    + + ff476579 + GetDesc + GetDesc + void ID3D11Query::GetDesc([Out] D3D11_QUERY_DESC* pDesc) +
    + + +

    Get a query description.

    +
    +

    Pointer to a query description (see ).

    + + ff476579 + void ID3D11Query::GetDesc([Out] D3D11_QUERY_DESC* pDesc) + ID3D11Query::GetDesc +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The query description. + The newly created object. + + + +

    Represents a query object for querying information from the graphics processing unit (GPU).

    +
    + +

    A query can be created with .

    Query data is typically gathered by issuing an command, issuing some graphics commands, issuing an command, and then calling to get data about what happened in between the Begin and End calls. The data returned by GetData will be different depending on the type of query.

    There are, however, some queries that do not require calls to Begin. For a list of possible queries see .

    When using a query that does not require a call to Begin, it still requires a call to End. The call to End causes the data returned by GetData to be accurate up until the last call to End.

    +
    + + dn899236 + ID3D11Query1 + ID3D11Query1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a query description.

    +
    + + dn899237 + GetDesc1 + GetDesc1 + void ID3D11Query1::GetDesc1([Out] D3D11_QUERY_DESC1* pDesc1) +
    + + +

    Gets a query description.

    +
    +

    A reference to a structure that receives a description of the query.

    + + dn899237 + void ID3D11Query1::GetDesc1([Out] D3D11_QUERY_DESC1* pDesc1) + ID3D11Query1::GetDesc1 +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The query description. + The newly created object. + + + +

    The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage.

    +
    + +

    To create a rasterizer-state object, call . To bind the rasterizer-state object to the rasterizer stage, call .

    +
    + + ff476580 + ID3D11RasterizerState + ID3D11RasterizerState +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the description for rasterizer state that you used to create the rasterizer-state object.

    +
    + +

    You use the description for rasterizer state in a call to the method to create the rasterizer-state object.

    +
    + + ff476581 + GetDesc + GetDesc + void ID3D11RasterizerState::GetDesc([Out] D3D11_RASTERIZER_DESC* pDesc) +
    + + +

    Gets the description for rasterizer state that you used to create the rasterizer-state object.

    +
    +

    A reference to a structure that receives a description of the rasterizer state.

    + +

    You use the description for rasterizer state in a call to the method to create the rasterizer-state object.

    +
    + + ff476581 + void ID3D11RasterizerState::GetDesc([Out] D3D11_RASTERIZER_DESC* pDesc) + ID3D11RasterizerState::GetDesc +
    + + +

    Create a rasterizer state object that tells the rasterizer stage how to behave.

    +
    + The device with which to associate the state object. + A rasterizer state description + +

    4096 unique rasterizer state objects can be created on a device at a time.

    If an application attempts to create a rasterizer-state interface with the same state as an existing interface, the same interface will be returned and the total number of unique rasterizer state objects will stay the same.

    +
    + ff476516 + HRESULT ID3D11Device::CreateRasterizerState([In] const D3D11_RASTERIZER_DESC* pRasterizerDesc,[Out, Fast] ID3D11RasterizerState** ppRasterizerState) + ID3D11Device::CreateRasterizerState +
    + + +

    The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage. This rasterizer-state interface supports forced sample count.

    +
    + +

    To create a rasterizer-state object, call . To bind the rasterizer-state object to the rasterizer stage, call .

    +
    + + hh446828 + ID3D11RasterizerState1 + ID3D11RasterizerState1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the description for rasterizer state that you used to create the rasterizer-state object.

    +
    + +

    You use the description for rasterizer state in a call to the method to create the rasterizer-state object.

    +
    + + hh446830 + GetDesc1 + GetDesc1 + void ID3D11RasterizerState1::GetDesc1([Out] D3D11_RASTERIZER_DESC1* pDesc) +
    + + +

    Gets the description for rasterizer state that you used to create the rasterizer-state object.

    +
    +

    A reference to a structure that receives a description of the rasterizer state. This rasterizer state can specify forced sample count.

    + +

    You use the description for rasterizer state in a call to the method to create the rasterizer-state object.

    +
    + + hh446830 + void ID3D11RasterizerState1::GetDesc1([Out] D3D11_RASTERIZER_DESC1* pDesc) + ID3D11RasterizerState1::GetDesc1 +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + +

    The rasterizer-state interface holds a description for rasterizer state that you can bind to the rasterizer stage. This rasterizer-state interface supports forced sample count and conservative rasterization mode.

    +
    + +

    To create a rasterizer-state object, call . To bind the rasterizer-state object to the rasterizer stage, call .

    +
    + + dn899238 + ID3D11RasterizerState2 + ID3D11RasterizerState2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the description for rasterizer state that you used to create the rasterizer-state object.

    +
    + +

    You use the description for rasterizer state in a call to the method to create the rasterizer-state object.

    +
    + + dn899239 + GetDesc2 + GetDesc2 + void ID3D11RasterizerState2::GetDesc2([Out] D3D11_RASTERIZER_DESC2* pDesc) +
    + + +

    Gets the description for rasterizer state that you used to create the rasterizer-state object.

    +
    +

    A reference to a structure that receives a description of the rasterizer state. This rasterizer state can specify forced sample count and conservative rasterization mode.

    + +

    You use the description for rasterizer state in a call to the method to create the rasterizer-state object.

    +
    + + dn899239 + void ID3D11RasterizerState2::GetDesc2([Out] D3D11_RASTERIZER_DESC2* pDesc) + ID3D11RasterizerState2::GetDesc2 +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + + + +

    Sets graphics processing unit (GPU) debug reference default tracking options for specific resource types.

    +
    + +

    This API requires the Windows Software Development Kit (SDK) for Windows?8.

    +
    + + hh446834 + ID3D11RefDefaultTrackingOptions + ID3D11RefDefaultTrackingOptions +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets graphics processing unit (GPU) debug reference default tracking options for specific resource types.

    +
    +

    A -typed value that specifies the type of resource to track.

    +

    A combination of D3D11_SHADER_TRACKING_OPTIONS-typed flags that are combined by using a bitwise OR operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."

    +

    This method returns one of the Direct3D 11 return codes.

    + +

    This API requires the Windows Software Development Kit (SDK) for Windows?8.

    +
    + + hh446834 + HRESULT ID3D11RefDefaultTrackingOptions::SetTrackingOptions([In] unsigned int ResourceTypeFlags,[In] unsigned int Options) + ID3D11RefDefaultTrackingOptions::SetTrackingOptions +
    + + +

    Sets graphics processing unit (GPU) debug reference tracking options.

    +
    + +

    This API requires the Windows Software Development Kit (SDK) for Windows?8.

    +
    + + hh446838 + ID3D11RefTrackingOptions + ID3D11RefTrackingOptions +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets graphics processing unit (GPU) debug reference tracking options.

    +
    + +

    This API requires the Windows Software Development Kit (SDK) for Windows?8.

    +
    + + hh446838 + SetTrackingOptions + SetTrackingOptions + HRESULT ID3D11RefTrackingOptions::SetTrackingOptions([In] unsigned int uOptions) +
    + + +

    Sets graphics processing unit (GPU) debug reference tracking options.

    +
    +

    A combination of D3D11_SHADER_TRACKING_OPTIONS-typed flags that are combined by using a bitwise OR operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."

    +

    This method returns one of the Direct3D 11 return codes.

    + +

    This API requires the Windows Software Development Kit (SDK) for Windows?8.

    +
    + + hh446838 + HRESULT ID3D11RefTrackingOptions::SetTrackingOptions([In] unsigned int uOptions) + ID3D11RefTrackingOptions::SetTrackingOptions +
    + + +

    A render-target-view interface identifies the render-target subresources that can be accessed during rendering.

    +
    + +

    To create a render-target view, call . To bind a render-target view to the pipeline, call .

    A rendertarget is a resource that can be written by the output-merger stage at the end of a render pass. Each render-target should also have a corresponding depth-stencil view.

    +
    + + ff476582 + ID3D11RenderTargetView + ID3D11RenderTargetView +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of a render target view.

    +
    + + ff476583 + GetDesc + GetDesc + void ID3D11RenderTargetView::GetDesc([Out] D3D11_RENDER_TARGET_VIEW_DESC* pDesc) +
    + + +

    Get the properties of a render target view.

    +
    +

    Pointer to the description of a render target view (see ).

    + + ff476583 + void ID3D11RenderTargetView::GetDesc([Out] D3D11_RENDER_TARGET_VIEW_DESC* pDesc) + ID3D11RenderTargetView::GetDesc +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the RenderTarget flag. + ID3D11Device::CreateRenderTargetView + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the RenderTarget flag. + A structure describing the to be created. + ID3D11Device::CreateRenderTargetView + + + +

    A render-target-view interface represents the render-target subresources that can be accessed during rendering.

    +
    + +

    To create a render-target view, call . To bind a render-target view to the pipeline, call .

    A render target is a resource that can be written by the output-merger stage at the end of a render pass. Each render target can also have a corresponding depth-stencil view.

    +
    + + dn899240 + ID3D11RenderTargetView1 + ID3D11RenderTargetView1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the properties of a render-target view.

    +
    + + dn899241 + GetDesc1 + GetDesc1 + void ID3D11RenderTargetView1::GetDesc1([Out] D3D11_RENDER_TARGET_VIEW_DESC1* pDesc1) +
    + + +

    Gets the properties of a render-target view.

    +
    +

    A reference to a structure that receives the description of the render-target view.

    + + dn899241 + void ID3D11RenderTargetView1::GetDesc1([Out] D3D11_RENDER_TARGET_VIEW_DESC1* pDesc1) + ID3D11RenderTargetView1::GetDesc1 +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the RenderTarget flag. + ID3D11Device3::CreateRenderTargetView1 + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the RenderTarget flag. + A structure describing the to be created. + ID3D11Device3::CreateRenderTargetView1 + + + +

    A resource interface provides common actions on all resources.

    +
    + +

    You don't directly create a resource interface; instead, you create buffers and textures that inherit from a resource interface. For more info, see How to: Create a Vertex Buffer, How to: Create an Index Buffer, How to: Create a Constant Buffer, and How to: Create a Texture.

    +
    + + ff476584 + ID3D11Resource + ID3D11Resource +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant MaximumMipLevels. + D3D11_REQ_MIP_LEVELS + + + Constant ResourceSizeInMegabytes. + D3D11_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM + + + Constant MaximumTexture1DArraySize. + D3D11_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION + + + Constant MaximumTexture2DArraySize. + D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION + + + Constant MaximumTexture1DSize. + D3D11_REQ_TEXTURE1D_U_DIMENSION + + + Constant MaximumTexture2DSize. + D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION + + + Constant MaximumTexture3DSize. + D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION + + + Constant MaximumTextureCubeSize. + D3D11_REQ_TEXTURECUBE_DIMENSION + + + +

    Get the type of the resource.

    +
    + +

    Windows?Phone?8: This API is supported.

    +
    + + ff476586 + GetType + GetType + void ID3D11Resource::GetType([Out] D3D11_RESOURCE_DIMENSION* pResourceDimension) +
    + + +

    Get or sets the eviction priority of a resource.

    +
    + + ff476585 + GetEvictionPriority / SetEvictionPriority + GetEvictionPriority + unsigned int ID3D11Resource::GetEvictionPriority() +
    + + +

    Get the type of the resource.

    +
    +

    Pointer to the resource type (see ).

    + +

    Windows?Phone?8: This API is supported.

    +
    + + ff476586 + void ID3D11Resource::GetType([Out] D3D11_RESOURCE_DIMENSION* pResourceDimension) + ID3D11Resource::GetType +
    + + +

    Set the eviction priority of a resource.

    +
    +

    Eviction priority for the resource, which is one of the following values:

    + +

    Resource priorities determine which resource to evict from video memory when the system has run out of video memory. The resource will not be lost; it will be removed from video memory and placed into system memory, or possibly placed onto the hard drive. The resource will be loaded back into video memory when it is required.

    A resource that is set to the maximum priority, , is only evicted if there is no other way of resolving the incoming memory request. The Windows Display Driver Model (WDDM) tries to split an incoming memory request to its minimum size and evict lower-priority resources before evicting a resource with maximum priority.

    Changing the priorities of resources should be done carefully. The wrong eviction priorities could be a detriment to performance rather than an improvement.

    +
    + + ff476587 + void ID3D11Resource::SetEvictionPriority([In] unsigned int EvictionPriority) + ID3D11Resource::SetEvictionPriority +
    + + +

    Get the eviction priority of a resource.

    +
    +

    One of the following values, which specifies the eviction priority for the resource:

    + + ff476585 + unsigned int ID3D11Resource::GetEvictionPriority() + ID3D11Resource::GetEvictionPriority +
    + + + Gets a swap chain back buffer. + + The type of the buffer. + The swap chain to get the buffer from. + The index of the desired buffer. + The buffer interface, or null on failure. + + + + Calculates the sub resource index from a miplevel. + + A zero-based index for the mipmap level to address; 0 indicates the first, most detailed mipmap level. + The zero-based index for the array level to address; always use 0 for volume (3D) textures. + Number of mipmap levels in the resource. + + The index which equals MipSlice + (ArraySlice * MipLevels). + + D3D11CalcSubresource + + + + Calculates the resulting size at a single level for an original size. + + The mip level to get the size. + Size of the base. + + Size of the mipLevel + + + + + Calculates the sub resource index for a particular mipSlice and arraySlice. + + The mip slice. + The array slice. + The size of slice. This values is resource dependent. Texture1D -> mipSize of the Width. Texture2D -> mipSize of the Height. Texture3D -> mipsize of the Depth + The resulting miplevel calulated for this instance with this mipSlice and arraySlice. + + + +

    A view interface specifies the parts of a resource the pipeline can access during rendering.

    +
    + +

    A view interface is the base interface for all views. There are four types of views; a depth-stencil view, a render-target view, a shader-resource view, and an unordered-access view.

    • To create a render-target view, call .
    • To create a depth-stencil view, call .
    • To create a shader-resource view, call .
    • To create an unordered-access view, call .

    All resources must be bound to the pipeline before they can be accessed.

    • To bind a render-target view or a depth-stencil view, call .
    • To bind a shader resource, call .
    +
    + + ff476642 + ID3D11View + ID3D11View +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the resource that is accessed through this view.

    +
    +

    Address of a reference to the resource that is accessed through this view. (See .)

    + +

    This function increments the reference count of the resource by one, so it is necessary to call Release on the returned reference when the application is done with it. Destroying (or losing) the returned reference before Release is called will result in a memory leak.

    +
    + + ff476643 + void ID3D11View::GetResource([Out] void** ppResource) + ID3D11View::GetResource +
    + + +

    Get the resource that is accessed through this view.

    +
    + +

    This function increments the reference count of the resource by one, so it is necessary to call Release on the returned reference when the application is done with it. Destroying (or losing) the returned reference before Release is called will result in a memory leak.

    +
    + ff476643 + GetResource + GetResource + void ID3D11View::GetResource([Out] ID3D11Resource** ppResource) +
    + + +

    Get the resource that is accessed through this view.

    +
    + +

    This function increments the reference count of the resource by one, so it is necessary to call Dispose on the returned reference when the application is done with it. Destroying (or losing) the returned reference before Release is called will result in a memory leak.

    +
    + ff476643 + GetResource + GetResource + void ID3D11View::GetResource([Out] ID3D11Resource** ppResource) +
    + + +

    The sampler-state interface holds a description for sampler state that you can bind to any shader stage of the pipeline for reference by texture sample operations.

    +
    + +

    To create a sampler-state object, call .

    To bind a sampler-state object to any pipeline shader stage, call the following methods:

    You can bind the same sampler-state object to multiple shader stages simultaneously.

    +
    + + ff476588 + ID3D11SamplerState + ID3D11SamplerState +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the description for sampler state that you used to create the sampler-state object.

    +
    + +

    You use the description for sampler state in a call to the method to create the sampler-state object.

    +
    + + ff476589 + GetDesc + GetDesc + void ID3D11SamplerState::GetDesc([Out] D3D11_SAMPLER_DESC* pDesc) +
    + + +

    Gets the description for sampler state that you used to create the sampler-state object.

    +
    +

    A reference to a structure that receives a description of the sampler state.

    + +

    You use the description for sampler state in a call to the method to create the sampler-state object.

    +
    + + ff476589 + void ID3D11SamplerState::GetDesc([Out] D3D11_SAMPLER_DESC* pDesc) + ID3D11SamplerState::GetDesc +
    + + + Constructs a new based on the specified description. + + The device with which to associate the state object. + The state description. + The newly created object. + ff476518 + HRESULT ID3D11Device::CreateSamplerState([In] const D3D11_SAMPLER_DESC* pSamplerDesc,[Out, Fast] ID3D11SamplerState** ppSamplerState) + ID3D11Device::CreateSamplerState + + + +

    A shader-resource-view interface specifies the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, and a texture.

    +
    + +

    To create a shader-resource view, call .

    A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling , or .

    +
    + + ff476628 + ID3D11ShaderResourceView + ID3D11ShaderResourceView +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the shader resource view's description.

    +
    + + ff476629 + GetDesc + GetDesc + void ID3D11ShaderResourceView::GetDesc([Out] D3D11_SHADER_RESOURCE_VIEW_DESC* pDesc) +
    + + +

    Get the shader resource view's description.

    +
    +

    A reference to a structure to be filled with data about the shader resource view.

    + + ff476629 + void ID3D11ShaderResourceView::GetDesc([Out] D3D11_SHADER_RESOURCE_VIEW_DESC* pDesc) + ID3D11ShaderResourceView::GetDesc +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the ShaderResource flag. + ff476519 + HRESULT ID3D11Device::CreateShaderResourceView([In] ID3D11Resource* pResource,[In, Optional] const D3D11_SHADER_RESOURCE_VIEW_DESC* pDesc,[Out, Fast] ID3D11ShaderResourceView** ppSRView) + ID3D11Device::CreateShaderResourceView + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the ShaderResource flag. + A structure describing the to be created. + ff476519 + HRESULT ID3D11Device::CreateShaderResourceView([In] ID3D11Resource* pResource,[In, Optional] const D3D11_SHADER_RESOURCE_VIEW_DESC* pDesc,[Out, Fast] ID3D11ShaderResourceView** ppSRView) + ID3D11Device::CreateShaderResourceView + + + +

    A shader-resource-view interface represents the subresources a shader can access during rendering. Examples of shader resources include a constant buffer, a texture buffer, and a texture.

    +
    + +

    To create a shader-resource view, call .

    A shader-resource view is required when binding a resource to a shader stage; the binding occurs by calling , or .

    +
    + + dn899242 + ID3D11ShaderResourceView1 + ID3D11ShaderResourceView1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the shader-resource view's description.

    +
    + + dn899243 + GetDesc1 + GetDesc1 + void ID3D11ShaderResourceView1::GetDesc1([Out] D3D11_SHADER_RESOURCE_VIEW_DESC1* pDesc1) +
    + + +

    Gets the shader-resource view's description.

    +
    +

    A reference to a structure that receives the description of the shader-resource view.

    + + dn899243 + void ID3D11ShaderResourceView1::GetDesc1([Out] D3D11_SHADER_RESOURCE_VIEW_DESC1* pDesc1) + ID3D11ShaderResourceView1::GetDesc1 +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the ShaderResource flag. + ff476519 + HRESULT ID3D11Device3::CreateShaderResourceView1([In] ID3D11Resource* pResource,[In, Optional] const D3D11_SHADER_RESOURCE_VIEW_DESC1* pDesc,[Out, Fast] ID3D11ShaderResourceView1** ppSRView) + ID3D11Device3::CreateShaderResourceView1 + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the ShaderResource flag. + A structure describing the to be created. + ff476519 + HRESULT ID3D11Device3::CreateShaderResourceView1([In] ID3D11Resource* pResource,[In, Optional] const D3D11_SHADER_RESOURCE_VIEW_DESC1* pDesc,[Out, Fast] ID3D11ShaderResourceView1** ppSRView) + ID3D11Device3::CreateShaderResourceView1 + + + + Note?? The interface and its methods are not supported in Direct3D 11.? + + + ff476630 + ID3D11SwitchToRef + ID3D11SwitchToRef + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Note??The interface and its methods are not supported in Direct3D 11.? + + + ff476631 + GetUseRef + GetUseRef + BOOL ID3D11SwitchToRef::GetUseRef() + + + + Note??The interface and its methods are not supported in Direct3D 11.? + + No documentation. +

    Reserved.

    + + ff476632 + BOOL ID3D11SwitchToRef::SetUseRef([In] BOOL UseRef) + ID3D11SwitchToRef::SetUseRef +
    + + + Note??The interface and its methods are not supported in Direct3D 11.? + +

    Reserved.

    + + ff476631 + BOOL ID3D11SwitchToRef::GetUseRef() + ID3D11SwitchToRef::GetUseRef +
    + + +

    A 1D texture interface accesses texel data, which is structured memory.

    +
    + +

    To create an empty 1D texture, call . For info about how to create a 2D texture, which is similar to creating a 1D texture, see How to: Create a Texture.

    Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call , and , respectively. To use the texture as an input to a shader, create a by calling .

    +
    + + ff476633 + ID3D11Texture1D + ID3D11Texture1D +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of the texture resource.

    +
    + + ff476634 + GetDesc + GetDesc + void ID3D11Texture1D::GetDesc([Out] D3D11_TEXTURE1D_DESC* pDesc) +
    + + +

    Get the properties of the texture resource.

    +
    +

    Pointer to a resource description (see ).

    + + ff476634 + void ID3D11Texture1D::GetDesc([Out] D3D11_TEXTURE1D_DESC* pDesc) + ID3D11Texture1D::GetDesc +
    + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + ff476520 + HRESULT ID3D11Device::CreateTexture1D([In] const D3D11_TEXTURE1D_DESC* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture1D** ppTexture1D) + ID3D11Device::CreateTexture1D + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + ff476520 + HRESULT ID3D11Device::CreateTexture1D([In] const D3D11_TEXTURE1D_DESC* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture1D** ppTexture1D) + ID3D11Device::CreateTexture1D + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + ff476520 + HRESULT ID3D11Device::CreateTexture1D([In] const D3D11_TEXTURE1D_DESC* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture1D** ppTexture1D) + ID3D11Device::CreateTexture1D + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + ff476520 + HRESULT ID3D11Device::CreateTexture1D([In] const D3D11_TEXTURE1D_DESC* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture1D** ppTexture1D) + ID3D11Device::CreateTexture1D + + + + + + +

    A 2D texture interface manages texel data, which is structured memory.

    +
    + +

    To create an empty Texture2D resource, call . For info about how to create a 2D texture, see How to: Create a Texture.

    Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call , and , respectively. To use the texture as an input to a shader, create a by calling .

    +
    + + ff476635 + ID3D11Texture2D + ID3D11Texture2D +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of the texture resource.

    +
    + + ff476636 + GetDesc + GetDesc + void ID3D11Texture2D::GetDesc([Out] D3D11_TEXTURE2D_DESC* pDesc) +
    + + +

    Get the properties of the texture resource.

    +
    +

    Pointer to a resource description (see ).

    + + ff476636 + void ID3D11Texture2D::GetDesc([Out] D3D11_TEXTURE2D_DESC* pDesc) + ID3D11Texture2D::GetDesc +
    + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + ff476521 + HRESULT ID3D11Device::CreateTexture2D([In] const D3D11_TEXTURE2D_DESC* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture2D** ppTexture2D) + ID3D11Device::CreateTexture2D + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + ff476521 + HRESULT ID3D11Device::CreateTexture2D([In] const D3D11_TEXTURE2D_DESC* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture2D** ppTexture2D) + ID3D11Device::CreateTexture2D + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + ff476521 + HRESULT ID3D11Device::CreateTexture2D([In] const D3D11_TEXTURE2D_DESC* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture2D** ppTexture2D) + ID3D11Device::CreateTexture2D + + + + + + +

    A 2D texture interface represents texel data, which is structured memory.

    +
    + +

    To create an empty Texture2D resource, call . For info about how to create a 2D texture, see How to: Create a Texture.

    Textures can't be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render-target or depth-stencil resource, call , and , respectively. To use the texture as an input to a shader, call .

    +
    + + dn899244 + ID3D11Texture2D1 + ID3D11Texture2D1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the properties of the texture resource.

    +
    + + dn899245 + GetDesc1 + GetDesc1 + void ID3D11Texture2D1::GetDesc1([Out] D3D11_TEXTURE2D_DESC1* pDesc) +
    + + +

    Gets the properties of the texture resource.

    +
    +

    A reference to a structure that receives the description of the 2D texture.

    + + dn899245 + void ID3D11Texture2D1::GetDesc1([Out] D3D11_TEXTURE2D_DESC1* pDesc) + ID3D11Texture2D1::GetDesc1 +
    + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + ff476521 + HRESULT ID3D11Device3::CreateTexture2D1([In] const D3D11_TEXTURE2D_DESC1* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture2D1** ppTexture2D) + ID3D11Device3::CreateTexture2D1 + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + ff476521 + HRESULT ID3D11Device3::CreateTexture2D1([In] const D3D11_TEXTURE2D_DESC1* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture2D1** ppTexture2D) + ID3D11Device3::CreateTexture2D1 + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + ff476521 + HRESULT ID3D11Device3::CreateTexture2D1([In] const D3D11_TEXTURE2D_DESC1* pDesc,[In, Buffer, Optional] const D3D11_SUBRESOURCE_DATA* pInitialData,[Out, Fast] ID3D11Texture2D** ppTexture2D) + ID3D11Device3::CreateTexture2D1 + + + + + + +

    A 3D texture interface accesses texel data, which is structured memory.

    +
    + +

    To create an empty Texture3D resource, call . For info about how to create a 2D texture, which is similar to creating a 3D texture, see How to: Create a Texture.

    Textures cannot be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render target or depth-stencil resource, call , and , respectively. To use the texture as an input to a shader, create a by calling .

    +
    + + ff476637 + ID3D11Texture3D + ID3D11Texture3D +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the properties of the texture resource.

    +
    + + ff476638 + GetDesc + GetDesc + void ID3D11Texture3D::GetDesc([Out] D3D11_TEXTURE3D_DESC* pDesc) +
    + + +

    Get the properties of the texture resource.

    +
    +

    Pointer to a resource description (see ).

    + + ff476638 + void ID3D11Texture3D::GetDesc([Out] D3D11_TEXTURE3D_DESC* pDesc) + ID3D11Texture3D::GetDesc +
    + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + + + + + + +

    A 3D texture interface represents texel data, which is structured memory.

    +
    + +

    To create an empty Texture3D resource, call . For info about how to create a 2D texture, which is similar to creating a 3D texture, see How to: Create a Texture.

    Textures can't be bound directly to the pipeline; instead, a view must be created and bound. Using a view, texture data can be interpreted at run time within certain restrictions. To use the texture as a render-target or depth-stencil resource, call , and , respectively. To use the texture as an input to a shader, call .

    +
    + + dn899246 + ID3D11Texture3D1 + ID3D11Texture3D1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the properties of the texture resource.

    +
    + + dn899247 + GetDesc1 + GetDesc1 + void ID3D11Texture3D1::GetDesc1([Out] D3D11_TEXTURE3D_DESC1* pDesc) +
    + + +

    Gets the properties of the texture resource.

    +
    +

    A reference to a structure that receives the description of the 3D texture.

    + + dn899247 + void ID3D11Texture3D1::GetDesc1([Out] D3D11_TEXTURE3D_DESC1* pDesc) + ID3D11Texture3D1::GetDesc1 +
    + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + + + + Initializes a new instance of the class. + + The device with which to associate the texture. + The description of the texture. + An array of initial texture data for each subresource. + + + + + + +

    The tracing device interface sets shader tracking information, which enables accurate logging and playback of shader execution.

    +
    + +

    To get this interface, turn on the debug layer and use IUnknown::QueryInterface from the .

    Note??This API requires the Windows Software Development Kit (SDK) for Windows?8.? +
    + + hh446868 + ID3D11TracingDevice + ID3D11TracingDevice +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the reference rasterizer's default race-condition tracking options for the specified resource types.

    +
    +

    A -typed value that specifies the type of resource to track.

    +

    A combination of D3D11_SHADER_TRACKING_OPTIONS-typed flags that are combined by using a bitwise OR operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on," otherwise the tracking option is set to "off."

    +

    This method returns one of the Direct3D 11 return codes.

    + +

    This API requires the Windows Software Development Kit (SDK) for Windows?8.

    +
    + + hh446874 + HRESULT ID3D11TracingDevice::SetShaderTrackingOptionsByType([In] unsigned int ResourceTypeFlags,[In] unsigned int Options) + ID3D11TracingDevice::SetShaderTrackingOptionsByType +
    + + +

    Sets the reference rasterizer's race-condition tracking options for a specific shader.

    +
    +

    A reference to the interface of a shader.

    +

    A combination of D3D11_SHADER_TRACKING_OPTIONS-typed flags that are combined by using a bitwise OR operation. The resulting value identifies tracking options. If a flag is present, the tracking option that the flag represents is set to "on"; otherwise the tracking option is set to "off."

    +

    This method returns one of the Direct3D 11 return codes.

    + + Note??After a call to SetShaderTrackingOptions, the tracking options that the Options parameter specifies are set for all calls by the shader that the pShader parameter specifies, until the next call to SetShaderTrackingOptions. If you set a flag that is specific to unordered access views (UAV) (for example, ) in the Options parameter for a compute shader, SetShaderTrackingOptions ignores it.?Note??This API requires the Windows Software Development Kit (SDK) for Windows?8.? + + + hh446871 + HRESULT ID3D11TracingDevice::SetShaderTrackingOptions([In] IUnknown* pShader,[In] unsigned int Options) + ID3D11TracingDevice::SetShaderTrackingOptions +
    + + +

    A view interface specifies the parts of a resource the pipeline can access during rendering.

    +
    + +

    To create a view for an unordered access resource, call .

    All resources must be bound to the pipeline before they can be accessed. Call to bind an unordered access view to a compute shader; call to bind an unordered access view to a pixel shader.

    +
    + + ff476639 + ID3D11UnorderedAccessView + ID3D11UnorderedAccessView +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a description of the resource.

    +
    + + ff476640 + GetDesc + GetDesc + void ID3D11UnorderedAccessView::GetDesc([Out] D3D11_UNORDERED_ACCESS_VIEW_DESC* pDesc) +
    + + +

    Get a description of the resource.

    +
    +

    Pointer to a resource description (see .)

    + + ff476640 + void ID3D11UnorderedAccessView::GetDesc([Out] D3D11_UNORDERED_ACCESS_VIEW_DESC* pDesc) + ID3D11UnorderedAccessView::GetDesc +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the UnorderedAccess flag. + ID3D11Device::CreateUnorderedAccessView + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the UnorderedAccess flag. + A structure describing the to be created. + ID3D11Device::CreateUnorderedAccessView + + + +

    An unordered-access-view interface represents the parts of a resource the pipeline can access during rendering.

    +
    + +

    To create a view for an unordered access resource, call .

    All resources must be bound to the pipeline before they can be accessed. Call to bind an unordered access view to a compute shader; call to bind an unordered access view to a pixel shader.

    +
    + + dn899248 + ID3D11UnorderedAccessView1 + ID3D11UnorderedAccessView1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a description of the resource.

    +
    + + dn899249 + GetDesc1 + GetDesc1 + void ID3D11UnorderedAccessView1::GetDesc1([Out] D3D11_UNORDERED_ACCESS_VIEW_DESC1* pDesc1) +
    + + +

    Gets a description of the resource.

    +
    +

    A reference to a structure that receives the description of the unordered-access resource.

    + + dn899249 + void ID3D11UnorderedAccessView1::GetDesc1([Out] D3D11_UNORDERED_ACCESS_VIEW_DESC1* pDesc1) + ID3D11UnorderedAccessView1::GetDesc1 +
    + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the UnorderedAccess flag. + ID3D11Device3::CreateUnorderedAccessView1 + + + + Creates a for accessing resource data. + + The device to use when creating this . + The resource that represents the render-target surface. This surface must have been created with the UnorderedAccess flag. + A structure describing the to be created. + ID3D11Device3::CreateUnorderedAccessView1 + + + +

    The interface enables an application to describe conceptual sections and markers within the application's code flow. An appropriately enabled tool, such as Microsoft Visual Studio Ultimate?2012, can display these sections and markers visually along the tool's Microsoft Direct3D time line, while the tool debugs the application. These visual notes allow users of such a tool to navigate to parts of the time line that are of interest, or to understand what set of Direct3D calls are produced by certain sections of the application's code.

    +
    + +

    The methods of have no effect when the calling application is not running under a Direct3D-specific profiling tool like Visual Studio Ultimate?2012. +

    The interface is published by Microsoft Direct3D?11 device contexts. Therefore, has the same threading rules as the interface, or any other context interface. For more information about Direct3D threading, see MultiThreading. + To retrieve the interface for the context, call the QueryInterface method for the context (for example, ID3D11DeviceContext::QueryInterface). In this call, you must pass the identifier of .

    The interface is the Microsoft Direct3D?10 and later equivalent of the Direct3D 9 PIX functions (D3DPERF_* functions).

    Note??Setting the flag in your app replaces calling D3DPerf_SetOptions(1). But, to prevent Direct3D debugging tools from hooking your app, your app can also call to determine whether it is running under a Direct3D debugging tool and then exit accordingly.?

    You must call the BeginEvent and EndEvent methods in pairs; pairs of calls to these methods can nest within pairs of calls to these methods at a higher level in the application's call stack. In other words, a "Draw World" section can entirely contain another section named "Draw Trees," which can in turn entirely contain a section called "Draw Oaks." You can only associate an EndEvent method with the most recent BeginEvent method, that is, pairs cannot overlap. You cannot call an EndEvent for any BeginEvent that preceded the most recent BeginEvent. In fact, the runtime interprets the first EndEvent as ending the second BeginEvent.

    +
    + + hh446881 + ID3DUserDefinedAnnotation + ID3DUserDefinedAnnotation +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Determines whether the calling application is running under a Microsoft Direct3D profiling tool.

    +
    + +

    You can call GetStatus to determine whether your application is running under a Direct3D profiling tool before you make further calls to other methods of the interface. For example, the and methods have no effect if the calling application is not running under an enabled Direct3D profiling tool. Therefore, you do not need to call these methods unless your application is running under a Direct3D profiling tool.

    +
    + + hh446889 + GetStatus + GetStatus + BOOL ID3DUserDefinedAnnotation::GetStatus() +
    + + +

    Marks the beginning of a section of event code.

    +
    +

    A null-terminated UNICODE string that contains the name of the event. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool.A null reference produces undefined results.

    +

    Returns the number of previous calls to BeginEvent that have not yet been finalized by calls to the method.

    The return value is ?1 if the calling application is not running under a Direct3D profiling tool.

    + +

    You call the EndEvent method to mark the end of the section of event code.

    A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.

    BeginEvent has no effect if the calling application is not running under an enabled Direct3D profiling tool.

    +
    + + hh446884 + int ID3DUserDefinedAnnotation::BeginEvent([In] const wchar_t* Name) + ID3DUserDefinedAnnotation::BeginEvent +
    + + +

    Marks the end of a section of event code.

    +
    +

    Returns the number of previous calls to the method that have not yet been finalized by calls to EndEvent.

    The return value is ?1 if the calling application is not running under a Direct3D profiling tool.

    + +

    You call the BeginEvent method to mark the beginning of the section of event code.

    A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.

    EndEvent has no effect if the calling application is not running under an enabled Direct3D profiling tool.

    +
    + + hh446886 + int ID3DUserDefinedAnnotation::EndEvent() + ID3DUserDefinedAnnotation::EndEvent +
    + + +

    Marks a single point of execution in code.

    +
    +

    A null-terminated UNICODE string that contains the name of the marker. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool.A null reference produces undefined results.

    + +

    A user can visualize the marker when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.

    SetMarker has no effect if the calling application is not running under an enabled Direct3D profiling tool.

    +
    + + hh446898 + void ID3DUserDefinedAnnotation::SetMarker([In] const wchar_t* Name) + ID3DUserDefinedAnnotation::SetMarker +
    + + +

    Determines whether the calling application is running under a Microsoft Direct3D profiling tool.

    +
    +

    The return value is nonzero if the calling application is running under a Direct3D profiling tool such as Visual Studio Ultimate?2012, and zero otherwise.

    + +

    You can call GetStatus to determine whether your application is running under a Direct3D profiling tool before you make further calls to other methods of the interface. For example, the and methods have no effect if the calling application is not running under an enabled Direct3D profiling tool. Therefore, you do not need to call these methods unless your application is running under a Direct3D profiling tool.

    +
    + + hh446889 + BOOL ID3DUserDefinedAnnotation::GetStatus() + ID3DUserDefinedAnnotation::GetStatus +
    + + +

    A vertex-shader interface manages an executable program (a vertex shader) that controls the vertex-shader stage.

    +
    + +

    The vertex-shader interface has no methods; use HLSL to implement your shader functionality. All shaders are implemented from a common set of features referred to as the common-shader core..

    To create a vertex shader interface, call . Before using a vertex shader you must bind it to the device by calling .

    This interface is defined in D3D11.h.

    +
    + + ff476641 + ID3D11VertexShader + ID3D11VertexShader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + Initializes a new instance of the class. + + The device used to create the shader. + The compiled shader bytecode. + A dynamic class linkage interface. + + + +

    The interface represents a device context which generates rendering commands.

    +
    + + ff476385 + ID3D11DeviceContext + ID3D11DeviceContext +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Sets the constant buffers used by the vertex shader pipeline stage.

    +
    +

    Index into the device's zero-based array to begin setting constant buffers to (ranges from 0 to - 1).

    +

    Number of buffers to set (ranges from 0 to - StartSlot).

    +

    Array of constant buffers (see ) being given to the device.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The Direct3D 11.1 runtime, which is available starting with Windows?8, can bind a larger number of resources to the shader than the maximum constant buffer size that is supported by shaders (4096 constants ? 4*32-bit components each). When you bind such a large buffer, the shader can access only the first 4096 4*32-bit component constants in the buffer, as if 4096 constants is the full size of the buffer.

    If the application wants the shader to access other parts of the buffer, it must call the VSSetConstantBuffers1 method instead.

    Windows?Phone?8: This API is supported.

    +
    + + ff476491 + void ID3D11DeviceContext::VSSetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[In, Buffer, Optional] const void** ppConstantBuffers) + ID3D11DeviceContext::VSSetConstantBuffers +
    + + +

    Set a vertex shader to the device.

    +
    +

    Pointer to a vertex shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476493 + void ID3D11DeviceContext::VSSetShader([In, Optional] ID3D11VertexShader* pVertexShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::VSSetShader +
    + + +

    Set a vertex shader to the device.

    +
    +

    Pointer to a vertex shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476493 + void ID3D11DeviceContext::VSSetShader([In, Optional] ID3D11VertexShader* pVertexShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::VSSetShader +
    + + +

    Set a vertex shader to the device.

    +
    +

    Pointer to a vertex shader (see ). Passing in null disables the shader for this pipeline stage.

    +

    A reference to an array of class-instance interfaces (see ). Each interface used by a shader must have a corresponding class instance or the shader will get disabled. Set ppClassInstances to null if the shader does not use any interfaces.

    +

    The number of class-instance interfaces in the array.

    + +

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    The maximum number of instances a shader can have is 256.

    +
    + + ff476493 + void ID3D11DeviceContext::VSSetShader([In, Optional] ID3D11VertexShader* pVertexShader,[In, Buffer, Optional] const ID3D11ClassInstance** ppClassInstances,[In] unsigned int NumClassInstances) + ID3D11DeviceContext::VSSetShader +
    + + +

    Bind an array of shader resources to the vertex-shader stage.

    +
    +

    Index into the device's zero-based array to begin setting shader resources to (range is from 0 to - 1).

    +

    Number of shader resources to set. Up to a maximum of 128 slots are available for shader resources (range is from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to set to the device.

    + +

    If an overlapping resource view is already bound to an output slot, such as a rendertarget, then this API will fill the destination shader resource slot with null.

    For information about creating shader-resource views, see .

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476494 + void ID3D11DeviceContext::VSSetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[In, Buffer, Optional] const void** ppShaderResourceViews) + ID3D11DeviceContext::VSSetShaderResources +
    + + +

    Set an array of sampler states to the vertex shader pipeline stage.

    +
    +

    Index into the device's zero-based array to begin setting samplers to (ranges from 0 to - 1).

    +

    Number of samplers in the array. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to - StartSlot).

    +

    Pointer to an array of sampler-state interfaces (see ). See Remarks.

    + +

    Any sampler may be set to null; this invokes the default state, which is defined to be the following.

     //Default sampler state:	
    +             SamplerDesc;	
    +            SamplerDesc.Filter = ;	
    +            SamplerDesc.AddressU = ;	
    +            SamplerDesc.AddressV = ;	
    +            SamplerDesc.AddressW = ;	
    +            SamplerDesc.MipLODBias = 0;	
    +            SamplerDesc.MaxAnisotropy = 1;	
    +            SamplerDesc.ComparisonFunc = ;	
    +            SamplerDesc.BorderColor[0] = 1.0f;	
    +            SamplerDesc.BorderColor[1] = 1.0f;	
    +            SamplerDesc.BorderColor[2] = 1.0f;	
    +            SamplerDesc.BorderColor[3] = 1.0f;	
    +            SamplerDesc.MinLOD = -FLT_MAX;	
    +            SamplerDesc.MaxLOD = FLT_MAX; 

    The method will hold a reference to the interfaces passed in. This differs from the device state behavior in Direct3D 10.

    +
    + + ff476492 + void ID3D11DeviceContext::VSSetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[In, Buffer, Optional] const void** ppSamplers) + ID3D11DeviceContext::VSSetSamplers +
    + + +

    Get the constant buffers used by the vertex shader pipeline stage.

    +
    +

    Index into the device's zero-based array to begin retrieving constant buffers from (ranges from 0 to - 1).

    +

    Number of buffers to retrieve (ranges from 0 to - StartSlot).

    +

    Array of constant buffer interface references (see ) to be returned by the method.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476487 + void ID3D11DeviceContext::VSGetConstantBuffers([In] unsigned int StartSlot,[In] unsigned int NumBuffers,[Out, Buffer, Optional] ID3D11Buffer** ppConstantBuffers) + ID3D11DeviceContext::VSGetConstantBuffers +
    + + +

    Get the vertex shader currently set on the device.

    +
    +

    Address of a reference to a vertex shader (see ) to be returned by the method.

    +

    Pointer to an array of class instance interfaces (see ).

    +

    The number of class-instance elements in the array.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476489 + void ID3D11DeviceContext::VSGetShader([Out, Optional] ID3D11VertexShader** ppVertexShader,[Out, Buffer, Optional] ID3D11ClassInstance** ppClassInstances,[InOut] unsigned int* pNumClassInstances) + ID3D11DeviceContext::VSGetShader +
    + + +

    Get the vertex shader resources.

    +
    +

    Index into the device's zero-based array to begin getting shader resources from (ranges from 0 to - 1).

    +

    The number of resources to get from the device. Up to a maximum of 128 slots are available for shader resources (ranges from 0 to - StartSlot).

    +

    Array of shader resource view interfaces to be returned by the device.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476490 + void ID3D11DeviceContext::VSGetShaderResources([In] unsigned int StartSlot,[In] unsigned int NumViews,[Out, Buffer, Optional] ID3D11ShaderResourceView** ppShaderResourceViews) + ID3D11DeviceContext::VSGetShaderResources +
    + + +

    Get an array of sampler states from the vertex shader pipeline stage.

    +
    +

    Index into a zero-based array to begin getting samplers from (ranges from 0 to - 1).

    +

    Number of samplers to get from a device context. Each pipeline stage has a total of 16 sampler slots available (ranges from 0 to - StartSlot).

    +

    Arry of sampler-state interface references (see ) to be returned by the device.

    + +

    Any returned interfaces will have their reference count incremented by one. Applications should call IUnknown::Release on the returned interfaces when they are no longer needed to avoid memory leaks.

    +
    + + ff476488 + void ID3D11DeviceContext::VSGetSamplers([In] unsigned int StartSlot,[In] unsigned int NumSamplers,[Out, Buffer, Optional] ID3D11SamplerState** ppSamplers) + ID3D11DeviceContext::VSGetSamplers +
    + + +

    Provides the video functionality of a Microsoft Direct3D?11 device.

    +
    + +

    To get a reference to this interface, call QueryInterface with an interface reference.

    This interface provides access to several areas of Microsoft Direct3D video functionality:

    • Hardware-accelerated video decoding
    • Video processing
    • GPU-based content protection
    • Video encryption and decryption

    In Microsoft Direct3D?9, the equivalent functions were distributed across several interfaces:

    • IDirect3DAuthenticatedChannel9
    • IDirect3DCryptoSession9
    • IDirectXVideoDecoder
    • IDirectXVideoProcessor
    • IDXVAHD_VideoProcessor
    +
    + + hh447703 + ID3D11VideoContext + ID3D11VideoContext + +

    [This documentation is preliminary and is subject to change.]

    Applies to: desktop apps | Metro style apps

    Gets a reference to a DirectX Video Acceleration (DXVA) decoder buffer.

    +
    + +

    The graphics driver allocates the buffers that are used for DXVA decoding. This method locks the Microsoft Direct3D surface that contains the buffer. When you are done using the buffer, call to unlock the surface.

    +
    + + hh447711 + ID3D11VideoContext + ID3D11VideoContext +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a reference to a decoder buffer.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The type of buffer to retrieve, specified as a member of the enumeration.

    +

    Receives the size of the buffer, in bytes.

    +

    Receives a reference to the start of the memory buffer.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The graphics driver allocates the buffers that are used for decoding. This method locks the Microsoft Direct3D surface that contains the buffer. When you are done using the buffer, call to unlock the surface.

    +
    + + hh447711 + HRESULT ID3D11VideoContext::GetDecoderBuffer([In] ID3D11VideoDecoder* pDecoder,[In] D3D11_VIDEO_DECODER_BUFFER_TYPE Type,[Out] unsigned int* pBufferSize,[Out] void** ppBuffer) + ID3D11VideoContext::GetDecoderBuffer +
    + + +

    Releases a buffer that was obtained by calling the method.

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447716 + HRESULT ID3D11VideoContext::ReleaseDecoderBuffer([In] ID3D11VideoDecoder* pDecoder,[In] D3D11_VIDEO_DECODER_BUFFER_TYPE Type) + ID3D11VideoContext::ReleaseDecoderBuffer +
    + + +

    Starts a decoding operation to decode a video frame.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    A reference to the interface. This interface describes the resource that will receive the decoded frame. To get this reference, call .

    +

    The size of the content key that is specified in pContentKey. If pContentKey is null, set ContentKeySize to zero.

    +

    An optional reference to a content key that was used to encrypt the frame data. If no content key was used, set this parameter to null. If the caller provides a content key, the caller must use the session key to encrypt the content key.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code. D3DERR_WASSTILLDRAWING or E_PENDING is returned if the harware is busy, in which case the decoder should try to make the call again.

    + +

    After this method is called, call to perform decoding operations. When all decoding operations have been executed, call .

    Each call to DecoderBeginFrame must have a matching call to DecoderEndFrame. In most cases you cannot nest DecoderBeginFrame calls, but some codecs, such as like VC-1, can have nested DecoderBeginFrame calls for special operations like post processing.

    The following encryption scenarios are supported through the content key:

    • The decoder can choose to not encrypt every frame, for example it may only encrypt the I frames and not encrypt the P/B frames. In these scenario, the decoder will specify pContentKey = null and ContentKeySize = 0 for those frames that it does not encrypt.
    • The decoder can choose to encrypt the compressed buffers using the session key. In this scenario, the decoder will specify a content key containing all zeros.
    • The decoder can choose to encrypt the compressed buffers using a separate content key. In this scenario, the decoder will ECB encrypt the content key using the session key and pass the encrypted content key.
    +
    + + hh447705 + HRESULT ID3D11VideoContext::DecoderBeginFrame([In] ID3D11VideoDecoder* pDecoder,[In] ID3D11VideoDecoderOutputView* pView,[In] unsigned int ContentKeySize,[In, Buffer, Optional] const void* pContentKey) + ID3D11VideoContext::DecoderBeginFrame +
    + + +

    Signals the end of a decoding operation.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447706 + HRESULT ID3D11VideoContext::DecoderEndFrame([In] ID3D11VideoDecoder* pDecoder) + ID3D11VideoContext::DecoderEndFrame +
    + + +

    Submits one or more buffers for decoding.

    +
    +

    A reference to the interface. To get this reference, call the method.

    +

    The number of buffers submitted for decoding.

    +

    A reference to an array of structures. The NumBuffers parameter specifies the number of elements in the array. Each element in the array describes a compressed buffer for decoding.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This function does not honor a D3D11 predicate that may have been set.

    If the application uses D3D11 quries, this function may not be accounted for with and when using feature levels lower than 11. will not include this function for any feature level.

    When using feature levels 9_x, all partially encrypted buffers must use the same EncryptedBlockInfo, and partial encryption cannot be turned off on a per frame basis.

    +
    + + hh447718 + HRESULT ID3D11VideoContext::SubmitDecoderBuffers([In] ID3D11VideoDecoder* pDecoder,[In] unsigned int NumBuffers,[In, Buffer] const D3D11_VIDEO_DECODER_BUFFER_DESC* pBufferDesc) + ID3D11VideoContext::SubmitDecoderBuffers +
    + + +

    Performs an extended function for decoding. This method enables extensions to the basic decoder functionality.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    A reference to a structure that contains data for the function.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447707 + HRESULT ID3D11VideoContext::DecoderExtension([In] ID3D11VideoDecoder* pDecoder,[In] const D3D11_VIDEO_DECODER_EXTENSION* pExtensionData) + ID3D11VideoContext::DecoderExtension +
    + + +

    Sets the target rectangle for the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    Specifies whether to apply the target rectangle.

    +

    A reference to a structure that specifies the target rectangle. If Enable is , this parameter is ignored.

    + +

    The target rectangle is the area within the destination surface where the output will be drawn. The target rectangle is given in pixel coordinates, relative to the destination surface.

    If this method is never called, or if the Enable parameter is , the video processor writes to the entire destination surface.

    +
    + + hh447752 + void ID3D11VideoContext::VideoProcessorSetOutputTargetRect([In] ID3D11VideoProcessor* pVideoProcessor,[In] BOOL Enable,[In, Optional] const RECT* pRect) + ID3D11VideoContext::VideoProcessorSetOutputTargetRect +
    + + +

    Sets the background color for the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    If TRUE, the color is specified as a YCbCr value. Otherwise, the color is specified as an RGB value.

    +

    A reference to a structure that specifies the background color.

    + +

    The video processor uses the background color to fill areas of the target rectangle that do not contain a video image. Areas outside the target rectangle are not affected.

    +
    + + hh447747 + void ID3D11VideoContext::VideoProcessorSetOutputBackgroundColor([In] ID3D11VideoProcessor* pVideoProcessor,[In] BOOL YCbCr,[In] const D3D11_VIDEO_COLOR* pColor) + ID3D11VideoContext::VideoProcessorSetOutputBackgroundColor +
    + + +

    Sets the output color space for the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    A reference to a structure that specifies the color space.

    + + hh447748 + void ID3D11VideoContext::VideoProcessorSetOutputColorSpace([In] ID3D11VideoProcessor* pVideoProcessor,[In] const D3D11_VIDEO_PROCESSOR_COLOR_SPACE* pColorSpace) + ID3D11VideoContext::VideoProcessorSetOutputColorSpace +
    + + +

    Sets the alpha fill mode for data that the video processor writes to the render target.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The alpha fill mode, specified as a value.

    +

    The zero-based index of an input stream. This parameter is used if AlphaFillMode is . Otherwise, the parameter is ignored.

    + +

    To find out which fill modes the device supports, call the method. If the driver reports the capability, the driver supports all of the fill modes. Otherwise, the AlphaFillMode parameter must be .

    The default fill mode is .

    +
    + + hh447746 + void ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode([In] ID3D11VideoProcessor* pVideoProcessor,[In] D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE AlphaFillMode,[In] unsigned int StreamIndex) + ID3D11VideoContext::VideoProcessorSetOutputAlphaFillMode +
    + + +

    Sets the amount of downsampling to perform on the output.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    If TRUE, downsampling is enabled. Otherwise, downsampling is disabled and the Size member is ignored.

    +

    The sampling size.

    + +

    Downsampling is sometimes used to reduce the quality of premium content when other forms of content protection are not available. By default, downsampling is disabled.

    If the Enable parameter is TRUE, the driver downsamples the composed image to the specified size, and then scales it back to the size of the target rectangle.

    The width and height of Size must be greater than zero. If the size is larger than the target rectangle, downsampling does not occur.

    To use this feature, the driver must support downsampling, indicated by the capability flag. To query for this capability, call .

    +
    + + hh447749 + void ID3D11VideoContext::VideoProcessorSetOutputConstriction([In] ID3D11VideoProcessor* pVideoProcessor,[In] BOOL Enable,[In] SIZE Size) + ID3D11VideoContext::VideoProcessorSetOutputConstriction +
    + + +

    Specifies whether the video processor produces stereo video frames.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    If TRUE, stereo output is enabled. Otherwise, the video processor produces mono video frames.

    + +

    By default, the video processor produces mono video frames.

    To use this feature, the driver must support stereo video, indicated by the capability flag. To query for this capability, call .

    +
    + + hh447751 + void ID3D11VideoContext::VideoProcessorSetOutputStereoMode([In] ID3D11VideoProcessor* pVideoProcessor,[In] BOOL Enable) + ID3D11VideoContext::VideoProcessorSetOutputStereoMode +
    + + +

    Sets a driver-specific video processing state.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    A reference to a that identifies the operation. The meaning of this is defined by the graphics driver.

    +

    The size of the pData buffer, in bytes.

    +

    A reference to a buffer that contains private state data. The method passes this buffer directly to the driver without validation. It is the responsibility of the driver to validate the data.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447750 + HRESULT ID3D11VideoContext::VideoProcessorSetOutputExtension([In] ID3D11VideoProcessor* pVideoProcessor,[In] const GUID* pExtensionGuid,[In] unsigned int DataSize,[In] void* pData) + ID3D11VideoContext::VideoProcessorSetOutputExtension +
    + + +

    Gets the current target rectangle for the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    Receives the value TRUE if the target rectangle was explicitly set using the method. Receives the value if the target rectangle was disabled or was never set.

    +

    If Enabled receives the value TRUE, this parameter receives the target rectangle. Otherwise, this parameter is ignored.

    + + hh447726 + void ID3D11VideoContext::VideoProcessorGetOutputTargetRect([In] ID3D11VideoProcessor* pVideoProcessor,[Out] BOOL* Enabled,[Out] RECT* pRect) + ID3D11VideoContext::VideoProcessorGetOutputTargetRect +
    + + +

    Gets the current background color for the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    Receives the value TRUE if the background color is a YCbCr color, or if the background color is an RGB color.

    +

    A reference to a structure. The method fills in the structure with the background color.

    + + hh447721 + void ID3D11VideoContext::VideoProcessorGetOutputBackgroundColor([In] ID3D11VideoProcessor* pVideoProcessor,[Out] BOOL* pYCbCr,[Out] D3D11_VIDEO_COLOR* pColor) + ID3D11VideoContext::VideoProcessorGetOutputBackgroundColor +
    + + +

    Gets the current output color space for the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    A reference to a structure. The method fills in the structure with the output color space.

    + + hh447722 + void ID3D11VideoContext::VideoProcessorGetOutputColorSpace([In] ID3D11VideoProcessor* pVideoProcessor,[Out] D3D11_VIDEO_PROCESSOR_COLOR_SPACE* pColorSpace) + ID3D11VideoContext::VideoProcessorGetOutputColorSpace +
    + + +

    Gets the current alpha fill mode for the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    Receives the alpha fill mode, as a value.

    +

    If the alpha fill mode is , this parameter receives the zero-based index of an input stream. The input stream provides the alpha values for the alpha fill.

    + + hh447720 + void ID3D11VideoContext::VideoProcessorGetOutputAlphaFillMode([In] ID3D11VideoProcessor* pVideoProcessor,[Out] D3D11_VIDEO_PROCESSOR_ALPHA_FILL_MODE* pAlphaFillMode,[Out] unsigned int* pStreamIndex) + ID3D11VideoContext::VideoProcessorGetOutputAlphaFillMode +
    + + +

    Gets the current level of downsampling that is performed by the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    Receives the value TRUE if downsampling was explicitly enabled using the method. Receives the value if the downsampling was disabled or was never set.

    +

    If Enabled receives the value TRUE, this parameter receives the downsampling size. Otherwise, this parameter is ignored.

    + + hh447723 + void ID3D11VideoContext::VideoProcessorGetOutputConstriction([In] ID3D11VideoProcessor* pVideoProcessor,[Out] BOOL* pEnabled,[Out] SIZE* pSize) + ID3D11VideoContext::VideoProcessorGetOutputConstriction +
    + + +

    Queries whether the video processor produces stereo video frames.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    Receives the value TRUE if stereo output is enabled, or otherwise.

    + + hh447725 + void ID3D11VideoContext::VideoProcessorGetOutputStereoMode([In] ID3D11VideoProcessor* pVideoProcessor,[Out] BOOL* pEnabled) + ID3D11VideoContext::VideoProcessorGetOutputStereoMode +
    + + +

    Gets private state data from the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    A reference to a that identifies the state. The meaning of this is defined by the graphics driver.

    +

    The size of the pData buffer, in bytes.

    +

    A reference to a buffer that receives the private state data.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447724 + HRESULT ID3D11VideoContext::VideoProcessorGetOutputExtension([In] ID3D11VideoProcessor* pVideoProcessor,[In] const GUID* pExtensionGuid,[In] unsigned int DataSize,[Out, Buffer] void* pData) + ID3D11VideoContext::VideoProcessorGetOutputExtension +
    + + +

    Specifies whether an input stream on the video processor contains interlaced or progressive frames.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    A value that specifies the interlacing.

    + + hh447759 + void ID3D11VideoContext::VideoProcessorSetStreamFrameFormat([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] D3D11_VIDEO_FRAME_FORMAT FrameFormat) + ID3D11VideoContext::VideoProcessorSetStreamFrameFormat +
    + + +

    Sets the color space for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    A reference to a structure that specifies the color space.

    + + hh447755 + void ID3D11VideoContext::VideoProcessorSetStreamColorSpace([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] const D3D11_VIDEO_PROCESSOR_COLOR_SPACE* pColorSpace) + ID3D11VideoContext::VideoProcessorSetStreamColorSpace +
    + + +

    Sets the rate at which the video processor produces output frames for an input stream.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    The output rate, specified as a value.

    +

    Specifies how the driver performs frame-rate conversion, if required.

    ValueMeaning
    TRUE

    Repeat frames.

    Interpolate frames.

    ?

    +

    A reference to a structure. If OutputRate is , this parameter specifies the exact output rate. Otherwise, this parameter is ignored and can be null.

    + +

    The standard output rates are normal frame-rate () and half frame-rate (). In addition, the driver might support custom rates for rate conversion or inverse telecine. To get the list of custom rates, call .

    Depending on the output rate, the driver might need to convert the frame rate. If so, the value of RepeatFrame controls whether the driver creates interpolated frames or simply repeats input frames.

    +
    + + hh447761 + void ID3D11VideoContext::VideoProcessorSetStreamOutputRate([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] D3D11_VIDEO_PROCESSOR_OUTPUT_RATE OutputRate,[In] BOOL RepeatFrame,[In, Optional] const DXGI_RATIONAL* pCustomRate) + ID3D11VideoContext::VideoProcessorSetStreamOutputRate +
    + + +

    Sets the source rectangle for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Specifies whether to apply the source rectangle.

    +

    A reference to a structure that specifies the source rectangle. If Enable is , this parameter is ignored.

    + +

    The source rectangle is the portion of the input surface that is blitted to the destination surface. The source rectangle is given in pixel coordinates, relative to the input surface.

    If this method is never called, or if the Enable parameter is , the video processor reads from the entire input surface.

    +
    + + hh447764 + void ID3D11VideoContext::VideoProcessorSetStreamSourceRect([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] BOOL Enable,[In, Optional] const RECT* pRect) + ID3D11VideoContext::VideoProcessorSetStreamSourceRect +
    + + +

    Sets the destination rectangle for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Specifies whether to apply the destination rectangle.

    +

    A reference to a structure that specifies the destination rectangle. If Enable is , this parameter is ignored.

    + +

    The destination rectangle is the portion of the output surface that receives the blit for this stream. The destination rectangle is given in pixel coordinates, relative to the output surface.

    The default destination rectangle is an empty rectangle (0, 0, 0, 0). If this method is never called, or if the Enable parameter is , no data is written from this stream.

    +
    + + hh447756 + void ID3D11VideoContext::VideoProcessorSetStreamDestRect([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] BOOL Enable,[In, Optional] const RECT* pRect) + ID3D11VideoContext::VideoProcessorSetStreamDestRect +
    + + +

    Sets the planar alpha for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Specifies whether alpha blending is enabled.

    +

    The planar alpha value. The value can range from 0.0 (transparent) to 1.0 (opaque). If Enable is , this parameter is ignored.

    + +

    To use this feature, the driver must support stereo video, indicated by the D3D11_VIDEO_PROCESSOR_FEATURE_CAPS_ALHPA_STREAM capability flag. To query for this capability, call .

    Alpha blending is disabled by default.

    For each pixel, the destination color value is computed as follows:

    Cd = Cs * (As * Ap * Ae) + Cd * (1.0 - As * Ap * Ae)

    where:

    • Cd = The color value of the destination pixel
    • Cs = The color value of the source pixel
    • As = The per-pixel source alpha
    • Ap = The planar alpha value
    • Ae = The palette-entry alpha value, or 1.0 (see Note)
    Note??Palette-entry alpha values apply only to palettized color formats, and only when the device supports the capability. Otherwise, this factor equals 1.0.?

    The destination alpha value is computed according to the alpha fill mode. For more information, see .

    +
    + + hh447753 + void ID3D11VideoContext::VideoProcessorSetStreamAlpha([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] BOOL Enable,[In] float Alpha) + ID3D11VideoContext::VideoProcessorSetStreamAlpha +
    + + +

    Sets the color-palette entries for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    The number of elements in the pEntries array.

    +

    A reference to an array of palette entries. For RGB streams, the palette entries use the DXGI_FORMAT_B8G8R8A8 representation. For YCbCr streams, the palette entries use the representation. The caller allocates the array.

    + +

    This method applies only to input streams that have a palettized color format. Palettized formats with 4 bits per pixel (bpp) use the first 16 entries in the list. Formats with 8 bpp use the first 256 entries.

    If a pixel has a palette index greater than the number of entries, the device treats the pixel as white with opaque alpha. For full-range RGB, this value is (255, 255, 255, 255); for YCbCr the value is (255, 235, 128, 128).

    If the driver does not report the capability flag, every palette entry must have an alpha value of 0xFF (opaque). To query for this capability, call .

    +
    + + hh447762 + void ID3D11VideoContext::VideoProcessorSetStreamPalette([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] unsigned int Count,[In, Buffer, Optional] const unsigned int* pEntries) + ID3D11VideoContext::VideoProcessorSetStreamPalette +
    + + +

    Sets the pixel aspect ratio for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Specifies whether the pSourceAspectRatio and pDestinationAspectRatio parameters contain valid values. Otherwise, the pixel aspect ratios are unspecified.

    +

    A reference to a structure that contains the pixel aspect ratio of the source rectangle. If Enable is , this parameter can be null.

    +

    A reference to a structure that contains the pixel aspect ratio of the destination rectangle. If Enable is , this parameter can be null.

    + +

    This function can only be called if the driver reports the capability. If this capability is not set, this function will have no effect.

    Pixel aspect ratios of the form 0/n and n/0 are not valid.

    The default pixel aspect ratio is 1:1 (square pixels).

    +
    + + hh447763 + void ID3D11VideoContext::VideoProcessorSetStreamPixelAspectRatio([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] BOOL Enable,[In, Optional] const DXGI_RATIONAL* pSourceAspectRatio,[In, Optional] const DXGI_RATIONAL* pDestinationAspectRatio) + ID3D11VideoContext::VideoProcessorSetStreamPixelAspectRatio +
    + + +

    Sets the luma key for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Specifies whether luma keying is enabled.

    +

    The lower bound for the luma key. The valid range is [0?1]. If Enable is , this parameter is ignored.

    +

    The upper bound for the luma key. The valid range is [0?1]. If Enable is , this parameter is ignored.

    + +

    To use this feature, the driver must support luma keying, indicated by the capability flag. To query for this capability, call . In addition, if the input format is RGB, the device must support the capability.

    The values of Lower and Upper give the lower and upper bounds of the luma key, using a nominal range of [0...1]. Given a format with n bits per channel, these values are converted to luma values as follows:

    val = f * ((1 << n)-1)

    Any pixel whose luma value falls within the upper and lower bounds (inclusive) is treated as transparent.

    For example, if the pixel format uses 8-bit luma, the upper bound is calculated as follows:

    BYTE Y = BYTE(max(min(1.0, Upper), 0.0) * 255.0)

    Note that the value is clamped to the range [0...1] before multiplying by 255.

    +
    + + hh447760 + void ID3D11VideoContext::VideoProcessorSetStreamLumaKey([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] BOOL Enable,[In] float Lower,[In] float Upper) + ID3D11VideoContext::VideoProcessorSetStreamLumaKey +
    + + +

    Enables or disables stereo 3D video for an input stream on the video processor. In addition, this method specifies the layout of the video frames in memory.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Specifies whether stereo 3D is enabled for this stream. If the value is , the remaining parameters of this method are ignored.

    +

    Specifies the layout of the two stereo views in memory, as a value.

    +

    If TRUE, frame 0 contains the left view. Otherwise, frame 0 contains the right view.

    This parameter is ignored for the following stereo formats:

    +

    If TRUE, frame 0 contains the base view. Otherwise, frame 1 contains the base view.

    This parameter is ignored for the following stereo formats:

    • When is used and the application wants to convert the stereo data to mono, it can either:
      • Specify the base view as a mono input.
      • Specify both resources and allow the driver to do the conversion from the base view. In this case, .hInputSurface is considered frame 0 and .hInputSurfaceRight is considered frame 1.
    +

    A flag from the enumeration, specifying whether one of the views is flipped.

    +

    For format, this parameter specifies how to generate the left and right views:

    • If MonoOffset is positive, the right view is shifted to the right by that many pixels, and the left view is shifted to the left by the same amount.
    • If MonoOffset is negative, the right view is shifted to the left by that many pixels, and the left view is shifted to right by the same amount.

    If Format is not , this parameter must be zero.

    + + hh447765 + void ID3D11VideoContext::VideoProcessorSetStreamStereoFormat([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] BOOL Enable,[In] D3D11_VIDEO_PROCESSOR_STEREO_FORMAT Format,[In] BOOL LeftViewFrame0,[In] BOOL BaseViewFrame0,[In] D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE FlipMode,[In] int MonoOffset) + ID3D11VideoContext::VideoProcessorSetStreamStereoFormat +
    + + +

    Enables or disables automatic processing features on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    If TRUE, automatic processing features are enabled. If , the driver disables any extra video processing that it might be performing.

    + +

    By default, the driver might perform certain processing tasks automatically during the video processor blit. This method enables the application to disable these extra video processing features. For example, if you provide your own pixel shader for the video processor, you might want to disable the driver's automatic processing.

    +
    + + hh447754 + void ID3D11VideoContext::VideoProcessorSetStreamAutoProcessingMode([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] BOOL Enable) + ID3D11VideoContext::VideoProcessorSetStreamAutoProcessingMode +
    + + +

    Enables or disables an image filter for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    The filter, specified as a value.

    To query which filters the driver supports, call .

    +

    Specifies whether to enable the filter.

    +

    The filter level. If Enable is , this parameter is ignored.

    To find the valid range of levels for a specified filter, call .

    + + hh447758 + void ID3D11VideoContext::VideoProcessorSetStreamFilter([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] D3D11_VIDEO_PROCESSOR_FILTER Filter,[In] BOOL Enable,[In] int Level) + ID3D11VideoContext::VideoProcessorSetStreamFilter +
    + + +

    Sets a driver-specific state on a video processing stream.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    A reference to a that identifies the operation. The meaning of this is defined by the graphics driver.

    +

    The size of the pData buffer, in bytes.

    +

    A reference to a buffer that contains private state data. The method passes this buffer directly to the driver without validation. It is the responsibility of the driver to validate the data.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447757 + HRESULT ID3D11VideoContext::VideoProcessorSetStreamExtension([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] const GUID* pExtensionGuid,[In] unsigned int DataSize,[In] void* pData) + ID3D11VideoContext::VideoProcessorSetStreamExtension +
    + + +

    Gets the format of an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Receives a value that specifies whether the stream contains interlaced or progressive frames.

    + + hh447739 + void ID3D11VideoContext::VideoProcessorGetStreamFrameFormat([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] D3D11_VIDEO_FRAME_FORMAT* pFrameFormat) + ID3D11VideoContext::VideoProcessorGetStreamFrameFormat +
    + + +

    Gets the color space for an input stream of the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Receives a value that specifies the color space.

    + + hh447731 + void ID3D11VideoContext::VideoProcessorGetStreamColorSpace([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] D3D11_VIDEO_PROCESSOR_COLOR_SPACE* pColorSpace) + ID3D11VideoContext::VideoProcessorGetStreamColorSpace +
    + + +

    Gets the rate at which the video processor produces output frames for an input stream.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Receives a value that specifies the output rate.

    +

    Receives a Boolean value that specifies how the driver performs frame-rate conversion, if required.

    ValueMeaning
    TRUE

    Repeat frames.

    Interpolate frames.

    ?

    +

    A reference to a structure. If the output rate is , the method fills in this structure with the exact output rate. Otherwise, this parameter is ignored.

    + + hh447741 + void ID3D11VideoContext::VideoProcessorGetStreamOutputRate([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] D3D11_VIDEO_PROCESSOR_OUTPUT_RATE* pOutputRate,[Out] BOOL* pRepeatFrame,[Out] DXGI_RATIONAL* pCustomRate) + ID3D11VideoContext::VideoProcessorGetStreamOutputRate +
    + + +

    Gets the source rectangle for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Receives the value TRUE if the source rectangle is enabled, or otherwise.

    +

    A reference to a structure that receives the source rectangle.

    + + hh447744 + void ID3D11VideoContext::VideoProcessorGetStreamSourceRect([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] BOOL* pEnabled,[Out] RECT* pRect) + ID3D11VideoContext::VideoProcessorGetStreamSourceRect +
    + + +

    Gets the destination rectangle for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Receives the value TRUE if the destination rectangle is enabled, or otherwise.

    +

    A reference to a structure that receives the destination rectangle.

    + + hh447733 + void ID3D11VideoContext::VideoProcessorGetStreamDestRect([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] BOOL* pEnabled,[Out] RECT* pRect) + ID3D11VideoContext::VideoProcessorGetStreamDestRect +
    + + +

    Gets the planar alpha for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Receives the value TRUE if planar alpha is enabled, or otherwise.

    +

    Receives the planar alpha value. The value can range from 0.0 (transparent) to 1.0 (opaque).

    + + hh447727 + void ID3D11VideoContext::VideoProcessorGetStreamAlpha([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] BOOL* pEnabled,[Out] float* pAlpha) + ID3D11VideoContext::VideoProcessorGetStreamAlpha +
    + + +

    Gets the color-palette entries for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    The number of entries in the pEntries array.

    +

    A reference to a UINT array allocated by the caller. The method fills the array with the palette entries. For RGB streams, the palette entries use the DXGI_FORMAT_B8G8R8A8 representation. For YCbCr streams, the palette entries use the representation.

    + +

    This method applies only to input streams that have a palettized color format. Palettized formats with 4 bits per pixel (bpp) use 16 palette entries. Formats with 8 bpp use 256 entries.

    +
    + + hh447742 + void ID3D11VideoContext::VideoProcessorGetStreamPalette([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] unsigned int Count,[Out, Buffer] unsigned int* pEntries) + ID3D11VideoContext::VideoProcessorGetStreamPalette +
    + + +

    Gets the pixel aspect ratio for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Receives the value TRUE if the pixel aspect ratio is specified. Otherwise, receives the value .

    +

    A reference to a structure. If *pEnabled is TRUE, this parameter receives the pixel aspect ratio of the source rectangle.

    +

    A reference to a structure. If *pEnabled is TRUE, this parameter receives the pixel aspect ratio of the destination rectangle.

    + +

    When the method returns, if *pEnabled is TRUE, the pSourceAspectRatio and pDestinationAspectRatio parameters contain the pixel aspect ratios. Otherwise, the default pixel aspect ratio is 1:1 (square pixels).

    +
    + + hh447743 + void ID3D11VideoContext::VideoProcessorGetStreamPixelAspectRatio([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] BOOL* pEnabled,[Out] DXGI_RATIONAL* pSourceAspectRatio,[Out] DXGI_RATIONAL* pDestinationAspectRatio) + ID3D11VideoContext::VideoProcessorGetStreamPixelAspectRatio +
    + + +

    Gets the luma key for an input stream of the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Receives the value TRUE if luma keying is enabled, or otherwise.

    +

    Receives the lower bound for the luma key. The valid range is [0?1].

    +

    Receives the upper bound for the luma key. The valid range is [0?1].

    + + hh447740 + void ID3D11VideoContext::VideoProcessorGetStreamLumaKey([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] BOOL* pEnabled,[Out] float* pLower,[Out] float* pUpper) + ID3D11VideoContext::VideoProcessorGetStreamLumaKey +
    + + +

    Gets the stereo 3D format for an input stream on the video processor

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Receives the value TRUE if stereo 3D is enabled for this stream, or otherwise. If the value is , ignore the remaining parameters.

    +

    Receives a value that specifies the layout of the two stereo views in memory.

    +

    Receives a Boolean value.

    ValueMeaning
    TRUE

    Frame 0 contains the left view.

    Frame 0 contains the right view.

    ?

    +

    Receives a Boolean value.

    ValueMeaning
    TRUE

    Frame 0 contains the base view.

    Frame 1 contains the base view.

    ?

    +

    Receives a value. This value specifies whether one of the views is flipped.

    +

    Receives the pixel offset used for format. This parameter is ignored for other stereo formats.

    + + hh447745 + void ID3D11VideoContext::VideoProcessorGetStreamStereoFormat([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] BOOL* pEnable,[Out] D3D11_VIDEO_PROCESSOR_STEREO_FORMAT* pFormat,[Out] BOOL* pLeftViewFrame0,[Out] BOOL* pBaseViewFrame0,[Out] D3D11_VIDEO_PROCESSOR_STEREO_FLIP_MODE* pFlipMode,[Out] int* MonoOffset) + ID3D11VideoContext::VideoProcessorGetStreamStereoFormat +
    + + +

    Queries whether automatic processing features of the video processor are enabled.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Receives the value TRUE if automatic processing features are enabled, or otherwise.

    + +

    Automatic processing refers to additional image processing that drivers might have performed on the image data prior to the application receiving the data.

    +
    + + hh447729 + void ID3D11VideoContext::VideoProcessorGetStreamAutoProcessingMode([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] BOOL* pEnabled) + ID3D11VideoContext::VideoProcessorGetStreamAutoProcessingMode +
    + + +

    Gets the image filter settings for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    The filter to query, specified as a value.

    +

    Receives the value TRUE if the image filter is enabled, or otherwise.

    +

    Receives the filter level.

    + + hh447737 + void ID3D11VideoContext::VideoProcessorGetStreamFilter([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] D3D11_VIDEO_PROCESSOR_FILTER Filter,[Out] BOOL* pEnabled,[Out] int* pLevel) + ID3D11VideoContext::VideoProcessorGetStreamFilter +
    + + +

    Gets a driver-specific state for a video processing stream.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    A reference to a that identifies the state. The meaning of this is defined by the graphics driver.

    +

    The size of the pData buffer, in bytes.

    +

    A reference to a buffer that receives the private state data.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447735 + HRESULT ID3D11VideoContext::VideoProcessorGetStreamExtension([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] const GUID* pExtensionGuid,[In] unsigned int DataSize,[Out, Buffer] void* pData) + ID3D11VideoContext::VideoProcessorGetStreamExtension +
    + + +

    Performs a video processing operation on one or more input samples and writes the result to a Direct3D surface.

    +
    +

    A reference to the interface. To get this reference, call the method.

    +

    A reference to the interface for the output surface. The output of the video processing operation will be written to this surface.

    +

    The frame number of the output video frame, indexed from zero.

    +

    The number of input streams to process.

    +

    A reference to an array of structures that contain information about the input streams. The caller allocates the array and fills in each structure. The number of elements in the array is given in the StreamCount parameter.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The maximum value of StreamCount is given in the MaxStreamStates member of the structure. The maximum number of streams that can be enabled at one time is given in the MaxInputStreams member of that structure.

    If the output stereo mode is TRUE:

    • The output view must contain a texture array of two elements.
    • At least one stereo stream must be specified.
    • If multiple input streams are enabled, it is possible that one or more of the input streams may contain mono data.

    Otherwise:

    • The output view must contain a single element.
    • The stereo format cannot be .

    This function does not honor a D3D11 predicate that may have been set.

    If the application uses D3D11 quries, this function may not be accounted for with and when using feature levels lower than 11. will not include this function for any feature level.

    +
    + + hh447719 + HRESULT ID3D11VideoContext::VideoProcessorBlt([In] ID3D11VideoProcessor* pVideoProcessor,[In] ID3D11VideoProcessorOutputView* pView,[In] unsigned int OutputFrame,[In] unsigned int StreamCount,[In, Buffer] const D3D11_VIDEO_PROCESSOR_STREAM* pStreams) + ID3D11VideoContext::VideoProcessorBlt +
    + + +

    Establishes the session key for a cryptographic session.

    +
    +

    A reference to the interface of the cryptographic session.

    +

    The size of the pData byte array, in bytes.

    +

    A reference to a byte array that contains the encrypted session key.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The key exchange mechanism depends on the type of cryptographic session.

    For RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP), the software decoder generates the secret key, encrypts the secret key by using the public key with RSAES-OAEP, and places the cipher text in the pData parameter. The actual size of the buffer for RSAES-OAEP is 256 bytes.

    +
    + + hh447714 + HRESULT ID3D11VideoContext::NegotiateCryptoSessionKeyExchange([In] ID3D11CryptoSession* pCryptoSession,[In] unsigned int DataSize,[Out, Buffer] void* pData) + ID3D11VideoContext::NegotiateCryptoSessionKeyExchange +
    + + +

    Reads encrypted data from a protected surface.

    +
    +

    A reference to the interface of the cryptographic session.

    +

    A reference to the interface of the protected surface.

    +

    A reference to the interface of the surface that receives the encrypted data.

    +

    The size of the pIV buffer, in bytes.

    +

    A reference to a buffer that receives the initialization vector (IV). The caller allocates this buffer, but the driver generates the IV.

    For 128-bit AES-CTR encryption, pIV points to a structure. When the driver generates the first IV, it initializes the structure to a random number. For each subsequent IV, the driver simply increments the IV member of the structure, ensuring that the value always increases. The application can validate that the same IV is never used more than once with the same key pair.

    + +

    Not all drivers support this method. To query the driver capabilities, call and check for the flag in the Caps member of the structure.

    Some drivers might require a separate key to decrypt the data that is read back. To check for this requirement, call GetContentProtectionCaps and check for the flag. If this flag is present, call to get the decryption key.

    This method has the following limitations:

    • Reading back sub-rectangles is not supported.
    • Reading back partially encrypted surfaces is not supported.
    • The protected surface must be either an off-screen plain surface or a render target.
    • The destination surface must be a resource.
    • The protected surface cannot be multisampled.
    • Stretching and colorspace conversion are not supported.

    This function does not honor a D3D11 predicate that may have been set.

    If the application uses D3D11 quries, this function may not be accounted for with and when using feature levels lower than 11. will not include this function for any feature level.

    +
    + + hh447709 + void ID3D11VideoContext::EncryptionBlt([In] ID3D11CryptoSession* pCryptoSession,[In] ID3D11Texture2D* pSrcSurface,[In] ID3D11Texture2D* pDstSurface,[In] unsigned int IVSize,[InOut, Buffer, Optional] void* pIV) + ID3D11VideoContext::EncryptionBlt +
    + + +

    Writes encrypted data to a protected surface.

    +
    +

    A reference to the interface.

    +

    A reference to the surface that contains the source data.

    +

    A reference to the protected surface where the encrypted data is written.

    +

    A reference to a structure, or null.

    If the driver supports partially encrypted buffers, pEncryptedBlockInfo indicates which portions of the buffer are encrypted. If the entire surface is encrypted, set this parameter to null.

    To check whether the driver supports partially encrypted buffers, call and check for the capabilities flag. If the driver does not support partially encrypted buffers, set this parameter to null.

    +

    The size of the encrypted content key, in bytes.

    +

    A reference to a buffer that contains a content encryption key, or null. To query whether the driver supports the use of content keys, call and check for the capabilities flag.

    If the driver supports content keys, use the content key to encrypt the surface. Encrypt the content key using the session key, and place the resulting cipher text in pContentKey. If the driver does not support content keys, use the session key to encrypt the surface and set pContentKey to null.

    +

    The size of the pIV buffer, in bytes.

    +

    A reference to a buffer that contains the initialization vector (IV).

    For 128-bit AES-CTR encryption, pIV points to a structure. The caller allocates the structure and generates the IV. When you generate the first IV, initialize the structure to a random number. For each subsequent IV, simply increment the IV member of the structure, ensuring that the value always increases. This procedure enables the driver to validate that the same IV is never used more than once with the same key pair.

    For other encryption types, a different structure might be used, or the encryption might not use an IV.

    + +

    Not all hardware or drivers support this functionality for all cryptographic types. This function can only be called when the cap is reported.

    This method does not support writing to sub-rectangles of the surface.

    If the hardware and driver support a content key:

    • The data is encrypted by the caller using the content key.
    • The content key is encrypted by the caller using the session key.
    • The encrypted content key is passed to the driver.

    Otherwise, the data is encrypted by the caller using the session key and null is passed as the content key.

    If the driver and hardware support partially encrypted buffers, pEncryptedBlockInfo indicates which portions of the buffer are encrypted and which is not. If the entire buffer is encrypted, pEncryptedBlockinfo should be null.

    The allows the application to indicate which bytes in the buffer are encrypted. This is specified in bytes, so the application must ensure that the encrypted blocks match the GPU?s crypto block alignment.

    This function does not honor a D3D11 predicate that may have been set.

    If the application uses D3D11 quries, this function may not be accounted for with and when using feature levels lower than 11. will not include this function for any feature level.

    +
    + + hh447708 + void ID3D11VideoContext::DecryptionBlt([In] ID3D11CryptoSession* pCryptoSession,[In] ID3D11Texture2D* pSrcSurface,[In] ID3D11Texture2D* pDstSurface,[In, Optional] D3D11_ENCRYPTED_BLOCK_INFO* pEncryptedBlockInfo,[In] unsigned int ContentKeySize,[In, Buffer, Optional] const void* pContentKey,[In] unsigned int IVSize,[InOut, Buffer, Optional] void* pIV) + ID3D11VideoContext::DecryptionBlt +
    + + +

    Gets a random number that can be used to refresh the session key.

    +
    +

    A reference to the interface.

    +

    The size of the pRandomNumber array, in bytes. The size should match the size of the session key.

    +

    A reference to a byte array that receives a random number.

    + +

    To generate a new session key, perform a bitwise XOR between the previous session key and the random number. The new session key does not take affect until the application calls .

    To query whether the driver supports this method, call and check for the capabilities flag.

    +
    + + hh447717 + void ID3D11VideoContext::StartSessionKeyRefresh([In] ID3D11CryptoSession* pCryptoSession,[In] unsigned int RandomNumberSize,[Out, Buffer] void* pRandomNumber) + ID3D11VideoContext::StartSessionKeyRefresh +
    + + +

    Switches to a new session key.

    +
    +

    A reference to the interface.

    + +

    This function can only be called when the cap is reported.

    Before calling this method, call . The StartSessionKeyRefresh method gets a random number from the driver, which is used to create a new session key. The new session key does not become active until the application calls FinishSessionKeyRefresh. After the application calls FinishSessionKeyRefresh, all protected surfaces are encrypted using the new session key.

    +
    + + hh447710 + void ID3D11VideoContext::FinishSessionKeyRefresh([In] ID3D11CryptoSession* pCryptoSession) + ID3D11VideoContext::FinishSessionKeyRefresh +
    + + +

    Gets the cryptographic key to decrypt the data returned by the method.

    +
    + No documentation. + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method applies only when the driver requires a separate content key for the EncryptionBlt method. For more information, see the Remarks for EncryptionBlt.

    Each time this method is called, the driver generates a new key.

    The KeySize should match the size of the session key.

    The read back key is encrypted by the driver/hardware using the session key.

    +
    + + hh447712 + HRESULT ID3D11VideoContext::GetEncryptionBltKey([In] ID3D11CryptoSession* pCryptoSession,[In] unsigned int KeySize,[Out, Buffer] void* pReadbackKey) + ID3D11VideoContext::GetEncryptionBltKey +
    + + +

    Establishes a session key for an authenticated channel.

    +
    +

    A reference to the interface. This method will fail if the channel type is , because the Direct3D11 channel does not support authentication.

    +

    The size of the data in the pData array, in bytes.

    +

    A reference to a byte array that contains the encrypted session key. The buffer must contain 256 bytes of data, encrypted using RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP).

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method will fail if the channel type is , because the Direct3D11 channel does not support authentication.

    +
    + + hh447713 + HRESULT ID3D11VideoContext::NegotiateAuthenticatedChannelKeyExchange([In] ID3D11AuthenticatedChannel* pChannel,[In] unsigned int DataSize,[Out, Buffer] void* pData) + ID3D11VideoContext::NegotiateAuthenticatedChannelKeyExchange +
    + + +

    Sends a query to an authenticated channel.

    +
    +

    A reference to the interface.

    +

    The size of the pInput array, in bytes.

    +

    A reference to a byte array that contains input data for the query. This array always starts with a structure. The QueryType member of the structure specifies the query and defines the meaning of the rest of the array.

    +

    The size of the pOutput array, in bytes.

    +

    A reference to a byte array that receives the result of the query. This array always starts with a structure. The meaning of the rest of the array depends on the query.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447715 + HRESULT ID3D11VideoContext::QueryAuthenticatedChannel([In] ID3D11AuthenticatedChannel* pChannel,[In] unsigned int InputSize,[In, Buffer] const void* pInput,[In] unsigned int OutputSize,[Out, Buffer] void* pOutput) + ID3D11VideoContext::QueryAuthenticatedChannel +
    + + +

    Sends a configuration command to an authenticated channel.

    +
    +

    A reference to the interface.

    +

    The size of the pInput array, in bytes.

    +

    A reference to a byte array that contains input data for the command. This buffer always starts with a structure. The ConfigureType member of the structure specifies the command and defines the meaning of the rest of the buffer.

    +

    A reference to a structure that receives the response to the command.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447704 + HRESULT ID3D11VideoContext::ConfigureAuthenticatedChannel([In] ID3D11AuthenticatedChannel* pChannel,[In] unsigned int InputSize,[In, Buffer] const void* pInput,[Out] D3D11_AUTHENTICATED_CONFIGURE_OUTPUT* pOutput) + ID3D11VideoContext::ConfigureAuthenticatedChannel +
    + + +

    Sets the stream rotation for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Specifies if the stream is to be rotated in a clockwise orientation.

    +

    Specifies the rotation of the stream.

    + +

    This is an optional state and the application should only use it if is reported in .FeatureCaps.

    The stream source rectangle will be specified in the pre-rotation coordinates (typically landscape) and the stream destination rectangle will be specified in the post-rotation coordinates (typically portrait). The application must update the stream destination rectangle correctly when using a rotation value other than 0? and 180?.

    +
    + + jj160517 + void ID3D11VideoContext::VideoProcessorSetStreamRotation([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] BOOL Enable,[In] D3D11_VIDEO_PROCESSOR_ROTATION Rotation) + ID3D11VideoContext::VideoProcessorSetStreamRotation +
    + + +

    Gets the stream rotation for an input stream on the video processor.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The zero-based index of the input stream. To get the maximum number of streams, call and check the MaxStreamStates structure member.

    +

    Specifies if the stream is rotated.

    +

    Specifies the rotation of the stream in a clockwise orientation.

    + + jj160516 + void ID3D11VideoContext::VideoProcessorGetStreamRotation([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] BOOL* pEnable,[Out] D3D11_VIDEO_PROCESSOR_ROTATION* pRotation) + ID3D11VideoContext::VideoProcessorGetStreamRotation +
    + + +

    [This documentation is preliminary and is subject to change.]

    Applies to: desktop apps | Metro style apps

    Gets a reference to a DirectX Video Acceleration (DXVA) decoder buffer.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    The type of buffer to retrieve, specified as a member of the enumeration.

    + An to the memory buffer. + +

    The graphics driver allocates the buffers that are used for DXVA decoding. This method locks the Microsoft Direct3D surface that contains the buffer. When you are done using the buffer, call to unlock the surface.

    +
    + + hh447711 + HRESULT ID3D11VideoContext::GetDecoderBuffer([In] ID3D11VideoDecoder* pDecoder,[In] D3D11_VIDEO_DECODER_BUFFER_TYPE Type,[Out] unsigned int* pBufferSize,[Out] void** ppBuffer) + ID3D11VideoContext::GetDecoderBuffer +
    + + +

    [Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]

    Provides the video functionality of a Microsoft Direct3D?11 device.

    +
    + +

    To get a reference to this interface, call QueryInterface with an interface reference.

    +
    + + dn894126 + ID3D11VideoContext1 + ID3D11VideoContext1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Submits one or more buffers for decoding.

    +
    +

    A reference to the interface. To get this reference, call the method.

    +

    The number of buffers submitted for decoding.

    +

    A reference to an array of structures. The NumBuffers parameter specifies the number of elements in the array. Each element in the array describes a compressed buffer for decoding.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This function does not honor any D3D11 predicate that may have been set. will not include this function for any feature level. +

    +
    + + dn894131 + HRESULT ID3D11VideoContext1::SubmitDecoderBuffers1([In] ID3D11VideoDecoder* pDecoder,[In] unsigned int NumBuffers,[In, Buffer] const D3D11_VIDEO_DECODER_BUFFER_DESC1* pBufferDesc) + ID3D11VideoContext1::SubmitDecoderBuffers1 +
    + + +

    Allows the driver to return IHV specific information used when initializing the new hardware key.

    +
    +

    A reference to the interface. To get this reference, call ID3D11VideoDevice1::CreateCryptoSession.

    +

    The size of the memory referenced by the pPrivateInputData parameter.

    +

    The private input data. The contents of this parameter is defined by the implementation of the secure execution environment. It may contain data about the license or about the stream properties.

    +

    A reference to the private output data. The return data is defined by the implementation of the secure execution environment. It may contain graphics-specific data to be associated with the underlying hardware key.

    +

    This method returns one of the following error codes.

    The operation completed successfully.
    E_OUTOFMEMORYThere is insufficient memory to complete the operation.

    ?

    + + dn894130 + HRESULT ID3D11VideoContext1::GetDataForNewHardwareKey([In] ID3D11CryptoSession* pCryptoSession,[In] unsigned int PrivateInputSize,[In, Buffer] const void* pPrivatInputData,[Out] unsigned longlong* pPrivateOutputData) + ID3D11VideoContext1::GetDataForNewHardwareKey +
    + + +

    Checks the status of a crypto session.

    +
    +

    Specifies a for which status is checked.

    +

    A that is populated with the crypto session status upon completion.

    +

    This method returns one of the following error codes.

    The operation completed successfully.
    E_INVALIDARGAn invalid parameter was passed or this function was called using an invalid calling pattern.
    E_OUTOFMEMORYThere is insufficient memory to complete the operation.

    ?

    + + dn894127 + HRESULT ID3D11VideoContext1::CheckCryptoSessionStatus([In] ID3D11CryptoSession* pCryptoSession,[Out] D3D11_CRYPTO_SESSION_STATUS* pStatus) + ID3D11VideoContext1::CheckCryptoSessionStatus +
    + + +

    Indicates that decoder downsampling will be used and that the driver should allocate the appropriate reference frames.

    +
    +

    A reference to the interface.

    +

    The color space information of the reference frame data.

    +

    The resolution, format, and colorspace of the output/display frames. This is the destination resolution and format of the downsample operation.

    +

    The number of reference frames to be used in the operation.

    +

    This method returns one of the following error codes.

    The operation completed successfully.
    E_INVALIDARGAn invalid parameter was passed or this function was called using an invalid calling pattern.
    E_OUTOFMEMORYThere is insufficient memory to complete the operation.

    ?

    + +

    This function can only be called once for a specific interface. This method must be called prior to the first call to DecoderBeginFrame. To update the downsampling parameters, use DecoderUpdateDownsampling.

    +
    + + dn894128 + HRESULT ID3D11VideoContext1::DecoderEnableDownsampling([In] ID3D11VideoDecoder* pDecoder,[In] DXGI_COLOR_SPACE_TYPE InputColorSpace,[In] const D3D11_VIDEO_SAMPLE_DESC* pOutputDesc,[In] unsigned int ReferenceFrameCount) + ID3D11VideoContext1::DecoderEnableDownsampling +
    + + +

    Updates the decoder downsampling parameters.

    +
    +

    A reference to the interface.

    +

    The resolution, format, and colorspace of the output/display frames. This is the destination resolution and format of the downsample operation.

    +

    This method returns one of the following error codes.

    The operation completed successfully.
    E_INVALIDARGAn invalid parameter was passed or this function was called using an invalid calling pattern.
    E_OUTOFMEMORYThere is insufficient memory to complete the operation.

    ?

    + +

    This method can only be called after decode downsampling is enabled by calling DecoderEnableDownsampling. This method is only supported if the capability is reported.

    +
    + + dn894129 + HRESULT ID3D11VideoContext1::DecoderUpdateDownsampling([In] ID3D11VideoDecoder* pDecoder,[In] const D3D11_VIDEO_SAMPLE_DESC* pOutputDesc) + ID3D11VideoContext1::DecoderUpdateDownsampling +
    + + +

    Sets the color space information for the video processor output surface.

    +
    +

    A reference to the interface.

    +

    A value that specifies the colorspace for the video processor output surface.

    + + dn894137 + void ID3D11VideoContext1::VideoProcessorSetOutputColorSpace1([In] ID3D11VideoProcessor* pVideoProcessor,[In] DXGI_COLOR_SPACE_TYPE ColorSpace) + ID3D11VideoContext1::VideoProcessorSetOutputColorSpace1 +
    + + +

    Sets a value indicating whether the output surface from a call to will be read by Direct3D shaders.

    +
    + No documentation. + No documentation. + + dn894138 + void ID3D11VideoContext1::VideoProcessorSetOutputShaderUsage([In] ID3D11VideoProcessor* pVideoProcessor,[In] BOOL ShaderUsage) + ID3D11VideoContext1::VideoProcessorSetOutputShaderUsage +
    + + +

    Gets the color space information for the video processor output surface.

    +
    +

    A reference to the interface.

    +

    A reference to a value that indicates the colorspace for the video processor output surface.

    + + dn894133 + void ID3D11VideoContext1::VideoProcessorGetOutputColorSpace1([In] ID3D11VideoProcessor* pVideoProcessor,[Out] DXGI_COLOR_SPACE_TYPE* pColorSpace) + ID3D11VideoContext1::VideoProcessorGetOutputColorSpace1 +
    + + +

    Gets a value indicating whether the output surface from a call to can be read by Direct3D shaders.

    +
    + No documentation. + No documentation. + + dn894134 + void ID3D11VideoContext1::VideoProcessorGetOutputShaderUsage([In] ID3D11VideoProcessor* pVideoProcessor,[Out] BOOL* pShaderUsage) + ID3D11VideoContext1::VideoProcessorGetOutputShaderUsage +
    + + +

    Sets the color space information for the video processor input stream.

    +
    +

    A reference to the interface.

    +

    An index identifying the input stream.

    +

    A value that specifies the colorspace for the video processor input stream.

    + + dn894139 + void ID3D11VideoContext1::VideoProcessorSetStreamColorSpace1([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] DXGI_COLOR_SPACE_TYPE ColorSpace) + ID3D11VideoContext1::VideoProcessorSetStreamColorSpace1 +
    + + +

    Specifies whether the video processor input stream should be flipped vertically or horizontally.

    +
    +

    A reference to the interface.

    +

    An index identifying the input stream.

    +

    True if mirroring should be enabled; otherwise, false.

    +

    True if the stream should be flipped horizontally; otherwise, false.

    +

    True if the stream should be flipped vertically; otherwise, false.

    + +

    When used in combination, transformations on the processor input stream should be applied in the following order:

    • Rotation
    • Mirroring
    • Source clipping
    +
    + + dn894140 + void ID3D11VideoContext1::VideoProcessorSetStreamMirror([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] BOOL Enable,[In] BOOL FlipHorizontal,[In] BOOL FlipVertical) + ID3D11VideoContext1::VideoProcessorSetStreamMirror +
    + + +

    Gets the color space information for the video processor input stream.

    +
    +

    A reference to the interface.

    +

    An index identifying the input stream.

    +

    A reference to a value that specifies the colorspace for the video processor input stream.

    + + dn894135 + void ID3D11VideoContext1::VideoProcessorGetStreamColorSpace1([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] DXGI_COLOR_SPACE_TYPE* pColorSpace) + ID3D11VideoContext1::VideoProcessorGetStreamColorSpace1 +
    + + +

    Gets values that indicate whether the video processor input stream is being flipped vertically or horizontally.

    +
    +

    A reference to the interface.

    +

    An index identifying the input stream.

    +

    A reference to a boolean value indicating whether mirroring is enabled. True if mirroring is enabled; otherwise, false.

    +

    A reference to a boolean value indicating whether the stream is being flipped horizontally. True if the stream is being flipped horizontally; otherwise, false.

    +

    A reference to a boolean value indicating whether the stream is being flipped vertically. True if the stream is being flipped vertically; otherwise, false.

    + + dn894136 + void ID3D11VideoContext1::VideoProcessorGetStreamMirror([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] BOOL* pEnable,[Out] BOOL* pFlipHorizontal,[Out] BOOL* pFlipVertical) + ID3D11VideoContext1::VideoProcessorGetStreamMirror +
    + + +

    Returns driver hints that indicate which of the video processor operations are best performed using multi-plane overlay hardware rather than method.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    This method returns one of the following error codes.

    The operation completed successfully.
    E_INVALIDARGAn invalid parameter was passed or this function was called using an invalid calling pattern.
    E_OUTOFMEMORYThere is insufficient memory to complete the operation.

    ?

    + +

    This method computes the behavior hints using the current state of the video processor as set by the "SetOutput" and "SetStream" methods of and . You must set the proper state before calling this method to ensure that the returned hints contain useful data.

    +
    + + dn894132 + HRESULT ID3D11VideoContext1::VideoProcessorGetBehaviorHints([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int OutputWidth,[In] unsigned int OutputHeight,[In] DXGI_FORMAT OutputFormat,[In] unsigned int StreamCount,[In, Buffer] const D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT* pStreams,[Out] unsigned int* pBehaviorHints) + ID3D11VideoContext1::VideoProcessorGetBehaviorHints +
    + + +

    Provides the video functionality of a Microsoft Direct3D?11 device.

    +
    + +

    To get a reference to this interface, call QueryInterface with an interface reference.

    This interface provides access to several areas of Microsoft Direct3D video functionality:

    • Hardware-accelerated video decoding
    • Video processing
    • GPU-based content protection
    • Video encryption and decryption

    In Microsoft Direct3D?9, the equivalent functions were distributed across several interfaces:

    • IDirect3DAuthenticatedChannel9
    • IDirect3DCryptoSession9
    • IDirectXVideoDecoder
    • IDirectXVideoProcessor
    • IDXVAHD_VideoProcessor
    +
    + + hh447703 + ID3D11VideoContext2 + ID3D11VideoContext2 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + void ID3D11VideoContext2::VideoProcessorSetOutputHDRMetaData([In] ID3D11VideoProcessor* pVideoProcessor,[In] DXGI_HDR_METADATA_TYPE Type,[In] unsigned int Size,[In, Buffer, Optional] const void* pHDRMetaData) + ID3D11VideoContext2::VideoProcessorSetOutputHDRMetaData + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + void ID3D11VideoContext2::VideoProcessorGetOutputHDRMetaData([In] ID3D11VideoProcessor* pVideoProcessor,[Out] DXGI_HDR_METADATA_TYPE* pType,[In] unsigned int Size,[Out, Buffer, Optional] void* pMetaData) + ID3D11VideoContext2::VideoProcessorGetOutputHDRMetaData + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + void ID3D11VideoContext2::VideoProcessorSetStreamHDRMetaData([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[In] DXGI_HDR_METADATA_TYPE Type,[In] unsigned int Size,[In, Buffer, Optional] const void* pHDRMetaData) + ID3D11VideoContext2::VideoProcessorSetStreamHDRMetaData + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + void ID3D11VideoContext2::VideoProcessorGetStreamHDRMetaData([In] ID3D11VideoProcessor* pVideoProcessor,[In] unsigned int StreamIndex,[Out] DXGI_HDR_METADATA_TYPE* pType,[In] unsigned int Size,[Out, Buffer, Optional] void* pMetaData) + ID3D11VideoContext2::VideoProcessorGetStreamHDRMetaData + + + +

    Represents a hardware-accelerated video decoder for Microsoft Direct3D?11.

    +
    + +

    To get a reference to this interface, call .

    +
    + + hh447766 + ID3D11VideoDecoder + ID3D11VideoDecoder +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a handle to the driver.

    +
    + +

    The driver handle can be used to configure content protection.

    +
    + + hh447780 + GetDriverHandle + GetDriverHandle + HRESULT ID3D11VideoDecoder::GetDriverHandle([Out] void** pDriverHandle) +
    + + +

    Gets the parameters that were used to create the decoder.

    +
    +

    A reference to a structure that receives a description of the video stream.

    +

    A reference to a structure that receives the decoder configuration.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447769 + HRESULT ID3D11VideoDecoder::GetCreationParameters([Out] D3D11_VIDEO_DECODER_DESC* pVideoDesc,[Out] D3D11_VIDEO_DECODER_CONFIG* pConfig) + ID3D11VideoDecoder::GetCreationParameters +
    + + +

    Gets a handle to the driver.

    +
    +

    Receives a handle to the driver.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The driver handle can be used to configure content protection.

    +
    + + hh447780 + HRESULT ID3D11VideoDecoder::GetDriverHandle([Out] void** pDriverHandle) + ID3D11VideoDecoder::GetDriverHandle +
    + + +

    Identifies the output surfaces that can be accessed during video decoding.

    +
    + +

    To get a reference to this interface, call .

    +
    + + hh447767 + ID3D11VideoDecoderOutputView + ID3D11VideoDecoderOutputView +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the properties of the video decoder output view. +

    +
    + + hh447768 + GetDesc + GetDesc + void ID3D11VideoDecoderOutputView::GetDesc([Out] D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC* pDesc) +
    + + +

    Gets the properties of the video decoder output view. +

    +
    +

    A reference to a structure. The method fills the structure with the view properties.

    + + hh447768 + void ID3D11VideoDecoderOutputView::GetDesc([Out] D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC* pDesc) + ID3D11VideoDecoderOutputView::GetDesc +
    + + +

    Provides the video decoding and video processing capabilities of a Microsoft Direct3D?11 device.

    +
    + +

    The Direct3D?11 device supports this interface. To get a reference to this interface, call QueryInterface with an interface reference.

    If you query an for and the Direct3D?11 device created is using the reference rasterizer or WARP, or is a hardware device and you are using the Microsoft Basic Display Adapter, E_NOINTERFACE is returned.

    +
    + + hh447781 + ID3D11VideoDevice + ID3D11VideoDevice +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the number of profiles that are supported by the driver.

    +
    + +

    To enumerate the profiles, call .

    +
    + + hh447796 + GetVideoDecoderProfileCount + GetVideoDecoderProfileCount + unsigned int ID3D11VideoDevice::GetVideoDecoderProfileCount() +
    + + +

    Creates a video decoder device for Microsoft Direct3D?11.

    +
    +

    A reference to a structure that describes the video stream and the decoder profile.

    +

    A reference to a structure that specifies the decoder configuration.

    +

    Receives a reference to the interface. The caller must release the interface.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    This method allocates the necessary decoder buffers.

    The method does not affect the internal state of the video decoder.

    +
    + + hh447786 + HRESULT ID3D11VideoDevice::CreateVideoDecoder([In] const D3D11_VIDEO_DECODER_DESC* pVideoDesc,[In] const D3D11_VIDEO_DECODER_CONFIG* pConfig,[Out] ID3D11VideoDecoder** ppDecoder) + ID3D11VideoDevice::CreateVideoDecoder +
    + + +

    Creates a video processor device for Microsoft Direct3D?11.

    +
    +

    A reference to the interface. To get this reference, call .

    +

    Specifies the frame-rate conversion capabilities for the video processor. The value is a zero-based index that corresponds to the TypeIndex parameter of the method.

    +

    Receives a reference to the interface. The caller must release the interface.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The method does not affect the internal state of the video processor.

    +
    + + hh447788 + HRESULT ID3D11VideoDevice::CreateVideoProcessor([In] ID3D11VideoProcessorEnumerator* pEnum,[In] unsigned int RateConversionIndex,[Out] ID3D11VideoProcessor** ppVideoProcessor) + ID3D11VideoDevice::CreateVideoProcessor +
    + + +

    Creates a channel to communicate with the Microsoft Direct3D device or the graphics driver. The channel can be used to send commands and queries for content protection.

    +
    +

    Specifies the type of channel, as a member of the enumeration.

    +

    Receives a reference to the interface. The caller must release the interface.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If the ChannelType parameter is , the method creates a channel with the Direct3D device. This type of channel does not support authentication.

    If ChannelType is or , the method creates an authenticated channel with the graphics driver.

    +
    + + hh447784 + HRESULT ID3D11VideoDevice::CreateAuthenticatedChannel([In] D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType,[Out] ID3D11AuthenticatedChannel** ppAuthenticatedChannel) + ID3D11VideoDevice::CreateAuthenticatedChannel +
    + + +

    Creates a cryptographic session to encrypt video content that is sent to the graphics driver.

    +
    +

    A reference to a that specifies the type of encryption to use. The following GUIDs are defined.

    ValueMeaning
    D3D11_CRYPTO_TYPE_AES128_CTR

    128-bit Advanced Encryption Standard CTR mode (AES-CTR) block cipher.

    ?

    +

    A reference to a that specifies the decoding profile. For a list of possible values, see . If decoding will not be used, set this parameter to null.

    +

    A reference to a that specifies the type of key exchange.

    ValueMeaning
    D3D11_KEY_EXCHANGE_RSAES_OAEP

    The caller will create the session key, encrypt it with RSA Encryption Scheme - Optimal Asymmetric Encryption Padding (RSAES-OAEP) by using the driver's public key, and pass the session key to the driver.

    ?

    +

    Receives a reference to the interface. The caller must release the interface.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The method does not affect the internal state of the cryptographic session.

    +
    + + hh447785 + HRESULT ID3D11VideoDevice::CreateCryptoSession([In] const GUID* pCryptoType,[In, Optional] const GUID* pDecoderProfile,[In] const GUID* pKeyExchangeType,[Out] ID3D11CryptoSession** ppCryptoSession) + ID3D11VideoDevice::CreateCryptoSession +
    + + +

    Creates a resource view for a video decoder, describing the output sample for the decoding operation.

    +
    +

    A reference to the interface of the decoder surface. The resource must be created with the flag. See .

    +

    A reference to a structure that describes the view.

    +

    Receives a reference to the interface. The caller must release the interface. If this parameter is null, the method checks whether the view is supported, but does not create the view.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Set the ppVDOVView parameter to null to test whether a view is supported.

    +
    + + hh447787 + HRESULT ID3D11VideoDevice::CreateVideoDecoderOutputView([In] ID3D11Resource* pResource,[In] const D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC* pDesc,[Out, Optional] ID3D11VideoDecoderOutputView** ppVDOVView) + ID3D11VideoDevice::CreateVideoDecoderOutputView +
    + + +

    Creates a resource view for a video processor, describing the input sample for the video processing operation.

    +
    +

    A reference to the interface of the input surface.

    +

    A reference to the interface that specifies the video processor. To get this reference, call .

    +

    A reference to a structure that describes the view.

    +

    Receives a reference to the interface. The caller must release the resource. If this parameter is null, the method checks whether the view is supported, but does not create the view.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Set the ppVPIView parameter to null to test whether a view is supported.

    The surface format is given in the FourCC member of the structure. The method fails if the video processor does not support this format as an input sample. An app must specify 0 when using 9_1, 9_2, or 9_3 feature levels.

    Resources used for video processor input views must use the following bind flag combinations:

    • Any combination of bind flags that includes ,, , and D3D11_BIND_UNORDERED_ACCESS_VIEW can be used as for video processor input views (regardless of what other bind flags may be set).
    • Bind flags = 0 is also allowed for a video processor input view.
    • Other restrictions will apply such as:
      • No multi-sampling is allowed.
      • The Texture2D must have been created using .
    +
    + + hh447790 + HRESULT ID3D11VideoDevice::CreateVideoProcessorInputView([In] ID3D11Resource* pResource,[In] ID3D11VideoProcessorEnumerator* pEnum,[In] const D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC* pDesc,[Out, Optional] ID3D11VideoProcessorInputView** ppVPIView) + ID3D11VideoDevice::CreateVideoProcessorInputView +
    + + +

    Creates a resource view for a video processor, describing the output sample for the video processing operation.

    +
    +

    A reference to the interface of the output surface. The resource must be created with the flag. See .

    +

    A reference to the interface that specifies the video processor. To get this reference, call .

    +

    A reference to a structure that describes the view.

    +

    Receives a reference to the interface. The caller must release the resource. If this parameter is null, the method checks whether the view is supported, but does not create the view.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    Set the ppVPOView parameter to null to test whether a view is supported.

    Resources used for video processor output views must use the following combinations:

    • indicates that it can be used for a video processor output view. The following bind flags are allowed to be set with :
    • Other restrictions will apply such as:
      • No multi-sampling is allowed.
      • The Texture2D must have been created using .
    • Some YUV formats can be supported as a video processor output view, but might not be supported as a 3D render target. D3D11 will allow the flag for these formats, but CreateRenderTargetView will not be allowed for these formats.

    If stereo output is enabled, the output view must have 2 array elements. Otherwise, it must only have a single array element.

    +
    + + hh447791 + HRESULT ID3D11VideoDevice::CreateVideoProcessorOutputView([In] ID3D11Resource* pResource,[In] ID3D11VideoProcessorEnumerator* pEnum,[In] const D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC* pDesc,[Out, Optional] ID3D11VideoProcessorOutputView** ppVPOView) + ID3D11VideoDevice::CreateVideoProcessorOutputView +
    + + +

    Enumerates the video processor capabilities of the driver.

    +
    +

    A reference to a structure that describes the video content.

    +

    Receives a reference to the interface. The caller must release the interface.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    To create the video processor device, pass the reference to the method.

    +
    + + hh447789 + HRESULT ID3D11VideoDevice::CreateVideoProcessorEnumerator([In] const D3D11_VIDEO_PROCESSOR_CONTENT_DESC* pDesc,[Out] ID3D11VideoProcessorEnumerator** ppEnum) + ID3D11VideoDevice::CreateVideoProcessorEnumerator +
    + + +

    Gets the number of profiles that are supported by the driver.

    +
    +

    Returns the number of profiles.

    + +

    To enumerate the profiles, call .

    +
    + + hh447796 + unsigned int ID3D11VideoDevice::GetVideoDecoderProfileCount() + ID3D11VideoDevice::GetVideoDecoderProfileCount +
    + + +

    Gets a profile that is supported by the driver.

    +
    +

    The zero-based index of the profile. To get the number of profiles that the driver supports, call .

    +

    Receives a that identifies the profile.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447795 + HRESULT ID3D11VideoDevice::GetVideoDecoderProfile([In] unsigned int Index,[Out] GUID* pDecoderProfile) + ID3D11VideoDevice::GetVideoDecoderProfile +
    + + +

    Given aprofile, checks whether the driver supports a specified output format.

    +
    +

    A reference to a that identifies the profile. To get the list of supported profiles, call .

    +

    A value that specifies the output format. Typical values include and .

    +

    Receives the value TRUE if the format is supported, or otherwise.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    If the driver does not support the profile given in pDecoderProfile, the method returns E_INVALIDARG. If the driver supports the profile, but the DXGI format is not compatible with the profile, the method succeeds but returns the value in pSupported.

    +
    + + hh447783 + HRESULT ID3D11VideoDevice::CheckVideoDecoderFormat([In] const GUID* pDecoderProfile,[In] DXGI_FORMAT Format,[Out] BOOL* pSupported) + ID3D11VideoDevice::CheckVideoDecoderFormat +
    + + +

    Gets the number of decoder configurations that the driver supports for a specified video description.

    +
    +

    A reference to a structure that describes the video stream.

    +

    Receives the number of decoder configurations.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    To enumerate the decoder configurations, call .

    +
    + + hh447794 + HRESULT ID3D11VideoDevice::GetVideoDecoderConfigCount([In] const D3D11_VIDEO_DECODER_DESC* pDesc,[Out] unsigned int* pCount) + ID3D11VideoDevice::GetVideoDecoderConfigCount +
    + + +

    Gets a decoder configuration that is supported by the driver.

    +
    +

    A reference to a structure that describes the video stream.

    +

    The zero-based index of the decoder configuration. To get the number of configurations that the driver supports, call .

    +

    A reference to a structure. The method fills in the structure with the decoder configuration.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447793 + HRESULT ID3D11VideoDevice::GetVideoDecoderConfig([In] const D3D11_VIDEO_DECODER_DESC* pDesc,[In] unsigned int Index,[Out] D3D11_VIDEO_DECODER_CONFIG* pConfig) + ID3D11VideoDevice::GetVideoDecoderConfig +
    + + +

    Queries the driver for its content protection capabilities.

    +
    +

    A reference to a that specifies the type of encryption to be used. The following GUIDs are defined.

    ValueMeaning
    D3D11_CRYPTO_TYPE_AES128_CTR

    128-bit Advanced Encryption Standard CTR mode (AES-CTR) block cipher.

    ?

    If no encryption will be used, set this parameter to null.

    +

    A reference to a that specifies the decoding profile. To get profiles that the driver supports, call . If decoding will not be used, set this parameter to null.

    The driver might disallow some combinations of encryption type and profile.

    +

    A reference to a structure. The method fills in this structure with the driver's content protection capabilities.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447792 + HRESULT ID3D11VideoDevice::GetContentProtectionCaps([In, Optional] const GUID* pCryptoType,[In, Optional] const GUID* pDecoderProfile,[Out] D3D11_VIDEO_CONTENT_PROTECTION_CAPS* pCaps) + ID3D11VideoDevice::GetContentProtectionCaps +
    + + +

    Gets a cryptographic key-exchange mechanism that is supported by the driver.

    +
    +

    A reference to a that specifies the type of encryption to be used. The following GUIDs are defined.

    ValueMeaning
    D3D11_CRYPTO_TYPE_AES128_CTR

    128-bit Advanced Encryption Standard CTR mode (AES-CTR) block cipher.

    ?

    +

    A reference to a that specifies the decoding profile. To get profiles that the driver supports, call . If decoding will not be used, set this parameter to null.

    +

    The zero-based index of the key-exchange type. The driver reports the number of types in the KeyExchangeTypeCount member of the structure.

    +

    Receives a that identifies the type of key exchange.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447782 + HRESULT ID3D11VideoDevice::CheckCryptoKeyExchange([In] const GUID* pCryptoType,[In, Optional] const GUID* pDecoderProfile,[In] unsigned int Index,[Out] GUID* pKeyExchangeType) + ID3D11VideoDevice::CheckCryptoKeyExchange +
    + + +

    Sets private data on the video device and associates that data with a . +

    +
    +

    The associated with the data.

    +

    The size of the data, in bytes.

    +

    A reference to the data.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447797 + HRESULT ID3D11VideoDevice::SetPrivateData([In] const GUID& guid,[In] unsigned int DataSize,[In, Buffer, Optional] const void* pData) + ID3D11VideoDevice::SetPrivateData +
    + + +

    Sets a private reference on the video device and associates that reference with a . +

    +
    + No documentation. + No documentation. +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447798 + HRESULT ID3D11VideoDevice::SetPrivateDataInterface([In] const GUID& guid,[In, Optional] const IUnknown* pData) + ID3D11VideoDevice::SetPrivateDataInterface +
    + + +

    Provides the video decoding and video processing capabilities of a Microsoft Direct3D?11 device.

    +
    + +

    The Direct3D?11 device supports this interface. To get a reference to this interface, call QueryInterface with an interface reference.

    +
    + + dn894141 + ID3D11VideoDevice1 + ID3D11VideoDevice1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves optional sizes for private driver data.

    +
    +

    Indicates the crypto type for which the private input and output size is queried.

    +

    Indicates the decoder profile for which the private input and output size is queried.

    +

    Indicates the key exchange type for which the private input and output size is queried.

    +

    Returns the size of private data that the driver needs for input commands.

    +

    Returns the size of private data that the driver needs for output commands.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    When pKeyExchangeType is D3D11_KEY_EXCHANGE_HW_PROTECTION, the following behavior is expected in the method:

    • The DataSize parameter is set to the size of the structure.
    • pData points to a structure.
      • The pInputData of this structure points to a structure where:
        • pbInput[0] ? pbInput[N-1] contains memory reserved for use by the driver. The number of bytes (N) reserved for the driver is determined by the pPrivateInputSize value returned by the function.
        • pbInput[N] contains the first byte of the DRM command packet.
      • The pOutputData of this structure points to a structure where:
        • pbOutput[0] ? pbOutput[N-1] contains memory reserved for use by the driver. The number of bytes (N) reserved for the driver is determined by the pPrivateOutputSize value returned by the function.
        • pbOutput[N] contains the first byte of the DRM command packet.
    +
    + + dn894143 + HRESULT ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize([In] const GUID* pCryptoType,[In, Optional] const GUID* pDecoderProfile,[In] const GUID* pKeyExchangeType,[Out] unsigned int* pPrivateInputSize,[Out] unsigned int* pPrivateOutputSize) + ID3D11VideoDevice1::GetCryptoSessionPrivateDataSize +
    + + +

    Retrieves capabilities and limitations of the video decoder.

    +
    +

    The decode profile for which the capabilities are queried.

    +

    The video width for which the capabilities are queried.

    +

    The video height for which the capabilities are queried.

    +

    The frame rate of the video content. This information is used by the driver to determine whether the video can be decoded in real-time.

    +

    The bit rate of the video stream. A value of zero indicates that the bit rate can be ignored.

    +

    The type of cryptography used to encrypt the video stream. A value of null indicates that the video stream is not encrypted.

    +

    A reference to a bitwise OR combination of values specifying the decoder capabilities.

    +

    This method returns one of the following error codes.

    The operation completed successfully.
    E_INVALIDARGAn invalid parameter was passed or this function was called using an invalid calling pattern.

    ?

    + + dn894144 + HRESULT ID3D11VideoDevice1::GetVideoDecoderCaps([In] const GUID* pDecoderProfile,[In] unsigned int SampleWidth,[In] unsigned int SampleHeight,[In] const DXGI_RATIONAL* pFrameRate,[In] unsigned int BitRate,[In, Optional] const GUID* pCryptoType,[Out] unsigned int* pDecoderCaps) + ID3D11VideoDevice1::GetVideoDecoderCaps +
    + + +

    Indicates whether the video decoder supports downsampling with the specified input format, and whether real-time downsampling is supported.

    +
    +

    An object describing the decoding profile, the resolution, and format of the input stream. This is the resolution and format to be downsampled.

    +

    A value that specifies the colorspace of the reference frame data.

    +

    The configuration data associated with the decode profile.

    +

    The frame rate of the video content. This is used by the driver to determine whether the video can be decoded in real-time.

    +

    An object describing the resolution, format, and colorspace of the output frames. This is the destination resolution and format of the downsample operation.

    +

    Pointer to a boolean value set by the driver that indicates if downsampling is supported with the specified input data. True if the driver supports the requested downsampling; otherwise, false.

    +

    Pointer to a boolean value set by the driver that indicates if real-time decoding is supported with the specified input data. True if the driver supports the requested real-time decoding; otherwise, false. Note that the returned value is based on the current configuration of the video decoder and does not guarantee that real-time decoding will be supported for future downsampling operations.

    +

    This method returns one of the following error codes.

    The operation completed successfully.
    E_INVALIDARGAn invalid parameter was passed or this function was called using an invalid calling pattern.

    ?

    + +

    You should call GetVideoDecoderCaps to determine whether decoder downsampling is supported before checking support for a specific configuration.

    +
    + + dn894142 + HRESULT ID3D11VideoDevice1::CheckVideoDecoderDownsampling([In] const D3D11_VIDEO_DECODER_DESC* pInputDesc,[In] DXGI_COLOR_SPACE_TYPE InputColorSpace,[In] const D3D11_VIDEO_DECODER_CONFIG* pInputConfig,[In] const DXGI_RATIONAL* pFrameRate,[In] const D3D11_VIDEO_SAMPLE_DESC* pOutputDesc,[Out] BOOL* pSupported,[Out] BOOL* pRealTimeHint) + ID3D11VideoDevice1::CheckVideoDecoderDownsampling +
    + + +

    Allows the driver to recommend optimal output downsample parameters from the input parameters.

    +
    +

    A object describing the decoding profile, the resolution, and format of the input stream. This is the resolution and format to be downsampled.

    +

    A value that specifies the colorspace of the reference frame data.

    +

    The configuration data associated with the decode profile.

    +

    The frame rate of the video content. This is used by the driver to determine whether the video can be decoded in real-time.

    +

    Pointer to a structure that the driver populates with the recommended output buffer parameters for a downsample operation. The driver will attempt to recommend parameters that can support real-time decoding. If it is unable to do so, the driver will recommend values that are as close to the real-time solution as possible.

    +

    This method returns one of the following error codes.

    The operation completed successfully.
    E_INVALIDARGAn invalid parameter was passed or this function was called using an invalid calling pattern.

    ?

    + +

    You should call GetVideoDecoderCaps to determine whether decoder downsampling is supported before checking support for a specific configuration.

    +
    + + dn894145 + HRESULT ID3D11VideoDevice1::RecommendVideoDecoderDownsampleParameters([In] const D3D11_VIDEO_DECODER_DESC* pInputDesc,[In] DXGI_COLOR_SPACE_TYPE InputColorSpace,[In] const D3D11_VIDEO_DECODER_CONFIG* pInputConfig,[In] const DXGI_RATIONAL* pFrameRate,[Out] D3D11_VIDEO_SAMPLE_DESC* pRecommendedOutputDesc) + ID3D11VideoDevice1::RecommendVideoDecoderDownsampleParameters +
    + + +

    Represents a video processor for Microsoft Direct3D?11.

    +
    + +

    To get a reference to this interface, call .

    +
    + + hh447799 + ID3D11VideoProcessor + ID3D11VideoProcessor +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the content description that was used to create the video processor.

    +
    + + hh447811 + GetContentDesc + GetContentDesc + void ID3D11VideoProcessor::GetContentDesc([Out] D3D11_VIDEO_PROCESSOR_CONTENT_DESC* pDesc) +
    + + +

    Gets the rate conversion capabilities of the video processor.

    +
    + + hh447813 + GetRateConversionCaps + GetRateConversionCaps + void ID3D11VideoProcessor::GetRateConversionCaps([Out] D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS* pCaps) +
    + + +

    Gets the content description that was used to create the video processor.

    +
    +

    A reference to a structure that receives the content description.

    + + hh447811 + void ID3D11VideoProcessor::GetContentDesc([Out] D3D11_VIDEO_PROCESSOR_CONTENT_DESC* pDesc) + ID3D11VideoProcessor::GetContentDesc +
    + + +

    Gets the rate conversion capabilities of the video processor.

    +
    +

    A reference to a structure that receives the rate conversion capabilities.

    + + hh447813 + void ID3D11VideoProcessor::GetRateConversionCaps([Out] D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS* pCaps) + ID3D11VideoProcessor::GetRateConversionCaps +
    + + +

    Gets the content description that was used to create this enumerator.

    +
    + + hh447803 + ID3D11VideoProcessorEnumerator + ID3D11VideoProcessorEnumerator +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the content description that was used to create this enumerator.

    +
    + + hh447803 + GetVideoProcessorContentDesc + GetVideoProcessorContentDesc + HRESULT ID3D11VideoProcessorEnumerator::GetVideoProcessorContentDesc([Out] D3D11_VIDEO_PROCESSOR_CONTENT_DESC* pContentDesc) +
    + + +

    Gets the capabilities of the video processor.

    +
    + + hh447802 + GetVideoProcessorCaps + GetVideoProcessorCaps + HRESULT ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps([Out] D3D11_VIDEO_PROCESSOR_CAPS* pCaps) +
    + + +

    Gets the content description that was used to create this enumerator.

    +
    +

    A reference to a structure that receives the content description.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447803 + HRESULT ID3D11VideoProcessorEnumerator::GetVideoProcessorContentDesc([Out] D3D11_VIDEO_PROCESSOR_CONTENT_DESC* pContentDesc) + ID3D11VideoProcessorEnumerator::GetVideoProcessorContentDesc +
    + + +

    Queries whether the video processor supports a specified video format.

    +
    +

    The video format to query, specified as a value.

    +

    Receives a bitwise OR of zero or more flags from the enumeration.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447801 + HRESULT ID3D11VideoProcessorEnumerator::CheckVideoProcessorFormat([In] DXGI_FORMAT Format,[Out] unsigned int* pFlags) + ID3D11VideoProcessorEnumerator::CheckVideoProcessorFormat +
    + + +

    Gets the capabilities of the video processor.

    +
    +

    A reference to a structure that receives the capabilities.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447802 + HRESULT ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps([Out] D3D11_VIDEO_PROCESSOR_CAPS* pCaps) + ID3D11VideoProcessorEnumerator::GetVideoProcessorCaps +
    + + +

    Returns a group of video processor capabilities that are associated with frame-rate conversion, including deinterlacing and inverse telecine.

    +
    +

    The zero-based index of the group to retrieve. To get the maximum index, call and check the RateConversionCapsCount member of the structure.

    +

    A reference to a structure that receives the frame-rate conversion capabilities.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + +

    The capabilities defined in the structure are interdependent. Therefore, the driver can support multiple, distinct groups of these capabilities.

    +
    + + hh447806 + HRESULT ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps([In] unsigned int TypeIndex,[Out] D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS* pCaps) + ID3D11VideoProcessorEnumerator::GetVideoProcessorRateConversionCaps +
    + + +

    Gets a list of custom frame rates that a video processor supports.

    +
    +

    The zero-based index of the frame-rate capability group. To get the maxmum index, call and check the RateConversionCapsCount member of the structure.

    +

    The zero-based index of the custom rate to retrieve. To get the maximum index, call and check the CustomRateCount member of the structure.

    This index value is always relative to the capability group specified in the TypeIndex parameter.

    +

    A reference to a structure that receives the custom rate.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447804 + HRESULT ID3D11VideoProcessorEnumerator::GetVideoProcessorCustomRate([In] unsigned int TypeIndex,[In] unsigned int CustomRateIndex,[Out] D3D11_VIDEO_PROCESSOR_CUSTOM_RATE* pRate) + ID3D11VideoProcessorEnumerator::GetVideoProcessorCustomRate +
    + + +

    Gets the range of values for an image filter.

    +
    +

    The type of image filter, specified as a value.

    +

    A reference to a structure. The method fills the structure with the range of values for the specified filter.

    +

    If this method succeeds, it returns . Otherwise, it returns an error code.

    + + hh447805 + HRESULT ID3D11VideoProcessorEnumerator::GetVideoProcessorFilterRange([In] D3D11_VIDEO_PROCESSOR_FILTER Filter,[Out] D3D11_VIDEO_PROCESSOR_FILTER_RANGE* pRange) + ID3D11VideoProcessorEnumerator::GetVideoProcessorFilterRange +
    + + +

    Enumerates the video processor capabilities of a Microsoft Direct3D?11 device.

    +
    + +

    To get a reference to this interface, call .

    +
    + + dn894146 + ID3D11VideoProcessorEnumerator1 + ID3D11VideoProcessorEnumerator1 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Indicates whether the driver supports the specified combination of format and colorspace conversions.

    +
    +

    The format of the video processor input.

    +

    The colorspace of the video processor input.

    +

    The format of the video processor output.

    +

    The colorspace of the video processor output.

    +

    Pointer to a boolean that is set by the driver to indicate if the specified combination of format and colorspace conversions is supported. True if the conversion is supported; otherwise, false.

    +

    This method returns one of the following error codes.

    The operation completed successfully.
    E_INVALIDARGAn invalid parameter was passed or this function was called using an invalid calling pattern.

    ?

    + + dn894147 + HRESULT ID3D11VideoProcessorEnumerator1::CheckVideoProcessorFormatConversion([In] DXGI_FORMAT InputFormat,[In] DXGI_COLOR_SPACE_TYPE InputColorSpace,[In] DXGI_FORMAT OutputFormat,[In] DXGI_COLOR_SPACE_TYPE OutputColorSpace,[Out] BOOL* pSupported) + ID3D11VideoProcessorEnumerator1::CheckVideoProcessorFormatConversion +
    + + +

    Identifies the input surfaces that can be accessed during video processing.

    +
    + +

    To get a reference to this interface, call .

    +
    + + hh447807 + ID3D11VideoProcessorInputView + ID3D11VideoProcessorInputView +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the properties of the video processor input view.

    +
    + + hh447808 + GetDesc + GetDesc + void ID3D11VideoProcessorInputView::GetDesc([Out] D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC* pDesc) +
    + + +

    Gets the properties of the video processor input view.

    +
    +

    A reference to a structure. The method fills the structure with the view properties.

    + + hh447808 + void ID3D11VideoProcessorInputView::GetDesc([Out] D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC* pDesc) + ID3D11VideoProcessorInputView::GetDesc +
    + + +

    Identifies the output surfaces that can be accessed during video processing.

    +
    + +

    To get a reference to this interface, call .

    +
    + + hh447809 + ID3D11VideoProcessorOutputView + ID3D11VideoProcessorOutputView +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the properties of the video processor output view.

    +
    + + hh447810 + GetDesc + GetDesc + void ID3D11VideoProcessorOutputView::GetDesc([Out] D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC* pDesc) +
    + + +

    Gets the properties of the video processor output view.

    +
    +

    A reference to a structure. The method fills the structure with the view properties.

    + + hh447810 + void ID3D11VideoProcessorOutputView::GetDesc([Out] D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC* pDesc) + ID3D11VideoProcessorOutputView::GetDesc +
    + + +

    Contains an initialization vector (IV) for 128-bit Advanced Encryption Standard CTR mode (AES-CTR) block cipher encryption.

    +
    + + hh447597 + D3D11_AES_CTR_IV + D3D11_AES_CTR_IV +
    + + +

    The IV, in big-endian format.

    +
    + + hh447597 + unsigned longlong IV + unsigned longlong IV +
    + + +

    The block count, in big-endian format.

    +
    + + hh447597 + unsigned longlong Count + unsigned longlong Count +
    + + +

    Contains input data for a D3D11_AUTHENTICATED_CONFIGURE_ENCRYPTION_WHEN_ACCESSIBLE command.

    +
    + + hh447600 + D3D11_AUTHENTICATED_CONFIGURE_ACCESSIBLE_ENCRYPTION_INPUT + D3D11_AUTHENTICATED_CONFIGURE_ACCESSIBLE_ENCRYPTION_INPUT +
    + + +

    A structure that contains the command and other data.

    +
    + + hh447600 + D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters + D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters +
    + + +

    A that specifies the type of encryption to apply.

    +
    + + hh447600 + GUID EncryptionGuid + GUID EncryptionGuid +
    + + +

    Contains input data for a D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION command.

    +
    + + hh447601 + D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION_INPUT + D3D11_AUTHENTICATED_CONFIGURE_CRYPTO_SESSION_INPUT +
    + + +

    A structure that contains the command and other data.

    +
    + + hh447601 + D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters + D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters +
    + + +

    A handle to the decoder device. Get this from .

    +
    + + hh447601 + void* DecoderHandle + void DecoderHandle +
    + + +

    A handle to the cryptographic session. Get this from .

    +
    + + hh447601 + void* CryptoSessionHandle + void CryptoSessionHandle +
    + + +

    A handle to the Direct3D device. Get this from D3D11VideoContext::QueryAuthenticatedChannel using D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE. +

    +
    + + hh447601 + void* DeviceHandle + void DeviceHandle +
    + + +

    Contains input data for a D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE command.

    +
    + + hh447602 + D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE_INPUT + D3D11_AUTHENTICATED_CONFIGURE_INITIALIZE_INPUT +
    + + +

    A structure that contains the command and other data.

    +
    + + hh447602 + D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters + D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters +
    + + +

    The initial sequence number for queries.

    +
    + + hh447602 + unsigned int StartSequenceQuery + unsigned int StartSequenceQuery +
    + + +

    The initial sequence number for commands.

    +
    + + hh447602 + unsigned int StartSequenceConfigure + unsigned int StartSequenceConfigure +
    + + +

    Contains input data for the method.

    +
    + + hh447603 + D3D11_AUTHENTICATED_CONFIGURE_INPUT + D3D11_AUTHENTICATED_CONFIGURE_INPUT +
    + + + No documentation. + + + hh447603 + D3D11_OMAC omac + D3D11_OMAC omac + + + + No documentation. + + + hh447603 + GUID ConfigureType + GUID ConfigureType + + + + No documentation. + + + hh447603 + void* hChannel + void hChannel + + + + No documentation. + + + hh447603 + unsigned int SequenceNumber + unsigned int SequenceNumber + + + +

    Contains the response from the method.

    +
    + + hh447604 + D3D11_AUTHENTICATED_CONFIGURE_OUTPUT + D3D11_AUTHENTICATED_CONFIGURE_OUTPUT +
    + + + No documentation. + + + hh447604 + D3D11_OMAC omac + D3D11_OMAC omac + + + + No documentation. + + + hh447604 + GUID ConfigureType + GUID ConfigureType + + + + No documentation. + + + hh447604 + void* hChannel + void hChannel + + + + No documentation. + + + hh447604 + unsigned int SequenceNumber + unsigned int SequenceNumber + + + + No documentation. + + + hh447604 + HRESULT ReturnCode + HRESULT ReturnCode + + + +

    Contains input data for a D3D11_AUTHENTICATED_CONFIGURE_PROTECTION command.

    +
    + + hh447598 + D3D11_AUTHENTICATED_CONFIGURE_PROTECTION_INPUT + D3D11_AUTHENTICATED_CONFIGURE_PROTECTION_INPUT +
    + + +

    A structure that contains the command and other data.

    +
    + + hh447598 + D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters + D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters +
    + + +

    A union that specifies the protection level.

    +
    + + hh447598 + D3D11_AUTHENTICATED_PROTECTION_FLAGS Protections + D3D11_AUTHENTICATED_PROTECTION_FLAGS Protections +
    + + +

    Contains input data for a D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE command.

    +
    + + hh447605 + D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE_INPUT + D3D11_AUTHENTICATED_CONFIGURE_SHARED_RESOURCE_INPUT +
    + + +

    A structure that contains the command and other data.

    +
    + + hh447605 + D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters + D3D11_AUTHENTICATED_CONFIGURE_INPUT Parameters +
    + + +

    A value that specifies the type of process. To specify the Desktop Window Manager (DWM) process, set this member to . Otherwise, set this member to and set the ProcessHandle member to a valid handle.

    +
    + + hh447605 + D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE ProcessType + D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE ProcessType +
    + + +

    A process handle. If the ProcessType member equals , the ProcessHandle member specifies a handle to a process. Otherwise, the value is ignored.

    +
    + + hh447605 + void* ProcessHandle + void ProcessHandle +
    + + +

    If TRUE, the specified process has access to restricted shared resources.

    +
    + + hh447605 + BOOL AllowAccess + BOOL AllowAccess +
    + + +

    Specifies the protection level for video content.

    +
    + + hh447607 + D3D11_AUTHENTICATED_PROTECTION_FLAGS + D3D11_AUTHENTICATED_PROTECTION_FLAGS +
    + + +
    ProtectionEnabled

    If 1, video content protection is enabled.

    OverlayOrFullscreenRequired

    If 1, the application requires video to be displayed using either a hardware overlay or full-screen exclusive mode.

    Reserved

    Reserved. Set all bits to zero.

    +
    + + hh447607 + D3D11_AUTHENTICATED_PROTECTION_FLAGS___MIDL___MIDL_itf_d3d11_0000_0034_0001_INNER Flags + D3D11_AUTHENTICATED_PROTECTION_FLAGS___MIDL___MIDL_itf_d3d11_0000_0034_0001_INNER Flags +
    + + +

    Use this member to access all of the bits in the union.

    +
    + + hh447607 + unsigned int Value + unsigned int Value +
    + + + No documentation. + + + D3D11_AUTHENTICATED_PROTECTION_FLAGS___MIDL___MIDL_itf_d3d11_0000_0034_0001_INNER + D3D11_AUTHENTICATED_PROTECTION_FLAGS___MIDL___MIDL_itf_d3d11_0000_0034_0001_INNER + + + + No documentation. + + + unsigned int ProtectionEnabled + unsigned int ProtectionEnabled + + + + No documentation. + + + unsigned int OverlayOrFullscreenRequired + unsigned int OverlayOrFullscreenRequired + + + + No documentation. + + + unsigned int Reserved + unsigned int Reserved + + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID_COUNT query.

    +
    + + hh447608 + D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_COUNT_OUTPUT + D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_COUNT_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447608 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    The number of encryption GUIDs.

    +
    + + hh447608 + unsigned int EncryptionGuidCount + unsigned int EncryptionGuidCount +
    + + +

    Contains input data for a D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID query.

    +
    + + hh447609 + D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_INPUT + D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_INPUT +
    + + +

    A structure that contains the for the query and other data.

    +
    + + hh447609 + D3D11_AUTHENTICATED_QUERY_INPUT Input + D3D11_AUTHENTICATED_QUERY_INPUT Input +
    + + +

    The index of the encryption .

    +
    + + hh447609 + unsigned int EncryptionGuidIndex + unsigned int EncryptionGuidIndex +
    + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_ENCRYPTION_WHEN_ACCESSIBLE_GUID query.

    +
    + + hh447610 + D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_OUTPUT + D3D11_AUTHENTICATED_QUERY_ACCESSIBILITY_ENCRYPTION_GUID_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447610 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    The index of the encryption .

    +
    + + hh447610 + unsigned int EncryptionGuidIndex + unsigned int EncryptionGuidIndex +
    + + +

    A that specifies a supported encryption type.

    +
    + + hh447610 + GUID EncryptionGuid + GUID EncryptionGuid +
    + + + No documentation. + + + D3D11_AUTHENTICATED_QUERY_ACESSIBILITY_OUTPUT + D3D11_AUTHENTICATED_QUERY_ACESSIBILITY_OUTPUT + + + + No documentation. + + + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + + + + No documentation. + + + D3D11_BUS_TYPE BusType + D3D11_BUS_TYPE BusType + + + + No documentation. + + + BOOL AccessibleInContiguousBlocks + BOOL AccessibleInContiguousBlocks + + + + No documentation. + + + BOOL AccessibleInNonContiguousBlocks + BOOL AccessibleInNonContiguousBlocks + + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE query.

    +
    + + hh447612 + D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE_OUTPUT + D3D11_AUTHENTICATED_QUERY_CHANNEL_TYPE_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447612 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    A value that specifies the channel type.

    +
    + + hh447612 + D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType + D3D11_AUTHENTICATED_CHANNEL_TYPE ChannelType +
    + + +

    Contains input data for a D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION query.

    +
    + + hh447613 + D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_INPUT + D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_INPUT +
    + + +

    A structure that contains the for the query and other data.

    +
    + + hh447613 + D3D11_AUTHENTICATED_QUERY_INPUT Input + D3D11_AUTHENTICATED_QUERY_INPUT Input +
    + + +

    A handle to a decoder device.

    +
    + + hh447613 + void* DecoderHandle + void DecoderHandle +
    + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION query.

    +
    + + hh447614 + D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_OUTPUT + D3D11_AUTHENTICATED_QUERY_CRYPTO_SESSION_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447614 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    A handle to a decoder device.

    +
    + + hh447614 + void* DecoderHandle + void DecoderHandle +
    + + +

    A handle to the cryptographic session that is associated with the decoder device.

    +
    + + hh447614 + void* CryptoSessionHandle + void CryptoSessionHandle +
    + + +

    A handle to the Direct3D device that is associated with the decoder device.

    +
    + + hh447614 + void* DeviceHandle + void DeviceHandle +
    + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_CURRENT_ENCRYPTION_WHEN_ACCESSIBLE query.

    +
    + + hh447615 + D3D11_AUTHENTICATED_QUERY_CURRENT_ACCESSIBILITY_ENCRYPTION_OUTPUT + D3D11_AUTHENTICATED_QUERY_CURRENT_ACCESSIBILITY_ENCRYPTION_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447615 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    A that specifies the current encryption type.

    +
    + + hh447615 + GUID EncryptionGuid + GUID EncryptionGuid +
    + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE query.

    +
    + + hh447616 + D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE_OUTPUT + D3D11_AUTHENTICATED_QUERY_DEVICE_HANDLE_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447616 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    A handle to the device.

    +
    + + hh447616 + void* DeviceHandle + void DeviceHandle +
    + + +

    Contains input data for the method.

    +
    + + hh447617 + D3D11_AUTHENTICATED_QUERY_INPUT + D3D11_AUTHENTICATED_QUERY_INPUT +
    + + + No documentation. + + + hh447617 + GUID QueryType + GUID QueryType + + + + No documentation. + + + hh447617 + void* hChannel + void hChannel + + + + No documentation. + + + hh447617 + unsigned int SequenceNumber + unsigned int SequenceNumber + + + +

    Contains a response from the method.

    +
    + + hh447618 + D3D11_AUTHENTICATED_QUERY_OUTPUT + D3D11_AUTHENTICATED_QUERY_OUTPUT +
    + + + No documentation. + + + hh447618 + D3D11_OMAC omac + D3D11_OMAC omac + + + + No documentation. + + + hh447618 + GUID QueryType + GUID QueryType + + + + No documentation. + + + hh447618 + void* hChannel + void hChannel + + + + No documentation. + + + hh447618 + unsigned int SequenceNumber + unsigned int SequenceNumber + + + + No documentation. + + + hh447618 + HRESULT ReturnCode + HRESULT ReturnCode + + + +

    Contains input data for a D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT query.

    +
    + + hh447619 + D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_INPUT + D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_INPUT +
    + + +

    A structure that contains the for the query and other data.

    +
    + + hh447619 + D3D11_AUTHENTICATED_QUERY_INPUT Input + D3D11_AUTHENTICATED_QUERY_INPUT Input +
    + + +

    A handle to the device.

    +
    + + hh447619 + void* DeviceHandle + void DeviceHandle +
    + + +

    A handle to the cryptographic session.

    +
    + + hh447619 + void* CryptoSessionHandle + void CryptoSessionHandle +
    + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT query.

    +
    + + hh447620 + D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_OUTPUT + D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_COUNT_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447620 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    A handle to the device.

    +
    + + hh447620 + void* DeviceHandle + void DeviceHandle +
    + + +

    A handle to the cryptographic session.

    +
    + + hh447620 + void* CryptoSessionHandle + void CryptoSessionHandle +
    + + +

    The number of output IDs associated with the specified device and cryptographic session.

    +
    + + hh447620 + unsigned int OutputIDCount + unsigned int OutputIDCount +
    + + +

    Contains input data for a D3D11_AUTHENTICATED_QUERY_OUTPUT_ID query.

    +
    + + hh447621 + D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_INPUT + D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_INPUT +
    + + +

    A structure that contains the for the query and other data.

    +
    + + hh447621 + D3D11_AUTHENTICATED_QUERY_INPUT Input + D3D11_AUTHENTICATED_QUERY_INPUT Input +
    + + +

    A handle to the device.

    +
    + + hh447621 + void* DeviceHandle + void DeviceHandle +
    + + +

    A handle to the cryptographic session.

    +
    + + hh447621 + void* CryptoSessionHandle + void CryptoSessionHandle +
    + + +

    The index of the output ID.

    +
    + + hh447621 + unsigned int OutputIDIndex + unsigned int OutputIDIndex +
    + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_OUTPUT_ID query.

    +
    + + hh447622 + D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_OUTPUT + D3D11_AUTHENTICATED_QUERY_OUTPUT_ID_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447622 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    A handle to the device.

    +
    + + hh447622 + void* DeviceHandle + void DeviceHandle +
    + + +

    A handle to the cryptographic session.

    +
    + + hh447622 + void* CryptoSessionHandle + void CryptoSessionHandle +
    + + +

    The index of the output ID.

    +
    + + hh447622 + unsigned int OutputIDIndex + unsigned int OutputIDIndex +
    + + +

    An output ID that is associated with the specified device and cryptographic session.

    +
    + + hh447622 + unsigned longlong OutputID + unsigned longlong OutputID +
    + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_PROTECTION query.

    +
    + + hh447623 + D3D11_AUTHENTICATED_QUERY_PROTECTION_OUTPUT + D3D11_AUTHENTICATED_QUERY_PROTECTION_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447623 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    A union that specifies the protection level.

    +
    + + hh447623 + D3D11_AUTHENTICATED_PROTECTION_FLAGS ProtectionFlags + D3D11_AUTHENTICATED_PROTECTION_FLAGS ProtectionFlags +
    + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT query.

    +
    + + hh447624 + D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT_OUTPUT + D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_COUNT_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447624 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    The number of processes that are allowed to open shared resources that have restricted access. A process cannot open such a resource unless the process has been granted access.

    +
    + + hh447624 + unsigned int RestrictedSharedResourceProcessCount + unsigned int RestrictedSharedResourceProcessCount +
    + + +

    Contains input data for a D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS query.

    +
    + + hh447625 + D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_INPUT + D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_INPUT +
    + + +

    A structure that contains the for the query and other data.

    +
    + + hh447625 + D3D11_AUTHENTICATED_QUERY_INPUT Input + D3D11_AUTHENTICATED_QUERY_INPUT Input +
    + + +

    The index of the process.

    +
    + + hh447625 + unsigned int ProcessIndex + unsigned int ProcessIndex +
    + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS query.

    +
    + +

    The Desktop Window Manager (DWM) process is identified by setting ProcessIdentifier equal to . Other processes are identified by setting the process handle in ProcessHandle and setting ProcessIdentifier equal to .

    +
    + + hh447626 + D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT + D3D11_AUTHENTICATED_QUERY_RESTRICTED_SHARED_RESOURCE_PROCESS_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447626 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    The index of the process in the list of processes.

    +
    + + hh447626 + unsigned int ProcessIndex + unsigned int ProcessIndex +
    + + +

    A value that specifies the type of process.

    +
    + + hh447626 + D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE ProcessIdentifier + D3D11_AUTHENTICATED_PROCESS_IDENTIFIER_TYPE ProcessIdentifier +
    + + +

    A process handle. If the ProcessIdentifier member equals , the ProcessHandle member contains a valid handle to a process. Otherwise, this member is ignored.

    +
    + + hh447626 + void* ProcessHandle + void ProcessHandle +
    + + +

    Contains the response to a D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT query.

    +
    + + hh447627 + D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT_OUTPUT + D3D11_AUTHENTICATED_QUERY_UNRESTRICTED_PROTECTED_SHARED_RESOURCE_COUNT_OUTPUT +
    + + +

    A structure that contains a Message Authentication Code (MAC) and other data.

    +
    + + hh447627 + D3D11_AUTHENTICATED_QUERY_OUTPUT Output + D3D11_AUTHENTICATED_QUERY_OUTPUT Output +
    + + +

    The number of protected, shared resources that can be opened by any process without restrictions.

    +
    + + hh447627 + unsigned int UnrestrictedProtectedSharedResourceCount + unsigned int UnrestrictedProtectedSharedResourceCount +
    + + + No documentation. + + + CD3D11_VIDEO_DEFAULT + CD3D11_VIDEO_DEFAULT + + + +

    Describes an HLSL class instance.

    +
    + +

    The structure is returned by the method.

    The members of this structure except InstanceIndex are valid (non default values) if they describe a class instance aquired using . The InstanceIndex member is only valid when the class instance is aquired using .

    +
    + + ff476098 + D3D11_CLASS_INSTANCE_DESC + D3D11_CLASS_INSTANCE_DESC +
    + + +

    The instance ID of an HLSL class; the default value is 0.

    +
    + + ff476098 + unsigned int InstanceId + unsigned int InstanceId +
    + + +

    The instance index of an HLSL class; the default value is 0.

    +
    + + ff476098 + unsigned int InstanceIndex + unsigned int InstanceIndex +
    + + +

    The type ID of an HLSL class; the default value is 0.

    +
    + + ff476098 + unsigned int TypeId + unsigned int TypeId +
    + + +

    Describes the constant buffer associated with an HLSL class; the default value is 0.

    +
    + + ff476098 + unsigned int ConstantBuffer + unsigned int ConstantBuffer +
    + + +

    The base constant buffer offset associated with an HLSL class; the default value is 0.

    +
    + + ff476098 + unsigned int BaseConstantBufferOffset + unsigned int BaseConstantBufferOffset +
    + + +

    The base texture associated with an HLSL class; the default value is 127.

    +
    + + ff476098 + unsigned int BaseTexture + unsigned int BaseTexture +
    + + +

    The base sampler associated with an HLSL class; the default value is 15.

    +
    + + ff476098 + unsigned int BaseSampler + unsigned int BaseSampler +
    + + +

    True if the class was created; the default value is false.

    +
    + + ff476098 + BOOL Created + BOOL Created +
    + + +

    Information about the video card's performance counter capabilities.

    +
    + +

    This structure is returned by .

    +
    + + ff476104 + D3D11_COUNTER_INFO + D3D11_COUNTER_INFO +
    + + +

    Largest device-dependent counter ID that the device supports. If none are supported, this value will be 0. Otherwise it will be greater than or equal to . See .

    +
    + + ff476104 + D3D11_COUNTER LastDeviceDependentCounter + D3D11_COUNTER LastDeviceDependentCounter +
    + + +

    Number of counters that can be simultaneously supported.

    +
    + + ff476104 + unsigned int NumSimultaneousCounters + unsigned int NumSimultaneousCounters +
    + + +

    Number of detectable parallel units that the counter is able to discern. Values are 1 ~ 4. Use NumDetectableParallelUnits to interpret the values of the VERTEX_PROCESSING, GEOMETRY_PROCESSING, PIXEL_PROCESSING, and OTHER_GPU_PROCESSING counters.

    +
    + + ff476104 + unsigned char NumDetectableParallelUnits + unsigned char NumDetectableParallelUnits +
    + + +

    Describes a counter.

    +
    + +

    This structure is used by , and .

    +
    + + ff476103 + D3D11_COUNTER_DESC + D3D11_COUNTER_DESC +
    + + +

    Type of counter (see ).

    +
    + + ff476103 + D3D11_COUNTER Counter + D3D11_COUNTER Counter +
    + + +

    Reserved.

    +
    + + ff476103 + unsigned int MiscFlags + unsigned int MiscFlags +
    + + +

    Used with to override flags that would be inferred by the resource properties or heap properties, including bind flags, misc flags, and CPU access flags.

    +
    + +

    Use this structure with CreateWrappedResource.

    +
    + + dn914753 + D3D11_RESOURCE_FLAGS + D3D11_RESOURCE_FLAGS +
    + + + No documentation. + + + dn914753 + unsigned int BindFlags + unsigned int BindFlags + + + + No documentation. + + + dn914753 + unsigned int MiscFlags + unsigned int MiscFlags + + + + No documentation. + + + dn914753 + unsigned int CPUAccessFlags + unsigned int CPUAccessFlags + + + + No documentation. + + + dn914753 + unsigned int StructureByteStride + unsigned int StructureByteStride + + + +

    Stencil operations that can be performed based on the results of stencil test.

    +
    + +

    All stencil operations are specified as a . The stencil operation can be set differently based on the outcome of the stencil test (which is referred to as StencilFunc in the stencil test portion of depth-stencil testing.

    This structure is a member of a depth-stencil description.

    +
    + + ff476109 + D3D11_DEPTH_STENCILOP_DESC + D3D11_DEPTH_STENCILOP_DESC +
    + + +

    The stencil operation to perform when stencil testing fails.

    +
    + + ff476109 + D3D11_STENCIL_OP StencilFailOp + D3D11_STENCIL_OP StencilFailOp +
    + + +

    The stencil operation to perform when stencil testing passes and depth testing fails.

    +
    + + ff476109 + D3D11_STENCIL_OP StencilDepthFailOp + D3D11_STENCIL_OP StencilDepthFailOp +
    + + +

    The stencil operation to perform when stencil testing and depth testing both pass.

    +
    + + ff476109 + D3D11_STENCIL_OP StencilPassOp + D3D11_STENCIL_OP StencilPassOp +
    + + +

    A function that compares stencil data against existing stencil data. The function options are listed in .

    +
    + + ff476109 + D3D11_COMPARISON_FUNC StencilFunc + D3D11_COMPARISON_FUNC StencilFunc +
    + + +

    Specifies the subresources of a texture that are accessible from a depth-stencil view.

    +
    + +

    These are valid formats for a depth-stencil view:

    A depth-stencil view cannot use a typeless format. If the format chosen is , then the format of the parent resource is used.

    A depth-stencil-view description is needed when calling .

    +
    + + ff476112 + D3D11_DEPTH_STENCIL_VIEW_DESC + D3D11_DEPTH_STENCIL_VIEW_DESC +
    + + +

    Specifies the subresource from a 1D texture that is accessible to a depth-stencil view.

    +
    + +

    This structure is one member of a depth-stencil-view description (see ).

    +
    + + ff476229 + D3D11_TEX1D_DSV + D3D11_TEX1D_DSV +
    + + +

    The index of the first mipmap level to use.

    +
    + + ff476229 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    Specifies the subresources from an array of 1D textures to use in a depth-stencil view.

    +
    + +

    This structure is one member of a depth-stencil-view description (see ).

    +
    + + ff476225 + D3D11_TEX1D_ARRAY_DSV + D3D11_TEX1D_ARRAY_DSV +
    + + +

    The index of the first mipmap level to use.

    +
    + + ff476225 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + ff476225 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures to use.

    +
    + + ff476225 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Specifies the subresource from a 2D texture that is accessible to a depth-stencil view.

    +
    + +

    This structure is one member of a depth-stencil-view description (see ).

    +
    + + ff476243 + D3D11_TEX2D_DSV + D3D11_TEX2D_DSV +
    + + +

    The index of the first mipmap level to use.

    +
    + + ff476243 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    Specifies the subresources from an array 2D textures that are accessible to a depth-stencil view.

    +
    + +

    This structure is one member of a depth-stencil-view description (see ).

    +
    + + ff476239 + D3D11_TEX2D_ARRAY_DSV + D3D11_TEX2D_ARRAY_DSV +
    + + +

    The index of the first mipmap level to use.

    +
    + + ff476239 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + ff476239 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures to use.

    +
    + + ff476239 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Specifies the subresource from a multisampled 2D texture that is accessible to a depth-stencil view.

    +
    + +

    Because a multisampled 2D texture contains a single subtexture, there is nothing to specify; this unused member is included so that this structure will compile in C.

    +
    + + ff476236 + D3D11_TEX2DMS_DSV + D3D11_TEX2DMS_DSV +
    + + +

    Unused.

    +
    + + ff476236 + unsigned int UnusedField_NothingToDefine + unsigned int UnusedField_NothingToDefine +
    + + +

    Specifies the subresources from an array of multisampled 2D textures for a depth-stencil view.

    +
    + +

    This structure is one member of a depth-stencil-view description (see ).

    +
    + + ff476233 + D3D11_TEX2DMS_ARRAY_DSV + D3D11_TEX2DMS_ARRAY_DSV +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + ff476233 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures to use.

    +
    + + ff476233 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Resource data format (see ). See remarks for allowable formats.

    +
    + + ff476112 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    Type of resource (see ). Specifies how a depth-stencil resource will be accessed; the value is stored in the union in this structure.

    +
    + + ff476112 + D3D11_DSV_DIMENSION ViewDimension + D3D11_DSV_DIMENSION ViewDimension +
    + + +

    A value that describes whether the texture is read only. Pass 0 to specify that it is not read only; otherwise, pass one of the members of the enumerated type.

    +
    + + ff476112 + D3D11_DSV_FLAG Flags + D3D11_DSV_FLAG Flags +
    + + +

    Specifies a 1D texture subresource (see ).

    +
    + + ff476112 + D3D11_TEX1D_DSV Texture1D + D3D11_TEX1D_DSV Texture1D +
    + + +

    Specifies an array of 1D texture subresources (see ).

    +
    + + ff476112 + D3D11_TEX1D_ARRAY_DSV Texture1DArray + D3D11_TEX1D_ARRAY_DSV Texture1DArray +
    + + +

    Specifies a 2D texture subresource (see ).

    +
    + + ff476112 + D3D11_TEX2D_DSV Texture2D + D3D11_TEX2D_DSV Texture2D +
    + + +

    Specifies an array of 2D texture subresources (see ).

    +
    + + ff476112 + D3D11_TEX2D_ARRAY_DSV Texture2DArray + D3D11_TEX2D_ARRAY_DSV Texture2DArray +
    + + +

    Specifies a multisampled 2D texture (see ).

    +
    + + ff476112 + D3D11_TEX2DMS_DSV Texture2DMS + D3D11_TEX2DMS_DSV Texture2DMS +
    + + +

    Specifies an array of multisampled 2D textures (see ).

    +
    + + ff476112 + D3D11_TEX2DMS_ARRAY_DSV Texture2DMSArray + D3D11_TEX2DMS_ARRAY_DSV Texture2DMSArray +
    + + +

    Arguments for draw indexed instanced indirect.

    +
    + +

    The members of this structure serve the same purpose as the parameters of .

    +
    + + dn912868 + D3D11_DRAW_INDEXED_INSTANCED_INDIRECT_ARGS + D3D11_DRAW_INDEXED_INSTANCED_INDIRECT_ARGS +
    + + +

    The number of indices read from the index buffer for each instance.

    +
    + + dn912868 + unsigned int IndexCountPerInstance + unsigned int IndexCountPerInstance +
    + + +

    The number of instances to draw.

    +
    + + dn912868 + unsigned int InstanceCount + unsigned int InstanceCount +
    + + +

    The location of the first index read by the GPU from the index buffer.

    +
    + + dn912868 + unsigned int StartIndexLocation + unsigned int StartIndexLocation +
    + + +

    A value added to each index before reading a vertex from the vertex buffer.

    +
    + + dn912868 + int BaseVertexLocation + int BaseVertexLocation +
    + + +

    A value added to each index before reading per-instance data from a vertex buffer.

    +
    + + dn912868 + unsigned int StartInstanceLocation + unsigned int StartInstanceLocation +
    + + +

    Arguments for draw instanced indirect.

    +
    + +

    The members of this structure serve the same purpose as the parameters of .

    +
    + + dn912869 + D3D11_DRAW_INSTANCED_INDIRECT_ARGS + D3D11_DRAW_INSTANCED_INDIRECT_ARGS +
    + + +

    The number of vertices to draw.

    +
    + + dn912869 + unsigned int VertexCountPerInstance + unsigned int VertexCountPerInstance +
    + + +

    The number of instances to draw.

    +
    + + dn912869 + unsigned int InstanceCount + unsigned int InstanceCount +
    + + +

    The index of the first vertex.

    +
    + + dn912869 + unsigned int StartVertexLocation + unsigned int StartVertexLocation +
    + + +

    A value added to each index before reading per-instance data from a vertex buffer.

    +
    + + dn912869 + unsigned int StartInstanceLocation + unsigned int StartInstanceLocation +
    + + +

    Specifies which bytes in a video surface are encrypted.

    +
    + + hh447630 + D3D11_ENCRYPTED_BLOCK_INFO + D3D11_ENCRYPTED_BLOCK_INFO +
    + + +

    The number of bytes that are encrypted at the start of the buffer.

    +
    + + hh447630 + unsigned int NumEncryptedBytesAtBeginning + unsigned int NumEncryptedBytesAtBeginning +
    + + +

    The number of bytes that are skipped after the first NumEncryptedBytesAtBeginning bytes, and then after each block of NumBytesInEncryptPattern bytes. Skipped bytes are not encrypted.

    +
    + + hh447630 + unsigned int NumBytesInSkipPattern + unsigned int NumBytesInSkipPattern +
    + + +

    The number of bytes that are encrypted after each block of skipped bytes.

    +
    + + hh447630 + unsigned int NumBytesInEncryptPattern + unsigned int NumBytesInEncryptPattern +
    + + + Note??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Describes information about Direct3D 11.1 adapter architecture.

    +
    + + hh404455 + D3D11_FEATURE_DATA_ARCHITECTURE_INFO + D3D11_FEATURE_DATA_ARCHITECTURE_INFO +
    + + +

    Specifies whether a rendering device batches rendering commands and performs multipass rendering into tiles or bins over a render area. Certain API usage patterns that are fine for TileBasedDefferredRenderers (TBDRs) can perform worse on non-TBDRs and vice versa. Applications that are careful about rendering can be friendly to both TBDR and non-TBDR architectures. TRUE if the rendering device batches rendering commands and otherwise.

    +
    + + hh404455 + BOOL TileBasedDeferredRenderer + BOOL TileBasedDeferredRenderer +
    + + +

    Describes compute shader and raw and structured buffer support in the current graphics driver.

    +
    + +

    Direct3D 11 devices () are required to support Compute Shader model 5.0. Direct3D 10.x devices (, ) can optionally support Compute Shader model 4.0 or 4.1.

    +
    + + ff476126 + D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS + D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS +
    + + +

    TRUE if compute shaders and raw and structured buffers are supported; otherwise .

    +
    + + ff476126 + BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x + BOOL ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x +
    + + + Note??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Describes Direct3D 11.1 feature options in the current graphics driver.

    +
    + +

    If a Microsoft Direct3D device supports feature level 11.1 (), when you call with , CheckFeatureSupport returns a reference to with all member set to TRUE except the SAD4ShaderInstructions and ExtendedDoublesShaderInstructions members, which are optionally supported by the hardware and driver and therefore can be TRUE or .

    Feature level 11.1 provides the following additional features:

    • UAVs at every shader stage with 64 UAV bind slots instead of 8.
    • Target-independent rasterization, which enables you to set the ForcedSampleCount member of to 1, 4, 8, or 16 and to render to RTVs with a single sample.
    • UAV-only rendering with the ForcedSampleCount member of set to up to 16 (only up to 8 for feature level 11).

    The runtime always sets the following groupings of members identically. That is, all the values in a grouping are TRUE or together:

    • DiscardAPIsSeenByDriver and FlagsForUpdateAndCopySeenByDriver
    • ClearView, CopyWithOverlap, ConstantBufferPartialUpdate, ConstantBufferOffsetting, and MapNoOverwriteOnDynamicConstantBuffer
    • MapNoOverwriteOnDynamicBufferSRV and MultisampleRTVWithForcedSampleCountOne
    +
    + + hh404457 + D3D11_FEATURE_DATA_D3D11_OPTIONS + D3D11_FEATURE_DATA_D3D11_OPTIONS +
    + + +

    Specifies whether logic operations are available in blend state. The runtime sets this member to TRUE if logic operations are available in blend state and otherwise. This member is for feature level 9.1, 9.2, and 9.3. This member is optional for feature level 10, 10.1, and 11. This member is TRUE for feature level 11.1.

    +
    + + hh404457 + BOOL OutputMergerLogicOp + BOOL OutputMergerLogicOp +
    + + +

    Specifies whether the driver can render with no render target views (RTVs) or depth stencil views (DSVs), and only unordered access views (UAVs) bound. The runtime sets this member to TRUE if the driver can render with no RTVs or DSVs and only UAVs bound and otherwise. If TRUE, you can set the ForcedSampleCount member of to 1, 4, or 8 when you render with no RTVs or DSV and only UAVs bound. For feature level 11.1, this member is always TRUE and you can also set ForcedSampleCount to 16 in addition to 1, 4, or 8. The default value of ForcedSampleCount is 0, which means the same as if the value is set to 1. You can always set ForcedSampleCount to 0 or 1 for UAV-only rendering independently of how this member is set.

    +
    + + hh404457 + BOOL UAVOnlyRenderingForcedSampleCount + BOOL UAVOnlyRenderingForcedSampleCount +
    + + +

    Specifies whether the driver supports the and methods. The runtime sets this member to TRUE if the driver supports these methods and otherwise. How this member is set does not indicate whether the driver actually uses these methods; that is, the driver might ignore these methods if they are not useful to the hardware. If , the runtime does not expose these methods to the driver because the driver does not support them. You can monitor this member during development to rule out legacy drivers on hardware where these methods might have otherwise been beneficial. You are not required to write separate code paths based on whether this member is TRUE or ; you can call these methods whenever applicable.

    +
    + + hh404457 + BOOL DiscardAPIsSeenByDriver + BOOL DiscardAPIsSeenByDriver +
    + + +

    Specifies whether the driver supports new semantics for copy and update that are exposed by the and methods. The runtime sets this member to TRUE if the driver supports new semantics for copy and update. The runtime sets this member to only for legacy drivers. The runtime handles this member similarly to the DiscardAPIsSeenByDriver member.

    +
    + + hh404457 + BOOL FlagsForUpdateAndCopySeenByDriver + BOOL FlagsForUpdateAndCopySeenByDriver +
    + + +

    Specifies whether the driver supports the method. The runtime sets this member to TRUE if the driver supports this method and otherwise. If , the runtime does not expose this method to the driver because the driver does not support it.

    Note??For feature level 9.1, 9.2, and 9.3, this member is always TRUE because the option is emulated by the runtime. ?
    +
    + + hh404457 + BOOL ClearView + BOOL ClearView +
    + + +

    Specifies whether you can call with overlapping source and destination rectangles. The runtime sets this member to TRUE if you can call CopySubresourceRegion1 with overlapping source and destination rectangles and otherwise. If , the runtime does not expose this method to the driver because the driver does not support it.

    Note??For feature level 9.1, 9.2, and 9.3, this member is always TRUE because drivers already support the option for these feature levels. ?
    +
    + + hh404457 + BOOL CopyWithOverlap + BOOL CopyWithOverlap +
    + + +

    Specifies whether the driver supports partial updates of constant buffers. The runtime sets this member to TRUE if the driver supports partial updates of constant buffers and otherwise. If , the runtime does not expose this operation to the driver because the driver does not support it.

    Note??For feature level 9.1, 9.2, and 9.3, this member is always TRUE because the option is emulated by the runtime. ?
    +
    + + hh404457 + BOOL ConstantBufferPartialUpdate + BOOL ConstantBufferPartialUpdate +
    + + +

    Specifies whether the driver supports new semantics for setting offsets in constant buffers for a shader. The runtime sets this member to TRUE if the driver supports allowing you to specify offsets when you call new methods like the method and otherwise. If , the runtime does not expose this operation to the driver because the driver does not support it.

    Note??For feature level 9.1, 9.2, and 9.3, this member is always TRUE because the option is emulated by the runtime. ?
    +
    + + hh404457 + BOOL ConstantBufferOffsetting + BOOL ConstantBufferOffsetting +
    + + +

    Specifies whether you can call with on a dynamic constant buffer (that is, whether the driver supports this operation). The runtime sets this member to TRUE if the driver supports this operation and otherwise. If , the runtime fails this method because the driver does not support the operation.

    Note??For feature level 9.1, 9.2, and 9.3, this member is always TRUE because the option is emulated by the runtime. ?
    +
    + + hh404457 + BOOL MapNoOverwriteOnDynamicConstantBuffer + BOOL MapNoOverwriteOnDynamicConstantBuffer +
    + + +

    Specifies whether you can call with on a dynamic buffer SRV (that is, whether the driver supports this operation). The runtime sets this member to TRUE if the driver supports this operation and otherwise. If , the runtime fails this method because the driver does not support the operation.

    +
    + + hh404457 + BOOL MapNoOverwriteOnDynamicBufferSRV + BOOL MapNoOverwriteOnDynamicBufferSRV +
    + + +

    Specifies whether the driver supports multisample rendering when you render with RTVs bound. If TRUE, you can set the ForcedSampleCount member of to 1 with a multisample RTV bound. The driver can support this option on feature level 10 and higher. If , the rasterizer-state creation will fail because the driver is legacy or the feature level is too low.

    +
    + + hh404457 + BOOL MultisampleRTVWithForcedSampleCountOne + BOOL MultisampleRTVWithForcedSampleCountOne +
    + + +

    Specifies whether the hardware and driver support the msad4 intrinsic function in shaders. The runtime sets this member to TRUE if the hardware and driver support calls to msad4 intrinsic functions in shaders. If , the driver is legacy or the hardware does not support the option; the runtime will fail shader creation for shaders that use msad4.

    +
    + + hh404457 + BOOL SAD4ShaderInstructions + BOOL SAD4ShaderInstructions +
    + + +

    Specifies whether the hardware and driver support the fma intrinsic function and other extended doubles instructions (DDIV and DRCP) in shaders. The fma intrinsic function emits an extended doubles DFMA instruction. The runtime sets this member to TRUE if the hardware and driver support extended doubles instructions in shaders (shader model 5 and higher). Support of this option implies support of basic double-precision shader instructions as well. You can use the value to query for support of double-precision shaders. If , the hardware and driver do not support the option; the runtime will fail shader creation for shaders that use extended doubles instructions.

    +
    + + hh404457 + BOOL ExtendedDoublesShaderInstructions + BOOL ExtendedDoublesShaderInstructions +
    + + +

    Specifies whether the hardware and driver support sharing a greater variety of Texture2D resource types and formats. The runtime sets this member to TRUE if the hardware and driver support extended Texture2D resource sharing.

    +
    + + hh404457 + BOOL ExtendedResourceSharing + BOOL ExtendedResourceSharing +
    + + + Note?? This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?

    Describes Direct3D 11.2 feature options in the current graphics driver.

    +
    + +

    If the Direct3D API is the Direct3D 11.2 runtime and can support 11.2 features, for will return a SUCCESS code when valid parameters are passed. The members of will be set appropriately based on the system's graphics hardware and graphics driver.

    +
    + + dn280377 + D3D11_FEATURE_DATA_D3D11_OPTIONS1 + D3D11_FEATURE_DATA_D3D11_OPTIONS1 +
    + + +

    Specifies whether the hardware and driver support tiled resources. The runtime sets this member to a -typed value that indicates if the hardware and driver support tiled resources and at what tier level.

    +
    + + dn280377 + D3D11_TILED_RESOURCES_TIER TiledResourcesTier + D3D11_TILED_RESOURCES_TIER TiledResourcesTier +
    + + +

    Specifies whether the hardware and driver support the filtering options () of comparing the result to the minimum or maximum value during texture sampling. The runtime sets this member to TRUE if the hardware and driver support these filtering options.

    +
    + + dn280377 + BOOL MinMaxFiltering + BOOL MinMaxFiltering +
    + + +

    Specifies whether the hardware and driver also support the method on depth formats. For info about valid depth formats, see .

    +
    + + dn280377 + BOOL ClearViewAlsoSupportsDepthOnlyFormats + BOOL ClearViewAlsoSupportsDepthOnlyFormats +
    + + +

    Specifies support for creating resources that can be passed to the and methods. This means that the CPUAccessFlags member of the structure may be set with the desired elements when the Usage member of is set to . The runtime sets this member to TRUE if the hardware is capable of at least and the graphics device driver supports mappable default buffers.

    +
    + + dn280377 + BOOL MapOnDefaultBuffers + BOOL MapOnDefaultBuffers +
    + + + No documentation. + + + D3D11_FEATURE_DATA_D3D11_OPTIONS2 + D3D11_FEATURE_DATA_D3D11_OPTIONS2 + + + + No documentation. + + + BOOL PSSpecifiedStencilRefSupported + BOOL PSSpecifiedStencilRefSupported + + + + No documentation. + + + BOOL TypedUAVLoadAdditionalFormats + BOOL TypedUAVLoadAdditionalFormats + + + + No documentation. + + + BOOL ROVsSupported + BOOL ROVsSupported + + + + No documentation. + + + D3D11_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier + D3D11_CONSERVATIVE_RASTERIZATION_TIER ConservativeRasterizationTier + + + + No documentation. + + + D3D11_TILED_RESOURCES_TIER TiledResourcesTier + D3D11_TILED_RESOURCES_TIER TiledResourcesTier + + + + No documentation. + + + BOOL MapOnDefaultTextures + BOOL MapOnDefaultTextures + + + + No documentation. + + + BOOL StandardSwizzle + BOOL StandardSwizzle + + + + No documentation. + + + BOOL UnifiedMemoryArchitecture + BOOL UnifiedMemoryArchitecture + + + +

    Describes Direct3D 11.3 feature options in the current graphics driver.

    +
    + + dn933226 + D3D11_FEATURE_DATA_D3D11_OPTIONS3 + D3D11_FEATURE_DATA_D3D11_OPTIONS3 +
    + + +

    Whether to use the VP and RT array index from any shader feeding the rasterizer.

    +
    + + dn933226 + BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizer + BOOL VPAndRTArrayIndexFromAnyShaderFeedingRasterizer +
    + + +

    Describes Direct3D 11.4 feature options in the current graphics driver.

    +
    + +

    Use this structure with the member of .

    Refer to the section on NV12 in Direct3D 11.4 Features.

    +
    + + mt732994 + D3D11_FEATURE_DATA_D3D11_OPTIONS4 + D3D11_FEATURE_DATA_D3D11_OPTIONS4 +
    + + +

    Specifies a that determines if NV12 textures can be shared across processes and D3D devices.

    +
    + + mt732994 + BOOL ExtendedNV12SharedTextureSupported + BOOL ExtendedNV12SharedTextureSupported +
    + + + Note??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Describes Direct3D 9 feature options in the current graphics driver.

    +
    + + hh404458 + D3D11_FEATURE_DATA_D3D9_OPTIONS + D3D11_FEATURE_DATA_D3D9_OPTIONS +
    + + +

    Specifies whether the driver supports the nonpowers-of-2-unconditionally feature. For more information about this feature, see feature level. The runtime sets this member to TRUE for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to if the hardware and driver support the powers-of-2 (2D textures must have widths and heights specified as powers of two) feature or the nonpowers-of-2-conditionally feature. For more information about this feature, see feature level.

    +
    + + hh404458 + BOOL FullNonPow2TextureSupport + BOOL FullNonPow2TextureSupport +
    + + + Note??This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?

    Describes Direct3D 9 feature options in the current graphics driver.

    +
    + +

    You can use the enumeration value with to query a driver about support for Direct3D 9 feature options rather than making multiple calls to by using , , and , which provide identical info about supported Direct3D 9 feature options.

    +
    + + dn629642 + D3D11_FEATURE_DATA_D3D9_OPTIONS1 + D3D11_FEATURE_DATA_D3D9_OPTIONS1 +
    + + +

    Specifies whether the driver supports the nonpowers-of-2-unconditionally feature. For more info about this feature, see feature level. The runtime sets this member to TRUE for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to if the hardware and driver support the powers-of-2 (2D textures must have widths and heights specified as powers of two) feature or the nonpowers-of-2-conditionally feature.

    +
    + + dn629642 + BOOL FullNonPow2TextureSupported + BOOL FullNonPow2TextureSupported +
    + + +

    Specifies whether the driver supports the shadowing feature with the comparison-filtering mode set to less than or equal to. The runtime sets this member to TRUE for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to TRUE only if the hardware and driver support the shadowing feature; otherwise .

    +
    + + dn629642 + BOOL DepthAsTextureWithLessEqualComparisonFilterSupported + BOOL DepthAsTextureWithLessEqualComparisonFilterSupported +
    + + +

    Specifies whether the hardware and driver support simple instancing. The runtime sets this member to TRUE if the hardware and driver support simple instancing.

    +
    + + dn629642 + BOOL SimpleInstancingSupported + BOOL SimpleInstancingSupported +
    + + +

    Specifies whether the hardware and driver support setting a single face of a TextureCube as a render target while the depth stencil surface that is bound alongside can be a Texture2D (as opposed to TextureCube). The runtime sets this member to TRUE if the hardware and driver support this feature; otherwise .

    If the hardware and driver don't support this feature, the app must match the render target surface type with the depth stencil surface type. Because hardware at Direct3D 9.3 and lower feature levels doesn't allow TextureCube depth surfaces, the only way to render a scene into a TextureCube while having depth buffering enabled is to render each TextureCube face separately to a Texture2D render target first (because that can be matched with a Texture2D depth), and then copy the results into the TextureCube. If the hardware and driver support this feature, the app can just render to the TextureCube faces directly while getting depth buffering out of a Texture2D depth buffer.

    You only need to query this feature from hardware at Direct3D 9.3 and lower feature levels because hardware at Direct3D 10.0 and higher feature levels allow TextureCube depth surfaces.

    +
    + + dn629642 + BOOL TextureCubeFaceRenderTargetWithNonCubeDepthStencilSupported + BOOL TextureCubeFaceRenderTargetWithNonCubeDepthStencilSupported +
    + + + Note??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Describes Direct3D?9 shadow support in the current graphics driver.

    +
    + +

    Shadows are an important element in realistic 3D scenes. You can use the shadow buffer technique to render shadows. The basic principle of the technique is to use a depth buffer to store the scene depth info from the perspective of the light source, and then compare each point rendered in the scene with that buffer to determine if it is in shadow.

    To render objects into the scene with shadows on them, you create sampler state objects with comparison filtering set and the comparison mode (ComparisonFunc) to LessEqual. You can also set BorderColor addressing on this depth sampler, even though BorderColor isn't typically allowed on feature levels 9.1 and 9.2. By using the border color and picking 0.0 or 1.0 as the border color value, you can control whether the regions off the edge of the shadow map appear to be always in shadow or never in shadow respectively. + You can control the shadow filter quality by the Mag and Min filter settings in the comparison sampler. Point sampling will produce shadows with non-anti-aliased edges. Linear filter sampler settings will result in higher quality shadow edges, but might affect performance on some power-optimized devices.

    Note??If you use a separate setting for Mag versus Min filter options, you produce an undefined result. Anisotropic filtering is not supported. The Mip filter choice is not relevant because feature level 9.x does not allow mipmapped depth buffers.?Note??On feature level 9.x, you can't compile a shader with the SampleCmp and SampleCmpLevelZero intrinsic functions by using older versions of the compiler. For example, you can't use the fxc.exe compiler that ships with the DirectX SDK or use the ** functions (like ) that are implemented in D3DCompiler_43.dll and earlier. These intrinsic functions on feature level 9.x are only supported in the fxc.exe compiler that ships with the Windows?8 SDK and later and with the ** functions that are implemented in D3DCompiler_44.dll and later. + But these intrinsic functions are present in shader models for feature levels higher than 9.x.? +
    + + jj247569 + D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT + D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT +
    + + +

    Specifies whether the driver supports the shadowing feature with the comparison-filtering mode set to less than or equal to. The runtime sets this member to TRUE for hardware at Direct3D 10 and higher feature levels. For hardware at Direct3D 9.3 and lower feature levels, the runtime sets this member to TRUE only if the hardware and driver support the shadowing feature; otherwise .

    +
    + + jj247569 + BOOL SupportsDepthAsTextureWithLessEqualComparisonFilter + BOOL SupportsDepthAsTextureWithLessEqualComparisonFilter +
    + + + Note?? This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?

    Describes whether simple instancing is supported.

    +
    + +

    If the Direct3D API is the Direct3D 11.2 runtime and can support 11.2 features, for will return a SUCCESS code when valid parameters are passed. The SimpleInstancingSupported member of will be set to TRUE or .

    Simple instancing means that instancing is supported with the caveat that the InstanceDataStepRate member of the structure must be equal to 1. This does not change the full instancing support provided by hardware at feature level 9.3 and above, and is meant to expose the instancing support that may be available on feature level 9.2 and 9.1 hardware.

    +
    + + dn280414 + D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT + D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT +
    + + +

    Specifies whether the hardware and driver support simple instancing. The runtime sets this member to TRUE if the hardware and driver support simple instancing.

    +
    + + dn280414 + BOOL SimpleInstancingSupported + BOOL SimpleInstancingSupported +
    + + +

    Describes double data type support in the current graphics driver.

    +
    + +

    If the runtime sets DoublePrecisionFloatShaderOps to TRUE, the hardware and driver support the following Shader Model 5 instructions:

    • dadd
    • dmax
    • dmin
    • dmul
    • deq
    • dge
    • dlt
    • dne
    • dmov
    • dmovc
    • dtof
    • ftod
    Note??If DoublePrecisionFloatShaderOps is TRUE, the hardware and driver do not necessarily support double-precision division.? +
    + + ff476127 + D3D11_FEATURE_DATA_DOUBLES + D3D11_FEATURE_DATA_DOUBLES +
    + + +

    Specifies whether double types are allowed. If TRUE, double types are allowed; otherwise . The runtime must set DoublePrecisionFloatShaderOps to TRUE in order for you to use any HLSL shader that is compiled with a double type.

    +
    + + ff476127 + BOOL DoublePrecisionFloatShaderOps + BOOL DoublePrecisionFloatShaderOps +
    + + +

    Describes which resources are supported by the current graphics driver for a given format.

    +
    + + ff476128 + D3D11_FEATURE_DATA_FORMAT_SUPPORT + D3D11_FEATURE_DATA_FORMAT_SUPPORT +
    + + +

    to return information on.

    +
    + + ff476128 + DXGI_FORMAT InFormat + DXGI_FORMAT InFormat +
    + + +

    Combination of flags indicating which resources are supported.

    +
    + + ff476128 + D3D11_FORMAT_SUPPORT OutFormatSupport + D3D11_FORMAT_SUPPORT OutFormatSupport +
    + + +

    Describes which unordered resource options are supported by the current graphics driver for a given format.

    +
    + + ff476129 + D3D11_FEATURE_DATA_FORMAT_SUPPORT2 + D3D11_FEATURE_DATA_FORMAT_SUPPORT2 +
    + + +

    to return information on.

    +
    + + ff476129 + DXGI_FORMAT InFormat + DXGI_FORMAT InFormat +
    + + +

    Combination of flags indicating which unordered resource options are supported.

    +
    + + ff476129 + D3D11_FORMAT_SUPPORT2 OutFormatSupport2 + D3D11_FORMAT_SUPPORT2 OutFormatSupport2 +
    + + +

    Describes feature data GPU virtual address support, including maximum address bits per resource and per process.

    +
    + +

    See .

    +
    + + mt158212 + D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT + D3D11_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT +
    + + +

    The maximum GPU virtual address bits per resource.

    +
    + + mt158212 + unsigned int MaxGPUVirtualAddressBitsPerResource + unsigned int MaxGPUVirtualAddressBitsPerResource +
    + + +

    The maximum GPU virtual address bits per process.

    +
    + + mt158212 + unsigned int MaxGPUVirtualAddressBitsPerProcess + unsigned int MaxGPUVirtualAddressBitsPerProcess +
    + + + Note??This structure is supported by the Direct3D 11.2 runtime, which is available on Windows?8.1 and later operating systems.?

    Describes whether a GPU profiling technique is supported.

    +
    + +

    If the Direct3D API is the Direct3D 11.2 runtime and can support 11.2 features, for will return a SUCCESS code when valid parameters are passed. The Profile member of will be set to TRUE or .

    +
    + + dn280415 + D3D11_FEATURE_DATA_MARKER_SUPPORT + D3D11_FEATURE_DATA_MARKER_SUPPORT +
    + + +

    Specifies whether the hardware and driver support a GPU profiling technique that can be used with development tools. The runtime sets this member to TRUE if the hardware and driver support data marking.

    +
    + + dn280415 + BOOL Profile + BOOL Profile +
    + + +

    Stencil operations that can be performed based on the results of stencil test.

    +
    + +

    All stencil operations are specified as a . The stencil operation can be set differently based on the outcome of the stencil test (which is referred to as StencilFunc in the stencil test portion of depth-stencil testing.

    This structure is a member of a depth-stencil description.

    +
    + + ff476109 + D3D11_FEATURE_DATA_SHADER_CACHE + D3D11_FEATURE_DATA_SHADER_CACHE +
    + + +

    The stencil operation to perform when stencil testing fails.

    +
    + + ff476109 + unsigned int SupportFlags + unsigned int SupportFlags +
    + + + Note??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Describes precision support options for shaders in the current graphics driver.

    +
    + +

    For hardware at Direct3D 10 and higher feature levels, the runtime sets both members identically. For hardware at Direct3D 9.3 and lower feature levels, the runtime can set a lower precision support in the PixelShaderMinPrecision member than the AllOtherShaderStagesMinPrecision member; for 9.3 and lower, all other shader stages represent only the vertex shader.

    For more info about HLSL minimum precision, see using HLSL minimum precision.

    +
    + + hh404460 + D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT + D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT +
    + + +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies minimum precision levels that the driver supports for the pixel shader. A value of zero indicates that the driver supports only full 32-bit precision for the pixel shader.

    +
    + + hh404460 + unsigned int PixelShaderMinPrecision + unsigned int PixelShaderMinPrecision +
    + + +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies minimum precision levels that the driver supports for all other shader stages. A value of zero indicates that the driver supports only full 32-bit precision for all other shader stages.

    +
    + + hh404460 + unsigned int AllOtherShaderStagesMinPrecision + unsigned int AllOtherShaderStagesMinPrecision +
    + + +

    Describes the multi-threading features that are supported by the current graphics driver.

    +
    + +

    Use the structure with the method to determine multi-threading support.

    +
    + + ff476130 + D3D11_FEATURE_DATA_THREADING + D3D11_FEATURE_DATA_THREADING +
    + + +

    TRUE means resources can be created concurrently on multiple threads while drawing; means that the presence of coarse synchronization will prevent concurrency.

    +
    + + ff476130 + BOOL DriverConcurrentCreates + BOOL DriverConcurrentCreates +
    + + +

    TRUE means command lists are supported by the current driver; means that the API will emulate deferred contexts and command lists with software.

    +
    + + ff476130 + BOOL DriverCommandLists + BOOL DriverCommandLists +
    + + +

    Allow or deny certain types of messages to pass through a filter.

    +
    + + ff476178 + D3D11_INFO_QUEUE_FILTER + D3D11_INFO_QUEUE_FILTER +
    + + +

    Number of message categories to allow or deny.

    +
    + + ff476178 + D3D11_INFO_QUEUE_FILTER_DESC AllowList + D3D11_INFO_QUEUE_FILTER_DESC AllowList +
    + + +

    Array of message categories to allow or deny. Array must have at least NumCategories members (see ).

    +
    + + ff476178 + D3D11_INFO_QUEUE_FILTER_DESC DenyList + D3D11_INFO_QUEUE_FILTER_DESC DenyList +
    + + +

    Allow or deny certain types of messages to pass through a filter.

    +
    + + ff476178 + D3D11_INFO_QUEUE_FILTER_DESC + D3D11_INFO_QUEUE_FILTER_DESC +
    + + +

    Number of message categories to allow or deny.

    +
    + + ff476178 + unsigned int NumCategories + unsigned int NumCategories +
    + + +

    Array of message categories to allow or deny. Array must have at least NumCategories members (see ).

    +
    + + ff476178 + D3D11_MESSAGE_CATEGORY* pCategoryList + D3D11_MESSAGE_CATEGORY pCategoryList +
    + + +

    Number of message severity levels to allow or deny.

    +
    + + ff476178 + unsigned int NumSeverities + unsigned int NumSeverities +
    + + +

    Array of message severity levels to allow or deny. Array must have at least NumSeverities members (see ).

    +
    + + ff476178 + D3D11_MESSAGE_SEVERITY* pSeverityList + D3D11_MESSAGE_SEVERITY pSeverityList +
    + + +

    Number of message IDs to allow or deny.

    +
    + + ff476178 + unsigned int NumIDs + unsigned int NumIDs +
    + + +

    Array of message IDs to allow or deny. Array must have at least NumIDs members (see ).

    +
    + + ff476178 + D3D11_MESSAGE_ID* pIDList + D3D11_MESSAGE_ID pIDList +
    + + + Gets or sets the categories. + + + The categories. + + + + + Gets or sets the severities. + + + The severities. + + + + + Gets or sets the ids. + + + The ids. + + + + +

    A description of a single element for the input-assembler stage.

    +
    + +

    An input-layout object contains an array of structures, each structure defines one element being read from an input slot. Create an input-layout object by calling . For an example, see the "Create the Input-Layout Object" subtopic under the Getting Started with the Input-Assembler Stage topic.

    +
    + + ff476180 + D3D11_INPUT_ELEMENT_DESC + D3D11_INPUT_ELEMENT_DESC +
    + + +

    The HLSL semantic associated with this element in a shader input-signature.

    +
    + + ff476180 + const char* SemanticName + char SemanticName +
    + + +

    The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name

    matrix

    , however each of the four component would have different semantic indices (0, 1, 2, and 3).

    +
    + + ff476180 + unsigned int SemanticIndex + unsigned int SemanticIndex +
    + + +

    The data type of the element data. See .

    +
    + + ff476180 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    An integer value that identifies the input-assembler (see input slot). Valid values are between 0 and 15, defined in D3D11.h.

    +
    + + ff476180 + unsigned int InputSlot + unsigned int InputSlot +
    + + +

    Optional. Offset (in bytes) between each element. Use D3D11_APPEND_ALIGNED_ELEMENT for convenience to define the current element directly after the previous one, including any packing if necessary.

    +
    + + ff476180 + unsigned int AlignedByteOffset + unsigned int AlignedByteOffset +
    + + +

    Identifies the input data class for a single input slot (see ).

    +
    + + ff476180 + D3D11_INPUT_CLASSIFICATION InputSlotClass + D3D11_INPUT_CLASSIFICATION InputSlotClass +
    + + +

    The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data (the slot class is set to ).

    +
    + + ff476180 + unsigned int InstanceDataStepRate + unsigned int InstanceDataStepRate +
    + + + Returns a value that can be used for the offset parameter of an InputElement to indicate that the element + should be aligned directly after the previous element, including any packing if neccessary. + + A value used to align input elements. + D3D11_APPEND_ALIGNED_ELEMENT + + + + Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + Offset (in bytes) between each element. Use AppendAligned for convenience to define the current element directly after the previous one, including any packing if necessary. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + Identifies the input data class for a single input slot. + The number of instances to draw using the same per-instance data before advancing in the buffer by one element. This value must be 0 for an element that contains per-vertex data. + + + + Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + Offset (in bytes) between each element. Use AppendAligned for convenience to define the current element directly after the previous one, including any packing if necessary. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + + + + Initializes a new instance of the struct. + + The HLSL semantic associated with this element in a shader input-signature. + The semantic index for the element. A semantic index modifies a semantic, with an integer index number. A semantic index is only needed in a case where there is more than one element with the same semantic. For example, a 4x4 matrix would have four components each with the semantic name matrix, however each of the four component would have different semantic indices (0, 1, 2, and 3). + The data type of the element data. + An integer value that identifies the input-assembler. Valid values are between 0 and 15. + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + + + + + + + Implements the operator ==. + + The left. + The right. + + The result of the operator. + + + + + Implements the operator !=. + + The left. + The right. + + The result of the operator. + + + + +

    [Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]

    Represents key exchange data for hardware content protection.

    +
    + +

    A reference to this structure is passed in the pData parameter of method when the is creating using the D3D11_KEY_EXCHANGE_HW_PROTECTION key exchange type.

    +
    + + dn894115 + D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA + D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA +
    + + +

    The function ID of the DRM command. The values and meanings of the function ID are defined by the DRM specification.

    +
    + + dn894115 + unsigned int HWProtectionFunctionID + unsigned int HWProtectionFunctionID +
    + + +

    Pointer to a buffer containing a structure that specifies memory reserved for IHV use and the input data for the DRM command.

    +
    + + dn894115 + D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA* pInputData + D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA pInputData +
    + + +

    Pointer to a buffer containing a structure that specifies memory reserved for IHV use and the input data for the DRM command.

    +
    + + dn894115 + D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA* pOutputData + D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA pOutputData +
    + + +

    The result of the hardware DRM command.

    +
    + + dn894115 + HRESULT Status + HRESULT Status +
    + + +

    [Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]

    Represents key exchange input data for hardware content protection.

    +
    + + dn894116 + D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA + D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA +
    + + +

    The size of the private data reserved for IHV usage. This size is determined from the pPrivateInputSize parameter returned by the function.

    +
    + + dn894116 + unsigned int PrivateDataSize + unsigned int PrivateDataSize +
    + + +

    The size of the DRM command data.

    +
    + + dn894116 + unsigned int HWProtectionDataSize + unsigned int HWProtectionDataSize +
    + + +

    If PrivateDataSize is greater than 0, pbInput[0] ? pbInput[PrivateDataSize - 1] is reserved for IHV use.

    pbInput[PrivateDataSize] ? pbInput[HWProtectionDataSize + PrivateDataSize - 1] contains the input data for the DRM command. The format and size of the DRM command is defined by the DRM specification.

    +
    + + dn894116 + unsigned char pbInput[4] + unsigned char pbInput +
    + + +

    [Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]

    Represents key exchange output data for hardware content protection.

    +
    + + dn894117 + D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA + D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA +
    + + +

    The size of the private data reserved for IHV usage. This size is determined from the pPrivateOutputSize parameter returned by the function.

    +
    + + dn894117 + unsigned int PrivateDataSize + unsigned int PrivateDataSize +
    + + +

    The maximum size of data that the driver can return in the output buffer. The last byte that it can write to is pbOuput[PrivateDataSize + MaxHWProtectionDataSize ? 1].

    +
    + + dn894117 + unsigned int MaxHWProtectionDataSize + unsigned int MaxHWProtectionDataSize +
    + + +

    The size of the output data written by the driver.

    +
    + + dn894117 + unsigned int HWProtectionDataSize + unsigned int HWProtectionDataSize +
    + + +

    The number of 100 nanosecond units spent transporting the data.

    +
    + + dn894117 + unsigned longlong TransportTime + unsigned longlong TransportTime +
    + + +

    The number of 100 nanosecond units spent executing the content protection command.

    +
    + + dn894117 + unsigned longlong ExecutionTime + unsigned longlong ExecutionTime +
    + + +

    If PrivateDataSize is greater than 0, pbInput[0] ? pbOutput[PrivateDataSize - 1] is reserved for IHV use.

    pbOutput[PrivateDataSize] ? pbOutput[HWProtectionDataSize + PrivateDataSize - 1] contains the input data for the DRM command. The format and size of the DRM command is defined by the DRM specification.

    +
    + + dn894117 + unsigned char pbOutput[4] + unsigned char pbOutput +
    + + +

    A debug message in the Information Queue.

    +
    + +

    This structure is returned from as part of the Information Queue feature (see Interface).

    +
    + + ff476184 + D3D11_MESSAGE + D3D11_MESSAGE +
    + + +

    The category of the message. See .

    +
    + + ff476184 + D3D11_MESSAGE_CATEGORY Category + D3D11_MESSAGE_CATEGORY Category +
    + + +

    The severity of the message. See .

    +
    + + ff476184 + D3D11_MESSAGE_SEVERITY Severity + D3D11_MESSAGE_SEVERITY Severity +
    + + +

    The ID of the message. See .

    +
    + + ff476184 + D3D11_MESSAGE_ID ID + D3D11_MESSAGE_ID ID +
    + + +

    The message string.

    +
    + + ff476184 + const char* pDescription + char pDescription +
    + + +

    The length of pDescription in bytes.

    +
    + + ff476184 + SIZE_T DescriptionByteLength + SIZE_T DescriptionByteLength +
    + + + + + +

    Contains a Message Authentication Code (MAC).

    +
    + + hh447631 + D3D11_OMAC + D3D11_OMAC +
    + + +

    A byte array that contains the cryptographic MAC value of the message.

    +
    + + hh447631 + unsigned char Omac[16] + unsigned char Omac +
    + + +

    Describes the tile structure of a tiled resource with mipmaps.

    +
    + + dn280418 + D3D11_PACKED_MIP_DESC + D3D11_PACKED_MIP_DESC +
    + + +

    Number of standard mipmaps in the tiled resource.

    +
    + + dn280418 + unsigned char NumStandardMips + unsigned char NumStandardMips +
    + + +

    Number of packed mipmaps in the tiled resource.

    This number starts from the least detailed mipmap (either sharing tiles or using non standard tile layout). This number is 0 if no + such packing is in the resource. For array surfaces, this value is the number of mipmaps that are packed for a given array slice where each array slice repeats the same + packing. +

    On Tier_2 tiled resources hardware, mipmaps that fill at least one standard shaped tile in all dimensions + are not allowed to be included in the set of packed mipmaps. On Tier_1 hardware, mipmaps that are an integer multiple of one standard shaped tile in all dimensions are not allowed to be included in the set of packed mipmaps. Mipmaps with at least one + dimension less than the standard tile shape may or may not be packed. When a given mipmap needs to be packed, all coarser + mipmaps for a given array slice are considered packed as well. +

    +
    + + dn280418 + unsigned char NumPackedMips + unsigned char NumPackedMips +
    + + +

    Number of tiles for the packed mipmaps in the tiled resource.

    If there is no packing, this value is meaningless and is set to 0. + Otherwise, it is set to the number of tiles + that are needed to represent the set of packed mipmaps. + The pixel layout within the packed mipmaps is hardware specific. + If apps define only partial mappings for the set of tiles in packed mipmaps, read and write behavior is vendor specific and undefined. + For arrays, this value is only the count of packed mipmaps within + the subresources for each array slice.

    +
    + + dn280418 + unsigned int NumTilesForPackedMips + unsigned int NumTilesForPackedMips +
    + + +

    Offset of the first packed tile for the resource + in the overall range of tiles. If NumPackedMips is 0, this + value is meaningless and is 0. Otherwise, it is the + offset of the first packed tile for the resource in the overall + range of tiles for the resource. A value of 0 for + StartTileIndexInOverallResource means the entire resource is packed. + For array surfaces, this is the offset for the tiles that contain the packed + mipmaps for the first array slice. Packed mipmaps for each array slice in arrayed surfaces are at this offset + past the beginning of the tiles for each array slice.

    Note??The + number of overall tiles, packed or not, for a given array slice is + simply the total number of tiles for the resource divided by the + resource's array size, so it is easy to locate the range of tiles for + any given array slice, out of which StartTileIndexInOverallResource identifies + which of those are packed. ?
    +
    + + dn280418 + unsigned int StartTileIndexInOverallResource + unsigned int StartTileIndexInOverallResource +
    + + +

    Query information about graphics-pipeline activity in between calls to and .

    +
    + + ff476192 + D3D11_QUERY_DATA_PIPELINE_STATISTICS + D3D11_QUERY_DATA_PIPELINE_STATISTICS +
    + + + No documentation. + + + ff476192 + unsigned longlong IAVertices + unsigned longlong IAVertices + + + + No documentation. + + + ff476192 + unsigned longlong IAPrimitives + unsigned longlong IAPrimitives + + + + No documentation. + + + ff476192 + unsigned longlong VSInvocations + unsigned longlong VSInvocations + + + + No documentation. + + + ff476192 + unsigned longlong GSInvocations + unsigned longlong GSInvocations + + + + No documentation. + + + ff476192 + unsigned longlong GSPrimitives + unsigned longlong GSPrimitives + + + + No documentation. + + + ff476192 + unsigned longlong CInvocations + unsigned longlong CInvocations + + + + No documentation. + + + ff476192 + unsigned longlong CPrimitives + unsigned longlong CPrimitives + + + + No documentation. + + + ff476192 + unsigned longlong PSInvocations + unsigned longlong PSInvocations + + + + No documentation. + + + ff476192 + unsigned longlong HSInvocations + unsigned longlong HSInvocations + + + + No documentation. + + + ff476192 + unsigned longlong DSInvocations + unsigned longlong DSInvocations + + + + No documentation. + + + ff476192 + unsigned longlong CSInvocations + unsigned longlong CSInvocations + + + +

    Query information about the reliability of a timestamp query.

    +
    + +

    For a list of query types see .

    +
    + + ff476194 + D3D11_QUERY_DATA_TIMESTAMP_DISJOINT + D3D11_QUERY_DATA_TIMESTAMP_DISJOINT +
    + + +

    How frequently the GPU counter increments in Hz.

    +
    + + ff476194 + unsigned longlong Frequency + unsigned longlong Frequency +
    + + +

    If this is TRUE, something occurred in between the query's and calls that caused the timestamp counter to become discontinuous or disjoint, such as unplugging the AC cord on a laptop, overheating, or throttling up/down due to laptop savings events. The timestamp returned by for a timestamp query is only reliable if Disjoint is .

    +
    + + ff476194 + BOOL Disjoint + BOOL Disjoint +
    + + +

    Describes a query.

    +
    + + ff476195 + D3D11_QUERY_DESC + D3D11_QUERY_DESC +
    + + +

    Type of query (see ).

    +
    + + ff476195 + D3D11_QUERY Query + D3D11_QUERY Query +
    + + +

    Miscellaneous flags (see ).

    +
    + + ff476195 + D3D11_QUERY_MISC_FLAG MiscFlags + D3D11_QUERY_MISC_FLAG MiscFlags +
    + + +

    Describes a query.

    +
    + + dn899156 + D3D11_QUERY_DESC1 + D3D11_QUERY_DESC1 +
    + + +

    A -typed value that specifies the type of query.

    +
    + + dn899156 + D3D11_QUERY Query + D3D11_QUERY Query +
    + + +

    A combination of -typed values that are combined by using a bitwise OR operation. The resulting value specifies query behavior.

    +
    + + dn899156 + unsigned int MiscFlags + unsigned int MiscFlags +
    + + +

    A -typed value that specifies the context for the query.

    +
    + + dn899156 + D3D11_CONTEXT_TYPE ContextType + D3D11_CONTEXT_TYPE ContextType +
    + + +

    Describes rasterizer state.

    +
    + +

    Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call . To set rasterizer state, call .

    If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.

    StateDefault Value
    FillModeSolid
    CullModeBack
    FrontCounterClockwise
    DepthBias0
    SlopeScaledDepthBias0.0f
    DepthBiasClamp0.0f
    DepthClipEnableTRUE
    ScissorEnable
    MultisampleEnable
    AntialiasedLineEnable

    ?

    Note??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set MultisampleEnable to , the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of MultisampleEnable has no effect on points and triangles with regard to MSAA and impacts only the selection of the line-rendering algorithm as shown in this table:?

    Line-rendering algorithmMultisampleEnableAntialiasedLineEnable
    Aliased
    Alpha antialiasedTRUE
    QuadrilateralTRUE
    QuadrilateralTRUETRUE

    ?

    The settings of the MultisampleEnable and AntialiasedLineEnable members apply only to multisample antialiasing (MSAA) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set MultisampleEnable to TRUE whenever you render on MSAA render targets.

    +
    + + ff476198 + D3D11_RASTERIZER_DESC + D3D11_RASTERIZER_DESC +
    + + +

    Determines the fill mode to use when rendering (see ).

    +
    + + ff476198 + D3D11_FILL_MODE FillMode + D3D11_FILL_MODE FillMode +
    + + +

    Indicates triangles facing the specified direction are not drawn (see ).

    +
    + + ff476198 + D3D11_CULL_MODE CullMode + D3D11_CULL_MODE CullMode +
    + + +

    Determines if a triangle is front- or back-facing. If this parameter is TRUE, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If this parameter is , the opposite is true.

    +
    + + ff476198 + BOOL FrontCounterClockwise + BOOL FrontCounterClockwise +
    + + +

    Depth value added to a given pixel. For info about depth bias, see Depth Bias.

    +
    + + ff476198 + int DepthBias + int DepthBias +
    + + +

    Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.

    +
    + + ff476198 + float DepthBiasClamp + float DepthBiasClamp +
    + + +

    Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.

    +
    + + ff476198 + float SlopeScaledDepthBias + float SlopeScaledDepthBias +
    + + +

    Enable clipping based on distance.

    The hardware always performs x and y clipping of rasterized coordinates. When DepthClipEnable is set to the default?TRUE, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +

    0 < w + -w <= x <= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) + -w <= y <= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) + 0 <= z <= w +

    When you set DepthClipEnable to , the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 < w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +

    +
    + + ff476198 + BOOL DepthClipEnable + BOOL DepthClipEnable +
    + + +

    Enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.

    +
    + + ff476198 + BOOL ScissorEnable + BOOL ScissorEnable +
    + + +

    Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing (MSAA) render targets. Set to TRUE to use the quadrilateral line anti-aliasing algorithm and to to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.

    +
    + + ff476198 + BOOL MultisampleEnable + BOOL MultisampleEnable +
    + + +

    Specifies whether to enable line antialiasing; only applies if doing line drawing and MultisampleEnable is . For more info about this member, see Remarks.

    +
    + + ff476198 + BOOL AntialiasedLineEnable + BOOL AntialiasedLineEnable +
    + + + Returns default values for . + + + See MSDN documentation for default values. + + + + + Note??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Describes rasterizer state.

    +
    + +

    Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call . To set rasterizer state, call .

    If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.

    StateDefault Value
    FillModeSolid
    CullModeBack
    FrontCounterClockwise
    DepthBias0
    SlopeScaledDepthBias0.0f
    DepthBiasClamp0.0f
    DepthClipEnableTRUE
    ScissorEnable
    MultisampleEnable
    AntialiasedLineEnable
    ForcedSampleCount0

    ?

    Note??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set MultisampleEnable to , the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of MultisampleEnable has no effect on points and triangles with regard to MSAA and impacts only the selection of the line-rendering algorithm as shown in this table:?

    Line-rendering algorithmMultisampleEnableAntialiasedLineEnable
    Aliased
    Alpha antialiasedTRUE
    QuadrilateralTRUE
    QuadrilateralTRUETRUE

    ?

    The settings of the MultisampleEnable and AntialiasedLineEnable members apply only to multisample antialiasing (MSAA) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set MultisampleEnable to TRUE whenever you render on MSAA render targets.

    +
    + + hh404489 + D3D11_RASTERIZER_DESC1 + D3D11_RASTERIZER_DESC1 +
    + + +

    Determines the fill mode to use when rendering.

    +
    + + hh404489 + D3D11_FILL_MODE FillMode + D3D11_FILL_MODE FillMode +
    + + +

    Indicates that triangles facing the specified direction are not drawn.

    +
    + + hh404489 + D3D11_CULL_MODE CullMode + D3D11_CULL_MODE CullMode +
    + + +

    Specifies whether a triangle is front- or back-facing. If TRUE, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If , the opposite is true.

    +
    + + hh404489 + BOOL FrontCounterClockwise + BOOL FrontCounterClockwise +
    + + +

    Depth value added to a given pixel. For info about depth bias, see Depth Bias.

    +
    + + hh404489 + int DepthBias + int DepthBias +
    + + +

    Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.

    +
    + + hh404489 + float DepthBiasClamp + float DepthBiasClamp +
    + + +

    Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.

    +
    + + hh404489 + float SlopeScaledDepthBias + float SlopeScaledDepthBias +
    + + +

    Specifies whether to enable clipping based on distance.

    The hardware always performs x and y clipping of rasterized coordinates. When DepthClipEnable is set to the default?TRUE, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +

    0 < w + -w <= x <= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) + -w <= y <= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) + 0 <= z <= w +

    When you set DepthClipEnable to , the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 < w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +

    +
    + + hh404489 + BOOL DepthClipEnable + BOOL DepthClipEnable +
    + + +

    Specifies whether to enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.

    +
    + + hh404489 + BOOL ScissorEnable + BOOL ScissorEnable +
    + + +

    Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing (MSAA) render targets. Set to TRUE to use the quadrilateral line anti-aliasing algorithm and to to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.

    +
    + + hh404489 + BOOL MultisampleEnable + BOOL MultisampleEnable +
    + + +

    Specifies whether to enable line antialiasing; only applies if doing line drawing and MultisampleEnable is . For more info about this member, see Remarks.

    +
    + + hh404489 + BOOL AntialiasedLineEnable + BOOL AntialiasedLineEnable +
    + + +

    The sample count that is forced while UAV rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced.

    Note??

    If you want to render with ForcedSampleCount set to 1 or greater, you must follow these guidelines:

    • Don't bind depth-stencil views.
    • Disable depth testing.
    • Ensure the shader doesn't output depth.
    • If you have any render-target views bound () and ForcedSampleCount is greater than 1, ensure that every render target has only a single sample.
    • Don't operate the shader at sample frequency. Therefore, returns .
    Otherwise, rendering behavior is undefined. For info about how to configure depth-stencil, see Configuring Depth-Stencil Functionality. ?
    +
    + + hh404489 + unsigned int ForcedSampleCount + unsigned int ForcedSampleCount +
    + + + Returns default values for . + + + See MSDN documentation for default values. + + + + +

    Describes rasterizer state.

    +
    + +

    Rasterizer state defines the behavior of the rasterizer stage. To create a rasterizer-state object, call . To set rasterizer state, call .

    If you do not specify some rasterizer state, the Direct3D runtime uses the following default values for rasterizer state.

    StateDefault Value
    FillModeSolid
    CullModeBack
    FrontCounterClockwise
    DepthBias0
    SlopeScaledDepthBias0.0f
    DepthBiasClamp0.0f
    DepthClipEnableTRUE
    ScissorEnable
    MultisampleEnable
    AntialiasedLineEnable
    ForcedSampleCount0
    ConservativeRaster

    ?

    Note??For feature levels 9.1, 9.2, 9.3, and 10.0, if you set MultisampleEnable to , the runtime renders all points, lines, and triangles without anti-aliasing even for render targets with a sample count greater than 1. For feature levels 10.1 and higher, the setting of MultisampleEnable has no effect on points and triangles with regard to MSAA and impacts only the selection of the line-rendering algorithm as shown in this table:?

    Line-rendering algorithmMultisampleEnableAntialiasedLineEnable
    Aliased
    Alpha antialiasedTRUE
    QuadrilateralTRUE
    QuadrilateralTRUETRUE

    ?

    The settings of the MultisampleEnable and AntialiasedLineEnable members apply only to multisample antialiasing (MSAA) render targets (that is, render targets with sample counts greater than 1). Because of the differences in feature-level behavior and as long as you aren?t performing any line drawing or don?t mind that lines render as quadrilaterals, we recommend that you always set MultisampleEnable to TRUE whenever you render on MSAA render targets.

    +
    + + dn899157 + D3D11_RASTERIZER_DESC2 + D3D11_RASTERIZER_DESC2 +
    + + +

    A -typed value that determines the fill mode to use when rendering.

    +
    + + dn899157 + D3D11_FILL_MODE FillMode + D3D11_FILL_MODE FillMode +
    + + +

    A -typed value that indicates that triangles facing the specified direction are not drawn.

    +
    + + dn899157 + D3D11_CULL_MODE CullMode + D3D11_CULL_MODE CullMode +
    + + +

    Specifies whether a triangle is front- or back-facing. If TRUE, a triangle will be considered front-facing if its vertices are counter-clockwise on the render target and considered back-facing if they are clockwise. If , the opposite is true.

    +
    + + dn899157 + BOOL FrontCounterClockwise + BOOL FrontCounterClockwise +
    + + +

    Depth value added to a given pixel. For info about depth bias, see Depth Bias.

    +
    + + dn899157 + int DepthBias + int DepthBias +
    + + +

    Maximum depth bias of a pixel. For info about depth bias, see Depth Bias.

    +
    + + dn899157 + float DepthBiasClamp + float DepthBiasClamp +
    + + +

    Scalar on a given pixel's slope. For info about depth bias, see Depth Bias.

    +
    + + dn899157 + float SlopeScaledDepthBias + float SlopeScaledDepthBias +
    + + +

    Specifies whether to enable clipping based on distance.

    The hardware always performs x and y clipping of rasterized coordinates. When DepthClipEnable is set to the default?TRUE, the hardware also clips the z value (that is, the hardware performs the last step of the following algorithm). +

    0 < w + -w <= x <= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) + -w <= y <= w (or arbitrarily wider range if implementation uses a guard band to reduce clipping burden) + 0 <= z <= w +

    When you set DepthClipEnable to , the hardware skips the z clipping (that is, the last step in the preceding algorithm). However, the hardware still performs the "0 < w" clipping. When z clipping is disabled, improper depth ordering at the pixel level might result. However, when z clipping is disabled, stencil shadow implementations are simplified. In other words, you can avoid complex special-case handling for geometry that goes beyond the back clipping plane. +

    +
    + + dn899157 + BOOL DepthClipEnable + BOOL DepthClipEnable +
    + + +

    Specifies whether to enable scissor-rectangle culling. All pixels outside an active scissor rectangle are culled.

    +
    + + dn899157 + BOOL ScissorEnable + BOOL ScissorEnable +
    + + +

    Specifies whether to use the quadrilateral or alpha line anti-aliasing algorithm on multisample antialiasing (MSAA) render targets. Set to TRUE to use the quadrilateral line anti-aliasing algorithm and to to use the alpha line anti-aliasing algorithm. For more info about this member, see Remarks.

    +
    + + dn899157 + BOOL MultisampleEnable + BOOL MultisampleEnable +
    + + +

    Specifies whether to enable line antialiasing; only applies if doing line drawing and MultisampleEnable is . For more info about this member, see Remarks.

    +
    + + dn899157 + BOOL AntialiasedLineEnable + BOOL AntialiasedLineEnable +
    + + +

    The sample count that is forced while UAV rendering or rasterizing. Valid values are 0, 1, 2, 4, 8, and optionally 16. 0 indicates that the sample count is not forced.

    Note??

    If you want to render with ForcedSampleCount set to 1 or greater, you must follow these guidelines:

    • Don't bind depth-stencil views.
    • Disable depth testing.
    • Ensure the shader doesn't output depth.
    • If you have any render-target views bound () and ForcedSampleCount is greater than 1, ensure that every render target has only a single sample.
    • Don't operate the shader at sample frequency. Therefore, returns .
    Otherwise, rendering behavior is undefined. For info about how to configure depth-stencil, see Configuring Depth-Stencil Functionality. ?
    +
    + + dn899157 + unsigned int ForcedSampleCount + unsigned int ForcedSampleCount +
    + + +

    A -typed value that identifies whether conservative rasterization is on or off.

    +
    + + dn899157 + D3D11_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster + D3D11_CONSERVATIVE_RASTERIZATION_MODE ConservativeRaster +
    + + +

    Describes the blend state for a render target.

    +
    + +

    You specify an array of structures in the RenderTarget member of the structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.

    For info about how blending is done, see the output-merger stage.

    Here are the default values for blend state.

    StateDefault Value
    BlendEnable
    SrcBlend
    DestBlend
    BlendOp
    SrcBlendAlpha
    DestBlendAlpha
    BlendOpAlpha
    RenderTargetWriteMask

    ?

    +
    + + ff476200 + D3D11_RENDER_TARGET_BLEND_DESC + D3D11_RENDER_TARGET_BLEND_DESC +
    + + +

    Enable (or disable) blending.

    +
    + + ff476200 + BOOL BlendEnable + BOOL BlendEnable +
    + + +

    This blend option specifies the operation to perform on the RGB value that the pixel shader outputs. The BlendOp member defines how to combine the SrcBlend and DestBlend operations.

    +
    + + ff476200 + D3D11_BLEND SrcBlend + D3D11_BLEND SrcBlend +
    + + +

    This blend option specifies the operation to perform on the current RGB value in the render target. The BlendOp member defines how to combine the SrcBlend and DestBlend operations.

    +
    + + ff476200 + D3D11_BLEND DestBlend + D3D11_BLEND DestBlend +
    + + +

    This blend operation defines how to combine the SrcBlend and DestBlend operations.

    +
    + + ff476200 + D3D11_BLEND_OP BlendOp + D3D11_BLEND_OP BlendOp +
    + + +

    This blend option specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The BlendOpAlpha member defines how to combine the SrcBlendAlpha and DestBlendAlpha operations.

    +
    + + ff476200 + D3D11_BLEND SrcBlendAlpha + D3D11_BLEND SrcBlendAlpha +
    + + +

    This blend option specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The BlendOpAlpha member defines how to combine the SrcBlendAlpha and DestBlendAlpha operations.

    +
    + + ff476200 + D3D11_BLEND DestBlendAlpha + D3D11_BLEND DestBlendAlpha +
    + + +

    This blend operation defines how to combine the SrcBlendAlpha and DestBlendAlpha operations.

    +
    + + ff476200 + D3D11_BLEND_OP BlendOpAlpha + D3D11_BLEND_OP BlendOpAlpha +
    + + +

    A write mask.

    +
    + + ff476200 + D3D11_COLOR_WRITE_ENABLE RenderTargetWriteMask + D3D11_COLOR_WRITE_ENABLE RenderTargetWriteMask +
    + + + Initializes a new instance of the struct. + + The is blend enabled. + The source blend. + The destination blend. + The blend operation. + The source alpha blend. + The destination alpha blend. + The alpha blend operation. + The render target write mask. + + + + Note??This structure is supported by the Direct3D 11.1 runtime, which is available on Windows?8 and later operating systems.?

    Describes the blend state for a render target.

    +
    + +

    You specify an array of structures in the RenderTarget member of the structure to describe the blend states for render targets; you can bind up to eight render targets to the output-merger stage at one time.

    For info about how blending is done, see the output-merger stage.

    Here are the default values for blend state.

    StateDefault Value
    BlendEnable
    LogicOpEnable
    SrcBlend
    DestBlend
    BlendOp
    SrcBlendAlpha
    DestBlendAlpha
    BlendOpAlpha
    LogicOp
    RenderTargetWriteMask

    ?

    +
    + + hh404492 + D3D11_RENDER_TARGET_BLEND_DESC1 + D3D11_RENDER_TARGET_BLEND_DESC1 +
    + + +

    Enable (or disable) blending.

    +
    + + hh404492 + BOOL BlendEnable + BOOL BlendEnable +
    + + +

    Enable (or disable) a logical operation.

    +
    + + hh404492 + BOOL LogicOpEnable + BOOL LogicOpEnable +
    + + +

    This blend option specifies the operation to perform on the RGB value that the pixel shader outputs. The BlendOp member defines how to combine the SrcBlend and DestBlend operations.

    +
    + + hh404492 + D3D11_BLEND SrcBlend + D3D11_BLEND SrcBlend +
    + + +

    This blend option specifies the operation to perform on the current RGB value in the render target. The BlendOp member defines how to combine the SrcBlend and DestBlend operations.

    +
    + + hh404492 + D3D11_BLEND DestBlend + D3D11_BLEND DestBlend +
    + + +

    This blend operation defines how to combine the SrcBlend and DestBlend operations.

    +
    + + hh404492 + D3D11_BLEND_OP BlendOp + D3D11_BLEND_OP BlendOp +
    + + +

    This blend option specifies the operation to perform on the alpha value that the pixel shader outputs. Blend options that end in _COLOR are not allowed. The BlendOpAlpha member defines how to combine the SrcBlendAlpha and DestBlendAlpha operations.

    +
    + + hh404492 + D3D11_BLEND SrcBlendAlpha + D3D11_BLEND SrcBlendAlpha +
    + + +

    This blend option specifies the operation to perform on the current alpha value in the render target. Blend options that end in _COLOR are not allowed. The BlendOpAlpha member defines how to combine the SrcBlendAlpha and DestBlendAlpha operations.

    +
    + + hh404492 + D3D11_BLEND DestBlendAlpha + D3D11_BLEND DestBlendAlpha +
    + + +

    This blend operation defines how to combine the SrcBlendAlpha and DestBlendAlpha operations.

    +
    + + hh404492 + D3D11_BLEND_OP BlendOpAlpha + D3D11_BLEND_OP BlendOpAlpha +
    + + +

    A -typed value that specifies the logical operation to configure for the render target.

    +
    + + hh404492 + D3D11_LOGIC_OP LogicOp + D3D11_LOGIC_OP LogicOp +
    + + +

    A write mask.

    +
    + + hh404492 + D3D11_COLOR_WRITE_ENABLE RenderTargetWriteMask + D3D11_COLOR_WRITE_ENABLE RenderTargetWriteMask +
    + + +

    Specifies the subresources from a resource that are accessible using a render-target view.

    +
    + +

    A render-target-view description is passed into to create a render target.

    A render-target-view cannot use the following formats:

    • Any typeless format.
    • DXGI_FORMAT_R32G32B32 if the view will be used to bind a buffer (vertex, index, constant, or stream-output).

    If the format is set to , then the format of the resource that the view binds to the pipeline will be used.

    +
    + + ff476201 + D3D11_RENDER_TARGET_VIEW_DESC + D3D11_RENDER_TARGET_VIEW_DESC +
    + + +

    Specifies the elements in a buffer resource to use in a render-target view.

    +
    + +

    A render-target view is a member of a render-target-view description (see ). Create a render-target view by calling .

    +
    + + ff476093 + D3D11_BUFFER_RTV + D3D11_BUFFER_RTV +
    + + +

    Number of bytes between the beginning of the buffer and the first element to access.

    +
    + + ff476093 + unsigned int FirstElement + unsigned int FirstElement +
    + + +

    The offset of the first element in the view to access, relative to element 0.

    +
    + + ff476093 + unsigned int ElementOffset + unsigned int ElementOffset +
    + + +

    The total number of elements in the view.

    +
    + + ff476093 + unsigned int NumElements + unsigned int NumElements +
    + + +

    The width of each element (in bytes). This can be determined from the format stored in the render-target-view description.

    +
    + + ff476093 + unsigned int ElementWidth + unsigned int ElementWidth +
    + + +

    Specifies the subresource from a 1D texture to use in a render-target view.

    +
    + +

    This structure is one member of a render-target-view description (see ).

    +
    + + ff476230 + D3D11_TEX1D_RTV + D3D11_TEX1D_RTV +
    + + +

    The index of the mipmap level to use mip slice.

    +
    + + ff476230 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    Specifies the subresources from an array of 1D textures to use in a render-target view.

    +
    + +

    This structure is one member of a render-target-view description (see ).

    +
    + + ff476226 + D3D11_TEX1D_ARRAY_RTV + D3D11_TEX1D_ARRAY_RTV +
    + + +

    The index of the mipmap level to use mip slice.

    +
    + + ff476226 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + ff476226 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures to use.

    +
    + + ff476226 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Specifies the subresource from a 2D texture to use in a render-target view.

    +
    + +

    This structure is one member of a render-target-view description (see ).

    +
    + + ff476244 + D3D11_TEX2D_RTV + D3D11_TEX2D_RTV +
    + + +

    The index of the mipmap level to use mip slice.

    +
    + + ff476244 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    Specifies the subresource from a multisampled 2D texture to use in a render-target view.

    +
    + +

    Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in . Consequently, UnusedField_NothingToDefine is included so that this structure will compile in C.

    +
    + + ff476237 + D3D11_TEX2DMS_RTV + D3D11_TEX2DMS_RTV +
    + + +

    Integer of any value. See remarks.

    +
    + + ff476237 + unsigned int UnusedField_NothingToDefine + unsigned int UnusedField_NothingToDefine +
    + + +

    Specifies the subresources from an array of 2D textures to use in a render-target view.

    +
    + +

    This structure is one member of a render-target-view description (see ).

    +
    + + ff476240 + D3D11_TEX2D_ARRAY_RTV + D3D11_TEX2D_ARRAY_RTV +
    + + +

    The index of the mipmap level to use mip slice.

    +
    + + ff476240 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + ff476240 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures in the array to use in the render target view, starting from FirstArraySlice.

    +
    + + ff476240 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Specifies the subresources from a an array of multisampled 2D textures to use in a render-target view.

    +
    + +

    This structure is one member of a render-target-view description (see ).

    +
    + + ff476234 + D3D11_TEX2DMS_ARRAY_RTV + D3D11_TEX2DMS_ARRAY_RTV +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + ff476234 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures to use.

    +
    + + ff476234 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Specifies the subresources from a 3D texture to use in a render-target view.

    +
    + +

    This structure is one member of a render target view. See .

    +
    + + ff476247 + D3D11_TEX3D_RTV + D3D11_TEX3D_RTV +
    + + +

    The index of the mipmap level to use mip slice.

    +
    + + ff476247 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    First depth level to use.

    +
    + + ff476247 + unsigned int FirstWSlice + unsigned int FirstWSlice +
    + + +

    Number of depth levels to use in the render-target view, starting from FirstWSlice. A value of -1 indicates all of the slices along the w axis, starting from FirstWSlice.

    +
    + + ff476247 + unsigned int WSize + unsigned int WSize +
    + + +

    The data format (see ).

    +
    + + ff476201 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    The resource type (see ), which specifies how the render-target resource will be accessed.

    +
    + + ff476201 + D3D11_RTV_DIMENSION ViewDimension + D3D11_RTV_DIMENSION ViewDimension +
    + + +

    Specifies which buffer elements can be accessed (see ).

    +
    + + ff476201 + D3D11_BUFFER_RTV Buffer + D3D11_BUFFER_RTV Buffer +
    + + +

    Specifies the subresources in a 1D texture that can be accessed (see ).

    +
    + + ff476201 + D3D11_TEX1D_RTV Texture1D + D3D11_TEX1D_RTV Texture1D +
    + + +

    Specifies the subresources in a 1D texture array that can be accessed (see ).

    +
    + + ff476201 + D3D11_TEX1D_ARRAY_RTV Texture1DArray + D3D11_TEX1D_ARRAY_RTV Texture1DArray +
    + + +

    Specifies the subresources in a 2D texture that can be accessed (see ).

    +
    + + ff476201 + D3D11_TEX2D_RTV Texture2D + D3D11_TEX2D_RTV Texture2D +
    + + +

    Specifies the subresources in a 2D texture array that can be accessed (see ).

    +
    + + ff476201 + D3D11_TEX2D_ARRAY_RTV Texture2DArray + D3D11_TEX2D_ARRAY_RTV Texture2DArray +
    + + +

    Specifies a single subresource because a multisampled 2D texture only contains one subresource (see ).

    +
    + + ff476201 + D3D11_TEX2DMS_RTV Texture2DMS + D3D11_TEX2DMS_RTV Texture2DMS +
    + + +

    Specifies the subresources in a multisampled 2D texture array that can be accessed (see ).

    +
    + + ff476201 + D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray + D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray +
    + + +

    Specifies subresources in a 3D texture that can be accessed (see ).

    +
    + + ff476201 + D3D11_TEX3D_RTV Texture3D + D3D11_TEX3D_RTV Texture3D +
    + + +

    Describes the subresources from a resource that are accessible using a render-target view.

    +
    + +

    A render-target-view description is passed into to create a render target.

    A render-target-view can't use the following formats:

    • Any typeless format.
    • DXGI_FORMAT_R32G32B32 if the view will be used to bind a buffer (vertex, index, constant, or stream-output).

    If the format is set to , then the format of the resource that the view binds to the pipeline will be used.

    +
    + + dn899158 + D3D11_RENDER_TARGET_VIEW_DESC1 + D3D11_RENDER_TARGET_VIEW_DESC1 +
    + + +

    Describes the subresource from a 2D texture to use in a render-target view.

    +
    + + dn899163 + D3D11_TEX2D_RTV1 + D3D11_TEX2D_RTV1 +
    + + +

    The index of the mipmap level to use mip slice.

    +
    + + dn899163 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The index (plane slice number) of the plane to use in the texture.

    +
    + + dn899163 + unsigned int PlaneSlice + unsigned int PlaneSlice +
    + + +

    Describes the subresources from an array of 2D textures to use in a render-target view.

    +
    + + dn899160 + D3D11_TEX2D_ARRAY_RTV1 + D3D11_TEX2D_ARRAY_RTV1 +
    + + +

    The index of the mipmap level to use mip slice.

    +
    + + dn899160 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + dn899160 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures in the array to use in the render-target view, starting from FirstArraySlice.

    +
    + + dn899160 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    The index (plane slice number) of the plane to use in an array of textures.

    +
    + + dn899160 + unsigned int PlaneSlice + unsigned int PlaneSlice +
    + + +

    A -typed value that specifies the data format.

    +
    + + dn899158 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    A -typed value that specifies the resource type and how the render-target resource will be accessed.

    +
    + + dn899158 + D3D11_RTV_DIMENSION ViewDimension + D3D11_RTV_DIMENSION ViewDimension +
    + + +

    A structure that specifies which buffer elements can be accessed.

    +
    + + dn899158 + D3D11_BUFFER_RTV Buffer + D3D11_BUFFER_RTV Buffer +
    + + +

    A structure that specifies the subresources in a 1D texture that can be accessed.

    +
    + + dn899158 + D3D11_TEX1D_RTV Texture1D + D3D11_TEX1D_RTV Texture1D +
    + + +

    A structure that specifies the subresources in a 1D texture array that can be accessed.

    +
    + + dn899158 + D3D11_TEX1D_ARRAY_RTV Texture1DArray + D3D11_TEX1D_ARRAY_RTV Texture1DArray +
    + + +

    A structure that specifies the subresources in a 2D texture that can be accessed.

    +
    + + dn899158 + D3D11_TEX2D_RTV1 Texture2D + D3D11_TEX2D_RTV1 Texture2D +
    + + +

    A structure that specifies the subresources in a 2D texture array that can be accessed.

    +
    + + dn899158 + D3D11_TEX2D_ARRAY_RTV1 Texture2DArray + D3D11_TEX2D_ARRAY_RTV1 Texture2DArray +
    + + +

    A structure that specifies a single subresource because a multisampled 2D texture only contains one subresource.

    +
    + + dn899158 + D3D11_TEX2DMS_RTV Texture2DMS + D3D11_TEX2DMS_RTV Texture2DMS +
    + + +

    A structure that specifies the subresources in a multisampled 2D texture array that can be accessed.

    +
    + + dn899158 + D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray + D3D11_TEX2DMS_ARRAY_RTV Texture2DMSArray +
    + + +

    A structure that specifies subresources in a 3D texture that can be accessed.

    +
    + + dn899158 + D3D11_TEX3D_RTV Texture3D + D3D11_TEX3D_RTV Texture3D +
    + + +

    Defines a 3D box.

    +
    + +

    The following diagram shows a 3D box, where the origin is the left, front, top corner.

    The values for right, bottom, and back are each one pixel past the end of the pixels that are included in the box region. That is, the values for left, top, and front are included in the box region while the values for right, bottom, and back are excluded from the box region. For example, for a box that is one pixel wide, (right - left) == 1; the box region includes the left pixel but not the right pixel.

    Coordinates of a box are in bytes for buffers and in texels for textures.

    +
    + + ff476089 + D3D11_BOX + D3D11_BOX +
    + + +

    The x position of the left hand side of the box.

    +
    + + ff476089 + unsigned int left + unsigned int left +
    + + +

    The y position of the top of the box.

    +
    + + ff476089 + unsigned int top + unsigned int top +
    + + +

    The z position of the front of the box.

    +
    + + ff476089 + unsigned int front + unsigned int front +
    + + +

    The x position of the right hand side of the box.

    +
    + + ff476089 + unsigned int right + unsigned int right +
    + + +

    The y position of the bottom of the box.

    +
    + + ff476089 + unsigned int bottom + unsigned int bottom +
    + + +

    The z position of the back of the box.

    +
    + + ff476089 + unsigned int back + unsigned int back +
    + + + Initialize a new instance of struct. + + Left coordinates (inclusive) + Top coordinates (inclusive) + Front coordinates (inclusive) + Right coordinates (exclusive) + Bottom coordinates (exclusive) + Back coordinates (exclusive) + +
      +
    • For a Width of 1 pixels, (right - left) = 1. If left = 0, right = Width.
    • +
    • For a Height of 1 pixels, (bottom - top) = 1. If top = 0, bottom = Height.
    • +
    • For a Depth of 1 pixels, (back - front) = 1. If front = 0, back = Depth.
    • +
    +
    +
    + + +

    Describes a sampler state.

    +
    + +

    These are the default values for sampler state.

    StateDefault Value
    Filter
    AddressU
    AddressV
    AddressW
    MinLOD-3.402823466e+38F (-FLT_MAX)
    MaxLOD3.402823466e+38F (FLT_MAX)
    MipMapLODBias0.0f
    MaxAnisotropy1
    ComparisonFunc
    BorderColorfloat4(1.0f,1.0f,1.0f,1.0f)
    TextureN/A

    ?

    +
    + + ff476207 + D3D11_SAMPLER_DESC + D3D11_SAMPLER_DESC +
    + + +

    Filtering method to use when sampling a texture (see ).

    +
    + + ff476207 + D3D11_FILTER Filter + D3D11_FILTER Filter +
    + + +

    Method to use for resolving a u texture coordinate that is outside the 0 to 1 range (see ).

    +
    + + ff476207 + D3D11_TEXTURE_ADDRESS_MODE AddressU + D3D11_TEXTURE_ADDRESS_MODE AddressU +
    + + +

    Method to use for resolving a v texture coordinate that is outside the 0 to 1 range.

    +
    + + ff476207 + D3D11_TEXTURE_ADDRESS_MODE AddressV + D3D11_TEXTURE_ADDRESS_MODE AddressV +
    + + +

    Method to use for resolving a w texture coordinate that is outside the 0 to 1 range.

    +
    + + ff476207 + D3D11_TEXTURE_ADDRESS_MODE AddressW + D3D11_TEXTURE_ADDRESS_MODE AddressW +
    + + +

    Offset from the calculated mipmap level. For example, if Direct3D calculates that a texture should be sampled at mipmap level 3 and MipLODBias is 2, then the texture will be sampled at mipmap level 5.

    +
    + + ff476207 + float MipLODBias + float MipLODBias +
    + + +

    Clamping value used if or is specified in Filter. Valid values are between 1 and 16.

    +
    + + ff476207 + unsigned int MaxAnisotropy + unsigned int MaxAnisotropy +
    + + +

    A function that compares sampled data against existing sampled data. The function options are listed in .

    +
    + + ff476207 + D3D11_COMPARISON_FUNC ComparisonFunc + D3D11_COMPARISON_FUNC ComparisonFunc +
    + + +

    Border color to use if is specified for AddressU, AddressV, or AddressW. Range must be between 0.0 and 1.0 inclusive.

    +
    + + ff476207 + SHARPDX_COLOR4 BorderColor + SHARPDX_COLOR4 BorderColor +
    + + +

    Lower end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed.

    +
    + + ff476207 + float MinLOD + float MinLOD +
    + + +

    Upper end of the mipmap range to clamp access to, where 0 is the largest and most detailed mipmap level and any level higher than that is less detailed. This value must be greater than or equal to MinLOD. To have no upper limit on LOD set this to a large value such as D3D11_FLOAT32_MAX.

    +
    + + ff476207 + float MaxLOD + float MaxLOD +
    + + + Returns default values for . + + + See MSDN documentation for default values. + + + + +

    Describes a shader-resource view.

    +
    + +

    A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read.

    When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a resource can be viewed with one of these typed formats: , , and , since these typed formats are compatible with the typeless resource.

    Create a shader-resource-view description by calling . To view a shader-resource-view description, call .

    +
    + + ff476211 + D3D11_SHADER_RESOURCE_VIEW_DESC + D3D11_SHADER_RESOURCE_VIEW_DESC +
    + + +

    Specifies the elements in a buffer resource to use in a shader-resource view.

    +
    + +

    The structure is a member of the structure, which represents a shader-resource view description. You can create a shader-resource view by calling the method.

    +
    + + ff476094 + D3D11_BUFFER_SRV + D3D11_BUFFER_SRV +
    + + +

    Number of bytes between the beginning of the buffer and the first element to access.

    +
    + + ff476094 + unsigned int FirstElement + unsigned int FirstElement +
    + + +

    The offset of the first element in the view to access, relative to element 0.

    +
    + + ff476094 + unsigned int ElementOffset + unsigned int ElementOffset +
    + + +

    The total number of elements in the view.

    +
    + + ff476094 + unsigned int NumElements + unsigned int NumElements +
    + + +

    The width of each element (in bytes). This can be determined from the format stored in the shader-resource-view description.

    +
    + + ff476094 + unsigned int ElementWidth + unsigned int ElementWidth +
    + + +

    Describes the elements in a raw buffer resource to use in a shader-resource view.

    +
    + +

    This structure is used by to create a raw view of a buffer.

    +
    + + ff476090 + D3D11_BUFFEREX_SRV + D3D11_BUFFEREX_SRV +
    + + +

    The index of the first element to be accessed by the view.

    +
    + + ff476090 + unsigned int FirstElement + unsigned int FirstElement +
    + + +

    The number of elements in the resource.

    +
    + + ff476090 + unsigned int NumElements + unsigned int NumElements +
    + + +

    A -typed value that identifies view options for the buffer. Currently, the only option is to identify a raw view of the buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.

    +
    + + ff476090 + D3D11_BUFFEREX_SRV_FLAG Flags + D3D11_BUFFEREX_SRV_FLAG Flags +
    + + +

    Specifies the subresource from a 1D texture to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    As an example, assuming MostDetailedMip = 6 and MipLevels = 2, the view will have access to 2 mipmap levels, 6 and 7, of the original texture for which creates the view. In this situation, MostDetailedMip is greater than the MipLevels in the view. However, MostDetailedMip is not greater than the MipLevels in the original resource.

    +
    + + ff476231 + D3D11_TEX1D_SRV + D3D11_TEX1D_SRV +
    + + +

    Index of the most detailed mipmap level to use; this number is between 0 and MipLevels (from the original Texture1D for which creates a view) -1.

    +
    + + ff476231 + unsigned int MostDetailedMip + unsigned int MostDetailedMip +
    + + +

    The maximum number of mipmap levels for the view of the texture. See the remarks.

    Set to -1 to indicate all the mipmap levels from MostDetailedMip on down to least detailed.

    +
    + + ff476231 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Specifies the subresources from an array of 1D textures to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + ff476227 + D3D11_TEX1D_ARRAY_SRV + D3D11_TEX1D_ARRAY_SRV +
    + + +

    Index of the most detailed mipmap level to use; this number is between 0 and MipLevels (from the original Texture1D for which creates a view) -1.

    +
    + + ff476227 + unsigned int MostDetailedMip + unsigned int MostDetailedMip +
    + + +

    The maximum number of mipmap levels for the view of the texture. See the remarks in .

    Set to -1 to indicate all the mipmap levels from MostDetailedMip on down to least detailed.

    +
    + + ff476227 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + ff476227 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures in the array.

    +
    + + ff476227 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Specifies the subresource from a 2D texture to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + ff476245 + D3D11_TEX2D_SRV + D3D11_TEX2D_SRV +
    + + +

    Index of the most detailed mipmap level to use; this number is between 0 and MipLevels (from the original Texture2D for which creates a view) -1.

    +
    + + ff476245 + unsigned int MostDetailedMip + unsigned int MostDetailedMip +
    + + +

    The maximum number of mipmap levels for the view of the texture. See the remarks in .

    Set to -1 to indicate all the mipmap levels from MostDetailedMip on down to least detailed.

    +
    + + ff476245 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Specifies the subresources from an array of 2D textures to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + ff476241 + D3D11_TEX2D_ARRAY_SRV + D3D11_TEX2D_ARRAY_SRV +
    + + +

    Index of the most detailed mipmap level to use; this number is between 0 and MipLevels (from the original Texture2D for which creates a view) -1.

    +
    + + ff476241 + unsigned int MostDetailedMip + unsigned int MostDetailedMip +
    + + +

    The maximum number of mipmap levels for the view of the texture. See the remarks in .

    Set to -1 to indicate all the mipmap levels from MostDetailedMip on down to least detailed.

    +
    + + ff476241 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + ff476241 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures in the array.

    +
    + + ff476241 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Specifies the subresources from a 3D texture to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + ff476248 + D3D11_TEX3D_SRV + D3D11_TEX3D_SRV +
    + + +

    Index of the most detailed mipmap level to use; this number is between 0 and MipLevels (from the original Texture3D for which creates a view) -1.

    +
    + + ff476248 + unsigned int MostDetailedMip + unsigned int MostDetailedMip +
    + + +

    The maximum number of mipmap levels for the view of the texture. See the remarks in .

    Set to -1 to indicate all the mipmap levels from MostDetailedMip on down to least detailed.

    +
    + + ff476248 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Specifies the subresource from a cube texture to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + ff476251 + D3D11_TEXCUBE_SRV + D3D11_TEXCUBE_SRV +
    + + +

    Index of the most detailed mipmap level to use; this number is between 0 and MipLevels (from the original TextureCube for which creates a view) -1.

    +
    + + ff476251 + unsigned int MostDetailedMip + unsigned int MostDetailedMip +
    + + +

    The maximum number of mipmap levels for the view of the texture. See the remarks in .

    Set to -1 to indicate all the mipmap levels from MostDetailedMip on down to least detailed.

    +
    + + ff476251 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Specifies the subresources from an array of cube textures to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + ff476250 + D3D11_TEXCUBE_ARRAY_SRV + D3D11_TEXCUBE_ARRAY_SRV +
    + + +

    Index of the most detailed mipmap level to use; this number is between 0 and MipLevels (from the original TextureCube for which creates a view) -1.

    +
    + + ff476250 + unsigned int MostDetailedMip + unsigned int MostDetailedMip +
    + + +

    The maximum number of mipmap levels for the view of the texture. See the remarks in .

    Set to -1 to indicate all the mipmap levels from MostDetailedMip on down to least detailed.

    +
    + + ff476250 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Index of the first 2D texture to use.

    +
    + + ff476250 + unsigned int First2DArrayFace + unsigned int First2DArrayFace +
    + + +

    Number of cube textures in the array.

    +
    + + ff476250 + unsigned int NumCubes + unsigned int NumCubes +
    + + +

    Specifies the subresources from a multisampled 2D texture to use in a shader-resource view.

    +
    + +

    Since a multisampled 2D texture contains a single subresource, there is actually nothing to specify in . Consequently, UnusedField_NothingToDefine is included so that this structure will compile in C.

    +
    + + ff476238 + D3D11_TEX2DMS_SRV + D3D11_TEX2DMS_SRV +
    + + +

    Integer of any value. See remarks.

    +
    + + ff476238 + unsigned int UnusedField_NothingToDefine + unsigned int UnusedField_NothingToDefine +
    + + +

    Specifies the subresources from an array of multisampled 2D textures to use in a shader-resource view.

    +
    + +

    This structure is one member of a shader-resource-view description (see ).

    +
    + + ff476235 + D3D11_TEX2DMS_ARRAY_SRV + D3D11_TEX2DMS_ARRAY_SRV +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + ff476235 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures to use.

    +
    + + ff476235 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    A specifying the viewing format. See remarks.

    +
    + + ff476211 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    The resource type of the view. See D3D11_SRV_DIMENSION. This should be the same as the resource type of the underlying resource. This parameter also determines which _SRV to use in the union below.

    +
    + + ff476211 + D3D_SRV_DIMENSION ViewDimension + D3D_SRV_DIMENSION ViewDimension +
    + + +

    View the resource as a buffer using information from a shader-resource view (see ).

    +
    + + ff476211 + D3D11_BUFFER_SRV Buffer + D3D11_BUFFER_SRV Buffer +
    + + +

    View the resource as a 1D texture using information from a shader-resource view (see ).

    +
    + + ff476211 + D3D11_TEX1D_SRV Texture1D + D3D11_TEX1D_SRV Texture1D +
    + + +

    View the resource as a 1D-texture array using information from a shader-resource view (see ).

    +
    + + ff476211 + D3D11_TEX1D_ARRAY_SRV Texture1DArray + D3D11_TEX1D_ARRAY_SRV Texture1DArray +
    + + +

    View the resource as a 2D-texture using information from a shader-resource view (see ).

    +
    + + ff476211 + D3D11_TEX2D_SRV Texture2D + D3D11_TEX2D_SRV Texture2D +
    + + +

    View the resource as a 2D-texture array using information from a shader-resource view (see ).

    +
    + + ff476211 + D3D11_TEX2D_ARRAY_SRV Texture2DArray + D3D11_TEX2D_ARRAY_SRV Texture2DArray +
    + + +

    View the resource as a 2D-multisampled texture using information from a shader-resource view (see ).

    +
    + + ff476211 + D3D11_TEX2DMS_SRV Texture2DMS + D3D11_TEX2DMS_SRV Texture2DMS +
    + + +

    View the resource as a 2D-multisampled-texture array using information from a shader-resource view (see ).

    +
    + + ff476211 + D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray + D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray +
    + + +

    View the resource as a 3D texture using information from a shader-resource view (see ).

    +
    + + ff476211 + D3D11_TEX3D_SRV Texture3D + D3D11_TEX3D_SRV Texture3D +
    + + +

    View the resource as a 3D-cube texture using information from a shader-resource view (see ).

    +
    + + ff476211 + D3D11_TEXCUBE_SRV TextureCube + D3D11_TEXCUBE_SRV TextureCube +
    + + +

    View the resource as a 3D-cube-texture array using information from a shader-resource view (see ).

    +
    + + ff476211 + D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray + D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray +
    + + +

    View the resource as a raw buffer using information from a shader-resource view (see ). For more info about raw viewing of buffers, see Raw Views of Buffers.

    +
    + + ff476211 + D3D11_BUFFEREX_SRV BufferEx + D3D11_BUFFEREX_SRV BufferEx +
    + + +

    Describes a shader-resource view.

    +
    + +

    A view is a format-specific way to look at the data in a resource. The view determines what data to look at, and how it is cast when read.

    When viewing a resource, the resource-view description must specify a typed format, that is compatible with the resource format. So that means that you cannot create a resource-view description using any format with _TYPELESS in the name. You can however view a typeless resource by specifying a typed format for the view. For example, a resource can be viewed with one of these typed formats: , , and , since these typed formats are compatible with the typeless resource.

    Create a shader-resource-view description by calling . To view a shader-resource-view description, call .

    +
    + + dn899159 + D3D11_SHADER_RESOURCE_VIEW_DESC1 + D3D11_SHADER_RESOURCE_VIEW_DESC1 +
    + + +

    Describes the subresource from a 2D texture to use in a shader-resource view.

    +
    + + dn899164 + D3D11_TEX2D_SRV1 + D3D11_TEX2D_SRV1 +
    + + +

    Index of the most detailed mipmap level to use; this number is between 0 and (MipLevels (from the original Texture2D for which creates a view) - 1 ).

    +
    + + dn899164 + unsigned int MostDetailedMip + unsigned int MostDetailedMip +
    + + +

    The maximum number of mipmap levels for the view of the texture. See the remarks in .

    Set to -1 to indicate all the mipmap levels from MostDetailedMip on down to least detailed.

    +
    + + dn899164 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    The index (plane slice number) of the plane to use in the texture.

    +
    + + dn899164 + unsigned int PlaneSlice + unsigned int PlaneSlice +
    + + +

    Describes the subresources from an array of 2D textures to use in a shader-resource view.

    +
    + + dn899161 + D3D11_TEX2D_ARRAY_SRV1 + D3D11_TEX2D_ARRAY_SRV1 +
    + + +

    Index of the most detailed mipmap level to use; this number is between 0 and ( MipLevels (from the original Texture2D for which creates a view) - 1).

    +
    + + dn899161 + unsigned int MostDetailedMip + unsigned int MostDetailedMip +
    + + +

    The maximum number of mipmap levels for the view of the texture. See the remarks in .

    Set to -1 to indicate all the mipmap levels from MostDetailedMip on down to least detailed.

    +
    + + dn899161 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    The index of the first texture to use in an array of textures.

    +
    + + dn899161 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    Number of textures in the array.

    +
    + + dn899161 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    The index (plane slice number) of the plane to use in an array of textures.

    +
    + + dn899161 + unsigned int PlaneSlice + unsigned int PlaneSlice +
    + + +

    A -typed value that specifies the viewing format. See remarks.

    +
    + + dn899159 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    A D3D11_SRV_DIMENSION-typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _SRV to use in the union below.

    +
    + + dn899159 + D3D_SRV_DIMENSION ViewDimension + D3D_SRV_DIMENSION ViewDimension +
    + + +

    A structure that views the resource as a buffer.

    +
    + + dn899159 + D3D11_BUFFER_SRV Buffer + D3D11_BUFFER_SRV Buffer +
    + + +

    A structure that views the resource as a 1D texture.

    +
    + + dn899159 + D3D11_TEX1D_SRV Texture1D + D3D11_TEX1D_SRV Texture1D +
    + + +

    A structure that views the resource as a 1D-texture array.

    +
    + + dn899159 + D3D11_TEX1D_ARRAY_SRV Texture1DArray + D3D11_TEX1D_ARRAY_SRV Texture1DArray +
    + + +

    A structure that views the resource as a 2D-texture.

    +
    + + dn899159 + D3D11_TEX2D_SRV1 Texture2D + D3D11_TEX2D_SRV1 Texture2D +
    + + +

    A structure that views the resource as a 2D-texture array.

    +
    + + dn899159 + D3D11_TEX2D_ARRAY_SRV1 Texture2DArray + D3D11_TEX2D_ARRAY_SRV1 Texture2DArray +
    + + +

    A structure that views the resource as a 2D-multisampled texture.

    +
    + + dn899159 + D3D11_TEX2DMS_SRV Texture2DMS + D3D11_TEX2DMS_SRV Texture2DMS +
    + + +

    A structure that views the resource as a 2D-multisampled-texture array.

    +
    + + dn899159 + D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray + D3D11_TEX2DMS_ARRAY_SRV Texture2DMSArray +
    + + +

    A structure that views the resource as a 3D texture.

    +
    + + dn899159 + D3D11_TEX3D_SRV Texture3D + D3D11_TEX3D_SRV Texture3D +
    + + +

    A structure that views the resource as a 3D-cube texture.

    +
    + + dn899159 + D3D11_TEXCUBE_SRV TextureCube + D3D11_TEXCUBE_SRV TextureCube +
    + + +

    A structure that views the resource as a 3D-cube-texture array.

    +
    + + dn899159 + D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray + D3D11_TEXCUBE_ARRAY_SRV TextureCubeArray +
    + + +

    A structure that views the resource as a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.

    +
    + + dn899159 + D3D11_BUFFEREX_SRV BufferEx + D3D11_BUFFEREX_SRV BufferEx +
    + + +

    Description of a vertex element in a vertex buffer in an output slot.

    +
    + + ff476216 + D3D11_SO_DECLARATION_ENTRY + D3D11_SO_DECLARATION_ENTRY +
    + + +

    Zero-based, stream number.

    +
    + + ff476216 + unsigned int Stream + unsigned int Stream +
    + + +

    Type of output element; possible values include: "POSITION", "NORMAL", or "TEXCOORD0". Note that if SemanticName is null then ComponentCount can be greater than 4 and the described entry will be a gap in the stream out where no data will be written.

    +
    + + ff476216 + const char* SemanticName + char SemanticName +
    + + +

    Output element's zero-based index. Should be used if, for example, you have more than one texture coordinate stored in each vertex.

    +
    + + ff476216 + unsigned int SemanticIndex + unsigned int SemanticIndex +
    + + +

    Which component of the entry to begin writing out to. Valid values are 0 to 3. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2.

    +
    + + ff476216 + unsigned char StartComponent + unsigned char StartComponent +
    + + +

    The number of components of the entry to write out to. Valid values are 1 to 4. For example, if you only wish to output to the y and z components of a position, then StartComponent should be 1 and ComponentCount should be 2. Note that if SemanticName is null then ComponentCount can be greater than 4 and the described entry will be a gap in the stream out where no data will be written.

    +
    + + ff476216 + unsigned char ComponentCount + unsigned char ComponentCount +
    + + +

    The associated stream output buffer that is bound to the pipeline (see ). The valid range for OutputSlot is 0 to 3.

    +
    + + ff476216 + unsigned char OutputSlot + unsigned char OutputSlot +
    + + + Initializes a new instance of the struct. + + Zero-based, stream number + Name of the semantic. + Index of the semantic. + The start component. + The component count. + The output slot. + + + +

    Query information about the amount of data streamed out to the stream-output buffers in between and .

    +
    + + ff476193 + D3D11_QUERY_DATA_SO_STATISTICS + D3D11_QUERY_DATA_SO_STATISTICS +
    + + + No documentation. + + + ff476193 + unsigned longlong NumPrimitivesWritten + unsigned longlong NumPrimitivesWritten + + + + No documentation. + + + ff476193 + unsigned longlong PrimitivesStorageNeeded + unsigned longlong PrimitivesStorageNeeded + + + +

    Describes a tiled subresource volume.

    +
    + +

    Each packed mipmap is individually reported as 0 for WidthInTiles, HeightInTiles and DepthInTiles. +

    The total number of tiles in subresources is WidthInTiles*HeightInTiles*DepthInTiles.

    +
    + + dn280434 + D3D11_SUBRESOURCE_TILING + D3D11_SUBRESOURCE_TILING +
    + + +

    The width in tiles of the subresource.

    +
    + + dn280434 + unsigned int WidthInTiles + unsigned int WidthInTiles +
    + + +

    The height in tiles of the subresource.

    +
    + + dn280434 + unsigned short HeightInTiles + unsigned short HeightInTiles +
    + + +

    The depth in tiles of the subresource.

    +
    + + dn280434 + unsigned short DepthInTiles + unsigned short DepthInTiles +
    + + +

    The index of the tile in the overall tiled subresource to start with.

    GetResourceTiling sets StartTileIndexInOverallResource to D3D11_PACKED_TILE (0xffffffff) to indicate that the whole + structure is meaningless, and the info to which the pPackedMipDesc parameter of GetResourceTiling points applies. For packed tiles, the description of the packed mipmaps comes from a structure instead. +

    +
    + + dn280434 + unsigned int StartTileIndexInOverallResource + unsigned int StartTileIndexInOverallResource +
    + + +

    Describes a 1D texture.

    +
    + +

    This structure is used in a call to .

    In addition to this structure, you can also use the CD3D11_TEXTURE1D_DESC derived structure, which is defined in D3D11.h and behaves like an inherited class, to help create a texture description.

    The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 () and call to create an , you must constrain the maximum texture size to D3D10_REQ_TEXTURE1D_U_DIMENSION (8192) when you create your 1D texture.

    +
    + + ff476252 + D3D11_TEXTURE1D_DESC + D3D11_TEXTURE1D_DESC +
    + + +

    Texture width (in texels). The range is from 1 to (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + ff476252 + unsigned int Width + unsigned int Width +
    + + +

    The maximum number of mipmap levels in the texture. See the remarks in . Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.

    +
    + + ff476252 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Number of textures in the array. The range is from 1 to (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + ff476252 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Texture format (see ).

    +
    + + ff476252 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    Value that identifies how the texture is to be read from and written to. The most common value is ; see for all possible values.

    +
    + + ff476252 + D3D11_USAGE Usage + D3D11_USAGE Usage +
    + + +

    Flags (see ) for binding to pipeline stages. The flags can be combined by a logical OR. For a 1D texture, the allowable values are: , and .

    +
    + + ff476252 + D3D11_BIND_FLAG BindFlags + D3D11_BIND_FLAG BindFlags +
    + + +

    Flags (see ) to specify the types of CPU access allowed. Use 0 if CPU access is not required. These flags can be combined with a logical OR.

    +
    + + ff476252 + D3D11_CPU_ACCESS_FLAG CPUAccessFlags + D3D11_CPU_ACCESS_FLAG CPUAccessFlags +
    + + +

    Flags (see ) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical OR.

    +
    + + ff476252 + D3D11_RESOURCE_MISC_FLAG MiscFlags + D3D11_RESOURCE_MISC_FLAG MiscFlags +
    + + +

    Identifies a texture resource for a video processor output view.

    +
    + + hh447632 + D3D11_TEX2D_ARRAY_VPOV + D3D11_TEX2D_ARRAY_VPOV +
    + + +

    The zero-based index into the array of subtextures.

    +
    + + hh447632 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The index of the first texture to use.

    +
    + + hh447632 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    The number of textures in the array.

    +
    + + hh447632 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Describes a 2D texture.

    +
    + +

    This structure is used in a call to .

    In addition to this structure, you can also use the CD3D11_TEXTURE2D_DESC derived structure, which is defined in D3D11.h and behaves like an inherited class, to help create a texture description.

    The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.

    The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 () and call to create an , you must constrain the maximum texture size to D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION (8192) when you create your 2D texture.

    +
    + + ff476253 + D3D11_TEXTURE2D_DESC + D3D11_TEXTURE2D_DESC +
    + + +

    Texture width (in texels). The range is from 1 to (16384). For a texture cube-map, the range is from 1 to (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + ff476253 + unsigned int Width + unsigned int Width +
    + + +

    Texture height (in texels). The range is from 1 to (16384). For a texture cube-map, the range is from 1 to (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + ff476253 + unsigned int Height + unsigned int Height +
    + + +

    The maximum number of mipmap levels in the texture. See the remarks in . Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.

    +
    + + ff476253 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Number of textures in the texture array. The range is from 1 to (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the NumCubes member of ), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + ff476253 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Texture format (see ).

    +
    + + ff476253 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    Structure that specifies multisampling parameters for the texture. See .

    +
    + + ff476253 + DXGI_SAMPLE_DESC SampleDesc + DXGI_SAMPLE_DESC SampleDesc +
    + + +

    Value that identifies how the texture is to be read from and written to. The most common value is ; see for all possible values.

    +
    + + ff476253 + D3D11_USAGE Usage + D3D11_USAGE Usage +
    + + +

    Flags (see ) for binding to pipeline stages. The flags can be combined by a logical OR.

    +
    + + ff476253 + D3D11_BIND_FLAG BindFlags + D3D11_BIND_FLAG BindFlags +
    + + +

    Flags (see ) to specify the types of CPU access allowed. Use 0 if CPU access is not required. These flags can be combined with a logical OR.

    +
    + + ff476253 + D3D11_CPU_ACCESS_FLAG CPUAccessFlags + D3D11_CPU_ACCESS_FLAG CPUAccessFlags +
    + + +

    Flags (see ) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined by using a logical OR. For a texture cube-map, set the flag. Cube-map arrays (that is, ArraySize > 6) require feature level or higher.

    +
    + + ff476253 + D3D11_RESOURCE_MISC_FLAG MiscFlags + D3D11_RESOURCE_MISC_FLAG MiscFlags +
    + + +

    Describes a 2D texture.

    +
    + +

    This structure is used in a call to .

    In addition to this structure, you can also use the CD3D11_TEXTURE2D_DESC1 derived structure, which is defined in D3D11_3.h and behaves like an inherited class, to help create a texture description.

    The device places some size restrictions (must be multiples of a minimum size) for a subsampled, block compressed, or bit-format resource.

    The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 () and call to create an , you must constrain the maximum texture size to D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION (8192) when you create your 2D texture.

    +
    + + dn899166 + D3D11_TEXTURE2D_DESC1 + D3D11_TEXTURE2D_DESC1 +
    + + +

    Texture width (in texels). The range is from 1 to (16384). For a texture cube-map, the range is from 1 to (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + dn899166 + unsigned int Width + unsigned int Width +
    + + +

    Texture height (in texels). The range is from 1 to (16384). For a texture cube-map, the range is from 1 to (16384). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + dn899166 + unsigned int Height + unsigned int Height +
    + + +

    The maximum number of mipmap levels in the texture. See the remarks in . Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.

    +
    + + dn899166 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Number of textures in the texture array. The range is from 1 to (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the NumCubes member of ), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + dn899166 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Texture format (see ).

    +
    + + dn899166 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    Structure that specifies multisampling parameters for the texture. See .

    +
    + + dn899166 + DXGI_SAMPLE_DESC SampleDesc + DXGI_SAMPLE_DESC SampleDesc +
    + + +

    Value that identifies how the texture is to be read from and written to. The most common value is ; see for all possible values.

    +
    + + dn899166 + D3D11_USAGE Usage + D3D11_USAGE Usage +
    + + +

    Flags (see ) for binding to pipeline stages. The flags can be combined by a logical OR.

    +
    + + dn899166 + D3D11_BIND_FLAG BindFlags + D3D11_BIND_FLAG BindFlags +
    + + +

    Flags (see ) to specify the types of CPU access allowed. Use 0 if CPU access is not required. These flags can be combined with a logical OR.

    +
    + + dn899166 + D3D11_CPU_ACCESS_FLAG CPUAccessFlags + D3D11_CPU_ACCESS_FLAG CPUAccessFlags +
    + + +

    Flags (see ) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined by using a logical OR. For a texture cube-map, set the flag. Cube-map arrays (that is, ArraySize > 6) require feature level or higher.

    +
    + + dn899166 + D3D11_RESOURCE_MISC_FLAG MiscFlags + D3D11_RESOURCE_MISC_FLAG MiscFlags +
    + + +

    A -typed value that identifies the layout of the texture.

    The TextureLayout parameter selects both the actual layout of the texture in memory and the layout visible to the application while the texture is mapped. These flags may not be requested without CPU access also requested.

    It is illegal to set CPU access flags on default textures without also setting TextureLayout to a value other than .

    may only be used to create non-multisampled, textures with a single subresource (Planar YUV textures are supported). These textures may only be used as a source and destination of copy operations, and BindFlags must be zero. +

    may only be used to create non-multisampled, non-depth-stencil textures.

    +
    + + dn899166 + D3D11_TEXTURE_LAYOUT TextureLayout + D3D11_TEXTURE_LAYOUT TextureLayout +
    + + +

    Identifies the texture resource for a video decoder output view.

    +
    + + hh447633 + D3D11_TEX2D_VDOV + D3D11_TEX2D_VDOV +
    + + +

    The zero-based index of the texture.

    +
    + + hh447633 + unsigned int ArraySlice + unsigned int ArraySlice +
    + + +

    Identifies the texture resource for a video processor input view.

    +
    + + hh447634 + D3D11_TEX2D_VPIV + D3D11_TEX2D_VPIV +
    + + +

    The zero-based index into the array of subtextures.

    +
    + + hh447634 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The zero-based index of the texture.

    +
    + + hh447634 + unsigned int ArraySlice + unsigned int ArraySlice +
    + + +

    Identifies a texture resource for a video processor output view.

    +
    + + hh447635 + D3D11_TEX2D_VPOV + D3D11_TEX2D_VPOV +
    + + +

    The zero-based index into the array of subtextures.

    +
    + + hh447635 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    Describes a 3D texture.

    +
    + +

    This structure is used in a call to .

    In addition to this structure, you can also use the CD3D11_TEXTURE3D_DESC derived structure, which is defined in D3D11.h and behaves like an inherited class, to help create a texture description.

    The device restricts the size of subsampled, block compressed, and bit format resources to be multiples of sizes specific to each format.

    The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 () and call to create an , you must constrain the maximum texture size to D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION (2048) when you create your 3D texture.

    +
    + + ff476254 + D3D11_TEXTURE3D_DESC + D3D11_TEXTURE3D_DESC +
    + + +

    Texture width (in texels). The range is from 1 to (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + ff476254 + unsigned int Width + unsigned int Width +
    + + +

    Texture height (in texels). The range is from 1 to (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + ff476254 + unsigned int Height + unsigned int Height +
    + + +

    Texture depth (in texels). The range is from 1 to (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + ff476254 + unsigned int Depth + unsigned int Depth +
    + + +

    The maximum number of mipmap levels in the texture. See the remarks in . Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.

    +
    + + ff476254 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Texture format (see ).

    +
    + + ff476254 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    Value that identifies how the texture is to be read from and written to. The most common value is ; see for all possible values.

    +
    + + ff476254 + D3D11_USAGE Usage + D3D11_USAGE Usage +
    + + +

    Flags (see ) for binding to pipeline stages. The flags can be combined by a logical OR.

    +
    + + ff476254 + D3D11_BIND_FLAG BindFlags + D3D11_BIND_FLAG BindFlags +
    + + +

    Flags (see ) to specify the types of CPU access allowed. Use 0 if CPU access is not required. These flags can be combined with a logical OR.

    +
    + + ff476254 + D3D11_CPU_ACCESS_FLAG CPUAccessFlags + D3D11_CPU_ACCESS_FLAG CPUAccessFlags +
    + + +

    Flags (see ) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical OR.

    +
    + + ff476254 + D3D11_RESOURCE_MISC_FLAG MiscFlags + D3D11_RESOURCE_MISC_FLAG MiscFlags +
    + + +

    Describes a 3D texture.

    +
    + +

    This structure is used in a call to .

    In addition to this structure, you can also use the CD3D11_TEXTURE3D_DESC1 derived structure, which is defined in D3D11_3.h and behaves like an inherited class, to help create a texture description.

    The device restricts the size of subsampled, block compressed, and bit format resources to be multiples of sizes specific to each format.

    The texture size range is determined by the feature level at which you create the device and not the Microsoft Direct3D interface version. For example, if you use Microsoft Direct3D?10 hardware at feature level 10 () and call to create an , you must constrain the maximum texture size to D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION (2048) when you create your 3D texture.

    +
    + + dn899167 + D3D11_TEXTURE3D_DESC1 + D3D11_TEXTURE3D_DESC1 +
    + + +

    Texture width (in texels). The range is from 1 to (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + dn899167 + unsigned int Width + unsigned int Width +
    + + +

    Texture height (in texels). The range is from 1 to (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + dn899167 + unsigned int Height + unsigned int Height +
    + + +

    Texture depth (in texels). The range is from 1 to (2048). However, the range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

    +
    + + dn899167 + unsigned int Depth + unsigned int Depth +
    + + +

    The maximum number of mipmap levels in the texture. See the remarks in . Use 1 for a multisampled texture; or 0 to generate a full set of subtextures.

    +
    + + dn899167 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Texture format (see ).

    +
    + + dn899167 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    Value that identifies how the texture is to be read from and written to. The most common value is ; see for all possible values.

    +
    + + dn899167 + D3D11_USAGE Usage + D3D11_USAGE Usage +
    + + +

    Flags (see ) for binding to pipeline stages. The flags can be combined by a logical OR.

    +
    + + dn899167 + D3D11_BIND_FLAG BindFlags + D3D11_BIND_FLAG BindFlags +
    + + +

    Flags (see ) to specify the types of CPU access allowed. Use 0 if CPU access is not required. These flags can be combined with a logical OR.

    +
    + + dn899167 + D3D11_CPU_ACCESS_FLAG CPUAccessFlags + D3D11_CPU_ACCESS_FLAG CPUAccessFlags +
    + + +

    Flags (see ) that identify other, less common resource options. Use 0 if none of these flags apply. These flags can be combined with a logical OR.

    +
    + + dn899167 + D3D11_RESOURCE_MISC_FLAG MiscFlags + D3D11_RESOURCE_MISC_FLAG MiscFlags +
    + + +

    A -typed value that identifies the layout of the texture.

    The TextureLayout parameter selects both the actual layout of the texture in memory and the layout visible to the application while the texture is mapped. These flags may not be requested without CPU access also requested.

    It is illegal to set CPU access flags on default textures without also setting Layout to a value other than .

    may not be used with 3D textures. may not be used with 3D textures that have mipmaps.

    +
    + + dn899167 + D3D11_TEXTURE_LAYOUT TextureLayout + D3D11_TEXTURE_LAYOUT TextureLayout +
    + + +

    Describes the coordinates of a tiled resource.

    +
    + + dn280437 + D3D11_TILED_RESOURCE_COORDINATE + D3D11_TILED_RESOURCE_COORDINATE +
    + + +

    The x position of a tiled resource. Used for buffer and 1D, 2D, and 3D textures.

    +
    + + dn280437 + unsigned int X + unsigned int X +
    + + +

    The y position of a tiled resource. Used for 2D and 3D textures.

    +
    + + dn280437 + unsigned int Y + unsigned int Y +
    + + +

    The z position of a tiled resource. Used for 3D textures.

    +
    + + dn280437 + unsigned int Z + unsigned int Z +
    + + +

    A subresource index value into mipmaps and arrays. Used for 1D, 2D, and 3D textures.

    For mipmaps that use nonstandard tiling, or are packed, or both use nonstandard tiling and are packed, any subresource value that indicates any of the packed mipmaps all refer to the same tile.

    +
    + + dn280437 + unsigned int Subresource + unsigned int Subresource +
    + + +

    Describes the size of a tiled region.

    +
    + + dn280442 + D3D11_TILE_REGION_SIZE + D3D11_TILE_REGION_SIZE +
    + + +

    The number of tiles in the tiled region.

    +
    + + dn280442 + unsigned int NumTiles + unsigned int NumTiles +
    + + +

    Specifies whether the runtime uses the Width, Height, and Depth members to define the region.

    If TRUE, the runtime uses the Width, Height, and Depth members to define the region.

    If , the runtime ignores the Width, Height, and Depth members and uses the NumTiles member to traverse tiles in the resource linearly across x, then y, then z (as applicable) and then spills over mipmaps/arrays in subresource order. For example, use this technique to map an entire resource at once.

    Regardless of whether you specify TRUE or for bUseBox, you use a structure to specify the starting location for the region within the resource as a separate parameter outside of this structure by using x, y, and z coordinates.

    When the region includes mipmaps that are packed with nonstandard tiling, bUseBox must be because tile dimensions are not standard and the app only knows a count of how many tiles are consumed by the packed area, which is per array slice. The corresponding (separate) starting location parameter uses x to offset into the flat range of tiles in this case, and y and z coordinates must each be 0.

    +
    + + dn280442 + BOOL bUseBox + BOOL bUseBox +
    + + +

    The width of the tiled region, in tiles. Used for buffer and 1D, 2D, and 3D textures.

    +
    + + dn280442 + unsigned int Width + unsigned int Width +
    + + +

    The height of the tiled region, in tiles. Used for 2D and 3D textures.

    +
    + + dn280442 + unsigned short Height + unsigned short Height +
    + + +

    The depth of the tiled region, in tiles. Used for 3D textures or arrays. For arrays, used for advancing in depth jumps to next slice of same mipmap size, which isn't contiguous in the subresource counting space if there are multiple mipmaps.

    +
    + + dn280442 + unsigned short Depth + unsigned short Depth +
    + + +

    Describes the shape of a tile by specifying its dimensions.

    +
    + +

    Texels are equivalent to pixels. For untyped buffer resources, a texel is just a byte. For multisample antialiasing (MSAA) surfaces, the numbers are still in terms of pixels/texels. + The values here are independent of the surface dimensions. Even if the surface is smaller than what would fit in a tile, the full tile dimensions are reported here. +

    +
    + + dn280443 + D3D11_TILE_SHAPE + D3D11_TILE_SHAPE +
    + + +

    The width in texels of the tile.

    +
    + + dn280443 + unsigned int WidthInTexels + unsigned int WidthInTexels +
    + + +

    The height in texels of the tile.

    +
    + + dn280443 + unsigned int HeightInTexels + unsigned int HeightInTexels +
    + + +

    The depth in texels of the tile.

    +
    + + dn280443 + unsigned int DepthInTexels + unsigned int DepthInTexels +
    + + +

    Specifies the subresources from a resource that are accessible using an unordered-access view.

    +
    + +

    An unordered-access-view description is passed into to create a view.

    +
    + + ff476258 + D3D11_UNORDERED_ACCESS_VIEW_DESC + D3D11_UNORDERED_ACCESS_VIEW_DESC +
    + + +

    Describes the elements in a buffer to use in a unordered-access view.

    +
    + +

    This structure is used by a .

    +
    + + ff476095 + D3D11_BUFFER_UAV + D3D11_BUFFER_UAV +
    + + +

    The zero-based index of the first element to be accessed.

    +
    + + ff476095 + unsigned int FirstElement + unsigned int FirstElement +
    + + +

    The number of elements in the resource. For structured buffers, this is the number of structures in the buffer.

    +
    + + ff476095 + unsigned int NumElements + unsigned int NumElements +
    + + +

    View options for the resource (see ).

    +
    + + ff476095 + D3D11_BUFFER_UAV_FLAG Flags + D3D11_BUFFER_UAV_FLAG Flags +
    + + +

    Describes a unordered-access 1D texture resource.

    +
    + +

    This structure is used by a .

    +
    + + ff476232 + D3D11_TEX1D_UAV + D3D11_TEX1D_UAV +
    + + +

    The mipmap slice index.

    +
    + + ff476232 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    Describes an array of unordered-access 1D texture resources.

    +
    + +

    This structure is used by a .

    +
    + + ff476228 + D3D11_TEX1D_ARRAY_UAV + D3D11_TEX1D_ARRAY_UAV +
    + + +

    The mipmap slice index.

    +
    + + ff476228 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The zero-based index of the first array slice to be accessed.

    +
    + + ff476228 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    The number of slices in the array.

    +
    + + ff476228 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Describes a unordered-access 2D texture resource.

    +
    + +

    This structure is used by a .

    +
    + + ff476246 + D3D11_TEX2D_UAV + D3D11_TEX2D_UAV +
    + + +

    The mipmap slice index.

    +
    + + ff476246 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    Describes an array of unordered-access 2D texture resources.

    +
    + +

    This structure is used by a .

    +
    + + ff476242 + D3D11_TEX2D_ARRAY_UAV + D3D11_TEX2D_ARRAY_UAV +
    + + +

    The mipmap slice index.

    +
    + + ff476242 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The zero-based index of the first array slice to be accessed.

    +
    + + ff476242 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    The number of slices in the array.

    +
    + + ff476242 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    Describes a unordered-access 3D texture resource.

    +
    + +

    This structure is used by a .

    +
    + + ff476249 + D3D11_TEX3D_UAV + D3D11_TEX3D_UAV +
    + + +

    The mipmap slice index.

    +
    + + ff476249 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The zero-based index of the first depth slice to be accessed.

    +
    + + ff476249 + unsigned int FirstWSlice + unsigned int FirstWSlice +
    + + +

    The number of depth slices.

    +
    + + ff476249 + unsigned int WSize + unsigned int WSize +
    + + +

    The data format (see ).

    +
    + + ff476258 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    The resource type (see ), which specifies how the resource will be accessed.

    +
    + + ff476258 + D3D11_UAV_DIMENSION ViewDimension + D3D11_UAV_DIMENSION ViewDimension +
    + + +

    Specifies which buffer elements can be accessed (see ).

    +
    + + ff476258 + D3D11_BUFFER_UAV Buffer + D3D11_BUFFER_UAV Buffer +
    + + +

    Specifies the subresources in a 1D texture that can be accessed (see ).

    +
    + + ff476258 + D3D11_TEX1D_UAV Texture1D + D3D11_TEX1D_UAV Texture1D +
    + + +

    Specifies the subresources in a 1D texture array that can be accessed (see ).

    +
    + + ff476258 + D3D11_TEX1D_ARRAY_UAV Texture1DArray + D3D11_TEX1D_ARRAY_UAV Texture1DArray +
    + + +

    Specifies the subresources in a 2D texture that can be accessed (see ).

    +
    + + ff476258 + D3D11_TEX2D_UAV Texture2D + D3D11_TEX2D_UAV Texture2D +
    + + +

    Specifies the subresources in a 2D texture array that can be accessed (see ).

    +
    + + ff476258 + D3D11_TEX2D_ARRAY_UAV Texture2DArray + D3D11_TEX2D_ARRAY_UAV Texture2DArray +
    + + +

    Specifies subresources in a 3D texture that can be accessed (see ).

    +
    + + ff476258 + D3D11_TEX3D_UAV Texture3D + D3D11_TEX3D_UAV Texture3D +
    + + +

    Describes the subresources from a resource that are accessible using an unordered-access view.

    +
    + +

    An unordered-access-view description is passed into to create a view.

    +
    + + dn899203 + D3D11_UNORDERED_ACCESS_VIEW_DESC1 + D3D11_UNORDERED_ACCESS_VIEW_DESC1 +
    + + +

    Describes a unordered-access 2D texture resource.

    +
    + + dn899165 + D3D11_TEX2D_UAV1 + D3D11_TEX2D_UAV1 +
    + + +

    The mipmap slice index.

    +
    + + dn899165 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The index (plane slice number) of the plane to use in the texture.

    +
    + + dn899165 + unsigned int PlaneSlice + unsigned int PlaneSlice +
    + + +

    Describes an array of unordered-access 2D texture resources.

    +
    + + dn899162 + D3D11_TEX2D_ARRAY_UAV1 + D3D11_TEX2D_ARRAY_UAV1 +
    + + +

    The mipmap slice index.

    +
    + + dn899162 + unsigned int MipSlice + unsigned int MipSlice +
    + + +

    The zero-based index of the first array slice to be accessed.

    +
    + + dn899162 + unsigned int FirstArraySlice + unsigned int FirstArraySlice +
    + + +

    The number of slices in the array.

    +
    + + dn899162 + unsigned int ArraySize + unsigned int ArraySize +
    + + +

    The index (plane slice number) of the plane to use in an array of textures.

    +
    + + dn899162 + unsigned int PlaneSlice + unsigned int PlaneSlice +
    + + +

    A -typed value that specifies the data format.

    +
    + + dn899203 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    A -typed value that specifies the resource type of the view. This type is the same as the resource type of the underlying resource. This member also determines which _UAV to use in the union below.

    +
    + + dn899203 + D3D11_UAV_DIMENSION ViewDimension + D3D11_UAV_DIMENSION ViewDimension +
    + + +

    A structure that specifies which buffer elements can be accessed.

    +
    + + dn899203 + D3D11_BUFFER_UAV Buffer + D3D11_BUFFER_UAV Buffer +
    + + +

    A structure that specifies the subresources in a 1D texture that can be accessed.

    +
    + + dn899203 + D3D11_TEX1D_UAV Texture1D + D3D11_TEX1D_UAV Texture1D +
    + + +

    A structure that specifies the subresources in a 1D texture array that can be accessed.

    +
    + + dn899203 + D3D11_TEX1D_ARRAY_UAV Texture1DArray + D3D11_TEX1D_ARRAY_UAV Texture1DArray +
    + + +

    A structure that specifies the subresources in a 2D texture that can be accessed.

    +
    + + dn899203 + D3D11_TEX2D_UAV1 Texture2D + D3D11_TEX2D_UAV1 Texture2D +
    + + +

    A structure that specifies the subresources in a 2D texture array that can be accessed.

    +
    + + dn899203 + D3D11_TEX2D_ARRAY_UAV1 Texture2DArray + D3D11_TEX2D_ARRAY_UAV1 Texture2DArray +
    + + +

    A structure that specifies subresources in a 3D texture that can be accessed.

    +
    + + dn899203 + D3D11_TEX3D_UAV Texture3D + D3D11_TEX3D_UAV Texture3D +
    + + +

    Defines a color value for Microsoft Direct3D?11 video.

    +
    + +

    The anonymous union can represent both RGB and YCbCr colors. The interpretation of the union depends on the context.

    +
    + + hh447637 + D3D11_VIDEO_COLOR + D3D11_VIDEO_COLOR +
    + + +

    A structure that contains a YCbCr color value.

    +
    + + hh447637 + D3D11_VIDEO_COLOR_YCbCrA YCbCr + D3D11_VIDEO_COLOR_YCbCrA YCbCr +
    + + +

    A structure that contains an RGB color value.

    +
    + + hh447637 + D3D11_VIDEO_COLOR_RGBA RGBA + D3D11_VIDEO_COLOR_RGBA RGBA +
    + + +

    Specifies an RGB color value.

    +
    + +

    The RGB values have a nominal range of [0...1]. For an RGB format with n bits per channel, the value of each color component is calculated as follows:

    val = f * ((1 << n)-1)

    For example, for RGB-32 (8 bits per channel), val = BYTE(f * 255.0).

    +
    + + hh447638 + D3D11_VIDEO_COLOR_RGBA + D3D11_VIDEO_COLOR_RGBA +
    + + +

    The red value.

    +
    + + hh447638 + float R + float R +
    + + +

    The green value.

    +
    + + hh447638 + float G + float G +
    + + +

    The blue value.

    +
    + + hh447638 + float B + float B +
    + + +

    The alpha value. Values range from 0 (transparent) to 1 (opaque). +

    +
    + + hh447638 + float A + float A +
    + + + No documentation. + + + D3D11_VIDEO_COLOR_YCbCrA + D3D11_VIDEO_COLOR_YCbCrA + + + + No documentation. + + + float Y + float Y + + + + No documentation. + + + float Cb + float Cb + + + + No documentation. + + + float Cr + float Cr + + + + No documentation. + + + float A + float A + + + +

    Describes the content-protection capabilities of a graphics driver.

    +
    + + hh447640 + D3D11_VIDEO_CONTENT_PROTECTION_CAPS + D3D11_VIDEO_CONTENT_PROTECTION_CAPS +
    + + +

    A bitwise OR of zero or more flags from the enumeration.

    +
    + + hh447640 + unsigned int Caps + unsigned int Caps +
    + + +

    The number of cryptographic key-exchange types that are supported by the driver. To get the list of key-exchange types, call the method.

    +
    + + hh447640 + unsigned int KeyExchangeTypeCount + unsigned int KeyExchangeTypeCount +
    + + +

    The encyrption block size, in bytes. The size of data to be encrypted must be a multiple of this value.

    +
    + + hh447640 + unsigned int BlockAlignmentSize + unsigned int BlockAlignmentSize +
    + + +

    The total amount of memory, in bytes, that can be used to hold protected surfaces.

    +
    + + hh447640 + unsigned longlong ProtectedMemorySize + unsigned longlong ProtectedMemorySize +
    + + +

    [Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]

    Provides data to the method.

    +
    + +

    This structure is passed in the pContentKey parameter of the function when D3D11_DECODER_ENCRYPTION_HW_CENC is specified in the guidConfigBitstreamEncryption member of the structure when creating the video decoder interface.

    +
    + + dn894118 + D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION + D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION +
    + + + No documentation. + + + dn894118 + ID3D11CryptoSession* pCryptoSession + ID3D11CryptoSession pCryptoSession + + + + No documentation. + + + dn894118 + unsigned int BlobSize + unsigned int BlobSize + + + + No documentation. + + + dn894118 + void* pBlob + void pBlob + + + + No documentation. + + + dn894118 + GUID* pKeyInfoId + GUID pKeyInfoId + + + + No documentation. + + + dn894118 + unsigned int PrivateDataSize + unsigned int PrivateDataSize + + + + No documentation. + + + dn894118 + void* pPrivateData + void pPrivateData + + + +

    Describes a compressed buffer for decoding.

    +
    + + hh447641 + D3D11_VIDEO_DECODER_BUFFER_DESC + D3D11_VIDEO_DECODER_BUFFER_DESC +
    + + +

    The type of buffer, specified as a member of the enumeration.

    +
    + + hh447641 + D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType + D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType +
    + + +

    Reserved.

    +
    + + hh447641 + unsigned int BufferIndex + unsigned int BufferIndex +
    + + +

    The offset of the relevant data from the beginning of the buffer, in bytes. This value must be zero. +

    +
    + + hh447641 + unsigned int DataOffset + unsigned int DataOffset +
    + + +

    The macroblock address of the first macroblock in the buffer. The macroblock address is given in raster scan order. +

    +
    + + hh447641 + unsigned int DataSize + unsigned int DataSize +
    + + +

    The macroblock address of the first macroblock in the buffer. The macroblock address is given in raster scan order. +

    +
    + + hh447641 + unsigned int FirstMBaddress + unsigned int FirstMBaddress +
    + + +

    The number of macroblocks of data in the buffer. This count includes skipped macroblocks.

    +
    + + hh447641 + unsigned int NumMBsInBuffer + unsigned int NumMBsInBuffer +
    + + +

    Reserved. Set to zero.

    +
    + + hh447641 + unsigned int Width + unsigned int Width +
    + + +

    Reserved. Set to zero.

    +
    + + hh447641 + unsigned int Height + unsigned int Height +
    + + +

    Reserved. Set to zero.

    +
    + + hh447641 + unsigned int Stride + unsigned int Stride +
    + + +

    Reserved. Set to zero.

    +
    + + hh447641 + unsigned int ReservedBits + unsigned int ReservedBits +
    + + +

    A reference to a buffer that contains an initialization vector (IV) for encrypted data. If the decode buffer does not contain encrypted data, set this member to null.

    +
    + + hh447641 + void* pIV + void pIV +
    + + +

    The size of the buffer specified in the pIV parameter. If pIV is null, set this member to zero.

    +
    + + hh447641 + unsigned int IVSize + unsigned int IVSize +
    + + +

    If TRUE, the video surfaces are partially encrypted.

    +
    + + hh447641 + BOOL PartialEncryption + BOOL PartialEncryption +
    + + +

    A structure that specifies which bytes of the surface are encrypted.

    +
    + + hh447641 + D3D11_ENCRYPTED_BLOCK_INFO EncryptedBlockInfo + D3D11_ENCRYPTED_BLOCK_INFO EncryptedBlockInfo +
    + + +

    [Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]

    Describes a compressed buffer for decoding.

    +
    + + dn894119 + D3D11_VIDEO_DECODER_BUFFER_DESC1 + D3D11_VIDEO_DECODER_BUFFER_DESC1 +
    + + +

    The type of buffer.

    +
    + + dn894119 + D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType + D3D11_VIDEO_DECODER_BUFFER_TYPE BufferType +
    + + +

    The offset of the relevant data from the beginning of the buffer, in bytes. This value must be zero.

    +
    + + dn894119 + unsigned int DataOffset + unsigned int DataOffset +
    + + +

    Size of the relevant data.

    +
    + + dn894119 + unsigned int DataSize + unsigned int DataSize +
    + + +

    A reference to a buffer that contains an initialization vector (IV) for encrypted data. If the decode buffer does not contain encrypted data, set this member to null.

    +
    + + dn894119 + void* pIV + void pIV +
    + + +

    The size of the buffer specified in the pIV parameter. If pIV is null, set this member to zero.

    +
    + + dn894119 + unsigned int IVSize + unsigned int IVSize +
    + + +

    A reference to an array of structures, which indicates exactly which bytes in the decode buffer are encrypted and which are in the clear. If the decode buffer does not contain encrypted data, set this member to null.

    Values in the sub sample mapping blocks are relative to the start of the decode buffer.

    +
    + + dn894119 + D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK* pSubSampleMappingBlock + D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK pSubSampleMappingBlock +
    + + +

    The number of structures specified in the pSubSampleMappingBlocks parameter. If pSubSampleMappingBlocks is null, set this member to zero.

    +
    + + dn894119 + unsigned int SubSampleMappingCount + unsigned int SubSampleMappingCount +
    + + +

    Describes the configuration of a Microsoft Direct3D?11 decoder device for DirectX Video Acceleration (DXVA).

    +
    + + hh447643 + D3D11_VIDEO_DECODER_CONFIG + D3D11_VIDEO_DECODER_CONFIG +
    + + +

    If the bitstream data buffers are encrypted using the D3D11CryptoSession mechanism, this should be set to zero. If no encryption is applied, the value is DXVA_NoEncrypt. If ConfigBitstreamRaw is 0, the value must be DXVA_NoEncrypt.

    +
    + + hh447643 + GUID guidConfigBitstreamEncryption + GUID guidConfigBitstreamEncryption +
    + + +

    If the macroblock control data buffers are encrypted using the D3D11CryptoSession mechanism, this should be set to zero. If no encryption is applied, the value is DXVA_NoEncrypt. If ConfigBitstreamRaw is 1, the value must be DXVA_NoEncrypt.

    +
    + + hh447643 + GUID guidConfigMBcontrolEncryption + GUID guidConfigMBcontrolEncryption +
    + + +

    If the residual difference decoding data buffers are encrypted using the D3D11CryptoSession mechanism, this should be set to zero. If no encryption is applied, the value is DXVA_NoEncrypt. If ConfigBitstreamRaw is 1, the value must be DXVA_NoEncrypt.

    +
    + + hh447643 + GUID guidConfigResidDiffEncryption + GUID guidConfigResidDiffEncryption +
    + + +

    Indicates whether the host-decoder sends raw bit-stream data. If the value is 1, the data for the pictures will be sent in bit-stream buffers as raw bit-stream content. If the value is 0, picture data will be sent using macroblock control command buffers. If either ConfigResidDiffHost or ConfigResidDiffAccelerator is 1, the value must be 0.

    +
    + + hh447643 + unsigned int ConfigBitstreamRaw + unsigned int ConfigBitstreamRaw +
    + + +

    Specifies whether macroblock control commands are in raster scan order or in arbitrary order. If the value is 1, the macroblock control commands within each macroblock control command buffer are in raster-scan order. If the value is 0, the order is arbitrary. For some types of bit streams, forcing raster order either greatly increases the number of required macroblock control buffers that must be processed, or requires host reordering of the control information. Therefore, supporting arbitrary order can be more efficient.

    +
    + + hh447643 + unsigned int ConfigMBcontrolRasterOrder + unsigned int ConfigMBcontrolRasterOrder +
    + + +

    Contains the host residual difference configuration. If the value is 1, some residual difference decoding data may be sent as blocks in the spatial domain from the host. If the value is 0, spatial domain data will not be sent.

    +
    + + hh447643 + unsigned int ConfigResidDiffHost + unsigned int ConfigResidDiffHost +
    + + +

    Indicates the word size used to represent residual difference spatial-domain blocks for predicted (non-intra) pictures when using host-based residual difference decoding.

    If ConfigResidDiffHost is 1 and ConfigSpatialResid8 is 1, the host will send residual difference spatial-domain blocks for non-intra macroblocks using 8-bit signed samples and for intra macroblocks in predicted (non-intra) pictures in a format that depends on the value of ConfigIntraResidUnsigned:

    • If ConfigIntraResidUnsigned is 0, spatial-domain blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^(BPP?1).
    • If ConfigIntraResidUnsigned is 1, spatial-domain blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0.

    If ConfigResidDiffHost is 1 and ConfigSpatialResid8 is 0, the host will send residual difference spatial-domain blocks of data for non-intra macroblocks using 16-bit signed samples and for intra macroblocks in predicted (non-intra) pictures in a format that depends on the value of ConfigIntraResidUnsigned:

    • If ConfigIntraResidUnsigned is 0, spatial domain blocks for intra macroblocks are sent as 16-bit signed integer values relative to a constant reference value of 2^(BPP?1).
    • If ConfigIntraResidUnsigned is 1, spatial domain blocks for intra macroblocks are sent as 16-bit unsigned integer values relative to a constant reference value of 0.

    If ConfigResidDiffHost is 0, ConfigSpatialResid8 must be 0.

    For intra pictures, spatial-domain blocks must be sent using 8-bit samples if bits-per-pixel (BPP) is 8, and using 16-bit samples if BPP > 8. If ConfigIntraResidUnsigned is 0, these samples are sent as signed integer values relative to a constant reference value of 2^(BPP?1), and if ConfigIntraResidUnsigned is 1, these samples are sent as unsigned integer values relative to a constant reference value of 0.

    +
    + + hh447643 + unsigned int ConfigSpatialResid8 + unsigned int ConfigSpatialResid8 +
    + + +

    If the value is 1, 8-bit difference overflow blocks are subtracted rather than added. The value must be 0 unless ConfigSpatialResid8 is 1.

    The ability to subtract differences rather than add them enables 8-bit difference decoding to be fully compliant with the full ?255 range of values required in video decoder specifications, because +255 cannot be represented as the addition of two signed 8-bit numbers, but any number in the range ?255 can be represented as the difference between two signed 8-bit numbers (+255 = +127 minus ?128).

    +
    + + hh447643 + unsigned int ConfigResid8Subtraction + unsigned int ConfigResid8Subtraction +
    + + +

    If the value is 1, spatial-domain blocks for intra macroblocks must be clipped to an 8-bit range on the host and spatial-domain blocks for non-intra macroblocks must be clipped to a 9-bit range on the host. If the value is 0, no such clipping is necessary by the host.

    The value must be 0 unless ConfigSpatialResid8 is 0 and ConfigResidDiffHost is 1.

    +
    + + hh447643 + unsigned int ConfigSpatialHost8or9Clipping + unsigned int ConfigSpatialHost8or9Clipping +
    + + +

    If the value is 1, any spatial-domain residual difference data must be sent in a chrominance-interleaved form matching the YUV format chrominance interleaving pattern. The value must be 0 unless ConfigResidDiffHost is 1 and the YUV format is NV12 or NV21.

    +
    + + hh447643 + unsigned int ConfigSpatialResidInterleaved + unsigned int ConfigSpatialResidInterleaved +
    + + +

    Indicates the method of representation of spatial-domain blocks of residual difference data for intra blocks when using host-based difference decoding.

    If ConfigResidDiffHost is 1 and ConfigIntraResidUnsigned is 0, spatial-domain residual difference data blocks for intra macroblocks must be sent as follows:

    • In a non-intra picture, if ConfigSpatialResid8 is 0, the spatial-domain residual difference data blocks for intra macroblocks are sent as 16-bit signed integer values relative to a constant reference value of 2^(BPP?1).
    • In a non-intra picture, if ConfigSpatialResid8 is 1, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^(BPP?1).
    • In an intra picture, if BPP is 8, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit signed integer values relative to a constant reference value of 2^(BPP?1), regardless of the value of ConfigSpatialResid8.

    If ConfigResidDiffHost is 1 and ConfigIntraResidUnsigned is 1, spatial-domain residual difference data blocks for intra macroblocks must be sent as follows:

    • In a non-intra picture, if ConfigSpatialResid8 is 0, the spatial-domain residual difference data blocks for intra macroblocks must be sent as 16-bit unsigned integer values relative to a constant reference value of 0.
    • In a non-intra picture, if ConfigSpatialResid8 is 1, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0.
    • In an intra picture, if BPP is 8, the spatial-domain residual difference data blocks for intra macroblocks are sent as 8-bit unsigned integer values relative to a constant reference value of 0, regardless of the value of ConfigSpatialResid8.

    The value of the member must be 0 unless ConfigResidDiffHost is 1.

    +
    + + hh447643 + unsigned int ConfigIntraResidUnsigned + unsigned int ConfigIntraResidUnsigned +
    + + +

    If the value is 1, transform-domain blocks of coefficient data may be sent from the host for accelerator-based IDCT. If the value is 0, accelerator-based IDCT will not be used. If both ConfigResidDiffHost and ConfigResidDiffAccelerator are 1, this indicates that some residual difference decoding will be done on the host and some on the accelerator, as indicated by macroblock-level control commands.

    The value must be 0 if ConfigBitstreamRaw is 1.

    +
    + + hh447643 + unsigned int ConfigResidDiffAccelerator + unsigned int ConfigResidDiffAccelerator +
    + + +

    If the value is 1, the inverse scan for transform-domain block processing will be performed on the host, and absolute indices will be sent instead for any transform coefficients. If the value is 0, the inverse scan will be performed on the accelerator.

    The value must be 0 if ConfigResidDiffAccelerator is 0 or if Config4GroupedCoefs is 1.

    +
    + + hh447643 + unsigned int ConfigHostInverseScan + unsigned int ConfigHostInverseScan +
    + + +

    If the value is 1, the IDCT specified in Annex W of ITU-T Recommendation H.263 is used. If the value is 0, any compliant IDCT can be used for off-host IDCT.

    The H.263 annex does not comply with the IDCT requirements of MPEG-2 corrigendum 2, so the value must not be 1 for use with MPEG-2 video.

    The value must be 0 if ConfigResidDiffAccelerator is 0, indicating purely host-based residual difference decoding.

    +
    + + hh447643 + unsigned int ConfigSpecificIDCT + unsigned int ConfigSpecificIDCT +
    + + +

    If the value is 1, transform coefficients for off-host IDCT will be sent using the DXVA_TCoef4Group structure. If the value is 0, the DXVA_TCoefSingle structure is used. The value must be 0 if ConfigResidDiffAccelerator is 0 or if ConfigHostInverseScan is 1.

    +
    + + hh447643 + unsigned int Config4GroupedCoefs + unsigned int Config4GroupedCoefs +
    + + +

    Specifies how many frames the decoder device processes at any one time.

    +
    + + hh447643 + unsigned short ConfigMinRenderTargetBuffCount + unsigned short ConfigMinRenderTargetBuffCount +
    + + +

    Contains decoder-specific configuration information.

    +
    + + hh447643 + unsigned short ConfigDecoderSpecific + unsigned short ConfigDecoderSpecific +
    + + +

    Describes a video stream for a Microsoft Direct3D?11 video decoder or video processor.

    +
    + + hh447644 + D3D11_VIDEO_DECODER_DESC + D3D11_VIDEO_DECODER_DESC +
    + + +

    The decoding profile. To get the list of profiles supported by the device, call the method.

    +
    + + hh447644 + GUID Guid + GUID Guid +
    + + +

    The width of the video frame, in pixels.

    +
    + + hh447644 + unsigned int SampleWidth + unsigned int SampleWidth +
    + + +

    The height of the video frame, in pixels.

    +
    + + hh447644 + unsigned int SampleHeight + unsigned int SampleHeight +
    + + +

    The output surface format, specified as a value.

    +
    + + hh447644 + DXGI_FORMAT OutputFormat + DXGI_FORMAT OutputFormat +
    + + +

    Contains driver-specific data for the method.

    +
    + +

    The exact meaning of each structure member depends on the value of Function.

    +
    + + hh447645 + D3D11_VIDEO_DECODER_EXTENSION + D3D11_VIDEO_DECODER_EXTENSION +
    + + + No documentation. + + + hh447645 + unsigned int Function + unsigned int Function + + + + No documentation. + + + hh447645 + void* pPrivateInputData + void pPrivateInputData + + + + No documentation. + + + hh447645 + unsigned int PrivateInputDataSize + unsigned int PrivateInputDataSize + + + + No documentation. + + + hh447645 + void* pPrivateOutputData + void pPrivateOutputData + + + + No documentation. + + + hh447645 + unsigned int PrivateOutputDataSize + unsigned int PrivateOutputDataSize + + + + No documentation. + + + hh447645 + unsigned int ResourceCount + unsigned int ResourceCount + + + + No documentation. + + + hh447645 + ID3D11Resource** ppResourceList + ID3D11Resource ppResourceList + + + +

    Describes a video decoder output view.

    +
    + + hh447646 + D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC + D3D11_VIDEO_DECODER_OUTPUT_VIEW_DESC +
    + + +

    The decoding profile. To get the list of profiles supported by the device, call the method.

    +
    + + hh447646 + GUID DecodeProfile + GUID DecodeProfile +
    + + +

    The resource type of the view, specified as a member of the enumeration.

    +
    + + hh447646 + D3D11_VDOV_DIMENSION ViewDimension + D3D11_VDOV_DIMENSION ViewDimension +
    + + +

    A structure that identifies the texture resource for the output view.

    +
    + + hh447646 + D3D11_TEX2D_VDOV Texture2D + D3D11_TEX2D_VDOV Texture2D +
    + + +

    [Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]

    Describes a sub sample mapping block.

    +
    + +

    Values in the sub sample mapping blocks are relative to the start of the decode buffer.

    +
    + + dn894121 + D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK + D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK +
    + + +

    The number of clear (non-encrypted) bytes at the start of the block.

    +
    + + dn894121 + unsigned int ClearSize + unsigned int ClearSize +
    + + +

    The number of encrypted bytes following the clear bytes.

    +
    + + dn894121 + unsigned int EncryptedSize + unsigned int EncryptedSize +
    + + +

    Describes the capabilities of a Microsoft Direct3D?11 video processor.

    +
    + +

    The video processor stores state information for each input stream. These states persist between blits. With each blit, the application selects which streams to enable or disable. Disabling a stream does not affect the state information for that stream.

    The MaxStreamStates member gives the maximum number of stream states that can be saved. The MaxInputStreams member gives the maximum number of streams that can be enabled during a blit. These two values can differ.

    +
    + + hh447650 + D3D11_VIDEO_PROCESSOR_CAPS + D3D11_VIDEO_PROCESSOR_CAPS +
    + + +

    A bitwise OR of zero or more flags from the enumeration.

    +
    + + hh447650 + unsigned int DeviceCaps + unsigned int DeviceCaps +
    + + +

    A bitwise OR of zero or more flags from the enumeration.

    +
    + + hh447650 + unsigned int FeatureCaps + unsigned int FeatureCaps +
    + + +

    A bitwise OR of zero or more flags from the D3D11_VIDEO_PROCESSPR_FILTER_CAPS enumeration.

    +
    + + hh447650 + unsigned int FilterCaps + unsigned int FilterCaps +
    + + +

    A bitwise OR of zero or more flags from the enumeration.

    +
    + + hh447650 + unsigned int InputFormatCaps + unsigned int InputFormatCaps +
    + + +

    A bitwise OR of zero or more flags from the enumeration.

    +
    + + hh447650 + unsigned int AutoStreamCaps + unsigned int AutoStreamCaps +
    + + +

    A bitwise OR of zero or more flags from the enumeration.

    +
    + + hh447650 + unsigned int StereoCaps + unsigned int StereoCaps +
    + + +

    The number of frame-rate conversion capabilities. To enumerate the frame-rate conversion capabilities, call the method.

    +
    + + hh447650 + unsigned int RateConversionCapsCount + unsigned int RateConversionCapsCount +
    + + +

    The maximum number of input streams that can be enabled at the same time.

    +
    + + hh447650 + unsigned int MaxInputStreams + unsigned int MaxInputStreams +
    + + +

    The maximum number of input streams for which the device can store state data.

    +
    + + hh447650 + unsigned int MaxStreamStates + unsigned int MaxStreamStates +
    + + +

    Specifies the color space for video processing.

    +
    + +

    The RGB_Range member applies to RGB output, while the YCbCr_Matrix and YCbCr_xvYCC members apply to YCbCr output. If the driver performs color-space conversion on the background color, it uses the values that apply to both color spaces.

    If the driver supports extended YCbCr (xvYCC), it returns the capabilities flag in the method. Otherwise, the driver ignores the value of YCbCr_xvYCC and treats all YCbCr output as conventional YCbCr.

    If extended YCbCr is supported, it can be used with either transfer matrix. Extended YCbCr does not change the black point or white point?the black point is still 16 and the white point is still 235. However, extended YCbCr explicitly allows blacker-than-black values in the range 1?15, and whiter-than-white values in the range 236?254. When extended YCbCr is used, the driver should not clip the luma values to the nominal 16?235 range.

    +
    + + hh447651 + D3D11_VIDEO_PROCESSOR_COLOR_SPACE + D3D11_VIDEO_PROCESSOR_COLOR_SPACE +
    + + +

    Specifies whether the output is intended for playback or video processing (such as editing or authoring). The device can optimize the processing based on the type. The default state value is 0 (playback).

    ValueMeaning
    0

    Playback

    1

    Video processing

    ?

    +
    + + hh447651 + unsigned int Usage + unsigned int Usage +
    + + +

    Specifies the RGB color range. The default state value is 0 (full range).

    ValueMeaning
    0

    Full range (0-255)

    1

    Limited range (16-235)

    ?

    +
    + + hh447651 + unsigned int RGB_Range + unsigned int RGB_Range +
    + + +

    Specifies the YCbCr transfer matrix. The default state value is 0 (BT.601).

    ValueMeaning
    0

    ITU-R BT.601

    1

    ITU-R BT.709

    ?

    +
    + + hh447651 + unsigned int YCbCr_Matrix + unsigned int YCbCr_Matrix +
    + + +

    Specifies whether the output uses conventional YCbCr or extended YCbCr (xvYCC). The default state value is zero (conventional YCbCr).

    ValueMeaning
    0

    Conventional YCbCr

    1

    Extended YCbCr (xvYCC)

    ?

    +
    + + hh447651 + unsigned int YCbCr_xvYCC + unsigned int YCbCr_xvYCC +
    + + +

    Specifies the .

    Introduced in Windows?8.1.

    +
    + + hh447651 + unsigned int Nominal_Range + unsigned int Nominal_Range +
    + + +

    Reserved. Set to zero.

    +
    + + hh447651 + unsigned int Reserved + unsigned int Reserved +
    + + +

    Describes a video stream for a video processor.

    +
    + + hh447652 + D3D11_VIDEO_PROCESSOR_CONTENT_DESC + D3D11_VIDEO_PROCESSOR_CONTENT_DESC +
    + + +

    A member of the enumeration that describes how the video stream is interlaced.

    +
    + + hh447652 + D3D11_VIDEO_FRAME_FORMAT InputFrameFormat + D3D11_VIDEO_FRAME_FORMAT InputFrameFormat +
    + + +

    The frame rate of the input video stream, specified as a structure.

    +
    + + hh447652 + DXGI_RATIONAL InputFrameRate + DXGI_RATIONAL InputFrameRate +
    + + +

    The width of the input frames, in pixels.

    +
    + + hh447652 + unsigned int InputWidth + unsigned int InputWidth +
    + + +

    The height of the input frames, in pixels.

    +
    + + hh447652 + unsigned int InputHeight + unsigned int InputHeight +
    + + +

    The frame rate of the output video stream, specified as a structure.

    +
    + + hh447652 + DXGI_RATIONAL OutputFrameRate + DXGI_RATIONAL OutputFrameRate +
    + + +

    The width of the output frames, in pixels.

    +
    + + hh447652 + unsigned int OutputWidth + unsigned int OutputWidth +
    + + +

    The height of the output frames, in pixels.

    +
    + + hh447652 + unsigned int OutputHeight + unsigned int OutputHeight +
    + + +

    A member of the enumeration that describes how the video processor will be used. The value indicates the desired trade-off between speed and video quality. The driver uses this flag as a hint when it creates the video processor.

    +
    + + hh447652 + D3D11_VIDEO_USAGE Usage + D3D11_VIDEO_USAGE Usage +
    + + +

    Specifies a custom rate for frame-rate conversion or inverse telecine (IVTC).

    +
    + +

    The CustomRate member gives the rate conversion factor, while the remaining members define the pattern of input and output samples.

    +
    + + hh447653 + D3D11_VIDEO_PROCESSOR_CUSTOM_RATE + D3D11_VIDEO_PROCESSOR_CUSTOM_RATE +
    + + +

    The ratio of the output frame rate to the input frame rate, expressed as a structure that holds a rational number.

    +
    + + hh447653 + DXGI_RATIONAL CustomRate + DXGI_RATIONAL CustomRate +
    + + +

    The number of output frames that will be generated for every N input samples, where N = InputFramesOrFields.

    +
    + + hh447653 + unsigned int OutputFrames + unsigned int OutputFrames +
    + + +

    If TRUE, the input stream must be interlaced. Otherwise, the input stream must be progressive.

    +
    + + hh447653 + BOOL InputInterlaced + BOOL InputInterlaced +
    + + +

    The number of input fields or frames for every N output frames that will be generated, where N = OutputFrames.

    +
    + + hh447653 + unsigned int InputFramesOrFields + unsigned int InputFramesOrFields +
    + + +

    Defines the range of supported values for an image filter.

    +
    + +

    The multiplier enables the filter range to have a fractional step value.

    For example, a hue filter might have an actual range of [?180.0 ... +180.0] with a step size of 0.25. The device would report the following range and multiplier:

    • Minimum: ?720
    • Maximum: +720
    • Multiplier: 0.25

    In this case, a filter value of 2 would be interpreted by the device as 0.50 (or 2 ? 0.25).

    The device should use a multiplier that can be represented exactly as a base-2 fraction.

    +
    + + hh447657 + D3D11_VIDEO_PROCESSOR_FILTER_RANGE + D3D11_VIDEO_PROCESSOR_FILTER_RANGE +
    + + +

    The minimum value of the filter.

    +
    + + hh447657 + int Minimum + int Minimum +
    + + +

    The maximum value of the filter.

    +
    + + hh447657 + int Maximum + int Maximum +
    + + +

    The default value of the filter.

    +
    + + hh447657 + int Default + int Default +
    + + +

    A multiplier. Use the following formula to translate the filter setting into the actual filter value: Actual Value = Set Value???Multiplier.

    +
    + + hh447657 + float Multiplier + float Multiplier +
    + + +

    Describes a video processor input view.

    +
    + + hh447660 + D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC + D3D11_VIDEO_PROCESSOR_INPUT_VIEW_DESC +
    + + +

    The surface format. If zero, the driver uses the DXGI format that was used to create the resource. If you are using feature level 9, the value must be zero.

    +
    + + hh447660 + unsigned int FourCC + unsigned int FourCC +
    + + +

    The resource type of the view, specified as a member of the enumeration.

    +
    + + hh447660 + D3D11_VPIV_DIMENSION ViewDimension + D3D11_VPIV_DIMENSION ViewDimension +
    + + +

    A structure that identifies the texture resource.

    +
    + + hh447660 + D3D11_TEX2D_VPIV Texture2D + D3D11_TEX2D_VPIV Texture2D +
    + + +

    Describes a video processor output view.

    +
    + + hh447663 + D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC + D3D11_VIDEO_PROCESSOR_OUTPUT_VIEW_DESC +
    + + +

    The resource type of the view, specified as a member of the enumeration.

    +
    + + hh447663 + D3D11_VPOV_DIMENSION ViewDimension + D3D11_VPOV_DIMENSION ViewDimension +
    + + +

    A structure that identifies the texture resource for the output view.

    Use this member of the union when ViewDimension equals .

    +
    + + hh447663 + D3D11_TEX2D_VPOV Texture2D + D3D11_TEX2D_VPOV Texture2D +
    + + +

    A structure that identifies the texture array for the output view.

    Use this member of the union when ViewDimension equals .

    +
    + + hh447663 + D3D11_TEX2D_ARRAY_VPOV Texture2DArray + D3D11_TEX2D_ARRAY_VPOV Texture2DArray +
    + + +

    Defines a group of video processor capabilities that are associated with frame-rate conversion, including deinterlacing and inverse telecine.

    +
    + + hh447665 + D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS + D3D11_VIDEO_PROCESSOR_RATE_CONVERSION_CAPS +
    + + +

    The number of past reference frames required to perform the optimal video processing.

    +
    + + hh447665 + unsigned int PastFrames + unsigned int PastFrames +
    + + +

    The number of future reference frames required to perform the optimal video processing.

    +
    + + hh447665 + unsigned int FutureFrames + unsigned int FutureFrames +
    + + +

    A bitwise OR of zero or more flags from the enumeration.

    +
    + + hh447665 + unsigned int ProcessorCaps + unsigned int ProcessorCaps +
    + + +

    A bitwise OR of zero or more flags from the enumeration.

    +
    + + hh447665 + unsigned int ITelecineCaps + unsigned int ITelecineCaps +
    + + +

    The number of custom frame rates that the driver supports. To get the list of custom frame rates, call the method.

    +
    + + hh447665 + unsigned int CustomRateCount + unsigned int CustomRateCount +
    + + +

    Contains stream-level data for the method.

    +
    + +

    If the stereo 3D format is , the ppPastSurfaces, pInputSurface, and ppFutureSurfaces members contain the left view.

    +
    + + hh447670 + D3D11_VIDEO_PROCESSOR_STREAM + D3D11_VIDEO_PROCESSOR_STREAM +
    + + + No documentation. + + + hh447670 + BOOL Enable + BOOL Enable + + + + No documentation. + + + hh447670 + unsigned int OutputIndex + unsigned int OutputIndex + + + + No documentation. + + + hh447670 + unsigned int InputFrameOrField + unsigned int InputFrameOrField + + + + No documentation. + + + hh447670 + unsigned int PastFrames + unsigned int PastFrames + + + + No documentation. + + + hh447670 + unsigned int FutureFrames + unsigned int FutureFrames + + + + No documentation. + + + hh447670 + ID3D11VideoProcessorInputView** ppPastSurfaces + ID3D11VideoProcessorInputView ppPastSurfaces + + + + No documentation. + + + hh447670 + ID3D11VideoProcessorInputView* pInputSurface + ID3D11VideoProcessorInputView pInputSurface + + + + No documentation. + + + hh447670 + ID3D11VideoProcessorInputView** ppFutureSurfaces + ID3D11VideoProcessorInputView ppFutureSurfaces + + + + No documentation. + + + hh447670 + ID3D11VideoProcessorInputView** ppPastSurfacesRight + ID3D11VideoProcessorInputView ppPastSurfacesRight + + + + No documentation. + + + hh447670 + ID3D11VideoProcessorInputView* pInputSurfaceRight + ID3D11VideoProcessorInputView pInputSurfaceRight + + + + No documentation. + + + hh447670 + ID3D11VideoProcessorInputView** ppFutureSurfacesRight + ID3D11VideoProcessorInputView ppFutureSurfacesRight + + + +

    [Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]

    Provides information about the input streams passed into the ID3DVideoContext1::VideoProcessorGetBehaviorHints method.

    +
    + + dn894123 + D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT + D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT +
    + + + No documentation. + + + dn894123 + BOOL Enable + BOOL Enable + + + + No documentation. + + + dn894123 + unsigned int Width + unsigned int Width + + + + No documentation. + + + dn894123 + unsigned int Height + unsigned int Height + + + + No documentation. + + + dn894123 + DXGI_FORMAT Format + DXGI_FORMAT Format + + + +

    [Some information relates to pre-released product which may be substantially modified before it's commercially released. Microsoft makes no warranties, express or implied, with respect to the information provided here.]

    Describes a video sample.

    +
    + + dn894124 + D3D11_VIDEO_SAMPLE_DESC + D3D11_VIDEO_SAMPLE_DESC +
    + + +

    The width of the video sample.

    +
    + + dn894124 + unsigned int Width + unsigned int Width +
    + + +

    The height of the video sample.

    +
    + + dn894124 + unsigned int Height + unsigned int Height +
    + + +

    The format of the video sample.

    +
    + + dn894124 + DXGI_FORMAT Format + DXGI_FORMAT Format +
    + + +

    The colorspace of the sample.

    +
    + + dn894124 + DXGI_COLOR_SPACE_TYPE ColorSpace + DXGI_COLOR_SPACE_TYPE ColorSpace +
    + + + Internal class used to initialize this assembly. + + + + + Initializes this assembly. + + + This method is called when the assembly is loaded. + + + + + The namespace provides a managed Direct3D11 API. + + ff476080 + Direct3D11 + Direct3D11 + + + + Properties defining the way a buffer is bound to the pipeline as a target for stream output operations. + + + + + Gets or sets the buffer being bound. + + + + + Gets or sets the offset from the start of the buffer of the first vertex to use (in bytes). + + + + + Initializes a new instance of the struct. + + The buffer being bound. + The offset to the first vertex (in bytes). + + + + Properties defining the way a buffer (containing vertex data) is bound + to the pipeline for rendering. + + + + + Gets or sets the buffer being bound. + + + + + Gets or sets the stride between vertex elements in the buffer (in bytes). + + + + + Gets or sets the offset from the start of the buffer of the first vertex to use (in bytes). + + + + + Initializes a new instance of the struct. + + The buffer being bound. + The stride between vertex element (in bytes). + The offset to the first vertex (in bytes). + + + diff --git a/RenderHookAPI/bin/SharpDX.Direct3D9.dll b/RenderHookAPI/bin/SharpDX.Direct3D9.dll new file mode 100644 index 0000000000000000000000000000000000000000..4baa1e86fb9b03a876569b405cd7fbb560b5eb62 GIT binary patch literal 347136 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

    ufGv!;8jAh<&7$UmPE3e#co$K1F2H=+9 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%0AVy;vv)^j!N?a$SUlcVLr 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 literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/SharpDX.Direct3D9.xml b/RenderHookAPI/bin/SharpDX.Direct3D9.xml new file mode 100644 index 0000000..cc900c3 --- /dev/null +++ b/RenderHookAPI/bin/SharpDX.Direct3D9.xml @@ -0,0 +1,36489 @@ + + + + SharpDX.Direct3D9 + + + +

    + A collection of . + + + + +

    Contains information identifying the adapter.

    +
    + +

    The following pseudocode example illustrates the version format encoded in the DriverVersion, DriverVersionLowPart, and DriverVersionHighPart members.

     Product = HIWORD(DriverVersion.HighPart)	
    +            Version = LOWORD(DriverVersion.HighPart)	
    +            SubVersion = HIWORD(DriverVersion.LowPart)	
    +            Build = LOWORD(DriverVersion.LowPart)	
    +            

    See the Platform SDK for more information about the HIWORD macro, the LOWORD macro, and the structure.

    MAX_DEVICE_IDENTIFIER_STRING is a constant with the following definition.

    #define MAX_DEVICE_IDENTIFIER_STRING        512

    The VendorId, DeviceId, SubSysId, and Revision members can be used in tandem to identify particular chip sets. However, use these members with caution.

    +
    + + bb172505 + D3DADAPTER_IDENTIFIER9 + D3DADAPTER_IDENTIFIER9 +
    + + + Gets a value indicating whether the adapter is WHQL certified. + + + true if certified; otherwise, false. + + + + + Gets the driver version. + + + + + Gets the certification date. + + + + +

    Used for presentation to the user. This should not be used to identify particular drivers, because many different strings might be associated with the same device and driver from different vendors.

    +
    + + bb172505 + char Driver[512] + char Driver +
    + + +

    Used for presentation to the user.

    +
    + + bb172505 + char Description[512] + char Description +
    + + +

    Device name for GDI.

    +
    + + bb172505 + char DeviceName[32] + char DeviceName +
    + + +

    Identify the version of the Direct3D driver. It is legal to do less than and greater than comparisons on the 64-bit signed integer value. However, exercise caution if you use this element to identify problematic drivers. Instead, you should use DeviceIdentifier. See Remarks.

    +
    + + bb172505 + LARGE_INTEGER DriverVersion + LARGE_INTEGER DriverVersion +
    + + +

    Can be used to help identify a particular chip set. Query this member to identify the manufacturer. The value can be zero if unknown.

    +
    + + bb172505 + unsigned int VendorId + unsigned int VendorId +
    + + +

    Can be used to help identify a particular chip set. Query this member to identify the type of chip set. The value can be zero if unknown.

    +
    + + bb172505 + unsigned int DeviceId + unsigned int DeviceId +
    + + +

    Can be used to help identify a particular chip set. Query this member to identify the subsystem, typically the particular board. The value can be zero if unknown.

    +
    + + bb172505 + unsigned int SubSysId + unsigned int SubSysId +
    + + +

    Can be used to help identify a particular chip set. Query this member to identify the revision level of the chip set. The value can be zero if unknown.

    +
    + + bb172505 + unsigned int Revision + unsigned int Revision +
    + + +

    Can be queried to check changes in the driver and chip set. This is a unique identifier for the driver and chip set pair. Query this member to track changes to the driver and chip set in order to generate a new profile for the graphics subsystem. DeviceIdentifier can also be used to identify particular problematic drivers.

    +
    + + bb172505 + GUID DeviceIdentifier + GUID DeviceIdentifier +
    + + +

    Used to determine the Windows Hardware Quality Labs (WHQL) validation level for this driver and device pair. The DWORD is a packed date structure defining the date of the release of the most recent WHQL test passed by the driver. It is legal to perform < and > operations on this value. The following illustrates the date format.

    Bits
    31-16The year, a decimal number from 1999 upwards.
    15-8The month, a decimal number from 1 to 12.
    7-0The day, a decimal number from 1 to 31.

    ?

    The following values are also used.

    0Not certified.
    1WHQL validated, but no date information is available.

    ?

    Differences between Direct3D 9 and Direct3D 9Ex:

    For Direct3D9Ex running on Windows Vista, Windows Server 2008, Windows 7, and Windows Server 2008 R2 (or more current operating system), returns 1 for the WHQL level without checking the status of the driver.

    +
    + + bb172505 + unsigned int WHQLLevel + unsigned int WHQLLevel +
    + + + A collection of . + + + + + Adapter information. + + + + + Gets the capabilities of this adapter. + + The type. + The capabilities + + + + Gets the display modes supported by this adapter. + + The format. + The display modes supported by this adapter. + + + + Gets the adapter ordinal. + + + + + Gets the current display mode. + + + + + Gets the details. + + + + + Gets the monitor. + + + + + Adapter information. + + + + + Gets the capabilities of this adapter. + + The type. + The capabilities + + + + Gets the display modes supported by this adapter. + + The filter. + + The display modes supported by this adapter. + + + + + Gets the adapter ordinal. + + + + + Gets the current display mode. + + + + + Gets the details. + + + + + Gets the monitor. + + + + + The assembly provides managed Direct3D9 API. + + bb219837 + Direct3D9 + Direct3D9 + + + + No documentation. + + + bb280470 + ID3DXBaseEffect + ID3DXBaseEffect + + + + Gets the string. + + The parameter. + + HRESULT ID3DXBaseEffect::GetString([In] D3DXHANDLE hParameter,[Out] const void** ppString) + + + + Gets the value of the specified parameter. + + Handle of the parameter. + The value of the parameter. + HRESULT ID3DXBaseEffect::GetValue([In] D3DXHANDLE hParameter,[In] void* pData,[In] unsigned int Bytes) + + + + Gets the value of the specified parameter. + + + Handle of the parameter. + The count. + + The value of the parameter. + + HRESULT ID3DXBaseEffect::GetValue([In] D3DXHANDLE hParameter,[In] void* pData,[In] unsigned int Bytes) + + + + Sets a bool value. + + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetBool([In] D3DXHANDLE hConstant,[In] BOOL b) + + + + Sets a float value. + + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetFloat([In] D3DXHANDLE hConstant,[In] float f) + + + + Sets an int value. + + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetInt([In] D3DXHANDLE hConstant,[In] int n) + + + + Sets a matrix. + + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetMatrix([In] D3DXHANDLE hConstant,[In] const D3DXMATRIX* pMatrix) + + + + Sets a 4D vector. + + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetVector([In] D3DXHANDLE hConstant,[In] const D3DXVECTOR4* pVector) + + + + Sets a typed value. + + Type of the value to set + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetValue([In] D3DXHANDLE hConstant,[In] const void* pData,[In] unsigned int Bytes) + + + + Sets an array of bools. + + The effect handle. + The values. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetBoolArray([In] D3DXHANDLE hConstant,[In, Buffer] const BOOL* pb,[In] unsigned int Count) + + + + Sets an array of floats. + + The effect handle. + The values. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetFloatArray([In] D3DXHANDLE hConstant,[In, Buffer] const float* pf,[In] unsigned int Count) + + + + Sets an array of ints. + + The effect handle. + The values. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetIntArray([In] D3DXHANDLE hConstant,[In, Buffer] const int* pn,[In] unsigned int Count) + + + + Sets an array of matrices. + + The effect handle. + The values. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetMatrixArray([In] D3DXHANDLE hConstant,[In, Buffer] const D3DXMATRIX* pMatrix,[In] unsigned int Count) + + + + Sets an array of 4D vectors. + + The effect handle. + The values. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetVectorArray([In] D3DXHANDLE hConstant,[In, Buffer] const D3DXVECTOR4* pVector,[In] unsigned int Count) + + + + Sets an array of elements. + + Type of the array element + The effect handle. + The values. + + A object describing the result of the operation. + + HRESULT ID3DXBaseEffect::SetValue([In] D3DXHANDLE hConstant,[In] const void* pData,[In] unsigned int Bytes) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the effect description.

    +
    + + bb205681 + GetDesc + GetDesc + HRESULT ID3DXBaseEffect::GetDesc([Out] D3DXEFFECT_DESC* pDesc) +
    + + +

    Gets the effect description.

    +
    +

    Returns a description of the effect. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205681 + HRESULT ID3DXBaseEffect::GetDesc([Out] D3DXEFFECT_DESC* pDesc) + ID3DXBaseEffect::GetDesc +
    + + +

    Gets a parameter or annotation description.

    +
    +

    Parameter or annotation handle. See Handles (Direct3D 9).

    +

    Returns a description of the specified parameter or annotation. See .

    + + bb205698 + HRESULT ID3DXBaseEffect::GetParameterDesc([In] D3DXHANDLE hParameter,[Out] D3DXPARAMETER_DESC* pDesc) + ID3DXBaseEffect::GetParameterDesc +
    + + +

    Gets a technique description.

    +
    +

    Technique handle. See Handles (Direct3D 9).

    +

    Returns a description of the technique. See .

    + + bb205707 + HRESULT ID3DXBaseEffect::GetTechniqueDesc([In] D3DXHANDLE hTechnique,[Out] D3DXTECHNIQUE_DESC* pDesc) + ID3DXBaseEffect::GetTechniqueDesc +
    + + +

    Gets a pass description.

    +
    +

    Pass handle. See Handles (Direct3D 9).

    +

    Returns a description of the specified pass. See .

    + +

    Note??If an effect is created with , this method will return null references (in ) to the shader functions.

    +
    + + bb205702 + HRESULT ID3DXBaseEffect::GetPassDesc([In] D3DXHANDLE hPass,[Out] D3DXPASS_DESC* pDesc) + ID3DXBaseEffect::GetPassDesc +
    + + +

    Gets a function description.

    +
    +

    Function handle. See Handles (Direct3D 9).

    +

    Returns a description of the function. See .

    + + bb205686 + HRESULT ID3DXBaseEffect::GetFunctionDesc([In] D3DXHANDLE hShader,[Out] D3DXFUNCTION_DESC* pDesc) + ID3DXBaseEffect::GetFunctionDesc +
    + + +

    Gets the handle of a top-level parameter or a structure member parameter.

    +
    +

    Handle of the parameter, or null for top-level parameters. See Handles (Direct3D 9).

    +

    Parameter index.

    +

    Returns the handle of the specified parameter, or null if the index was invalid. See Handles (Direct3D 9).

    + + bb205695 + D3DXHANDLE ID3DXBaseEffect::GetParameter([In] D3DXHANDLE hParameter,[In] unsigned int Index) + ID3DXBaseEffect::GetParameter +
    + + +

    Gets the handle of a top-level parameter or a structure member parameter by looking up its name.

    +
    +

    Handle of the parameter, or null for top-level parameters. See Handles (Direct3D 9).

    +

    String containing the parameter name.

    +

    Returns the handle of the specified parameter, or null if the index was invalid. See Handles (Direct3D 9).

    + + bb205696 + D3DXHANDLE ID3DXBaseEffect::GetParameterByName([In] D3DXHANDLE hParameter,[In] const char* pName) + ID3DXBaseEffect::GetParameterByName +
    + + +

    Gets the handle of a top-level parameter or a structure member parameter by looking up its semantic with a case-insensitive search.

    +
    +

    Handle of the parameter, or null for top-level parameters. See Handles (Direct3D 9).

    +

    String containing the semantic name.

    +

    Returns the handle of the first parameter that matches the specified semantic, or null if the semantic was not found. See Handles (Direct3D 9).

    + + bb205697 + D3DXHANDLE ID3DXBaseEffect::GetParameterBySemantic([In] D3DXHANDLE hParameter,[In] const char* pSemantic) + ID3DXBaseEffect::GetParameterBySemantic +
    + + +

    Get the handle of an array element parameter.

    +
    +

    Handle of the array. See Handles (Direct3D 9).

    +

    Array element index.

    +

    Returns the handle of the specified parameter, or null if either hParameter or ElementIndex is invalid. See Handles (Direct3D 9).

    + +

    This method is used to get an element of a parameter that is an array.

    +
    + + bb205699 + D3DXHANDLE ID3DXBaseEffect::GetParameterElement([In] D3DXHANDLE hParameter,[In] unsigned int Index) + ID3DXBaseEffect::GetParameterElement +
    + + +

    Gets the handle of a technique.

    +
    +

    Technique index.

    +

    Returns the handle of the specified technique, or null if the index was invalid. See Handles (Direct3D 9).

    + + bb205705 + D3DXHANDLE ID3DXBaseEffect::GetTechnique([In] unsigned int Index) + ID3DXBaseEffect::GetTechnique +
    + + +

    Gets the handle of a technique by looking up its name.

    +
    +

    String containing the technique name.

    +

    Returns the handle of the first technique that has the specified name, or null if the name was not found. See Handles (Direct3D 9).

    + + bb205706 + D3DXHANDLE ID3DXBaseEffect::GetTechniqueByName([In] const char* pName) + ID3DXBaseEffect::GetTechniqueByName +
    + + +

    Gets the handle of a pass.

    +
    +

    Handle of the parent technique. See Handles (Direct3D 9).

    +

    Index for the pass.

    +

    Returns the handle of the specified pass inside the specified technique, or null if the index was invalid. See Handles (Direct3D 9).

    + + bb205700 + D3DXHANDLE ID3DXBaseEffect::GetPass([In] D3DXHANDLE hTechnique,[In] unsigned int Index) + ID3DXBaseEffect::GetPass +
    + + +

    Gets the handle of a pass by looking up its name.

    +
    +

    Handle of the parent technique. See Handles (Direct3D 9).

    +

    String containing the pass name.

    +

    Returns the handle of the first pass inside the specified technique that has the specified name, or null if the name was not found. See Handles (Direct3D 9).

    + + bb205701 + D3DXHANDLE ID3DXBaseEffect::GetPassByName([In] D3DXHANDLE hTechnique,[In] const char* pName) + ID3DXBaseEffect::GetPassByName +
    + + +

    Gets the handle of a function.

    +
    +

    Function index.

    +

    Returns the handle of the specified function, or null if the index was invalid. See Handles (Direct3D 9).

    + + bb205684 + D3DXHANDLE ID3DXBaseEffect::GetFunction([In] unsigned int Index) + ID3DXBaseEffect::GetFunction +
    + + +

    Gets the handle of a function by looking up its name.

    +
    +

    String containing the function name.

    +

    Returns the handle of the specified function, or null if the name was not found. See Handles (Direct3D 9).

    + + bb205685 + D3DXHANDLE ID3DXBaseEffect::GetFunctionByName([In] const char* pName) + ID3DXBaseEffect::GetFunctionByName +
    + + +

    Gets the handle of an annotation.

    +
    +

    Handle of a technique, pass, or top-level parameter. See Handles (Direct3D 9).

    +

    Annotation index.

    +

    Returns the handle of the specified annotation, or null if the index was invalid. See Handles (Direct3D 9).

    + +

    Annotations are user-specific data that can be attached to any technique, pass, or parameter. See Handles (Direct3D 9).

    +
    + + bb205677 + D3DXHANDLE ID3DXBaseEffect::GetAnnotation([In] D3DXHANDLE hObject,[In] unsigned int Index) + ID3DXBaseEffect::GetAnnotation +
    + + +

    Gets the handle of an annotation by looking up its name.

    +
    +

    Handle of a technique, pass, or top-level parameter. See Handles (Direct3D 9).

    +

    String containing the annotation name.

    +

    Returns the handle of the specified annotation, or null if the name was not found. See Handles (Direct3D 9).

    + + bb205678 + D3DXHANDLE ID3DXBaseEffect::GetAnnotationByName([In] D3DXHANDLE hObject,[In] const char* pName) + ID3DXBaseEffect::GetAnnotationByName +
    + + +

    Set the value of an arbitrary parameter or annotation, including simple types, structs, arrays, strings, shaders and textures.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Pointer to a buffer containing data.

    +

    [in] Number of bytes in the buffer. Pass in D3DX_DEFAULT if you know your buffer is large enough to contain the entire parameter, and you want to skip size validation.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method can be used in place of nearly all the effect set API calls.

    +
    + + bb205728 + HRESULT ID3DXBaseEffect::SetValue([In] D3DXHANDLE hParameter,[In] const void* pData,[In] unsigned int Bytes) + ID3DXBaseEffect::SetValue +
    + + +

    Get the value of an arbitrary parameter or annotation, including simple types, structs, arrays, strings, shaders and textures. This method can be used in place of nearly all the Getxxx calls in .

    +
    + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205709 + HRESULT ID3DXBaseEffect::GetValue([In] D3DXHANDLE hParameter,[In] void* pData,[In] unsigned int Bytes) + ID3DXBaseEffect::GetValue +
    + + +

    Sets a value.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Boolean value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205714 + HRESULT ID3DXBaseEffect::SetBool([In] D3DXHANDLE hParameter,[In] BOOL b) + ID3DXBaseEffect::SetBool +
    + + +

    Gets a value.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns a Boolean value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205679 + HRESULT ID3DXBaseEffect::GetBool([In] D3DXHANDLE hParameter,[Out] BOOL* pb) + ID3DXBaseEffect::GetBool +
    + + +

    Sets an array of Boolean values.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Array of Boolean values.

    +

    Number of Boolean values in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205715 + HRESULT ID3DXBaseEffect::SetBoolArray([In] D3DXHANDLE hParameter,[In, Buffer] const BOOL* pb,[In] unsigned int Count) + ID3DXBaseEffect::SetBoolArray +
    + + +

    Gets an array of values.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns an array of Boolean values.

    +

    Number of Boolean values in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205680 + HRESULT ID3DXBaseEffect::GetBoolArray([In] D3DXHANDLE hParameter,[Out, Buffer] BOOL* pb,[In] unsigned int Count) + ID3DXBaseEffect::GetBoolArray +
    + + +

    Sets an integer.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Integer value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205718 + HRESULT ID3DXBaseEffect::SetInt([In] D3DXHANDLE hParameter,[In] int n) + ID3DXBaseEffect::SetInt +
    + + +

    Gets an integer.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns an integer.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205687 + HRESULT ID3DXBaseEffect::GetInt([In] D3DXHANDLE hParameter,[Out] int* pn) + ID3DXBaseEffect::GetInt +
    + + +

    Sets an array of integers.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Array of integers.

    +

    Number of integers in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205719 + HRESULT ID3DXBaseEffect::SetIntArray([In] D3DXHANDLE hParameter,[In, Buffer] const int* pn,[In] unsigned int Count) + ID3DXBaseEffect::SetIntArray +
    + + +

    Gets an array of integers.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns an array of integers.

    +

    Number of integers in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205688 + HRESULT ID3DXBaseEffect::GetIntArray([In] D3DXHANDLE hParameter,[Out, Buffer] int* pn,[In] unsigned int Count) + ID3DXBaseEffect::GetIntArray +
    + + +

    Sets a floating point value.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Floating point value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205716 + HRESULT ID3DXBaseEffect::SetFloat([In] D3DXHANDLE hParameter,[In] float f) + ID3DXBaseEffect::SetFloat +
    + + +

    Gets a floating point value.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns a floating point value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205682 + HRESULT ID3DXBaseEffect::GetFloat([In] D3DXHANDLE hParameter,[Out] float* pf) + ID3DXBaseEffect::GetFloat +
    + + +

    Sets an array of floating point values.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Array of floating point values.

    +

    Number of floating point values in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205717 + HRESULT ID3DXBaseEffect::SetFloatArray([In] D3DXHANDLE hParameter,[In, Buffer] const float* pf,[In] unsigned int Count) + ID3DXBaseEffect::SetFloatArray +
    + + +

    Gets an array of floating point values.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns an array of floating point values.

    +

    Number of floating point values in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205683 + HRESULT ID3DXBaseEffect::GetFloatArray([In] D3DXHANDLE hParameter,[Out, Buffer] float* pf,[In] unsigned int Count) + ID3DXBaseEffect::GetFloatArray +
    + + +

    Sets a vector.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Pointer to a 4D vector.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    If the destination vector is smaller than the source vector, the additional components of the source vector will be ignored.

    +
    + + bb205729 + HRESULT ID3DXBaseEffect::SetVector([In] D3DXHANDLE hParameter,[In] const D3DXVECTOR4* pVector) + ID3DXBaseEffect::SetVector +
    + + +

    Gets a vector.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns a 4D vector.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    If the destination vector is larger than the source vector, only the initial components of the destination vector will be filled, and the remaining components will be set to zero.

    +
    + + bb205710 + HRESULT ID3DXBaseEffect::GetVector([In] D3DXHANDLE hParameter,[Out] D3DXVECTOR4* pVector) + ID3DXBaseEffect::GetVector +
    + + +

    Sets an array of vectors.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Array of 4D floating point vectors.

    +

    Number of vectors in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    If the destination vectors are smaller than the source vectors, the additional components of the source vectors will be ignored.

    +
    + + bb205730 + HRESULT ID3DXBaseEffect::SetVectorArray([In] D3DXHANDLE hParameter,[In, Buffer] const D3DXVECTOR4* pVector,[In] unsigned int Count) + ID3DXBaseEffect::SetVectorArray +
    + + +

    Gets an array of vectors.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns an array of 4D floating point vectors.

    +

    Number of vectors in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    If the destination vectors are larger than the source vectors, only the initial components of each destination vector will be filled, and the remaining destination vector components will be set to zero.

    +
    + + bb205711 + HRESULT ID3DXBaseEffect::GetVectorArray([In] D3DXHANDLE hParameter,[Out, Buffer] D3DXVECTOR4* pVector,[In] unsigned int Count) + ID3DXBaseEffect::GetVectorArray +
    + + +

    Sets a non-transposed matrix.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Pointer to a nontransposed matrix. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A non-transposed matrix contains row-major data. In other words, each vector is contained in a row.

    If the destination matrix is smaller than the source matrix, the additional components of the source matrix will be ignored.

    +
    + + bb205720 + HRESULT ID3DXBaseEffect::SetMatrix([In] D3DXHANDLE hParameter,[In] const D3DXMATRIX* pMatrix) + ID3DXBaseEffect::SetMatrix +
    + + +

    Gets a nontransposed matrix.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns a nontransposed matrix. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A nontransposed matrix contains row-major data; that is, each vector is contained in a row.

    If the destination matrix is larger than the source matrix, only the upper-left components of the destination matrix will be filled, and the remaining components will be set to zero.

    +
    + + bb205689 + HRESULT ID3DXBaseEffect::GetMatrix([In] D3DXHANDLE hParameter,[Out] D3DXMATRIX* pMatrix) + ID3DXBaseEffect::GetMatrix +
    + + +

    Sets an array of nontransposed matrices.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Array of nontransposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A nontransposed matrix contains row-major data; that is, each vector is contained in a row.

    If the destination matrices are smaller than the source matrices, the additional components of the source matrices will be ignored.

    +
    + + bb205721 + HRESULT ID3DXBaseEffect::SetMatrixArray([In] D3DXHANDLE hParameter,[In, Buffer] const D3DXMATRIX* pMatrix,[In] unsigned int Count) + ID3DXBaseEffect::SetMatrixArray +
    + + +

    Gets an array of nontransposed matrices.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns an array of nontransposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A nontransposed matrix contains row-major data; that is, each vector is contained in a row.

    If the destination matrices are larger than the source matrices, only the upper-left components of each destination matrix will be filled, and the remaining destination matrix components will be set to zero.

    +
    + + bb205690 + HRESULT ID3DXBaseEffect::GetMatrixArray([In] D3DXHANDLE hParameter,[Out, Buffer] D3DXMATRIX* pMatrix,[In] unsigned int Count) + ID3DXBaseEffect::GetMatrixArray +
    + + +

    Sets an array of references to nontransposed matrices.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Array of references to nontransposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A nontransposed matrix contains row-major data; that is, each vector is contained in a row.

    If the destination matrices are smaller than the source matrices, the additional components of the source matrices will be ignored.

    +
    + + bb205722 + HRESULT ID3DXBaseEffect::SetMatrixPointerArray([In] D3DXHANDLE hParameter,[In] const D3DXMATRIX** ppMatrix,[In] unsigned int Count) + ID3DXBaseEffect::SetMatrixPointerArray +
    + + +

    Gets an array of references to nontransposed matrices.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Array of references to nontransposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A nontransposed matrix contains row-major data; that is, each vector is contained in a row.

    If the destination matrices are larger than the source matrices, only the upper-left components of each destination matrix will be filled, and the remaining destination matrix components will be set to zero.

    +
    + + bb205691 + HRESULT ID3DXBaseEffect::GetMatrixPointerArray([In] D3DXHANDLE hParameter,[Out] D3DXMATRIX** ppMatrix,[In] unsigned int Count) + ID3DXBaseEffect::GetMatrixPointerArray +
    + + +

    Sets a transposed matrix.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Pointer to a transposed matrix. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A transposed matrix contains column-major data; that is, each vector is contained in a column.

    If the destination matrix is smaller than the source matrix, the additional components of the source matrix will be ignored.

    +
    + + bb205723 + HRESULT ID3DXBaseEffect::SetMatrixTranspose([In] D3DXHANDLE hParameter,[In] const D3DXMATRIX* pMatrix) + ID3DXBaseEffect::SetMatrixTranspose +
    + + +

    Gets a transposed matrix.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns a transposed matrix. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A transposed matrix contains column-major data; that is, each vector is contained in a column.

    If the destination matrix is larger than the source matrix, only the upper-left elements of the destination matrix will be filled, and the remaining destination matrix components will be set to zero.

    +
    + + bb205692 + HRESULT ID3DXBaseEffect::GetMatrixTranspose([In] D3DXHANDLE hParameter,[Out] D3DXMATRIX* pMatrix) + ID3DXBaseEffect::GetMatrixTranspose +
    + + +

    Sets an array of transposed matrices.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Array of transposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A transposed matrix contains column-major data; that is, each vector is contained in a column.

    If the destination matrices are smaller than the source matrices, the additional components of the source matrices will be ignored.

    +
    + + bb205724 + HRESULT ID3DXBaseEffect::SetMatrixTransposeArray([In] D3DXHANDLE hParameter,[In, Buffer] const D3DXMATRIX* pMatrix,[In] unsigned int Count) + ID3DXBaseEffect::SetMatrixTransposeArray +
    + + +

    Gets an array of transposed matrices.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns an array of transposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A transposed matrix contains column-major data; that is, each vector is contained in a column.

    If the destination matrices are larger than the source matrices, only the upper-left components of each destination matrix will be filled, and the remaining destination matrix components will be set to zero.

    +
    + + bb205693 + HRESULT ID3DXBaseEffect::GetMatrixTransposeArray([In] D3DXHANDLE hParameter,[Out, Buffer] D3DXMATRIX* pMatrix,[In] unsigned int Count) + ID3DXBaseEffect::GetMatrixTransposeArray +
    + + +

    Sets an array of references to transposed matrices.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Array of references to transposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A transposed matrix contains column-major data; that is, each vector is contained in a column.

    If the destination matrices are smaller than the source matrices, the additional components of the source matrices will be ignored.

    +
    + + bb205725 + HRESULT ID3DXBaseEffect::SetMatrixTransposePointerArray([In] D3DXHANDLE hParameter,[In] const D3DXMATRIX** ppMatrix,[In] unsigned int Count) + ID3DXBaseEffect::SetMatrixTransposePointerArray +
    + + +

    Gets an array of references to transposed matrices.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Array of references to transposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A transposed matrix contains column-major data; that is, each vector is contained in a column.

    If the destination matrices are larger than the source matrices, only the upper-left components of each destination matrix will be filled, and the remaining destination matrix components will be set to zero.

    +
    + + bb205694 + HRESULT ID3DXBaseEffect::GetMatrixTransposePointerArray([In] D3DXHANDLE hParameter,[Out] D3DXMATRIX** ppMatrix,[In] unsigned int Count) + ID3DXBaseEffect::GetMatrixTransposePointerArray +
    + + +

    Sets a string.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    String to set.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205726 + HRESULT ID3DXBaseEffect::SetString([In] D3DXHANDLE hParameter,[In] const char* pString) + ID3DXBaseEffect::SetString +
    + + +

    Gets a string.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns a string identified by hParameter.

    + + bb205704 + HRESULT ID3DXBaseEffect::GetString([In] D3DXHANDLE hParameter,[Out] const void** ppString) + ID3DXBaseEffect::GetString +
    + + +

    Sets a texture.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Texture object. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205727 + HRESULT ID3DXBaseEffect::SetTexture([In] D3DXHANDLE hParameter,[In] IDirect3DBaseTexture9* pTexture) + ID3DXBaseEffect::SetTexture +
    + + +

    Gets a texture.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns a texture object. See .

    + + bb205708 + HRESULT ID3DXBaseEffect::GetTexture([In] D3DXHANDLE hParameter,[Out] IDirect3DBaseTexture9** ppTexture) + ID3DXBaseEffect::GetTexture +
    + + +

    Gets a pixel shader.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns a pixel shader object. See object.

    + + bb205703 + HRESULT ID3DXBaseEffect::GetPixelShader([In] D3DXHANDLE hParameter,[Out] IDirect3DPixelShader9** ppPShader) + ID3DXBaseEffect::GetPixelShader +
    + + +

    Gets a vertex shader.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Returns a vertex shader object. See .

    + + bb205712 + HRESULT ID3DXBaseEffect::GetVertexShader([In] D3DXHANDLE hParameter,[Out] IDirect3DVertexShader9** ppVShader) + ID3DXBaseEffect::GetVertexShader +
    + + +

    Set the range of an array to pass to the device.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    Start index.

    +

    Stop index.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205713 + HRESULT ID3DXBaseEffect::SetArrayRange([In] D3DXHANDLE hParameter,[In] unsigned int uStart,[In] unsigned int uEnd) + ID3DXBaseEffect::SetArrayRange +
    + + +

    Applications use the methods of the interface to manipulate texture resources including cube and volume textures.

    +
    + +

    The interface assigned to a particular stage for a device is obtained by calling the GetTexture method.

    The LPDIRECT3DBASETEXTURE9 and PDIRECT3DBASETEXTURE9 types are defined as references to the interface.

    typedef struct  *LPDIRECT3DBASETEXTURE9, *PDIRECT3DBASETEXTURE9;
    +
    + + bb174322 + IDirect3DBaseTexture9 + IDirect3DBaseTexture9 +
    + + + Filters mipmap levels of a texture. + + The source level. + The filter. + + A object describing the result of the operation. + + HRESULT D3DXFilterTexture([In] IDirect3DBaseTexture9* pBaseTexture,[In, Buffer] const PALETTEENTRY* pPalette,[In] unsigned int SrcLevel,[In] D3DX_FILTER Filter) + + + + Filters mipmap levels of a texture. + + The source level. + The filter. + The palette. + + A object describing the result of the operation. + + HRESULT D3DXFilterTexture([In] IDirect3DBaseTexture9* pBaseTexture,[In, Buffer] const PALETTEENTRY* pPalette,[In] unsigned int SrcLevel,[In] D3DX_FILTER Filter) + + + + Saves a texture to a file. + + The texture. + Name of the file. + The format. + + A object describing the result of the operation. + + HRESULT D3DXSaveTextureToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DBaseTexture9* pSrcTexture,[In, Buffer] const PALETTEENTRY* pSrcPalette) + + + + Saves a texture to a file. + + The texture. + Name of the file. + The format. + The palette. + A object describing the result of the operation. + HRESULT D3DXSaveTextureToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DBaseTexture9* pSrcTexture,[In, Buffer] const PALETTEENTRY* pSrcPalette) + + + + Saves a texture to a stream. + + The texture. + The format. + A containing the saved texture. + HRESULT D3DXSaveTextureToFileInMemory([Out] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DBaseTexture9* pSrcTexture,[In, Buffer] const PALETTEENTRY* pSrcPalette) + + + + Saves a texture to a stream. + + The texture. + The format. + The palette. + A containing the saved texture. + HRESULT D3DXSaveTextureToFileInMemory([Out] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DBaseTexture9* pSrcTexture,[In, Buffer] const PALETTEENTRY* pSrcPalette) + + + + Gets or sets the level of details. + + + The level of details. + + unsigned int IDirect3DBaseTexture9::GetLOD() + unsigned int IDirect3DBaseTexture9::SetLOD([In] unsigned int LODNew) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the number of texture levels in a multilevel texture.

    +
    + +

    Warning??If you create a texture with to make that texture automatically generate sublevels, GetLevelCount always returns 1 for the number of levels.

    This method applies to the following interfaces, which inherit from .

    +
    + + bb174325 + GetLevelCount + GetLevelCount + unsigned int IDirect3DBaseTexture9::GetLevelCount() +
    + + +

    Get or sets the filter type that is used for automatically generated mipmap sublevels.

    +
    + +

    Changing the filter type "dirties" the mipmap sublevels and causes them to be regenerated.

    The (default) filter type set at texture creation time is . If the driver doesn't support a linear filter, the filter type will be set to . All filter types supported by the driver for regular texture filtering are supported for autogeneration except . For each resource type, drivers should support all the filter types reported in the corresponding texture, CubeTexture, and volumetexture filter caps. For more information about texture types, see .

    This method has no effect if the texture is not created with .

    +
    + + bb174324 + GetAutoGenFilterType / SetAutoGenFilterType + GetAutoGenFilterType + D3DTEXTUREFILTERTYPE IDirect3DBaseTexture9::GetAutoGenFilterType() +
    + + +

    Sets the most detailed level-of-detail for a managed texture.

    +
    +

    Most detailed level-of-detail value to set for the mipmap chain.

    +

    A DWORD value, clamped to the maximum level-of-detail value (one less than the total number of levels). Subsequent calls to this method will return the clamped value, not the level-of-detail value that was previously set.

    + +

    This method applies to the following interfaces, which inherit from .

    SetLOD is used for level-of-detail control of managed textures. This method returns 0 on nonmanaged textures.

    SetLOD communicates to the Direct3D texture manager the most detailed mipmap in the chain that should be loaded into local video memory. For example, in a five-level mipmap chain, setting LODNew to 2 indicates that the texture manager should load only mipmap levels 2 through 4 into local video memory at any given time.

    More specifically, if the texture was created with the dimensions of 256x256, setting the most detailed level to 0 indicates that 256 x 256 is the largest mipmap available, setting the most detailed level to 1 indicates that 128 x 128 is the largest mipmap available, and so on, up to the most detailed mip level (the smallest texture size) for the chain.

    +
    + + bb174328 + unsigned int IDirect3DBaseTexture9::SetLOD([In] unsigned int LODNew) + IDirect3DBaseTexture9::SetLOD +
    + + +

    Returns a value clamped to the maximum level-of-detail set for a managed texture (this method is not supported for an unmanaged texture).

    +
    +

    A DWORD value, clamped to the maximum level-of-detail value (one less than the total number of levels). Calling GetLOD on an unmanaged texture is not supported and will result in a D3DERR error code being returned.

    + + bb174326 + unsigned int IDirect3DBaseTexture9::GetLOD() + IDirect3DBaseTexture9::GetLOD +
    + + +

    Returns the number of texture levels in a multilevel texture.

    +
    +

    A DWORD value that indicates the number of texture levels in a multilevel texture.

    + +

    Warning??If you create a texture with to make that texture automatically generate sublevels, GetLevelCount always returns 1 for the number of levels.

    This method applies to the following interfaces, which inherit from .

    +
    + + bb174325 + unsigned int IDirect3DBaseTexture9::GetLevelCount() + IDirect3DBaseTexture9::GetLevelCount +
    + + +

    Set the filter type that is used for automatically generated mipmap sublevels.

    +
    +

    Filter type. See . This method will fail if the filter type is invalid or not supported.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Changing the filter type "dirties" the mipmap sublevels and causes them to be regenerated.

    The (default) filter type set at texture creation time is . If the driver does not support a linear filter, the filter type will be set to . All filter types supported by the driver for regular texture filtering are supported for autogeneration except . SetAutoGenFilterType will fail unless the driver sets the appropriate D3DPTFILTERCAPS_MINFxxx caps. These values are specified in the TextureFilterCaps and/or CubeTextureFilterCaps members of . For more information about texture filter types, see .

    This method has no effect if the texture is not created with . In this case, no failure is returned. For more information about usage constants, see .

    +
    + + bb174327 + HRESULT IDirect3DBaseTexture9::SetAutoGenFilterType([In] D3DTEXTUREFILTERTYPE FilterType) + IDirect3DBaseTexture9::SetAutoGenFilterType +
    + + +

    Get the filter type that is used for automatically generated mipmap sublevels.

    +
    +

    Filter type. See . A texture must be created with to use this method. Any other usage value will cause this method to return .

    + +

    Changing the filter type "dirties" the mipmap sublevels and causes them to be regenerated.

    The (default) filter type set at texture creation time is . If the driver doesn't support a linear filter, the filter type will be set to . All filter types supported by the driver for regular texture filtering are supported for autogeneration except . For each resource type, drivers should support all the filter types reported in the corresponding texture, CubeTexture, and volumetexture filter caps. For more information about texture types, see .

    This method has no effect if the texture is not created with .

    +
    + + bb174324 + D3DTEXTUREFILTERTYPE IDirect3DBaseTexture9::GetAutoGenFilterType() + IDirect3DBaseTexture9::GetAutoGenFilterType +
    + + +

    Generate mipmap sublevels.

    +
    + +

    An application can generate mipmap sublevels at any time by calling GenerateMipSubLevels. To have mipmap sublevels generated automatically at texture creation time (see Automatic Generation of Mipmaps (Direct3D 9)), specify during CreateTexture, CreateCubeTexture, and CreateVolumeTexture. For more information about usage constants, see .

    +
    + + bb174323 + void IDirect3DBaseTexture9::GenerateMipSubLevels() + IDirect3DBaseTexture9::GenerateMipSubLevels +
    + + + No documentation. + + + bb280322 + D3DXBONECOMBINATION + D3DXBONECOMBINATION + + + + Get the bone identifiers. + + + + + No documentation. + + + bb280322 + unsigned int AttribId + unsigned int AttribId + + + + No documentation. + + + bb280322 + unsigned int FaceStart + unsigned int FaceStart + + + + No documentation. + + + bb280322 + unsigned int FaceCount + unsigned int FaceCount + + + + No documentation. + + + bb280322 + unsigned int VertexStart + unsigned int VertexStart + + + + No documentation. + + + bb280322 + unsigned int VertexCount + unsigned int VertexCount + + + + No documentation. + + + bb280322 + unsigned int* BoneId + unsigned int BoneId + + + +

    Represents the capabilities of the hardware exposed through the Direct3D object.

    +
    + +

    The MaxTextureBlendStages and MaxSimultaneousTextures members might seem similar, but they contain different information. The MaxTextureBlendStages member contains the total number of texture-blending stages supported by the current device, and the MaxSimultaneousTextures member describes how many of those stages can have textures bound to them by using the SetTexture method.

    When the driver fills this structure, it can set values for execute-buffer capabilities, even when the interface being used to retrieve the capabilities (such as ) does not support execute buffers.

    In general, performance problems may occur if you use a texture and then modify it during a scene. Ensure that no texture used in the current BeginScene and EndScene block is evicted unless absolutely necessary. In the case of extremely high texture usage within a scene, the results are undefined. This occurs when you modify a texture that you have used in the scene and there is no spare texture memory available. For such systems, the contents of the z-buffer become invalid at EndScene. Applications should not call UpdateSurface to or from the back buffer on this type of hardware inside a BeginScene/EndScene pair. In addition, applications should not try to access the z-buffer if the capability flag is set. Finally, applications should not lock the back buffer or the z-buffer inside a BeginScene/EndScene pair.

    The following flags concerning mipmapped textures are not supported in Direct3D 9.

    • D3DPTFILTERCAPS_LINEAR
    • D3DPTFILTERCAPS_LINEARMIPLINEAR
    • D3DPTFILTERCAPS_LINEARMIPNEAREST
    • D3DPTFILTERCAPS_MIPNEAREST
    • D3DPTFILTERCAPS_NEAREST
    +
    + + bb172513 + D3DCAPS9 + D3DCAPS9 +
    + + + Gets the pixel shader version. + + + + + Gets the vertex shader version. + + + + +

    Member of the enumerated type, which identifies what type of resources are used for processing vertices.

    +
    + + bb172513 + D3DDEVTYPE DeviceType + D3DDEVTYPE DeviceType +
    + + +

    Adapter on which this Direct3D device was created. This ordinal is valid only to pass to methods of the interface that created this Direct3D device. The interface can always be retrieved by calling GetDirect3D.

    +
    + + bb172513 + unsigned int AdapterOrdinal + unsigned int AdapterOrdinal +
    + + +

    The following driver-specific capability.

    ValueMeaning

    Display hardware is capable of returning the current scan line.

    The display driver supports an overlay DDI that allows for verification of overlay capabilities. For more information about the overlay DDI, see Overlay DDI.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    ?

    +
    + + bb172513 + D3DCAPS Caps + D3DCAPS Caps +
    + + +

    Driver-specific capabilities identified in .

    +
    + + bb172513 + D3DCAPS2 Caps2 + D3DCAPS2 Caps2 +
    + + +

    Driver-specific capabilities identified in .

    +
    + + bb172513 + D3DCAPS3 Caps3 + D3DCAPS3 Caps3 +
    + + +

    Bit mask of values representing what presentation swap intervals are available.

    ValueMeaning

    The driver supports an immediate presentation swap interval.

    The driver supports a presentation swap interval of every screen refresh.

    The driver supports a presentation swap interval of every second screen refresh.

    The driver supports a presentation swap interval of every third screen refresh.

    The driver supports a presentation swap interval of every fourth screen refresh.

    ?

    +
    + + bb172513 + D3DPRESENT_INTERVAL PresentationIntervals + D3DPRESENT_INTERVAL PresentationIntervals +
    + + +

    Bit mask indicating what hardware support is available for cursors. Direct3D 9 does not define alpha-blending cursor capabilities.

    ValueMeaning

    A full-color cursor is supported in hardware. Specifically, this flag indicates that the driver supports at least a hardware color cursor in high-resolution modes (with scan lines greater than or equal to 400).

    A full-color cursor is supported in hardware. Specifically, this flag indicates that the driver supports a hardware color cursor in both high-resolution and low-resolution modes (with scan lines less than 400).

    ?

    +
    + + bb172513 + D3DCURSORCAPS CursorCaps + D3DCURSORCAPS CursorCaps +
    + + +

    Flags identifying the capabilities of the device.

    ValueMeaning

    Device supports blits from system-memory textures to nonlocal video-memory textures.

    Device can queue rendering commands after a page flip. Applications do not change their behavior if this flag is set; this capability means that the device is relatively fast.

    Device can support at least a DirectX 5-compliant driver.

    Device can support at least a DirectX 7-compliant driver.

    Device exports an -aware hal.

    Device can use execute buffers from system memory.

    Device can use execute buffers from video memory.

    Device has hardware acceleration for scene rasterization.

    Device can support transformation and lighting in hardware.

    Device supports N patches.

    Device can support rasterization, transform, lighting, and shading in hardware.

    Device supports quintic B?zier curves and B-splines.

    Device supports rectangular and triangular patches.

    When this device capability is set, the hardware architecture does not require caching of any information, and uncached patches (handle zero) will be drawn as efficiently as cached ones. Note that setting does not mean that a patch with handle zero can be drawn. A handle-zero patch can always be drawn whether this cap is set or not.

    Device is texturing from separate memory pools.

    Device can retrieve textures from non-local video memory.

    Device can retrieve textures from system memory.

    Device can retrieve textures from device memory.

    Device can use buffers from system memory for transformed and lit vertices.

    Device can use buffers from video memory for transformed and lit vertices.

    ?

    +
    + + bb172513 + D3DDEVCAPS DevCaps + D3DDEVCAPS DevCaps +
    + + +

    Miscellaneous driver primitive capabilities. See .

    +
    + + bb172513 + D3DPMISCCAPS PrimitiveMiscCaps + D3DPMISCCAPS PrimitiveMiscCaps +
    + + +

    Information on raster-drawing capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Device supports anisotropic filtering.

    Device iterates colors perspective correctly.

    Device can dither to improve color resolution.

    Device supports legacy depth bias. For true depth bias, see .

    Device supports range-based fog. In range-based fog, the distance of an object from the viewer is used to compute fog effects, not the depth of the object (that is, the z-coordinate) in the scene.

    Device calculates the fog value by referring to a lookup table containing fog values that are indexed to the depth of a given pixel.

    Device calculates the fog value during the lighting operation and interpolates the fog value during rasterization.

    Device supports level-of-detail bias adjustments. These bias adjustments enable an application to make a mipmap appear crisper or less sharp than it normally would. For more information about level-of-detail bias in mipmaps, see .

    Device supports toggling multisampling on and off between and (using ).

    Device supports scissor test. See Scissor Test (Direct3D 9).

    Device performs true slope-scale based depth bias. This is in contrast to the legacy style depth bias.

    Device supports depth buffering using w.

    Device supports w-based fog. W-based fog is used when a perspective projection matrix is specified, but affine projections still use z-based fog. The system considers a projection matrix that contains a nonzero value in the [3][4] element to be a perspective projection matrix.

    Device can perform hidden-surface removal (HSR) without requiring the application to sort polygons and without requiring the allocation of a depth-buffer. This leaves more video memory for textures. The method used to perform HSR is hardware-dependent and is transparent to the application.

    Z-bufferless HSR is performed if no depth-buffer surface is associated with the rendering-target surface and the depth-buffer comparison test is enabled (that is, when the state value associated with the enumeration constant is set to TRUE).

    Device supports z-based fog.

    Device can perform z-test operations. This effectively renders a primitive and indicates whether any z pixels have been rendered.

    ?

    +
    + + bb172513 + D3DPRASTERCAPS RasterCaps + D3DPRASTERCAPS RasterCaps +
    + + +

    Z-buffer comparison capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Always pass the z-test.

    Pass the z-test if the new z equals the current z.

    Pass the z-test if the new z is greater than the current z.

    Pass the z-test if the new z is greater than or equal to the current z.

    Pass the z-test if the new z is less than the current z.

    Pass the z-test if the new z is less than or equal to the current z.

    Always fail the z-test.

    Pass the z-test if the new z does not equal the current z.

    ?

    +
    + + bb172513 + D3DPCMPCAPS ZCmpCaps + D3DPCMPCAPS ZCmpCaps +
    + + +

    Source-blending capabilities. This member can be one or more of the following flags. (The RGBA values of the source and destination are indicated by the subscripts s and d.)

    ValueMeaning

    The driver supports both and . See .

    Source blend factor is (1 - As, 1 - As, 1 - As, 1 - As) and destination blend factor is (As, As, As, As); the destination blend selection is overridden.

    The driver supports the blend mode. (This blend mode is obsolete. For more information, see .)

    Blend factor is (Ad, Ad, Ad, Ad).

    Blend factor is (Rd, Gd, Bd, Ad).

    Blend factor is (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad).

    Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).

    Blend factor is (1 - As, 1 - As, 1 - As, 1 - As).

    Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).

    Blend factor is (1 - PSOutColor[1]r, 1 - PSOutColor[1]g, 1 - PSOutColor[1]b, not used)). See Render Target Blending.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    Blend factor is (1, 1, 1, 1).

    Blend factor is (As, As, As, As).

    Blend factor is (f, f, f, 1); f = min(As, 1 - Ad).

    Blend factor is (Rs, Gs, Bs, As).

    Blend factor is (PSOutColor[1]r, PSOutColor[1]g, PSOutColor[1]b, not used). See Render Target Blending.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    Blend factor is (0, 0, 0, 0).

    ?

    +
    + + bb172513 + D3DPBLENDCAPS SrcBlendCaps + D3DPBLENDCAPS SrcBlendCaps +
    + + +

    Destination-blending capabilities. This member can be the same capabilities that are defined for the SrcBlendCaps member.

    +
    + + bb172513 + D3DPBLENDCAPS DestBlendCaps + D3DPBLENDCAPS DestBlendCaps +
    + + +

    Alpha-test comparison capabilities. This member can include the same capability flags defined for the ZCmpCaps member. If this member contains only the capability or only the capability, the driver does not support alpha tests. Otherwise, the flags identify the individual comparisons that are supported for alpha testing.

    +
    + + bb172513 + D3DPCMPCAPS AlphaCmpCaps + D3DPCMPCAPS AlphaCmpCaps +
    + + +

    Shading operations capabilities. It is assumed, in general, that if a device supports a given command at all, it supports the mode (as specified in the enumerated type). This flag specifies whether the driver can also support Gouraud shading and whether alpha color components are supported. When alpha components are not supported, the alpha value of colors generated is implicitly 255. This is the maximum possible alpha (that is, the alpha component is at full intensity).

    The color, specular highlights, fog, and alpha interpolants of a triangle each have capability flags that an application can use to find out how they are implemented by the device driver.

    This member can be one or more of the following flags.

    ValueMeaning

    Device can support an alpha component for Gouraud-blended transparency (the state for the enumerated type). In this mode, the alpha color component of a primitive is provided at vertices and interpolated across a face along with the other color components.

    Device can support colored Gouraud shading. In this mode, the per-vertex color components (red, green, and blue) are interpolated across a triangle face.

    Device can support fog in the Gouraud shading mode.

    Device supports Gouraud shading of specular highlights.

    ?

    +
    + + bb172513 + D3DPSHADECAPS ShadeCaps + D3DPSHADECAPS ShadeCaps +
    + + +

    Miscellaneous texture-mapping capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Alpha in texture pixels is supported.

    Device can draw alpha from texture palettes.

    Supports cube textures.

    Device requires that cube texture maps have dimensions specified as powers of two.

    Device supports mipmapped cube textures.

    Device supports mipmapped textures.

    Device supports mipmapped volume textures.

    is also set, conditionally supports the use of 2D textures with dimensions that are not powers of two. A device that exposes this capability can use such a texture if all of the following requirements are met.

    • The texture addressing mode for the texture stage is set to .
    • Texture wrapping for the texture stage is disabled (D3DRS_WRAP n set to 0).
    • Mipmapping is not in use (use magnification filter only).
    • Texture formats must not be through .

    If this flag is not set, and is also not set, then unconditional support is provided for 2D textures with dimensions that are not powers of two.

    A texture that is not a power of two cannot be set at a stage that will be read based on a shader computation (such as the bem - ps and texm3x3 - ps instructions in pixel shaders versions 1_0 to 1_3). For example, these textures can be used to store bumps that will be fed into texture reads, but not the environment maps that are used in texbem - ps, texbeml - ps, and texm3x3spec - ps. This means that a texture with dimensions that are not powers of two cannot be addressed or sampled using texture coordinates computed within the shader. This type of operation is known as a dependent read and cannot be performed on these types of textures.

    Device does not support a projected bump-environment loopkup operation in programmable and fixed function shaders.

    Perspective correction texturing is supported.

    If is not set, all textures must have widths and heights specified as powers of two. This requirement does not apply to either cube textures or volume textures.

    If is also set, conditionally supports the use of 2D textures with dimensions that are not powers of two. See description.

    If this flag is not set, and is also not set, then unconditional support is provided for 2D textures with dimensions that are not powers of two.

    Supports the texture transformation flag. When applied, the device divides transformed texture coordinates by the last texture coordinate. If this capability is present, then the projective divide occurs per pixel. If this capability is not present, but the projective divide needs to occur anyway, then it is performed on a per-vertex basis by the Direct3D runtime.

    All textures must be square.

    Texture indices are not scaled by the texture size prior to interpolation.

    Device supports volume textures.

    Device requires that volume texture maps have dimensions specified as powers of two.

    ?

    +
    + + bb172513 + D3DPTEXTURECAPS TextureCaps + D3DPTEXTURECAPS TextureCaps +
    + + +

    Texture-filtering capabilities for a texture. Per-stage filtering capabilities reflect which filtering modes are supported for texture stages when performing multiple-texture blending. This member can be any combination of the per-stage texture-filtering flags defined in .

    +
    + + bb172513 + D3DPTFILTERCAPS TextureFilterCaps + D3DPTFILTERCAPS TextureFilterCaps +
    + + +

    Texture-filtering capabilities for a cube texture. Per-stage filtering capabilities reflect which filtering modes are supported for texture stages when performing multiple-texture blending. This member can be any combination of the per-stage texture-filtering flags defined in .

    +
    + + bb172513 + D3DPTFILTERCAPS CubeTextureFilterCaps + D3DPTFILTERCAPS CubeTextureFilterCaps +
    + + +

    Texture-filtering capabilities for a volume texture. Per-stage filtering capabilities reflect which filtering modes are supported for texture stages when performing multiple-texture blending. This member can be any combination of the per-stage texture-filtering flags defined in .

    +
    + + bb172513 + D3DPTFILTERCAPS VolumeTextureFilterCaps + D3DPTFILTERCAPS VolumeTextureFilterCaps +
    + + +

    Texture-addressing capabilities for texture objects. This member can be one or more of the following flags.

    ValueMeaning

    Device supports setting coordinates outside the range [0.0, 1.0] to the border color, as specified by the texture-stage state.

    Device can clamp textures to addresses.

    Device can separate the texture-addressing modes of the u and v coordinates of the texture. This ability corresponds to the and render-state values.

    Device can mirror textures to addresses.

    Device can take the absolute value of the texture coordinate (thus, mirroring around 0) and then clamp to the maximum value.

    Device can wrap textures to addresses.

    ?

    +
    + + bb172513 + D3DPTADDRESSCAPS TextureAddressCaps + D3DPTADDRESSCAPS TextureAddressCaps +
    + + +

    Texture-addressing capabilities for a volume texture. This member can be one or more of the flags defined for the TextureAddressCaps member.

    +
    + + bb172513 + D3DPTADDRESSCAPS VolumeTextureAddressCaps + D3DPTADDRESSCAPS VolumeTextureAddressCaps +
    + + +

    Defines the capabilities for line-drawing primitives.

    ValueMeaning

    Supports alpha-test comparisons.

    Antialiased lines are supported.

    Supports source-blending.

    Supports fog.

    Supports texture-mapping.

    Supports z-buffer comparisons.

    ?

    +
    + + bb172513 + D3DLINECAPS LineCaps + D3DLINECAPS LineCaps +
    + + +

    Maximum texture width for this device.

    +
    + + bb172513 + unsigned int MaxTextureWidth + unsigned int MaxTextureWidth +
    + + +

    Maximum texture height for this device.

    +
    + + bb172513 + unsigned int MaxTextureHeight + unsigned int MaxTextureHeight +
    + + +

    Maximum value for any of the three dimensions (width, height, and depth) of a volume texture.

    +
    + + bb172513 + unsigned int MaxVolumeExtent + unsigned int MaxVolumeExtent +
    + + +

    This number represents the maximum range of the integer bits of the post-normalized texture coordinates. A texture coordinate is stored as a 32-bit signed integer using 27 bits to store the integer part and 5 bits for the floating point fraction. The maximum integer index, 227, is used to determine the maximum texture coordinate, depending on how the hardware does texture-coordinate scaling.

    Some hardware reports the cap . For this case, the device defers scaling texture coordinates by the texture size until after interpolation and application of the texture address mode, so the number of times a texture can be wrapped is given by the integer value in MaxTextureRepeat.

    Less desirably, on some hardware is not set and the device scales the texture coordinates by the texture size (using the highest level of detail) prior to interpolation. This limits the number of times a texture can be wrapped to MaxTextureRepeat / texture size.

    For example, assume that MaxTextureRepeat is equal to 32k and the size of the texture is 4k. If the hardware sets , then the number of times a texture can be wrapped is equal to MaxTextureRepeat, which is 32k in this example. Otherwise, the number of times a texture can be wrapped is equal to MaxTextureRepeat divided by texture size, which is 32k/4k in this example.

    +
    + + bb172513 + unsigned int MaxTextureRepeat + unsigned int MaxTextureRepeat +
    + + +

    Maximum texture aspect ratio supported by the hardware, typically a power of 2.

    +
    + + bb172513 + unsigned int MaxTextureAspectRatio + unsigned int MaxTextureAspectRatio +
    + + +

    Maximum valid value for the texture-stage state.

    +
    + + bb172513 + unsigned int MaxAnisotropy + unsigned int MaxAnisotropy +
    + + +

    Maximum W-based depth value that the device supports.

    +
    + + bb172513 + float MaxVertexW + float MaxVertexW +
    + + +

    Screen-space coordinate of the guard-band clipping region. Coordinates inside this rectangle but outside the viewport rectangle are automatically clipped.

    +
    + + bb172513 + float GuardBandLeft + float GuardBandLeft +
    + + +

    Screen-space coordinate of the guard-band clipping region. Coordinates inside this rectangle but outside the viewport rectangle are automatically clipped.

    +
    + + bb172513 + float GuardBandTop + float GuardBandTop +
    + + +

    Screen-space coordinate of the guard-band clipping region. Coordinates inside this rectangle but outside the viewport rectangle are automatically clipped.

    +
    + + bb172513 + float GuardBandRight + float GuardBandRight +
    + + +

    Screen-space coordinate of the guard-band clipping region. Coordinates inside this rectangle but outside the viewport rectangle are automatically clipped.

    +
    + + bb172513 + float GuardBandBottom + float GuardBandBottom +
    + + +

    Number of pixels to adjust the extents rectangle outward to accommodate antialiasing kernels.

    +
    + + bb172513 + float ExtentsAdjust + float ExtentsAdjust +
    + + +

    Flags specifying supported stencil-buffer operations. Stencil operations are assumed to be valid for all three stencil-buffer operation render states (, , and ).

    For more information, see .

    +
    + + bb172513 + D3DSTENCILCAPS StencilCaps + D3DSTENCILCAPS StencilCaps +
    + + +

    Flexible vertex format capabilities.

    ValueMeaning

    It is preferable that vertex elements not be stripped. That is, if the vertex format contains elements that are not used with the current render states, there is no need to regenerate the vertices. If this capability flag is not present, stripping extraneous elements from the vertex format provides better performance.

    Point size is determined by either the render state or the vertex data. If an FVF is used, point size can come from point size data in the vertex declaration. Otherwise, point size is determined by the render state . If the application provides point size in both (the render state and the vertex declaration), the vertex data overrides the render-state data.

    Masks the low WORD of FVFCaps. These bits, cast to the WORD data type, describe the total number of texture coordinate sets that the device can simultaneously use for multiple texture blending. (You can use up to eight texture coordinate sets for any vertex, but the device can blend using only the specified number of texture coordinate sets.)

    ?

    +
    + + bb172513 + D3DFVFCAPS FVFCaps + D3DFVFCAPS FVFCaps +
    + + +

    Combination of flags describing the texture operations supported by this device. The following flags are defined.

    ValueMeaning

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    The texture-blending operation is supported.

    ?

    +
    + + bb172513 + D3DTEXOPCAPS TextureOpCaps + D3DTEXOPCAPS TextureOpCaps +
    + + +

    Maximum number of texture-blending stages supported in the fixed function pipeline. This value is the number of blenders available. In the programmable pixel pipeline, this corresponds to the number of unique texture registers used by pixel shader instructions.

    +
    + + bb172513 + unsigned int MaxTextureBlendStages + unsigned int MaxTextureBlendStages +
    + + +

    Maximum number of textures that can be simultaneously bound to the fixed-function pipeline sampler stages. If the same texture is bound to two sampler stages, it counts as two textures.

    This value has no meaning in the programmable pipeline where the number of sampler stages is determined by each pixel shader version. Each pixel shader version also determines the number of texture declaration instructions. See Pixel Shaders.

    +
    + + bb172513 + unsigned int MaxSimultaneousTextures + unsigned int MaxSimultaneousTextures +
    + + +

    Vertex processing capabilities. For a given physical device, this capability might vary across Direct3D devices depending on the parameters supplied to CreateDevice. See .

    +
    + + bb172513 + D3DVTXPCAPS VertexProcessingCaps + D3DVTXPCAPS VertexProcessingCaps +
    + + +

    Maximum number of lights that can be active simultaneously. For a given physical device, this capability might vary across Direct3D devices depending on the parameters supplied to CreateDevice.

    +
    + + bb172513 + unsigned int MaxActiveLights + unsigned int MaxActiveLights +
    + + +

    Maximum number of user-defined clipping planes supported. This member can be 0. For a given physical device, this capability may vary across Direct3D devices depending on the parameters supplied to CreateDevice.

    +
    + + bb172513 + unsigned int MaxUserClipPlanes + unsigned int MaxUserClipPlanes +
    + + +

    Maximum number of matrices that this device can apply when performing multimatrix vertex blending. For a given physical device, this capability may vary across Direct3D devices depending on the parameters supplied to CreateDevice.

    +
    + + bb172513 + unsigned int MaxVertexBlendMatrices + unsigned int MaxVertexBlendMatrices +
    + + +

    DWORD value that specifies the maximum matrix index that can be indexed into using the per-vertex indices. The number of matrices is MaxVertexBlendMatrixIndex + 1, which is the size of the matrix palette. If normals are present in the vertex data that needs to be blended for lighting, then the number of matrices is half the number specified by this capability flag. If MaxVertexBlendMatrixIndex is set to zero, the driver does not support indexed vertex blending. If this value is not zero then the valid range of indices is zero through MaxVertexBlendMatrixIndex.

    A zero value for MaxVertexBlendMatrixIndex indicates that the driver does not support indexed matrices.

    When software vertex processing is used, 256 matrices could be used for indexed vertex blending, with or without normal blending.

    For a given physical device, this capability may vary across Direct3D devices depending on the parameters supplied to CreateDevice.

    +
    + + bb172513 + unsigned int MaxVertexBlendMatrixIndex + unsigned int MaxVertexBlendMatrixIndex +
    + + +

    Maximum size of a point primitive. If set to 1.0f then device does not support point size control. The range is greater than or equal to 1.0f.

    +
    + + bb172513 + float MaxPointSize + float MaxPointSize +
    + + +

    Maximum number of primitives for each DrawPrimitive call. There are two cases: +

    • If MaxPrimitiveCount is not equal to 0xffff, you can draw at most MaxPrimitiveCount primitives with each draw call.
    • However, if MaxPrimitiveCount equals 0xffff, you can still draw at most MaxPrimitiveCount primitive, but you may also use no more than MaxPrimitiveCount unique vertices (since each primitive can potentially use three different vertices).
    +
    + + bb172513 + unsigned int MaxPrimitiveCount + unsigned int MaxPrimitiveCount +
    + + +

    Maximum size of indices supported for hardware vertex processing. It is possible to create 32-bit index buffers; however, you will not be able to render with the index buffer unless this value is greater than 0x0000FFFF.

    +
    + + bb172513 + unsigned int MaxVertexIndex + unsigned int MaxVertexIndex +
    + + +

    Maximum number of concurrent data streams for SetStreamSource. The valid range is 1 to 16. Note that if this value is 0, then the driver is not a Direct3D 9 driver.

    +
    + + bb172513 + unsigned int MaxStreams + unsigned int MaxStreams +
    + + +

    Maximum stride for SetStreamSource.

    +
    + + bb172513 + unsigned int MaxStreamStride + unsigned int MaxStreamStride +
    + + +

    Two numbers that represent the vertex shader main and sub versions. For more information about the instructions supported for each vertex shader version, see Version 1_x, Version 2_0, Version 2_0 Extended, or Version 3_0.

    +
    + + bb172513 + unsigned int VertexShaderVersion + unsigned int VertexShaderVersion +
    + + +

    The number of vertex shader Vertex Shader Registers that are reserved for constants.

    +
    + + bb172513 + unsigned int MaxVertexShaderConst + unsigned int MaxVertexShaderConst +
    + + +

    Two numbers that represent the pixel shader main and sub versions. For more information about the instructions supported for each pixel shader version, see Version 1_x, Version 2_0, Version 2_0 Extended, or Version 3_0.

    +
    + + bb172513 + unsigned int PixelShaderVersion + unsigned int PixelShaderVersion +
    + + +

    Maximum value of pixel shader arithmetic component. This value indicates the internal range of values supported for pixel color blending operations. Within the range that they report to, implementations must allow data to pass through pixel processing unmodified (unclamped). Normally, the value of this member is an absolute value. For example, a 1.0 indicates that the range is -1.0 to 1, and an 8.0 indicates that the range is -8.0 to 8.0. The value must be >= 1.0 for any hardware that supports pixel shaders.

    +
    + + bb172513 + float PixelShader1xMaxValue + float PixelShader1xMaxValue +
    + + +

    Device driver capabilities for adaptive tessellation. For more information, see

    +
    + + bb172513 + D3DDEVCAPS2 DevCaps2 + D3DDEVCAPS2 DevCaps2 +
    + + +

    This number indicates which device is the master for this subordinate. This number is taken from the same space as the adapter values.

    For multihead support, one head will be denoted the master head, and all other heads on the same card will be denoted subordinate heads. If more than one multihead adapter is present in a system, the master and its subordinates from one multihead adapter are called a group.

    +
    + + bb172513 + float MaxNpatchTessellationLevel + float MaxNpatchTessellationLevel +
    + + +

    This number indicates the order in which heads are referenced by the API. The value for the master adapter is always 0. These values do not correspond to the adapter ordinals. They apply only to heads within a group.

    +
    + + bb172513 + unsigned int Reserved5 + unsigned int Reserved5 +
    + + +

    This number indicates which device is the master for this subordinate. This number is taken from the same space as the adapter values.

    For multihead support, one head will be denoted the master head, and all other heads on the same card will be denoted subordinate heads. If more than one multihead adapter is present in a system, the master and its subordinates from one multihead adapter are called a group.

    +
    + + bb172513 + unsigned int MasterAdapterOrdinal + unsigned int MasterAdapterOrdinal +
    + + +

    This number indicates the order in which heads are referenced by the API. The value for the master adapter is always 0. These values do not correspond to the adapter ordinals. They apply only to heads within a group.

    +
    + + bb172513 + unsigned int AdapterOrdinalInGroup + unsigned int AdapterOrdinalInGroup +
    + + +

    Number of adapters in this adapter group (only if master). This will be 1 for conventional adapters. The value will be greater than 1 for the master adapter of a multihead card. The value will be 0 for a subordinate adapter of a multihead card. Each card can have at most one master, but may have many subordinates.

    +
    + + bb172513 + unsigned int NumberOfAdaptersInGroup + unsigned int NumberOfAdaptersInGroup +
    + + +

    A combination of one or more data types contained in a vertex declaration. See .

    +
    + + bb172513 + D3DDTCAPS DeclTypes + D3DDTCAPS DeclTypes +
    + + +

    Number of simultaneous render targets. This number must be at least one.

    +
    + + bb172513 + unsigned int NumSimultaneousRTs + unsigned int NumSimultaneousRTs +
    + + +

    Combination of constants that describe the operations supported by StretchRect. The flags that may be set in this field are:

    ConstantDescription
    Device supports point-sample filtering for minifying rectangles. This filter type is requested by calling StretchRect using .
    Device supports point-sample filtering for magnifying rectangles. This filter type is requested by calling StretchRect using .
    Device supports bilinear interpolation filtering for minifying rectangles. This filter type is requested by calling StretchRect using .
    Device supports bilinear interpolation filtering for magnifying rectangles. This filter type is requested by calling StretchRect using .

    ?

    For more information, see and .

    +
    + + bb172513 + D3DPTFILTERCAPS StretchRectFilterCaps + D3DPTFILTERCAPS StretchRectFilterCaps +
    + + +

    Device supports vertex shader version 2_0 extended capability. See .

    +
    + + bb172513 + D3DVSHADERCAPS2_0 VS20Caps + D3DVSHADERCAPS2_0 VS20Caps +
    + + +

    Device supports pixel shader version 2_0 extended capability. See .

    +
    + + bb172513 + D3DPSHADERCAPS2_0 PS20Caps + D3DPSHADERCAPS2_0 PS20Caps +
    + + +

    Device supports vertex shader texture filter capability. See .

    +
    + + bb172513 + D3DPTFILTERCAPS VertexTextureFilterCaps + D3DPTFILTERCAPS VertexTextureFilterCaps +
    + + +

    Maximum number of vertex shader instructions that can be run when using flow control. The maximum number of instructions that can be programmed is MaxVertexShader30InstructionSlots.

    +
    + + bb172513 + unsigned int MaxVShaderInstructionsExecuted + unsigned int MaxVShaderInstructionsExecuted +
    + + +

    Maximum number of pixel shader instructions that can be run when using flow control. The maximum number of instructions that can be programmed is MaxPixelShader30InstructionSlots.

    +
    + + bb172513 + unsigned int MaxPShaderInstructionsExecuted + unsigned int MaxPShaderInstructionsExecuted +
    + + +

    Maximum number of vertex shader instruction slots supported. The maximum value that can be set on this cap is 32768. Devices that support vs_3_0 are required to support at least 512 instruction slots.

    +
    + + bb172513 + unsigned int MaxVertexShader30InstructionSlots + unsigned int MaxVertexShader30InstructionSlots +
    + + +

    Maximum number of pixel shader instruction slots supported. The maximum value that can be set on this cap is 32768. Devices that support ps_3_0 are required to support at least 512 instruction slots.

    +
    + + bb172513 + unsigned int MaxPixelShader30InstructionSlots + unsigned int MaxPixelShader30InstructionSlots +
    + + + Shader compilation results. + + + + + Initializes a new instance of the class. + + The bytecode. + The result code. + The message. + + + + Performs an implicit conversion from to . + + The input. + + The result of the conversion. + + + + +

    The interface is used to access the constant table. This table contains the variables that are used by high-level language shaders and effects.

    +
    + +

    The LPD3DXCONSTANTTABLE type is defined as a reference to the interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXCONSTANTTABLE;	
    +            
    +
    + + bb205762 + ID3DXConstantTable + ID3DXConstantTable +
    + + + Gets the buffer. + + + + + Gets a single constant description in the constant table. + + The effect handle. + The constant description + HRESULT ID3DXConstantTable::GetConstantDesc([In] D3DXHANDLE hConstant,[Out, Buffer] D3DXCONSTANT_DESC* pConstantDesc,[InOut] unsigned int* pCount) + + + + Gets an array of constant descriptions in the constant table. + + The effect handle. + An array of constant descriptions + HRESULT ID3DXConstantTable::GetConstantDesc([In] D3DXHANDLE hConstant,[Out, Buffer] D3DXCONSTANT_DESC* pConstantDesc,[InOut] unsigned int* pCount) + + + + Sets a bool value. + + The device. + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXConstantTable::SetBool([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] BOOL b) + + + + Sets a float value. + + The device. + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXConstantTable::SetFloat([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] float f) + + + + Sets an int value. + + The device. + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXConstantTable::SetInt([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] int n) + + + + Sets a matrix. + + The device. + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXConstantTable::SetMatrix([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] const D3DXMATRIX* pMatrix) + + + + Sets a 4D vector. + + The device. + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXConstantTable::SetVector([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] const D3DXVECTOR4* pVector) + + + + Sets a typed value. + + Type of the value to set + The device. + The effect handle. + The value. + + A object describing the result of the operation. + + HRESULT ID3DXConstantTable::SetValue([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] const void* pData,[In] unsigned int Bytes) + + + + Sets an array of bools. + + The device. + The effect handle. + The values. + A object describing the result of the operation. + HRESULT ID3DXConstantTable::SetBoolArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const BOOL* pb,[In] unsigned int Count) + + + + Sets an array of floats. + + The device. + The effect handle. + The values. + A object describing the result of the operation. + HRESULT ID3DXConstantTable::SetFloatArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const float* pf,[In] unsigned int Count) + + + + Sets an array of ints. + + The device. + The effect handle. + The values. + A object describing the result of the operation. + HRESULT ID3DXConstantTable::SetIntArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const int* pn,[In] unsigned int Count) + + + + Sets an array of matrices. + + The device. + The effect handle. + The values. + A object describing the result of the operation. + HRESULT ID3DXConstantTable::SetMatrixArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const D3DXMATRIX* pMatrix,[In] unsigned int Count) + + + + Sets an array of 4D vectors. + + The device. + The effect handle. + The values. + A object describing the result of the operation. + HRESULT ID3DXConstantTable::SetVectorArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const D3DXVECTOR4* pVector,[In] unsigned int Count) + + + + Sets an array of elements. + + Type of the array element + The device. + The effect handle. + The values. + + A object describing the result of the operation. + + HRESULT ID3DXConstantTable::SetValue([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] const void* pData,[In] unsigned int Bytes) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a reference to the buffer that contains the constant table.

    +
    + + bb205763 + GetBufferPointer + GetBufferPointer + void* ID3DXConstantTable::GetBufferPointer() +
    + + +

    Gets the buffer size of the constant table.

    +
    + + bb205764 + GetBufferSize + GetBufferSize + unsigned int ID3DXConstantTable::GetBufferSize() +
    + + +

    Gets a description of the constant table.

    +
    + + bb205769 + GetDesc + GetDesc + HRESULT ID3DXConstantTable::GetDesc([Out] D3DXCONSTANTTABLE_DESC* pDesc) +
    + + +

    Gets a reference to the buffer that contains the constant table.

    +
    +

    Returns a reference the buffer.

    + + bb205763 + void* ID3DXConstantTable::GetBufferPointer() + ID3DXConstantTable::GetBufferPointer +
    + + +

    Gets the buffer size of the constant table.

    +
    +

    Returns the size of the buffer, in bytes.

    + + bb205764 + unsigned int ID3DXConstantTable::GetBufferSize() + ID3DXConstantTable::GetBufferSize +
    + + +

    Gets a description of the constant table.

    +
    +

    Description of the constant table. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb205769 + HRESULT ID3DXConstantTable::GetDesc([Out] D3DXCONSTANTTABLE_DESC* pDesc) + ID3DXConstantTable::GetDesc +
    + + +

    Gets a reference to an array of constant descriptions in the constant table.

    +
    +

    Unique identifier to a constant. See .

    +

    Returns a reference to an array of descriptions. See .

    +

    The input supplied must be the maximum size of the array. The output is the number of elements that are filled in the array when the function returns.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    will sometimes return a with a Register_Count of 0. This will happen with a constant appears in more than one Register_Set but does not have space in that register set allocated.

    Because a sampler can appear more than once in a constant table, this method can return an array of descriptions, each one with a different register index.

    +
    + + bb205767 + HRESULT ID3DXConstantTable::GetConstantDesc([In] D3DXHANDLE hConstant,[Out, Buffer] D3DXCONSTANT_DESC* pConstantDesc,[InOut] unsigned int* pCount) + ID3DXConstantTable::GetConstantDesc +
    + + +

    Returns the sampler index.

    +
    +

    The sampler handle.

    +

    Returns the sampler index number from the constant table.

    + + bb205770 + unsigned int ID3DXConstantTable::GetSamplerIndex([In] D3DXHANDLE hConstant) + ID3DXConstantTable::GetSamplerIndex +
    + + +

    Gets a constant by looking up its index.

    +
    +

    Unique identifier to the parent data structure. If the constant is a top-level parameter (there is no parent data structure), use null.

    +

    Zero-based index of the constant.

    +

    Returns a unique identifier to the constant.

    + +

    To get a constant from an array of constants, use .

    +
    + + bb205765 + D3DXHANDLE ID3DXConstantTable::GetConstant([In] D3DXHANDLE hConstant,[In] unsigned int Index) + ID3DXConstantTable::GetConstant +
    + + +

    Gets a constant by looking up its name.

    +
    +

    Unique identifier to the parent data structure. If the constant is a top-level parameter (there is no parent data structure), use null.

    +

    Name of the constant.

    +

    Returns a unique identifier to the constant.

    + + bb205766 + D3DXHANDLE ID3DXConstantTable::GetConstantByName([In] D3DXHANDLE hConstant,[In] const char* pName) + ID3DXConstantTable::GetConstantByName +
    + + +

    Gets a constant from an array of constants. An array is made up of elements.

    +
    +

    Unique identifier to the array of constants. This value may not be null.

    +

    Zero-based index of the element in the array.

    +

    Returns a unique identifier to the element constant.

    + +

    To get a constant that is not part of an array, use or .

    +
    + + bb205768 + D3DXHANDLE ID3DXConstantTable::GetConstantElement([In] D3DXHANDLE hConstant,[In] unsigned int Index) + ID3DXConstantTable::GetConstantElement +
    + + +

    Sets the constants to their default values. The default values are declared in the variable declarations in the shader.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205773 + HRESULT ID3DXConstantTable::SetDefaults([In] IDirect3DDevice9* pDevice) + ID3DXConstantTable::SetDefaults +
    + + +

    Sets the contents of the buffer to the constant table.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to a constant. See .

    +

    Buffer containing data.

    +

    Size of the buffer, in bytes.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205785 + HRESULT ID3DXConstantTable::SetValue([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] const void* pData,[In] unsigned int Bytes) + ID3DXConstantTable::SetValue +
    + + +

    Sets a Boolean value.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the constant. See .

    +

    Boolean value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205771 + HRESULT ID3DXConstantTable::SetBool([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] BOOL b) + ID3DXConstantTable::SetBool +
    + + +

    Sets an array of Boolean values.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the array of constants. See .

    +

    Array of Boolean values.

    +

    Number of Boolean values in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205772 + HRESULT ID3DXConstantTable::SetBoolArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const BOOL* pb,[In] unsigned int Count) + ID3DXConstantTable::SetBoolArray +
    + + +

    Sets an integer value.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the constant. See .

    +

    Integer.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205776 + HRESULT ID3DXConstantTable::SetInt([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] int n) + ID3DXConstantTable::SetInt +
    + + +

    Sets an array of integers.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the array of constants. See .

    +

    Array of integers.

    +

    Number of integers in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205778 + HRESULT ID3DXConstantTable::SetIntArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const int* pn,[In] unsigned int Count) + ID3DXConstantTable::SetIntArray +
    + + +

    Sets a floating-point number.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the constant. See .

    +

    Floating-point number.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205774 + HRESULT ID3DXConstantTable::SetFloat([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] float f) + ID3DXConstantTable::SetFloat +
    + + +

    Sets an array of floating-point numbers.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the array of constants. See .

    +

    Array of floating-point numbers.

    +

    Number of floating-point values in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205775 + HRESULT ID3DXConstantTable::SetFloatArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const float* pf,[In] unsigned int Count) + ID3DXConstantTable::SetFloatArray +
    + + +

    Sets a 4D vector.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the vector constant. See .

    +

    Pointer to a 4D vector.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205786 + HRESULT ID3DXConstantTable::SetVector([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] const D3DXVECTOR4* pVector) + ID3DXConstantTable::SetVector +
    + + +

    Sets an array of 4D vectors.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the array of vector constants. See .

    +

    Array of 4D vectors.

    +

    Number of vectors in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205787 + HRESULT ID3DXConstantTable::SetVectorArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const D3DXVECTOR4* pVector,[In] unsigned int Count) + ID3DXConstantTable::SetVectorArray +
    + + +

    Sets a nontransposed matrix.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the matrix of constants. See .

    +

    Pointer to a nontransposed matrix. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205779 + HRESULT ID3DXConstantTable::SetMatrix([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] const D3DXMATRIX* pMatrix) + ID3DXConstantTable::SetMatrix +
    + + +

    Sets an array of nontransposed matrices.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the array of constant matrices. See .

    +

    Array of nontransposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205780 + HRESULT ID3DXConstantTable::SetMatrixArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const D3DXMATRIX* pMatrix,[In] unsigned int Count) + ID3DXConstantTable::SetMatrixArray +
    + + +

    Sets an array of references to nontransposed matrices.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to an array of constant matrices. See .

    +

    Array of references to nontransposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A nontransposed matrix contains row-major data; that is, each vector is contained in a row.

    +
    + + bb205781 + HRESULT ID3DXConstantTable::SetMatrixPointerArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] const D3DXMATRIX** ppMatrix,[In] unsigned int Count) + ID3DXConstantTable::SetMatrixPointerArray +
    + + +

    Sets a transposed matrix.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the matrix of constants. See .

    +

    Pointer to a transposed matrix. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205782 + HRESULT ID3DXConstantTable::SetMatrixTranspose([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] const D3DXMATRIX* pMatrix) + ID3DXConstantTable::SetMatrixTranspose +
    + + +

    Sets an array of transposed matrices.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the array of matrix constants. See .

    +

    Array of transposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205783 + HRESULT ID3DXConstantTable::SetMatrixTransposeArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In, Buffer] const D3DXMATRIX* pMatrix,[In] unsigned int Count) + ID3DXConstantTable::SetMatrixTransposeArray +
    + + +

    Sets an array of references to transposed matrices.

    +
    +

    Pointer to an interface, representing the device associated with the constant table.

    +

    Unique identifier to the array of matrix constants. See .

    +

    Array of references to transposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A transposed matrix contains column-major data; that is, each vector is contained in a column.

    +
    + + bb205784 + HRESULT ID3DXConstantTable::SetMatrixTransposePointerArray([In] IDirect3DDevice9* pDevice,[In] D3DXHANDLE hConstant,[In] const D3DXMATRIX** ppMatrix,[In] unsigned int Count) + ID3DXConstantTable::SetMatrixTransposePointerArray +
    + + +

    Applications use the methods of the interface to manipulate a cube texture resource.

    +
    + +

    The interface can be obtained by calling the method or one of the xxx functions.

    This interface inherits additional functionality from the interface.

    This interface, like all COM interfaces, inherits additional functionality from the interface.

    The LPDIRECT3DCUBETEXTURE9 and PDIRECT3DCubeTexture9 types are defined as references to the interface.

     typedef struct  *LPDIRECT3DCUBETEXTURE9, *PDIRECT3DCubeTexture9;	
    +            
    +
    + + bb174329 + IDirect3DCubeTexture9 + IDirect3DCubeTexture9 +
    + + + Initializes a new instance of the class. + + The device. + Length of the edge. + The level count. + The usage. + The format. + The pool. + + + + Initializes a new instance of the class. + + The device. + Length of the edge. + The level count. + The usage. + The format. + The pool. + The shared handle. + + + + Checks texture-creation parameters. + + Device associated with the texture. + Requested size of the texture. Null if + Requested number of mipmap levels for the texture. + The requested usage for the texture. + Requested format for the texture. + Memory class where the resource will be placed. + A value type containing the proposed values to pass to the texture creation functions. + HRESULT D3DXCheckCubeTextureRequirements([In] IDirect3DDevice9* pDevice,[InOut] unsigned int* pSize,[InOut] unsigned int* pNumMipLevels,[In] unsigned int Usage,[InOut] D3DFORMAT* pFormat,[In] D3DPOOL Pool) + + + + Uses a user-provided function to fill each texel of each mip level of a given cube texture. + + A function that is used to fill the texture. + A object describing the result of the operation. + + + + Uses a compiled high-level shader language (HLSL) function to fill each texel of each mipmap level of a texture. + + A texture shader object that is used to fill the texture. + A object describing the result of the operation. + + + + Locks a rectangle on a cube texture resource. + + Type of the face. + The level. + The flags. + + A describing the region locked. + + HRESULT IDirect3DCubeTexture9::LockRect([In] D3DCUBEMAP_FACES FaceType,[In] unsigned int Level,[In] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Locks a rectangle on a cube texture resource. + + Type of the face. + The level. + The flags. + The stream pointing to the locked region. + + A describing the region locked. + + HRESULT IDirect3DCubeTexture9::LockRect([In] D3DCUBEMAP_FACES FaceType,[In] unsigned int Level,[In] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Locks a rectangle on a cube texture resource. + + Type of the face. + The level. + The rectangle. + The flags. + + A describing the region locked. + + HRESULT IDirect3DCubeTexture9::LockRect([In] D3DCUBEMAP_FACES FaceType,[In] unsigned int Level,[In] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Locks a rectangle on a cube texture resource. + + Type of the face. + The level. + The rectangle. + The flags. + The stream pointing to the locked region. + + A describing the region locked. + + HRESULT IDirect3DCubeTexture9::LockRect([In] D3DCUBEMAP_FACES FaceType,[In] unsigned int Level,[In] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Adds a dirty region to a cube texture resource. + + Type of the face. + A object describing the result of the operation. + HRESULT IDirect3DCubeTexture9::AddDirtyRect([In] D3DCUBEMAP_FACES FaceType,[In] const void* pDirtyRect) + + + + Adds a dirty region to a cube texture resource. + + Type of the face. + The dirty rect ref. + A object describing the result of the operation. + HRESULT IDirect3DCubeTexture9::AddDirtyRect([In] D3DCUBEMAP_FACES FaceType,[In] const void* pDirtyRect) + + + + Creates a from a file + + The device. + The filename. + + A + + HRESULT D3DXCreateCubeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a file + + The device. + The filename. + The usage. + The pool. + + A + + HRESULT D3DXCreateCubeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a file + + The device. + The filename. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateCubeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a file + + The device. + The filename. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + + A + + HRESULT D3DXCreateCubeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a file + + The device. + The filename. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateCubeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemory([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The usage. + The pool. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a stream. + + The device. + The stream. + A + HRESULT D3DXCreateCubeTextureFromFileInMemory([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The usage. + The pool. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a stream. + + The device. + The buffer. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + A + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a stream. + + The device. + The pointer. + The size in bytes. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Creates a from a stream. + + The device. + Name of the file. + The size. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a description of one face of the specified cube texture level.

    +
    +

    Specifies a level of a mipmapped cube texture.

    +

    Pointer to a structure, describing one face of the specified cube texture level.

    + +

    The structure contains Width and Height members, which describe the size of one face in the cube. To get the size of the entire cube, multiply six (the number of cube faces) by the product of Width and Height.

    +
    + + bb174332 + HRESULT IDirect3DCubeTexture9::GetLevelDesc([In] unsigned int Level,[Out] D3DSURFACE_DESC* pDesc) + IDirect3DCubeTexture9::GetLevelDesc +
    + + +

    Retrieves a cube texture map surface.

    +
    +

    Member of the enumerated type, identifying a cube map face.

    +

    Specifies a level of a mipmapped cube texture.

    +

    Address of a reference to an interface, representing the returned cube texture map surface.

    + +

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb174331 + HRESULT IDirect3DCubeTexture9::GetCubeMapSurface([In] D3DCUBEMAP_FACES FaceType,[In] unsigned int Level,[Out] IDirect3DSurface9** ppCubeMapSurface) + IDirect3DCubeTexture9::GetCubeMapSurface +
    + + +

    Locks a rectangle on a cube texture resource.

    +
    +

    Member of the enumerated type, identifying a cube map face.

    +

    Specifies a level of a mipmapped cube texture.

    +

    Pointer to a structure, describing the region to lock.

    +

    Pointer to a rectangle to lock. Specified by a reference to a structure. Specifying null for this parameter expands the dirty region to cover the entire cube texture.

    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    You may not specify a subrect when using . For a description of the flags, see .

    +

    If the method succeeds, the return value is . is returned if one or more of the arguments is invalid.

    + +

    For performance reasons, dirty regions are only recorded for level zero of a texture. Dirty regions are automatically recorded when is called without or . See for more information.

    Cube textures created with are not lockable. Cube textures created in video memory are lockable when created with USAGE_DYNAMIC.

    The only lockable format for a depth-stencil texture is .

    +
    + + bb174334 + HRESULT IDirect3DCubeTexture9::LockRect([In] D3DCUBEMAP_FACES FaceType,[In] unsigned int Level,[Out] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + IDirect3DCubeTexture9::LockRect +
    + + +

    Unlocks a rectangle on a cube texture resource.

    +
    +

    Member of the enumerated type, identifying a cube map face.

    +

    Specifies a level of a mipmapped cube texture.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + + bb174335 + HRESULT IDirect3DCubeTexture9::UnlockRect([In] D3DCUBEMAP_FACES FaceType,[In] unsigned int Level) + IDirect3DCubeTexture9::UnlockRect +
    + + +

    Adds a dirty region to a cube texture resource.

    +
    +

    Member of the enumerated type, identifying the cube map face.

    +

    Pointer to a structure, specifying the dirty region. Specifying null expands the dirty region to cover the entire cube texture.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + +

    For performance reasons, dirty regions are only recorded for level zero of a texture. For sublevels, it is assumed that the corresponding (scaled) rectangle or box is also dirty. Dirty regions are automatically recorded when is called without or . The destination surface of is also marked dirty automatically.

    Using and explicitly specifying dirty regions can be used to increase the efficiency of . Using this method, applications can optimize what subset of a resource is copied by specifying dirty regions on the resource. However, the dirty regions may be expanded to optimize alignment.

    +
    + + bb174330 + HRESULT IDirect3DCubeTexture9::AddDirtyRect([In] D3DCUBEMAP_FACES FaceType,[In] const void* pDirtyRect) + IDirect3DCubeTexture9::AddDirtyRect +
    + + + A Cube Texture requirement. + + + + + The corrected size of the texture, in pixels. + + + + + The corrected surface format. + + + + + The corrected mip level count. + + + + + D3DX constants and methods + + + + + The value used to signify that the default value for a parameter should be used. + + D3DX_DEFAULT + + + + The default value for non power-of-two textures. + + D3DX_DEFAULT_NONPOW2 + + + + Indicates that the method should format from file. + + D3DFMT_FROM_FILE + + + + Indicates that the method should load from file. + + D3DX_FROM_FILE + + + + Checks the D3DX runtime version against this compiled version. + + True if version are compatible + BOOL D3DXCheckVersion([In] unsigned int D3DSdkVersion,[In] unsigned int D3DXSdkVersion) + + + + Get and set debug mute mode. + + if set to true [mute]. + Return the debug mute mode + BOOL D3DXDebugMute([In] BOOL Mute) + + + + Converts a declarator from a flexible vertex format (FVF) code. + + Combination of that describes the FVF from which to generate the returned declarator array.. + + A declarator from a flexible vertex format (FVF) code. + + HRESULT D3DXDeclaratorFromFVF([In] D3DFVF FVF,[In, Buffer] D3DVERTEXELEMENT9* pDeclarator) + + + + Converts a flexible vertex format (FVF) code from a declarator. + + The declarator array. + A that describes the vertex format returned from the declarator. + HRESULT D3DXFVFFromDeclarator([In, Buffer] const D3DVERTEXELEMENT9* pDeclarator,[Out] D3DFVF* pFVF) + + + + Generates an output vertex declaration from the input declaration. The output declaration is intended for use by the mesh tessellation functions. + + The input declaration. + The output declaration + HRESULT D3DXGenerateOutputDecl([In, Buffer] D3DVERTEXELEMENT9* pOutput,[In, Buffer] const D3DVERTEXELEMENT9* pInput) + + + + Gets the number of elements in the vertex declaration. + + The declaration. + The number of elements in the vertex declaration. + unsigned int D3DXGetDeclLength([In, Buffer] const D3DVERTEXELEMENT9* pDecl) + + + + Gets the size of a vertex from the vertex declaration. + + The elements. + The stream. + The vertex declaration size, in bytes. + unsigned int D3DXGetDeclVertexSize([In, Buffer] const D3DVERTEXELEMENT9* pDecl,[In] unsigned int Stream) + + + + Returns the size of a vertex for a flexible vertex format (FVF). + + The vertex format. + The FVF vertex size, in bytes. + unsigned int D3DXGetFVFVertexSize([In] D3DFVF FVF) + + + + Gets the size of the rectangle patch. + + The segment count. + The triangle count. + The vertex count. + A object describing the result of the operation. + HRESULT D3DXRectPatchSize([In] const float* pfNumSegs,[In] unsigned int* pdwTriangles,[In] unsigned int* pdwVertices) + + + + Gets the size of the triangle patch. + + The segment count. + The triangle count. + The vertex count. + A object describing the result of the operation. + HRESULT D3DXTriPatchSize([In] const float* pfNumSegs,[In] unsigned int* pdwTriangles,[In] unsigned int* pdwVertices) + + + + Gets an array of from a . + + The stream. + The vertex count. + The format. + An array of + + + + Gets an array of from a . + + The stream. + The vertex count. + The stride. + An array of + + + + Creates a FOURCC Format code from bytes description. + + The c1. + The c2. + The c3. + The c4. + A Format FourCC + MAKEFOURCC + + + + Generates an optimized face remapping for a triangle list. + + The indices. + The face count. + The vertex count. + The original mesh face that was split to generate the current face. + HRESULT D3DXOptimizeFaces([In] const void* pbIndices,[In] unsigned int cFaces,[In] unsigned int cVertices,[In] BOOL b32BitIndices,[In, Buffer] int* pFaceRemap) + + + + Generates an optimized vertex remapping for a triangle list. This function is commonly used after applying the face remapping generated by D3DXOptimizeFaces. + + The indices. + The face count. + The vertex count. + The original mesh face that was split to generate the current face. + HRESULT D3DXOptimizeFaces([In] const void* pbIndices,[In] unsigned int cFaces,[In] unsigned int cVertices,[In] BOOL b32BitIndices,[In, Buffer] int* pFaceRemap) + + + + Generates an optimized vertex remapping for a triangle list. This function is commonly used after applying the face remapping generated by . + + The indices. + The face count. + The vertex count. + A buffer that will contain the new index for each vertex. The value stored in pVertexRemap for a given element is the source vertex location in the new vertex ordering. + HRESULT D3DXOptimizeVertices([In] const void* pbIndices,[In] unsigned int cFaces,[In] unsigned int cVertices,[In] BOOL b32BitIndices,[In, Buffer] int* pVertexRemap) + + + + Generates an optimized vertex remapping for a triangle list. This function is commonly used after applying the face remapping generated by . + + The indices. + The face count. + The vertex count. + A buffer that will contain the new index for each vertex. The value stored in pVertexRemap for a given element is the source vertex location in the new vertex ordering. + HRESULT D3DXOptimizeVertices([In] const void* pbIndices,[In] unsigned int cFaces,[In] unsigned int cVertices,[In] BOOL b32BitIndices,[In, Buffer] int* pVertexRemap) + + + +

    Applications use the methods of the interface to perform DrawPrimitive-based rendering, create resources, work with system-level variables, adjust gamma ramp levels, work with palettes, and create shaders.

    +
    + +

    The interface is obtained by calling the method.

    This interface, like all COM interfaces, inherits the interface methods.

    The LPDIRECT3DDEVICE9 and PDIRECT3DDEVICE9 types are defined as references to the interface.

     typedef struct  *LPDIRECT3DDEVICE9, *PDIRECT3DDEVICE9;	
    +            
    +
    + + bb174336 + IDirect3DDevice9 + IDirect3DDevice9 +
    + + + Creates a device to represent the display adapter. + + + This method returns a fully working device interface, set to the required display mode (or windowed), and allocated with the appropriate back buffers. To begin rendering, the application needs only to create and set a depth buffer (assuming EnableAutoDepthStencil is FALSE in ). When you create a Direct3D device, you supply two different window parameters: a focus window (hFocusWindow) and a device window (the hDeviceWindow in ). The purpose of each window is: The focus window alerts Direct3D when an application switches from foreground mode to background mode (via Alt-Tab, a mouse click, or some other method). A single focus window is shared by each device created by an application. The device window determines the location and size of the back buffer on screen. This is used by Direct3D when the back buffer contents are copied to the front buffer during {{Present}}. This method should not be run during the handling of WM_CREATE. An application should never pass a window handle to Direct3D while handling WM_CREATE. Any call to create, release, or reset the device must be done using the same thread as the window procedure of the focus window. Note that D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING, and D3DCREATE_SOFTWARE_VERTEXPROCESSING are mutually exclusive flags, and at least one of these vertex processing flags must be specified when calling this method. Back buffers created as part of the device are only lockable if D3DPRESENTFLAG_LOCKABLE_BACKBUFFER is specified in the presentation parameters. (Multisampled back buffers and depth surfaces are never lockable.) The methods {{Reset}}, , and {{TestCooperativeLevel}} must be called from the same thread that used this method to create a device. D3DFMT_UNKNOWN can be specified for the windowed mode back buffer format when calling CreateDevice, {{Reset}}, and {{CreateAdditionalSwapChain}}. This means the application does not have to query the current desktop format before calling CreateDevice for windowed mode. For full-screen mode, the back buffer format must be specified. If you attempt to create a device on a 0x0 sized window, CreateDevice will fail. + + an instance of + Ordinal number that denotes the display adapter. {{D3DADAPTER_DEFAULT}} is always the primary display adapter. + Member of the enumerated type that denotes the desired device type. If the desired device type is not available, the method will fail. + The focus window alerts Direct3D when an application switches from foreground mode to background mode. See Remarks. For full-screen mode, the window specified must be a top-level window. For windowed mode, this parameter may be NULL only if the hDeviceWindow member of pPresentationParameters is set to a valid, non-NULL value. + Combination of one or more options that control device creation. For more information, see {{D3DCREATE}}. + Pointer to a structure, describing the presentation parameters for the device to be created. If BehaviorFlags specifies {{D3DCREATE_ADAPTERGROUP_DEVICE}}, pPresentationParameters is an array. Regardless of the number of heads that exist, only one depth/stencil surface is automatically created. For Windows 2000 and Windows XP, the full-screen device display refresh rate is set in the following order: User-specified nonzero ForcedRefreshRate registry key, if supported by the device. Application-specified nonzero refresh rate value in the presentation parameter. Refresh rate of the latest desktop mode, if supported by the device. 75 hertz if supported by the device. 60 hertz if supported by the device. Device default. An unsupported refresh rate will default to the closest supported refresh rate below it. For example, if the application specifies 63 hertz, 60 hertz will be used. There are no supported refresh rates below 57 hertz. pPresentationParameters is both an input and an output parameter. Calling this method may change several members including: If BackBufferCount, BackBufferWidth, and BackBufferHeight are 0 before the method is called, they will be changed when the method returns. If BackBufferFormat equals before the method is called, it will be changed when the method returns. + If the method succeeds, the return value is D3D_OK. If the method fails, the return value can be one of the following: D3DERR_DEVICELOST, D3DERR_INVALIDCALL, D3DERR_NOTAVAILABLE, D3DERR_OUTOFVIDEOMEMORY. + HRESULT CreateDevice([None] UINT Adapter,[None] D3DDEVTYPE DeviceType,[None] HWND hFocusWindow,[None] int BehaviorFlags,[None] D3DPRESENT_PARAMETERS* pPresentationParameters,[None] IDirect3DDevice9** ppReturnedDeviceInterface) + + + + Gets the available texture memory. + + + + + Gets the driver level. + + + + + Gets the pixel shader profile. + + + + + Gets the vertex shader profile. + + + + + Clears one or more surfaces such as a render target, a stencil buffer, and a depth buffer. + + Flags that specify which surfaces will be cleared. + The color that will be used to fill the cleared render target. + The value that will be used to fill the cleared depth buffer. + The value that will be used to fill the cleared stencil buffer. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::Clear([None] int Count,[In, Buffer, Optional] const D3DRECT* pRects,[None] int Flags,[None] D3DCOLOR Color,[None] float Z,[None] int Stencil) + + + + Clears one or more surfaces such as a render target, a stencil buffer, and a depth buffer. + + Flags that specify which surfaces will be cleared. + The color that will be used to fill the cleared render target. + The value that will be used to fill the cleared depth buffer. + The value that will be used to fill the cleared stencil buffer. + The areas on the surfaces that will be cleared. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::Clear([None] int Count,[In, Buffer, Optional] const D3DRECT* pRects,[None] int Flags,[None] D3DCOLOR Color,[None] float Z,[None] int Stencil) + + + + Allows an application to fill a rectangular area of a D3DPOOL_DEFAULT surface with a specified color. + + + This method can only be applied to a render target, a render-target texture surface, or an off-screen plain surface with a pool type of D3DPOOL_DEFAULT. IDirect3DDevice9::ColorFill will work with all formats. However, when using a reference or software device, the only formats supported are D3DFMT_X1R5G5B5, D3DFMT_A1R5G5B5, D3DFMT_R5G6B5, D3DFMT_X8R8G8B8, D3DFMT_A8R8G8B8, D3DFMT_YUY2, D3DFMT_G8R8_G8B8, D3DFMT_UYVY, D3DFMT_R8G8_B8G8, D3DFMT_R16F, D3DFMT_G16R16F, D3DFMT_A16B16G16R16F, D3DFMT_R32F, D3DFMT_G32R32F, and D3DFMT_A32B32G32R32F. When using a DirectX 7 or DirectX 8.x driver, the only YUV formats supported are D3DFMT_UYVY and D3DFMT_YUY2. + + Pointer to the surface to be filled. + Color used for filling. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::ColorFill([None] IDirect3DSurface9* pSurface,[In, Optional] const RECT* pRect,[None] D3DCOLOR color) + + + + Draws the indexed user primitives. + + + + Type of the primitive. + Minimum index of the vertex. + The vertex count. + The primitive count. + The index data. + The index data format. + The vertex data. + The vertex stride. + A object describing the result of the operation. + + + + Draws the indexed user primitives. + + + + Type of the primitive. + The start index. + Minimum index of the vertex. + The vertex count. + The primitive count. + The index data. + The index data format. + The vertex data. + A object describing the result of the operation. + + + + Draws the indexed user primitives. + + + + Type of the primitive. + The start index. + The start vertex. + Minimum index of the vertex. + The vertex count. + The primitive count. + The index data. + The index data format. + The vertex data. + A object describing the result of the operation. + + + + Draws the rectangle patch. + + The handle. + The segment counts. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::DrawRectPatch([In] unsigned int Handle,[In, Buffer] const float* pNumSegs,[In] const void* pRectPatchInfo) + + + + Draws the rectangle patch. + + The handle. + The segment counts. + The info. + + A object describing the result of the operation. + + IDirect3DDevice9::DrawRectPatch + + + + Draws the triangle patch. + + The handle. + The segment counts. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::DrawTriPatch([In] unsigned int Handle,[In, Buffer] const float* pNumSegs,[In] const void* pTriPatchInfo) + + + + Draws the triangle patch. + + The handle. + The segment counts. + The info. + + A object describing the result of the operation. + + + + + Draws the user primitives. + + + Type of the primitive. + The primitive count. + The data. + + A object describing the result of the operation. + + + + + Draws the user primitives. + + + Type of the primitive. + The start index. + The primitive count. + The data. + + A object describing the result of the operation. + + + + + Gets the back buffer. + + The swap chain. + The back buffer. + A object describing the result of the operation. + + + + Gets the palette entries. + + The palette number. + An array of + + + + Gets the pixel shader boolean constant. + + The start register. + The count. + An array of boolean constants + + + + Gets the pixel shader float constant. + + The start register. + The count. + An array of float constants + + + + Gets the pixel shader integer constant. + + The start register. + The count. + An array of int constants + + + + Gets the state of the render. + + The state. + The render state value + HRESULT IDirect3DDevice9::GetRenderState([In] D3DRENDERSTATETYPE State,[In] void* pValue) + + + + Gets the state of the render. + + Type of the state value. + The state. + + The render state value + + HRESULT IDirect3DDevice9::GetRenderState([In] D3DRENDERSTATETYPE State,[In] void* pValue) + + + + Gets the state of the sampler. + + The sampler. + The state. + + The sampler state value + + HRESULT IDirect3DDevice9::GetSamplerState([In] unsigned int Sampler,[In] D3DSAMPLERSTATETYPE Type,[In] void* pValue) + + + + Gets the state of the sampler. + + Type of the sampler state value + The sampler. + The state. + + The sampler state value + + HRESULT IDirect3DDevice9::GetSamplerState([In] unsigned int Sampler,[In] D3DSAMPLERSTATETYPE Type,[In] void* pValue) + + + + Gets the state of the texture stage. + + The stage. + The type. + + The texture stage state. + + HRESULT IDirect3DDevice9::GetTextureStageState([In] unsigned int Stage,[In] D3DTEXTURESTAGESTATETYPE Type,[In] void* pValue) + + + + Gets the state of the texture stage. + + Type of the texture stage state + The stage. + The type. + + The texture stage state. + + HRESULT IDirect3DDevice9::GetTextureStageState([In] unsigned int Stage,[In] D3DTEXTURESTAGESTATETYPE Type,[In] void* pValue) + + + + Gets the vertex shader boolean constant. + + The start register. + The count. + An array of boolean constants + HRESULT IDirect3DDevice9::GetVertexShaderConstantB([In] unsigned int StartRegister,[In] void* pConstantData,[In] unsigned int BoolCount) + + + + Gets the vertex shader float constant. + + The start register. + The count. + An array of float constants + HRESULT IDirect3DDevice9::GetVertexShaderConstantF([In] unsigned int StartRegister,[In, Buffer] float* pConstantData,[In] unsigned int Vector4fCount) + + + + Gets the vertex shader integer constant. + + The start register. + The count. + An array of int constants + HRESULT IDirect3DDevice9::GetVertexShaderConstantI([In] unsigned int StartRegister,[Out] int* pConstantData,[In] unsigned int Vector4iCount) + + + + Sets the cursor position. + + The point. + if set to true [flags]. + void IDirect3DDevice9::SetCursorPosition([In] int X,[In] int Y,[In] unsigned int Flags) + + + + Sets the cursor position. + + The x. + The y. + if set to true [flags]. + void IDirect3DDevice9::SetCursorPosition([In] int X,[In] int Y,[In] unsigned int Flags) + + + + Sets the cursor properties. + + The point. + The cursor bitmap ref. + + HRESULT IDirect3DDevice9::SetCursorProperties([In] unsigned int XHotSpot,[In] unsigned int YHotSpot,[In] IDirect3DSurface9* pCursorBitmap) + + + + Sets the gamma ramp. + + The swap chain. + The ramp ref. + if set to true [calibrate]. + void IDirect3DDevice9::SetGammaRamp([In] unsigned int iSwapChain,[In] unsigned int Flags,[In] const D3DGAMMARAMP* pRamp) + + + + Presents the contents of the next buffer in the sequence of back buffers to the screen. + + A object describing the result of the operation. + IDirect3DDevice9::Present + + + + Presents the contents of the next buffer in the sequence of back buffers to the screen. + + The area of the back buffer that should be presented. + The area of the front buffer that should receive the result of the presentation. + A object describing the result of the operation. + IDirect3DDevice9::Present + + + + Presents the contents of the next buffer in the sequence of back buffers to the screen. + + The area of the back buffer that should be presented. + The area of the front buffer that should receive the result of the presentation. + The destination window whose client area is taken as the target for this presentation. + A object describing the result of the operation. + IDirect3DDevice9::Present + + + + Presents the contents of the next buffer in the sequence of back buffers to the screen. + + The area of the back buffer that should be presented. + The area of the front buffer that should receive the result of the presentation. + The destination window whose client area is taken as the target for this presentation. + Specifies a region on the back buffer that contains the minimal amount of pixels that need to be updated. + A object describing the result of the operation. + IDirect3DDevice9::Present + + + + Resets the stream source frequency by setting the frequency to 1. + + The stream index. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetStreamSourceFreq([In] unsigned int StreamNumber,[In] unsigned int Setting) + + + + Sets the pixel shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetPixelShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetPixelShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetPixelShaderConstantB([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int BoolCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetPixelShaderConstantI([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4iCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetPixelShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetPixelShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetPixelShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + The count. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetPixelShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + The offset. + The count. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetPixelShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + The offset. + The count. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetPixelShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + The offset. + The count. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetPixelShaderConstantB([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int BoolCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + The offset. + The count. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetPixelShaderConstantI([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4iCount) + + + + Sets the pixel shader constant. + + The start register. + The data. + The offset. + The count. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetPixelShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the RenderState. + + State of the render. + if set to true [enable]. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetRenderState([In] D3DRENDERSTATETYPE State,[In] unsigned int Value) + + + + Sets the RenderState. + + State of the render. + A float value. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetRenderState([In] D3DRENDERSTATETYPE State,[In] unsigned int Value) + + + + Sets the RenderState. + + Type of the enum value + State of the render. + An enum value. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetRenderState([In] D3DRENDERSTATETYPE State,[In] unsigned int Value) + + + + Sets the SamplerState. + + The sampler. + The type. + The texture filter. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetSamplerState([In] unsigned int Sampler,[In] D3DSAMPLERSTATETYPE Type,[In] unsigned int Value) + + + + Sets the SamplerState. + + The sampler. + The type. + The texture address. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetSamplerState([In] unsigned int Sampler,[In] D3DSAMPLERSTATETYPE Type,[In] unsigned int Value) + + + + Sets the SamplerState. + + The sampler. + The type. + A float value. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetSamplerState([In] unsigned int Sampler,[In] D3DSAMPLERSTATETYPE Type,[In] unsigned int Value) + + + + Sets the stream source frequency. + + The stream. + The frequency. + The source. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetStreamSourceFreq([In] unsigned int StreamNumber,[In] unsigned int Setting) + + + + Sets the state of the texture stage. + + The stage. + The type. + The texture argument. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetTextureStageState([In] unsigned int Stage,[In] D3DTEXTURESTAGESTATETYPE Type,[In] unsigned int Value) + + + + Sets the state of the texture stage. + + The stage. + The type. + The texture operation. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetTextureStageState([In] unsigned int Stage,[In] D3DTEXTURESTAGESTATETYPE Type,[In] unsigned int Value) + + + + Sets the state of the texture stage. + + The stage. + The type. + The texture transform. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetTextureStageState([In] unsigned int Stage,[In] D3DTEXTURESTAGESTATETYPE Type,[In] unsigned int Value) + + + + Sets the state of the texture stage. + + The stage. + The type. + The value. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetTextureStageState([In] unsigned int Stage,[In] D3DTEXTURESTAGESTATETYPE Type,[In] unsigned int Value) + + + + Sets the transform. + + The state. + The matrix ref. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetTransform([In] D3DTRANSFORMSTATETYPE State,[In] const D3DMATRIX* pMatrix) + + + + Sets the transform. + + The index. + The matrix ref. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetTransform([In] D3DTRANSFORMSTATETYPE State,[In] const D3DMATRIX* pMatrix) + + + + Sets the transform. + + The state. + The matrix ref. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetTransform([In] D3DTRANSFORMSTATETYPE State,[In] const D3DMATRIX* pMatrix) + + + + Sets the transform. + + The index. + The matrix ref. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetTransform([In] D3DTRANSFORMSTATETYPE State,[In] const D3DMATRIX* pMatrix) + + + + Sets the vertex shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetVertexShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetVertexShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetVertexShaderConstantB([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int BoolCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetVertexShaderConstantI([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4iCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetVertexShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetVertexShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetVertexShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + The count. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetVertexShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + The offset. + The count. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::SetVertexShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + The offset. + The count. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetVertexShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + The offset. + The count. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetVertexShaderConstantB([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int BoolCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + The offset. + The count. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetVertexShaderConstantI([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4iCount) + + + + Sets the vertex shader constant. + + The start register. + The data. + The offset. + The count. + A object describing the result of the operation. + HRESULT IDirect3DDevice9::SetVertexShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + + + + Stretches the rectangle. + + The source surface ref. + The dest surface ref. + The filter. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::StretchRect([In] IDirect3DSurface9* pSourceSurface,[In, Optional] const RECT* pSourceRect,[In] IDirect3DSurface9* pDestSurface,[In, Optional] const RECT* pDestRect,[In] D3DTEXTUREFILTERTYPE Filter) + + + + Gets or sets a value indicating whether the cursor can be displayed. + + + true if the cursor can be displayed; otherwise, false. + + + + + Updates the surface. + + The source surface ref. + The destination surface ref. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9::UpdateSurface([In] IDirect3DSurface9* pSourceSurface,[In] const RECT* pSourceRect,[In] IDirect3DSurface9* pDestinationSurface,[In] const POINT* pDestPoint) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns an interface to the instance of the Direct3D object that created the device.

    +
    + +

    Calling will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb174386 + GetDirect3D + GetDirect3D + HRESULT IDirect3DDevice9::GetDirect3D([Out] IDirect3D9** ppD3D9) +
    + + +

    Retrieves the capabilities of the rendering device.

    +
    + +

    retrieves the software vertex pipeline capabilities when the device is being used in software vertex processing mode.

    +
    + + bb174385 + GetDeviceCaps + GetDeviceCaps + HRESULT IDirect3DDevice9::GetDeviceCaps([Out] D3DCAPS9* pCaps) +
    + + +

    Retrieves the creation parameters of the device.

    +
    + +

    You can query the AdapterOrdinal member of the returned structure to retrieve the ordinal of the adapter represented by this device.

    +
    + + bb174382 + GetCreationParameters + GetCreationParameters + HRESULT IDirect3DDevice9::GetCreationParameters([Out] D3DDEVICE_CREATION_PARAMETERS* pParameters) +
    + + +

    Gets the number of implicit swap chains.

    +
    + +

    Implicit swap chains are created by the device during . This method returns the number of swap chains created by CreateDevice.

    An application may create additional swap chains using .

    +
    + + bb174396 + GetNumberOfSwapChains + GetNumberOfSwapChains + unsigned int IDirect3DDevice9::GetNumberOfSwapChains() +
    + + +

    This method allows the use of GDI dialog boxes in full-screen mode applications.

    +
    + +

    The GDI dialog boxes must be created as child to the device window. They should also be created within the same thread that created the device because this enables the parent window to manage redrawing the child window.

    The method has no effect for windowed mode applications, but this setting will be respected if the application resets the device into full-screen mode. If SetDialogBoxMode succeeds in a windowed mode application, any subsequent reset to full-screen mode will be checked against the restrictions listed above. Also, SetDialogBoxMode causes all back buffers on the swap chain to be discarded, so an application is expected to refresh its content for all back buffers after this call.

    +
    + + bb174432 + SetDialogBoxMode + SetDialogBoxMode + HRESULT IDirect3DDevice9::SetDialogBoxMode([In] BOOL bEnableDialogs) +
    + + +

    Gets or sets the depth-stencil surface owned by the Direct3DDevice object.

    +
    + +

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb174384 + GetDepthStencilSurface / SetDepthStencilSurface + GetDepthStencilSurface + HRESULT IDirect3DDevice9::GetDepthStencilSurface([Out] IDirect3DSurface9** ppZStencilSurface) +
    + + +

    Retrieves or sets the viewport parameters currently set for the device.

    +
    + +

    Typically, methods that return state will not work on a device that is created using . This method however, will work even on a pure device.

    +
    + + bb174420 + GetViewport / SetViewport + GetViewport + HRESULT IDirect3DDevice9::GetViewport([Out] D3DVIEWPORT9* pViewport) +
    + + +

    Retrieves or sets the current material properties for the device.

    +
    + +

    This method will not return device state for a device that is created using . If you want to use this method, you must create your device with any of the other values in .

    +
    + + bb174394 + GetMaterial / SetMaterial + GetMaterial + HRESULT IDirect3DDevice9::GetMaterial([Out] D3DMATERIAL9* pMaterial) +
    + + +

    Retrieves or sets the clip status.

    +
    + +

    When clipping is enabled during vertex processing (by , , or other drawing functions), Direct3D computes a clip code for every vertex. The clip code is a combination of D3DCS_* bits. When a vertex is outside a particular clipping plane, the corresponding bit is set in the clipping code. Direct3D maintains the clip status using , which has ClipUnion and ClipIntersection members. ClipUnion is a bitwise "OR" of all vertex clip codes and ClipIntersection is a bitwise "AND" of all vertex clip codes. Initial values are zero for ClipUnion and 0xFFFFFFFF for ClipIntersection. When is set to , ClipUnion and ClipIntersection are set to zero. Direct3D updates the clip status during drawing calls. To compute clip status for a particular object, set ClipUnion and ClipIntersection to their initial value and continue drawing.

    Clip status is not updated by and because there is no software emulation for them.

    Clip status is used during software vertex processing. Therefore, this method is not supported on pure or nonpure hardware processing devices. For more information about pure devices, see .

    +
    + + bb174381 + GetClipStatus / SetClipStatus + GetClipStatus + HRESULT IDirect3DDevice9::GetClipStatus([Out] D3DCLIPSTATUS9* pClipStatus) +
    + + +

    Retrieves or sets the current texture palette.

    +
    + + bb174383 + GetCurrentTexturePalette / SetCurrentTexturePalette + GetCurrentTexturePalette + HRESULT IDirect3DDevice9::GetCurrentTexturePalette([Out] unsigned int* PaletteNumber) +
    + + +

    Gets or sets the scissor rectangle.

    +
    + +

    The scissor rectangle is used as a rectangular clipping region.

    See Rectangles (Direct3D 9) for further information on the use of rectangles in DirectX.

    +
    + + bb174407 + GetScissorRect / SetScissorRect + GetScissorRect + HRESULT IDirect3DDevice9::GetScissorRect([Out] RECT* pRect) +
    + + +

    Gets or sets the vertex processing (hardware or software) mode.

    +
    + +

    An application can create a mixed-mode device to use both the software vertex processing and the hardware vertex processing. To switch between the two vertex processing modes in DirectX 8.x, use with the render state D3DRS_SOFTWAREVERTEXPROCESSING and the appropriate argument. The drawback of the render state approach was the difficulty in defining the semantics for state blocks. Applications and the runtime had to do extra work and be careful while recording and playing back state blocks.

    In Direct3D 9, use instead. This new API is not recorded by StateBlocks.

    +
    + + bb174408 + GetSoftwareVertexProcessing / SetSoftwareVertexProcessing + GetSoftwareVertexProcessing + BOOL IDirect3DDevice9::GetSoftwareVertexProcessing() +
    + + +

    Gets or sets the N-patch mode segments.

    +
    + + bb174395 + GetNPatchMode / SetNPatchMode + GetNPatchMode + float IDirect3DDevice9::GetNPatchMode() +
    + + +

    Gets or sets a vertex shader declaration.

    +
    + + bb174415 + GetVertexDeclaration / SetVertexDeclaration + GetVertexDeclaration + HRESULT IDirect3DDevice9::GetVertexDeclaration([Out] IDirect3DVertexDeclaration9** ppDecl) +
    + + +

    Gets or sets the fixed vertex function declaration.

    +
    + +

    The fixed vertex function declaration is a set of FVF flags that determine how vertices processed by the fixed function pipeline will be used.

    +
    + + bb174389 + GetFVF / SetFVF + GetFVF + HRESULT IDirect3DDevice9::GetFVF([Out] D3DFVF* pFVF) +
    + + +

    Retrieves or sets the currently set vertex shader.

    +
    + +

    Typically, methods that return state will not work on a device that is created using . This method however, will work even on a pure device because it returns an interface.

    +
    + + bb174416 + GetVertexShader / SetVertexShader + GetVertexShader + HRESULT IDirect3DDevice9::GetVertexShader([Out] IDirect3DVertexShader9** ppShader) +
    + + +

    Retrieves or sets index data.

    +
    + +

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb174391 + GetIndices / SetIndices + GetIndices + HRESULT IDirect3DDevice9::GetIndices([Out] IDirect3DIndexBuffer9** ppIndexData) +
    + + +

    Retrieves or sets the currently set pixel shader.

    +
    + +

    This method will not work on a device that is created using .

    +
    + + bb174398 + GetPixelShader / SetPixelShader + GetPixelShader + HRESULT IDirect3DDevice9::GetPixelShader([Out] IDirect3DPixelShader9** ppShader) +
    + + +

    Reports the current cooperative-level status of the Direct3D device for a windowed or full-screen application.

    +
    +

    If the method succeeds, the return value is , indicating that the device is operational and the calling application can continue. If the method fails, the return value can be one of the following values: , , .

    + +

    If the device is lost but cannot be restored at the current time, returns the return code. This would be the case, for example, when a full-screen device has lost focus. If an application detects a lost device, it should pause and periodically call until it receives a return value of . The application may then attempt to reset the device by calling and, if this succeeds, restore the necessary resources and resume normal operation. Note that will return if the device is either "lost" or "not reset".

    A call to will fail if called on a different thread than that used to create the device being reset.

    +
    + + bb174472 + HRESULT IDirect3DDevice9::TestCooperativeLevel() + IDirect3DDevice9::TestCooperativeLevel +
    + + +

    Returns an estimate of the amount of available texture memory.

    +
    +

    The function returns an estimate of the available texture memory.

    + +

    The returned value is rounded to the nearest MB. This is done to reflect the fact that video memory estimates are never precise due to alignment and other issues that affect consumption by certain resources. Applications can use this value to make gross estimates of memory availability to make large-scale resource decisions such as how many levels of a mipmap to attempt to allocate, but applications cannot use this value to make small-scale decisions such as if there is enough memory left to allocate another resource.

    +
    + + bb174378 + unsigned int IDirect3DDevice9::GetAvailableTextureMem() + IDirect3DDevice9::GetAvailableTextureMem +
    + + +

    Evicts all managed resources, including both Direct3D and driver-managed resources.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be , D3DERR_COMMAND_UNPARSED.

    + +

    This function causes only the copy of resources to be evicted. The resource copy in system memory is retained. See .

    +
    + + bb174377 + HRESULT IDirect3DDevice9::EvictManagedResources() + IDirect3DDevice9::EvictManagedResources +
    + + +

    Returns an interface to the instance of the Direct3D object that created the device.

    +
    +

    Address of a reference to an interface, representing the interface of the Direct3D object that created the device.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Calling will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb174386 + HRESULT IDirect3DDevice9::GetDirect3D([Out] IDirect3D9** ppD3D9) + IDirect3DDevice9::GetDirect3D +
    + + +

    Retrieves the capabilities of the rendering device.

    +
    +

    Pointer to a structure, describing the returned device.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    retrieves the software vertex pipeline capabilities when the device is being used in software vertex processing mode.

    +
    + + bb174385 + HRESULT IDirect3DDevice9::GetDeviceCaps([Out] D3DCAPS9* pCaps) + IDirect3DDevice9::GetDeviceCaps +
    + + +

    Retrieves the display mode's spatial resolution, color resolution, and refresh frequency.

    +
    +

    An unsigned integer specifying the swap chain.

    +

    Pointer to a structure containing data about the display mode of the adapter. As opposed to the display mode of the device, which may not be active if the device does not own full-screen mode.

    + + bb174387 + HRESULT IDirect3DDevice9::GetDisplayMode([In] unsigned int iSwapChain,[Out] D3DDISPLAYMODE* pMode) + IDirect3DDevice9::GetDisplayMode +
    + + +

    Retrieves the creation parameters of the device.

    +
    +

    Pointer to a structure, describing the creation parameters of the device.

    +

    If the method succeeds, the return value is .

    is returned if the argument is invalid.

    + +

    You can query the AdapterOrdinal member of the returned structure to retrieve the ordinal of the adapter represented by this device.

    +
    + + bb174382 + HRESULT IDirect3DDevice9::GetCreationParameters([Out] D3DDEVICE_CREATION_PARAMETERS* pParameters) + IDirect3DDevice9::GetCreationParameters +
    + + +

    Sets properties for the cursor.

    +
    +

    X-coordinate offset (in pixels) that marks the center of the cursor. The offset is relative to the upper-left corner of the cursor. When the cursor is given a new position, the image is drawn at an offset from this new position determined by subtracting the hot spot coordinates from the position.

    +

    Y-coordinate offset (in pixels) that marks the center of the cursor. The offset is relative to the upper-left corner of the cursor. When the cursor is given a new position, the image is drawn at an offset from this new position determined by subtracting the hot spot coordinates from the position.

    +

    Pointer to an interface. This parameter must point to an 8888 ARGB surface (format ). The contents of this surface will be copied and potentially format-converted into an internal buffer from which the cursor is displayed. The dimensions of this surface must be less than the dimensions of the display mode, and must be a power of two in each direction, although not necessarily the same power of two. The alpha channel must be either 0.0 or 1.0.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    An operating system cursor is created and used under either of these conditions:

    • The hardware has set (see ), and the cursor size is 32x32 (which is the cursor size in the operating system).
    • The application is running in windowed mode.

    Otherwise, DirectX uses an emulated cursor. An application uses to move an emulated cursor to follow mouse movement.

    It is recommended for applications to always trap WM_MOUSEMOVE events and call DXSetCursorPosition.

    Direct3D cursor functions use either GDI cursor or software emulation, depending on the hardware. Users typically want to respond to a WM_SETCURSOR message. For example, they might want to write the message handler as follows:

     case WM_SETCURSOR:	
    +            // Turn off window cursor. 	
    +            SetCursor( null );	
    +            m_pd3dDevice->ShowCursor( TRUE );	
    +            return TRUE; // Prevent Windows from setting cursor to window class cursor.	
    +            break;	
    +            

    Or, users might want to call the method if they want to change the cursor.

    The application can determine what hardware support is available for cursors by examining appropriate members of the structure. Typically, hardware supports only 32x32 cursors and, when windowed, the system might support only 32x32 cursors. In this case, still succeeds but the cursor might be reduced to that size. The hot spot is scaled appropriately.

    The cursor does not survive when the device is lost. This method must be called after the device is reset.

    +
    + + bb174430 + HRESULT IDirect3DDevice9::SetCursorProperties([In] unsigned int XHotSpot,[In] unsigned int YHotSpot,[In] IDirect3DSurface9* pCursorBitmap) + IDirect3DDevice9::SetCursorProperties +
    + + +

    Sets the cursor position and update options.

    +
    +

    The new X-position of the cursor in virtual desktop coordinates. See Remarks.

    +

    The new Y-position of the cursor in virtual desktop coordinates. See Remarks.

    +

    Specifies the update options for the cursor. Currently, only one flag is defined.

    ValueMeaning
    D3DCURSOR_IMMEDIATE_UPDATE

    Update cursor at the refresh rate.

    If this flag is specified, the system guarantees that the cursor will be updated at a minimum of half the display refresh rate, but never more frequently than the display refresh rate. Otherwise, the method delays cursor updates until the next call. Not setting this flag usually results in better performance than if the flag is set. However, applications should set this flag if the rate of calls to Present is low enough that users would notice a significant delay in cursor motion. This flag has no effect in a windowed-mode application. Some video cards implement hardware color cursors. This flag does not have an effect on these cards.

    ?

    + +

    When running in full-screen mode, screen space coordinates are the back buffer coordinates appropriately scaled to the current display mode. When running in windowed mode, screen space coordinates are the desktop coordinates. The cursor image is drawn at the specified position minus the hotspot-offset specified by the SetCursorProperties method.

    If the cursor has been hidden by ShowCursor, the cursor is not drawn.

    +
    + + bb174429 + void IDirect3DDevice9::SetCursorPosition([In] int X,[In] int Y,[In] unsigned int Flags) + IDirect3DDevice9::SetCursorPosition +
    + + +

    Displays or hides the cursor.

    +
    +

    If bShow is TRUE, the cursor is shown. If bShow is , the cursor is hidden.

    +

    Value indicating whether the cursor was previously visible. TRUE if the cursor was previously visible, or if the cursor was not previously visible.

    + +

    Direct3D cursor functions use either GDI cursor or software emulation, depending on the hardware. Users usually want to respond to a WM_SETCURSOR message. For example, the users might want to write the message handler like this:

     case WM_SETCURSOR: // Turn off window cursor  SetCursor( null ); m_pd3dDevice->ShowCursor( TRUE ); return TRUE; // prevent Windows from setting cursor to window class cursor break;	
    +            

    Or users might want to call the method if they want to change the cursor. See the code in the DirectX Graphics C/C++ Samples for more detail.

    +
    + + bb174470 + BOOL IDirect3DDevice9::ShowCursor([In] BOOL bShow) + IDirect3DDevice9::ShowCursor +
    + + +

    Creates an additional swap chain for rendering multiple views.

    +
    +

    Pointer to a structure, containing the presentation parameters for the new swap chain. This value cannot be null.

    Calling this method changes the value of members of the structure.

    • If BackBufferCount == 0, calling CreateAdditionalSwapChain will increase it to 1.
    • If the application is in windowed mode, and if either the BackBufferWidth or the BackBufferHeight == 0, they will be set to the client area width and height of the hwnd.
    +

    Address of a reference to an interface, representing the additional swap chain.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , , , E_OUTOFMEMORY.

    + +

    There is always at least one swap chain (the implicit swap chain) for each device because Direct3D 9 has one swap chain as a property of the device.

    Note that any given device can support only one full-screen swap chain.

    can be specified for the windowed mode back buffer format when calling , and CreateAdditionalSwapChain. This means the application does not have to query the current desktop format before calling CreateDevice for windowed mode. For full-screen mode, the back buffer format must be specified.

    +
    + + bb174354 + HRESULT IDirect3DDevice9::CreateAdditionalSwapChain([In] D3DPRESENT_PARAMETERS* pPresentationParameters,[Out, Fast] IDirect3DSwapChain9** pSwapChain) + IDirect3DDevice9::CreateAdditionalSwapChain +
    + + +

    Gets a reference to a swap chain.

    +
    +

    The swap chain ordinal value. For more information, see NumberOfAdaptersInGroup in .

    +

    Pointer to an interface that will receive a copy of swap chain.

    + + bb174411 + HRESULT IDirect3DDevice9::GetSwapChain([In] unsigned int iSwapChain,[Out] IDirect3DSwapChain9** pSwapChain) + IDirect3DDevice9::GetSwapChain +
    + + +

    Gets the number of implicit swap chains.

    +
    +

    Number of implicit swap chains. See Remarks.

    + +

    Implicit swap chains are created by the device during . This method returns the number of swap chains created by CreateDevice.

    An application may create additional swap chains using .

    +
    + + bb174396 + unsigned int IDirect3DDevice9::GetNumberOfSwapChains() + IDirect3DDevice9::GetNumberOfSwapChains +
    + + +

    Resets the type, size, and format of the swap chain.

    +
    +

    Pointer to a structure, describing the new presentation parameters. This value cannot be null.

    When switching to full-screen mode, Direct3D will try to find a desktop format that matches the back buffer format, so that back buffer and front buffer formats will be identical (to eliminate the need for color conversion).

    When this method returns:

    • BackBufferCount, BackBufferWidth, and BackBufferHeight are set to zero.
    • BackBufferFormat is set to for windowed mode only; a full-screen mode must specify a format.
    +

    Possible return values include: , , , , or (see D3DERR).

    + +

    If a call to fails, the device will be placed in the "lost" state (as indicated by a return value of from a call to ) unless it is already in the "not reset" state (as indicated by a return value of from a call to ). Refer to and Lost Devices (Direct3D 9) for further information concerning the use of in the context of lost devices.

    Calling causes all texture memory surfaces to be lost, managed textures to be flushed from video memory, and all state information to be lost. Before calling the method for a device, an application should release any explicit render targets, depth stencil surfaces, additional swap chains, state blocks, and resources associated with the device.

    There are two different types of swap chains: full-screen or windowed. If the new swap chain is full-screen, the adapter will be placed in the display mode that matches the new size.

    Direct3D 9 applications can expect messages to be sent to them during this call (for example, before this call is returned); applications should take precautions not to call into Direct3D at this time. In addition, when fails, the only valid methods that can be called are , , and the various Release member functions. Calling any other method can result in an exception.

    A call to will fail if called on a different thread than that used to create the device being reset.

    Pixel shaders and vertex shaders survive calls for Direct3D 9. They do not need to be re-created explicitly by the application.

    can be specified for the windowed mode back buffer format when calling , , and . This means the application does not have to query the current desktop format before calling for windowed mode. For full-screen mode, the back buffer format must be specified. Setting BackBufferCount equal to zero (BackBufferCount = 0) results in one back buffer.

    When trying to reset more than one display adapter in a group, set pPresentationParameters to point to an array of structures, one for each display in the adapter group.

    If a multihead device was created with , requires an array of structures wherein each structure must specify a full-screen display. To switch back to windowed mode, the application must destroy the device and re-create a non-multihead device in windowed mode.

    +
    + + bb174425 + HRESULT IDirect3DDevice9::Reset([In, Out, Params] D3DPRESENT_PARAMETERS* pPresentationParameters) + IDirect3DDevice9::Reset +
    + + +

    Presents the contents of the next buffer in the sequence of back buffers owned by the device.

    +
    +

    Pointer to a value that must be null unless the swap chain was created with . pSourceRect is a reference to a structure containing the source rectangle. If null, the entire source surface is presented. If the rectangle exceeds the source surface, the rectangle is clipped to the source surface.

    +

    Pointer to a value that must be null unless the swap chain was created with . pDestRect is a reference to a structure containing the destination rectangle, in window client coordinates. If null, the entire client area is filled. If the rectangle exceeds the destination client area, the rectangle is clipped to the destination client area.

    +

    Pointer to a destination window whose client area is taken as the target for this presentation. If this value is null, the runtime uses the hDeviceWindow member of for the presentation.

    +

    Value must be null unless the swap chain was created with . For more information about swap chains, see Flipping Surfaces (Direct3D 9) and . If this value is non-null, the contained region is expressed in back buffer coordinates. The rectangles within the region are the minimal set of pixels that need to be updated. This method takes these rectangles into account when optimizing the presentation by copying only the pixels within the region, or some suitably expanded set of rectangles. This is an aid to optimization only, and the application should not rely on the region being copied exactly. The implementation can choose to copy the whole source rectangle.

    +

    Possible return values include: or (see D3DERR).

    + +

    If necessary, a stretch operation is applied to transfer the pixels within the source rectangle to the destination rectangle in the client area of the target window.

    Present will fail, returning , if called between BeginScene and EndScene pairs unless the render target is not the current render target (such as the back buffer you get from creating an additional swap chain). This is a new behavior for Direct3D 9.

    +
    + + bb174423 + HRESULT IDirect3DDevice9::Present([In] const void* pSourceRect,[In] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const void* pDirtyRegion) + IDirect3DDevice9::Present +
    + + +

    Retrieves a back buffer from the device's swap chain.

    +
    +

    An unsigned integer specifying the swap chain.

    +

    Index of the back buffer object to return. Back buffers are numbered from 0 to the total number of back buffers minus one. A value of 0 returns the first back buffer, not the front buffer. The front buffer is not accessible through this method. Use to retrieve a copy of the front buffer.

    +

    Stereo view is not supported in Direct3D 9, so the only valid value for this parameter is .

    +

    Address of a reference to an interface, representing the returned back buffer surface.

    + +

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb174379 + HRESULT IDirect3DDevice9::GetBackBuffer([In] unsigned int iSwapChain,[In] unsigned int iBackBuffer,[In] D3DBACKBUFFER_TYPE Type,[Out] IDirect3DSurface9** ppBackBuffer) + IDirect3DDevice9::GetBackBuffer +
    + + +

    Returns information describing the raster of the monitor on which the swap chain is presented.

    +
    +

    An unsigned integer specifying the swap chain.

    +

    Pointer to a structure filled with information about the position or other status of the raster on the monitor driven by this adapter.

    + + bb174402 + HRESULT IDirect3DDevice9::GetRasterStatus([In] unsigned int iSwapChain,[Out] D3DRASTER_STATUS* pRasterStatus) + IDirect3DDevice9::GetRasterStatus +
    + + +

    This method allows the use of GDI dialog boxes in full-screen mode applications.

    +
    +

    TRUE to enable GDI dialog boxes, and to disable them.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be unless all of the following are true.

    • The application specified a back buffer format compatible with GDI, in other words, one of , , or .
    • The application specified no multisampling.
    • The application specified .
    • The application specified .
    • The application did not specify .
    • The application is not between BeginScene and EndScene.
    + +

    The GDI dialog boxes must be created as child to the device window. They should also be created within the same thread that created the device because this enables the parent window to manage redrawing the child window.

    The method has no effect for windowed mode applications, but this setting will be respected if the application resets the device into full-screen mode. If SetDialogBoxMode succeeds in a windowed mode application, any subsequent reset to full-screen mode will be checked against the restrictions listed above. Also, SetDialogBoxMode causes all back buffers on the swap chain to be discarded, so an application is expected to refresh its content for all back buffers after this call.

    +
    + + bb174432 + HRESULT IDirect3DDevice9::SetDialogBoxMode([In] BOOL bEnableDialogs) + IDirect3DDevice9::SetDialogBoxMode +
    + + +

    Sets the gamma correction ramp for the implicit swap chain. This method will affect the entire screen (not just the active window if you are running in windowed mode).

    +
    +

    Unsigned integer specifying the swap chain.

    +

    Indicates whether correction should be applied. Gamma correction results in a more consistent display, but can incur processing overhead and should not be used frequently. Short-duration effects, such as flashing the whole screen red, should not be calibrated, but long-duration gamma changes should be calibrated. One of the following values can be set:

    ItemDescription

    D3DSGR_CALIBRATE

    If a gamma calibrator is installed, the ramp will be modified before being sent to the device to account for the system and monitor response curves. If a calibrator is not installed, the ramp will be passed directly to the device.

    D3DSGR_NO_CALIBRATION

    No gamma correction is applied. The supplied gamma table is transferred directly to the device.

    ?

    +

    Pointer to a structure, representing the gamma correction ramp to be set for the implicit swap chain.

    + +

    There is always at least one swap chain (the implicit swap chain) for each device, because Direct3D 9 has one swap chain as a property of the device. The gamma ramp takes effect immediately; there is no wait for a vertical sync.

    If the device does not support gamma ramps in the swap chain's current presentation mode (full-screen or windowed), no error return is given. Applications can check the and capability bits in the Caps2 member of the structure to determine the capabilities of the device and whether a calibrator is installed.

    For windowed gamma correction presentation, use if the hardware supports the feature. In DirectX 8, SetGammaRamp will set the gamma ramp only on a full-screen mode application. For more information about gamma correction, see Gamma (Direct3D 9).

    +
    + + bb174434 + void IDirect3DDevice9::SetGammaRamp([In] unsigned int iSwapChain,[In] unsigned int Flags,[In] const D3DGAMMARAMP* pRamp) + IDirect3DDevice9::SetGammaRamp +
    + + +

    Retrieves the gamma correction ramp for the swap chain.

    +
    +

    An unsigned integer specifying the swap chain.

    + + bb174390 + void IDirect3DDevice9::GetGammaRamp([In] unsigned int iSwapChain,[Out] D3DGAMMARAMP* pRamp) + IDirect3DDevice9::GetGammaRamp +
    + + +

    Creates a texture resource.

    +
    +

    Width of the top-level of the texture, in pixels. The pixel dimensions of subsequent levels will be the truncated value of half of the previous level's pixel dimension (independently). Each dimension clamps at a size of 1 pixel. Thus, if the division by 2 results in 0, 1 will be taken instead.

    +

    Height of the top-level of the texture, in pixels. The pixel dimensions of subsequent levels will be the truncated value of half of the previous level's pixel dimension (independently). Each dimension clamps at a size of 1 pixel. Thus, if the division by 2 results in 0, 1 will be taken instead.

    +

    Number of levels in the texture. If this is zero, Direct3D will generate all texture sublevels down to 1 by 1 pixels for hardware that supports mipmapped textures. Call to see the number of levels generated.

    +

    Usage can be 0, which indicates no usage value. However, if usage is desired, use a combination of one or more constants. It is good practice to match the usage parameter with the behavior flags in .

    +

    Member of the enumerated type, describing the format of all levels in the texture.

    +

    Member of the enumerated type, describing the memory class into which the texture should be placed.

    +

    Pointer to an interface, representing the created texture resource.

    +

    Reserved. Set this parameter to null. This parameter can be used in Direct3D 9 for Windows Vista to share resources.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , E_OUTOFMEMORY.

    + +

    An application can discover support for Automatic Generation of Mipmaps (Direct3D 9) in a particular format by calling with . If returns , will succeed but it will return a one-level texture.

    In Windows Vista CreateTexture can create a texture from a system memory reference allowing the application more flexibility over the use, allocation and deletion of the system memory. For example, an application could pass a GDI system memory bitmap reference and get a Direct3D texture interface around it. Using a system memory reference with CreateTexture has the following restrictions.

    • The pitch of the texture must be equal to the width multiplied by the number of bytes per pixel.
    • Only textures with a single mipmap level are supported. The Levels argument must be 1.
    • The Pool argument must be .
    • The pSharedHandle argument must be a valid reference to a buffer that can hold the system memory point; *pSharedHandle must be a valid reference to system memory with a size in bytes of texture width * texture height * bytes per pixel of the texture format.
    +
    + + bb174363 + HRESULT IDirect3DDevice9::CreateTexture([In] unsigned int Width,[In] unsigned int Height,[In] unsigned int Levels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DTexture9** ppTexture,[In] void** pSharedHandle) + IDirect3DDevice9::CreateTexture +
    + + +

    Creates a volume texture resource.

    +
    +

    Width of the top-level of the volume texture, in pixels. This value must be a power of two if the member of is set. The pixel dimensions of subsequent levels will be the truncated value of half of the previous level's pixel dimension (independently). Each dimension clamps at a size of 1 pixel. Thus, if the division by two results in 0 (zero), 1 will be taken instead. The maximum dimension that a driver supports (for width, height, and depth) can be found in MaxVolumeExtent in .

    +

    Height of the top-level of the volume texture, in pixels. This value must be a power of two if the member of is set. The pixel dimensions of subsequent levels will be the truncated value of half of the previous level's pixel dimension (independently). Each dimension clamps at a size of 1 pixel. Thus, if the division by 2 results in 0 (zero), 1 will be taken instead. The maximum dimension that a driver supports (for width, height, and depth) can be found in MaxVolumeExtent in .

    +

    Depth of the top-level of the volume texture, in pixels. This value must be a power of two if the member of is set. The pixel dimensions of subsequent levels will be the truncated value of half of the previous level's pixel dimension (independently). Each dimension clamps at a size of 1 pixel. Thus, if the division by 2 results in 0 (zero), 1 will be taken instead. The maximum dimension that a driver supports (for width, height, and depth) can be found in MaxVolumeExtent in .

    +

    Number of levels in the texture. If this is zero, Direct3D will generate all texture sublevels down to 1x1 pixels for hardware that supports mipmapped volume textures. Call to see the number of levels generated.

    +

    Usage can be 0, which indicates no usage value. If usage is desired, use or . For more information, see .

    +

    Member of the enumerated type, describing the format of all levels in the volume texture.

    +

    Member of the enumerated type, describing the memory class into which the volume texture should be placed.

    +

    Address of a reference to an interface, representing the created volume texture resource.

    +

    Reserved. Set this parameter to null. This parameter can be used in Direct3D 9 for Windows Vista to share resources.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , E_OUTOFMEMORY.

    + + bb174367 + HRESULT IDirect3DDevice9::CreateVolumeTexture([In] unsigned int Width,[In] unsigned int Height,[In] unsigned int Depth,[In] unsigned int Levels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DVolumeTexture9** ppVolumeTexture,[In] void** pSharedHandle) + IDirect3DDevice9::CreateVolumeTexture +
    + + +

    Creates a cube texture resource.

    +
    +

    Size of the edges of all the top-level faces of the cube texture. The pixel dimensions of subsequent levels of each face will be the truncated value of half of the previous level's pixel dimension (independently). Each dimension clamps at a size of 1 pixel. Thus, if the division by 2 results in 0 (zero), 1 will be taken instead.

    +

    Number of levels in each face of the cube texture. If this is zero, Direct3D will generate all cube texture sublevels down to 1x1 pixels for each face for hardware that supports mipmapped cube textures. Call to see the number of levels generated.

    +

    Usage can be 0, which indicates no usage value. However, if usage is desired, use a combination of one or more constants. It is good practice to match the usage parameter in CreateCubeTexture with the behavior flags in . For more information, see Remarks.

    +

    Member of the enumerated type, describing the format of all levels in all faces of the cube texture.

    +

    Member of the enumerated type, describing the memory class into which the cube texture should be placed.

    +

    Address of a reference to an interface, representing the created cube texture resource.

    +

    Reserved. Set this parameter to null. This parameter can be used in Direct3D 9 for Windows Vista to share resources.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , E_OUTOFMEMORY.

    + +

    A mipmap (texture) is a collection of successively downsampled (mipmapped) surfaces. On the other hand, a cube texture (created by ) is a collection of six textures (mipmaps), one for each face. All faces must be present in the cube texture. Also, a cube map surface must be the same pixel size in all three dimensions (x, y, and z).

    An application can discover support for Automatic Generation of Mipmaps (Direct3D 9) in a particular format by calling with . If returns , will succeed but it will return a one-level texture.

    +
    + + bb174355 + HRESULT IDirect3DDevice9::CreateCubeTexture([In] unsigned int EdgeLength,[In] unsigned int Levels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DCubeTexture9** ppCubeTexture,[In] void** pSharedHandle) + IDirect3DDevice9::CreateCubeTexture +
    + + +

    Creates a vertex buffer.

    +
    +

    Size of the vertex buffer, in bytes. For FVF vertex buffers, Length must be large enough to contain at least one vertex, but it need not be a multiple of the vertex size. Length is not validated for non-FVF buffers. See Remarks.

    +

    Usage can be 0, which indicates no usage value. However, if usage is desired, use a combination of one or more constants. It is good practice to match the usage parameter in CreateVertexBuffer with the behavior flags in . For more information, see Remarks.

    +

    Combination of , a usage specifier that describes the vertex format of the vertices in this buffer. If this parameter is set to a valid FVF code, the created vertex buffer is an FVF vertex buffer (see Remarks). Otherwise, if this parameter is set to zero, the vertex buffer is a non-FVF vertex buffer.

    +

    Member of the enumerated type, describing a valid memory class into which to place the resource. Do not set to .

    +

    Address of a reference to an interface, representing the created vertex buffer resource.

    +

    Reserved. Set this parameter to null. This parameter can be used in Direct3D 9 for Windows Vista to share resources.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , E_OUTOFMEMORY.

    + +

    A vertex buffer can be used with either hardware or software vertex processing. This is determined by how the device and the vertex buffer are created.

    When a device is created, CreateDevice uses the behavior flag to determine whether to process vertices in hardware or software. There are three possibilities:

    • Process vertices in hardware by setting .
    • Process vertices in software by setting .
    • Process vertices in either hardware or software by setting .

    Mixed-mode devices might need to switch between software and hardware processing (using ) after the device is created.

    When a vertex buffer is created, CreateVertexBuffer uses the usage parameter to decide whether to process vertices in hardware or software.

    • If CreateDevice uses , CreateVertexBuffer must use 0.
    • If CreateDevice uses , CreateVertexBuffer must use either 0 or . For either value, vertices will be processed in software.
    • If CreateDevice uses , CreateVertexBuffer can use either 0 or .

    To use a vertex buffer with a mixed mode device, create a single vertex buffer which can be used for both hardware or software processing. Use to set the current vertex buffer and use , if necessary, to change the device behavior to match. It is recommended that the vertex buffer usage matches the device behavior. Note that a vertex buffer created for software processing cannot be located in video memory.

    The interface supports rendering of primitives using vertex data stored in vertex buffer objects. Vertex buffers are created from the , and are usable only with the object from which they are created.

    When set to a nonzero value, which must be a valid FVF code, the FVF parameter indicates that the buffer content is to be characterized by an FVF code. A vertex buffer that is created with an FVF code is referred to as an FVF vertex buffer. For more information, see FVF Vertex Buffers (Direct3D 9).

    Non-FVF buffers can be used to interleave data during multipass rendering or multitexture rendering in a single pass. To do this, one buffer contains geometry data and the others contain texture coordinates for each texture to be rendered. When rendering, the buffer containing the geometry data is interleaved with each of the buffers containing the texture coordinates. If FVF buffers were used instead, each of them would need to contain identical geometry data in addition to the texture coordinate data specific to each texture rendered. This would result in either a speed or memory penalty, depending on the strategy used. For more information about texture coordinates, see Texture Coordinates (Direct3D 9).

    +
    + + bb174364 + HRESULT IDirect3DDevice9::CreateVertexBuffer([In] unsigned int Length,[In] D3DUSAGE Usage,[In] D3DFVF FVF,[In] D3DPOOL Pool,[Out, Fast] IDirect3DVertexBuffer9** ppVertexBuffer,[In] void** pSharedHandle) + IDirect3DDevice9::CreateVertexBuffer +
    + + +

    Creates an index buffer.

    +
    +

    Size of the index buffer, in bytes.

    +

    Usage can be 0, which indicates no usage value. However, if usage is desired, use a combination of one or more constants. It is good practice to match the usage parameter in CreateIndexBuffer with the behavior flags in . For more information, see Remarks.

    +

    Member of the enumerated type, describing the format of the index buffer. For more information, see Remarks. The valid settings are the following:

    ItemDescription

    Indices are 16 bits each.

    Indices are 32 bits each.

    ?

    +

    Member of the enumerated type, describing a valid memory class into which to place the resource.

    +

    Address of a reference to an interface, representing the created index buffer resource.

    +

    This parameter can be used in Direct3D?9 for Windows?Vista to share resources; set it to null to not share a resource. This parameter is not used in Direct3D?9 for operating systems earlier than Windows?Vista; set it to null.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    Index buffers are memory resources used to hold indices, they are similar to both surfaces and vertex buffers. The use of index buffers enables Direct3D to avoid unnecessary data copying and to place the buffer in the optimal memory type for the expected usage.

    To use index buffers, create an index buffer, lock it, fill it with indices, unlock it, pass it to , set up the vertices, set up the vertex shader, and call for rendering.

    The MaxVertexIndex member of the structure indicates the types of index buffers that are valid for rendering.

    +
    + + bb174357 + HRESULT IDirect3DDevice9::CreateIndexBuffer([In] unsigned int Length,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DIndexBuffer9** ppIndexBuffer,[In] void** pSharedHandle) + IDirect3DDevice9::CreateIndexBuffer +
    + + +

    Creates a render-target surface.

    +
    +

    Width of the render-target surface, in pixels.

    +

    Height of the render-target surface, in pixels.

    +

    Member of the enumerated type, describing the format of the render target.

    +

    Member of the enumerated type, which describes the multisampling buffer type. This parameter specifies the antialiasing type for this render target. When this surface is passed to , its multisample type must be the same as that of the depth-stencil set by .

    +

    Quality level. The valid range is between zero and one less than the level returned by pQualityLevels used by . Passing a larger value returns the error, . The MultisampleQuality values of paired render targets, depth stencil surfaces, and the multisample type must all match.

    +

    Render targets are not lockable unless the application specifies TRUE for Lockable.

    Note that lockable render targets reduce performance on some graphics hardware. The readback performance (moving data from video memory to system memory) depends on the type of hardware used (AGP vs. PCI Express) and is usually far lower than upload performance (moving data from system to video memory). If you need read access to render targets, use GetRenderTargetData instead of lockable render targets.

    +

    Reserved. Set this parameter to null. This parameter can be used in Direct3D 9 for Windows Vista to share resources.

    +

    Address of a reference to an interface.

    + +

    Render-target surfaces are placed in the memory class.

    The creation of lockable, multisampled render targets is not supported.

    +
    + + bb174361 + HRESULT IDirect3DDevice9::CreateRenderTarget([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Lockable,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle) + IDirect3DDevice9::CreateRenderTarget +
    + + +

    Creates a depth-stencil resource.

    +
    +

    Width of the depth-stencil surface, in pixels.

    +

    Height of the depth-stencil surface, in pixels.

    +

    Member of the enumerated type, describing the format of the depth-stencil surface. This value must be one of the enumerated depth-stencil formats for this device.

    +

    Member of the enumerated type, describing the multisampling buffer type. This value must be one of the allowed multisample types. When this surface is passed to , its multisample type must be the same as that of the render target set by .

    +

    Quality level. The valid range is between zero and one less than the level returned by pQualityLevels used by . Passing a larger value returns the error . The MultisampleQuality values of paired render targets, depth stencil surfaces, and the MultiSample type must all match.

    +

    Set this flag to TRUE to enable z-buffer discarding, and otherwise. If this flag is set, the contents of the depth stencil buffer will be invalid after calling either or with a different depth surface.

    This flag has the same behavior as the constant, , in .

    +

    Reserved. Set this parameter to null. This parameter can be used in Direct3D 9 for Windows Vista to share resources.

    +

    Address of a reference to an interface, representing the created depth-stencil surface resource.

    + +

    The memory class of the depth-stencil buffer is always .

    +
    + + bb174356 + HRESULT IDirect3DDevice9::CreateDepthStencilSurface([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Discard,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle) + IDirect3DDevice9::CreateDepthStencilSurface +
    + + +

    Copies rectangular subsets of pixels from one surface to another.

    +
    +

    Pointer to an interface, representing the source surface. This parameter must point to a different surface than pDestinationSurface.

    +

    Pointer to a rectangle on the source surface. Specifying null for this parameter causes the entire surface to be copied.

    +

    Pointer to an interface, representing the destination surface.

    +

    Pointer to the upper left corner of the destination rectangle. Specifying null for this parameter causes the entire surface to be copied.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: .

    + +

    This method is similar to CopyRects in DirectX 8.

    This function has the following restrictions.

    • The source surface must have been created with .
    • The destination surface must have been created with .
    • Neither surface can be locked or holding an outstanding device context.
    • Neither surface can be created with multisampling. The only valid flag for both surfaces is .
    • The surface format cannot be a depth stencil format.
    • The source and dest rects must fit within the surface.
    • No stretching or shrinking is allowed (the rects must be the same size).
    • The source format must match the dest format.

    The following table shows the supported combinations.

    Dest formats
    TextureRT textureRTOff-screen plain
    Src formatsTextureYesYesYes*Yes
    RT textureNoNoNoNo
    RTNoNoNoNo
    Off-screen plainYesYesYesYes

    ?

    * If the driver does not support the requested copy, it will be emulated using lock and copy.

    If the application needs to copy data from a render target to a surface, it can use GetRenderTargetData.

    +
    + + bb205857 + HRESULT IDirect3DDevice9::UpdateSurface([In] IDirect3DSurface9* pSourceSurface,[In, Optional] const RECT* pSourceRect,[In] IDirect3DSurface9* pDestinationSurface,[In, Optional] const POINT* pDestPoint) + IDirect3DDevice9::UpdateSurface +
    + + +

    Updates the dirty portions of a texture.

    +
    +

    Pointer to an interface, representing the source texture. The source texture must be in system memory ().

    +

    Pointer to an interface, representing the destination texture. The destination texture must be in the memory pool.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    You can dirty a portion of a texture by locking it, or by calling one of the following methods.

    retrieves the dirty portions of the texture by calculating what has been accumulated since the last update operation.

    For performance reasons, dirty regions are only recorded for level zero of a texture. For sublevels, it is assumed that the corresponding (scaled) rectangle or box is also dirty. Dirty regions are automatically recorded when LockRect or is called without or . Also, the destination surface of is marked dirty.

    This method fails if the textures are of different types, if their bottom-level buffers are of different sizes, or if their matching levels do not match. For example, consider a six-level source texture with the following dimensions.

     32x16, 16x8, 8x4, 4x2, 2x1, 1x1	
    +            

    This six-level source texture could be the source for the following one-level destination.

     1x1	
    +            

    For the following two-level destination.

     2x1, 1x1	
    +            

    Or, for the following three-level destination.

     4x2, 2x1, 1x1	
    +            

    In addition, this method will fail if the textures are of different formats. If the destination texture has fewer levels than the source, only the matching levels are copied. If the source texture has fewer levels than the destination, the method will fail.

    If the source texture has dirty regions, the copy can be optimized by restricting the copy to only those regions. It is not guaranteed that only those bytes marked dirty will be copied.

    Here are the possibilities for source and destination surface combinations:

    • If pSourceTexture is a non-autogenerated mipmap and pDestinationTexture is an autogenerated mipmap, only the topmost matching level is updated, and the destination sublevels are regenerated. All other source sublevels are ignored.
    • If both pSourceTexture and pDestinationTexture are autogenerated mipmaps, only the topmost matching level is updated. The sublevels from the source are ignored and the destination sublevels are regenerated.
    • If pSourceTexture is an autogenerated mipmap and pDestinationTexture a non-autogenerated mipmap, UpdateTexture will fail.
    +
    + + bb205858 + HRESULT IDirect3DDevice9::UpdateTexture([In] IDirect3DBaseTexture9* pSourceTexture,[In] IDirect3DBaseTexture9* pDestinationTexture) + IDirect3DDevice9::UpdateTexture +
    + + +

    Copies the render-target data from device memory to system memory.

    +
    +

    Pointer to an object, representing a render target.

    +

    Pointer to an object, representing a destination surface.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , .

    + +

    The destination surface must be either an off-screen plain surface or a level of a texture (mipmap or cube texture) created with .

    The source surface must be a regular render target or a level of a render-target texture (mipmap or cube texture) created with POOL_DEFAULT.

    This method will fail if:

    • The render target is multisampled.
    • The source render target is a different size than the destination surface.
    • The source render target and destination surface formats do not match.
    +
    + + bb174405 + HRESULT IDirect3DDevice9::GetRenderTargetData([In] IDirect3DSurface9* pRenderTarget,[In] IDirect3DSurface9* pDestSurface) + IDirect3DDevice9::GetRenderTargetData +
    + + +

    Generates a copy of the device's front buffer and places that copy in a system memory buffer provided by the application.

    +
    +

    An unsigned integer specifying the swap chain.

    +

    Pointer to an interface that will receive a copy of the contents of the front buffer. The data is returned in successive rows with no intervening space, starting from the vertically highest row on the device's output to the lowest.

    For windowed mode, the size of the destination surface should be the size of the desktop. For full-screen mode, the size of the destination surface should be the screen size.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , ,

    + +

    The buffer pointed to by pDestSurface will be filled with a representation of the front buffer, converted to the standard 32 bits per pixel format .

    This method is the only way to capture an antialiased screen shot.

    This function is very slow, by design, and should not be used in any performance-critical path.

    For more information, see Lost Devices and Retrieved Data.

    +
    + + bb174388 + HRESULT IDirect3DDevice9::GetFrontBufferData([In] unsigned int iSwapChain,[In] IDirect3DSurface9* pDestSurface) + IDirect3DDevice9::GetFrontBufferData +
    + + +

    Copy the contents of the source rectangle to the destination rectangle. The source rectangle can be stretched and filtered by the copy. This function is often used to change the aspect ratio of a video stream.

    +
    +

    Pointer to the source surface. See .

    +

    Pointer to the source rectangle. A null for this parameter causes the entire source surface to be used.

    +

    Pointer to the destination surface. See .

    +

    Pointer to the destination rectangle. A null for this parameter causes the entire destination surface to be used.

    +

    Filter type. Allowable values are , , or . For more information, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + +

    StretchRect Restrictions

    • Driver support varies. See the section on driver support (below) to see which drivers support which source and destination formats.
    • The source and destination surfaces must be created in the default memory pool.
    • If filtering is specified, you must set the appropriate filter caps (see StretchRectFilterCaps in ).
    • Stretching is not supported between source and destination rectangles on the same surface.
    • Stretching is not supported if the destination surface is an off-screen plain surface but the source is not.
    • You many not stretch between source and destination rectangles if either surface is in a compressed format (see Using Compressed Textures (Direct3D 9)).
    • Stretching supports color-space conversion from YUV to high-precision RGBA only. Since color conversion support is not supported by software emulation, use to test the hardware for color conversion support.
    • If the source or destination surface is a texture surface (or a cube texture surface), you must use a Direct3D 9 driver that supports (see ).

    Additional Restrictions for Depth and Stencil Surfaces

    • The source and destination surfaces must be plain depth stencil surfaces (not textures) (see ).
    • Neither of the surfaces can be discardable.
    • The entire surface must be copied (that is: sub-rectangle copies are not allowed).
    • Format conversion, stretching, and shrinking are not supported.
    • StretchRect cannot be called inside of a BeginScene/EndScene pair.

    Using StretchRect to downsample a Multisample Rendertarget

    You can use StretchRect to copy from one rendertarget to another. If the source rendertarget is multisampled, this results in downsampling the source rendertarget. For instance you could:

    • Create a multisampled rendertarget.
    • Create a second rendertarget of the same size, that is not multisampled.
    • Copy (using StretchRect the multisample rendertarget to the second rendertarget.

    Note that use of the extra surface involved in using StretchRect to downsample a Multisample Rendertarget will result in a performance hit.

    Driver Support

    There are many restrictions as to which surface combinations are valid for StretchRect. Factors include whether the driver is a Direct3D 9 driver or older, and whether the operation will result in stretching/shrinking. Since applications are not expected to recognize if the driver is a Direct3D 9 driver or not, the runtime will automatically set a new cap, cap (see ), for Direct3D 9-level drivers and above.

    DirectX 8 Driver (no stretching)
    Dest formats
    TextureRT textureRTOff-screen plain
    Src formatsTextureNoNoNoNo
    RT textureNoYesYesNo
    RTNoYesYesNo
    Off-screen plainYesYesYesYes

    ?

    DirectX 8 Driver (stretching)
    Dest formats
    TextureRT textureRTOff-screen plain
    Src formatsTextureNoNoNoNo
    RT textureNoNoNoNo
    RTNoYesYesNo
    Off-screen plainNoYesYesNo

    ?

    Direct3D 9 Driver (no stretching)
    Dest formats
    TextureRT textureRTOff-screen plain
    Src formatsTextureNoYesYesNo
    RT textureNoYesYesNo
    RTNoYesYesNo
    Off-screen plainNoYesYesYes

    ?

    Direct3D 9 Driver (stretching)
    Dest formats
    TextureRT textureRTOff-screen plain
    Src formatsTextureNoYesYesNo
    RT textureNoYesYesNo
    RTNoYesYesNo
    Off-screen plainNoYesYesNo

    ?

    +
    + + bb174471 + HRESULT IDirect3DDevice9::StretchRect([In] IDirect3DSurface9* pSourceSurface,[In, Optional] const RECT* pSourceRect,[In] IDirect3DSurface9* pDestSurface,[In, Optional] const RECT* pDestRect,[In] D3DTEXTUREFILTERTYPE Filter) + IDirect3DDevice9::StretchRect +
    + + +

    Allows an application to fill a rectangular area of a surface with a specified color.

    +
    +

    Pointer to the surface to be filled.

    +

    Pointer to the source rectangle. Using null means that the entire surface will be filled.

    +

    Color used for filling.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method can only be applied to a render target, a render-target texture surface, or an off-screen plain surface with a pool type of .

    will work with all formats. However, when using a reference or software device, the only formats supported are , , , , , , , , , , , , , , and .

    When using a DirectX 7 or DirectX 8.x driver, the only YUV formats supported are and .

    +
    + + bb174353 + HRESULT IDirect3DDevice9::ColorFill([In] IDirect3DSurface9* pSurface,[In, Optional] const RECT* pRect,[In] D3DCOLOR color) + IDirect3DDevice9::ColorFill +
    + + +

    Create an off-screen surface.

    +
    +

    Width of the surface.

    +

    Height of the surface.

    +

    Format of the surface. See .

    +

    Surface pool type. See .

    +

    Reserved. Set this parameter to null. This parameter can be used in Direct3D 9 for Windows Vista to share resources.

    +

    Pointer to the interface created.

    + +

    will return a surface that has identical characteristics to a surface created by the DirectX 8.x method CreateImageSurface.

    is the appropriate pool for use with the and .

    is not allowed when creating an offscreen plain surface. For more information about memory pools, see .

    Off-screen plain surfaces are always lockable, regardless of their pool types.

    +
    + + bb174358 + HRESULT IDirect3DDevice9::CreateOffscreenPlainSurface([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle) + IDirect3DDevice9::CreateOffscreenPlainSurface +
    + + +

    Sets a new color buffer for the device.

    +
    +

    Index of the render target. See Remarks.

    +

    Pointer to a new color buffer. If null, the color buffer for the corresponding RenderTargetIndex is disabled. Devices always must be associated with a color buffer. The new render-target surface must have at least specified.

    +

    If the method succeeds, the return value is . This method will return if either:

    • pRenderTarget = null and RenderTargetIndex = 0
    • pRenderTarget is != null and the render target is invalid.
    + +

    The device can support multiple render targets. The number of render targets supported by a device is contained in the NumSimultaneousRTs member of . See Multiple Render Targets (Direct3D 9).

    Setting a new render target will cause the viewport (see Viewports and Clipping (Direct3D 9)) to be set to the full size of the new render target.

    Some hardware tests the compatibility of the depth stencil buffer with the color buffer. If this is done, it is only done in a debug build.

    Restrictions for using this method include the following:

    • The multisample type must be the same for the render target and the depth stencil surface.
    • The formats must be compatible for the render target and the depth stencil surface. See .
    • The size of the depth stencil surface must be greater than or equal to the size of the render target.

    These restrictions are validated only when using the debug runtime when any of the Draw methods are called.

    Cube textures differ from other surfaces in that they are collections of surfaces. To call with a cube texture, you must select an individual face using and pass the resulting surface to .

    +
    + + bb174455 + HRESULT IDirect3DDevice9::SetRenderTarget([In] unsigned int RenderTargetIndex,[In] IDirect3DSurface9* pRenderTarget) + IDirect3DDevice9::SetRenderTarget +
    + + +

    Retrieves a render-target surface.

    +
    +

    Index of the render target. See Remarks.

    +

    Address of a reference to an interface, representing the returned render-target surface for this device.

    + +

    Typically, methods that return state will not work on a device that is created using . This method however, will work even on a pure device because it returns an interface.

    The device can now support multiple render targets. The number of render targets supported by a device is contained in the NumSimultaneousRTs member of . See Multiple Render Targets (Direct3D 9).

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using the interface results in a memory leak.

    +
    + + bb174404 + HRESULT IDirect3DDevice9::GetRenderTarget([In] unsigned int RenderTargetIndex,[Out] IDirect3DSurface9** ppRenderTarget) + IDirect3DDevice9::GetRenderTarget +
    + + +

    Sets the depth stencil surface.

    +
    +

    Address of a reference to an interface representing the depth stencil surface. Setting this to null disables the depth stencil operation.

    +

    If the method succeeds, the return value is . If pZStencilSurface is other than null, the return value is when the stencil surface is invalid.

    + +

    Restrictions for using this method include the following:

    • The multisample type must be the same for the render target and the depth stencil surface.
    • The formats must be compatible for the render target and the depth stencil surface. See .
    • The size of the depth stencil surface must be greater than or equal to the size of the render target.

    These restrictions are validated only when using the debug runtime when any of the Draw methods are called.

    Cube textures differ from other surfaces in that they are collections of surfaces. To call with a cube texture, you must select an individual face using and pass the resulting surface to .

    +
    + + bb174431 + HRESULT IDirect3DDevice9::SetDepthStencilSurface([In] IDirect3DSurface9* pNewZStencil) + IDirect3DDevice9::SetDepthStencilSurface +
    + + +

    Gets the depth-stencil surface owned by the Direct3DDevice object.

    +
    +

    Address of a reference to an interface, representing the returned depth-stencil surface.

    +

    If the method succeeds, the return value is .If the device doesn't have a depth stencil buffer associated with it, the return value will be . Otherwise, if the method fails, the return value can be .

    + +

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb174384 + HRESULT IDirect3DDevice9::GetDepthStencilSurface([Out] IDirect3DSurface9** ppZStencilSurface) + IDirect3DDevice9::GetDepthStencilSurface +
    + + +

    Begins a scene.

    +
    +

    If the method succeeds, the return value is . The method will fail with if is called while already in a / pair. This happens only when is called twice without first calling .

    + +

    Applications must call before performing any rendering and must call when rendering is complete and before calling again.

    If fails, the device was unable to begin the scene, and there is no need to call . In fact, calls to will fail if the previous failed. This applies to any application that creates multiple swap chains.

    There should be one / pair between any successive calls to present (either or ). should be called once before any rendering is performed, and should be called once after all rendering for a frame has been submitted to the runtime. Multiple non-nested / pairs between calls to present are legal, but having more than one pair may incur a performance hit. To enable maximal parallelism between the CPU and the graphics accelerator, it is advantageous to call as far ahead of calling present as possible.

    +
    + + bb174350 + HRESULT IDirect3DDevice9::BeginScene() + IDirect3DDevice9::BeginScene +
    + + +

    Ends a scene that was begun by calling .

    +
    +

    If the method succeeds, the return value is . The method will fail with if is called while already in a / pair. This happens only when is called twice without first calling .

    + +

    When this method succeeds, the scene has been queued up for rendering by the driver. This is not a synchronous method, so the scene is not guaranteed to have completed rendering when this method returns.

    Applications must call before performing any rendering and must call when rendering is complete and before calling again.

    If fails, the device was unable to begin the scene, and there is no need to call . In fact, calls to will fail if the previous failed. This applies to any application that creates multiple swap chains.

    There should be at most one / pair between any successive calls to present (either or ). should be called once before any rendering is performed, and should be called once after all rendering for a frame has been submitted to the runtime. To enable maximal parallelism between the CPU and the graphics accelerator, it is advantageous to call as far ahead of calling present as possible.

    +
    + + bb174375 + HRESULT IDirect3DDevice9::EndScene() + IDirect3DDevice9::EndScene +
    + + +

    Clears one or more surfaces such as a render target, multiple render targets, a stencil buffer, and a depth buffer.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + +

    Use this method to clear a surface including: a render target, all render targets in an MRT, a stencil buffer, or a depth buffer. Flags determines how many surfaces are cleared. Use pRects to clear a subset of a surface defined by an array of rectangles.

    will fail if you:

    • Try to clear either the depth buffer or the stencil buffer of a render target that does not have an attached depth buffer.
    • Try to clear the stencil buffer when the depth buffer does not contain stencil data.
    +
    + + bb174352 + HRESULT IDirect3DDevice9::Clear([In] unsigned int Count,[In, Buffer, Optional] const D3DRECT* pRects,[In] D3DCLEAR Flags,[In] D3DCOLOR Color,[In] float Z,[In] unsigned int Stencil) + IDirect3DDevice9::Clear +
    + + +

    Sets a single device transformation-related state.

    +
    +

    Device-state variable that is being modified. This parameter can be any member of the enumerated type, or the D3DTS_WORLDMATRIX macro.

    +

    Pointer to a structure that modifies the current transformation.

    +

    If the method succeeds, the return value is . is returned if one of the arguments is invalid.

    + + bb174463 + HRESULT IDirect3DDevice9::SetTransform([In] int State,[In] const D3DMATRIX* pMatrix) + IDirect3DDevice9::SetTransform +
    + + +

    Retrieves a matrix describing a transformation state.

    +
    +

    Device state variable that is being modified. This parameter can be any member of the enumerated type, or the D3DTS_WORLDMATRIX macro.

    +

    Pointer to a structure, describing the returned transformation state.

    + +

    This method will not return device state for a device that is created using . If you want to use this method, you must create your device with any of the other flag values in .

    +
    + + bb174414 + HRESULT IDirect3DDevice9::GetTransform([In] D3DTRANSFORMSTATETYPE State,[Out] D3DMATRIX* pMatrix) + IDirect3DDevice9::GetTransform +
    + + +

    Multiplies a device's world, view, or projection matrices by a specified matrix.

    +
    +

    Member of the enumerated type, or the D3DTS_WORLDMATRIX macro that identifies which device matrix is to be modified. The most common setting, D3DTS_WORLDMATRIX(0), modifies the world matrix, but you can specify that the method modify the view or projection matrices, if needed.

    +

    Pointer to a structure that modifies the current transformation.

    +

    If the method succeeds, the return value is . if one of the arguments is invalid.

    + +

    The multiplication order is pMatrix times State.

    An application might use the method to work with hierarchies of transformations. For example, the geometry and transformations describing an arm might be arranged in the following hierarchy.

     shoulder_transformation upper_arm geometry elbow transformation lower_arm geometry wrist transformation hand geometry	
    +            

    An application might use the following series of calls to render this hierarchy. Not all the parameters are shown in this pseudocode.

     (D3DTS_WORLDMATRIX(0),  shoulder_transform)	
    +            (upper_arm)	
    +            (D3DTS_WORLDMATRIX(0),  elbow_transform)	
    +            (lower_arm)	
    +            (D3DTS_WORLDMATRIX(0),  wrist_transform)	
    +            (hand)
    +
    + + bb174422 + HRESULT IDirect3DDevice9::MultiplyTransform([In] D3DTRANSFORMSTATETYPE arg0,[In] const D3DMATRIX* arg1) + IDirect3DDevice9::MultiplyTransform +
    + + +

    Sets the viewport parameters for the device.

    +
    +

    Pointer to a structure, specifying the viewport parameters to set.

    +

    If the method succeeds, the return value is . If the method fails, it will return . This will happen if pViewport is invalid, or if pViewport describes a region that cannot exist within the render target surface.

    + +

    Direct3D sets the following default values for the viewport.

      vp;	
    +            vp.X      = 0;	
    +            vp.Y      = 0;	
    +            vp.Width  = RenderTarget.Width;	
    +            vp.Height = RenderTarget.Height;	
    +            vp.MinZ   = 0.0f;	
    +            vp.MaxZ   = 1.0f;	
    +            

    can be used to draw on part of the screen. Make sure to call it before any geometry is drawn so the viewport settings will take effect.

    To draw multiple views within a scene, repeat the and draw geometry sequence for each view.

    +
    + + bb174469 + HRESULT IDirect3DDevice9::SetViewport([In] const D3DVIEWPORT9* pViewport) + IDirect3DDevice9::SetViewport +
    + + +

    Retrieves the viewport parameters currently set for the device.

    +
    +

    Pointer to a structure, representing the returned viewport parameters.

    +

    If the method succeeds, the return value is . is returned if the pViewport parameter is invalid.

    + +

    Typically, methods that return state will not work on a device that is created using . This method however, will work even on a pure device.

    +
    + + bb174420 + HRESULT IDirect3DDevice9::GetViewport([Out] D3DVIEWPORT9* pViewport) + IDirect3DDevice9::GetViewport +
    + + +

    Sets the material properties for the device.

    +
    +

    Pointer to a structure, describing the material properties to set.

    +

    If the method succeeds, the return value is . if the pMaterial parameter is invalid.

    + + bb174437 + HRESULT IDirect3DDevice9::SetMaterial([In] const D3DMATERIAL9* pMaterial) + IDirect3DDevice9::SetMaterial +
    + + +

    Retrieves the current material properties for the device.

    +
    +

    Pointer to a structure to fill with the currently set material properties.

    +

    If the method succeeds, the return value is . if the pMaterial parameter is invalid.

    + +

    This method will not return device state for a device that is created using . If you want to use this method, you must create your device with any of the other values in .

    +
    + + bb174394 + HRESULT IDirect3DDevice9::GetMaterial([Out] D3DMATERIAL9* pMaterial) + IDirect3DDevice9::GetMaterial +
    + + +

    Assigns a set of lighting properties for this device.

    +
    +

    Zero-based index of the set of lighting properties to set. If a set of lighting properties exists at this index, it is overwritten by the new properties specified in pLight.

    +

    Pointer to a structure, containing the lighting parameters to set.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Set light properties by preparing a structure and then calling the method. The method accepts the index at which the device should place the set of light properties to its internal list of light properties, and the address of a prepared structure that defines those properties. You can call with new information as needed to update the light's illumination properties.

    The system allocates memory to accommodate a set of lighting properties each time you call the method with an index that has never been assigned properties. Applications can set a number of lights, with only a subset of the assigned lights enabled at a time. Check the MaxActiveLights member of the structure when you retrieve device capabilities to determine the maximum number of active lights supported by that device. If you no longer need a light, you can disable it or overwrite it with a new set of light properties.

    The following example prepares and sets properties for a white point-light whose emitted light will not attenuate over distance.

     // Assume d3dDevice is a valid reference to an  interface.	
    +             d3dLight;	
    +               hr; // Initialize the structure.	
    +            ZeroMemory(&d3dLight, sizeof(d3dLight)); // Set up a white point light.	
    +            d3dLight.Type = ;	
    +            d3dLight.Diffuse.r  = 1.0f;	
    +            d3dLight.Diffuse.g  = 1.0f;	
    +            d3dLight.Diffuse.b  = 1.0f;	
    +            d3dLight.Ambient.r  = 1.0f;	
    +            d3dLight.Ambient.g  = 1.0f;	
    +            d3dLight.Ambient.b  = 1.0f;	
    +            d3dLight.Specular.r = 1.0f;	
    +            d3dLight.Specular.g = 1.0f;	
    +            d3dLight.Specular.b = 1.0f; // Position it high in the scene and behind the user.	
    +            // Remember, these coordinates are in world space, so	
    +            // the user could be anywhere in world space, too. 	
    +            // For the purposes of this example, assume the user	
    +            // is at the origin of world space.	
    +            d3dLight.Position.x = 0.0f;	
    +            d3dLight.Position.y = 1000.0f;	
    +            d3dLight.Position.z = -100.0f; // Don't attenuate.	
    +            d3dLight.Attenuation0 = 1.0f; 	
    +            d3dLight.Range        = 1000.0f; // Set the property information for the first light.	
    +            hr = d3dDevice->SetLight(0, &d3dLight);	
    +            if (SUCCEEDED(hr)) // Handle Success	
    +            else // Handle failure	
    +            

    Enable a light source by calling the method for the device.

    +
    + + bb174436 + HRESULT IDirect3DDevice9::SetLight([In] unsigned int Index,[In] const D3DLIGHT9* arg1) + IDirect3DDevice9::SetLight +
    + + +

    Retrieves a set of lighting properties that this device uses.

    +
    +

    Zero-based index of the lighting property set to retrieve. This method will fail if a lighting property has not been set for this index by calling the method.

    +

    Pointer to a structure that is filled with the retrieved lighting-parameter set.

    + +

    This method will not return device state for a device that is created using . If you want to use this method, you must create your device with any of the other values in .

    Retrieve all the properties for an existing light source by calling the method for the device. When calling the method, pass the zero-based index of the light source for which the properties will be retrieved as the first parameter, and supply the address of a structure as the second parameter. The device fills the structure to describe the lighting properties it uses for the light source at that index.

     // Assume d3dDevice is a valid reference to an  interface.	
    +             hr;	
    +            D3DLight9 light; // Get the property information for the first light.	
    +            hr = pd3dDevice->GetLight(0, &light);	
    +            if (SUCCEEDED(hr)) // Handle Success	
    +            else // Handle failure	
    +            

    If you supply an index outside the range of the light sources assigned in the device, the method fails, returning .

    When you assign a set of light properties for a light source in a scene, the light source can be activated by calling the method for the device. New light sources are disabled by default. The method accepts two parameters. Set the first parameter to the zero-based index of the light source to be affected by the method, and set the second parameter to TRUE to enable the light or to disable it. The following code example illustrates the use of this method by enabling the first light source in the device's list of light source properties.

     // Assume d3dDevice is a valid reference to an  interface.	
    +             hr; hr = pd3dDevice->LightEnable(0, TRUE);	
    +            if (SUCCEEDED(hr)) // Handle Success	
    +            else // Handle failure	
    +            

    Check the MaxActiveLights member of the structure when you retrieve device capabilities to determine the maximum number of active lights supported by that device.

    If you enable or disable a light that has no properties that are set with , the method creates a light source with the properties listed in following table and enables or disables it.

    +
    + + bb174392 + HRESULT IDirect3DDevice9::GetLight([In] unsigned int Index,[Out] D3DLIGHT9* arg1) + IDirect3DDevice9::GetLight +
    + + +

    Enables or disables a set of lighting parameters within a device.

    +
    +

    Zero-based index of the set of lighting parameters that are the target of this method.

    +

    Value that indicates if the set of lighting parameters are being enabled or disabled. Set this parameter to TRUE to enable lighting with the parameters at the specified index, or to disable it.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    If a value for LightIndex is outside the range of the light property sets assigned within the device, the method creates a light source represented by a structure with the following properties and sets its enabled state to the value specified in bEnable.

    MemberDefault
    Type
    Diffuse (R:1, G:1, B:1, A:0)
    Specular (R:0, G:0, B:0, A:0)
    Ambient (R:0, G:0, B:0, A:0)
    Position (0, 0, 0)
    Direction (0, 0, 1)
    Range 0
    Falloff 0
    Attenuation0 0
    Attenuation1 0
    Attenuation2 0
    Theta 0
    Phi 0

    ?

    +
    + + bb174421 + HRESULT IDirect3DDevice9::LightEnable([In] unsigned int Index,[In] BOOL Enable) + IDirect3DDevice9::LightEnable +
    + + +

    Retrieves the activity status - enabled or disabled - for a set of lighting parameters within a device.

    +
    +

    Zero-based index of the set of lighting parameters that are the target of this method.

    +

    Pointer to a variable to fill with the status of the specified lighting parameters. After the call, a nonzero value at this address indicates that the specified lighting parameters are enabled; a value of 0 indicates that they are disabled.

    + +

    This method will not return device state for a device that is created using . If you want to use this method, you must create your device with any of the other values in .

    +
    + + bb174393 + HRESULT IDirect3DDevice9::GetLightEnable([In] unsigned int Index,[Out] BOOL* pEnable) + IDirect3DDevice9::GetLightEnable +
    + + +

    Sets the coefficients of a user-defined clipping plane for the device.

    +
    +

    Index of the clipping plane for which the plane equation coefficients are to be set.

    +

    Pointer to an address of a four-element array of values that represent the clipping plane coefficients to be set, in the form of the general plane equation. See Remarks.

    +

    If the method succeeds, the return value is . If the method fails, the return value is . This error indicates that the value in Index exceeds the maximum clipping plane index supported by the device or that the array at pPlane is not large enough to contain four floating-point values.

    + +

    The coefficients that this method sets take the form of the general plane equation. If the values in the array at pPlane were labeled A, B, C, and D in the order that they appear in the array, they would fit into the general plane equation so that Ax + By + Cz + Dw = 0. A point with homogeneous coordinates (x, y, z, w) is visible in the half space of the plane if Ax + By + Cz + Dw >= 0. Points that exist behind the clipping plane are clipped from the scene.

    When the fixed function pipeline is used the plane equations are assumed to be in world space. When the programmable pipeline is used the plane equations are assumed to be in the clipping space (the same space as output vertices).

    This method does not enable the clipping plane equation being set. To enable a clipping plane, set the corresponding bit in the DWORD value applied to the render state.

    +
    + + bb174426 + HRESULT IDirect3DDevice9::SetClipPlane([In] unsigned int Index,[In] const SHARPDX_VECTOR4* pPlane) + IDirect3DDevice9::SetClipPlane +
    + + +

    Retrieves the coefficients of a user-defined clipping plane for the device.

    +
    +

    Index of the clipping plane for which the plane equation coefficients are retrieved.

    +

    Pointer to a four-element array of values that represent the coefficients of the clipping plane in the form of the general plane equation. See Remarks.

    + +

    This method will not return device state for a device that is created using . If you want to use this method, you must create your device with any of the other values in ."

    The coefficients that this method reports take the form of the general plane equation. If the values in the array at pPlane were labeled A, B, C, and D in the order that they appear in the array, they would fit into the general plane equation so that Ax + By + Cz + Dw = 0. A point with homogeneous coordinates (x, y, z, w) is visible in the half space of the plane if Ax + By + Cz + Dw >= 0. Points that exist on or behind the clipping plane are clipped from the scene.

    The plane equation used by this method exists in world space and is set by a previous call to the method.

    +
    + + bb174380 + HRESULT IDirect3DDevice9::GetClipPlane([In] unsigned int Index,[Out] float* pPlane) + IDirect3DDevice9::GetClipPlane +
    + + +

    Sets a single device render-state parameter.

    +
    +

    Device state variable that is being modified. This parameter can be any member of the enumerated type.

    +

    New value for the device render state to be set. The meaning of this parameter is dependent on the value specified for State. For example, if State were , the second parameter would be one member of the enumerated type.

    +

    If the method succeeds, the return value is . is returned if one of the arguments is invalid.

    + + bb174454 + HRESULT IDirect3DDevice9::SetRenderState([In] D3DRENDERSTATETYPE State,[In] unsigned int Value) + IDirect3DDevice9::SetRenderState +
    + + +

    Retrieves a render-state value for a device.

    +
    +

    Device state variable that is being queried. This parameter can be any member of the enumerated type.

    +

    Pointer to a variable that receives the value of the queried render state variable when the method returns.

    +

    If the method succeeds, the return value is . if one of the arguments is invalid.

    + +

    This method will not return device state for a device that is created using . If you want to use this method, you must create your device with any of the other values in ."

    +
    + + bb174403 + HRESULT IDirect3DDevice9::GetRenderState([In] D3DRENDERSTATETYPE State,[In] void* pValue) + IDirect3DDevice9::GetRenderState +
    + + +

    Creates a new state block that contains the values for all device states, vertex-related states, or pixel-related states.

    +
    +

    Type of state data that the method should capture. This parameter can be set to a value defined in the enumerated type.

    +

    Pointer to a state block interface. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , E_OUTOFMEMORY.

    + +

    Vertex-related device states typically refer to those states that affect how the system processes vertices. Pixel-related states generally refer to device states that affect how the system processes pixel or depth-buffer data during rasterization. Some states are contained in both groups.

    Differences between Direct3D 9 and Direct3D 10:

    In Direct3D 9, a state block contains state data, for the states it was requested to capture, when the object is created. To change the value of the state block, call or /. There is no state saved when a state block object is created in Direct3D 10.

    ?

    +
    + + bb174362 + HRESULT IDirect3DDevice9::CreateStateBlock([In] D3DSTATEBLOCKTYPE Type,[Out, Fast] IDirect3DStateBlock9** ppSB) + IDirect3DDevice9::CreateStateBlock +
    + + +

    Signals Direct3D to begin recording a device-state block.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    Applications can ensure that all recorded states are valid by calling the method prior to calling this method.

    The following methods can be recorded in a state block, after calling and before .

    The ordering of state changes in a state block is not guaranteed. If the same state is specified multiple times in a state block, only the last value is used.

    +
    + + bb174351 + HRESULT IDirect3DDevice9::BeginStateBlock() + IDirect3DDevice9::BeginStateBlock +
    + + +

    Signals Direct3D to stop recording a device-state block and retrieve a reference to the state block interface.

    +
    +

    Pointer to a state block interface. See .

    + + bb174376 + HRESULT IDirect3DDevice9::EndStateBlock([In] IDirect3DStateBlock9** ppSB) + IDirect3DDevice9::EndStateBlock +
    + + +

    Sets the clip status.

    +
    +

    Pointer to a structure, describing the clip status settings to be set.

    +

    If the method succeeds, the return value is . If one of the arguments is invalid, the return value is .

    + +

    Clip status is used during software vertex processing. Therefore, this method is not supported on pure or nonpure hardware processing devices. For more information about pure devices, see .

    When clipping is enabled during vertex processing (by , , or other drawing functions), Direct3D computes a clip code for every vertex. The clip code is a combination of D3DCS_* bits. When a vertex is outside a particular clipping plane, the corresponding bit is set in the clipping code. Direct3D maintains the clip status using , which has ClipUnion and ClipIntersection members. ClipUnion is a bitwise "OR" of all vertex clip codes and ClipIntersection is a bitwise "AND" of all vertex clip codes. Initial values are zero for ClipUnion and 0xFFFFFFFF for ClipIntersection. When is set to , ClipUnion and ClipIntersection are set to zero. Direct3D updates the clip status during drawing calls. To compute clip status for a particular object, set ClipUnion and ClipIntersection to their initial value and continue drawing.

    Clip status is not updated by and because there is no software emulation for them.

    +
    + + bb174427 + HRESULT IDirect3DDevice9::SetClipStatus([In] const D3DCLIPSTATUS9* pClipStatus) + IDirect3DDevice9::SetClipStatus +
    + + +

    Retrieves the clip status.

    +
    +

    Pointer to a structure that describes the clip status.

    +

    If the method succeeds, the return value is .

    is returned if the argument is invalid.

    + +

    When clipping is enabled during vertex processing (by , , or other drawing functions), Direct3D computes a clip code for every vertex. The clip code is a combination of D3DCS_* bits. When a vertex is outside a particular clipping plane, the corresponding bit is set in the clipping code. Direct3D maintains the clip status using , which has ClipUnion and ClipIntersection members. ClipUnion is a bitwise "OR" of all vertex clip codes and ClipIntersection is a bitwise "AND" of all vertex clip codes. Initial values are zero for ClipUnion and 0xFFFFFFFF for ClipIntersection. When is set to , ClipUnion and ClipIntersection are set to zero. Direct3D updates the clip status during drawing calls. To compute clip status for a particular object, set ClipUnion and ClipIntersection to their initial value and continue drawing.

    Clip status is not updated by and because there is no software emulation for them.

    Clip status is used during software vertex processing. Therefore, this method is not supported on pure or nonpure hardware processing devices. For more information about pure devices, see .

    +
    + + bb174381 + HRESULT IDirect3DDevice9::GetClipStatus([Out] D3DCLIPSTATUS9* pClipStatus) + IDirect3DDevice9::GetClipStatus +
    + + +

    Retrieves a texture assigned to a stage for a device.

    +
    +

    Stage identifier of the texture to retrieve. Stage identifiers are zero-based.

    +

    Address of a reference to an interface, representing the returned texture.

    + +

    Typically, methods that return state will not work on a device that is created using . This method however, will work even on a pure device because it returns an interface.

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb174412 + HRESULT IDirect3DDevice9::GetTexture([In] unsigned int Stage,[Out] IDirect3DBaseTexture9** ppTexture) + IDirect3DDevice9::GetTexture +
    + + +

    Assigns a texture to a stage for a device.

    +
    +

    Zero based sampler number. Textures are bound to samplers; samplers define sampling state such as the filtering mode and the address wrapping mode. Textures are referenced differently by the programmable and the fixed function pipeline:

    • Programmable shaders reference textures using the sampler number. The number of samplers available to a programmable shader is dependent on the shader version. For vertex shaders, see Sampler (Direct3D 9 asm-vs). For pixel shaders see Sampler (Direct3D 9 asm-ps).
    • The fixed function pipeline on the other hand, references textures by texture stage number. The maximum number of samplers is determined from two caps: MaxSimultaneousTextures and MaxTextureBlendStages of the structure.

    There are two other special cases for stage/sampler numbers.

    • A special number called D3DDMAPSAMPLER is used for Displacement Mapping (Direct3D 9).
    • A programmable vertex shader uses a special number defined by a when accessing Vertex Textures in vs_3_0 (DirectX HLSL).
    +

    Pointer to an interface, representing the texture being set.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    SetTexture is not allowed if the texture is created with a pool type of . SetTexture is not allowed with a pool type of texture unless DevCaps is set with .

    +
    + + bb174461 + HRESULT IDirect3DDevice9::SetTexture([In] unsigned int Stage,[In] IDirect3DBaseTexture9* pTexture) + IDirect3DDevice9::SetTexture +
    + + +

    Retrieves a state value for an assigned texture.

    +
    +

    Stage identifier of the texture for which the state is retrieved. Stage identifiers are zero-based. Devices can have up to eight set textures, so the maximum value allowed for Stage is 7.

    +

    Texture state to retrieve. This parameter can be any member of the enumerated type.

    +

    Pointer a variable to fill with the retrieved state value. The meaning of the retrieved value is determined by the Type parameter.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method will not return device state for a device that is created using . If you want to use this method, you must create your device with any of the other flag values in ."

    +
    + + bb174413 + HRESULT IDirect3DDevice9::GetTextureStageState([In] unsigned int Stage,[In] D3DTEXTURESTAGESTATETYPE Type,[In] void* pValue) + IDirect3DDevice9::GetTextureStageState +
    + + +

    Sets the state value for the currently assigned texture.

    +
    +

    Stage identifier of the texture for which the state value is set. Stage identifiers are zero-based. Devices can have up to eight set textures, so the maximum value allowed for Stage is 7.

    +

    Texture state to set. This parameter can be any member of the enumerated type.

    +

    State value to set. The meaning of this value is determined by the Type parameter.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174462 + HRESULT IDirect3DDevice9::SetTextureStageState([In] unsigned int Stage,[In] D3DTEXTURESTAGESTATETYPE Type,[In] unsigned int Value) + IDirect3DDevice9::SetTextureStageState +
    + + +

    Gets the sampler state value.

    +
    +

    The sampler stage index.

    +

    This parameter can be any member of the enumerated type.

    +

    State value to get. The meaning of this value is determined by the Type parameter.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method will not return device state for a device that is created using . If you want to use this method, you must create your device with any of the other values in ."

    +
    + + bb174406 + HRESULT IDirect3DDevice9::GetSamplerState([In] unsigned int Sampler,[In] D3DSAMPLERSTATETYPE Type,[In] void* pValue) + IDirect3DDevice9::GetSamplerState +
    + + +

    Sets the sampler state value.

    +
    +

    The sampler stage index. For more info about sampler stage, see Sampling Stage Registers in vs_3_0 (DirectX HLSL).

    +

    This parameter can be any member of the enumerated type.

    +

    State value to set. The meaning of this value is determined by the Type parameter.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174456 + HRESULT IDirect3DDevice9::SetSamplerState([In] unsigned int Sampler,[In] D3DSAMPLERSTATETYPE Type,[In] unsigned int Value) + IDirect3DDevice9::SetSamplerState +
    + + +

    Reports the device's ability to render the current texture-blending operations and arguments in a single pass.

    +
    +

    Pointer to a DWORD value to fill with the number of rendering passes needed to complete the desired effect through multipass rendering.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , , , , , , , , , , ,.

    + +

    The method should be used to validate scenarios only when other capabilities are deficient. For example, in a multistage texturing scenario, you could query the MaxTextureBlendStages and MaxSimultaneousTextures members of a structure to determine if multistage texturing is possible on the device.

    Current hardware does not necessarily implement all possible combinations of operations and arguments. You can determine whether a particular blending operation can be performed with given arguments by setting the desired blending operation, and then calling the method.

    The method uses the current render states, textures, and texture-stage states to perform validation at the time of the call. Changes to these factors after the call invalidate the previous result, and the method must be called again before rendering a scene.

    For best performance, call at initialization time; do not use it within a render loop.

    Using diffuse iterated values, either as an argument or as an operation (D3DTA_DIFFUSED3DTOP_BLENDDIFFUSEALPHA) is rarely supported on current hardware. Most hardware can introduce iterated color data only at the last texture operation stage.

    Try to specify the texture () for each stage as the first argument, rather than the second argument.

    Many cards do not support use of diffuse or scalar values at arbitrary texture stages. Often, these are available only at the first or last texture-blending stage.

    Many cards do not have a blending unit associated with the first texture that is capable of more than replicating alpha to color channels or inverting the input. Therefore, your application might need to use only the second texture stage, if possible. On such hardware, the first unit is presumed to be in its default state, which has the first color argument set to with the operation.

    Operations on the output alpha that are more intricate than or substantially different from the color operations are less likely to be supported.

    Some hardware does not support simultaneous use of and .

    Many cards do not support simultaneous use of multiple textures and mipmapped trilinear filtering. If trilinear filtering has been requested for a texture involved in multitexture blending operations and validation fails, turn off trilinear filtering and revalidate. In this case, you might want to perform multipass rendering instead.

    +
    + + bb205859 + HRESULT IDirect3DDevice9::ValidateDevice([In] unsigned int* pNumPasses) + IDirect3DDevice9::ValidateDevice +
    + + +

    Sets palette entries.

    +
    +

    An ordinal value identifying the particular palette upon which the operation is to be performed.

    +

    Pointer to a structure, representing the palette entries to set. The number of structures pointed to by pEntries is assumed to be 256. See Remarks.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    For Direct3D 9 applications, any palette sent to this method must conform to the capability bit of the structure. If is not set, every entry in the palette must have alpha set to 1.0 or this method will fail with . If is set, then any set of alpha values are allowed. Note that the debug runtime will print a warning message if all palette entries have alpha set to 0.

    A single logical palette is associated with the device, and is shared by all texture stages.

    +
    + + bb174439 + HRESULT IDirect3DDevice9::SetPaletteEntries([In] unsigned int PaletteNumber,[In, Buffer] const PALETTEENTRY* pEntries) + IDirect3DDevice9::SetPaletteEntries +
    + + +

    Retrieves palette entries.

    +
    +

    An ordinal value identifying the particular palette to retrieve.

    +

    Pointer to a structure, representing the returned palette entries.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    For more information about , see the Platform SDK.

    Note??As of Direct3D 9, the peFlags member of the structure does not work the way it is documented in the Platform SDK. The peFlags member is now the alpha channel for 8-bit palettized formats.

    +
    + + bb174397 + HRESULT IDirect3DDevice9::GetPaletteEntries([In] unsigned int PaletteNumber,[In, Buffer] PALETTEENTRY* pEntries) + IDirect3DDevice9::GetPaletteEntries +
    + + +

    Sets the current texture palette.

    +
    +

    Value that specifies the texture palette to set as the current texture palette.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A single logical palette is associated with the device, and is shared by all texture stages.

    +
    + + bb174428 + HRESULT IDirect3DDevice9::SetCurrentTexturePalette([In] unsigned int PaletteNumber) + IDirect3DDevice9::SetCurrentTexturePalette +
    + + +

    Retrieves the current texture palette.

    +
    +

    Pointer to a returned value that identifies the current texture palette.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + + bb174383 + HRESULT IDirect3DDevice9::GetCurrentTexturePalette([Out] unsigned int* PaletteNumber) + IDirect3DDevice9::GetCurrentTexturePalette +
    + + +

    Sets the scissor rectangle.

    +
    +

    Pointer to a structure that defines the rendering area within the render target if scissor test is enabled. This parameter may not be null.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    The scissor rectangle is used as a rectangular clipping region.

    See Rectangles (Direct3D 9) for further information on the use of rectangles in DirectX.

    +
    + + bb174457 + HRESULT IDirect3DDevice9::SetScissorRect([In] const RECT* pRect) + IDirect3DDevice9::SetScissorRect +
    + + +

    Gets the scissor rectangle.

    +
    +

    Returns a reference to a structure that defines the rendering area within the render target if scissor test is enabled.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be the following: .

    + +

    The scissor rectangle is used as a rectangular clipping region.

    See Rectangles (Direct3D 9) for further information on the use of rectangles in DirectX.

    +
    + + bb174407 + HRESULT IDirect3DDevice9::GetScissorRect([Out] RECT* pRect) + IDirect3DDevice9::GetScissorRect +
    + + +

    Use this method to switch between software and hardware vertex processing.

    +
    +

    TRUE to specify software vertex processing; to specify hardware vertex processing.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    The restrictions for changing modes are as follows:

    • If a device is created with , the vertex processing will be done in software and cannot be changed.
    • If a device is created with , the vertex processing will be done in hardware and cannot be changed.
    • If a device is created with , the vertex processing will be done in hardware by default. The processing can be switched to software (or back to hardware) using .

    An application can create a mixed-mode device to use both the software vertex processing and the hardware vertex processing. To switch between the two vertex processing modes in DirectX 8.x, use IDirect3DDevice8::SetRenderState with the render state D3DRS_SOFTWAREVERTEXPROCESSING and the appropriate DWORD argument. The drawback of the render state approach was the difficulty in defining the semantics for state blocks. Applications and the runtime had to do extra work and be careful while recording and playing back state blocks.

    In Direct3D 9, use SetSoftwareVertexProcessing instead. This new API is not recorded by StateBlocks.

    +
    + + bb174458 + HRESULT IDirect3DDevice9::SetSoftwareVertexProcessing([In] BOOL bSoftware) + IDirect3DDevice9::SetSoftwareVertexProcessing +
    + + +

    Gets the vertex processing (hardware or software) mode.

    +
    +

    Returns TRUE if software vertex processing is set. Otherwise, it returns .

    + +

    An application can create a mixed-mode device to use both the software vertex processing and the hardware vertex processing. To switch between the two vertex processing modes in DirectX 8.x, use with the render state D3DRS_SOFTWAREVERTEXPROCESSING and the appropriate argument. The drawback of the render state approach was the difficulty in defining the semantics for state blocks. Applications and the runtime had to do extra work and be careful while recording and playing back state blocks.

    In Direct3D 9, use instead. This new API is not recorded by StateBlocks.

    +
    + + bb174408 + BOOL IDirect3DDevice9::GetSoftwareVertexProcessing() + IDirect3DDevice9::GetSoftwareVertexProcessing +
    + + +

    Enable or disable N-patches.

    +
    +

    Specifies the number of subdivision segments. If the number of segments is less than 1.0, N-patches are disabled. The default value is 0.0.

    +

    If the method succeeds, the return value is .

    + + bb174438 + HRESULT IDirect3DDevice9::SetNPatchMode([In] float nSegments) + IDirect3DDevice9::SetNPatchMode +
    + + +

    Gets the N-patch mode segments.

    +
    +

    Specifies the number of subdivision segments. If the number of segments is less than 1.0, N-patches are disabled. The default value is 0.0.

    + + bb174395 + float IDirect3DDevice9::GetNPatchMode() + IDirect3DDevice9::GetNPatchMode +
    + + +

    Renders a sequence of nonindexed, geometric primitives of the specified type from the current set of data input streams.

    +
    +

    Member of the enumerated type, describing the type of primitive to render.

    +

    Index of the first vertex to load. Beginning at StartVertex the correct number of vertices will be read out of the vertex buffer.

    +

    Number of primitives to render. The maximum number of primitives allowed is determined by checking the MaxPrimitiveCount member of the structure. PrimitiveCount is the number of primitives as determined by the primitive type. If it is a line list, each primitive has two vertices. If it is a triangle list, each primitive has three vertices.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    When converting a legacy application to Direct3D 9, you must add a call to either to use the fixed function pipeline, or to use a vertex shader before you make any Draw calls.

    +
    + + bb174371 + HRESULT IDirect3DDevice9::DrawPrimitive([In] D3DPRIMITIVETYPE PrimitiveType,[In] unsigned int StartVertex,[In] unsigned int PrimitiveCount) + IDirect3DDevice9::DrawPrimitive +
    + + +

    Based on indexing, renders the specified geometric primitive into an array of vertices.

    +
    +

    Member of the enumerated type, describing the type of primitive to render. is not supported with this method. See Remarks.

    +

    Offset from the start of the vertex buffer to the first vertex. See Scenario 4.

    +

    Minimum vertex index for vertices used during this call. This is a zero based index relative to BaseVertexIndex.

    +

    Number of vertices used during this call. The first vertex is located at index: BaseVertexIndex + MinIndex.

    +

    Index of the first index to use when accesssing the vertex buffer. Beginning at StartIndex to index vertices from the vertex buffer.

    +

    Number of primitives to render. The number of vertices used is a function of the primitive count and the primitive type. The maximum number of primitives allowed is determined by checking the MaxPrimitiveCount member of the structure.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be the following: .

    + +

    This method draws indexed primitives from the current set of data input streams. MinIndex and all the indices in the index stream are relative to the BaseVertexIndex.

    The MinIndex and NumVertices parameters specify the range of vertex indices used for each call. These are used to optimize vertex processing of indexed primitives by processing a sequential range of vertices prior to indexing into these vertices. It is invalid for any indices used during this call to reference any vertices outside of this range.

    fails if no index array is set.

    The member of the enumerated type is not supported and is not a valid type for this method.

    When converting a legacy application to Direct3D 9, you must add a call to either to use the fixed function pipeline, or to use a vertex shader before you make any Draw calls.

    +
    + + bb174369 + HRESULT IDirect3DDevice9::DrawIndexedPrimitive([In] D3DPRIMITIVETYPE arg0,[In] int BaseVertexIndex,[In] unsigned int MinVertexIndex,[In] unsigned int NumVertices,[In] unsigned int startIndex,[In] unsigned int primCount) + IDirect3DDevice9::DrawIndexedPrimitive +
    + + +

    Renders data specified by a user memory reference as a sequence of geometric primitives of the specified type.

    +
    +

    Member of the enumerated type, describing the type of primitive to render.

    +

    Number of primitives to render. The maximum number of primitives allowed is determined by checking the MaxPrimitiveCount member of the structure.

    +

    User memory reference to the vertex data.

    +

    The number of bytes of data for each vertex. This value may not be 0.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + +

    This method is intended for use in applications that are unable to store their vertex data in vertex buffers. This method supports only a single vertex stream. The effect of this call is to use the provided vertex data reference and stride for vertex stream 0. It is invalid to have the declaration of the current vertex shader refer to vertex streams other than stream 0.

    Following any call, the stream 0 settings, referenced by , are set to null.

    The vertex data passed to does not need to persist after the call. Direct3D completes its access to that data prior to returning from the call.

    When converting a legacy application to Direct3D 9, you must add a call to either to use the fixed function pipeline, or to use a vertex shader before you make any Draw calls.

    +
    + + bb174372 + HRESULT IDirect3DDevice9::DrawPrimitiveUP([In] D3DPRIMITIVETYPE PrimitiveType,[In] unsigned int PrimitiveCount,[In] const void* pVertexStreamZeroData,[In] unsigned int VertexStreamZeroStride) + IDirect3DDevice9::DrawPrimitiveUP +
    + + +

    Renders the specified geometric primitive with data specified by a user memory reference.

    +
    +

    Member of the enumerated type, describing the type of primitive to render.

    +

    Minimum vertex index. This is a zero-based index.

    +

    Number of vertices used during this call. The first vertex is located at index: MinVertexIndex.

    +

    Number of primitives to render. The maximum number of primitives allowed is determined by checking the MaxPrimitiveCount member of the structure (the number of indices is a function of the primitive count and the primitive type).

    +

    User memory reference to the index data.

    +

    Member of the enumerated type, describing the format of the index data. The valid settings are either:

    +

    User memory reference to the vertex data. The vertex data must be in stream 0.

    +

    The number of bytes of data for each vertex. This value may not be 0.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be the following: .

    + +

    This method is intended for use in applications that are unable to store their vertex data in vertex buffers. This method supports only a single vertex stream, which must be declared as stream 0.

    Following any call, the stream 0 settings, referenced by , are set to null. Also, the index buffer setting for is set to null.

    The vertex data passed to does not need to persist after the call. Direct3D completes its access to that data prior to returning from the call.

    When converting a legacy application to Direct3D 9, you must add a call to either to use the fixed function pipeline, or to use a vertex shader before you make any Draw calls.

    +
    + + bb174370 + HRESULT IDirect3DDevice9::DrawIndexedPrimitiveUP([In] D3DPRIMITIVETYPE PrimitiveType,[In] unsigned int MinVertexIndex,[In] unsigned int NumVertices,[In] unsigned int PrimitiveCount,[In] const void* pIndexData,[In] D3DFORMAT IndexDataFormat,[In] const void* pVertexStreamZeroData,[In] unsigned int VertexStreamZeroStride) + IDirect3DDevice9::DrawIndexedPrimitiveUP +
    + + +

    Applies the vertex processing defined by the vertex shader to the set of input data streams, generating a single stream of interleaved vertex data to the destination vertex buffer.

    +
    +

    Index of first vertex to load.

    +

    Index of first vertex in the destination vertex buffer into which the results are placed.

    +

    Number of vertices to process.

    +

    Pointer to an interface, the destination vertex buffer representing the stream of interleaved vertex data.

    +

    Pointer to an interface that represents the output vertex data declaration. When vertex shader 3.0 or above is set as the current vertex shader, the output vertex declaration must be present.

    +

    Processing options. Set this parameter to 0 for default processing. Set to D3DPV_DONOTCOPYDATA to prevent the system from copying vertex data not affected by the vertex operation into the destination buffer. The D3DPV_DONOTCOPYDATA value may be combined with one or more values appropriate for the destination buffer.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    The order of operations for this method is as follows:

    • Transform vertices to projection space using the world + view + projection matrix.
    • Compute screen coordinates using viewport settings.
    • If clipping is enabled, compute clipping codes and store them in an internal buffer, associated with the destination vertex buffer. If a vertex is inside the viewing frustum, its screen coordinates are computed. If the vertex is outside the viewing frustum, the vertex is stored in the destination vertex buffer in projection space coordinates.
    • Other notes: The user does not have access to the internal clip code buffer. No clipping is done on triangles or any other primitives.

    The destination vertex buffer, pDestBuffer, must be created with a nonzero FVF parameter in . The FVF code specified during the call to the method specifies the vertex elements present in the destination vertex buffer.

    When Direct3D generates texture coordinates, or copies or transforms input texture coordinates, and the output texture coordinate format defines more texture coordinate components than Direct3D generates, Direct3D does not change these extra components.

    +
    + + bb174424 + HRESULT IDirect3DDevice9::ProcessVertices([In] unsigned int SrcStartIndex,[In] unsigned int DestIndex,[In] unsigned int VertexCount,[In] IDirect3DVertexBuffer9* pDestBuffer,[In] IDirect3DVertexDeclaration9* pVertexDecl,[In] D3DLOCK Flags) + IDirect3DDevice9::ProcessVertices +
    + + +

    Create a vertex shader declaration from the device and the vertex elements.

    +
    +

    An array of vertex elements.

    +

    Pointer to an reference that returns the created vertex shader declaration.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    See the Vertex Declaration (Direct3D 9) page for a detailed description of how to map vertex declarations between different versions of DirectX.

    +
    + + bb174365 + HRESULT IDirect3DDevice9::CreateVertexDeclaration([In, Buffer] const D3DVERTEXELEMENT9* pVertexElements,[Out, Fast] IDirect3DVertexDeclaration9** ppDecl) + IDirect3DDevice9::CreateVertexDeclaration +
    + + +

    Sets a Vertex Declaration (Direct3D 9).

    +
    + No documentation. +

    If the method succeeds, the return value is . The return value can be .

    + +

    A vertex declaration is an object that defines the data members of a vertex (i.e. texture coordinates, colors, normals, etc.). This data can be useful for implementing vertex shaders and pixel shaders.

    +
    + + bb174464 + HRESULT IDirect3DDevice9::SetVertexDeclaration([In] IDirect3DVertexDeclaration9* pDecl) + IDirect3DDevice9::SetVertexDeclaration +
    + + +

    Gets a vertex shader declaration.

    +
    +

    Pointer to an object that is returned.

    +

    If the method succeeds, the return value is . The return value can be .

    + + bb174415 + HRESULT IDirect3DDevice9::GetVertexDeclaration([Out] IDirect3DVertexDeclaration9** ppDecl) + IDirect3DDevice9::GetVertexDeclaration +
    + + +

    Sets the current vertex stream declaration.

    +
    +

    DWORD containing the fixed function vertex type. For more information, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + +

    Here are the steps necessary to initialize and use vertices that have a position, diffuse and specular color, and texture coordinates:

    1. Define the custom vertex type and FVF code.
       struct LVertex	
      +            { FLOAT    x, y, z;  specular, diffuse; FLOAT    tu, tv;	
      +            }; const DWORD VertexFVF = ( |  |  |  );	
      +            
    2. Create a vertex buffer with enough room for four vertices using .
       g_d3dDevice->CreateVertexBuffer( 4*sizeof(LVertex),   , VertexFVF, , &pBigSquareVB, null );	
      +            
    3. Set the values for each vertex.
       LVertex * v;	
      +            pBigSquareVB->Lock( 0, 0, (BYTE**)&v, 0 ); v[0].x  = 0.0f;  v[0].y  = 10.0;  v[0].z  = 10.0f;	
      +            v[0].diffuse  = 0xffff0000;	
      +            v[0].specular = 0xff00ff00;	
      +            v[0].tu = 0.0f;  v[0].tv = 0.0f; v[1].x  = 0.0f;  v[1].y  = 0.0f;  v[1].z  = 10.0f;	
      +            v[1].diffuse  = 0xff00ff00;	
      +            v[1].specular = 0xff00ffff;	
      +            v[1].tu = 0.0f;  v[1].tv = 0.0f; v[2].x  = 10.0f; v[2].y  = 10.0f; v[2].z  = 10.0f;	
      +            v[2].diffuse  = 0xffff00ff;	
      +            v[2].specular = 0xff000000;	
      +            v[2].tu = 0.0f;  v[2].tv = 0.0f; v[3].x  = 0.0f; v[3].y  = 10.0f;  v[3].z = 10.0f;	
      +            v[3].diffuse  = 0xffffff00;	
      +            v[3].specular = 0xffff0000;	
      +            v[3].tu = 0.0f; v[3].tv = 0.0f; pBigSquareVB->Unlock();	
      +            
    4. The vertex buffer has been initialized and is ready to render. The following code example shows how to use the legacy FVF to draw a square.
       g_d3dDevice->SetFVF(VertexFVF);	
      +            g_d3dDevice->SetStreamSource(0, pBigSquareVB, 0, sizeof(LVertex));	
      +            g_d3dDevice->DrawPrimitive(, 0 ,2);	
      +            

    Here are the steps necessary to initialize and use vertices that have a position, a normal, and texture coordinates:

    1. Define the custom vertex type and FVF code.
       struct Vertex	
      +            { FLOAT x, y, z; FLOAT nx, ny, nz; FLOAT tu, tv;	
      +            }; const DWORD VertexFVF = (  |  |  );	
      +            
    2. Create a vertex buffer with enough room for four vertices using (similar to the example above).
    3. Set the values for each vertex.
       Vertex * v;	
      +            pBigSquareVB->Lock(0, 0, (BYTE**)&v, 0); v[0].x  = 0.0f;  v[0].y  = 10.0;  v[0].z  = 10.0f;	
      +            v[0].nx = 0.0f;  v[0].ny = 1.0f;  v[0].nz = 0.0f;	
      +            v[0].tu = 0.0f;  v[0].tv = 0.0f; v[1].x  = 0.0f;  v[1].y  = 0.0f;  v[1].z  = 10.0f;	
      +            v[1].nx = 0.0f;  v[1].ny = 1.0f;  v[1].nz = 0.0f;	
      +            v[1].tu = 0.0f;  v[1].tv = 0.0f; v[2].x  = 10.0f; v[2].y  = 10.0f; v[2].z  = 10.0f;	
      +            v[2].nx = 0.0f;  v[2].ny = 1.0f;  v[2].nz = 0.0f;	
      +            v[2].tu = 0.0f;  v[2].tv = 0.0f; v[3].x  = 0.0f; v[3].y  = 10.0f;  v[3].z = 10.0f;	
      +            v[3].nx = 0.0f; v[3].ny = 1.0f;   v[3].nz = 0.0f;	
      +            v[3].tu = 0.0f; v[3].tv = 0.0f; pBigSquareVB->Unlock();	
      +            
    4. Draw the object (similar to the example above).
    +
    + + bb174433 + HRESULT IDirect3DDevice9::SetFVF([In] D3DFVF FVF) + IDirect3DDevice9::SetFVF +
    + + +

    Gets the fixed vertex function declaration.

    +
    +

    A DWORD reference to the fixed function vertex type. For more information, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    The fixed vertex function declaration is a set of FVF flags that determine how vertices processed by the fixed function pipeline will be used.

    +
    + + bb174389 + HRESULT IDirect3DDevice9::GetFVF([Out] D3DFVF* pFVF) + IDirect3DDevice9::GetFVF +
    + + +

    Creates a vertex shader.

    +
    +

    Pointer to an array of tokens that represents the vertex shader, including any embedded debug and symbol table information.

    • Use a function such as to create the array from a HLSL shader.
    • Use a function like to create the token array from an assembly language shader.
    • Use a function like to create the array from an effect.
    +

    Pointer to the returned vertex shader interface (see ).

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , E_OUTOFMEMORY.

    + +

    When a device is created, uses the behavior flag to determine whether to process vertices in hardware or software. There are three possibilities:

    • Process vertices in hardware by setting .
    • Process vertices in software by setting .
    • Process vertices in either hardware or software by setting . To switch a mixed-mode device between software and hardware processing, use .

    For an example using , see HLSLwithoutEffects Sample.

    +
    + + bb174366 + HRESULT IDirect3DDevice9::CreateVertexShader([In] const void* pFunction,[Out, Fast] IDirect3DVertexShader9** ppShader) + IDirect3DDevice9::CreateVertexShader +
    + + +

    Sets the vertex shader.

    +
    +

    Vertex shader interface. For more information, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    To set a fixed-function vertex shader (after having set a programmable vertex shader), call (null) to release the programmable shader, and then call with the fixed-function vertex format.

    +
    + + bb174465 + HRESULT IDirect3DDevice9::SetVertexShader([In] IDirect3DVertexShader9* pShader) + IDirect3DDevice9::SetVertexShader +
    + + +

    Retrieves the currently set vertex shader.

    +
    +

    Pointer to a vertex shader interface.

    +

    If the method succeeds, the return value is . If ppShader is invalid, is returned.

    + +

    Typically, methods that return state will not work on a device that is created using . This method however, will work even on a pure device because it returns an interface.

    +
    + + bb174416 + HRESULT IDirect3DDevice9::GetVertexShader([Out] IDirect3DVertexShader9** ppShader) + IDirect3DDevice9::GetVertexShader +
    + + +

    Sets a floating-point vertex shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of four float vectors in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174467 + HRESULT IDirect3DDevice9::SetVertexShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + IDirect3DDevice9::SetVertexShaderConstantF +
    + + +

    Gets a floating-point vertex shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of four float vectors in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174418 + HRESULT IDirect3DDevice9::GetVertexShaderConstantF([In] unsigned int StartRegister,[In, Buffer] float* pConstantData,[In] unsigned int Vector4fCount) + IDirect3DDevice9::GetVertexShaderConstantF +
    + + +

    Sets an integer vertex shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of four integer vectors in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174468 + HRESULT IDirect3DDevice9::SetVertexShaderConstantI([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4iCount) + IDirect3DDevice9::SetVertexShaderConstantI +
    + + +

    Gets an integer vertex shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of four integer vectors in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174419 + HRESULT IDirect3DDevice9::GetVertexShaderConstantI([In] unsigned int StartRegister,[In, Buffer] int* pConstantData,[In] unsigned int Vector4iCount) + IDirect3DDevice9::GetVertexShaderConstantI +
    + + +

    Sets a Boolean vertex shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of boolean values in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174466 + HRESULT IDirect3DDevice9::SetVertexShaderConstantB([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int BoolCount) + IDirect3DDevice9::SetVertexShaderConstantB +
    + + +

    Gets a Boolean vertex shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of Boolean values in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174417 + HRESULT IDirect3DDevice9::GetVertexShaderConstantB([In] unsigned int StartRegister,[In] void* pConstantData,[In] unsigned int BoolCount) + IDirect3DDevice9::GetVertexShaderConstantB +
    + + +

    Binds a vertex buffer to a device data stream. For more information, see Setting the Stream Source (Direct3D 9).

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    When a FVF vertex shader is used, the stride of the vertex stream must match the vertex size, computed from the FVF. When a declaration is used, the stride should be greater than or equal to the stream size computed from the declaration.

    When calling SetStreamSource, the stride is normally required to be equal to the vertex size. However, there are times when you may want to draw multiple instances of the same or similar geometry (such as when using instancing to draw). For this case, use a zero stride to tell the runtime not to increment the vertex buffer offset (ie: use the same vertex data for all instances). For more information about instancing, see Efficiently Drawing Multiple Instances of Geometry (Direct3D 9).

    +
    + + bb174459 + HRESULT IDirect3DDevice9::SetStreamSource([In] unsigned int StreamNumber,[In] IDirect3DVertexBuffer9* pStreamData,[In] unsigned int OffsetInBytes,[In] unsigned int Stride) + IDirect3DDevice9::SetStreamSource +
    + + +

    Retrieves a vertex buffer bound to the specified data stream.

    +
    +

    Specifies the data stream, in the range from 0 to the maximum number of streams minus one.

    +

    Address of a reference to an interface, representing the returned vertex buffer bound to the specified data stream.

    +

    Pointer containing the offset from the beginning of the stream to the beginning of the vertex data. The offset is measured in bytes. See Remarks.

    +

    Pointer to a returned stride of the component, in bytes. See Remarks.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A stream is defined as a uniform array of component data, where each component consists of one or more elements representing a single entity such as position, normal, color, and so on.

    When a FVF vertex shader is used, the stride of the vertex stream must match the vertex size, computed from the FVF. When a declaration is used, the stride should be greater than or equal to the stream size computed from the declaration.

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb174409 + HRESULT IDirect3DDevice9::GetStreamSource([In] unsigned int StreamNumber,[Out] IDirect3DVertexBuffer9** ppStreamData,[Out] unsigned int* pOffsetInBytes,[Out] unsigned int* pStride) + IDirect3DDevice9::GetStreamSource +
    + + +

    Sets the stream source frequency divider value. This may be used to draw several instances of geometry.

    +
    +

    Stream source number.

    +

    This parameter may have two different values. See remarks.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    There are two constants defined in d3d9types.h that are designed to use with SetStreamSourceFreq: and . To see how to use the constants, see Efficiently Drawing Multiple Instances of Geometry (Direct3D 9).

    +
    + + bb174460 + HRESULT IDirect3DDevice9::SetStreamSourceFreq([In] unsigned int StreamNumber,[In] unsigned int Setting) + IDirect3DDevice9::SetStreamSourceFreq +
    + + +

    Gets the stream source frequency divider value.

    +
    +

    Stream source number.

    +

    Returns the frequency divider value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Vertex shaders can now be invoked more than once per vertex. See Drawing Non-Indexed Geometry.

    +
    + + bb174410 + HRESULT IDirect3DDevice9::GetStreamSourceFreq([In] unsigned int StreamNumber,[Out] unsigned int* pSetting) + IDirect3DDevice9::GetStreamSourceFreq +
    + + +

    Sets index data.

    +
    +

    Pointer to an interface, representing the index data to be set.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + +

    When an application no longer holds a references to this interface, the interface will automatically be freed.

    The method sets the current index array to an index buffer. The single set of indices is used to index all streams.

    +
    + + bb174435 + HRESULT IDirect3DDevice9::SetIndices([In] IDirect3DIndexBuffer9* pIndexData) + IDirect3DDevice9::SetIndices +
    + + +

    Retrieves index data.

    +
    +

    Address of a reference to an interface, representing the returned index data.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb174391 + HRESULT IDirect3DDevice9::GetIndices([Out] IDirect3DIndexBuffer9** ppIndexData) + IDirect3DDevice9::GetIndices +
    + + +

    Creates a pixel shader.

    +
    +

    Pointer to the pixel shader function token array, specifying the blending operations. This value cannot be null.

    +

    Pointer to the returned pixel shader interface. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , E_OUTOFMEMORY.

    + + bb174359 + HRESULT IDirect3DDevice9::CreatePixelShader([In] const void* pFunction,[Out, Fast] IDirect3DPixelShader9** ppShader) + IDirect3DDevice9::CreatePixelShader +
    + + +

    Sets the current pixel shader to a previously created pixel shader.

    +
    +

    Pixel shader interface.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174450 + HRESULT IDirect3DDevice9::SetPixelShader([In] IDirect3DPixelShader9* pShader) + IDirect3DDevice9::SetPixelShader +
    + + +

    Retrieves the currently set pixel shader.

    +
    +

    Pointer to a pixel shader interface.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method will not work on a device that is created using .

    +
    + + bb174398 + HRESULT IDirect3DDevice9::GetPixelShader([Out] IDirect3DPixelShader9** ppShader) + IDirect3DDevice9::GetPixelShader +
    + + +

    Sets a floating-point shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of four float vectors in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174452 + HRESULT IDirect3DDevice9::SetPixelShaderConstantF([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4fCount) + IDirect3DDevice9::SetPixelShaderConstantF +
    + + +

    Gets a floating-point shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of four float vectors in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174400 + HRESULT IDirect3DDevice9::GetPixelShaderConstantF([In] unsigned int StartRegister,[In, Buffer] float* pConstantData,[In] unsigned int Vector4fCount) + IDirect3DDevice9::GetPixelShaderConstantF +
    + + +

    Sets an integer shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of four integer vectors in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174453 + HRESULT IDirect3DDevice9::SetPixelShaderConstantI([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int Vector4iCount) + IDirect3DDevice9::SetPixelShaderConstantI +
    + + +

    Gets an integer shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of four integer vectors in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174401 + HRESULT IDirect3DDevice9::GetPixelShaderConstantI([In] unsigned int StartRegister,[In, Buffer] int* pConstantData,[In] unsigned int Vector4iCount) + IDirect3DDevice9::GetPixelShaderConstantI +
    + + +

    Sets a Boolean shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of boolean values in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174451 + HRESULT IDirect3DDevice9::SetPixelShaderConstantB([In] unsigned int StartRegister,[In] const void* pConstantData,[In] unsigned int BoolCount) + IDirect3DDevice9::SetPixelShaderConstantB +
    + + +

    Gets a Boolean shader constant.

    +
    +

    Register number that will contain the first constant value.

    +

    Pointer to an array of constants.

    +

    Number of Boolean values in the array of constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174399 + HRESULT IDirect3DDevice9::GetPixelShaderConstantB([In] unsigned int StartRegister,[In] void* pConstantData,[In] unsigned int BoolCount) + IDirect3DDevice9::GetPixelShaderConstantB +
    + + +

    Draws a rectangular patch using the currently set streams.

    +
    +

    Handle to the rectangular patch to draw.

    +

    Pointer to an array of four floating-point values that identify the number of segments each edge of the rectangle patch should be divided into when tessellated. See .

    +

    Pointer to a structure, describing the rectangular patch to draw.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    For static patches: Set the vertex shader, set the appropriate streams, supply patch information in the pRectPatchInfo parameter, and specify a handle so that Direct3D can capture and cache information. Call subsequently with pRectPatchInfo set to null to efficiently draw the patch. When drawing a cached patch, the currently set streams are ignored. Override the cached pNumSegs by specifying a new value for pNumSegs. When rendering a cached patch, you must set the same vertex shader that was set when it was captured.

    Calling with a handle invalidates the same handle cached by a previous call.

    For dynamic patches, the patch data changes for every rendering of the patch, so it is not efficient to cache information. The application can convey this to Direct3D by setting Handle to 0. In this case, Direct3D draws the patch using the currently set streams and the pNumSegs values, and does not cache any information. It is not valid to simultaneously set Handle to 0 and pRectPatchInfo to null.

    +
    + + bb174373 + HRESULT IDirect3DDevice9::DrawRectPatch([In] unsigned int Handle,[In, Buffer] const float* pNumSegs,[In] const void* pRectPatchInfo) + IDirect3DDevice9::DrawRectPatch +
    + + +

    Draws a triangular patch using the currently set streams.

    +
    +

    Handle to the triangular patch to draw.

    +

    Pointer to an array of three floating-point values that identify the number of segments each edge of the triangle patch should be divided into when tessellated. See .

    +

    Pointer to a structure, describing the triangular high-order patch to draw.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    For static patches: Set the vertex shader, set the appropriate streams, supply patch information in the pTriPatchInfo parameter, and specify a handle so that Direct3D can capture and cache information. To efficiently draw the patch, call with pTriPatchInfo set to null. When drawing a cached patch, the currently set streams are ignored. Override the cached pNumSegs by specifying a new value for pNumSegs. When rendering a cached patch, you must set the same vertex shader that was set when it was captured.

    Calling with a handle invalidates the same handle cached by a previous call.

    For dynamic patches, the patch data changes for every rendering of the patch so it is not efficient to cache information. The application can convey this to Direct3D by setting Handle to 0. In this case, Direct3D draws the patch using the currently set streams and the pNumSegs values, and does not cache any information. It is not valid to simultaneously set Handle to 0 and pTriPatchInfo to null.

    +
    + + bb174374 + HRESULT IDirect3DDevice9::DrawTriPatch([In] unsigned int Handle,[In, Buffer] const float* pNumSegs,[In] const void* pTriPatchInfo) + IDirect3DDevice9::DrawTriPatch +
    + + +

    Frees a cached high-order patch.

    +
    +

    Handle of the cached high-order patch to delete.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174368 + HRESULT IDirect3DDevice9::DeletePatch([In] unsigned int Handle) + IDirect3DDevice9::DeletePatch +
    + + +

    Creates a status query.

    +
    +

    Identifies the query type. For more information, see .

    +

    Returns a reference to the query interface that manages the query object. See .

    This parameter can be set to null to see if a query is supported. If the query is not supported, the method returns .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be or E_OUTOFMEMORY.

    + +

    This method is provided for both synchronous and asynchronous queries. It takes the place of GetInfo, which is no longer supported in Direct3D 9.

    Synchronous and asynchronous queries are created with with . When a query has been created and the API calls have been made that are being queried, use to issue a query and to get the results of the query.

    +
    + + bb174360 + HRESULT IDirect3DDevice9::CreateQuery([In] D3DQUERYTYPE Type,[Out, Fast] IDirect3DQuery9** ppQuery) + IDirect3DDevice9::CreateQuery +
    + + +

    Applications use the methods of the interface to render primitives, create resources, work with system-level variables, adjust gamma ramp levels, work with palettes, and create shaders. The interface derives from the interface.

    +
    + +

    The interface is obtained by calling .

    The LPDIRECT3DDEVICE9EX and PDIRECT3DDEVICE9EX types are defined as references to the interface:

     typedef struct  *LPDIRECT3DDEVICE9EX, *PDIRECT3DDEVICE9EX;	
    +            
    +
    + + bb174337 + IDirect3DDevice9Ex + IDirect3DDevice9Ex +
    + + + Creates a device to represent the display adapter. + + an instance of + Ordinal number that denotes the display adapter. {{D3DADAPTER_DEFAULT}} is always the primary display adapter. + Member of the enumerated type that denotes the desired device type. If the desired device type is not available, the method will fail. + The focus window alerts Direct3D when an application switches from foreground mode to background mode. See Remarks. For full-screen mode, the window specified must be a top-level window. For windowed mode, this parameter may be NULL only if the hDeviceWindow member of pPresentationParameters is set to a valid, non-NULL value. + Combination of one or more options that control device creation. For more information, see {{D3DCREATE}}. + Pointer to a structure, describing the presentation parameters for the device to be created. If BehaviorFlags specifies {{D3DCREATE_ADAPTERGROUP_DEVICE}}, pPresentationParameters is an array. Regardless of the number of heads that exist, only one depth/stencil surface is automatically created. For Windows 2000 and Windows XP, the full-screen device display refresh rate is set in the following order: User-specified nonzero ForcedRefreshRate registry key, if supported by the device. Application-specified nonzero refresh rate value in the presentation parameter. Refresh rate of the latest desktop mode, if supported by the device. 75 hertz if supported by the device. 60 hertz if supported by the device. Device default. An unsupported refresh rate will default to the closest supported refresh rate below it. For example, if the application specifies 63 hertz, 60 hertz will be used. There are no supported refresh rates below 57 hertz. pPresentationParameters is both an input and an output parameter. Calling this method may change several members including: If BackBufferCount, BackBufferWidth, and BackBufferHeight are 0 before the method is called, they will be changed when the method returns. If BackBufferFormat equals before the method is called, it will be changed when the method returns. + + This method returns a fully working device interface, set to the required display mode (or windowed), and allocated with the appropriate back buffers. To begin rendering, the application needs only to create and set a depth buffer (assuming EnableAutoDepthStencil is FALSE in ). When you create a Direct3D device, you supply two different window parameters: a focus window (hFocusWindow) and a device window (the hDeviceWindow in ). The purpose of each window is: The focus window alerts Direct3D when an application switches from foreground mode to background mode (via Alt-Tab, a mouse click, or some other method). A single focus window is shared by each device created by an application. The device window determines the location and size of the back buffer on screen. This is used by Direct3D when the back buffer contents are copied to the front buffer during {{Present}}. This method should not be run during the handling of WM_CREATE. An application should never pass a window handle to Direct3D while handling WM_CREATE. Any call to create, release, or reset the device must be done using the same thread as the window procedure of the focus window. Note that D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING, and D3DCREATE_SOFTWARE_VERTEXPROCESSING are mutually exclusive flags, and at least one of these vertex processing flags must be specified when calling this method. Back buffers created as part of the device are only lockable if D3DPRESENTFLAG_LOCKABLE_BACKBUFFER is specified in the presentation parameters. (Multisampled back buffers and depth surfaces are never lockable.) The methods {{Reset}}, , and {{TestCooperativeLevel}} must be called from the same thread that used this method to create a device. D3DFMT_UNKNOWN can be specified for the windowed mode back buffer format when calling CreateDevice, {{Reset}}, and {{CreateAdditionalSwapChain}}. This means the application does not have to query the current desktop format before calling CreateDevice for windowed mode. For full-screen mode, the back buffer format must be specified. If you attempt to create a device on a 0x0 sized window, CreateDevice will fail. + + HRESULT CreateDevice([None] UINT Adapter,[None] D3DDEVTYPE DeviceType,[None] HWND hFocusWindow,[None] int BehaviorFlags,[None] D3DPRESENT_PARAMETERS* pPresentationParameters,[None] IDirect3DDevice9** ppReturnedDeviceInterface) + + + + Creates a device to represent the display adapter. + + an instance of + Ordinal number that denotes the display adapter. {{D3DADAPTER_DEFAULT}} is always the primary display adapter. + Member of the enumerated type that denotes the desired device type. If the desired device type is not available, the method will fail. + The focus window alerts Direct3D when an application switches from foreground mode to background mode. See Remarks. For full-screen mode, the window specified must be a top-level window. For windowed mode, this parameter may be NULL only if the hDeviceWindow member of pPresentationParameters is set to a valid, non-NULL value. + Combination of one or more options that control device creation. For more information, see {{D3DCREATE}}. + Pointer to a structure, describing the presentation parameters for the device to be created. If BehaviorFlags specifies {{D3DCREATE_ADAPTERGROUP_DEVICE}}, pPresentationParameters is an array. Regardless of the number of heads that exist, only one depth/stencil surface is automatically created. For Windows 2000 and Windows XP, the full-screen device display refresh rate is set in the following order: User-specified nonzero ForcedRefreshRate registry key, if supported by the device. Application-specified nonzero refresh rate value in the presentation parameter. Refresh rate of the latest desktop mode, if supported by the device. 75 hertz if supported by the device. 60 hertz if supported by the device. Device default. An unsupported refresh rate will default to the closest supported refresh rate below it. For example, if the application specifies 63 hertz, 60 hertz will be used. There are no supported refresh rates below 57 hertz. pPresentationParameters is both an input and an output parameter. Calling this method may change several members including: If BackBufferCount, BackBufferWidth, and BackBufferHeight are 0 before the method is called, they will be changed when the method returns. If BackBufferFormat equals before the method is called, it will be changed when the method returns. + + This method returns a fully working device interface, set to the required display mode (or windowed), and allocated with the appropriate back buffers. To begin rendering, the application needs only to create and set a depth buffer (assuming EnableAutoDepthStencil is FALSE in ). When you create a Direct3D device, you supply two different window parameters: a focus window (hFocusWindow) and a device window (the hDeviceWindow in ). The purpose of each window is: The focus window alerts Direct3D when an application switches from foreground mode to background mode (via Alt-Tab, a mouse click, or some other method). A single focus window is shared by each device created by an application. The device window determines the location and size of the back buffer on screen. This is used by Direct3D when the back buffer contents are copied to the front buffer during {{Present}}. This method should not be run during the handling of WM_CREATE. An application should never pass a window handle to Direct3D while handling WM_CREATE. Any call to create, release, or reset the device must be done using the same thread as the window procedure of the focus window. Note that D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING, and D3DCREATE_SOFTWARE_VERTEXPROCESSING are mutually exclusive flags, and at least one of these vertex processing flags must be specified when calling this method. Back buffers created as part of the device are only lockable if D3DPRESENTFLAG_LOCKABLE_BACKBUFFER is specified in the presentation parameters. (Multisampled back buffers and depth surfaces are never lockable.) The methods {{Reset}}, , and {{TestCooperativeLevel}} must be called from the same thread that used this method to create a device. D3DFMT_UNKNOWN can be specified for the windowed mode back buffer format when calling CreateDevice, {{Reset}}, and {{CreateAdditionalSwapChain}}. This means the application does not have to query the current desktop format before calling CreateDevice for windowed mode. For full-screen mode, the back buffer format must be specified. If you attempt to create a device on a 0x0 sized window, CreateDevice will fail. + + HRESULT CreateDevice([None] UINT Adapter,[None] D3DDEVTYPE DeviceType,[None] HWND hFocusWindow,[None] int BehaviorFlags,[None] D3DPRESENT_PARAMETERS* pPresentationParameters,[None] IDirect3DDevice9** ppReturnedDeviceInterface) + + + + Creates a device to represent the display adapter. + + an instance of + Ordinal number that denotes the display adapter. {{D3DADAPTER_DEFAULT}} is always the primary display adapter. + Member of the enumerated type that denotes the desired device type. If the desired device type is not available, the method will fail. + The focus window alerts Direct3D when an application switches from foreground mode to background mode. See Remarks. For full-screen mode, the window specified must be a top-level window. For windowed mode, this parameter may be NULL only if the hDeviceWindow member of pPresentationParameters is set to a valid, non-NULL value. + Combination of one or more options that control device creation. For more information, see {{D3DCREATE}}. + Pointer to a structure, describing the presentation parameters for the device to be created. If BehaviorFlags specifies {{D3DCREATE_ADAPTERGROUP_DEVICE}}, pPresentationParameters is an array. Regardless of the number of heads that exist, only one depth/stencil surface is automatically created. For Windows 2000 and Windows XP, the full-screen device display refresh rate is set in the following order: User-specified nonzero ForcedRefreshRate registry key, if supported by the device. Application-specified nonzero refresh rate value in the presentation parameter. Refresh rate of the latest desktop mode, if supported by the device. 75 hertz if supported by the device. 60 hertz if supported by the device. Device default. An unsupported refresh rate will default to the closest supported refresh rate below it. For example, if the application specifies 63 hertz, 60 hertz will be used. There are no supported refresh rates below 57 hertz. pPresentationParameters is both an input and an output parameter. Calling this method may change several members including: If BackBufferCount, BackBufferWidth, and BackBufferHeight are 0 before the method is called, they will be changed when the method returns. If BackBufferFormat equals before the method is called, it will be changed when the method returns. + The full screen display mode. + + This method returns a fully working device interface, set to the required display mode (or windowed), and allocated with the appropriate back buffers. To begin rendering, the application needs only to create and set a depth buffer (assuming EnableAutoDepthStencil is FALSE in ). When you create a Direct3D device, you supply two different window parameters: a focus window (hFocusWindow) and a device window (the hDeviceWindow in ). The purpose of each window is: The focus window alerts Direct3D when an application switches from foreground mode to background mode (via Alt-Tab, a mouse click, or some other method). A single focus window is shared by each device created by an application. The device window determines the location and size of the back buffer on screen. This is used by Direct3D when the back buffer contents are copied to the front buffer during {{Present}}. This method should not be run during the handling of WM_CREATE. An application should never pass a window handle to Direct3D while handling WM_CREATE. Any call to create, release, or reset the device must be done using the same thread as the window procedure of the focus window. Note that D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING, and D3DCREATE_SOFTWARE_VERTEXPROCESSING are mutually exclusive flags, and at least one of these vertex processing flags must be specified when calling this method. Back buffers created as part of the device are only lockable if D3DPRESENTFLAG_LOCKABLE_BACKBUFFER is specified in the presentation parameters. (Multisampled back buffers and depth surfaces are never lockable.) The methods {{Reset}}, , and {{TestCooperativeLevel}} must be called from the same thread that used this method to create a device. D3DFMT_UNKNOWN can be specified for the windowed mode back buffer format when calling CreateDevice, {{Reset}}, and {{CreateAdditionalSwapChain}}. This means the application does not have to query the current desktop format before calling CreateDevice for windowed mode. For full-screen mode, the back buffer format must be specified. If you attempt to create a device on a 0x0 sized window, CreateDevice will fail. + + HRESULT CreateDevice([None] UINT Adapter,[None] D3DDEVTYPE DeviceType,[None] HWND hFocusWindow,[None] int BehaviorFlags,[None] D3DPRESENT_PARAMETERS* pPresentationParameters,[None] IDirect3DDevice9** ppReturnedDeviceInterface) + + + + Creates a device to represent the display adapter. + + an instance of + Ordinal number that denotes the display adapter. {{D3DADAPTER_DEFAULT}} is always the primary display adapter. + Member of the enumerated type that denotes the desired device type. If the desired device type is not available, the method will fail. + The focus window alerts Direct3D when an application switches from foreground mode to background mode. See Remarks. For full-screen mode, the window specified must be a top-level window. For windowed mode, this parameter may be NULL only if the hDeviceWindow member of pPresentationParameters is set to a valid, non-NULL value. + Combination of one or more options that control device creation. For more information, see {{D3DCREATE}}. + Pointer to a structure, describing the presentation parameters for the device to be created. If BehaviorFlags specifies {{D3DCREATE_ADAPTERGROUP_DEVICE}}, pPresentationParameters is an array. Regardless of the number of heads that exist, only one depth/stencil surface is automatically created. For Windows 2000 and Windows XP, the full-screen device display refresh rate is set in the following order: User-specified nonzero ForcedRefreshRate registry key, if supported by the device. Application-specified nonzero refresh rate value in the presentation parameter. Refresh rate of the latest desktop mode, if supported by the device. 75 hertz if supported by the device. 60 hertz if supported by the device. Device default. An unsupported refresh rate will default to the closest supported refresh rate below it. For example, if the application specifies 63 hertz, 60 hertz will be used. There are no supported refresh rates below 57 hertz. pPresentationParameters is both an input and an output parameter. Calling this method may change several members including: If BackBufferCount, BackBufferWidth, and BackBufferHeight are 0 before the method is called, they will be changed when the method returns. If BackBufferFormat equals before the method is called, it will be changed when the method returns. + The full screen display mode. + + This method returns a fully working device interface, set to the required display mode (or windowed), and allocated with the appropriate back buffers. To begin rendering, the application needs only to create and set a depth buffer (assuming EnableAutoDepthStencil is FALSE in ). When you create a Direct3D device, you supply two different window parameters: a focus window (hFocusWindow) and a device window (the hDeviceWindow in ). The purpose of each window is: The focus window alerts Direct3D when an application switches from foreground mode to background mode (via Alt-Tab, a mouse click, or some other method). A single focus window is shared by each device created by an application. The device window determines the location and size of the back buffer on screen. This is used by Direct3D when the back buffer contents are copied to the front buffer during {{Present}}. This method should not be run during the handling of WM_CREATE. An application should never pass a window handle to Direct3D while handling WM_CREATE. Any call to create, release, or reset the device must be done using the same thread as the window procedure of the focus window. Note that D3DCREATE_HARDWARE_VERTEXPROCESSING, D3DCREATE_MIXED_VERTEXPROCESSING, and D3DCREATE_SOFTWARE_VERTEXPROCESSING are mutually exclusive flags, and at least one of these vertex processing flags must be specified when calling this method. Back buffers created as part of the device are only lockable if D3DPRESENTFLAG_LOCKABLE_BACKBUFFER is specified in the presentation parameters. (Multisampled back buffers and depth surfaces are never lockable.) The methods {{Reset}}, , and {{TestCooperativeLevel}} must be called from the same thread that used this method to create a device. D3DFMT_UNKNOWN can be specified for the windowed mode back buffer format when calling CreateDevice, {{Reset}}, and {{CreateAdditionalSwapChain}}. This means the application does not have to query the current desktop format before calling CreateDevice for windowed mode. For full-screen mode, the back buffer format must be specified. If you attempt to create a device on a 0x0 sized window, CreateDevice will fail. + + HRESULT CreateDevice([None] UINT Adapter,[None] D3DDEVTYPE DeviceType,[None] HWND hFocusWindow,[None] int BehaviorFlags,[None] D3DPRESENT_PARAMETERS* pPresentationParameters,[None] IDirect3DDevice9** ppReturnedDeviceInterface) + + + + Reports the current cooperative-level status of the Direct3D device for a windowed or full-screen application. + + The window handle. + State of the device + HRESULT IDirect3DDevice9Ex::CheckDeviceState([In] HWND hDestinationWindow) + + + + Checks an array of resources to determine if it is likely that they will cause a large stall at Draw time because the system must make the resources GPU-accessible. + + An array of that indicate the resources to check. + The status. + HRESULT IDirect3DDevice9Ex::CheckDeviceState([In] HWND hDestinationWindow) + + + + Retrieves the display mode's spatial resolution, color resolution, refresh frequency, and rotation settings. + + The swap chain. + structure containing data about the display mode of the adapter + HRESULT IDirect3DDevice9Ex::GetDisplayModeEx([In] unsigned int iSwapChain,[Out] D3DDISPLAYMODEEX* pMode,[In] void* pRotation) + + + + Retrieves the display mode's spatial resolution, color resolution, refresh frequency, and rotation settings. + + The swap chain. + The structure indicating the type of screen rotation the application will do. + structure containing data about the display mode of the adapter + HRESULT IDirect3DDevice9Ex::GetDisplayModeEx([In] unsigned int iSwapChain,[Out] D3DDISPLAYMODEEX* pMode,[In] void* pRotation) + + + + Swap the swapchain's next buffer with the front buffer. + + The flags. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9Ex::PresentEx([In] const void* pSourceRect,[In] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const RGNDATA* pDirtyRegion,[In] unsigned int dwFlags) + + + + Swap the swapchain's next buffer with the front buffer. + + The flags. + The source rectangle. + The destination rectangle. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9Ex::PresentEx([In] const void* pSourceRect,[In] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const RGNDATA* pDirtyRegion,[In] unsigned int dwFlags) + + + + Swap the swapchain's next buffer with the front buffer. + + The flags. + The source rectangle. + The destination rectangle. + The window override. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9Ex::PresentEx([In] const void* pSourceRect,[In] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const RGNDATA* pDirtyRegion,[In] unsigned int dwFlags) + + + + Swap the swapchain's next buffer with the front buffer. + + The flags. + The source rectangle. + The destination rectangle. + The window override. + The region. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9Ex::PresentEx([In] const void* pSourceRect,[In] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const RGNDATA* pDirtyRegion,[In] unsigned int dwFlags) + + + + Resets the type, size, and format of the swap chain with all other surfaces persistent. + + A reference describing the new presentation parameters. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9Ex::ResetEx([In] D3DPRESENT_PARAMETERS* pPresentationParameters,[In] void* pFullscreenDisplayMode) + + + + Resets the type, size, and format of the swap chain with all other surfaces persistent. + + A reference describing the new presentation parameters. + The full screen display mode. + + A object describing the result of the operation. + + HRESULT IDirect3DDevice9Ex::ResetEx([In] D3DPRESENT_PARAMETERS* pPresentationParameters,[In] void* pFullscreenDisplayMode) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get or sets the priority of the GPU thread.

    +
    + +

    Use to set the priority of a thread.

    This method will retrieve the priority of the thread stored with the Direct3D device even if it was created with the flag.

    +
    + + bb174341 + GetGPUThreadPriority / SetGPUThreadPriority + GetGPUThreadPriority + HRESULT IDirect3DDevice9Ex::GetGPUThreadPriority([Out] int* pPriority) +
    + + +

    Retrieves or sets the number of frames of data that the system is allowed to queue.

    +
    + +

    Frame latency is the number of frames that are allowed to be stored in a queue, before submission for rendering. Latency is often used to control how the CPU chooses between responding to user input and frames that are in the render queue.

    It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.

    +
    + + bb174342 + GetMaximumFrameLatency / SetMaximumFrameLatency + GetMaximumFrameLatency + HRESULT IDirect3DDevice9Ex::GetMaximumFrameLatency([Out] unsigned int* pMaxLatency) +
    + + +

    Prepare the texture sampler for monochrome convolution filtering on a single-color texture.

    +
    +

    The width of the filter kernel; ranging from 1 - D3DCONVOLUTIONMONO_MAXWIDTH. The default value is 1.

    +

    The height of the filter kernel; ranging from 1 - D3DCONVOLUTIONMONO_MAXHEIGHT. The default value is 1.

    +

    An array of weights, one weight for each kernel sub-element in the width. This parameter must be null, which will set the weights equal to the default value.

    +

    An array of weights, one weight for each kernel sub-element in the height. This parameter must be null, which will set the weights equal to the default value.

    +

    If the method succeeds, the return value is .

    + +

    This method is designed to filter a single color texture. A monochrome convolution filter is a 2D box filter with all of the weights set to 1.0; the filter kernel resolution ranges from 1 x 1 to 7 x 7. When monochrome texture filtering is set to a texture sampler and texture sampling is performed at location, then Direct3D performs convolution.

    Restrictions include:

    • The filter specified by this method is recorded in state blocks as a part of .
    • The only texture address mode supported is: ; the border color is always 0.
    • This method is not supported for mipmaps.
    • Using a non-monochrome texture with convolution filtering will generate a driver error.
    +
    + + bb174345 + HRESULT IDirect3DDevice9Ex::SetConvolutionMonoKernel([In] unsigned int width,[In] unsigned int height,[In, Buffer] float* rows,[In, Buffer] float* columns) + IDirect3DDevice9Ex::SetConvolutionMonoKernel +
    + + +

    Copy a text string to one surface using an alphabet of glyphs on another surface. Composition is done by the GPU using bitwise operations.

    +
    +

    A reference to a source surface (prepared by ) that supplies the alphabet glyphs. This surface must be created with the flag.

    +

    A reference to the destination surface (prepared by ) that receives the glyph data. The surface must be part of a texture.

    +

    A reference to a vertex buffer (see ) containing rectangles (see D3DCOMPOSERECTDESC) that enclose the desired glyphs in the source surface.

    +

    The number of rectangles or glyphs that are used in the operation. The number applies to both the source and destination surfaces. The range is 0 to D3DCOMPOSERECTS_MAXNUMRECTS.

    +

    A reference to a vertex buffer (see ) containing rectangles (see D3DCOMPOSERECTDESTINATION) that describe the destination to which the indicated glyph from the source surface will be copied.

    +

    Specifies how to combine the source and destination surfaces. See .

    +

    A value added to the x coordinates of all destination rectangles. This value can be negative, which may cause the glyph to be rejected or clipped if the result is beyond the bounds of the surface.

    +

    A value added to the y coordinates of all destination rectangles. This value can be negative, which may cause the glyph to be rejected or clipped if the result is beyond the bounds of the surface.

    +

    If the method succeeds, the return value is .

    + +

    Glyphs from a one-bit source surface are put together into another one-bit texture surface with this method. The destination surface can then be used as the source for a normal texturing operation that will filter and scale the strings of text onto some other non-monochrome surface.

    This method has several constraints (which are similar to StretchRect):

    • Surfaces cannot be locked.
    • The source and destination surfaces cannot be the same surface.
    • The source and destination surfaces must be created with the format.
    • The source surface and both vertex buffers must be created with the flag.
    • The destination surface must be created with either the or flags.
    • The source rectangles must be within the source surface.

    The method is not recorded in state blocks.

    +
    + + bb174340 + HRESULT IDirect3DDevice9Ex::ComposeRects([In] IDirect3DSurface9* pSrc,[In] IDirect3DSurface9* pDst,[In] IDirect3DVertexBuffer9* pSrcRectDescs,[In] unsigned int NumRects,[In] IDirect3DVertexBuffer9* pDstRectDescs,[In] D3DCOMPOSERECTSOP Operation,[In] int Xoffset,[In] int Yoffset) + IDirect3DDevice9Ex::ComposeRects +
    + + +

    Swap the swapchain's next buffer with the front buffer.

    +
    +

    Pointer to a structure indicating region on the source surface to copy in window client coordinates. Only applies when the swapchain was created with the flag. If null, the entire source surface is presented. If the rectangle exceeds the source surface, it is clipped to the source surface.

    +

    Pointer to structure indicating the target region on the destination surface in window client coordinates. Only applies when the swapchain was created with the flag. If null, the entire client area is filled. If the rectangle exceeds the destination client area, it is clipped to the destination client area.

    +

    Pointer to a destination window whose client area is taken as the target for this presentation. If this value is null, the runtime uses the hDeviceWindow member of for the presentation.

    Note??If you create a swap chain with , you must pass null to hDestWindowOverride

    +

    Pointer to a structure indicating the smallest set of pixels that need to be transferred. This value must be null unless the swapchain was created with the flag. For more information about swapchains, see Flipping Surfaces (Direct3D 9).

    If this value is non-null, the contained region is expressed in back buffer coordinates. The method takes these rectangles into account when optimizing the presentation by copying only the pixels within the region, or some suitably expanded set of rectangles. This is an aid to optimization only, and the application should not rely on the region being copied exactly. The implementation can choose to copy the whole source rectangle.

    +

    Allows the application to request that the method return immediately when the driver reports that it cannot schedule a presentation. Valid values are 0, or any combination of flags.

    • If dwFlags = 0, this method behaves as it did prior to Direct3D 9. Present will spin until the hardware is free, without returning an error.
    • If dwFlags = the display driver is called with the front buffer as both the source and target surface. The driver responds by scheduling a frame synch, but not changing the displayed surface. This flag is only available in full-screen mode or when using in windowed mode.
    • If dwFlags = , and the hardware is busy processing or waiting for a vertical sync interval, the method will return .
    • If dwFlags = , is enforced on this Present call. This flag can only be specified when using . This behavior is the same for windowed and full-screen modes.
    • If dwFlags = , gamma correction is performed from linear space to sRGB for windowed swap chains. This flag will take effect only when the driver exposes (see Gamma (Direct3D 9)).
    +

    Possible return values include: , , , , or (see D3DERR). See Lost Device Behavior Changes for more information about lost, hung, and removed devices.

    Differences between Direct3D 9 and Direct3D 9Ex:

    is only available in Direct3D9Ex running on Windows 7 (or more current operating system).

    ?

    + +

    Similar to the Method, PresentEx adds a dwflags parameter.

    When the swapchain is created with flag, pSourceRect, pDestRect and pDirtyRegion values must be set to null.

    +
    + + bb174343 + HRESULT IDirect3DDevice9Ex::PresentEx([In] const void* pSourceRect,[In] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const RGNDATA* pDirtyRegion,[In] unsigned int dwFlags) + IDirect3DDevice9Ex::PresentEx +
    + + +

    Get the priority of the GPU thread.

    +
    +

    Current GPU priority. Valid values range from -7 to 7.

    +

    Possible return values include: or (see D3DERR).

    + +

    Use to set the priority of a thread.

    This method will retrieve the priority of the thread stored with the Direct3D device even if it was created with the flag.

    +
    + + bb174341 + HRESULT IDirect3DDevice9Ex::GetGPUThreadPriority([Out] int* pPriority) + IDirect3DDevice9Ex::GetGPUThreadPriority +
    + + +

    Set the priority on the GPU thread.

    +
    +

    The thread priority, ranging from -7 to 7.

    +

    Possible return values include: , , or (see D3DERR).

    + +

    GPU thread priority is not reset when a device is lost. The effects of calls to this method are not recorded in state blocks.

    +
    + + bb174346 + HRESULT IDirect3DDevice9Ex::SetGPUThreadPriority([In] int Priority) + IDirect3DDevice9Ex::SetGPUThreadPriority +
    + + +

    Suspend execution of the calling thread until the next vertical blank signal.

    +
    +

    Swap chain index. This is an optional, zero-based index used to specify a swap chain on a multihead card.

    +

    This method will always return .

    + +

    This method allows applications to efficiently throttle their frame rate to that of the monitor associated with the device. Following a vertical blank, the amount of time it takes for the thread to wake up is typically very short.

    In some scenarios the hardware may stop generating vertical blank signals when nothing is being displayed on the monitor. In this case, the method will wait approximately 100ms and return with .

    +
    + + bb174349 + HRESULT IDirect3DDevice9Ex::WaitForVBlank([In] unsigned int iSwapChain) + IDirect3DDevice9Ex::WaitForVBlank +
    + + +

    Checks an array of resources to determine if it is likely that they will cause a large stall at Draw time because the system must make the resources GPU-accessible.

    +
    +

    An array of references that indicate the resources to check.

    +

    A value indicating the number of resources passed into the pResourceArray parameter up to a maximum of 65535.

    +

    If all the resources are in GPU-accessible memory, the method will return . The system may need to perform a remapping operation to promote the resources, but will not have to copy data.

    If no allocation that comprises the resources is on disk, but at least one allocation is not in GPU-accessible memory, the method will return . The system may need to perform a copy to promote the resource.

    If at least one allocation that comprises the resources is on disk, this method will return S_NOT_RESIDENT. The system may need to perform a copy to promote the resource.

    + +

    This API is no more than a reasonable guess at residency, since resources may have been demoted by the time the application uses them.

    The expected usage pattern is as follows. If the application determines that a set of resources are not resident, then the application will substitute a lower-LOD version of the resource and continue with rendering. The video memory manager API, offers a feature to allow the application to express that it would like these lower-LOD resources to be made more likely to stay resident in GPU-accessible memory. It is the app's responsibility to create, fill and destroy these lower-LOD versions, if it so chooses.

    The application also needs to begin promotion of the higher-LOD versions when the residency check indicates that the resource is not resident in GPU-accessible memory. Since a per-process lock exists in kernel mode, a performant implementation will spawn a separate process whose sole job is to promote resources. The application communicates resource identity between the two process by means of the Sharing Resources shared surfaces API and promotes them by means of the SetPriority.

    +
    + + bb174339 + HRESULT IDirect3DDevice9Ex::CheckResourceResidency([In, Buffer] IDirect3DResource9** pResourceArray,[In] unsigned int NumResources) + IDirect3DDevice9Ex::CheckResourceResidency +
    + + +

    Checks an array of resources to determine if it is likely that they will cause a large stall at Draw time because the system must make the resources GPU-accessible.

    +
    +

    An array of references that indicate the resources to check.

    +

    A value indicating the number of resources passed into the pResourceArray parameter up to a maximum of 65535.

    +

    If all the resources are in GPU-accessible memory, the method will return . The system may need to perform a remapping operation to promote the resources, but will not have to copy data.

    If no allocation that comprises the resources is on disk, but at least one allocation is not in GPU-accessible memory, the method will return . The system may need to perform a copy to promote the resource.

    If at least one allocation that comprises the resources is on disk, this method will return S_NOT_RESIDENT. The system may need to perform a copy to promote the resource.

    + +

    This API is no more than a reasonable guess at residency, since resources may have been demoted by the time the application uses them.

    The expected usage pattern is as follows. If the application determines that a set of resources are not resident, then the application will substitute a lower-LOD version of the resource and continue with rendering. The video memory manager API, offers a feature to allow the application to express that it would like these lower-LOD resources to be made more likely to stay resident in GPU-accessible memory. It is the app's responsibility to create, fill and destroy these lower-LOD versions, if it so chooses.

    The application also needs to begin promotion of the higher-LOD versions when the residency check indicates that the resource is not resident in GPU-accessible memory. Since a per-process lock exists in kernel mode, a performant implementation will spawn a separate process whose sole job is to promote resources. The application communicates resource identity between the two process by means of the Sharing Resources shared surfaces API and promotes them by means of the SetPriority.

    +
    + + bb174339 + HRESULT IDirect3DDevice9Ex::CheckResourceResidency([In, Buffer] IDirect3DResource9** pResourceArray,[In] unsigned int NumResources) + IDirect3DDevice9Ex::CheckResourceResidency +
    + + +

    Checks an array of resources to determine if it is likely that they will cause a large stall at Draw time because the system must make the resources GPU-accessible.

    +
    +

    An array of references that indicate the resources to check.

    +

    A value indicating the number of resources passed into the pResourceArray parameter up to a maximum of 65535.

    +

    If all the resources are in GPU-accessible memory, the method will return . The system may need to perform a remapping operation to promote the resources, but will not have to copy data.

    If no allocation that comprises the resources is on disk, but at least one allocation is not in GPU-accessible memory, the method will return . The system may need to perform a copy to promote the resource.

    If at least one allocation that comprises the resources is on disk, this method will return S_NOT_RESIDENT. The system may need to perform a copy to promote the resource.

    + +

    This API is no more than a reasonable guess at residency, since resources may have been demoted by the time the application uses them.

    The expected usage pattern is as follows. If the application determines that a set of resources are not resident, then the application will substitute a lower-LOD version of the resource and continue with rendering. The video memory manager API, offers a feature to allow the application to express that it would like these lower-LOD resources to be made more likely to stay resident in GPU-accessible memory. It is the app's responsibility to create, fill and destroy these lower-LOD versions, if it so chooses.

    The application also needs to begin promotion of the higher-LOD versions when the residency check indicates that the resource is not resident in GPU-accessible memory. Since a per-process lock exists in kernel mode, a performant implementation will spawn a separate process whose sole job is to promote resources. The application communicates resource identity between the two process by means of the Sharing Resources shared surfaces API and promotes them by means of the SetPriority.

    +
    + + bb174339 + HRESULT IDirect3DDevice9Ex::CheckResourceResidency([In, Buffer] IDirect3DResource9** pResourceArray,[In] unsigned int NumResources) + IDirect3DDevice9Ex::CheckResourceResidency +
    + + +

    Set the number of frames that the system is allowed to queue for rendering.

    +
    +

    The maximum number of back buffer frames that a driver can queue. The value is typically 3, but can range from 1 to 20. A value of 0 will reset latency to the default. For multi-head devices, MaxLatency is specified per-head.

    +

    Possible return values include: or (see D3DERR).

    + +

    Frame latency is the number of frames that are allowed to be stored in a queue, before submission for rendering. Latency is often used to control how the CPU chooses between responding to user input and frames that are in the render queue.

    It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.

    +
    + + bb174347 + HRESULT IDirect3DDevice9Ex::SetMaximumFrameLatency([In] unsigned int MaxLatency) + IDirect3DDevice9Ex::SetMaximumFrameLatency +
    + + +

    Retrieves the number of frames of data that the system is allowed to queue.

    +
    +

    Returns the number of frames that can be queued for render. The value is typically 3, but can range from 1 to 20.

    +

    Possible return values include: , , , , , or (see D3DERR).

    + +

    Frame latency is the number of frames that are allowed to be stored in a queue, before submission for rendering. Latency is often used to control how the CPU chooses between responding to user input and frames that are in the render queue.

    It is often beneficial for applications that have no user input (for example, video playback) to queue more than 3 frames of data.

    +
    + + bb174342 + HRESULT IDirect3DDevice9Ex::GetMaximumFrameLatency([Out] unsigned int* pMaxLatency) + IDirect3DDevice9Ex::GetMaximumFrameLatency +
    + + +

    Reports the current cooperative-level status of the Direct3D device for a windowed or full-screen application.

    +
    +

    The destination window handle to check for occlusion. When this parameter is null, is returned when another device has fullscreen ownership. When the window handle is not null, window's client area is checked for occlusion. A window is occluded if any part of it is obscured by another application.

    +

    Possible return values include: , , , , or (see D3DERR), or , or (see S_PRESENT).

    + +

    This method replaces , which always returns in Direct3D 9Ex applications.

    We recommend not to call CheckDeviceState every frame. Instead, call CheckDeviceState only if the method returns a failure code.

    See Lost Device Behavior Changes for more information about lost, hung, and removed devices.

    +
    + + bb174338 + HRESULT IDirect3DDevice9Ex::CheckDeviceState([In] HWND hDestinationWindow) + IDirect3DDevice9Ex::CheckDeviceState +
    + + +

    Creates a render-target surface.

    +
    +

    Width of the render-target surface, in pixels.

    +

    Height of the render-target surface, in pixels.

    +

    Member of the enumerated type, describing the format of the render target.

    +

    Member of the enumerated type, which describes the multisampling buffer type. This parameter specifies the antialiasing type for this render target. When this surface is passed to , its multisample type must be the same as that of the depth-stencil set by .

    +

    Quality level. The valid range is between zero and one less than the level returned by pQualityLevels used by . Passing a larger value returns the error, . The MultisampleQuality values of paired render targets, depth stencil surfaces, and the multisample type must all match.

    +

    Render targets are not lockable unless the application specifies TRUE for Lockable.

    Note that lockable render targets reduce performance on some graphics hardware. The readback performance (moving data from video memory to system memory) depends on the type of hardware used (AGP vs. PCI Express) and is usually far lower than upload performance (moving data from system to video memory). If you need read access to render targets, use GetRenderTargetData instead of lockable render targets.

    +

    Reserved. Set this parameter to null. This parameter can be used in Direct3D 9 for Windows Vista to share resources.

    +

    Combination of one or more constants which can be OR'd together. Value of 0 indicates no usage.

    +

    Address of a reference to an interface.

    + +

    Render-target surfaces are placed in the memory class.

    The creation of lockable, multisampled render targets is not supported.

    +
    + + bb509713 + HRESULT IDirect3DDevice9Ex::CreateRenderTargetEx([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Lockable,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle,[In] unsigned int Usage) + IDirect3DDevice9Ex::CreateRenderTargetEx +
    + + +

    Create an off-screen surface.

    +
    +

    Width of the surface.

    +

    Height of the surface.

    +

    Format of the surface. See .

    +

    Surface pool type. See .

    +

    Reserved. Set this parameter to null. This parameter can be used in Direct3D 9 for Windows Vista to share resources.

    +

    Combination of one or more constants which can be OR'd together. Value of 0 indicates no usage.

    +

    Pointer to the interface created.

    + +

    will return a surface that has identical characteristics to a surface created by the DirectX 8.x method CreateImageSurface.

    is the appropriate pool for use with the and .

    is not allowed when creating an offscreen plain surface. For more information about memory pools, see .

    Off-screen plain surfaces are always lockable, regardless of their pool types.

    +
    + + bb509712 + HRESULT IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle,[In] unsigned int Usage) + IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx +
    + + +

    Creates a depth-stencil surface.

    +
    +

    Width of the depth-stencil surface, in pixels.

    +

    Height of the depth-stencil surface, in pixels.

    +

    Member of the enumerated type, describing the format of the depth-stencil surface. This value must be one of the enumerated depth-stencil formats for this device.

    +

    Member of the enumerated type, describing the multisampling buffer type. This value must be one of the allowed multisample types. When this surface is passed to , its multisample type must be the same as that of the render target set by .

    +

    Quality level. The valid range is between zero and one less than the level returned by pQualityLevels used by . Passing a larger value returns the error . The MultisampleQuality values of paired render targets, depth stencil surfaces, and the MultiSample type must all match.

    +

    Set this flag to TRUE to enable z-buffer discarding, and otherwise. If this flag is set, the contents of the depth stencil buffer will be invalid after calling either or with a different depth surface.

    This flag has the same behavior as the constant, , in .

    +

    Reserved. Set this parameter to null. This parameter can be used in Direct3D 9 for Windows Vista to share resources.

    +

    Combination of one or more constants which can be OR'd together. Value of 0 indicates no usage.

    +

    Address of a reference to an interface, representing the created depth-stencil surface resource.

    + +

    The memory class of the depth-stencil buffer is always .

    +
    + + bb509711 + HRESULT IDirect3DDevice9Ex::CreateDepthStencilSurfaceEx([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Discard,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle,[In] unsigned int Usage) + IDirect3DDevice9Ex::CreateDepthStencilSurfaceEx +
    + + +

    Resets the type, size, and format of the swap chain with all other surfaces persistent.

    +
    +

    Pointer to a structure, describing the new presentation parameters. This value cannot be null.

    When switching to full-screen mode, Direct3D will try to find a desktop format that matches the back buffer format, so that back buffer and front buffer formats will be identical (to eliminate the need for color conversion).

    When this method returns:

    • BackBufferCount, BackBufferWidth, and BackBufferHeight are set to zero.
    • BackBufferFormat is set to for windowed mode only; a full-screen mode must specify a format.
    +

    Pointer to a structure that describes the properties of the desired display mode. This value must be provided for fullscreen applications, but can be null for windowed applications.

    +

    The method can return: , or (see D3DERR).

    If this method returns or then the application can only call , or release the interface reference; any other API call will cause an exception.

    + +

    If a call to fails, the device will be placed in the lost state (as indicated by a return value of from a call to ). Refer to and Lost Device Behavior Changes for further information concerning the use of in the context of lost devices.

    Unlike previous versions of DirectX, calling does not cause surfaces, textures or state information to be lost.

    Pixel shaders and vertex shaders survive calls for Direct3D 9. They do not need to be re-created explicitly by the application.

    There are two different types of swap chains: full-screen or windowed. If the new swap chain is full-screen, the adapter will be placed in the display mode that matches the new size.

    Applications can expect messages to be sent to them during this call (for example, before this call is returned); applications should take precautions not to call into Direct3D at this time.

    A call to will fail if called on a different thread than that used to create the device being reset.

    can be specified for the windowed mode back buffer format when calling , , and . This means the application does not have to query the current desktop format before calling for windowed mode. For full-screen mode, the back buffer format must be specified. Setting BackBufferCount equal to zero (BackBufferCount = 0) results in one back buffer.

    When trying to reset more than one display adapter in a group, set pPresentationParameters to point to an array of structures, one for each display in the adapter group.

    If a multihead device was created with , requires an array of structures wherein each structure must specify a full-screen display. To switch back to windowed mode, the application must destroy the device and re-create a non-multihead device in windowed mode.

    +
    + + bb174344 + HRESULT IDirect3DDevice9Ex::ResetEx([In] D3DPRESENT_PARAMETERS* pPresentationParameters,[In] void* pFullscreenDisplayMode) + IDirect3DDevice9Ex::ResetEx +
    + + +

    Retrieves the display mode's spatial resolution, color resolution, refresh frequency, and rotation settings.

    +
    +

    An unsigned integer specifying the swap chain.

    +

    Pointer to a indicating the type of screen rotation the application will do. The value returned through this reference is important when the flag is used; otherwise, it can be set to null.

    +

    Pointer to a structure containing data about the display mode of the adapter. As opposed to the display mode of the device, which may not be active if the device does not own full-screen mode. Can be set to null.

    + + bb509714 + HRESULT IDirect3DDevice9Ex::GetDisplayModeEx([In] unsigned int iSwapChain,[Out] D3DDISPLAYMODEEX* pMode,[In] void* pRotation) + IDirect3DDevice9Ex::GetDisplayModeEx +
    + + +

    Applications use the methods of the interface to create Microsoft Direct3D objects and set up the environment. This interface includes methods for enumerating and retrieving capabilities of the device.

    +
    + +

    The interface is obtained by calling the Direct3DCreate9 function.

    The LPDIRECT3D9 and PDIRECT3D9 types are defined as references to the interface.

    typedef struct  *LPDIRECT3D9, *PDIRECT3D9;
    +
    + + bb174300 + IDirect3D9 + IDirect3D9 +
    + + + Create an IDirect3D9 object and return an interface to it. + + + The Direct3D object is the first Direct3D COM object that your graphical application needs to create and the last object that your application needs to release. Functions for enumerating and retrieving capabilities of a device are accessible through the Direct3D object. This enables applications to select devices without creating them. Create an IDirect3D9 object as shown here: + LPDIRECT3D9 g_pD3D = NULL; if( NULL == (g_pD3D = Direct3DCreate9(D3D_SDK_VERSION))) return E_FAIL; + + The IDirect3D9 interface supports enumeration of active display adapters and allows the creation of objects. If the user dynamically adds adapters (either by adding devices to the desktop, or by hot-docking a laptop), those devices will not be included in the enumeration. Creating a new IDirect3D9 interface will expose the new devices. D3D_SDK_VERSION is passed to this function to ensure that the header files against which an application is compiled match the version of the runtime DLL's that are installed on the machine. D3D_SDK_VERSION is only changed in the runtime when a header change (or other code change) would require an application to be rebuilt. If this function fails, it indicates that the header file version does not match the runtime DLL version. For an example, see {{Creating a Device (Direct3D 9)}}. + + + + + Checks the version of D3DX runtime against the version of this library.. + + + + + Gets the adapters. + + + + + Determines whether a depth-stencil format is compatible with a render-target format in a particular display mode. + + The adapter. + Type of the device. + The adapter format. + The render target format. + The depth stencil format. + If the depth-stencil format is compatible with the render-target format in the display mode, this method returns true + HRESULT IDirect3D9::CheckDepthStencilMatch([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT AdapterFormat,[In] D3DFORMAT RenderTargetFormat,[In] D3DFORMAT DepthStencilFormat) + + + + Determines whether a depth-stencil format is compatible with a render-target format in a particular display mode. + + The adapter. + Type of the device. + The adapter format. + The render target format. + The depth stencil format. + The result. + + If the depth-stencil format is compatible with the render-target format in the display mode, this method returns true + + HRESULT IDirect3D9::CheckDepthStencilMatch([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT AdapterFormat,[In] D3DFORMAT RenderTargetFormat,[In] D3DFORMAT DepthStencilFormat) + + + + Determines whether a surface format is available as a specified resource type and can be used as a texture, depth-stencil buffer, or render target, or any combination of the three, on a device representing this adapter. + + The adapter. + Type of the device. + The adapter format. + The usage. + Type of the resource. + The check format. + + If the format is compatible with the specified device for the requested usage, this method returns true + + HRESULT IDirect3D9::CheckDeviceFormat([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT AdapterFormat,[In] unsigned int Usage,[In] D3DRESOURCETYPE RType,[In] D3DFORMAT CheckFormat) + + + + Determines whether a surface format is available as a specified resource type and can be used as a texture, depth-stencil buffer, or render target, or any combination of the three, on a device representing this adapter. + + The adapter. + Type of the device. + The adapter format. + The usage. + Type of the resource. + The check format. + The result. + If the format is compatible with the specified device for the requested usage, this method returns true + HRESULT IDirect3D9::CheckDeviceFormat([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT AdapterFormat,[In] unsigned int Usage,[In] D3DRESOURCETYPE RType,[In] D3DFORMAT CheckFormat) + + + + Tests the device to see if it supports conversion from one display format to another. + + The adapter. + Type of the device. + The source format. + The target format. + + True if the method succeeds. + + HRESULT IDirect3D9::CheckDeviceFormatConversion([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT SourceFormat,[In] D3DFORMAT TargetFormat) + + + + Tests the device to see if it supports conversion from one display format to another. + + The adapter. + Type of the device. + The source format. + The target format. + The result. + True if the method succeeds. + HRESULT IDirect3D9::CheckDeviceFormatConversion([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT SourceFormat,[In] D3DFORMAT TargetFormat) + + + + Determines if a multisampling technique is available on this device. + + The adapter. + Type of the device. + The surface format. + if set to true [windowed]. + Type of the multisample. + + f the device can perform the specified multisampling method, this method returns true + + HRESULT IDirect3D9::CheckDeviceMultiSampleType([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT SurfaceFormat,[In] BOOL Windowed,[In] D3DMULTISAMPLE_TYPE MultiSampleType,[Out] unsigned int* pQualityLevels) + + + + Determines if a multisampling technique is available on this device. + + The adapter. + Type of the device. + The surface format. + if set to true [windowed]. + Type of the multisample. + The quality levels. + + f the device can perform the specified multisampling method, this method returns true + + HRESULT IDirect3D9::CheckDeviceMultiSampleType([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT SurfaceFormat,[In] BOOL Windowed,[In] D3DMULTISAMPLE_TYPE MultiSampleType,[Out] unsigned int* pQualityLevels) + + + + Determines if a multisampling technique is available on this device. + + The adapter. + Type of the device. + The surface format. + if set to true [windowed]. + Type of the multisample. + The quality levels. + The result. + f the device can perform the specified multisampling method, this method returns true + HRESULT IDirect3D9::CheckDeviceMultiSampleType([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT SurfaceFormat,[In] BOOL Windowed,[In] D3DMULTISAMPLE_TYPE MultiSampleType,[Out] unsigned int* pQualityLevels) + + + + Verifies whether a hardware accelerated device type can be used on this adapter. + + The adapter. + Type of the device. + The adapter format. + The back buffer format. + if set to true [windowed]. + + true if the device can be used on this adapter + + HRESULT IDirect3D9::CheckDeviceType([In] unsigned int Adapter,[In] D3DDEVTYPE DevType,[In] D3DFORMAT AdapterFormat,[In] D3DFORMAT BackBufferFormat,[In] BOOL bWindowed) + + + + Verifies whether a hardware accelerated device type can be used on this adapter. + + The adapter. + Type of the device. + The adapter format. + The back buffer format. + if set to true [windowed]. + The result. + true if the device can be used on this adapter + HRESULT IDirect3D9::CheckDeviceType([In] unsigned int Adapter,[In] D3DDEVTYPE DevType,[In] D3DFORMAT AdapterFormat,[In] D3DFORMAT BackBufferFormat,[In] BOOL bWindowed) + + + + Get the physical display adapters present in the system when this was instantiated. + + The adapter. + The physical display adapters + HRESULT IDirect3D9::GetAdapterIdentifier([In] unsigned int Adapter,[In] unsigned int Flags,[Out] D3DADAPTER_IDENTIFIER9* pIdentifier) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the number of adapters on the system.

    +
    + + bb174315 + GetAdapterCount + GetAdapterCount + unsigned int IDirect3D9::GetAdapterCount() +
    + + +

    Registers a pluggable software device. Software devices provide software rasterization enabling applications to access a variety of software rasterizers.

    +
    +

    Pointer to the initialization function for the software device to be registered.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: . The method call is invalid. For example, a method's parameter may have an invalid value: .

    + +

    If the user's computer provides no special hardware acceleration for 3D operations, your application might emulate 3D hardware in software. Software rasterization devices emulate the functions of color 3D hardware in software. A software device runs more slowly than a hal. However, software devices take advantage of any special instructions supported by the CPU to increase performance. Instruction sets include the AMD 3DNow! instruction set on some AMD processors and the MMX instruction set supported by many Intel processors. Direct3D uses the 3D-Now! instruction set to accelerate transformation and lighting operations and the MMX instruction set to accelerate rasterization.

    Software devices communicate with Direct3D through an interface similar to the hardware device driver interface (DDI).

    Software devices are loaded by the application and registered with the object. Direct3D uses the software device for rendering.

    The Direct3D Driver Development Kit (DDK) provides the documentation and headers for developing pluggable software devices.

    +
    + + bb174321 + HRESULT IDirect3D9::RegisterSoftwareDevice([In] void* pInitializeFunction) + IDirect3D9::RegisterSoftwareDevice +
    + + +

    Returns the number of adapters on the system.

    +
    +

    A UINT value that denotes the number of adapters on the system at the time this interface was instantiated.

    + + bb174315 + unsigned int IDirect3D9::GetAdapterCount() + IDirect3D9::GetAdapterCount +
    + + +

    Describes the physical display adapters present in the system when the interface was instantiated.

    +
    + No documentation. + No documentation. + No documentation. + + bb174317 + HRESULT IDirect3D9::GetAdapterIdentifier([In] unsigned int Adapter,[In] unsigned int Flags,[Out] D3DADAPTER_IDENTIFIER9* pIdentifier) + IDirect3D9::GetAdapterIdentifier +
    + + +

    Returns the number of display modes available on this adapter.

    +
    +

    Ordinal number that denotes the display adapter. D3DADAPTER_DEFAULT is always the primary display adapter.

    +

    Identifies the format of the surface type using . Use EnumAdapterModes to see the valid formats.

    +

    This method returns the number of display modes on this adapter or zero if Adapter is greater than or equal to the number of adapters on the system.

    + + bb174318 + unsigned int IDirect3D9::GetAdapterModeCount([In] unsigned int Adapter,[In] D3DFORMAT Format) + IDirect3D9::GetAdapterModeCount +
    + + +

    Queries the device to determine whether the specified adapter supports the requested format and display mode. This method could be used in a loop to enumerate all the available adapter modes.

    +
    +

    Ordinal number denoting the display adapter to enumerate. D3DADAPTER_DEFAULT is always the primary display adapter. This method returns when this value equals or exceeds the number of display adapters in the system.

    +

    Allowable pixel formats. See Remarks.

    +

    Represents the display-mode index which is an unsigned integer between zero and the value returned by GetAdapterModeCount minus one.

    +

    A reference to the available display mode of type . See Remarks.

    + +

    An application supplies a display mode and a format to EnumAdapterModes which returns a display mode. This method could be used in a loop to enumerate all available display modes.

    The application specifies a format and the enumeration is restricted to those display modes that exactly match the format (alpha is ignored). Allowed formats (which are members of ) are as follows:

    In addition, EnumAdapterModes treats pixel formats 565 and 555 as equivalent, and returns the correct version. The difference comes into play only when the application locks the back buffer and there is an explicit flag that the application must set in order to accomplish this.

    +
    + + bb174314 + HRESULT IDirect3D9::EnumAdapterModes([In] unsigned int Adapter,[In] D3DFORMAT Format,[In] unsigned int Mode,[Out] D3DDISPLAYMODE* pMode) + IDirect3D9::EnumAdapterModes +
    + + +

    Retrieves the current display mode of the adapter.

    +
    +

    Ordinal number that denotes the display adapter to query. D3DADAPTER_DEFAULT is always the primary display adapter.

    +

    Pointer to a structure, to be filled with information describing the current adapter's mode.

    + +

    GetAdapterDisplayMode will not return the correct format when the display is in an extended format, such as 2:10:10:10. Instead, it returns the format X8R8G8B8.

    +
    + + bb174316 + HRESULT IDirect3D9::GetAdapterDisplayMode([In] unsigned int Adapter,[Out] D3DDISPLAYMODE* pMode) + IDirect3D9::GetAdapterDisplayMode +
    + + +

    Verifies whether a hardware accelerated device type can be used on this adapter.

    +
    +

    Ordinal number denoting the display adapter to enumerate. D3DADAPTER_DEFAULT is always the primary display adapter. This method returns when this value equals or exceeds the number of display adapters in the system.

    +

    Member of the enumerated type, indicating the device type to check.

    +

    Member of the enumerated type, indicating the format of the adapter display mode for which the device type is to be checked. For example, some devices will operate only in 16-bits-per-pixel modes.

    +

    Back buffer format. For more information about formats, see . This value must be one of the render-target formats. You can use GetAdapterDisplayMode to obtain the current format. For windowed applications, the back buffer format does not need to match the display mode format if the hardware supports color conversion. The set of possible back buffer formats is constrained, but the runtime will allow any valid back buffer format to be presented to any desktop format. There is the additional requirement that the device be operable in the desktop because devices typically do not operate in 8 bits per pixel modes. Full-screen applications cannot do color conversion. is allowed for windowed mode.

    +

    Value indicating whether the device type will be used in full-screen or windowed mode. If set to TRUE, the query is performed for windowed applications; otherwise, this value should be set .

    +

    If the device can be used on this adapter, is returned. is returned if Adapter equals or exceeds the number of display adapters in the system. is also returned if CheckDeviceType specified a device that does not exist. is returned if the requested back buffer format is not supported, or if hardware acceleration is not available for the specified formats.

    + +

    A hal device type requires hardware acceleration. Applications can use CheckDeviceType to determine if the needed hardware and drivers are present to support a hal device.

    Full-screen applications should not specify a DisplayFormat that contains an alpha channel. This will result in a failed call. Note that an alpha channel can be present in the back buffer but the two display formats must be identical in all other respects. For example, if DisplayFormat = , valid values for BackBufferFormat include and but exclude .

    The following code fragment shows how you could use CheckDeviceType to test whether a certain device type can be used on this adapter.

     if(SUCCEEDED(pD3Device->CheckDeviceType(D3DADAPTER_DEFAULT,  ,  DisplayFormat,  BackBufferFormat,  bIsWindowed))) return ;	
    +            // There is no HAL on this adapter using this render-target format. 	
    +            // Try again, using another format.	
    +            

    This code returns if the device can be used on the default adapter with the specified surface format.

    Using CheckDeviceType to test for compatibility between a back buffer that differs from the display format will return appropriate values. This means that the call will reflect device capabilities. If the device cannot render to the requested back-buffer format, the call will still return . If the device can render to the format, but cannot perform the color-converting presentation, the return value will also be . Applications can discover hardware support for the presentation itself by calling CheckDeviceFormatConversion. No software emulation for the color-converting presentation itself will be offered.

    +
    + + bb174312 + HRESULT IDirect3D9::CheckDeviceType([In] unsigned int Adapter,[In] D3DDEVTYPE DevType,[In] D3DFORMAT AdapterFormat,[In] D3DFORMAT BackBufferFormat,[In] BOOL bWindowed) + IDirect3D9::CheckDeviceType +
    + + +

    Determines whether a surface format is available as a specified resource type and can be used as a texture, depth-stencil buffer, or render target, or any combination of the three, on a device representing this adapter.

    +
    +

    Ordinal number denoting the display adapter to query. D3DADAPTER_DEFAULT is always the primary display adapter. This method returns when this value equals or exceeds the number of display adapters in the system.

    +

    Member of the enumerated type, identifying the device type.

    +

    Member of the enumerated type, identifying the format of the display mode into which the adapter will be placed.

    +

    Requested usage options for the surface. Usage options are any combination of and D3DUSAGE_QUERY constants (only a subset of the constants are valid for CheckDeviceFormat; see the table on the page).

    +

    Resource type requested for use with the queried format. Member of .

    +

    Format of the surfaces which may be used, as defined by Usage. Member of .

    +

    If the format is compatible with the specified device for the requested usage, this method returns .

    is returned if Adapter equals or exceeds the number of display adapters in the system, or if DeviceType is unsupported.

    is returned if the format is not acceptable to the device for this usage.

    + +

    Here are some examples using CheckDeviceFormat to check for hardware support of:

    • An off-screen plain surface format - Specify Usage = 0 and RType = .
    • A depth-stencil format - The following snippet tests for the passed in depth-stencil format:
        IsDepthFormatExisting(  DepthFormat,  AdapterFormat ) 	
      +            {  hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, , AdapterFormat, , , DepthFormat); return SUCCEEDED( hr );	
      +            }

      See Selecting a Device (Direct3D 9) for more detail on the enumeration process.

    • Can this texture be rendered in a particular format - Given the current display mode, this example shows how to verify that the texture format is compatible with the specific back-buffer format:
        IsTextureFormatOk(  TextureFormat,  AdapterFormat ) 	
      +            {  hr = pD3D->CheckDeviceFormat( D3DADAPTER_DEFAULT, , AdapterFormat, 0, , TextureFormat); return SUCCEEDED( hr );	
      +            }
    • Alpha blending in a pixel shader - Set Usage to . Expect this to fail for all floating-point render targets.
    • Autogeneration of mipmaps - Set Usage to . If the mipmap automatic generation fails, the application will get a non-mipmapped texture. Calling this method is considered a hint, so this method can return (a valid success code) if the only thing that fails is the mipmap generation. For more information about mipmap generation, see Automatic Generation of Mipmaps (Direct3D 9).

    When migrating code from Direct3D 9 to Direct3D 10, the Direct3D 10 equivalent to CheckDeviceFormat is CheckFormatSupport.

    +
    + + bb174309 + HRESULT IDirect3D9::CheckDeviceFormat([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT AdapterFormat,[In] unsigned int Usage,[In] D3DRESOURCETYPE RType,[In] D3DFORMAT CheckFormat) + IDirect3D9::CheckDeviceFormat +
    + + +

    Determines if a multisampling technique is available on this device.

    +
    +

    Ordinal number denoting the display adapter to query. D3DADAPTER_DEFAULT is always the primary display adapter. This method returns when this value equals or exceeds the number of display adapters in the system. See Remarks.

    +

    Member of the enumerated type, identifying the device type.

    +

    Member of the enumerated type that specifies the format of the surface to be multisampled. For more information, see Remarks.

    +

    bool value. Specify TRUE to inquire about windowed multisampling, and specify to inquire about full-screen multisampling.

    +

    Member of the enumerated type, identifying the multisampling technique to test.

    +

    pQualityLevels returns the number of device-specific sampling variations available with the given sample type. For example, if the returned value is 3, then quality levels 0, 1 and 2 can be used when creating resources with the given sample count. The meanings of these quality levels are defined by the device manufacturer and cannot be queried through D3D. For example, for a particular device different quality levels at a fixed sample count might refer to different spatial layouts of the sample locations or different methods of resolving. This can be null if it is not necessary to return the quality levels.

    +

    If the device can perform the specified multisampling method, this method returns . is returned if the Adapter or MultiSampleType parameters are invalid. This method returns if the queried multisampling technique is not supported by this device. is returned if DeviceType does not apply to this adapter.

    + +

    This method is intended for use with both render-target and depth-stencil surfaces because you must create both surfaces multisampled if you want to use them together.

    The following code fragment shows how you could use CheckDeviceMultiSampleType to test for devices that support a specific multisampling method.

     if( SUCCEEDED(pD3D->CheckDeviceMultiSampleType( pCaps->AdapterOrdinal,  pCaps->DeviceType, BackBufferFormat,  , , null ) ) && SUCCEEDED(pD3D->CheckDeviceMultiSampleType( pCaps->AdapterOrdinal,  pCaps->DeviceType, DepthBufferFormat,  , , null ) ) ) return ;	
    +            

    The preceding code will return if the device supports the full-screen multisampling method with the surface format.

    See the remarks in for additional information on working with and setting multisample types and quality levels.

    +
    + + bb174311 + HRESULT IDirect3D9::CheckDeviceMultiSampleType([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT SurfaceFormat,[In] BOOL Windowed,[In] D3DMULTISAMPLE_TYPE MultiSampleType,[Out] unsigned int* pQualityLevels) + IDirect3D9::CheckDeviceMultiSampleType +
    + + +

    Determines whether a depth-stencil format is compatible with a render-target format in a particular display mode.

    +
    +

    Ordinal number denoting the display adapter to query. D3DADAPTER_DEFAULT is always the primary display adapter.

    +

    Member of the enumerated type, identifying the device type.

    +

    Member of the enumerated type, identifying the format of the display mode into which the adapter will be placed.

    +

    Member of the enumerated type, identifying the format of the render-target surface to be tested.

    +

    Member of the enumerated type, identifying the format of the depth-stencil surface to be tested.

    +

    If the depth-stencil format is compatible with the render-target format in the display mode, this method returns . can be returned if one or more of the parameters is invalid. If a depth-stencil format is not compatible with the render target in the display mode, then this method returns .

    + +

    This method is provided to enable applications to work with hardware requiring that certain depth formats can only work with certain render-target formats.

    The behavior of this method has been changed for DirectX 8.1. This method now pays attention to the D24x8 and D32 depth-stencil formats. The previous version assumed that these formats would always be usable with 32- or 16-bit render targets. This method will now return for these formats only if the device is capable of mixed-depth operations.

    The following code fragment shows how you could use CheckDeviceFormat to validate a depth stencil format.

      IsDepthFormatOk( DepthFormat,   AdapterFormat,   BackBufferFormat)	
    +            { // Verify that the depth format exists  hr = pD3D->CheckDeviceFormat(D3DADAPTER_DEFAULT, , AdapterFormat, , , DepthFormat); if(FAILED(hr)) return ; // Verify that the depth format is compatible hr = pD3D->CheckDepthStencilMatch(D3DADAPTER_DEFAULT, , AdapterFormat, BackBufferFormat, DepthFormat); return SUCCEEDED(hr); }	
    +            

    The preceding call will return if DepthFormat cannot be used in conjunction with AdapterFormat and BackBufferFormat.

    +
    + + bb174308 + HRESULT IDirect3D9::CheckDepthStencilMatch([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT AdapterFormat,[In] D3DFORMAT RenderTargetFormat,[In] D3DFORMAT DepthStencilFormat) + IDirect3D9::CheckDepthStencilMatch +
    + + +

    Tests the device to see if it supports conversion from one display format to another.

    +
    +

    Display adapter ordinal number. D3DADAPTER_DEFAULT is always the primary display adapter. This method returns when this value equals or exceeds the number of display adapters in the system.

    +

    Device type. Member of the enumerated type.

    +

    Source adapter format. Member of the enumerated type.

    +

    Target adapter format. Member of the enumerated type.

    +

    If the method succeeds, the return value is . If the method fails, the return value is . The method will return when the hardware does not support conversion between the two formats.

    + +

    Using CheckDeviceType to test for compatibility between a back buffer that differs from the display format will return appropriate values. This means that the call will reflect device capabilities. If the device cannot render to the requested back buffer format, the call will still return . If the device can render to the format, but cannot perform the color-converting presentation, the return value will also be . Applications can discover hardware support for the presentation itself by calling CheckDeviceFormatConversion. No software emulation for the color-converting presentation itself will be offered.

    CheckDeviceFormatConversion can also be used to determine which combinations of source surface formats and destination surface formats are permissible in calls to StretchRect.

    Color conversion is restricted to the following source and target formats.

    • The source format must be a FOURCC format or a valid back buffer format. For a list of these, see FourCC Formats and BackBuffer or Display Formats.
    • The target format must be one of these unsigned formats:

      ?

    +
    + + bb174310 + HRESULT IDirect3D9::CheckDeviceFormatConversion([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] D3DFORMAT SourceFormat,[In] D3DFORMAT TargetFormat) + IDirect3D9::CheckDeviceFormatConversion +
    + + +

    Retrieves device-specific information about a device.

    +
    +

    Ordinal number that denotes the display adapter. D3DADAPTER_DEFAULT is always the primary display adapter.

    +

    Member of the enumerated type. Denotes the device type.

    +

    Pointer to a structure to be filled with information describing the capabilities of the device.

    + +

    The application should not assume the persistence of vertex processing capabilities across Direct3D device objects. The particular capabilities that a physical device exposes may depend on parameters supplied to CreateDevice. For example, the capabilities may yield different vertex processing capabilities before and after creating a Direct3D Device Object with hardware vertex processing enabled. For more information see the description of .

    +
    + + bb174320 + HRESULT IDirect3D9::GetDeviceCaps([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[Out] D3DCAPS9* pCaps) + IDirect3D9::GetDeviceCaps +
    + + +

    Returns the handle of the monitor associated with the Direct3D object.

    +
    +

    Ordinal number that denotes the display adapter. D3DADAPTER_DEFAULT is always the primary display adapter.

    +

    Handle of the monitor associated with the Direct3D object.

    + +

    As shown in the following code fragment, which illustrates how to obtain a handle to the monitor associated with a given device, use GetDirect3D to return the Direct3D enumerator from the device and use GetCreationParameters to retrieve the value for Adapter.

     if( FAILED( pDevice->GetCreationParameters(  &Parameters ) ) ) return ; if( FAILED( pDevice->GetDirect3D(&pD3D) ) ) return ; hMonitor = pD3D->GetAdapterMonitor(Parameters.AdapterOrdinal); pD3D->Release();	
    +            
    +
    + + bb174319 + HMONITOR IDirect3D9::GetAdapterMonitor([In] unsigned int Adapter) + IDirect3D9::GetAdapterMonitor +
    + + +

    Creates a device to represent the display adapter.

    +
    +

    Ordinal number that denotes the display adapter. D3DADAPTER_DEFAULT is always the primary display adapter.

    +

    Member of the enumerated type that denotes the desired device type. If the desired device type is not available, the method will fail.

    +

    The focus window alerts Direct3D when an application switches from foreground mode to background mode. See Remarks.

    • For full-screen mode, the window specified must be a top-level window.
    • For windowed mode, this parameter may be null only if the hDeviceWindow member of pPresentationParameters is set to a valid, non-null value.
    +

    Combination of one or more options that control device creation. For more information, see .

    +

    Pointer to a structure, describing the presentation parameters for the device to be created. If BehaviorFlags specifies , pPresentationParameters is an array. Regardless of the number of heads that exist, only one depth/stencil surface is automatically created.

    For Windows 2000 and Windows XP, the full-screen device display refresh rate is set in the following order:

    1. User-specified nonzero ForcedRefreshRate registry key, if supported by the device.
    2. Application-specified nonzero refresh rate value in the presentation parameter.
    3. Refresh rate of the latest desktop, if supported by the device.
    4. 75 hertz if supported by the device.
    5. 60 hertz if supported by the device.
    6. Device default.

    An unsupported refresh rate will default to the closest supported refresh rate below it. For example, if the application specifies 63 hertz, 60 hertz will be used. There are no supported refresh rates below 57 hertz.

    pPresentationParameters is both an input and an output parameter. Calling this method may change several members including:

    • If BackBufferCount, BackBufferWidth, and BackBufferHeight are 0 before the method is called, they will be changed when the method returns.
    • If BackBufferFormat equals before the method is called, it will be changed when the method returns.
    +

    Address of a reference to the returned interface, which represents the created device.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , , .

    + +

    This method returns a fully working device interface, set to the required display mode (or windowed), and allocated with the appropriate back buffers. To begin rendering, the application needs only to create and set a depth buffer (assuming EnableAutoDepthStencil is in ).

    When you create a Direct3D device, you supply two different window parameters: a focus window (hFocusWindow) and a device window (the hDeviceWindow in ). The purpose of each window is:

    • The focus window alerts Direct3D when an application switches from foreground mode to background mode (via Alt-Tab, a mouse click, or some other method). A single focus window is shared by each device created by an application.
    • The device window determines the location and size of the back buffer on screen. This is used by Direct3D when the back buffer contents are copied to the front buffer during Present.

    This method should not be run during the handling of WM_CREATE. An application should never pass a window handle to Direct3D while handling WM_CREATE. Any call to create, release, or reset the device must be done using the same thread as the window procedure of the focus window.

    Note that , , and are mutually exclusive flags, and at least one of these vertex processing flags must be specified when calling this method.

    Back buffers created as part of the device are only lockable if is specified in the presentation parameters. (Multisampled back buffers and depth surfaces are never lockable.)

    The methods Reset, , and TestCooperativeLevel must be called from the same thread that used this method to create a device.

    can be specified for the windowed mode back buffer format when calling CreateDevice, Reset, and CreateAdditionalSwapChain. This means the application does not have to query the current desktop format before calling CreateDevice for windowed mode. For full-screen mode, the back buffer format must be specified.

    If you attempt to create a device on a 0x0 sized window, CreateDevice will fail.

    +
    + + bb174313 + HRESULT IDirect3D9::CreateDevice([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] HWND hFocusWindow,[In] D3DCREATE BehaviorFlags,[In, Buffer] D3DPRESENT_PARAMETERS* pPresentationParameters,[Out, Fast] IDirect3DDevice9** ppReturnedDeviceInterface) + IDirect3D9::CreateDevice +
    + + +

    Applications use the methods of the interface (which inherits from ) to create Microsoft Direct3D 9Ex objects and set up the environment. This interface includes methods for enumerating and retrieving capabilities of the device and is available when the underlying device implementation is compliant with Windows Vista.

    +
    + +

    The interface is obtained by calling the Direct3DCreate9Ex function.

    The LPDIRECT3D9EX and PDIRECT3D9EX types are defined as references to the interface:

     typedef struct  *LPDIRECT3D9EX, *PDIRECT3D9EX;	
    +            
    +
    + + bb174301 + IDirect3D9Ex + IDirect3D9Ex +
    + + + Creates an object and returns an interface to it. + + + The object is the first object that the application creates and the last object that the application releases. Functions for enumerating and retrieving capabilities of a device are accessible through the IDirect3D9Ex object. This enables applications to select devices without creating them. The interface supports enumeration of active display adapters and allows the creation of IDirect3D9Ex objects. If the user dynamically adds adapters (either by adding devices to the desktop, or by hot-docking a laptop), these devices are not included in the enumeration. Creating a new IDirect3D9Ex interface will expose the new devices. Pass the D3D_SDK_VERSION flag to this function to ensure that header files used in the compiled application match the version of the installed runtime DLLs. D3D_SDK_VERSION is changed in the runtime only when a header or another code change would require rebuilding the application. If this function fails, it indicates that the versions of the header file and the runtime DLL do not match. Note??Direct3DCreate9Ex is supported only in Windows Vista, Windows Server 2008, and Windows 7. Earlier versions of the D3D9.dll library do not include Direct3D9Ex and Direct3DCreate9Ex. + + D3DERR_NOTAVAILABLE if Direct3DEx features are not supported (no WDDM driver is installed) or if the SDKVersion does not match the version of the DLL. D3DERR_OUTOFMEMORY if out-of-memory conditions are detected when creating the enumerator object. S_OK if the creation of the enumerator object is successful. + HRESULT Direct3DCreate9Ex([None] int SDKVersion,[None] IDirect3D9Ex** arg1) + + + + Retrieves the current display mode and rotation settings of the adapter. + + The adapter. + structure containing data about the display mode of the adapter + HRESULT IDirect3D9Ex::GetAdapterDisplayModeEx([In] unsigned int Adapter,[Out] D3DDISPLAYMODEEX* pMode,[Out] D3DDISPLAYROTATION* pRotation) + + + + Gets a collection of installed extended adapters. + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the number of display modes available.

    +
    +

    Ordinal number denoting the display adapter from which to retrieve the display mode count.

    +

    Specifies the characteristics of the desired display mode. See .

    +

    The number of display modes available. A return of value zero from this method is an indication that no such display mode is supported or simply this monitor is no longer available.

    + +

    Events such as display mode changes on other heads of the same hardware, monitor change or its connection status change, and desktop extension/unextension could all affect the number of display mode available.

    To fullscreen applications, returned from PresentEx or CheckDeviceState is the indication of display mode setting failure due to those events.

    To increase the chance of setting a currently available display mode successfully, fullscreen applications should try to requery the available display mode list upon receiving .

    +
    + + bb174306 + unsigned int IDirect3D9Ex::GetAdapterModeCountEx([In] unsigned int Adapter,[In] const D3DDISPLAYMODEFILTER* pFilter) + IDirect3D9Ex::GetAdapterModeCountEx +
    + + +

    This method returns the actual display mode info based on the given mode index.

    +
    +

    Ordinal number denoting the display adapter to enumerate. D3DADAPTER_DEFAULT is always the primary display adapter. This method returns when this value equals or exceeds the number of display adapters in the system.

    +

    See .

    +

    Represents the display-mode index which is an unsigned integer between zero and the value returned by GetAdapterModeCount minus one.

    +

    A reference to the available display mode of type .

    + + bb174303 + HRESULT IDirect3D9Ex::EnumAdapterModesEx([In] unsigned int Adapter,[In] const D3DDISPLAYMODEFILTER* pFilter,[In] unsigned int Mode,[Out] D3DDISPLAYMODEEX* pMode) + IDirect3D9Ex::EnumAdapterModesEx +
    + + +

    Retrieves the current display mode and rotation settings of the adapter.

    +
    +

    Ordinal number that denotes the display adapter to query. D3DADAPTER_DEFAULT is always the primary display adapter.

    +

    Pointer to a structure indicating the type of screen rotation the application will do. The value returned through this reference is important when the flag is used; otherwise, it can be set to null.

    +

    Pointer to a structure containing data about the display mode of the adapter. As opposed to the display mode of the device, which may not be active if the device does not own full-screen mode. Can be set to null.

    + +

    GetAdapterDisplayModeEx does not return the correct format when the display is in an extended format, such as 2:10:10:10. Instead, it returns the format X8R8G8B8.

    To windowed applications, a value of returned from PresentEx or CheckDeviceState indicates that the display mode changed and that the current display mode might have a different format. To avoid a color-converting Present blt, windowed applications can optionally get new display mode information by using this method and adjusting its swap chain format accordingly. This method returns if this head is no longer part of the desktop or if the monitor is disconnected.

    +
    + + bb174304 + HRESULT IDirect3D9Ex::GetAdapterDisplayModeEx([In] unsigned int Adapter,[Out] D3DDISPLAYMODEEX* pMode,[Out] D3DDISPLAYROTATION* pRotation) + IDirect3D9Ex::GetAdapterDisplayModeEx +
    + + +

    Creates a device to represent the display adapter.

    +
    +

    Ordinal number that denotes the display adapter. D3DADAPTER_DEFAULT is always the primary display adapter.

    +

    Specifies the type of device. See . If the desired device type is not available, the method will fail.

    +

    The focus window alerts Direct3D when an application switches from foreground mode to background mode. For full-screen mode, the window specified must be a top-level window. For windowed mode, this parameter may be null only if the hDeviceWindow member of pPresentationParameters is set to a valid, non-null value.

    +

    Combination of one or more options (see ) that control device creation.

    +

    Pointer to a structure, describing the presentation parameters for the device to be created. If BehaviorFlags specifies , this parameter is an array. Regardless of the number of heads that exist, only one depth/stencil surface is automatically created.

    This parameter is both an input and an output parameter. Calling this method may change several members including:

    • If BackBufferCount, BackBufferWidth, and BackBufferHeight are 0 before the method is called, they will be changed when the method returns.
    • If BackBufferFormat equals before the method is called, it will be changed when the method returns.
    +

    The display mode for when the device is set to fullscreen. See . If BehaviorFlags specifies , this parameter is an array. This parameter must be null for windowed mode.

    +

    Address of a reference to the returned , which represents the created device.

    +

    This method returns when rendering device along with swapchain buffers are created successfully. is returned when any error other than invalid caller input is encountered.

    + + bb174302 + HRESULT IDirect3D9Ex::CreateDeviceEx([In] unsigned int Adapter,[In] D3DDEVTYPE DeviceType,[In] HWND hFocusWindow,[In] unsigned int BehaviorFlags,[In, Buffer] D3DPRESENT_PARAMETERS* pPresentationParameters,[In, Buffer, Optional] D3DDISPLAYMODEEX* pFullscreenDisplayMode,[Out, Fast] IDirect3DDevice9Ex** ppReturnedDeviceInterface) + IDirect3D9Ex::CreateDeviceEx +
    + + +

    This method returns a unique identifier for the adapter that is specific to the adapter hardware. Applications can use this identifier to define robust mappings across various APIs (Direct3D 9, DXGI).

    +
    +

    Ordinal number denoting the display adapter from which to retrieve the .

    +

    A unique identifier for the given adapter.

    + + bb174305 + HRESULT IDirect3D9Ex::GetAdapterLUID([In] unsigned int Adapter,[Out] LUID* pLUID) + IDirect3D9Ex::GetAdapterLUID +
    + + +

    Describes the display mode.

    +
    + + bb172548 + D3DDISPLAYMODE + D3DDISPLAYMODE +
    + + + Gets the aspect ratio. + + + + +

    Screen width, in pixels.

    +
    + + bb172548 + unsigned int Width + unsigned int Width +
    + + +

    Screen height, in pixels.

    +
    + + bb172548 + unsigned int Height + unsigned int Height +
    + + +

    Refresh rate. The value of 0 indicates an adapter default.

    +
    + + bb172548 + unsigned int RefreshRate + unsigned int RefreshRate +
    + + +

    Member of the enumerated type, describing the surface format of the display mode.

    +
    + + bb172548 + D3DFORMAT Format + D3DFORMAT Format +
    + + + A collection of + + + + +

    Information about the properties of a display mode.

    +
    + +

    This structure is used in various methods to create and manage Direct3D 9Ex devices () and swapchains ().

    +
    + + bb172549 + D3DDISPLAYMODEEX + D3DDISPLAYMODEEX +
    + + + Initializes a new instance of the class. + + + + + Gets the aspect ratio. + + + + +

    The size of this structure. This should always be set to sizeof().

    +
    + + bb172549 + unsigned int Size + unsigned int Size +
    + + +

    Width of the display mode.

    +
    + + bb172549 + unsigned int Width + unsigned int Width +
    + + +

    Height of the display mode.

    +
    + + bb172549 + unsigned int Height + unsigned int Height +
    + + +

    Refresh rate of the display mode.

    +
    + + bb172549 + unsigned int RefreshRate + unsigned int RefreshRate +
    + + +

    Format of the display mode. See .

    +
    + + bb172549 + D3DFORMAT Format + D3DFORMAT Format +
    + + +

    Indicates whether the scanline order is progressive or interlaced. See .

    +
    + + bb172549 + D3DSCANLINEORDERING ScanLineOrdering + D3DSCANLINEORDERING ScanLineOrdering +
    + + + A collection of + + + + + Driver levels support. + + None + + + + Supports for Direct3D7. + + + + + Supports for Direct3D8. + + + + + Supports for Direct3D9. + + + + +

    Used to set and query effects, and to choose techniques. An effect object can contain multiple techniques to render the same effect.

    +
    + +

    The interface is obtained by calling , , or .

    The LPD3DXEFFECT type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXEFFECT;	
    +            
    +
    + + bb205788 + ID3DXEffect + ID3DXEffect +
    + + + Starts an active technique. + + The number of passes needed to render the current technique. + HRESULT ID3DXEffect::Begin([Out] unsigned int* pPasses,[In] D3DXFX Flags) + + + + Gets or sets the current technique. + + + The technique. + + D3DXHANDLE ID3DXEffect::GetCurrentTechnique() + HRESULT ID3DXEffect::SetTechnique([In] D3DXHANDLE hTechnique) + + + + Compiles an effect from a file. + + The device. + Name of the file. + The flags. + + An + + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a file. + + The device. + Name of the file. + The preprocessor defines. + The include file. + The skip constants. + The flags. + + An + + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a file. + + The device. + Name of the file. + The preprocessor defines. + The include file. + The skip constants. + The flags. + The pool. + + An + + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a memory buffer. + + The device. + The buffer. + The flags. + + An + + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a memory buffer. + + The device. + The buffer. + The preprocessor defines. + The include file. + The skip constants. + The flags. + + An + + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a memory buffer. + + The device. + The buffer. + The preprocessor defines. + The include file. + The skip constants. + The flags. + The pool. + An + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a stream. + + The device. + The stream. + The flags. + + An + + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a stream. + + The device. + The stream. + The preprocessor defines. + The include file. + The skip constants. + The flags. + + An + + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a stream. + + The device. + The stream. + The preprocessor defines. + The include file. + The skip constants. + The flags. + The pool. + An + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a string. + + The device. + The source data. + The flags. + + An + + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a string. + + The device. + The source data. + The preprocessor defines. + The include file. + The skip constants. + The flags. + + An + + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Compiles an effect from a string. + + The device. + The source data. + The preprocessor defines. + The include file. + The skip constants. + The flags. + The pool. + + An + + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + + + + Set a contiguous range of shader constants with a memory copy. + + The handle. + The data. + + A object describing the result of the operation. + + HRESULT ID3DXEffect::SetRawValue([In] D3DXHANDLE hParameter,[In] const void* pData,[In] unsigned int ByteOffset,[In] unsigned int Bytes) + + + + Set a contiguous range of shader constants with a memory copy. + + The handle. + The data. + + A object describing the result of the operation. + + HRESULT ID3DXEffect::SetRawValue([In] D3DXHANDLE hParameter,[In] const void* pData,[In] unsigned int ByteOffset,[In] unsigned int Bytes) + + + + Set a contiguous range of shader constants with a memory copy. + + The handle. + The data. + The offset. + The count in bytes. + + A object describing the result of the operation. + + HRESULT ID3DXEffect::SetRawValue([In] D3DXHANDLE hParameter,[In] const void* pData,[In] unsigned int ByteOffset,[In] unsigned int Bytes) + + + + Set a contiguous range of shader constants with a memory copy. + + The handle. + The data. + The start index. + The count. + A object describing the result of the operation. + HRESULT ID3DXEffect::SetRawValue([In] D3DXHANDLE hParameter,[In] const void* pData,[In] unsigned int ByteOffset,[In] unsigned int Bytes) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a reference to the pool of shared parameters.

    +
    + +

    Pools contain shared parameters between effects. See Cloning and Sharing (Direct3D 9).

    +
    + + bb205827 + GetPool + GetPool + HRESULT ID3DXEffect::GetPool([Out] ID3DXEffectPool** ppPool) +
    + + +

    Retrieves the device associated with the effect.

    +
    + +

    Calling this method will increase the internal reference count for the interface. Be sure to call IUnknown::Release when you are done using the interface or you will have a memory leak.

    +
    + + bb205826 + GetDevice + GetDevice + HRESULT ID3DXEffect::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Get or sets the effect state manager.

    +
    + +

    The is a user-implemented interface that furnishes callbacks into an application for setting device state from an effect.

    +
    + + bb205828 + GetStateManager / SetStateManager + GetStateManager + HRESULT ID3DXEffect::GetStateManager([Out] ID3DXEffectStateManager** ppManager) +
    + + +

    Gets a reference to the pool of shared parameters.

    +
    +

    Pointer to a object.

    +

    This method always returns the value .

    + +

    Pools contain shared parameters between effects. See Cloning and Sharing (Direct3D 9).

    +
    + + bb205827 + HRESULT ID3DXEffect::GetPool([Out] ID3DXEffectPool** ppPool) + ID3DXEffect::GetPool +
    + + +

    Sets the active technique.

    +
    +

    Unique handle to the technique. See Handles (Direct3D 9).

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205834 + HRESULT ID3DXEffect::SetTechnique([In] D3DXHANDLE hTechnique) + ID3DXEffect::SetTechnique +
    + + +

    Gets the current technique.

    +
    +

    A unique identifier to the current technique. See Handles (Direct3D 9).

    + + bb205825 + D3DXHANDLE ID3DXEffect::GetCurrentTechnique() + ID3DXEffect::GetCurrentTechnique +
    + + +

    Validate a technique.

    +
    +

    Unique identifier. See Handles (Direct3D 9).

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , , , , , , , , , , , and .

    + + bb205835 + HRESULT ID3DXEffect::ValidateTechnique([In] D3DXHANDLE hTechnique) + ID3DXEffect::ValidateTechnique +
    + + +

    Searches for the next valid technique, starting at the technique after the specified technique.

    +
    +

    Unique identifier to a technique. See Handles (Direct3D 9). Specify null for this parameter to find the first valid technique.

    +

    Pointer to an identifier for the next technique. null is returned if this is the last technique. See Handles (Direct3D 9).

    + + bb205824 + HRESULT ID3DXEffect::FindNextValidTechnique([In] D3DXHANDLE hTechnique,[Out] D3DXHANDLE* pTechnique) + ID3DXEffect::FindNextValidTechnique +
    + + +

    Determines if a parameter is used by the technique.

    +
    +

    Unique identifier for the parameter. See Handles (Direct3D 9).

    +

    Unique identifier for the technique. See Handles (Direct3D 9).

    +

    Returns TRUE if the parameter is being used and returns if the parameter is not being used.

    + + bb205829 + BOOL ID3DXEffect::IsParameterUsed([In] D3DXHANDLE hParameter,[In] D3DXHANDLE hTechnique) + ID3DXEffect::IsParameterUsed +
    + + +

    Starts an active technique.

    +
    +

    DWORD that determines if state modified by an effect is saved and restored. The default value 0 specifies that and will save and restore all state modified by the effect (including pixel and vertex shader constants). Valid flags can be seen at Effect State Save and Restore Flags.

    +

    Pointer to a value returned that indicates the number of passes needed to render the current technique.

    + +

    An application sets one active technique in the effect system by calling . The effect system responds by capturing all the pipeline state that can be changed by the technique in a state block. An application signals the end of a technique by calling , which uses the state block to restore the original state. The effect system, therefore, takes care of saving state when a technique becomes active and restoring state when a technique ends. If you choose to disable this save and restore functionality, see .

    Within the and pair, an application uses to set the active pass, if any state changes occurred after the pass was activated, and to end the active pass.

    +
    + + bb205815 + HRESULT ID3DXEffect::Begin([Out] unsigned int* pPasses,[In] D3DXFX Flags) + ID3DXEffect::Begin +
    + + +

    Begins a pass, within the active technique.

    +
    +

    A zero-based integer index into the technique.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    An application sets one active pass (within one active technique) in the effect system by calling . An application signals the end of the active pass by calling . and must occur in a matching pair, within a matching pair of and calls.

    If the application changes any effect state using any of the Effect::Setx methods inside of a / matching pair, the application must call to set the update the device with the state changes. If no state changes occur within a and matching pair, it is not necessary to call .

    +
    + + bb205817 + HRESULT ID3DXEffect::BeginPass([In] unsigned int Pass) + ID3DXEffect::BeginPass +
    + + +

    Propagate state changes that occur inside of an active pass to the device before rendering.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    If the application changes any effect state using any of the ID3DXEffect::Setx methods inside of an / matching pair, the application must call before any DrawxPrimitive call to propagate state changes to the device before rendering. If no state changes occur within a and matching pair, it is not necessary to call .

    This is slightly different for any shared parameters in a cloned effect. When a technique is active on a cloned effect (that is, when has been called but and has not been called), updates parameters that are not shared as expected. To update a shared parameter (only for a cloned effect whose technique is active), call to deactivate the technique and to reactivate the technique before calling .

    +
    + + bb205819 + HRESULT ID3DXEffect::CommitChanges() + ID3DXEffect::CommitChanges +
    + + +

    End an active pass.

    +
    +

    This method always returns the value .

    + +

    An application signals the end of rendering an active pass by calling . Each must be part of a matching pair of and calls.

    Each matching pair of and calls must be located within a matching pair of and calls.

    If the application changes any effect state using any of the Effect::Setx methods inside of a / matching pair, the application must call before any DrawxPrimitive call to propagate state changes to the device before rendering.

    +
    + + bb205823 + HRESULT ID3DXEffect::EndPass() + ID3DXEffect::EndPass +
    + + +

    Ends an active technique.

    +
    +

    This method always returns the value .

    + +

    All rendering in an effect is done within a matching pair of and calls. After all passes are rendered, must be called to end the active technique. The effect system responds by using the state block created when was called, to automatically restore the pipeline state before .

    By default, the effect system takes care of saving state prior to a technique, and restoring state after a technique. If you choose to disable this save and restore functionality, see .

    +
    + + bb205821 + HRESULT ID3DXEffect::End() + ID3DXEffect::End +
    + + +

    Retrieves the device associated with the effect.

    +
    +

    Address of a reference to an interface, representing the device associated with the effect.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Calling this method will increase the internal reference count for the interface. Be sure to call IUnknown::Release when you are done using the interface or you will have a memory leak.

    +
    + + bb205826 + HRESULT ID3DXEffect::GetDevice([Out] IDirect3DDevice9** ppDevice) + ID3DXEffect::GetDevice +
    + + +

    Use this method to release all references to video memory resources and delete all stateblocks. This method should be called whenever a device is lost, or before resetting a device.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method should be called whenever the device is lost or before the user calls . Even if the device was not actually lost, is responsible for freeing stateblocks and other resources that may need to be released before resetting the device. As a result, the font object cannot be used again before calling and then .

    +
    + + bb205830 + HRESULT ID3DXEffect::OnLostDevice() + ID3DXEffect::OnLostDevice +
    + + +

    Use this method to re-acquire resources and save initial state.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    should be called each time the device is reset (using ), before any other methods are called. This is a good place to re-acquire video-memory resources and capture state blocks.

    +
    + + bb205831 + HRESULT ID3DXEffect::OnResetDevice() + ID3DXEffect::OnResetDevice +
    + + +

    Set the effect state manager.

    +
    +

    A reference to the state manager. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    The is a user-implemented interface that furnishes callbacks into an application for setting device state from an effect.

    +
    + + bb205833 + HRESULT ID3DXEffect::SetStateManager([In] ID3DXEffectStateManager* pManager) + ID3DXEffect::SetStateManager +
    + + +

    Get the effect state manager.

    +
    +

    Returns a reference to the state manager. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    The is a user-implemented interface that furnishes callbacks into an application for setting device state from an effect.

    +
    + + bb205828 + HRESULT ID3DXEffect::GetStateManager([Out] ID3DXEffectStateManager** ppManager) + ID3DXEffect::GetStateManager +
    + + +

    Start capturing state changes in a parameter block.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    Capture effect parameter state changes until EndParameterBlock is called. Effect parameters include any state changes outside of a pass. Delete parameter blocks if they are no longer needed by calling DeleteParameterBlock.

    +
    + + bb205816 + HRESULT ID3DXEffect::BeginParameterBlock() + ID3DXEffect::BeginParameterBlock +
    + + +

    Stop capturing effect parameter state changes.

    +
    +

    Returns a handle to the parameter state block.

    + +

    All effect parameters that change state (after calling BeginParameterBlock and before calling EndParameterBlock) will be saved in an effect parameter state block. Use ApplyParameterBlock to apply this block of state changes to the effect system. Once you are finished with a state block use DeleteParameterBlock to free the memory.

    +
    + + bb205822 + D3DXHANDLE ID3DXEffect::EndParameterBlock() + ID3DXEffect::EndParameterBlock +
    + + +

    Apply the values in a state block to the current effect system state.

    +
    +

    A handle to the parameter block. This is the handle returned by .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    Capture effect parameter state changes in a parameter block by calling BeginParameterBlock; stop capturing state changes by calling EndParameterBlock. These state changes include any effect parameter changes that occur inside of a technique (including those outside of a pass). Once you are done with the parameter block, call DeleteParameterBlock to recover memory.

    +
    + + bb205814 + HRESULT ID3DXEffect::ApplyParameterBlock([In] D3DXHANDLE hParameterBlock) + ID3DXEffect::ApplyParameterBlock +
    + + +

    Delete a parameter block.

    +
    +

    A handle to the parameter block. This is the handle returned by .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    Parameter blocks are blocks of effect states. Use a parameter block to record state changes so that they can be applied later on with a single API call. When no longer needed, delete the parameter block to reduce memory usage.

    +
    + + bb205820 + HRESULT ID3DXEffect::DeleteParameterBlock([In] D3DXHANDLE hParameterBlock) + ID3DXEffect::DeleteParameterBlock +
    + + +

    Creates a copy of an effect.

    +
    +

    Pointer to an interface, representing the device associated with the effect.

    +

    Pointer to an interface, containing the cloned effect.

    + +

    Note??This function will not clone an effect if the user specifies during effect creation.

    To update shared and non-shared parameters in an active technique of a cloned effect, see .

    +
    + + bb205818 + HRESULT ID3DXEffect::CloneEffect([In] IDirect3DDevice9* pDevice,[Out] ID3DXEffect** ppEffect) + ID3DXEffect::CloneEffect +
    + + +

    Set a contiguous range of shader constants with a memory copy.

    +
    +

    Handle to the value to set, or the name of the value passed in as a string. Passing in a handle is more efficient. See Handles (Direct3D 9).

    +

    Pointer to a buffer containing the data to be set. SetRawValue checks for valid memory, but does not do any checking for valid data.

    +

    Number of bytes between the beginning of the effect data and the beginning of the effect constants you are going to set.

    +

    The size of the buffer to be set, in bytes.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following:E_INVALIDCALL.

    + +

    SetRawValue is a very fast way to set effect constants since it performs a memory copy without performing validation or any data conversion (like converting a row-major matrix to a column-major matrix). Use SetRawValue to set a series of contiguous effect constants. For instance, you could set an array of twenty matrices with 20 calls to or by using a single SetRawValue.

    All values are expected to be either matrix4x4s or float4s and all matrices are expected to be in column-major order. Int or float values are cast into a float4; therefore, it is highly recommended that you use SetRawValue with only float4 or matrix4x4 data.

    +
    + + bb205832 + HRESULT ID3DXEffect::SetRawValue([In] D3DXHANDLE hParameter,[In] const void* pData,[In] unsigned int ByteOffset,[In] unsigned int Bytes) + ID3DXEffect::SetRawValue +
    + + +

    The interface compiles an effect from a function or from a vertex shader.

    +
    + +

    The interface is obtained by calling , , or .

    The LPD3DXEFFECTCOMPILER type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXEFFECTCOMPILER;	
    +            
    +
    + + bb205789 + ID3DXEffectCompiler + ID3DXEffectCompiler +
    + + + Initializes a new instance of the class. + + The data. + The defines. + The include file. + The flags. + HRESULT D3DXCreateEffectCompiler([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXEffectCompiler** ppCompiler,[In] ID3DXBuffer** ppParseErrors) + + + + Compile an effect. + + The flags. + If a compilation errors occurs + Buffer containing the compiled effect. + HRESULT ID3DXEffectCompiler::CompileEffect([In] unsigned int Flags,[In] ID3DXBuffer** ppEffect,[In] ID3DXBuffer** ppErrorMsgs) + + + + Compiles a shader from an effect that contains one or more functions. + + The function handle. + The target. + The flags. + If a compilation errors occurs + The bytecode of the effect. + HRESULT ID3DXEffectCompiler::CompileShader([In] D3DXHANDLE hFunction,[In] const char* pTarget,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Compiles a shader from an effect that contains one or more functions. + + The function handle. + The target. + The flags. + The constant table. + If a compilation errors occurs + The bytecode of the effect. + HRESULT ID3DXEffectCompiler::CompileShader([In] D3DXHANDLE hFunction,[In] const char* pTarget,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Creates an effect compiler from a file on disk containing an ASCII effect description . + + Name of the file. + The flags. + + An instance of + + HRESULT D3DXCreateEffectCompiler([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[Out, Fast] ID3DXEffectCompiler** ppCompiler,[In] ID3DXBuffer** ppParseErrors) + + + + Creates an effect compiler from a file on disk containing an ASCII effect description . + + Name of the file. + The defines. + The include file. + The flags. + + An instance of + + HRESULT D3DXCreateEffectCompiler([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[Out, Fast] ID3DXEffectCompiler** ppCompiler,[In] ID3DXBuffer** ppParseErrors) + + + + Creates an effect compiler from a memory buffer containing an ASCII effect description . + + The data. + The flags. + + An instance of + + HRESULT D3DXCreateEffectCompiler([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[Out, Fast] ID3DXEffectCompiler** ppCompiler,[In] ID3DXBuffer** ppParseErrors) + + + + Creates an effect compiler from a memory buffer containing an ASCII effect description . + + The data. + The defines. + The include file. + The flags. + + An instance of + + HRESULT D3DXCreateEffectCompiler([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[Out, Fast] ID3DXEffectCompiler** ppCompiler,[In] ID3DXBuffer** ppParseErrors) + + + + Creates an effect compiler from a stream containing an ASCII effect description . + + The stream. + The flags. + + An instance of + + HRESULT D3DXCreateEffectCompiler([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[Out, Fast] ID3DXEffectCompiler** ppCompiler,[In] ID3DXBuffer** ppParseErrors) + + + + Creates an effect compiler from a stream containing an ASCII effect description . + + The stream. + The defines. + The include file. + The flags. + An instance of + HRESULT D3DXCreateEffectCompiler([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[Out, Fast] ID3DXEffectCompiler** ppCompiler,[In] ID3DXBuffer** ppParseErrors) + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Toggles the literal status of a parameter. A literal parameter has a value that doesn't change during the lifetime of an effect.

    +
    +

    Unique identifier to a parameter. See Handles (Direct3D 9).

    +

    Set to TRUE to make the parameter a literal, and if the parameter can change value during the shader lifetime.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This methods only changes whether the parameter is a literal or not. To change the value of a parameter, use a method like or .

    This function must be called before the effect is compiled. Here is an example of how one might use this function:

     LPD3DXEFFECTCOMPILER pEffectCompiler; char errors[1000];  hr; hr = ("shader.fx", null, null, 0, &pEffectCompiler,  &errors); //In the fx file, literalInt is declared as an int. //By calling this function, the compiler will treat //it as a literal (i.e. #define) hr = pEffectCompiler->SetLiteral("literalInt", TRUE); //create ten different variations of the same effect LPD3DXBUFFER pEffects[10]; LPD3DXBUFFER pErrors; for(int i = 0; i < 10; ++i) { hr = pEffectCompiler->SetInt("literalInt", i); hr = pEffectCompiler->CompileEffect(0, &pEffects[i], &pErrors); }	
    +            
    +
    + + bb205793 + HRESULT ID3DXEffectCompiler::SetLiteral([In] D3DXHANDLE hParameter,[In] BOOL Literal) + ID3DXEffectCompiler::SetLiteral +
    + + +

    Gets a literal status of a parameter. A literal parameter has a value that doesn't change during the lifetime of an effect.

    +
    +

    Unique identifier to a parameter. See Handles (Direct3D 9).

    +

    Returns True if the parameter is a literal, and False otherwise.

    + +

    This methods only changes whether the parameter is a literal or not. To change the value of a parameter, use a method like or .

    +
    + + bb205792 + HRESULT ID3DXEffectCompiler::GetLiteral([In] D3DXHANDLE hParameter,[Out] BOOL* pLiteral) + ID3DXEffectCompiler::GetLiteral +
    + + +

    Compile an effect.

    +
    +

    Compile options identified by various flags. The Direct3D 10 HLSL compiler is now the default. See Flags for details.

    +

    Buffer containing the compiled effect. For more information about accessing the buffer, see .

    +

    Buffer containing at least the first compile error message that occurred. This includes effect compiler errors and high-level language compile errors. For more information about accessing the buffer, see .

    +

    If the method succeeds, the return value is .

    If the arguments are invalid, the method will return .

    If the method fails, the return value will be E_FAIL.

    + + bb205790 + HRESULT ID3DXEffectCompiler::CompileEffect([In] unsigned int Flags,[In] ID3DXBuffer** ppEffect,[In] ID3DXBuffer** ppErrorMsgs) + ID3DXEffectCompiler::CompileEffect +
    + + +

    Compiles a shader from an effect that contains one or more functions.

    +
    +

    Unique identifier to the function to be compiled. This value must not be null. See Handles (Direct3D 9).

    +

    Pointer to a shader profile which determines the shader instruction set. See or for a list of the profiles available.

    +

    Compile options identified by various flags. The Direct3D 10 HLSL compiler is now the default. See Flags for details.

    +

    Buffer containing the compiled shader. The compiler shader is an array of DWORDs. For more information about accessing the buffer, see .

    +

    Buffer containing at least the first compile error message that occurred. This includes effect compiler errors and high-level language compile errors. For more information about accessing the buffer, see .

    +

    Returns an interface, which can be used to access shader constants. This value can be null. If you compile your application as large address aware (that is, you use the /LARGEADDRESSAWARE linker option to handle addresses larger than 2 GB), you cannot use this parameter and must set it to null. Instead, you must use the function to retrieve the shader-constant table that is embedded inside the shader. In this call, you must pass the D3DXCONSTTABLE_LARGEADDRESSAWARE flag to the Flags parameter to specify to access up to 4 GB of virtual address space.

    +

    If the method succeeds, the return value is .

    If the arguments are invalid, the method will return .

    If the method fails, the return value will be E_FAIL.

    + +

    Targets can be specified for vertex shaders, pixel shaders, and texture fill functions.

    Vertex shader targetsvs_1_1, vs_2_0, vs_2_sw, vs_3_0
    Pixel shader targetsps_1_1, ps_1_2, ps_1_3, ps_1_4, ps_2_0, ps_2_sw, ps_3_0
    Texture fill targetstx_0, tx_1

    ?

    This method compiles a shader from a function that is written in a C-like language. For more information, see HLSL.

    +
    + + bb205791 + HRESULT ID3DXEffectCompiler::CompileShader([In] D3DXHANDLE hFunction,[In] const char* pTarget,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + ID3DXEffectCompiler::CompileShader +
    + + + No documentation. + + + bb280319 + D3DXEFFECTDEFAULT + D3DXEFFECTDEFAULT + + + + Gets the value. + + + + + No documentation. + + + bb280319 + char* pParamName + char pParamName + + + + No documentation. + + + bb280319 + D3DXEFFECTDEFAULTTYPE Type + D3DXEFFECTDEFAULTTYPE Type + + + + No documentation. + + + bb280319 + unsigned int NumBytes + unsigned int NumBytes + + + + No documentation. + + + bb280319 + void* pValue + void pValue + + + + EffectHandle used to identify a shader parameter. + + + + + Defines the behavior for caching strings. True by default. + + + + + Cache of allocated strings. + + + + + Pointer to the handle or the allocated string. + + + + + If the is a custom string not cached that needs to be released by this instance. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + The pointer. + + + + + Initializes a new instance of the class. + + + The pointer. + + + + + Initializes a new instance of the class. + + + The name. + + + + + Clears the cache. + + + By default, this class is caching all strings that are implicitly used as an effect handle. + Use this method in order to deallocate all strings that were previously cached. + + + + + marshal free. + + The __from. + The @ref. + + + + Method to marshal from native to managed struct + + The __from. + The @ref. + + + + Method to marshal from managed struct tot native + + The __from. + The @ref. + + + + + + + Allocates a string. + + + The name. + + + Pointer to the allocated string + + + + + Performs an implicit conversion from to . + + The value. + + The result of the conversion. + + + + + Performs an implicit conversion from to . + + The value. + + The result of the conversion. + + + + + Performs an implicit conversion from to raw pointer"/>. + + The value. + + The result of the conversion. + + + + + Performs an implicit conversion from raw pointer to . + + The value. + + The result of the conversion. + + + + + Performs an implicit conversion from to . + + The name. + + The result of the conversion. + + + + +

    Data type for managing a set of default effect parameters.

    +
    + + bb172823 + D3DXEFFECTINSTANCE + D3DXEFFECTINSTANCE +
    + + +

    Name of the effect file.

    +
    + + bb172823 + char* pEffectFilename + char pEffectFilename +
    + + +

    Number of default parameters.

    +
    + + bb172823 + unsigned int NumDefaults + unsigned int NumDefaults +
    + + +

    Pointer to an array of elements, each of which contains an effect parameter.

    +
    + + bb172823 + D3DXEFFECTDEFAULT* pDefaults + D3DXEFFECTDEFAULT pDefaults +
    + + +

    Applications use the interface to identify parameters that are going to be shared across effects. See parameter sharing in Cloning and Sharing (Direct3D 9). This interface has no methods.

    +
    + +

    The interface is obtained by calling .

    The LPD3DXEFFECTPOOL type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXEFFECTPOOL;	
    +            
    +
    + + bb205794 + ID3DXEffectPool + ID3DXEffectPool +
    + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + A callback function used to fill 2D texture. + + Texture coordinate being sampled. + Dimensions of the texel. + The desired color of the specified texel. + typedef VOID (WINAPI *LPD3DXFILL2D)(D3DXVECTOR4 *pOut, CONST D3DXVECTOR2 *pTexCoord, CONST D3DXVECTOR2 *pTexelSize, LPVOID pData); + + + + A callback function used to fill 3D texture. + + Texture coordinate being sampled. + Dimensions of the texel. + The desired color of the specified texel. + typedef VOID (WINAPI *LPD3DXFILL2D)(D3DXVECTOR4 *pOut, CONST D3DXVECTOR2 *pTexCoord, CONST D3DXVECTOR2 *pTexelSize, LPVOID pData); + + + + Fill callback helper class. + + + + + Pointer to the native callback for 2D function + + + + + Pointer to the native callback for 3D function + + + + +

    The interface encapsulates the textures and resources needed to render a specific font on a specific device.

    +
    + +

    The interface is obtained by calling or .

    The LPD3DXFONT type is defined as a reference to the interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXFONT;	
    +            
    +
    + + bb173961 + ID3DXFont + ID3DXFont +
    + + + Initializes a new instance of the class. + + The device. + The font description. + + + + Initializes a new instance of the class. + + The device. + The height. + The width. + The weight. + The mip levels. + if set to true [is italic]. + The character set. + The precision. + The quality. + The pitch and family. + Name of the face. + + + + Load formatted text into video memory to improve the efficiency of rendering to the device. This method supports ANSI and Unicode strings. + + + The compiler setting also determines the function version. If Unicode is defined, the function call resolves to PreloadTextW. Otherwise, the function call resolves to PreloadTextA because ANSI strings are being used. This method generates textures that contain glyphs that represent the input text. The glyphs are drawn as a series of triangles. Text will not be rendered to the device; ID3DX10Font::DrawText must still be called to render the text. However, by preloading text into video memory, ID3DX10Font::DrawText will use substantially fewer CPU resources. This method internally converts characters to glyphs using the GDI function {{GetCharacterPlacement}}. + + Pointer to a string of characters to be loaded into video memory. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR; otherwise, the data type resolves to LPCSTR. See Remarks. + If the method succeeds, the return value is S_OK. If the method fails, the return value can be one of the following: D3DERR_INVALIDCALL, D3DXERR_INVALIDDATA. + HRESULT ID3DX10Font::PreloadTextW([None] const wchar_t* pString,[None] int Count) + + + + Draws formatted text. + + Pointer to an object that contains the string. Can be null, in which case Direct3D will render the string with its own sprite object. To improve efficiency, a sprite object should be specified if DrawText is to be called more than once in a row. + Pointer to a string to draw. If the Count parameter is -1, the string must be null-terminated. + Pointer to a structure that contains the rectangle, in logical coordinates, in which the text is to be formatted. The coordinate value of the rectangle's right side must be greater than that of its left side. Likewise, the coordinate value of the bottom must be greater than that of the top. + Specifies the method of formatting the text. It can be any combination of the following values: ValueMeaning DT_BOTTOM Justifies the text to the bottom of the rectangle. This value must be combined with DT_SINGLELINE. DT_CALCRECT Determines the width and height of the rectangle. If there are multiple lines of text, DrawText uses the width of the rectangle pointed to by the pRect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, DrawText modifies the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text but does not draw the text. DT_CENTER Centers text horizontally in the rectangle. DT_EXPANDTABS Expands tab characters. The default number of characters per tab is eight. DT_LEFT Aligns text to the left. DT_NOCLIP Draws without clipping. DrawText is somewhat faster when DT_NOCLIP is used. DT_RIGHT Aligns text to the right. DT_RTLREADING Displays text in right-to-left reading order for bidirectional text when a Hebrew or Arabic font is selected. The default reading order for all text is left-to-right. DT_SINGLELINE Displays text on a single line only. Carriage returns and line feeds do not break the line. DT_TOP Top-justifies text. DT_VCENTER Centers text vertically (single line only). DT_WORDBREAK Breaks words. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by the pRect parameter. A carriage return/line feed sequence also breaks the line. ? + Color of the text. For more information, see . + If the function succeeds, the return value is the height of the text in logical units. If DT_VCENTER or DT_BOTTOM is specified, the return value is the offset from pRect (top to the bottom) of the drawn text. If the function fails, the return value is zero. + + The parameters of this method are very similar to those of the GDI DrawText function.This method supports both ANSI and Unicode strings.This method must be called inside a BeginScene ... EndScene block. The only exception is when an application calls DrawText with DT_CALCRECT to calculate the size of a given block of text.Unless the DT_NOCLIP format is used, this method clips the text so that it does not appear outside the specified rectangle. All formatting is assumed to have multiple lines unless the DT_SINGLELINE format is specified.If the selected font is too large for the rectangle, this method does not attempt to substitute a smaller font.This method supports only fonts whose escapement and orientation are both zero. + + int ID3DXFont::DrawTextW([In] ID3DXSprite* pSprite,[In] const wchar_t* pString,[In] int Count,[In] void* pRect,[In] unsigned int Format,[In] D3DCOLOR Color) + + + + Draws formatted text. + + Pointer to an object that contains the string. Can be null, in which case Direct3D will render the string with its own sprite object. To improve efficiency, a sprite object should be specified if DrawText is to be called more than once in a row. + Pointer to a string to draw. If the Count parameter is -1, the string must be null-terminated. + The x position to draw the text. + The y position to draw the text. + Color of the text. For more information, see . + + If the function succeeds, the return value is the height of the text in logical units. If DT_VCENTER or DT_BOTTOM is specified, the return value is the offset from pRect (top to the bottom) of the drawn text. If the function fails, the return value is zero. + + int ID3DXFont::DrawTextW([In] ID3DXSprite* pSprite,[In] const wchar_t* pString,[In] int Count,[In] void* pRect,[In] unsigned int Format,[In] D3DCOLOR Color) + + The parameters of this method are very similar to those of the GDI DrawText function.This method supports both ANSI and Unicode strings.This method must be called inside a BeginScene ... EndScene block. The only exception is when an application calls DrawText with DT_CALCRECT to calculate the size of a given block of text.Unless the DT_NOCLIP format is used, this method clips the text so that it does not appear outside the specified rectangle. All formatting is assumed to have multiple lines unless the DT_SINGLELINE format is specified.If the selected font is too large for the rectangle, this method does not attempt to substitute a smaller font.This method supports only fonts whose escapement and orientation are both zero. + + + + + Measures the specified sprite. + + Pointer to an object that contains the string. Can be null, in which case Direct3D will render the string with its own sprite object. To improve efficiency, a sprite object should be specified if DrawText is to be called more than once in a row. + Pointer to a string to draw. If the Count parameter is -1, the string must be null-terminated. + Specifies the method of formatting the text. It can be any combination of the following values: ValueMeaning DT_BOTTOM Justifies the text to the bottom of the rectangle. This value must be combined with DT_SINGLELINE. DT_CALCRECT Determines the width and height of the rectangle. If there are multiple lines of text, DrawText uses the width of the rectangle pointed to by the pRect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, DrawText modifies the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text but does not draw the text. DT_CENTER Centers text horizontally in the rectangle. DT_EXPANDTABS Expands tab characters. The default number of characters per tab is eight. DT_LEFT Aligns text to the left. DT_NOCLIP Draws without clipping. DrawText is somewhat faster when DT_NOCLIP is used. DT_RIGHT Aligns text to the right. DT_RTLREADING Displays text in right-to-left reading order for bidirectional text when a Hebrew or Arabic font is selected. The default reading order for all text is left-to-right. DT_SINGLELINE Displays text on a single line only. Carriage returns and line feeds do not break the line. DT_TOP Top-justifies text. DT_VCENTER Centers text vertically (single line only). DT_WORDBREAK Breaks words. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by the pRect parameter. A carriage return/line feed sequence also breaks the line. ? + Determines the width and height of the rectangle. If there are multiple lines of text, this function uses the width of the rectangle pointed to by the rect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, this method modifies the right side of the rectangle so that it bounds the last character in the line. + + + + Measures the specified sprite. + + Pointer to an object that contains the string. Can be null, in which case Direct3D will render the string with its own sprite object. To improve efficiency, a sprite object should be specified if DrawText is to be called more than once in a row. + Pointer to a string to draw. If the Count parameter is -1, the string must be null-terminated. + Pointer to a structure that contains the rectangle, in logical coordinates, in which the text is to be formatted. The coordinate value of the rectangle's right side must be greater than that of its left side. Likewise, the coordinate value of the bottom must be greater than that of the top. + Specifies the method of formatting the text. It can be any combination of the following values: ValueMeaning DT_BOTTOM Justifies the text to the bottom of the rectangle. This value must be combined with DT_SINGLELINE. DT_CALCRECT Determines the width and height of the rectangle. If there are multiple lines of text, DrawText uses the width of the rectangle pointed to by the pRect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, DrawText modifies the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text but does not draw the text. DT_CENTER Centers text horizontally in the rectangle. DT_EXPANDTABS Expands tab characters. The default number of characters per tab is eight. DT_LEFT Aligns text to the left. DT_NOCLIP Draws without clipping. DrawText is somewhat faster when DT_NOCLIP is used. DT_RIGHT Aligns text to the right. DT_RTLREADING Displays text in right-to-left reading order for bidirectional text when a Hebrew or Arabic font is selected. The default reading order for all text is left-to-right. DT_SINGLELINE Displays text on a single line only. Carriage returns and line feeds do not break the line. DT_TOP Top-justifies text. DT_VCENTER Centers text vertically (single line only). DT_WORDBREAK Breaks words. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by the pRect parameter. A carriage return/line feed sequence also breaks the line. ? + Determines the width and height of the rectangle. If there are multiple lines of text, this function uses the width of the rectangle pointed to by the rect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, this method modifies the right side of the rectangle so that it bounds the last character in the line. + + + + Measures the specified sprite. + + Pointer to an object that contains the string. Can be null, in which case Direct3D will render the string with its own sprite object. To improve efficiency, a sprite object should be specified if DrawText is to be called more than once in a row. + Pointer to a string to draw. If the Count parameter is -1, the string must be null-terminated. + Pointer to a structure that contains the rectangle, in logical coordinates, in which the text is to be formatted. The coordinate value of the rectangle's right side must be greater than that of its left side. Likewise, the coordinate value of the bottom must be greater than that of the top. + Specifies the method of formatting the text. It can be any combination of the following values: ValueMeaning DT_BOTTOM Justifies the text to the bottom of the rectangle. This value must be combined with DT_SINGLELINE. DT_CALCRECT Determines the width and height of the rectangle. If there are multiple lines of text, DrawText uses the width of the rectangle pointed to by the pRect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, DrawText modifies the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text but does not draw the text. DT_CENTER Centers text horizontally in the rectangle. DT_EXPANDTABS Expands tab characters. The default number of characters per tab is eight. DT_LEFT Aligns text to the left. DT_NOCLIP Draws without clipping. DrawText is somewhat faster when DT_NOCLIP is used. DT_RIGHT Aligns text to the right. DT_RTLREADING Displays text in right-to-left reading order for bidirectional text when a Hebrew or Arabic font is selected. The default reading order for all text is left-to-right. DT_SINGLELINE Displays text on a single line only. Carriage returns and line feeds do not break the line. DT_TOP Top-justifies text. DT_VCENTER Centers text vertically (single line only). DT_WORDBREAK Breaks words. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by the pRect parameter. A carriage return/line feed sequence also breaks the line. ? + The height of the formatted text but does not draw the text. + Determines the width and height of the rectangle. If there are multiple lines of text, this function uses the width of the rectangle pointed to by the rect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, this method modifies the right side of the rectangle so that it bounds the last character in the line. + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the Direct3D device associated with the font object.

    +
    + +

    Note??Calling this method will increase the internal reference count on the interface. Be sure to call when you are done using this interface or you will have a memory leak.

    +
    + + bb173965 + GetDevice + GetDevice + HRESULT ID3DXFont::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Gets a description of the current font object. GetDescW and GetDescA are identical to this method, except that a reference is returned to a or D3DXFONT_DESCA structure, respectively.

    +
    + +

    This method describes Unicode font objects if UNICODE is defined. Otherwise GetDescA is called, which returns a reference to the D3DXFONT_DESCA structure.

    +
    + + bb173964 + GetDescW + GetDescW + HRESULT ID3DXFont::GetDescW([Out] D3DXFONT_DESCW* pDesc) +
    + + +

    Returns a handle to a display device context (DC) that has the font set.

    +
    + + bb173963 + GetDC + GetDC + HDC ID3DXFont::GetDC() +
    + + +

    Retrieves the Direct3D device associated with the font object.

    +
    +

    Address of a reference to an interface, representing the Direct3D device object associated with the font object.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    Note??Calling this method will increase the internal reference count on the interface. Be sure to call when you are done using this interface or you will have a memory leak.

    +
    + + bb173965 + HRESULT ID3DXFont::GetDevice([Out] IDirect3DDevice9** ppDevice) + ID3DXFont::GetDevice +
    + + +

    Gets a description of the current font object. GetDescW and GetDescA are identical to this method, except that a reference is returned to a or D3DXFONT_DESCA structure, respectively.

    +
    + No documentation. +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + +

    This method describes Unicode font objects if UNICODE is defined. Otherwise GetDescA is called, which returns a reference to the D3DXFONT_DESCA structure.

    +
    + + bb173964 + HRESULT ID3DXFont::GetDescW([Out] D3DXFONT_DESCW* pDesc) + ID3DXFont::GetDescW +
    + + +

    Retrieves font characteristics that are identified in a structure. This method supports ANSI and Unicode compiler settings.

    +
    + No documentation. +

    Nonzero if the function is successful; otherwise 0.

    + +

    The compiler setting also determines the structure type. If Unicode is defined, the function returns a structure. Otherwise, the function call returns a structure.

    +
    + + bb173967 + BOOL ID3DXFont::GetTextMetricsW([Out] TEXTMETRICW* pTextMetrics) + ID3DXFont::GetTextMetricsW +
    + + +

    Returns a handle to a display device context (DC) that has the font set.

    +
    +

    Handle to a display DC.

    + + bb173963 + HDC ID3DXFont::GetDC() + ID3DXFont::GetDC +
    + + +

    Returns information about the placement and orientation of a glyph in a character cell.

    +
    +

    Glyph identifier.

    +

    Address of a reference to a object that contains the glyph.

    +

    Pointer to the smallest rectangle object that completely encloses the glyph.

    +

    Pointer to the two-dimensional vector that connects the origin of the current character cell to the origin of the next character cell. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb173966 + HRESULT ID3DXFont::GetGlyphData([In] unsigned int Glyph,[Out] IDirect3DTexture9** ppTexture,[Out] RECT* pBlackBox,[Out] POINT* pCellInc) + ID3DXFont::GetGlyphData +
    + + +

    Loads a series of characters into video memory to improve the efficiency of rendering to the device.

    +
    +

    ID of the first character to be loaded into video memory.

    +

    ID of the last character to be loaded into video memory.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    This method generates textures containing glyphs that represent the input characters. The glyphs are drawn as a series of triangles.

    Characters will not be rendered to the device; DrawText must still be called to render the characters. However, by pre-loading characters into video memory, DrawText will use substantially fewer CPU resources.

    This method internally converts characters to glyphs using the GDI function GetCharacterPlacement.

    +
    + + bb173970 + HRESULT ID3DXFont::PreloadCharacters([In] unsigned int First,[In] unsigned int Last) + ID3DXFont::PreloadCharacters +
    + + +

    Loads a series of glyphs into video memory to improve the efficiency of rendering to the device.

    +
    +

    ID of the first glyph to be loaded into video memory.

    +

    ID of the last glyph to be loaded into video memory.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    This method generates textures that contain the input glyphs. The glyphs are drawn as a series of triangles.

    Glyphs will not be rendered to the device; DrawText must still be called to render the glyphs. However, by pre-loading glyphs into video memory, DrawText will use substantially fewer CPU resources.

    +
    + + bb173971 + HRESULT ID3DXFont::PreloadGlyphs([In] unsigned int First,[In] unsigned int Last) + ID3DXFont::PreloadGlyphs +
    + + +

    Loads formatted text into video memory to improve the efficiency of rendering to the device. This method supports ANSI and Unicode strings.

    +
    +

    Pointer to a string of characters to be loaded into video memory. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR; otherwise, the data type resolves to LPCSTR. See Remarks.

    +

    Number of characters in the text string.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to PreloadTextW. Otherwise, the function call resolves to PreloadTextA because ANSI strings are being used.

    This method generates textures that contain glyphs that represent the input text. The glyphs are drawn as a series of triangles.

    Text will not be rendered to the device; DrawText must still be called to render the text. However, by preloading text into video memory, DrawText will use substantially fewer CPU resources.

    This method internally converts characters to glyphs using the GDI function GetCharacterPlacement.

    +
    + + bb173972 + HRESULT ID3DXFont::PreloadTextW([In] const wchar_t* pString,[In] int Count) + ID3DXFont::PreloadTextW +
    + + +

    Draws formatted text. This method supports ANSI and Unicode strings.

    +
    +

    Pointer to an object that contains the string. Can be null, in which case Direct3D will render the string with its own sprite object. To improve efficiency, a sprite object should be specified if DrawText is to be called more than once in a row.

    +

    Pointer to a string to draw. If the Count parameter is -1, the string must be null-terminated.

    +

    Specifies the number of characters in the string. If Count is -1, then the pString parameter is assumed to be a reference to a null-terminated string and DrawText computes the character count automatically.

    +

    Pointer to a structure that contains the rectangle, in logical coordinates, in which the text is to be formatted. The coordinate value of the rectangle's right side must be greater than that of its left side. Likewise, the coordinate value of the bottom must be greater than that of the top.

    +

    Specifies the method of formatting the text. It can be any combination of the following values:

    ValueMeaning
    DT_BOTTOM

    Justifies the text to the bottom of the rectangle. This value must be combined with DT_SINGLELINE.

    DT_CALCRECT

    Determines the width and height of the rectangle. If there are multiple lines of text, DrawText uses the width of the rectangle pointed to by the pRect parameter and extends the base of the rectangle to bound the last line of text. If there is only one line of text, DrawText modifies the right side of the rectangle so that it bounds the last character in the line. In either case, DrawText returns the height of the formatted text but does not draw the text.

    DT_CENTER

    Centers text horizontally in the rectangle.

    DT_EXPANDTABS

    Expands tab characters. The default number of characters per tab is eight.

    DT_LEFT

    Aligns text to the left.

    DT_NOCLIP

    Draws without clipping. DrawText is somewhat faster when DT_NOCLIP is used.

    DT_RIGHT

    Aligns text to the right.

    DT_RTLREADING

    Displays text in right-to-left reading order for bidirectional text when a Hebrew or Arabic font is selected. The default reading order for all text is left-to-right.

    DT_SINGLELINE

    Displays text on a single line only. Carriage returns and line feeds do not break the line.

    DT_TOP

    Top-justifies text.

    DT_VCENTER

    Centers text vertically (single line only).

    DT_WORDBREAK

    Breaks words. Lines are automatically broken between words if a word would extend past the edge of the rectangle specified by the pRect parameter. A carriage return/line feed sequence also breaks the line.

    ?

    +

    Color of the text. For more information, see .

    +

    If the function succeeds, the return value is the height of the text in logical units. If DT_VCENTER or DT_BOTTOM is specified, the return value is the offset from pRect (top to the bottom) of the drawn text. If the function fails, the return value is zero.

    + +

    The parameters of this method are very similar to those of the GDI DrawText function.

    This method supports both ANSI and Unicode strings.

    This method must be called inside a BeginScene ... EndScene block. The only exception is when an application calls DrawText with DT_CALCRECT to calculate the size of a given block of text.

    Unless the DT_NOCLIP format is used, this method clips the text so that it does not appear outside the specified rectangle. All formatting is assumed to have multiple lines unless the DT_SINGLELINE format is specified.

    If the selected font is too large for the rectangle, this method does not attempt to substitute a smaller font.

    This method supports only fonts whose escapement and orientation are both zero.

    +
    + + bb173962 + int ID3DXFont::DrawTextW([In] ID3DXSprite* pSprite,[In] const wchar_t* pString,[In] int Count,[In] void* pRect,[In] unsigned int Format,[In] D3DCOLOR Color) + ID3DXFont::DrawTextW +
    + + +

    Use this method to release all references to video memory resources and delete all stateblocks. This method should be called whenever a device is lost, or before resetting a device.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method should be called whenever the device is lost or before the user calls Reset. Even if the device was not actually lost, OnLostDevice is responsible for freeing stateblocks and other resources that may need to be released before resetting the device. As a result, the font object cannot be used again before calling Reset and then OnResetDevice.

    +
    + + bb173968 + HRESULT ID3DXFont::OnLostDevice() + ID3DXFont::OnLostDevice +
    + + +

    Use this method to re-acquire resources and save initial state.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    OnResetDevice should be called each time the device is reset (using Reset), before any other methods are called. This is a good place to re-acquire video-memory resources and capture state blocks.

    +
    + + bb173969 + HRESULT ID3DXFont::OnResetDevice() + ID3DXFont::OnResetDevice +
    + + + Defines possible character sets for fonts. + + CHARSET + + + + The ANSI character set. + + + + + The Arabic character set. + + + + + The Baltic character set. + + + + + The Chinese character set. + + + + + The default system character set. + + + + + The East Europe character set. + + + + + The GB2312 character set. + + + + + The Greek character set. + + + + + The Hangul character set. + + + + + The Hebrew character set. + + + + + The Johab character set. + + + + + The Mac character set. + + + + + The OEM character set. + + + + + The Russian character set. + + + + + The ShiftJIS character set. + + + + + The symbol character set. + + + + + The Thai character set. + + + + + The Turkish character set. + + + + + The Vietnamese character set. + + + + + Specifies formatting options for text rendering. + + DT + + + + Align the text to the bottom. + + + + + Align the text to the center. + + + + + Expand tab characters. + + + + + Align the text to the left. + + + + + Don't clip the text. + + + + + Align the text to the right. + + + + + Rendering the text in right-to-left reading order. + + + + + Force all text to a single line. + + + + + Align the text to the top. + + + + + Vertically align the text to the center. + + + + + Allow word breaks. + + + + + Defines pitch and family settings for fonts. + + + + + Use the Decorative family. + + + + + Default pitch. + + + + + The font family doesn't matter. + + + + + Fixed pitch. + + + + + Use the Modern family. + + + + + Mono pitch. + + + + + Use the Roman family. + + + + + Use the Script family. + + + + + Use the Swiss family. + + + + + Variable pitch. + + + + + Defines precision levels for font rendering. + + OutPrecision + + + + Default + + + + + String + + + + + Character + + + + + Stroke + + + + + TrueType + + + + + Device + + + + + Raster + + + + + TrueTypeOnly + + + + + Outline + + + + + ScreenOutline + + + + + PostScriptOnly + + + + + Specifies quality options for font rendering. + + QUALITY + + + + Default + + + + + Draft + + + + + Proof + + + + + Non antialiased + + + + + Antialiased + + + + + ClearType + + + + + ClearTypeNatural + + + + + Specifies weights for font rendering. + + FW + + + + Use a black weight. + + + + + Use a bold weight. + + + + + Use a demi-bold weight. + + + + + The font weight doesn't matter. + + + + + Use an extra bold weight. + + + + + Make the font extra light. + + + + + Use a heavy weight. + + + + + Make the font light. + + + + + Use a medium weight. + + + + + Use a normal weight. + + + + + Use a regular weight. + + + + + Use a semi-bold weight. + + + + + Make the font thin. + + + + + Use an ultra bold weight. + + + + + Make the font ultra light. + + + + +

    Defines constants that describe the type of back buffer.

    +
    + +

    Direct3D 9 does not support stereo view, so Direct3D does not use the and values of this enumerated type.

    +
    + + bb172506 + D3DBACKBUFFER_TYPE + D3DBACKBUFFER_TYPE +
    + + +

    Specifies a nonstereo swap chain.

    +
    + + bb172506 + D3DBACKBUFFER_TYPE_MONO + D3DBACKBUFFER_TYPE_MONO +
    + + +

    Specifies the left side of a stereo pair in a swap chain.

    +
    + + bb172506 + D3DBACKBUFFER_TYPE_LEFT + D3DBACKBUFFER_TYPE_LEFT +
    + + +

    Specifies the right side of a stereo pair in a swap chain.

    +
    + + bb172506 + D3DBACKBUFFER_TYPE_RIGHT + D3DBACKBUFFER_TYPE_RIGHT +
    + + +

    Defines the basis type of a high-order patch surface.

    +
    + +

    The members of specify the formulation to be used in evaluating the high-order patch surface primitive during tessellation.

    +
    + + bb172507 + D3DBASISTYPE + D3DBASISTYPE +
    + + +

    Input vertices are treated as a series of B?zier patches. The number of vertices specified must be divisible by 4. Portions of the mesh beyond this criterion will not be rendered. Full continuity is assumed between sub-patches in the interior of the surface rendered by each call. Only the vertices at the corners of each sub-patch are guaranteed to lie on the resulting surface.

    +
    + + bb172507 + D3DBASIS_BEZIER + D3DBASIS_BEZIER +
    + + +

    Input vertices are treated as control points of a B-spline surface. The number of apertures rendered is two fewer than the number of apertures in that direction. In general, the generated surface does not contain the control vertices specified.

    +
    + + bb172507 + D3DBASIS_BSPLINE + D3DBASIS_BSPLINE +
    + + +

    An interpolating basis defines the surface so that the surface goes through all the input vertices specified. In DirectX 8, this was D3DBASIS_INTERPOLATE.

    +
    + + bb172507 + D3DBASIS_CATMULL_ROM + D3DBASIS_CATMULL_ROM +
    + + +

    Defines the supported blend mode.

    +
    + +

    In the preceding member descriptions, the RGBA values of the source and destination are indicated by the s and d subscripts.

    The values in this enumerated type are used by the following render states:

    See

    +
    + + bb172508 + D3DBLEND + D3DBLEND +
    + + +

    Blend factor is (0, 0, 0, 0).

    +
    + + bb172508 + D3DBLEND_ZERO + D3DBLEND_ZERO +
    + + +

    Blend factor is (1, 1, 1, 1).

    +
    + + bb172508 + D3DBLEND_ONE + D3DBLEND_ONE +
    + + +

    Blend factor is (Rs, Gs, Bs, As).

    +
    + + bb172508 + D3DBLEND_SRCCOLOR + D3DBLEND_SRCCOLOR +
    + + +

    Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).

    +
    + + bb172508 + D3DBLEND_INVSRCCOLOR + D3DBLEND_INVSRCCOLOR +
    + + +

    Blend factor is (As, As, As, As).

    +
    + + bb172508 + D3DBLEND_SRCALPHA + D3DBLEND_SRCALPHA +
    + + +

    Blend factor is ( 1 - As, 1 - As, 1 - As, 1 - As).

    +
    + + bb172508 + D3DBLEND_INVSRCALPHA + D3DBLEND_INVSRCALPHA +
    + + +

    Blend factor is (Ad Ad Ad Ad).

    +
    + + bb172508 + D3DBLEND_DESTALPHA + D3DBLEND_DESTALPHA +
    + + +

    Blend factor is (1 - Ad 1 - Ad 1 - Ad 1 - Ad).

    +
    + + bb172508 + D3DBLEND_INVDESTALPHA + D3DBLEND_INVDESTALPHA +
    + + +

    Blend factor is (Rd, Gd, Bd, Ad).

    +
    + + bb172508 + D3DBLEND_DESTCOLOR + D3DBLEND_DESTCOLOR +
    + + +

    Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).

    +
    + + bb172508 + D3DBLEND_INVDESTCOLOR + D3DBLEND_INVDESTCOLOR +
    + + +

    Blend factor is (f, f, f, 1); where f = min(As, 1 - Ad).

    +
    + + bb172508 + D3DBLEND_SRCALPHASAT + D3DBLEND_SRCALPHASAT +
    + + +

    Obsolete. Starting with DirectX 6, you can achieve the same effect by setting the source and destination blend factors to and in separate calls.

    +
    + + bb172508 + D3DBLEND_BOTHSRCALPHA + D3DBLEND_BOTHSRCALPHA +
    + + +

    Obsolete. Source blend factor is (1 - As, 1 - As, 1 - As, 1 - As), and destination blend factor is (As, As, As, As); the destination blend selection is overridden. This blend mode is supported only for the render state.

    +
    + + bb172508 + D3DBLEND_BOTHINVSRCALPHA + D3DBLEND_BOTHINVSRCALPHA +
    + + +

    Constant color blending factor used by the frame-buffer blender. This blend mode is supported only if is set in the SrcBlendCaps or DestBlendCaps members of .

    +
    + + bb172508 + D3DBLEND_BLENDFACTOR + D3DBLEND_BLENDFACTOR +
    + + +

    Inverted constant color-blending factor used by the frame-buffer blender. This blend mode is supported only if the bit is set in the SrcBlendCaps or DestBlendCaps members of .

    +
    + + bb172508 + D3DBLEND_INVBLENDFACTOR + D3DBLEND_INVBLENDFACTOR +
    + + +

    Blend factor is (PSOutColor[1]r, PSOutColor[1]g, PSOutColor[1]b, not used). See Render.

    Differences between Direct3D 9 and Direct3D 9Ex:

    This flag is available in Direct3D 9Ex only.

    ?

    +
    + + bb172508 + D3DBLEND_SRCCOLOR2 + D3DBLEND_SRCCOLOR2 +
    + + +

    Blend factor is (1 - PSOutColor[1]r, 1 - PSOutColor[1]g, 1 - PSOutColor[1]b, not used)). See Render.

    Differences between Direct3D 9 and Direct3D 9Ex:

    This flag is available in Direct3D 9Ex only.

    ?

    +
    + + bb172508 + D3DBLEND_INVSRCCOLOR2 + D3DBLEND_INVSRCCOLOR2 +
    + + +

    Represents the capabilities of the hardware exposed through the Direct3D object.

    +
    + +

    The MaxTextureBlendStages and MaxSimultaneousTextures members might seem similar, but they contain different information. The MaxTextureBlendStages member contains the total number of texture-blending stages supported by the current device, and the MaxSimultaneousTextures member describes how many of those stages can have textures bound to them by using the SetTexture method.

    When the driver fills this structure, it can set values for execute-buffer capabilities, even when the interface being used to retrieve the capabilities (such as ) does not support execute buffers.

    In general, performance problems may occur if you use a texture and then modify it during a scene. Ensure that no texture used in the current BeginScene and EndScene block is evicted unless absolutely necessary. In the case of extremely high texture usage within a scene, the results are undefined. This occurs when you modify a texture that you have used in the scene and there is no spare texture memory available. For such systems, the contents of the z-buffer become invalid at EndScene. Applications should not call UpdateSurface to or from the back buffer on this type of hardware inside a BeginScene/EndScene pair. In addition, applications should not try to access the z-buffer if the capability flag is set. Finally, applications should not lock the back buffer or the z-buffer inside a BeginScene/EndScene pair.

    The following flags concerning mipmapped textures are not supported in Direct3D 9.

    • D3DPTFILTERCAPS_LINEAR
    • D3DPTFILTERCAPS_LINEARMIPLINEAR
    • D3DPTFILTERCAPS_LINEARMIPNEAREST
    • D3DPTFILTERCAPS_MIPNEAREST
    • D3DPTFILTERCAPS_NEAREST
    +
    + + bb172513 + D3DPBLENDCAPS + D3DPBLENDCAPS +
    + + +

    Member of the enumerated type, which identifies what type of resources are used for processing vertices.

    +
    + + bb172513 + D3DPBLENDCAPS_ZERO + D3DPBLENDCAPS_ZERO +
    + + +

    Adapter on which this Direct3D device was created. This ordinal is valid only to pass to methods of the interface that created this Direct3D device. The interface can always be retrieved by calling GetDirect3D.

    +
    + + bb172513 + D3DPBLENDCAPS_ONE + D3DPBLENDCAPS_ONE +
    + + +

    The following driver-specific capability.

    ValueMeaning

    Display hardware is capable of returning the current scan line.

    The display driver supports an overlay DDI that allows for verification of overlay capabilities. For more information about the overlay DDI, see Overlay DDI.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    ?

    +
    + + bb172513 + D3DPBLENDCAPS_SRCCOLOR + D3DPBLENDCAPS_SRCCOLOR +
    + + +

    Driver-specific capabilities identified in .

    +
    + + bb172513 + D3DPBLENDCAPS_INVSRCCOLOR + D3DPBLENDCAPS_INVSRCCOLOR +
    + + +

    Driver-specific capabilities identified in .

    +
    + + bb172513 + D3DPBLENDCAPS_SRCALPHA + D3DPBLENDCAPS_SRCALPHA +
    + + +

    Bit mask of values representing what presentation swap intervals are available.

    ValueMeaning

    The driver supports an immediate presentation swap interval.

    The driver supports a presentation swap interval of every screen refresh.

    The driver supports a presentation swap interval of every second screen refresh.

    The driver supports a presentation swap interval of every third screen refresh.

    The driver supports a presentation swap interval of every fourth screen refresh.

    ?

    +
    + + bb172513 + D3DPBLENDCAPS_INVSRCALPHA + D3DPBLENDCAPS_INVSRCALPHA +
    + + +

    Bit mask indicating what hardware support is available for cursors. Direct3D 9 does not define alpha-blending cursor capabilities.

    ValueMeaning

    A full-color cursor is supported in hardware. Specifically, this flag indicates that the driver supports at least a hardware color cursor in high-resolution modes (with scan lines greater than or equal to 400).

    A full-color cursor is supported in hardware. Specifically, this flag indicates that the driver supports a hardware color cursor in both high-resolution and low-resolution modes (with scan lines less than 400).

    ?

    +
    + + bb172513 + D3DPBLENDCAPS_DESTALPHA + D3DPBLENDCAPS_DESTALPHA +
    + + +

    Flags identifying the capabilities of the device.

    ValueMeaning

    Device supports blits from system-memory textures to nonlocal video-memory textures.

    Device can queue rendering commands after a page flip. Applications do not change their behavior if this flag is set; this capability means that the device is relatively fast.

    Device can support at least a DirectX 5-compliant driver.

    Device can support at least a DirectX 7-compliant driver.

    Device exports an -aware hal.

    Device can use execute buffers from system memory.

    Device can use execute buffers from video memory.

    Device has hardware acceleration for scene rasterization.

    Device can support transformation and lighting in hardware.

    Device supports N patches.

    Device can support rasterization, transform, lighting, and shading in hardware.

    Device supports quintic B?zier curves and B-splines.

    Device supports rectangular and triangular patches.

    When this device capability is set, the hardware architecture does not require caching of any information, and uncached patches (handle zero) will be drawn as efficiently as cached ones. Note that setting does not mean that a patch with handle zero can be drawn. A handle-zero patch can always be drawn whether this cap is set or not.

    Device is texturing from separate memory pools.

    Device can retrieve textures from non-local video memory.

    Device can retrieve textures from system memory.

    Device can retrieve textures from device memory.

    Device can use buffers from system memory for transformed and lit vertices.

    Device can use buffers from video memory for transformed and lit vertices.

    ?

    +
    + + bb172513 + D3DPBLENDCAPS_INVDESTALPHA + D3DPBLENDCAPS_INVDESTALPHA +
    + + +

    Miscellaneous driver primitive capabilities. See .

    +
    + + bb172513 + D3DPBLENDCAPS_DESTCOLOR + D3DPBLENDCAPS_DESTCOLOR +
    + + +

    Information on raster-drawing capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Device supports anisotropic filtering.

    Device iterates colors perspective correctly.

    Device can dither to improve color resolution.

    Device supports legacy depth bias. For true depth bias, see .

    Device supports range-based fog. In range-based fog, the distance of an object from the viewer is used to compute fog effects, not the depth of the object (that is, the z-coordinate) in the scene.

    Device calculates the fog value by referring to a lookup table containing fog values that are indexed to the depth of a given pixel.

    Device calculates the fog value during the lighting operation and interpolates the fog value during rasterization.

    Device supports level-of-detail bias adjustments. These bias adjustments enable an application to make a mipmap appear crisper or less sharp than it normally would. For more information about level-of-detail bias in mipmaps, see .

    Device supports toggling multisampling on and off between and (using ).

    Device supports scissor test. See Scissor Test (Direct3D 9).

    Device performs true slope-scale based depth bias. This is in contrast to the legacy style depth bias.

    Device supports depth buffering using w.

    Device supports w-based fog. W-based fog is used when a perspective projection matrix is specified, but affine projections still use z-based fog. The system considers a projection matrix that contains a nonzero value in the [3][4] element to be a perspective projection matrix.

    Device can perform hidden-surface removal (HSR) without requiring the application to sort polygons and without requiring the allocation of a depth-buffer. This leaves more video memory for textures. The method used to perform HSR is hardware-dependent and is transparent to the application.

    Z-bufferless HSR is performed if no depth-buffer surface is associated with the rendering-target surface and the depth-buffer comparison test is enabled (that is, when the state value associated with the enumeration constant is set to TRUE).

    Device supports z-based fog.

    Device can perform z-test operations. This effectively renders a primitive and indicates whether any z pixels have been rendered.

    ?

    +
    + + bb172513 + D3DPBLENDCAPS_INVDESTCOLOR + D3DPBLENDCAPS_INVDESTCOLOR +
    + + +

    Z-buffer comparison capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Always pass the z-test.

    Pass the z-test if the new z equals the current z.

    Pass the z-test if the new z is greater than the current z.

    Pass the z-test if the new z is greater than or equal to the current z.

    Pass the z-test if the new z is less than the current z.

    Pass the z-test if the new z is less than or equal to the current z.

    Always fail the z-test.

    Pass the z-test if the new z does not equal the current z.

    ?

    +
    + + bb172513 + D3DPBLENDCAPS_SRCALPHASAT + D3DPBLENDCAPS_SRCALPHASAT +
    + + +

    Source-blending capabilities. This member can be one or more of the following flags. (The RGBA values of the source and destination are indicated by the subscripts s and d.)

    ValueMeaning

    The driver supports both and . See .

    Source blend factor is (1 - As, 1 - As, 1 - As, 1 - As) and destination blend factor is (As, As, As, As); the destination blend selection is overridden.

    The driver supports the blend mode. (This blend mode is obsolete. For more information, see .)

    Blend factor is (Ad, Ad, Ad, Ad).

    Blend factor is (Rd, Gd, Bd, Ad).

    Blend factor is (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad).

    Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).

    Blend factor is (1 - As, 1 - As, 1 - As, 1 - As).

    Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).

    Blend factor is (1 - PSOutColor[1]r, 1 - PSOutColor[1]g, 1 - PSOutColor[1]b, not used)). See Render Target Blending.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    Blend factor is (1, 1, 1, 1).

    Blend factor is (As, As, As, As).

    Blend factor is (f, f, f, 1); f = min(As, 1 - Ad).

    Blend factor is (Rs, Gs, Bs, As).

    Blend factor is (PSOutColor[1]r, PSOutColor[1]g, PSOutColor[1]b, not used). See Render Target Blending.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    Blend factor is (0, 0, 0, 0).

    ?

    +
    + + bb172513 + D3DPBLENDCAPS_BOTHSRCALPHA + D3DPBLENDCAPS_BOTHSRCALPHA +
    + + +

    Destination-blending capabilities. This member can be the same capabilities that are defined for the SrcBlendCaps member.

    +
    + + bb172513 + D3DPBLENDCAPS_BOTHINVSRCALPHA + D3DPBLENDCAPS_BOTHINVSRCALPHA +
    + + +

    Alpha-test comparison capabilities. This member can include the same capability flags defined for the ZCmpCaps member. If this member contains only the capability or only the capability, the driver does not support alpha tests. Otherwise, the flags identify the individual comparisons that are supported for alpha testing.

    +
    + + bb172513 + D3DPBLENDCAPS_BLENDFACTOR + D3DPBLENDCAPS_BLENDFACTOR +
    + + +

    Shading operations capabilities. It is assumed, in general, that if a device supports a given command at all, it supports the mode (as specified in the enumerated type). This flag specifies whether the driver can also support Gouraud shading and whether alpha color components are supported. When alpha components are not supported, the alpha value of colors generated is implicitly 255. This is the maximum possible alpha (that is, the alpha component is at full intensity).

    The color, specular highlights, fog, and alpha interpolants of a triangle each have capability flags that an application can use to find out how they are implemented by the device driver.

    This member can be one or more of the following flags.

    ValueMeaning

    Device can support an alpha component for Gouraud-blended transparency (the state for the enumerated type). In this mode, the alpha color component of a primitive is provided at vertices and interpolated across a face along with the other color components.

    Device can support colored Gouraud shading. In this mode, the per-vertex color components (red, green, and blue) are interpolated across a triangle face.

    Device can support fog in the Gouraud shading mode.

    Device supports Gouraud shading of specular highlights.

    ?

    +
    + + bb172513 + D3DPBLENDCAPS_SRCCOLOR2 + D3DPBLENDCAPS_SRCCOLOR2 +
    + + +

    Miscellaneous texture-mapping capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Alpha in texture pixels is supported.

    Device can draw alpha from texture palettes.

    Supports cube textures.

    Device requires that cube texture maps have dimensions specified as powers of two.

    Device supports mipmapped cube textures.

    Device supports mipmapped textures.

    Device supports mipmapped volume textures.

    is also set, conditionally supports the use of 2D textures with dimensions that are not powers of two. A device that exposes this capability can use such a texture if all of the following requirements are met.

    • The texture addressing mode for the texture stage is set to .
    • Texture wrapping for the texture stage is disabled (D3DRS_WRAP n set to 0).
    • Mipmapping is not in use (use magnification filter only).
    • Texture formats must not be through .

    If this flag is not set, and is also not set, then unconditional support is provided for 2D textures with dimensions that are not powers of two.

    A texture that is not a power of two cannot be set at a stage that will be read based on a shader computation (such as the bem - ps and texm3x3 - ps instructions in pixel shaders versions 1_0 to 1_3). For example, these textures can be used to store bumps that will be fed into texture reads, but not the environment maps that are used in texbem - ps, texbeml - ps, and texm3x3spec - ps. This means that a texture with dimensions that are not powers of two cannot be addressed or sampled using texture coordinates computed within the shader. This type of operation is known as a dependent read and cannot be performed on these types of textures.

    Device does not support a projected bump-environment loopkup operation in programmable and fixed function shaders.

    Perspective correction texturing is supported.

    If is not set, all textures must have widths and heights specified as powers of two. This requirement does not apply to either cube textures or volume textures.

    If is also set, conditionally supports the use of 2D textures with dimensions that are not powers of two. See description.

    If this flag is not set, and is also not set, then unconditional support is provided for 2D textures with dimensions that are not powers of two.

    Supports the texture transformation flag. When applied, the device divides transformed texture coordinates by the last texture coordinate. If this capability is present, then the projective divide occurs per pixel. If this capability is not present, but the projective divide needs to occur anyway, then it is performed on a per-vertex basis by the Direct3D runtime.

    All textures must be square.

    Texture indices are not scaled by the texture size prior to interpolation.

    Device supports volume textures.

    Device requires that volume texture maps have dimensions specified as powers of two.

    ?

    +
    + + bb172513 + D3DPBLENDCAPS_INVSRCCOLOR2 + D3DPBLENDCAPS_INVSRCCOLOR2 +
    + + +

    Defines the supported blend operations. See Remarks for definitions of terms.

    +
    + +

    Source, Destination, and Result are defined as:

    TermTypeDescription
    SourceInputColor of the source pixel before the operation.
    DestinationInputColor of the pixel in the destination buffer before the operation.
    ResultOutputReturned value that is the blended color resulting from the operation.

    ?

    This enumerated type defines values used by the following render states:

    +
    + + bb172509 + D3DBLENDOP + D3DBLENDOP +
    + + +

    The result is the destination added to the source. Result = Source + Destination

    +
    + + bb172509 + D3DBLENDOP_ADD + D3DBLENDOP_ADD +
    + + +

    The result is the destination subtracted from to the source. Result = Source - Destination

    +
    + + bb172509 + D3DBLENDOP_SUBTRACT + D3DBLENDOP_SUBTRACT +
    + + +

    The result is the source subtracted from the destination. Result = Destination - Source

    +
    + + bb172509 + D3DBLENDOP_REVSUBTRACT + D3DBLENDOP_REVSUBTRACT +
    + + +

    The result is the minimum of the source and destination. Result = MIN(Source, Destination)

    +
    + + bb172509 + D3DBLENDOP_MIN + D3DBLENDOP_MIN +
    + + +

    The result is the maximum of the source and destination. Result = MAX(Source, Destination)

    +
    + + bb172509 + D3DBLENDOP_MAX + D3DBLENDOP_MAX +
    + + +

    Flags used to obtain callback information.

    +
    + + bb172714 + D3DXCALLBACK_SEARCH_FLAGS + D3DXCALLBACK_SEARCH_FLAGS +
    + + +

    Exclude callbacks located at the initial position from the search.

    +
    + + bb172714 + D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION + D3DXCALLBACK_SEARCH_EXCLUDING_INITIAL_POSITION +
    + + +

    Reverse the callback search direction.

    +
    + + bb172714 + D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION + D3DXCALLBACK_SEARCH_BEHIND_INITIAL_POSITION +
    + + +

    Obsolete in DirectX 8.0 and later versions; see Remarks.

    The D3DLIGHTINGCAPS structure describes the lighting capabilities of a device.

    +
    + +

    This structure has been replaced by D3DCAPS8 (see the DirectX 8.0 SDK documentation) for DirectX 8.0 and later runtimes, but is required for DirectX 7.0 and earlier runtime compatibility. See Reporting DirectX 8.0 Style Direct3D Capabilities for details.

    This structure is a member of the D3DDEVICEDESC_V1 structure.

    +
    + + ff548471 + D3DCAPS + D3DCAPS +
    + + +

    Specifies the size, in bytes, of the D3DLIGHTINGCAPS structure.

    +
    + + ff548471 + D3DCAPS_OVERLAY + D3DCAPS_OVERLAY +
    + + +

    Specifies flags describing the capabilities of the lighting module. The following flags are defined:

    ValueMeaning
    D3DLIGHTCAPS_DIRECTIONALDirectional lights are supported. +
    D3DLIGHTCAPS_GLSPOTOpenGL-style spotlights are supported.
    D3DLIGHTCAPS_PARALLELPOINTParallel-point lights are supported.
    D3DLIGHTCAPS_POINTPoint lights are supported.
    D3DLIGHTCAPS_SPOTSpotlights are supported. +

    ?

    +
    + + ff548471 + D3DCAPS_READ_SCANLINE + D3DCAPS_READ_SCANLINE +
    + + + None. + + + None + None + + + +

    Driver capability flags.

    +
    + + bb172511 + D3DCAPS2 + D3DCAPS2 +
    + + + No documentation. + + + bb172511 + D3DCAPS2_FULLSCREENGAMMA + D3DCAPS2_FULLSCREENGAMMA + + + + No documentation. + + + bb172511 + D3DCAPS2_CANCALIBRATEGAMMA + D3DCAPS2_CANCALIBRATEGAMMA + + + + No documentation. + + + bb172511 + D3DCAPS2_CANMANAGERESOURCE + D3DCAPS2_CANMANAGERESOURCE + + + + No documentation. + + + bb172511 + D3DCAPS2_DYNAMICTEXTURES + D3DCAPS2_DYNAMICTEXTURES + + + + No documentation. + + + bb172511 + D3DCAPS2_CANAUTOGENMIPMAP + D3DCAPS2_CANAUTOGENMIPMAP + + + + No documentation. + + + bb172511 + D3DCAPS2_CANSHARERESOURCE + D3DCAPS2_CANSHARERESOURCE + + + + None. + + + None + None + + + +

    Driver capability flags.

    +
    + + bb172512 + D3DCAPS3 + D3DCAPS3 +
    + + + No documentation. + + + bb172512 + D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD + D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD + + + + No documentation. + + + bb172512 + D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION + D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION + + + + No documentation. + + + bb172512 + D3DCAPS3_COPY_TO_VIDMEM + D3DCAPS3_COPY_TO_VIDMEM + + + + No documentation. + + + bb172512 + D3DCAPS3_COPY_TO_SYSTEMMEM + D3DCAPS3_COPY_TO_SYSTEMMEM + + + + No documentation. + + + bb172512 + D3DCAPS3_DXVAHD + D3DCAPS3_DXVAHD + + + + None. + + + None + None + + + +

    The following flags are used to specify which channels in a texture to operate on.

    +
    + + bb205563 + D3DX_CHANNEL + D3DX_CHANNEL +
    + + + No documentation. + + + bb205563 + D3DX_CHANNEL_RED + D3DX_CHANNEL_RED + + + + No documentation. + + + bb205563 + D3DX_CHANNEL_BLUE + D3DX_CHANNEL_BLUE + + + + No documentation. + + + bb205563 + D3DX_CHANNEL_GREEN + D3DX_CHANNEL_GREEN + + + + No documentation. + + + bb205563 + D3DX_CHANNEL_ALPHA + D3DX_CHANNEL_ALPHA + + + + No documentation. + + + bb205563 + D3DX_CHANNEL_LUMINANCE + D3DX_CHANNEL_LUMINANCE + + + +

    Defines operations to perform on vertices in preparation for mesh cleaning.

    +
    + + bb172720 + D3DXCLEANTYPE + D3DXCLEANTYPE +
    + + +

    Merge triangles that share the same vertex indices but have face normals pointing in opposite directions (back-facing triangles). Unless the triangles are not split by adding a replicated vertex, mesh adjacency data from the two triangles may conflict.

    +
    + + bb172720 + D3DXCLEAN_BACKFACING + D3DXCLEAN_BACKFACING +
    + + +

    If a vertex is the apex of two triangle fans (a bowtie) and mesh operations will affect one of the fans, then split the shared vertex into two new vertices. Bowties can cause problems for operations such as mesh simplification that remove vertices, because removing one vertex affects two distinct sets of triangles.

    +
    + + bb172720 + D3DXCLEAN_BOWTIES + D3DXCLEAN_BOWTIES +
    + + +

    Use this flag to prevent infinite loops during skinning setup mesh operations.

    +
    + + bb172720 + D3DXCLEAN_SKINNING + D3DXCLEAN_SKINNING +
    + + +

    Use this flag to prevent infinite loops during mesh optimization operations.

    +
    + + bb172720 + D3DXCLEAN_OPTIMIZATION + D3DXCLEAN_OPTIMIZATION +
    + + +

    Use this flag to prevent infinite loops during mesh simplification operations.

    +
    + + bb172720 + D3DXCLEAN_SIMPLIFICATION + D3DXCLEAN_SIMPLIFICATION +
    + + +

    These flags identify a surface to reset when calling Clear.

    +
    + + bb172514 + D3DCLEAR + D3DCLEAR +
    + + + No documentation. + + + bb172514 + D3DCLEAR_TARGET + D3DCLEAR_TARGET + + + + No documentation. + + + bb172514 + D3DCLEAR_ZBUFFER + D3DCLEAR_ZBUFFER + + + + No documentation. + + + bb172514 + D3DCLEAR_STENCIL + D3DCLEAR_STENCIL + + + + No documentation. + + + bb172514 + D3DCLEAR_ALL + D3DCLEAR_ALL + + + + None. + + + None + None + + + +

    Describes the current clip status.

    +
    + +

    When clipping is enabled during vertex processing (by ProcessVertices, DrawPrimitive, or other drawing functions), Direct3D computes a clip code for every vertex. The clip code is a combination of D3DCS_* bits. When a vertex is outside a particular clipping plane, the corresponding bit is set in the clipping code. Direct3D maintains the clip status using , which has ClipUnion and ClipIntersection members. ClipUnion is a bitwise OR of all vertex clip codes and ClipIntersection is a bitwise AND of all vertex clip codes. Initial values are zero for ClipUnion and 0xFFFFFFFF for ClipIntersection. When is set to , ClipUnion and ClipIntersection are set to zero. Direct3D updates the clip status during drawing calls. To compute clip status for a particular object, set ClipUnion and ClipIntersection to their initial value and continue drawing.

    Clip status is not updated by DrawRectPatch and DrawTriPatch because there is no software emulation for them.

    +
    + + bb172516 + D3DCS + D3DCS +
    + + +

    Clip union flags that describe the current clip status. This member can be one or more of the following flags:

    ValueMeaning

    Combination of all clip flags.

    All vertices are clipped by the left plane of the viewing frustum.

    All vertices are clipped by the right plane of the viewing frustum.

    All vertices are clipped by the top plane of the viewing frustum.

    All vertices are clipped by the bottom plane of the viewing frustum.

    All vertices are clipped by the front plane of the viewing frustum.

    All vertices are clipped by the back plane of the viewing frustum.

    Application-defined clipping planes.

    Application-defined clipping planes.

    Application-defined clipping planes.

    Application-defined clipping planes.

    Application-defined clipping planes.

    Application-defined clipping planes.

    ?

    +
    + + bb172516 + D3DCS_LEFT + D3DCS_LEFT +
    + + +

    Clip intersection flags that describe the current clip status. This member can take the same flags as ClipUnion.

    +
    + + bb172516 + D3DCS_RIGHT + D3DCS_RIGHT +
    + + + No documentation. + + + bb172516 + D3DCS_TOP + D3DCS_TOP + + + + No documentation. + + + bb172516 + D3DCS_BOTTOM + D3DCS_BOTTOM + + + + No documentation. + + + bb172516 + D3DCS_FRONT + D3DCS_FRONT + + + + No documentation. + + + bb172516 + D3DCS_BACK + D3DCS_BACK + + + + No documentation. + + + bb172516 + D3DCS_PLANE0 + D3DCS_PLANE0 + + + + No documentation. + + + bb172516 + D3DCS_PLANE1 + D3DCS_PLANE1 + + + + No documentation. + + + bb172516 + D3DCS_PLANE2 + D3DCS_PLANE2 + + + + No documentation. + + + bb172516 + D3DCS_PLANE3 + D3DCS_PLANE3 + + + + No documentation. + + + bb172516 + D3DCS_PLANE4 + D3DCS_PLANE4 + + + + No documentation. + + + bb172516 + D3DCS_PLANE5 + D3DCS_PLANE5 + + + + No documentation. + + + bb172516 + D3DCS_ALL + D3DCS_ALL + + + + No documentation. + + + D3DMATERIALCOLORSOURCE + D3DMATERIALCOLORSOURCE + + + + No documentation. + + + D3DMCS_MATERIAL + D3DMCS_MATERIAL + + + + No documentation. + + + D3DMCS_COLOR1 + D3DMCS_COLOR1 + + + + No documentation. + + + D3DMCS_COLOR2 + D3DMCS_COLOR2 + + + +

    Render states define set-up states for all kinds of vertex and pixel processing. Some render states set up vertex processing, and some set up pixel processing (see Render States (Direct3D 9)). Render states can be saved and restored using stateblocks (see State Blocks Save and Restore State (Direct3D 9)).

    +
    + +
    Render States
    ps_1_1 to ps_1_34 texture samplers

    ?

    Direct3D defines the D3DRENDERSTATE_WRAPBIAS constant as a convenience for applications to enable or disable texture wrapping, based on the zero-based integer of a texture coordinate set (rather than explicitly using one of the D3DRS_WRAP n state values). Add the D3DRENDERSTATE_WRAPBIAS value to the zero-based index of a texture coordinate set to calculate the D3DRS_WRAP n value that corresponds to that index, as shown in the following example.

     // Enable U/V wrapping for textures that use the texture 	
    +            // coordinate set at the index within the dwIndex variable  hr = pd3dDevice->SetRenderState(	
    +            dwIndex + D3DRENDERSTATE_WRAPBIAS,  	
    +             | ); // If dwIndex is 3, the value that results from 	
    +            // the addition equals  (131)	
    +            
    +
    + + bb172599 + D3DCOLORWRITEENABLE + D3DCOLORWRITEENABLE +
    + + + No documentation. + + + bb172599 + D3DCOLORWRITEENABLE_RED + D3DCOLORWRITEENABLE_RED + + + + No documentation. + + + bb172599 + D3DCOLORWRITEENABLE_GREEN + D3DCOLORWRITEENABLE_GREEN + + + + No documentation. + + + bb172599 + D3DCOLORWRITEENABLE_BLUE + D3DCOLORWRITEENABLE_BLUE + + + + No documentation. + + + bb172599 + D3DCOLORWRITEENABLE_ALPHA + D3DCOLORWRITEENABLE_ALPHA + + + +

    Defines the supported compare functions.

    +
    + +

    The values in this enumerated type define the supported compare functions for the , , and render states.

    +
    + + bb172517 + D3DCMPFUNC + D3DCMPFUNC +
    + + +

    Always fail the test.

    +
    + + bb172517 + D3DCMP_NEVER + D3DCMP_NEVER +
    + + +

    Accept the new pixel if its value is less than the value of the current pixel.

    +
    + + bb172517 + D3DCMP_LESS + D3DCMP_LESS +
    + + +

    Accept the new pixel if its value equals the value of the current pixel.

    +
    + + bb172517 + D3DCMP_EQUAL + D3DCMP_EQUAL +
    + + +

    Accept the new pixel if its value is less than or equal to the value of the current pixel.

    +
    + + bb172517 + D3DCMP_LESSEQUAL + D3DCMP_LESSEQUAL +
    + + +

    Accept the new pixel if its value is greater than the value of the current pixel.

    +
    + + bb172517 + D3DCMP_GREATER + D3DCMP_GREATER +
    + + +

    Accept the new pixel if its value does not equal the value of the current pixel.

    +
    + + bb172517 + D3DCMP_NOTEQUAL + D3DCMP_NOTEQUAL +
    + + +

    Accept the new pixel if its value is greater than or equal to the value of the current pixel.

    +
    + + bb172517 + D3DCMP_GREATEREQUAL + D3DCMP_GREATEREQUAL +
    + + +

    Always pass the test.

    +
    + + bb172517 + D3DCMP_ALWAYS + D3DCMP_ALWAYS +
    + + +

    C++ applications can use alpha testing to control when pixels are written to the render-target surface. By using the render state, your application sets the current Direct3D device so that it tests each pixel according to an alpha test function. If the test succeeds, the pixel is written to the surface. If it does not, Direct3D ignores the pixel. Select the alpha test function with the render state. Your application can set a reference alpha value for all pixels to compare against by using the render state.

    The most common use for alpha testing is to improve performance when rasterizing objects that are nearly transparent. If the color data being rasterized is more opaque than the color at a given pixel (), then the pixel is written. Otherwise, the rasterizer ignores the pixel altogether, saving the processing required to blend the two colors. The following code example checks if a given comparison function is supported and, if so, it sets the comparison function parameters required to improve performance during rendering.

     // This code example assumes that pCaps is a	
    +            //  structure that was filled with a 	
    +            // previous call to . if (pCaps.AlphaCmpCaps & )	
    +            { dev->SetRenderState(, (DWORD)0x00000001); dev->SetRenderState(, TRUE);  dev->SetRenderState(, );	
    +            } // If the comparison is not supported, render anyway. 	
    +            // The only drawback is no performance gain.	
    +            

    Not all hardware supports all alpha-testing features. You can check the device capabilities by calling the method. After retrieving the device capabilities, check the associated structure's AlphaCmpCaps member for the desired comparison function. If the AlphaCmpCaps member contains only the capability or only the capability, the driver does not support alpha tests.

    ?

    ?

    +
    + + bb172254 + D3DPCMPCAPS + D3DPCMPCAPS +
    + + + No documentation. + + + bb172254 + D3DPCMPCAPS_NEVER + D3DPCMPCAPS_NEVER + + + + No documentation. + + + bb172254 + D3DPCMPCAPS_LESS + D3DPCMPCAPS_LESS + + + + No documentation. + + + bb172254 + D3DPCMPCAPS_EQUAL + D3DPCMPCAPS_EQUAL + + + + No documentation. + + + bb172254 + D3DPCMPCAPS_LESSEQUAL + D3DPCMPCAPS_LESSEQUAL + + + + No documentation. + + + bb172254 + D3DPCMPCAPS_GREATER + D3DPCMPCAPS_GREATER + + + + No documentation. + + + bb172254 + D3DPCMPCAPS_NOTEQUAL + D3DPCMPCAPS_NOTEQUAL + + + + No documentation. + + + bb172254 + D3DPCMPCAPS_GREATEREQUAL + D3DPCMPCAPS_GREATEREQUAL + + + + No documentation. + + + bb172254 + D3DPCMPCAPS_ALWAYS + D3DPCMPCAPS_ALWAYS + + + +

    Specifies how to combine the glyph data from the source and destination surfaces in a call to ComposeRects.

    +
    + + bb509546 + D3DCOMPOSERECTSOP + D3DCOMPOSERECTSOP +
    + + + No documentation. + + + bb509546 + D3DCOMPOSERECTS_COPY + D3DCOMPOSERECTS_COPY + + + + No documentation. + + + bb509546 + D3DCOMPOSERECTS_OR + D3DCOMPOSERECTS_OR + + + + No documentation. + + + bb509546 + D3DCOMPOSERECTS_AND + D3DCOMPOSERECTS_AND + + + + No documentation. + + + bb509546 + D3DCOMPOSERECTS_NEG + D3DCOMPOSERECTS_NEG + + + +

    Defines the compression mode used for storing compressed animation set data.

    +
    + + bb172734 + D3DXCOMPRESSION_FLAGS + D3DXCOMPRESSION_FLAGS +
    + + +

    Implements fast compression.

    +
    + + bb172734 + D3DXCOMPRESS_DEFAULT + D3DXCOMPRESS_DEFAULT +
    + + +

    A combination of one or more flags that control the device create behavior.

    +
    + + bb172527 + D3DCREATE + D3DCREATE +
    + + + No documentation. + + + bb172527 + D3DCREATE_FPU_PRESERVE + D3DCREATE_FPU_PRESERVE + + + + No documentation. + + + bb172527 + D3DCREATE_MULTITHREADED + D3DCREATE_MULTITHREADED + + + + No documentation. + + + bb172527 + D3DCREATE_PUREDEVICE + D3DCREATE_PUREDEVICE + + + + No documentation. + + + bb172527 + D3DCREATE_SOFTWARE_VERTEXPROCESSING + D3DCREATE_SOFTWARE_VERTEXPROCESSING + + + + No documentation. + + + bb172527 + D3DCREATE_HARDWARE_VERTEXPROCESSING + D3DCREATE_HARDWARE_VERTEXPROCESSING + + + + No documentation. + + + bb172527 + D3DCREATE_MIXED_VERTEXPROCESSING + D3DCREATE_MIXED_VERTEXPROCESSING + + + + No documentation. + + + bb172527 + D3DCREATE_DISABLE_DRIVER_MANAGEMENT + D3DCREATE_DISABLE_DRIVER_MANAGEMENT + + + + No documentation. + + + bb172527 + D3DCREATE_ADAPTERGROUP_DEVICE + D3DCREATE_ADAPTERGROUP_DEVICE + + + + No documentation. + + + bb172527 + D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX + D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX + + + + No documentation. + + + bb172527 + D3DCREATE_NOWINDOWCHANGES + D3DCREATE_NOWINDOWCHANGES + + + + No documentation. + + + bb172527 + D3DCREATE_DISABLE_PSGP_THREADING + D3DCREATE_DISABLE_PSGP_THREADING + + + + No documentation. + + + bb172527 + D3DCREATE_ENABLE_PRESENTSTATS + D3DCREATE_ENABLE_PRESENTSTATS + + + + No documentation. + + + bb172527 + D3DCREATE_DISABLE_PRINTSCREEN + D3DCREATE_DISABLE_PRINTSCREEN + + + + No documentation. + + + bb172527 + D3DCREATE_SCREENSAVER + D3DCREATE_SCREENSAVER + + + + None. + + + None + None + + + +

    Defines the faces of a cubemap.

    +
    + + bb172528 + D3DCUBEMAP_FACES + D3DCUBEMAP_FACES +
    + + +

    Positive x-face of the cubemap.

    +
    + + bb172528 + D3DCUBEMAP_FACE_POSITIVE_X + D3DCUBEMAP_FACE_POSITIVE_X +
    + + +

    Negative x-face of the cubemap.

    +
    + + bb172528 + D3DCUBEMAP_FACE_NEGATIVE_X + D3DCUBEMAP_FACE_NEGATIVE_X +
    + + +

    Positive y-face of the cubemap.

    +
    + + bb172528 + D3DCUBEMAP_FACE_POSITIVE_Y + D3DCUBEMAP_FACE_POSITIVE_Y +
    + + +

    Negative y-face of the cubemap.

    +
    + + bb172528 + D3DCUBEMAP_FACE_NEGATIVE_Y + D3DCUBEMAP_FACE_NEGATIVE_Y +
    + + +

    Positive z-face of the cubemap.

    +
    + + bb172528 + D3DCUBEMAP_FACE_POSITIVE_Z + D3DCUBEMAP_FACE_POSITIVE_Z +
    + + +

    Negative z-face of the cubemap.

    +
    + + bb172528 + D3DCUBEMAP_FACE_NEGATIVE_Z + D3DCUBEMAP_FACE_NEGATIVE_Z +
    + + +

    Defines the supported culling modes.

    +
    + +

    The values in this enumerated type are used by the render state. The culling modes define how back faces are culled when rendering a geometry.

    +
    + + bb172529 + D3DCULL + D3DCULL +
    + + +

    Do not cull back faces.

    +
    + + bb172529 + D3DCULL_NONE + D3DCULL_NONE +
    + + +

    Cull back faces with clockwise vertices.

    +
    + + bb172529 + D3DCULL_CW + D3DCULL_CW +
    + + +

    Cull back faces with counterclockwise vertices.

    +
    + + bb172529 + D3DCULL_CCW + D3DCULL_CCW +
    + + +

    Driver cursor capability flags.

    +
    + + bb172530 + D3DCURSORCAPS + D3DCURSORCAPS +
    + + + No documentation. + + + bb172530 + D3DCURSORCAPS_COLOR + D3DCURSORCAPS_COLOR + + + + No documentation. + + + bb172530 + D3DCURSORCAPS_LOWRES + D3DCURSORCAPS_LOWRES + + + + No documentation. + + + D3DDEBUGMONITORTOKENS + D3DDEBUGMONITORTOKENS + + + + No documentation. + + + D3DDMT_ENABLE + D3DDMT_ENABLE + + + + No documentation. + + + D3DDMT_DISABLE + D3DDMT_DISABLE + + + +

    Defines the vertex declaration method which is a predefined operation performed by the tessellator (or any procedural geometry routine on the vertex data during tessellation).

    +
    + +

    The tessellator looks at the method to determine what data to calculate from the vertex data during tessellation. Mesh data should use the default value. Patches can use any of the other implemented types.

    Vertex data is declared with an array of structures. Each element in the array contains a vertex declaration method.

    In addition to using , a normal mesh can use and methods when N-patches are enabled.

    +
    + + bb172532 + D3DDECLMETHOD + D3DDECLMETHOD +
    + + +

    Default value. The tessellator copies the vertex data (spline data for patches) as is, with no additional calculations. When the tessellator is used, this element is interpolated. Otherwise vertex data is copied into the input register. The input and output type can be any value, but are always the same type.

    +
    + + bb172532 + D3DDECLMETHOD_DEFAULT + D3DDECLMETHOD_DEFAULT +
    + + +

    Computes the tangent at a point on the rectangle or triangle patch in the U direction. The input type can be one of the following: +

    The output type is always .

    +
    + + bb172532 + D3DDECLMETHOD_PARTIALU + D3DDECLMETHOD_PARTIALU +
    + + +

    Computes the tangent at a point on the rectangle or triangle patch in the V direction. The input type can be one of the following: +

    The output type is always .

    +
    + + bb172532 + D3DDECLMETHOD_PARTIALV + D3DDECLMETHOD_PARTIALV +
    + + +

    Computes the normal at a point on the rectangle or triangle patch by taking the cross product of two tangents. The input type can be one of the following: +

    The output type is always .

    +
    + + bb172532 + D3DDECLMETHOD_CROSSUV + D3DDECLMETHOD_CROSSUV +
    + + +

    Copy out the U, V values at a point on the rectangle or triangle patch. This results in a 2D float. The input type must be set to . The output data type is always . The input stream and offset are also unused (but must be set to 0).

    +
    + + bb172532 + D3DDECLMETHOD_UV + D3DDECLMETHOD_UV +
    + + +

    Look up a displacement map. The input type can be one of the following: +

    Only the .x and .y components are used for the texture map lookup. The output type is always . The device must support displacement mapping. For more information about displacement mapping, see Displacement Mapping (Direct3D 9). This constant is supported only by the programmable pipeline on N-patch data, if N-patches are enabled.

    +
    + + bb172532 + D3DDECLMETHOD_LOOKUP + D3DDECLMETHOD_LOOKUP +
    + + +

    Look up a presampled displacement map. The input type must be set to ; the stream index and the stream offset must be set to 0. The output type for this operation is always . The device must support displacement mapping. For more information about displacement mapping, see Displacement Mapping (Direct3D 9). This constant is supported only by the programmable pipeline on N-patch data, if N-patches are enabled. This method can be used only with .

    +
    + + bb172532 + D3DDECLMETHOD_LOOKUPPRESAMPLED + D3DDECLMETHOD_LOOKUPPRESAMPLED +
    + + +

    Defines a vertex declaration data type.

    +
    + +

    Vertex data is declared with an array of structures. Each element in the array contains a vertex declaration data type.

    Use the DirectX Caps Viewer Tool tool to see which types are supported on your device.

    +
    + + bb172533 + D3DDECLTYPE + D3DDECLTYPE +
    + + +

    One-component float expanded to (float, 0, 0, 1).

    +
    + + bb172533 + D3DDECLTYPE_FLOAT1 + D3DDECLTYPE_FLOAT1 +
    + + +

    Two-component float expanded to (float, float, 0, 1).

    +
    + + bb172533 + D3DDECLTYPE_FLOAT2 + D3DDECLTYPE_FLOAT2 +
    + + +

    Three-component float expanded to (float, float, float, 1).

    +
    + + bb172533 + D3DDECLTYPE_FLOAT3 + D3DDECLTYPE_FLOAT3 +
    + + +

    Four-component float expanded to (float, float, float, float).

    +
    + + bb172533 + D3DDECLTYPE_FLOAT4 + D3DDECLTYPE_FLOAT4 +
    + + +

    Four-component, packed, unsigned bytes mapped to 0 to 1 range. Input is a and is expanded to RGBA order.

    +
    + + bb172533 + D3DDECLTYPE_D3DCOLOR + D3DDECLTYPE_D3DCOLOR +
    + + +

    Four-component, unsigned byte.

    +
    + + bb172533 + D3DDECLTYPE_UBYTE4 + D3DDECLTYPE_UBYTE4 +
    + + +

    Two-component, signed short expanded to (value, value, 0, 1).

    +
    + + bb172533 + D3DDECLTYPE_SHORT2 + D3DDECLTYPE_SHORT2 +
    + + +

    Four-component, signed short expanded to (value, value, value, value).

    +
    + + bb172533 + D3DDECLTYPE_SHORT4 + D3DDECLTYPE_SHORT4 +
    + + +

    Four-component byte with each byte normalized by dividing with 255.0f.

    +
    + + bb172533 + D3DDECLTYPE_UBYTE4N + D3DDECLTYPE_UBYTE4N +
    + + +

    Normalized, two-component, signed short, expanded to (first short/32767.0, second short/32767.0, 0, 1).

    +
    + + bb172533 + D3DDECLTYPE_SHORT2N + D3DDECLTYPE_SHORT2N +
    + + +

    Normalized, four-component, signed short, expanded to (first short/32767.0, second short/32767.0, third short/32767.0, fourth short/32767.0).

    +
    + + bb172533 + D3DDECLTYPE_SHORT4N + D3DDECLTYPE_SHORT4N +
    + + +

    Normalized, two-component, unsigned short, expanded to (first short/65535.0, short short/65535.0, 0, 1).

    +
    + + bb172533 + D3DDECLTYPE_USHORT2N + D3DDECLTYPE_USHORT2N +
    + + +

    Normalized, four-component, unsigned short, expanded to (first short/65535.0, second short/65535.0, third short/65535.0, fourth short/65535.0).

    +
    + + bb172533 + D3DDECLTYPE_USHORT4N + D3DDECLTYPE_USHORT4N +
    + + +

    Three-component, unsigned, 10 10 10 format expanded to (value, value, value, 1).

    +
    + + bb172533 + D3DDECLTYPE_UDEC3 + D3DDECLTYPE_UDEC3 +
    + + +

    Three-component, signed, 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1).

    +
    + + bb172533 + D3DDECLTYPE_DEC3N + D3DDECLTYPE_DEC3N +
    + + +

    Two-component, 16-bit, floating point expanded to (value, value, 0, 1).

    +
    + + bb172533 + D3DDECLTYPE_FLOAT16_2 + D3DDECLTYPE_FLOAT16_2 +
    + + +

    Four-component, 16-bit, floating point expanded to (value, value, value, value).

    +
    + + bb172533 + D3DDECLTYPE_FLOAT16_4 + D3DDECLTYPE_FLOAT16_4 +
    + + +

    Type field in the declaration is unused. This is designed for use with and .

    +
    + + bb172533 + D3DDECLTYPE_UNUSED + D3DDECLTYPE_UNUSED +
    + + +

    Constants describing the vertex data types supported by a device.

    +
    + + bb172552 + D3DDTCAPS + D3DDTCAPS +
    + + + No documentation. + + + bb172552 + D3DDTCAPS_UBYTE4 + D3DDTCAPS_UBYTE4 + + + + No documentation. + + + bb172552 + D3DDTCAPS_UBYTE4N + D3DDTCAPS_UBYTE4N + + + + No documentation. + + + bb172552 + D3DDTCAPS_SHORT2N + D3DDTCAPS_SHORT2N + + + + No documentation. + + + bb172552 + D3DDTCAPS_SHORT4N + D3DDTCAPS_SHORT4N + + + + No documentation. + + + bb172552 + D3DDTCAPS_USHORT2N + D3DDTCAPS_USHORT2N + + + + No documentation. + + + bb172552 + D3DDTCAPS_USHORT4N + D3DDTCAPS_USHORT4N + + + + No documentation. + + + bb172552 + D3DDTCAPS_UDEC3 + D3DDTCAPS_UDEC3 + + + + No documentation. + + + bb172552 + D3DDTCAPS_DEC3N + D3DDTCAPS_DEC3N + + + + No documentation. + + + bb172552 + D3DDTCAPS_FLOAT16_2 + D3DDTCAPS_FLOAT16_2 + + + + No documentation. + + + bb172552 + D3DDTCAPS_FLOAT16_4 + D3DDTCAPS_FLOAT16_4 + + + +

    Identifies the intended use of vertex data.

    +
    + +

    Vertex data is declared with an array of structures. Each element in the array contains a usage type.

    For more information about vertex declarations, see Vertex Declaration (Direct3D 9).

    +
    + + bb172534 + D3DDECLUSAGE + D3DDECLUSAGE +
    + + +

    Position data ranging from (-1,-1) to (1,1). Use with a usage index of 0 to specify untransformed position for fixed function vertex processing and the n-patch tessellator. Use with a usage index of 1 to specify untransformed position in the fixed function vertex shader for vertex tweening.

    +
    + + bb172534 + D3DDECLUSAGE_POSITION + D3DDECLUSAGE_POSITION +
    + + +

    Blending weight data. Use with a usage index of 0 to specify the blend weights used in indexed and nonindexed vertex blending.

    +
    + + bb172534 + D3DDECLUSAGE_BLENDWEIGHT + D3DDECLUSAGE_BLENDWEIGHT +
    + + +

    Blending indices data. Use with a usage index of 0 to specify matrix indices for indexed paletted skinning.

    +
    + + bb172534 + D3DDECLUSAGE_BLENDINDICES + D3DDECLUSAGE_BLENDINDICES +
    + + +

    Vertex normal data. Use with a usage index of 0 to specify vertex normals for fixed function vertex processing and the n-patch tessellator. Use with a usage index of 1 to specify vertex normals for fixed function vertex processing for vertex tweening.

    +
    + + bb172534 + D3DDECLUSAGE_NORMAL + D3DDECLUSAGE_NORMAL +
    + + +

    Point size data. Use with a usage index of 0 to specify the point-size attribute used by the setup engine of the rasterizer to expand a point into a quad for the point-sprite functionality.

    +
    + + bb172534 + D3DDECLUSAGE_PSIZE + D3DDECLUSAGE_PSIZE +
    + + +

    Texture coordinate data. Use , n to specify texture coordinates in fixed function vertex processing and in pixel shaders prior to ps_3_0. These can be used to pass user defined data.

    +
    + + bb172534 + D3DDECLUSAGE_TEXCOORD + D3DDECLUSAGE_TEXCOORD +
    + + +

    Vertex tangent data.

    +
    + + bb172534 + D3DDECLUSAGE_TANGENT + D3DDECLUSAGE_TANGENT +
    + + +

    Vertex binormal data.

    +
    + + bb172534 + D3DDECLUSAGE_BINORMAL + D3DDECLUSAGE_BINORMAL +
    + + +

    Single positive floating point value. Use with a usage index of 0 to specify a tessellation factor used in the tessellation unit to control the rate of tessellation. For more information about the data type, see .

    +
    + + bb172534 + D3DDECLUSAGE_TESSFACTOR + D3DDECLUSAGE_TESSFACTOR +
    + + +

    Vertex data contains transformed position data ranging from (0,0) to (viewport width, viewport height). Use with a usage index of 0 to specify transformed position. When a declaration containing this is set, the pipeline does not perform vertex processing.

    +
    + + bb172534 + D3DDECLUSAGE_POSITIONT + D3DDECLUSAGE_POSITIONT +
    + + +

    Vertex data contains diffuse or specular color. Use with a usage index of 0 to specify the diffuse color in the fixed function vertex shader and pixel shaders prior to ps_3_0. Use with a usage index of 1 to specify the specular color in the fixed function vertex shader and pixel shaders prior to ps_3_0.

    +
    + + bb172534 + D3DDECLUSAGE_COLOR + D3DDECLUSAGE_COLOR +
    + + +

    Vertex data contains fog data. Use with a usage index of 0 to specify a fog blend value used after pixel shading finishes. This applies to pixel shaders prior to version ps_3_0.

    +
    + + bb172534 + D3DDECLUSAGE_FOG + D3DDECLUSAGE_FOG +
    + + +

    Vertex data contains depth data.

    +
    + + bb172534 + D3DDECLUSAGE_DEPTH + D3DDECLUSAGE_DEPTH +
    + + +

    Vertex data contains sampler data. Use with a usage index of 0 to specify the displacement value to look up. It can be used only with D3DDECLUSAGE_LOOKUPPRESAMPLED or D3DDECLUSAGE_LOOKUP.

    +
    + + bb172534 + D3DDECLUSAGE_SAMPLE + D3DDECLUSAGE_SAMPLE +
    + + +

    Defines the degree of the variables in the equation that describes a curve.

    +
    + +

    The values in this enumeration are used to describe the curves used by rectangle and triangle patches. For more information, see .

    +
    + + bb172536 + D3DDEGREETYPE + D3DDEGREETYPE +
    + + +

    Curve is described by variables of first order.

    +
    + + bb172536 + D3DDEGREE_LINEAR + D3DDEGREE_LINEAR +
    + + +

    Curve is described by variables of second order.

    +
    + + bb172536 + D3DDEGREE_QUADRATIC + D3DDEGREE_QUADRATIC +
    + + +

    Curve is described by variables of third order.

    +
    + + bb172536 + D3DDEGREE_CUBIC + D3DDEGREE_CUBIC +
    + + +

    Curve is described by variables of fourth order.

    +
    + + bb172536 + D3DDEGREE_QUINTIC + D3DDEGREE_QUINTIC +
    + + +

    Represents the capabilities of the hardware exposed through the Direct3D object.

    +
    + +

    The MaxTextureBlendStages and MaxSimultaneousTextures members might seem similar, but they contain different information. The MaxTextureBlendStages member contains the total number of texture-blending stages supported by the current device, and the MaxSimultaneousTextures member describes how many of those stages can have textures bound to them by using the SetTexture method.

    When the driver fills this structure, it can set values for execute-buffer capabilities, even when the interface being used to retrieve the capabilities (such as ) does not support execute buffers.

    In general, performance problems may occur if you use a texture and then modify it during a scene. Ensure that no texture used in the current BeginScene and EndScene block is evicted unless absolutely necessary. In the case of extremely high texture usage within a scene, the results are undefined. This occurs when you modify a texture that you have used in the scene and there is no spare texture memory available. For such systems, the contents of the z-buffer become invalid at EndScene. Applications should not call UpdateSurface to or from the back buffer on this type of hardware inside a BeginScene/EndScene pair. In addition, applications should not try to access the z-buffer if the capability flag is set. Finally, applications should not lock the back buffer or the z-buffer inside a BeginScene/EndScene pair.

    The following flags concerning mipmapped textures are not supported in Direct3D 9.

    • D3DPTFILTERCAPS_LINEAR
    • D3DPTFILTERCAPS_LINEARMIPLINEAR
    • D3DPTFILTERCAPS_LINEARMIPNEAREST
    • D3DPTFILTERCAPS_MIPNEAREST
    • D3DPTFILTERCAPS_NEAREST
    +
    + + bb172513 + D3DDEVCAPS + D3DDEVCAPS +
    + + +

    Member of the enumerated type, which identifies what type of resources are used for processing vertices.

    +
    + + bb172513 + D3DDEVCAPS_EXECUTESYSTEMMEMORY + D3DDEVCAPS_EXECUTESYSTEMMEMORY +
    + + +

    Adapter on which this Direct3D device was created. This ordinal is valid only to pass to methods of the interface that created this Direct3D device. The interface can always be retrieved by calling GetDirect3D.

    +
    + + bb172513 + D3DDEVCAPS_EXECUTEVIDEOMEMORY + D3DDEVCAPS_EXECUTEVIDEOMEMORY +
    + + +

    The following driver-specific capability.

    ValueMeaning

    Display hardware is capable of returning the current scan line.

    The display driver supports an overlay DDI that allows for verification of overlay capabilities. For more information about the overlay DDI, see Overlay DDI.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    ?

    +
    + + bb172513 + D3DDEVCAPS_TLVERTEXSYSTEMMEMORY + D3DDEVCAPS_TLVERTEXSYSTEMMEMORY +
    + + +

    Driver-specific capabilities identified in .

    +
    + + bb172513 + D3DDEVCAPS_TLVERTEXVIDEOMEMORY + D3DDEVCAPS_TLVERTEXVIDEOMEMORY +
    + + +

    Driver-specific capabilities identified in .

    +
    + + bb172513 + D3DDEVCAPS_TEXTURESYSTEMMEMORY + D3DDEVCAPS_TEXTURESYSTEMMEMORY +
    + + +

    Bit mask of values representing what presentation swap intervals are available.

    ValueMeaning

    The driver supports an immediate presentation swap interval.

    The driver supports a presentation swap interval of every screen refresh.

    The driver supports a presentation swap interval of every second screen refresh.

    The driver supports a presentation swap interval of every third screen refresh.

    The driver supports a presentation swap interval of every fourth screen refresh.

    ?

    +
    + + bb172513 + D3DDEVCAPS_TEXTUREVIDEOMEMORY + D3DDEVCAPS_TEXTUREVIDEOMEMORY +
    + + +

    Bit mask indicating what hardware support is available for cursors. Direct3D 9 does not define alpha-blending cursor capabilities.

    ValueMeaning

    A full-color cursor is supported in hardware. Specifically, this flag indicates that the driver supports at least a hardware color cursor in high-resolution modes (with scan lines greater than or equal to 400).

    A full-color cursor is supported in hardware. Specifically, this flag indicates that the driver supports a hardware color cursor in both high-resolution and low-resolution modes (with scan lines less than 400).

    ?

    +
    + + bb172513 + D3DDEVCAPS_DRAWPRIMTLVERTEX + D3DDEVCAPS_DRAWPRIMTLVERTEX +
    + + +

    Flags identifying the capabilities of the device.

    ValueMeaning

    Device supports blits from system-memory textures to nonlocal video-memory textures.

    Device can queue rendering commands after a page flip. Applications do not change their behavior if this flag is set; this capability means that the device is relatively fast.

    Device can support at least a DirectX 5-compliant driver.

    Device can support at least a DirectX 7-compliant driver.

    Device exports an -aware hal.

    Device can use execute buffers from system memory.

    Device can use execute buffers from video memory.

    Device has hardware acceleration for scene rasterization.

    Device can support transformation and lighting in hardware.

    Device supports N patches.

    Device can support rasterization, transform, lighting, and shading in hardware.

    Device supports quintic B?zier curves and B-splines.

    Device supports rectangular and triangular patches.

    When this device capability is set, the hardware architecture does not require caching of any information, and uncached patches (handle zero) will be drawn as efficiently as cached ones. Note that setting does not mean that a patch with handle zero can be drawn. A handle-zero patch can always be drawn whether this cap is set or not.

    Device is texturing from separate memory pools.

    Device can retrieve textures from non-local video memory.

    Device can retrieve textures from system memory.

    Device can retrieve textures from device memory.

    Device can use buffers from system memory for transformed and lit vertices.

    Device can use buffers from video memory for transformed and lit vertices.

    ?

    +
    + + bb172513 + D3DDEVCAPS_CANRENDERAFTERFLIP + D3DDEVCAPS_CANRENDERAFTERFLIP +
    + + +

    Miscellaneous driver primitive capabilities. See .

    +
    + + bb172513 + D3DDEVCAPS_TEXTURENONLOCALVIDMEM + D3DDEVCAPS_TEXTURENONLOCALVIDMEM +
    + + +

    Information on raster-drawing capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Device supports anisotropic filtering.

    Device iterates colors perspective correctly.

    Device can dither to improve color resolution.

    Device supports legacy depth bias. For true depth bias, see .

    Device supports range-based fog. In range-based fog, the distance of an object from the viewer is used to compute fog effects, not the depth of the object (that is, the z-coordinate) in the scene.

    Device calculates the fog value by referring to a lookup table containing fog values that are indexed to the depth of a given pixel.

    Device calculates the fog value during the lighting operation and interpolates the fog value during rasterization.

    Device supports level-of-detail bias adjustments. These bias adjustments enable an application to make a mipmap appear crisper or less sharp than it normally would. For more information about level-of-detail bias in mipmaps, see .

    Device supports toggling multisampling on and off between and (using ).

    Device supports scissor test. See Scissor Test (Direct3D 9).

    Device performs true slope-scale based depth bias. This is in contrast to the legacy style depth bias.

    Device supports depth buffering using w.

    Device supports w-based fog. W-based fog is used when a perspective projection matrix is specified, but affine projections still use z-based fog. The system considers a projection matrix that contains a nonzero value in the [3][4] element to be a perspective projection matrix.

    Device can perform hidden-surface removal (HSR) without requiring the application to sort polygons and without requiring the allocation of a depth-buffer. This leaves more video memory for textures. The method used to perform HSR is hardware-dependent and is transparent to the application.

    Z-bufferless HSR is performed if no depth-buffer surface is associated with the rendering-target surface and the depth-buffer comparison test is enabled (that is, when the state value associated with the enumeration constant is set to TRUE).

    Device supports z-based fog.

    Device can perform z-test operations. This effectively renders a primitive and indicates whether any z pixels have been rendered.

    ?

    +
    + + bb172513 + D3DDEVCAPS_DRAWPRIMITIVES2 + D3DDEVCAPS_DRAWPRIMITIVES2 +
    + + +

    Z-buffer comparison capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Always pass the z-test.

    Pass the z-test if the new z equals the current z.

    Pass the z-test if the new z is greater than the current z.

    Pass the z-test if the new z is greater than or equal to the current z.

    Pass the z-test if the new z is less than the current z.

    Pass the z-test if the new z is less than or equal to the current z.

    Always fail the z-test.

    Pass the z-test if the new z does not equal the current z.

    ?

    +
    + + bb172513 + D3DDEVCAPS_SEPARATETEXTUREMEMORIES + D3DDEVCAPS_SEPARATETEXTUREMEMORIES +
    + + +

    Source-blending capabilities. This member can be one or more of the following flags. (The RGBA values of the source and destination are indicated by the subscripts s and d.)

    ValueMeaning

    The driver supports both and . See .

    Source blend factor is (1 - As, 1 - As, 1 - As, 1 - As) and destination blend factor is (As, As, As, As); the destination blend selection is overridden.

    The driver supports the blend mode. (This blend mode is obsolete. For more information, see .)

    Blend factor is (Ad, Ad, Ad, Ad).

    Blend factor is (Rd, Gd, Bd, Ad).

    Blend factor is (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad).

    Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).

    Blend factor is (1 - As, 1 - As, 1 - As, 1 - As).

    Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).

    Blend factor is (1 - PSOutColor[1]r, 1 - PSOutColor[1]g, 1 - PSOutColor[1]b, not used)). See Render Target Blending.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    Blend factor is (1, 1, 1, 1).

    Blend factor is (As, As, As, As).

    Blend factor is (f, f, f, 1); f = min(As, 1 - Ad).

    Blend factor is (Rs, Gs, Bs, As).

    Blend factor is (PSOutColor[1]r, PSOutColor[1]g, PSOutColor[1]b, not used). See Render Target Blending.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    Blend factor is (0, 0, 0, 0).

    ?

    +
    + + bb172513 + D3DDEVCAPS_DRAWPRIMITIVES2EX + D3DDEVCAPS_DRAWPRIMITIVES2EX +
    + + +

    Destination-blending capabilities. This member can be the same capabilities that are defined for the SrcBlendCaps member.

    +
    + + bb172513 + D3DDEVCAPS_HWTRANSFORMANDLIGHT + D3DDEVCAPS_HWTRANSFORMANDLIGHT +
    + + +

    Alpha-test comparison capabilities. This member can include the same capability flags defined for the ZCmpCaps member. If this member contains only the capability or only the capability, the driver does not support alpha tests. Otherwise, the flags identify the individual comparisons that are supported for alpha testing.

    +
    + + bb172513 + D3DDEVCAPS_CANBLTSYSTONONLOCAL + D3DDEVCAPS_CANBLTSYSTONONLOCAL +
    + + +

    Shading operations capabilities. It is assumed, in general, that if a device supports a given command at all, it supports the mode (as specified in the enumerated type). This flag specifies whether the driver can also support Gouraud shading and whether alpha color components are supported. When alpha components are not supported, the alpha value of colors generated is implicitly 255. This is the maximum possible alpha (that is, the alpha component is at full intensity).

    The color, specular highlights, fog, and alpha interpolants of a triangle each have capability flags that an application can use to find out how they are implemented by the device driver.

    This member can be one or more of the following flags.

    ValueMeaning

    Device can support an alpha component for Gouraud-blended transparency (the state for the enumerated type). In this mode, the alpha color component of a primitive is provided at vertices and interpolated across a face along with the other color components.

    Device can support colored Gouraud shading. In this mode, the per-vertex color components (red, green, and blue) are interpolated across a triangle face.

    Device can support fog in the Gouraud shading mode.

    Device supports Gouraud shading of specular highlights.

    ?

    +
    + + bb172513 + D3DDEVCAPS_HWRASTERIZATION + D3DDEVCAPS_HWRASTERIZATION +
    + + +

    Miscellaneous texture-mapping capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Alpha in texture pixels is supported.

    Device can draw alpha from texture palettes.

    Supports cube textures.

    Device requires that cube texture maps have dimensions specified as powers of two.

    Device supports mipmapped cube textures.

    Device supports mipmapped textures.

    Device supports mipmapped volume textures.

    is also set, conditionally supports the use of 2D textures with dimensions that are not powers of two. A device that exposes this capability can use such a texture if all of the following requirements are met.

    • The texture addressing mode for the texture stage is set to .
    • Texture wrapping for the texture stage is disabled (D3DRS_WRAP n set to 0).
    • Mipmapping is not in use (use magnification filter only).
    • Texture formats must not be through .

    If this flag is not set, and is also not set, then unconditional support is provided for 2D textures with dimensions that are not powers of two.

    A texture that is not a power of two cannot be set at a stage that will be read based on a shader computation (such as the bem - ps and texm3x3 - ps instructions in pixel shaders versions 1_0 to 1_3). For example, these textures can be used to store bumps that will be fed into texture reads, but not the environment maps that are used in texbem - ps, texbeml - ps, and texm3x3spec - ps. This means that a texture with dimensions that are not powers of two cannot be addressed or sampled using texture coordinates computed within the shader. This type of operation is known as a dependent read and cannot be performed on these types of textures.

    Device does not support a projected bump-environment loopkup operation in programmable and fixed function shaders.

    Perspective correction texturing is supported.

    If is not set, all textures must have widths and heights specified as powers of two. This requirement does not apply to either cube textures or volume textures.

    If is also set, conditionally supports the use of 2D textures with dimensions that are not powers of two. See description.

    If this flag is not set, and is also not set, then unconditional support is provided for 2D textures with dimensions that are not powers of two.

    Supports the texture transformation flag. When applied, the device divides transformed texture coordinates by the last texture coordinate. If this capability is present, then the projective divide occurs per pixel. If this capability is not present, but the projective divide needs to occur anyway, then it is performed on a per-vertex basis by the Direct3D runtime.

    All textures must be square.

    Texture indices are not scaled by the texture size prior to interpolation.

    Device supports volume textures.

    Device requires that volume texture maps have dimensions specified as powers of two.

    ?

    +
    + + bb172513 + D3DDEVCAPS_PUREDEVICE + D3DDEVCAPS_PUREDEVICE +
    + + +

    Texture-filtering capabilities for a texture. Per-stage filtering capabilities reflect which filtering modes are supported for texture stages when performing multiple-texture blending. This member can be any combination of the per-stage texture-filtering flags defined in .

    +
    + + bb172513 + D3DDEVCAPS_QUINTICRTPATCHES + D3DDEVCAPS_QUINTICRTPATCHES +
    + + +

    Texture-filtering capabilities for a cube texture. Per-stage filtering capabilities reflect which filtering modes are supported for texture stages when performing multiple-texture blending. This member can be any combination of the per-stage texture-filtering flags defined in .

    +
    + + bb172513 + D3DDEVCAPS_RTPATCHES + D3DDEVCAPS_RTPATCHES +
    + + +

    Texture-filtering capabilities for a volume texture. Per-stage filtering capabilities reflect which filtering modes are supported for texture stages when performing multiple-texture blending. This member can be any combination of the per-stage texture-filtering flags defined in .

    +
    + + bb172513 + D3DDEVCAPS_RTPATCHHANDLEZERO + D3DDEVCAPS_RTPATCHHANDLEZERO +
    + + +

    Texture-addressing capabilities for texture objects. This member can be one or more of the following flags.

    ValueMeaning

    Device supports setting coordinates outside the range [0.0, 1.0] to the border color, as specified by the texture-stage state.

    Device can clamp textures to addresses.

    Device can separate the texture-addressing modes of the u and v coordinates of the texture. This ability corresponds to the and render-state values.

    Device can mirror textures to addresses.

    Device can take the absolute value of the texture coordinate (thus, mirroring around 0) and then clamp to the maximum value.

    Device can wrap textures to addresses.

    ?

    +
    + + bb172513 + D3DDEVCAPS_NPATCHES + D3DDEVCAPS_NPATCHES +
    + + +

    driver capability flags.

    +
    + + bb172537 + D3DDEVCAPS2 + D3DDEVCAPS2 +
    + + + No documentation. + + + bb172537 + D3DDEVCAPS2_STREAMOFFSET + D3DDEVCAPS2_STREAMOFFSET + + + + No documentation. + + + bb172537 + D3DDEVCAPS2_DMAPNPATCH + D3DDEVCAPS2_DMAPNPATCH + + + + No documentation. + + + bb172537 + D3DDEVCAPS2_ADAPTIVETESSRTPATCH + D3DDEVCAPS2_ADAPTIVETESSRTPATCH + + + + No documentation. + + + bb172537 + D3DDEVCAPS2_ADAPTIVETESSNPATCH + D3DDEVCAPS2_ADAPTIVETESSNPATCH + + + + No documentation. + + + bb172537 + D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES + D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES + + + + No documentation. + + + bb172537 + D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH + D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH + + + + No documentation. + + + bb172537 + D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET + D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET + + + +

    Defines device types.

    +
    + +

    All methods of the interface that take a device type will fail if is specified. To use these methods, substitute in the method call.

    A device should be created in memory, unless vertex and index buffers are required. To support vertex and index buffers, create the device in memory.

    If D3dref9.dll is installed, Direct3D will use the reference rasterizer to create a device type, even if is specified. If D3dref9.dll is not available and is specified, Direct3D will neither render nor present the scene.

    +
    + + bb172547 + D3DDEVTYPE + D3DDEVTYPE +
    + + +

    Hardware rasterization. Shading is done with software, hardware, or mixed transform and lighting.

    +
    + + bb172547 + D3DDEVTYPE_HAL + D3DDEVTYPE_HAL +
    + + +

    Direct3D features are implemented in software; however, the reference rasterizer does make use of special CPU instructions whenever it can.

    The reference device is installed by the Windows SDK 8.0 or later and is intended as an aid in debugging for development only.

    +
    + + bb172547 + D3DDEVTYPE_REF + D3DDEVTYPE_REF +
    + + +

    A pluggable software device that has been registered with .

    +
    + + bb172547 + D3DDEVTYPE_SW + D3DDEVTYPE_SW +
    + + +

    Initialize Direct3D on a computer that has neither hardware nor reference rasterization available, and enable resources for 3D content creation. See Remarks.

    +
    + + bb172547 + D3DDEVTYPE_NULLREF + D3DDEVTYPE_NULLREF +
    + + +

    Specifies how the monitor being used to display a full-screen application is rotated.

    +
    + +

    This enumeration is used in , , and .

    Applications may choose to handle monitor rotation themselves by using the , in which case, the application will need to know how the monitor is rotated so that it may adjust its rendering accordingly.

    +
    + + bb172551 + D3DDISPLAYROTATION + D3DDISPLAYROTATION +
    + + +

    Display is not rotated.

    +
    + + bb172551 + D3DDISPLAYROTATION_IDENTITY + D3DDISPLAYROTATION_IDENTITY +
    + + +

    Display is rotated 90 degrees.

    +
    + + bb172551 + D3DDISPLAYROTATION_90 + D3DDISPLAYROTATION_90 +
    + + +

    Display is rotated 180 degrees.

    +
    + + bb172551 + D3DDISPLAYROTATION_180 + D3DDISPLAYROTATION_180 +
    + + +

    Display is rotated 270 degrees.

    +
    + + bb172551 + D3DDISPLAYROTATION_270 + D3DDISPLAYROTATION_270 +
    + + +

    Effect data types. The data is contained in the pValue member of .

    +
    + + bb172822 + D3DXEFFECTDEFAULTTYPE + D3DXEFFECTDEFAULTTYPE +
    + + + No documentation. + + + bb172822 + D3DXEDT_STRING + D3DXEDT_STRING + + + + No documentation. + + + bb172822 + D3DXEDT_FLOATS + D3DXEDT_FLOATS + + + + No documentation. + + + bb172822 + D3DXEDT_DWORD + D3DXEDT_DWORD + + + + No documentation. + + + bb172822 + D3DXEDT_FORCEDWORD + D3DXEDT_FORCEDWORD + + + +

    Describes the type of events that can be keyed by the animation controller.

    +
    + + bb172827 + D3DXEVENT_TYPE + D3DXEVENT_TYPE +
    + + +

    Track speed.

    +
    + + bb172827 + D3DXEVENT_TRACKSPEED + D3DXEVENT_TRACKSPEED +
    + + +

    Track weight.

    +
    + + bb172827 + D3DXEVENT_TRACKWEIGHT + D3DXEVENT_TRACKWEIGHT +
    + + +

    Track position.

    +
    + + bb172827 + D3DXEVENT_TRACKPOSITION + D3DXEVENT_TRACKPOSITION +
    + + +

    Enable flag.

    +
    + + bb172827 + D3DXEVENT_TRACKENABLE + D3DXEVENT_TRACKENABLE +
    + + +

    Priority blend value.

    +
    + + bb172827 + D3DXEVENT_PRIORITYBLEND + D3DXEVENT_PRIORITYBLEND +
    + + +

    Defines constants describing the fill mode.

    +
    + +

    The values in this enumerated type are used by the render state.

    +
    + + bb172556 + D3DFILLMODE + D3DFILLMODE +
    + + +

    Fill points.

    +
    + + bb172556 + D3DFILL_POINT + D3DFILL_POINT +
    + + +

    Fill wireframes.

    +
    + + bb172556 + D3DFILL_WIREFRAME + D3DFILL_WIREFRAME +
    + + +

    Fill solids.

    +
    + + bb172556 + D3DFILL_SOLID + D3DFILL_SOLID +
    + + +

    The following flags are used to specify which channels in a texture to operate on.

    +
    + + bb205565 + D3DX_FILTER + D3DX_FILTER +
    + + + No documentation. + + + bb205565 + D3DX_FILTER_NONE + D3DX_FILTER_NONE + + + + No documentation. + + + bb205565 + D3DX_FILTER_POINT + D3DX_FILTER_POINT + + + + No documentation. + + + bb205565 + D3DX_FILTER_LINEAR + D3DX_FILTER_LINEAR + + + + No documentation. + + + bb205565 + D3DX_FILTER_TRIANGLE + D3DX_FILTER_TRIANGLE + + + + No documentation. + + + bb205565 + D3DX_FILTER_BOX + D3DX_FILTER_BOX + + + + No documentation. + + + bb205565 + D3DX_FILTER_MIRROR_U + D3DX_FILTER_MIRROR_U + + + + No documentation. + + + bb205565 + D3DX_FILTER_MIRROR_V + D3DX_FILTER_MIRROR_V + + + + No documentation. + + + bb205565 + D3DX_FILTER_MIRROR_W + D3DX_FILTER_MIRROR_W + + + + No documentation. + + + bb205565 + D3DX_FILTER_MIRROR + D3DX_FILTER_MIRROR + + + + No documentation. + + + bb205565 + D3DX_FILTER_DITHER + D3DX_FILTER_DITHER + + + + No documentation. + + + bb205565 + D3DX_FILTER_DITHER_DIFFUSION + D3DX_FILTER_DITHER_DIFFUSION + + + + No documentation. + + + bb205565 + D3DX_FILTER_SRGB_IN + D3DX_FILTER_SRGB_IN + + + + No documentation. + + + bb205565 + D3DX_FILTER_SRGB_OUT + D3DX_FILTER_SRGB_OUT + + + + No documentation. + + + bb205565 + D3DX_FILTER_SRGB + D3DX_FILTER_SRGB + + + + No documentation. + + + bb205565 + D3DX_FILTER_DEFAULT + D3DX_FILTER_DEFAULT + + + +

    Texture filtering constants.

    +
    + + bb172593 + D3DPTFILTERCAPS + D3DPTFILTERCAPS +
    + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MINFPOINT + D3DPTFILTERCAPS_MINFPOINT + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MINFLINEAR + D3DPTFILTERCAPS_MINFLINEAR + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MINFANISOTROPIC + D3DPTFILTERCAPS_MINFANISOTROPIC + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MINFPYRAMIDALQUAD + D3DPTFILTERCAPS_MINFPYRAMIDALQUAD + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MINFGAUSSIANQUAD + D3DPTFILTERCAPS_MINFGAUSSIANQUAD + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MIPFPOINT + D3DPTFILTERCAPS_MIPFPOINT + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MIPFLINEAR + D3DPTFILTERCAPS_MIPFLINEAR + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_CONVOLUTIONMONO + D3DPTFILTERCAPS_CONVOLUTIONMONO + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MAGFPOINT + D3DPTFILTERCAPS_MAGFPOINT + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MAGFLINEAR + D3DPTFILTERCAPS_MAGFLINEAR + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MAGFANISOTROPIC + D3DPTFILTERCAPS_MAGFANISOTROPIC + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD + D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD + + + + No documentation. + + + bb172593 + D3DPTFILTERCAPS_MAGFGAUSSIANQUAD + D3DPTFILTERCAPS_MAGFGAUSSIANQUAD + + + +

    Defines constants that describe the fog mode.

    +
    + +

    The values in this enumerated type are used by the and render states.

    Fog can be considered a measure of visibility: the lower the fog value produced by a fog equation, the less visible an object is.

    +
    + + bb172557 + D3DFOGMODE + D3DFOGMODE +
    + + +

    No fog effect.

    +
    + + bb172557 + D3DFOG_NONE + D3DFOG_NONE +
    + + +

    Fog effect intensifies exponentially, according to the following formula. +

    +
    + + bb172557 + D3DFOG_EXP + D3DFOG_EXP +
    + + +

    Fog effect intensifies exponentially with the square of the distance, according to the following formula. +

    +
    + + bb172557 + D3DFOG_EXP2 + D3DFOG_EXP2 +
    + + +

    Fog effect intensifies linearly between the start and end points, according to the following formula.

    This is the only fog mode currently supported.

    +
    + + bb172557 + D3DFOG_LINEAR + D3DFOG_LINEAR +
    + + +

    Defines the various types of surface formats.

    typedef enum _D3DFORMAT { = 0, = 20, = 21, = 22, = 23, = 24, = 25, = 26, = 27, = 28, = 29, = 30, = 31, = 32, = 33, = 34, = 35, = 36, = 40, = 41, = 50, = 51, = 52, = 60, = 61, = 62, = 63, = 64, = 67, = MAKEFOURCC('U', 'Y', 'V', 'Y'), = MAKEFOURCC('R', 'G', 'B', 'G'), = MAKEFOURCC('Y', 'U', 'Y', '2'), = MAKEFOURCC('G', 'R', 'G', 'B'), = MAKEFOURCC('D', 'X', 'T', '1'), = MAKEFOURCC('D', 'X', 'T', '2'), = MAKEFOURCC('D', 'X', 'T', '3'), = MAKEFOURCC('D', 'X', 'T', '4'), = MAKEFOURCC('D', 'X', 'T', '5'), = 70, = 71, = 73, = 75, = 77, = 79, = 80, = 82, = 83, #if !defined(D3D_DISABLE_9EX) = 84, = 85, + #endif // !D3D_DISABLE_9EX = 81, =100, =101, =102, =110, = MAKEFOURCC('M','E','T','1'), = 111, = 112, = 113, = 114, = 115, = 116, = 117, #if !defined(D3D_DISABLE_9EX) = 118, = 119, = 199, + #endif // !D3D_DISABLE_9EX D3DFMT_FORCE_DWORD =0x7fffffff + } ; +
    + +

    There are several types of formats:

    • BackBuffer
    • Buffer
    • DXTn
    • Floating-Point
    • FOURCC
    • IEEE
    • Mixed
    • Signed
    • Unsigned
    • Other

    All formats are listed from left to right, most-significant bit to least-significant bit. For example, D3DFORMAT_ARGB is ordered from the most-significant bit channel A (alpha), to the least-significant bit channel B (blue). When traversing surface data, the data is stored in memory from least-significant bit to most-significant bit, which means that the channel order in memory is from least-significant bit (blue) to most-significant bit (alpha).

    The default value for formats that contain undefined channels (G16R16, A8, and so on) is 1. The only exception is the A8 format, which is initialized to 000 for the three color channels.

    The order of the bits is from the most significant byte first, so indicates that the high byte of this 2-byte format is alpha. indicates a 16-bit integer value and an application-lockable surface.

    Pixel formats have been chosen to enable the expression of hardware-vendor-defined extension formats, as well as to include the well-established FOURCC method. The set of formats understood by the Direct3D runtime is defined by .

    Note that formats are supplied by independent hardware vendors (IHVs) and many FOURCC codes are not listed. The formats in this enumeration are unique in that they are sanctioned by the runtime, meaning that the reference rasterizer will operate on all these types. IHV-supplied formats will be supported by the individual IHVs on a card-by-card basis.

    +
    + + bb172558 + D3DFORMAT + D3DFORMAT +
    + + + No documentation. + + + bb172558 + D3DFMT_UNKNOWN + D3DFMT_UNKNOWN + + + + No documentation. + + + bb172558 + D3DFMT_R8G8B8 + D3DFMT_R8G8B8 + + + + No documentation. + + + bb172558 + D3DFMT_A8R8G8B8 + D3DFMT_A8R8G8B8 + + + + No documentation. + + + bb172558 + D3DFMT_X8R8G8B8 + D3DFMT_X8R8G8B8 + + + + No documentation. + + + bb172558 + D3DFMT_R5G6B5 + D3DFMT_R5G6B5 + + + + No documentation. + + + bb172558 + D3DFMT_X1R5G5B5 + D3DFMT_X1R5G5B5 + + + + No documentation. + + + bb172558 + D3DFMT_A1R5G5B5 + D3DFMT_A1R5G5B5 + + + + No documentation. + + + bb172558 + D3DFMT_A4R4G4B4 + D3DFMT_A4R4G4B4 + + + + No documentation. + + + bb172558 + D3DFMT_R3G3B2 + D3DFMT_R3G3B2 + + + + No documentation. + + + bb172558 + D3DFMT_A8 + D3DFMT_A8 + + + + No documentation. + + + bb172558 + D3DFMT_A8R3G3B2 + D3DFMT_A8R3G3B2 + + + + No documentation. + + + bb172558 + D3DFMT_X4R4G4B4 + D3DFMT_X4R4G4B4 + + + + No documentation. + + + bb172558 + D3DFMT_A2B10G10R10 + D3DFMT_A2B10G10R10 + + + + No documentation. + + + bb172558 + D3DFMT_A8B8G8R8 + D3DFMT_A8B8G8R8 + + + + No documentation. + + + bb172558 + D3DFMT_X8B8G8R8 + D3DFMT_X8B8G8R8 + + + + No documentation. + + + bb172558 + D3DFMT_G16R16 + D3DFMT_G16R16 + + + + No documentation. + + + bb172558 + D3DFMT_A2R10G10B10 + D3DFMT_A2R10G10B10 + + + + No documentation. + + + bb172558 + D3DFMT_A16B16G16R16 + D3DFMT_A16B16G16R16 + + + + No documentation. + + + bb172558 + D3DFMT_A8P8 + D3DFMT_A8P8 + + + + No documentation. + + + bb172558 + D3DFMT_P8 + D3DFMT_P8 + + + + No documentation. + + + bb172558 + D3DFMT_L8 + D3DFMT_L8 + + + + No documentation. + + + bb172558 + D3DFMT_A8L8 + D3DFMT_A8L8 + + + + No documentation. + + + bb172558 + D3DFMT_A4L4 + D3DFMT_A4L4 + + + + No documentation. + + + bb172558 + D3DFMT_V8U8 + D3DFMT_V8U8 + + + + No documentation. + + + bb172558 + D3DFMT_L6V5U5 + D3DFMT_L6V5U5 + + + + No documentation. + + + bb172558 + D3DFMT_X8L8V8U8 + D3DFMT_X8L8V8U8 + + + + No documentation. + + + bb172558 + D3DFMT_Q8W8V8U8 + D3DFMT_Q8W8V8U8 + + + + No documentation. + + + bb172558 + D3DFMT_V16U16 + D3DFMT_V16U16 + + + + No documentation. + + + bb172558 + D3DFMT_A2W10V10U10 + D3DFMT_A2W10V10U10 + + + + No documentation. + + + bb172558 + D3DFMT_UYVY + D3DFMT_UYVY + + + + No documentation. + + + bb172558 + D3DFMT_R8G8_B8G8 + D3DFMT_R8G8_B8G8 + + + + No documentation. + + + bb172558 + D3DFMT_YUY2 + D3DFMT_YUY2 + + + + No documentation. + + + bb172558 + D3DFMT_G8R8_G8B8 + D3DFMT_G8R8_G8B8 + + + + No documentation. + + + bb172558 + D3DFMT_DXT1 + D3DFMT_DXT1 + + + + No documentation. + + + bb172558 + D3DFMT_DXT2 + D3DFMT_DXT2 + + + + No documentation. + + + bb172558 + D3DFMT_DXT3 + D3DFMT_DXT3 + + + + No documentation. + + + bb172558 + D3DFMT_DXT4 + D3DFMT_DXT4 + + + + No documentation. + + + bb172558 + D3DFMT_DXT5 + D3DFMT_DXT5 + + + + No documentation. + + + bb172558 + D3DFMT_D16_LOCKABLE + D3DFMT_D16_LOCKABLE + + + + No documentation. + + + bb172558 + D3DFMT_D32 + D3DFMT_D32 + + + + No documentation. + + + bb172558 + D3DFMT_D15S1 + D3DFMT_D15S1 + + + + No documentation. + + + bb172558 + D3DFMT_D24S8 + D3DFMT_D24S8 + + + + No documentation. + + + bb172558 + D3DFMT_D24X8 + D3DFMT_D24X8 + + + + No documentation. + + + bb172558 + D3DFMT_D24X4S4 + D3DFMT_D24X4S4 + + + + No documentation. + + + bb172558 + D3DFMT_D16 + D3DFMT_D16 + + + + No documentation. + + + bb172558 + D3DFMT_D32F_LOCKABLE + D3DFMT_D32F_LOCKABLE + + + + No documentation. + + + bb172558 + D3DFMT_D24FS8 + D3DFMT_D24FS8 + + + + No documentation. + + + bb172558 + D3DFMT_D32_LOCKABLE + D3DFMT_D32_LOCKABLE + + + + No documentation. + + + bb172558 + D3DFMT_S8_LOCKABLE + D3DFMT_S8_LOCKABLE + + + + No documentation. + + + bb172558 + D3DFMT_L16 + D3DFMT_L16 + + + + No documentation. + + + bb172558 + D3DFMT_VERTEXDATA + D3DFMT_VERTEXDATA + + + + No documentation. + + + bb172558 + D3DFMT_INDEX16 + D3DFMT_INDEX16 + + + + No documentation. + + + bb172558 + D3DFMT_INDEX32 + D3DFMT_INDEX32 + + + + No documentation. + + + bb172558 + D3DFMT_Q16W16V16U16 + D3DFMT_Q16W16V16U16 + + + + No documentation. + + + bb172558 + D3DFMT_MULTI2_ARGB8 + D3DFMT_MULTI2_ARGB8 + + + + No documentation. + + + bb172558 + D3DFMT_R16F + D3DFMT_R16F + + + + No documentation. + + + bb172558 + D3DFMT_G16R16F + D3DFMT_G16R16F + + + + No documentation. + + + bb172558 + D3DFMT_A16B16G16R16F + D3DFMT_A16B16G16R16F + + + + No documentation. + + + bb172558 + D3DFMT_R32F + D3DFMT_R32F + + + + No documentation. + + + bb172558 + D3DFMT_G32R32F + D3DFMT_G32R32F + + + + No documentation. + + + bb172558 + D3DFMT_A32B32G32R32F + D3DFMT_A32B32G32R32F + + + + No documentation. + + + bb172558 + D3DFMT_CxV8U8 + D3DFMT_CxV8U8 + + + + No documentation. + + + bb172558 + D3DFMT_A1 + D3DFMT_A1 + + + + No documentation. + + + bb172558 + D3DFMT_A2B10G10R10_XR_BIAS + D3DFMT_A2B10G10R10_XR_BIAS + + + + No documentation. + + + bb172558 + D3DFMT_BINARYBUFFER + D3DFMT_BINARYBUFFER + + + +

    Options for saving and creating effects.

    The constants in the following table are defined in d3dx9effect.h.

    +
    + + bb172855 + D3DXFX + D3DXFX +
    + + + No documentation. + + + bb172855 + D3DXFX_DONOTSAVESTATE + D3DXFX_DONOTSAVESTATE + + + + No documentation. + + + bb172855 + D3DXFX_DONOTSAVESHADERSTATE + D3DXFX_DONOTSAVESHADERSTATE + + + + No documentation. + + + bb172855 + D3DXFX_DONOTSAVESAMPLERSTATE + D3DXFX_DONOTSAVESAMPLERSTATE + + + + No documentation. + + + bb172855 + D3DXFX_NOT_CLONEABLE + D3DXFX_NOT_CLONEABLE + + + + No documentation. + + + bb172855 + D3DXFX_LARGEADDRESSAWARE + D3DXFX_LARGEADDRESSAWARE + + + + None. + + + None + None + + + +

    Describes the supported image file formats. See Remarks for descriptions of these formats.

    +
    + +

    Functions that begin with D3DXLoadxxx support all of the formats listed. Functions that begin with D3DXSavexxx support all of the formats listed except the Truevision (.tga) and portable pixmap (.ppm) formats.

    The following table lists the available input and output formats.

    File ExtensionDescription
    .bmpWindows bitmap format. Contains a header that describes the resolution of the device on which the rectangle of pixels was created, the dimensions of the rectangle, the size of the array of bits, a logical palette, and an array of bits that defines the relationship between pixels in the bitmapped image and entries in the logical palette.
    .ddsDirectDraw Surface file format. Stores textures, volume textures, and cubic environment maps, with or without mipmap levels, and with or without pixel compression. See DDS.
    .dibWindows DIB. Contains an array of bits combined with structures that specify width and height of the bitmapped image, color format of the device where the image was created, and resolution of the device used to create that image.
    .hdrHDR format. Encodes each pixel as an RGBE 32-bit color, with 8 bits of mantissa for red, green, and blue, and a shared 8-bit exponent. Each channel is separately compressed with run-length encoding (RLE).
    .jpgJPEG standard. Specifies variable compression of 24-bit RGB color and 8-bit gray-scale Tagged Image File Format (TIFF) image document files.
    .pfmPortable float map format. A raw floating point image format, without any compression. The file header specifies image width, height, monochrome or color, and machine word order. Pixel data is stored as 32-bit floating point values, with 3 values per pixel for color, and one value per pixel for monochrome.
    .pngPNG format. A non-proprietary bitmap format using lossless compression.
    .ppmPortable Pixmap format. A binary or ASCII file format for color images that includes image height and width and the maximum color component value.
    .tgaTarga or Truevision Graphics Adapter format. Supports depths of 8, 15, 16, 24, and 32 bits, including 8-bit gray scale, and contains optional color palette data, image (x, y) origin and size data, and pixel data.

    ?

    See Types of Bitmaps for more information on some of these formats.

    +
    + + bb172878 + D3DXIMAGE_FILEFORMAT + D3DXIMAGE_FILEFORMAT +
    + + +

    Windows bitmap (BMP) file format.

    +
    + + bb172878 + D3DXIFF_BMP + D3DXIFF_BMP +
    + + +

    Joint Photographics Experts Group (JPEG) compressed file format.

    +
    + + bb172878 + D3DXIFF_JPG + D3DXIFF_JPG +
    + + +

    Truevision (Targa, or TGA) image file format.

    +
    + + bb172878 + D3DXIFF_TGA + D3DXIFF_TGA +
    + + +

    Portable Network Graphics (PNG) file format.

    +
    + + bb172878 + D3DXIFF_PNG + D3DXIFF_PNG +
    + + +

    DirectDraw surface (DDS) file format.

    +
    + + bb172878 + D3DXIFF_DDS + D3DXIFF_DDS +
    + + +

    Portable pixmap (PPM) file format.

    +
    + + bb172878 + D3DXIFF_PPM + D3DXIFF_PPM +
    + + +

    Windows device-independent bitmap (DIB) file format.

    +
    + + bb172878 + D3DXIFF_DIB + D3DXIFF_DIB +
    + + +

    High dynamic range (HDR) file format.

    +
    + + bb172878 + D3DXIFF_HDR + D3DXIFF_HDR +
    + + +

    Portable float map file format.

    +
    + + bb172878 + D3DXIFF_PFM + D3DXIFF_PFM +
    + + +

    Describes the location for the include file.

    +
    + + bb172881 + D3DXINCLUDE_TYPE + D3DXINCLUDE_TYPE +
    + + +

    Look in the local project for the include file.

    +
    + + bb172881 + D3DXINC_LOCAL + D3DXINC_LOCAL +
    + + +

    Look in the system path for the include file.

    +
    + + bb172881 + D3DXINC_SYSTEM + D3DXINC_SYSTEM +
    + + +

    This macro creates a value used by Issue to issue a query end.

    #define (1 << 0) +
    + +

    This macro changes the query state to nonsignaled.

    is valid for the following query types.

    • D3DQUERYTYPE_ResourceManager
    +
    + + bb172565 + D3DISSUE + D3DISSUE +
    + + + No documentation. + + + bb172565 + D3DISSUE_END + D3DISSUE_END + + + + No documentation. + + + bb172565 + D3DISSUE_BEGIN + D3DISSUE_BEGIN + + + +

    Defines the light type.

    +
    + +

    Directional lights are slightly faster than point light sources, but point lights look a little better. Spotlights offer interesting visual effects but are computationally time-consuming.

    +
    + + bb172567 + D3DLIGHTTYPE + D3DLIGHTTYPE +
    + + +

    Light is a point source. The light has a position in space and radiates light in all directions.

    +
    + + bb172567 + D3DLIGHT_POINT + D3DLIGHT_POINT +
    + + +

    Light is a spotlight source. This light is like a point light, except that the illumination is limited to a cone. This light type has a direction and several other parameters that determine the shape of the cone it produces. For information about these parameters, see the structure.

    +
    + + bb172567 + D3DLIGHT_SPOT + D3DLIGHT_SPOT +
    + + +

    Light is a directional light source. This is equivalent to using a point light source at an infinite distance.

    +
    + + bb172567 + D3DLIGHT_DIRECTIONAL + D3DLIGHT_DIRECTIONAL +
    + + + No documentation. + + + bb206304 + D3DLINECAPS + D3DLINECAPS + + + + No documentation. + + + bb206304 + D3DLINECAPS_TEXTURE + D3DLINECAPS_TEXTURE + + + + No documentation. + + + bb206304 + D3DLINECAPS_ZTEST + D3DLINECAPS_ZTEST + + + + No documentation. + + + bb206304 + D3DLINECAPS_BLEND + D3DLINECAPS_BLEND + + + + No documentation. + + + bb206304 + D3DLINECAPS_ALPHACMP + D3DLINECAPS_ALPHACMP + + + + No documentation. + + + bb206304 + D3DLINECAPS_FOG + D3DLINECAPS_FOG + + + + No documentation. + + + bb206304 + D3DLINECAPS_ANTIALIAS + D3DLINECAPS_ANTIALIAS + + + +

    A combination of zero or more locking options that describe the type of lock to perform.

    +
    + + bb172568 + D3DLOCK + D3DLOCK +
    + + + No documentation. + + + bb172568 + D3DLOCK_READONLY + D3DLOCK_READONLY + + + + No documentation. + + + bb172568 + D3DLOCK_DISCARD + D3DLOCK_DISCARD + + + + No documentation. + + + bb172568 + D3DLOCK_NOOVERWRITE + D3DLOCK_NOOVERWRITE + + + + No documentation. + + + bb172568 + D3DLOCK_NOSYSLOCK + D3DLOCK_NOSYSLOCK + + + + No documentation. + + + bb172568 + D3DLOCK_DONOTWAIT + D3DLOCK_DONOTWAIT + + + + No documentation. + + + bb172568 + D3DLOCK_NO_DIRTY_UPDATE + D3DLOCK_NO_DIRTY_UPDATE + + + + No documentation. + + + bb172568 + D3DLOCK_DONOTCOPYDATA + D3DLOCK_DONOTCOPYDATA + + + + None. + + + None + None + + + +

    Defines the type of mesh data present in .

    +
    + + bb205373 + D3DXMESHDATATYPE + D3DXMESHDATATYPE +
    + + + No documentation. + + + bb205373 + D3DXMESHTYPE_MESH + D3DXMESHTYPE_MESH + + + + No documentation. + + + bb205373 + D3DXMESHTYPE_PMESH + D3DXMESHTYPE_PMESH + + + + No documentation. + + + bb205373 + D3DXMESHTYPE_PATCHMESH + D3DXMESHTYPE_PATCHMESH + + + +

    Flags used to specify creation options for a mesh.

    +
    + +

    A 32-bit mesh () can theoretically support (2^32)-1 faces and vertices. However, allocating memory for a mesh that large on a 32-bit operating system is not practical.

    +
    + + bb205370 + _D3DXMESH + _D3DXMESH +
    + + +

    The mesh has 32-bit indices instead of 16-bit indices. See Remarks.

    +
    + + bb205370 + D3DXMESH_32BIT + D3DXMESH_32BIT +
    + + +

    Use the usage flag for vertex and index buffers.

    +
    + + bb205370 + D3DXMESH_DONOTCLIP + D3DXMESH_DONOTCLIP +
    + + +

    Use the usage flag for vertex and index buffers.

    +
    + + bb205370 + D3DXMESH_POINTS + D3DXMESH_POINTS +
    + + +

    Use the usage flag for vertex and index buffers.

    +
    + + bb205370 + D3DXMESH_RTPATCHES + D3DXMESH_RTPATCHES +
    + + +

    Specifying this flag causes the vertex and index buffer of the mesh to be created with flag. This is required if the mesh object is to be rendered using N-patch enhancement using Direct3D.

    +
    + + bb205370 + D3DXMESH_NPATCHES + D3DXMESH_NPATCHES +
    + + +

    Use the usage flag for vertex buffers.

    +
    + + bb205370 + D3DXMESH_VB_SYSTEMMEM + D3DXMESH_VB_SYSTEMMEM +
    + + +

    Use the usage flag for vertex buffers.

    +
    + + bb205370 + D3DXMESH_VB_MANAGED + D3DXMESH_VB_MANAGED +
    + + +

    Use the usage flag for vertex buffers.

    +
    + + bb205370 + D3DXMESH_VB_WRITEONLY + D3DXMESH_VB_WRITEONLY +
    + + +

    Use the usage flag for vertex buffers.

    +
    + + bb205370 + D3DXMESH_VB_DYNAMIC + D3DXMESH_VB_DYNAMIC +
    + + +

    Use the usage flag for vertex buffers.

    +
    + + bb205370 + D3DXMESH_VB_SOFTWAREPROCESSING + D3DXMESH_VB_SOFTWAREPROCESSING +
    + + +

    Use the usage flag for index buffers.

    +
    + + bb205370 + D3DXMESH_IB_SYSTEMMEM + D3DXMESH_IB_SYSTEMMEM +
    + + +

    Use the usage flag for index buffers.

    +
    + + bb205370 + D3DXMESH_IB_MANAGED + D3DXMESH_IB_MANAGED +
    + + +

    Use the usage flag for index buffers.

    +
    + + bb205370 + D3DXMESH_IB_WRITEONLY + D3DXMESH_IB_WRITEONLY +
    + + +

    Use the usage flag for index buffers.

    +
    + + bb205370 + D3DXMESH_IB_DYNAMIC + D3DXMESH_IB_DYNAMIC +
    + + +

    Use the usage flag for index buffers.

    +
    + + bb205370 + D3DXMESH_IB_SOFTWAREPROCESSING + D3DXMESH_IB_SOFTWAREPROCESSING +
    + + +

    Forces the cloned meshes to share vertex buffers.

    +
    + + bb205370 + D3DXMESH_VB_SHARE + D3DXMESH_VB_SHARE +
    + + +

    Use hardware processing only. For mixed-mode device, this flag will cause the system to use hardware (if supported in hardware) or will default to software processing.

    +
    + + bb205370 + D3DXMESH_USEHWONLY + D3DXMESH_USEHWONLY +
    + + +

    Equivalent to specifying both and .

    +
    + + bb205370 + D3DXMESH_SYSTEMMEM + D3DXMESH_SYSTEMMEM +
    + + +

    Equivalent to specifying both and .

    +
    + + bb205370 + D3DXMESH_MANAGED + D3DXMESH_MANAGED +
    + + +

    Equivalent to specifying both and .

    +
    + + bb205370 + D3DXMESH_WRITEONLY + D3DXMESH_WRITEONLY +
    + + +

    Equivalent to specifying both and .

    +
    + + bb205370 + D3DXMESH_DYNAMIC + D3DXMESH_DYNAMIC +
    + + +

    Equivalent to specifying both and .

    +
    + + bb205370 + D3DXMESH_SOFTWAREPROCESSING + D3DXMESH_SOFTWAREPROCESSING +
    + + +

    Specifies the type of mesh optimization to be performed.

    +
    + +

    The and optimization flags are mutually exclusive.

    The D3DXMESHOPT_SHAREVB flag has been removed from this enumeration. Use instead, in D3DXMESH.

    +
    + + bb205374 + _D3DXMESHOPT + _D3DXMESHOPT +
    + + +

    Reorders faces to remove unused vertices and faces.

    +
    + + bb205374 + D3DXMESHOPT_COMPACT + D3DXMESHOPT_COMPACT +
    + + +

    Reorders faces to optimize for fewer attribute bundle state changes and enhanced performance.

    +
    + + bb205374 + D3DXMESHOPT_ATTRSORT + D3DXMESHOPT_ATTRSORT +
    + + +

    Reorders faces to increase the cache hit rate of vertex caches.

    +
    + + bb205374 + D3DXMESHOPT_VERTEXCACHE + D3DXMESHOPT_VERTEXCACHE +
    + + +

    Reorders faces to maximize length of adjacent triangles.

    +
    + + bb205374 + D3DXMESHOPT_STRIPREORDER + D3DXMESHOPT_STRIPREORDER +
    + + +

    Optimize the faces only; do not optimize the vertices.

    +
    + + bb205374 + D3DXMESHOPT_IGNOREVERTS + D3DXMESHOPT_IGNOREVERTS +
    + + +

    While attribute sorting, do not split vertices that are shared between attribute groups.

    +
    + + bb205374 + D3DXMESHOPT_DONOTSPLIT + D3DXMESHOPT_DONOTSPLIT +
    + + +

    Affects the vertex cache size. Using this flag specifies a default vertex cache size that works well on legacy hardware.

    +
    + + bb205374 + D3DXMESHOPT_DEVICEINDEPENDENT + D3DXMESHOPT_DEVICEINDEPENDENT +
    + + +

    Specifies simplification options for a mesh.

    +
    + + bb205375 + _D3DXMESHSIMP + _D3DXMESHSIMP +
    + + +

    The mesh will be simplified by the number of vertices specified in the MinValue parameter.

    +
    + + bb205375 + D3DXMESHSIMP_VERTEX + D3DXMESHSIMP_VERTEX +
    + + +

    The mesh will be simplified by the number of faces specified in the MinValue parameter.

    +
    + + bb205375 + D3DXMESHSIMP_FACE + D3DXMESHSIMP_FACE +
    + + +

    Defines the levels of full-scene multisampling that the device can apply.

    +
    + +

    In addition to enabling full-scene multisampling at time, there will be render states that turn various aspects on and off at fine-grained levels.

    Multisampling is valid only on a swap chain that is being created or reset with the swap effect.

    The multisample antialiasing value can be set with the parameters (or sub-parameters) in the following methods.

    MethodParametersSub-parameters
    MultiSampleType and pQualityLevels
    pPresentationParametersMultiSampleType and pQualityLevels
    pPresentationParametersMultiSampleType and pQualityLevels
    MultiSampleType and pQualityLevels
    MultiSampleType and pQualityLevels
    pPresentationParametersMultiSampleType and pQualityLevels

    ?

    It is not good practice to switch from one multisample type to another to raise the quality of the antialiasing.

    enables swap effects other than discarding, locking, and so on.

    Whether the display device supports maskable multisampling (more than one sample for a multiple-sample render-target format plus antialias support) or just non-maskable multisampling (only antialias support), the driver for the device provides the number of quality levels for the multiple-sample type. Applications that just use multisampling for antialiasing purposes only need to query for the number of non-maskable multiple-sample quality levels that the driver supports.

    The quality levels supported by the device can be obtained with the pQualityLevels parameter of . Quality levels used by the application are set with the MultiSampleQuality parameter of and .

    See for discussion of maskable multisampling.

    +
    + + bb172574 + D3DMULTISAMPLE_TYPE + D3DMULTISAMPLE_TYPE +
    + + +

    No level of full-scene multisampling is available.

    +
    + + bb172574 + D3DMULTISAMPLE_NONE + D3DMULTISAMPLE_NONE +
    + + +

    Enables the multisample quality value. See Remarks.

    +
    + + bb172574 + D3DMULTISAMPLE_NONMASKABLE + D3DMULTISAMPLE_NONMASKABLE +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_2_SAMPLES + D3DMULTISAMPLE_2_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_3_SAMPLES + D3DMULTISAMPLE_3_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_4_SAMPLES + D3DMULTISAMPLE_4_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_5_SAMPLES + D3DMULTISAMPLE_5_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_6_SAMPLES + D3DMULTISAMPLE_6_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_7_SAMPLES + D3DMULTISAMPLE_7_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_8_SAMPLES + D3DMULTISAMPLE_8_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_9_SAMPLES + D3DMULTISAMPLE_9_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_10_SAMPLES + D3DMULTISAMPLE_10_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_11_SAMPLES + D3DMULTISAMPLE_11_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_12_SAMPLES + D3DMULTISAMPLE_12_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_13_SAMPLES + D3DMULTISAMPLE_13_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_14_SAMPLES + D3DMULTISAMPLE_14_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_15_SAMPLES + D3DMULTISAMPLE_15_SAMPLES +
    + + +

    Level of full-scene multisampling available.

    +
    + + bb172574 + D3DMULTISAMPLE_16_SAMPLES + D3DMULTISAMPLE_16_SAMPLES +
    + + +

    Normal maps generation constants.

    +
    + + bb205566 + D3DX_NORMALMAP + D3DX_NORMALMAP +
    + + + No documentation. + + + bb205566 + D3DX_NORMALMAP_MIRROR_U + D3DX_NORMALMAP_MIRROR_U + + + + No documentation. + + + bb205566 + D3DX_NORMALMAP_MIRROR_V + D3DX_NORMALMAP_MIRROR_V + + + + No documentation. + + + bb205566 + D3DX_NORMALMAP_MIRROR + D3DX_NORMALMAP_MIRROR + + + + No documentation. + + + bb205566 + D3DX_NORMALMAP_INVERTSIGN + D3DX_NORMALMAP_INVERTSIGN + + + + No documentation. + + + bb205566 + D3DX_NORMALMAP_COMPUTE_OCCLUSION + D3DX_NORMALMAP_COMPUTE_OCCLUSION + + + +

    The type of object.

    +
    + + bb205378 + D3DXPARAMETER_CLASS + D3DXPARAMETER_CLASS +
    + + +

    Constant is a scalar.

    +
    + + bb205378 + D3DXPC_SCALAR + D3DXPC_SCALAR +
    + + +

    Constant is a vector.

    +
    + + bb205378 + D3DXPC_VECTOR + D3DXPC_VECTOR +
    + + +

    Constant is a row major matrix.

    +
    + + bb205378 + D3DXPC_MATRIX_ROWS + D3DXPC_MATRIX_ROWS +
    + + +

    Constant is a column major matrix.

    +
    + + bb205378 + D3DXPC_MATRIX_COLUMNS + D3DXPC_MATRIX_COLUMNS +
    + + +

    Constant is either a texture, shader, or a string.

    +
    + + bb205378 + D3DXPC_OBJECT + D3DXPC_OBJECT +
    + + +

    Constant is a structure.

    +
    + + bb205378 + D3DXPC_STRUCT + D3DXPC_STRUCT +
    + + +

    These flags provide additional information about effect parameters.

    Effect parameter constants are used by .

    +

    + + bb205567 + D3DX_PARAMETER + D3DX_PARAMETER +
    + + + No documentation. + + + bb205567 + D3DX_PARAMETER_SHARED + D3DX_PARAMETER_SHARED + + + + No documentation. + + + bb205567 + D3DX_PARAMETER_LITERAL + D3DX_PARAMETER_LITERAL + + + + No documentation. + + + bb205567 + D3DX_PARAMETER_ANNOTATION + D3DX_PARAMETER_ANNOTATION + + + + None. + + + None + None + + + +

    Describes the data contained by the enumeration.

    +
    + + bb205380 + D3DXPARAMETER_TYPE + D3DXPARAMETER_TYPE +
    + + +

    Parameter is a void reference.

    +
    + + bb205380 + D3DXPT_VOID + D3DXPT_VOID +
    + + +

    Parameter is a Boolean. Any non-zero value passed into , , , , or will be mapped to 1 (TRUE) before being written into the constant table; otherwise, the value will be set to 0 in the constant table.

    +
    + + bb205380 + D3DXPT_BOOL + D3DXPT_BOOL +
    + + +

    Parameter is an integer. Any floating-point values passed into , , or will be rounded off (to zero decimal places) before being written into the constant table.

    +
    + + bb205380 + D3DXPT_INT + D3DXPT_INT +
    + + +

    Parameter is a floating-point number.

    +
    + + bb205380 + D3DXPT_FLOAT + D3DXPT_FLOAT +
    + + +

    Parameter is a string.

    +
    + + bb205380 + D3DXPT_STRING + D3DXPT_STRING +
    + + +

    Parameter is a texture.

    +
    + + bb205380 + D3DXPT_TEXTURE + D3DXPT_TEXTURE +
    + + +

    Parameter is a 1D texture.

    +
    + + bb205380 + D3DXPT_TEXTURE1D + D3DXPT_TEXTURE1D +
    + + +

    Parameter is a 2D texture.

    +
    + + bb205380 + D3DXPT_TEXTURE2D + D3DXPT_TEXTURE2D +
    + + +

    Parameter is a 3D texture.

    +
    + + bb205380 + D3DXPT_TEXTURE3D + D3DXPT_TEXTURE3D +
    + + +

    Parameter is a cube texture.

    +
    + + bb205380 + D3DXPT_TEXTURECUBE + D3DXPT_TEXTURECUBE +
    + + +

    Parameter is a sampler.

    +
    + + bb205380 + D3DXPT_SAMPLER + D3DXPT_SAMPLER +
    + + +

    Parameter is a 1D sampler.

    +
    + + bb205380 + D3DXPT_SAMPLER1D + D3DXPT_SAMPLER1D +
    + + +

    Parameter is a 2D sampler.

    +
    + + bb205380 + D3DXPT_SAMPLER2D + D3DXPT_SAMPLER2D +
    + + +

    Parameter is a 3D sampler.

    +
    + + bb205380 + D3DXPT_SAMPLER3D + D3DXPT_SAMPLER3D +
    + + +

    Parameter is a cube sampler.

    +
    + + bb205380 + D3DXPT_SAMPLERCUBE + D3DXPT_SAMPLERCUBE +
    + + +

    Parameter is a pixel shader.

    +
    + + bb205380 + D3DXPT_PIXELSHADER + D3DXPT_PIXELSHADER +
    + + +

    Parameter is a vertex shader.

    +
    + + bb205380 + D3DXPT_VERTEXSHADER + D3DXPT_VERTEXSHADER +
    + + +

    Parameter is a pixel shader fragment.

    +
    + + bb205380 + D3DXPT_PIXELFRAGMENT + D3DXPT_PIXELFRAGMENT +
    + + +

    Parameter is a vertex shader fragment.

    +
    + + bb205380 + D3DXPT_VERTEXFRAGMENT + D3DXPT_VERTEXFRAGMENT +
    + + +

    Parameter is not supported.

    +
    + + bb205380 + D3DXPT_UNSUPPORTED + D3DXPT_UNSUPPORTED +
    + + +

    Defines whether the current tessellation mode is discrete or continuous.

    +
    + +

    Note that continuous tessellation produces a completely different tessellation pattern from the discrete one for the same tessellation values (this is more apparent in wireframe mode). Thus, 4.0 continuous is not the same as 4 discrete.

    +
    + + bb172575 + D3DPATCHEDGESTYLE + D3DPATCHEDGESTYLE +
    + + +

    Discrete edge style. In discrete mode, you can specify float tessellation but it will be truncated to integers.

    +
    + + bb172575 + D3DPATCHEDGE_DISCRETE + D3DPATCHEDGE_DISCRETE +
    + + +

    Continuous edge style. In continuous mode, tessellation is specified as float values that can be smoothly varied to reduce "popping" artifacts.

    +
    + + bb172575 + D3DPATCHEDGE_CONTINUOUS + D3DPATCHEDGE_CONTINUOUS +
    + + +

    Mesh patch types.

    +
    + +

    Triangle patches have three sides and are described in . Rectangle patches are four-sided and are described in .

    +
    + + bb205384 + D3DXPATCHMESHTYPE + D3DXPATCHMESHTYPE +
    + + +

    Rectangle patch mesh type.

    +
    + + bb205384 + D3DXPATCHMESH_RECT + D3DXPATCHMESH_RECT +
    + + +

    Triangle patch mesh type.

    +
    + + bb205384 + D3DXPATCHMESH_TRI + D3DXPATCHMESH_TRI +
    + + +

    N-patch mesh type.

    +
    + + bb205384 + D3DXPATCHMESH_NPATCH + D3DXPATCHMESH_NPATCH +
    + + + No documentation. + + + D3DPS20CAPS + D3DPS20CAPS + + + + No documentation. + + + D3DPS20CAPS_ARBITRARYSWIZZLE + D3DPS20CAPS_ARBITRARYSWIZZLE + + + + No documentation. + + + D3DPS20CAPS_GRADIENTINSTRUCTIONS + D3DPS20CAPS_GRADIENTINSTRUCTIONS + + + + No documentation. + + + D3DPS20CAPS_PREDICATION + D3DPS20CAPS_PREDICATION + + + + No documentation. + + + D3DPS20CAPS_NODEPENDENTREADLIMIT + D3DPS20CAPS_NODEPENDENTREADLIMIT + + + + No documentation. + + + D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT + D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT + + + + None. + + + None + None + + + +

    Defines the type of animation set looping modes used for playback.

    +
    + + bb205397 + D3DXPLAYBACK_TYPE + D3DXPLAYBACK_TYPE +
    + + +

    The animation repeats endlessly.

    +
    + + bb205397 + D3DXPLAY_LOOP + D3DXPLAY_LOOP +
    + + +

    The animation plays once, and then it stops on the last frame.

    +
    + + bb205397 + D3DXPLAY_ONCE + D3DXPLAY_ONCE +
    + + +

    The animation alternates endlessly between playing forward and playing backward.

    +
    + + bb205397 + D3DXPLAY_PINGPONG + D3DXPLAY_PINGPONG +
    + + +

    Defines the memory class that holds the buffers for a resource.

    +
    + +

    All pool types are valid with all resources including: vertex buffers, index buffers, textures, and surfaces.

    The following tables indicate restrictions on pool types for render targets, depth stencils, and dynamic and mipmap usages. An x indicates a compatible combination; lack of an x indicates incompatibility.

    Pool
    xx

    ?

    Pool
    xx
    x
    x

    ?

    For more information about usage types, see .

    Pools cannot be mixed for different objects contained within one resource (mip levels in a mipmap) and, when a pool is chosen, it cannot be changed.

    Applications should use for most static resources because this saves the application from having to deal with lost devices. (Managed resources are restored by the runtime.) This is especially beneficial for unified memory architecture (UMA) systems. Other dynamic resources are not a good match for . In fact, index buffers and vertex buffers cannot be created using together with .

    For dynamic textures, it is sometimes desirable to use a pair of video memory and system memory textures, allocating the video memory using and the system memory using . You can lock and modify the bits of the system memory texture using a locking method. Then you can update the video memory texture using .

    +
    + + bb172584 + D3DPOOL + D3DPOOL +
    + + +

    Resources are placed in the memory pool most appropriate for the set of usages requested for the given resource. This is usually video memory, including both local video memory and AGP memory. The pool is separate from and , and it specifies that the resource is placed in the preferred memory for device access. Note that never indicates that either or should be chosen as the memory pool type for this resource. Textures placed in the pool cannot be locked unless they are dynamic textures or they are private, FOURCC, driver formats. To access unlockable textures, you must use functions such as , , , and . is probably a better choice than for most applications. Note that some textures created in driver-proprietary pixel formats, unknown to the Direct3D runtime, can be locked. Also note that - unlike textures - swap chain back buffers, render targets, vertex buffers, and index buffers can be locked. When a device is lost, resources created using must be released before calling . For more information, see Lost Devices (Direct3D 9).

    When creating resources with , if video card memory is already committed, managed resources will be evicted to free enough memory to satisfy the request.

    +
    + + bb172584 + D3DPOOL_DEFAULT + D3DPOOL_DEFAULT +
    + + +

    Resources are copied automatically to device-accessible memory as needed. Managed resources are backed by system memory and do not need to be recreated when a device is lost. See Managing Resources (Direct3D 9) for more information. Managed resources can be locked. Only the system-memory copy is directly modified. Direct3D copies your changes to driver-accessible memory as needed.

    Differences between Direct3D 9 and Direct3D 9Ex:

    is valid with ; however, it is not valid with .

    ?

    +
    + + bb172584 + D3DPOOL_MANAGED + D3DPOOL_MANAGED +
    + + +

    Resources are placed in memory that is not typically accessible by the Direct3D device. This memory allocation consumes system RAM but does not reduce pageable RAM. These resources do not need to be recreated when a device is lost. Resources in this pool can be locked and can be used as the source for a or operation to a memory resource created with .

    +
    + + bb172584 + D3DPOOL_SYSTEMMEM + D3DPOOL_SYSTEMMEM +
    + + +

    Resources are placed in system RAM and do not need to be recreated when a device is lost. These resources are not bound by device size or format restrictions. Because of this, these resources cannot be accessed by the Direct3D device nor set as textures or render targets. However, these resources can always be created, locked, and copied.

    +
    + + bb172584 + D3DPOOL_SCRATCH + D3DPOOL_SCRATCH +
    + + +

    Describes the relationship between the adapter refresh rate and the rate at which Present or Present operations are completed. These values also serve as flag values for the PresentationIntervals field of .

    +

    + +

    Windowed mode supports , , and . and the are nearly equivalent (see the information regarding timer resolution below). They perform similarly to COPY_VSYNC in that there is only one present per frame, and they prevent tearing with beam-following. In contrast, will attempt to provide an unlimited presentation rate.

    Full-screen mode supports similar usage as windowed mode by supporting regardless of the refresh rate or swap effect. uses the default system timer resolution whereas the calls timeBeginPeriod to enhance system timer resolution. This improves the quality of vertical sync, but consumes slightly more processing time. Both parameters attempt to synchronize vertically.

    +
    + + bb172585 + D3DPRESENT + D3DPRESENT +
    + + + No documentation. + + + bb172585 + D3DPRESENT_BACK_BUFFERS_MAX + D3DPRESENT_BACK_BUFFERS_MAX + + + + No documentation. + + + bb172585 + D3DPRESENT_BACK_BUFFERS_MAX_EX + D3DPRESENT_BACK_BUFFERS_MAX_EX + + + + No documentation. + + + bb172585 + D3DPRESENT_DONOTWAIT + D3DPRESENT_DONOTWAIT + + + + No documentation. + + + bb172585 + D3DPRESENT_LINEAR_CONTENT + D3DPRESENT_LINEAR_CONTENT + + + + No documentation. + + + bb172585 + D3DPRESENT_DONOTFLIP + D3DPRESENT_DONOTFLIP + + + + No documentation. + + + bb172585 + D3DPRESENT_FLIPRESTART + D3DPRESENT_FLIPRESTART + + + + No documentation. + + + bb172585 + D3DPRESENT_VIDEO_RESTRICT_TO_MONITOR + D3DPRESENT_VIDEO_RESTRICT_TO_MONITOR + + + + No documentation. + + + bb172585 + D3DPRESENT_UPDATEOVERLAYONLY + D3DPRESENT_UPDATEOVERLAYONLY + + + + No documentation. + + + bb172585 + D3DPRESENT_HIDEOVERLAY + D3DPRESENT_HIDEOVERLAY + + + + No documentation. + + + bb172585 + D3DPRESENT_UPDATECOLORKEY + D3DPRESENT_UPDATECOLORKEY + + + + No documentation. + + + bb172585 + D3DPRESENT_FORCEIMMEDIATE + D3DPRESENT_FORCEIMMEDIATE + + + + No documentation. + + + bb172585 + D3DPRESENT_RATE_DEFAULT + D3DPRESENT_RATE_DEFAULT + + + + None. + + + None + None + + + +

    Constants used by .

    +
    + + bb172586 + D3DPRESENTFLAG + D3DPRESENTFLAG +
    + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_LOCKABLE_BACKBUFFER + D3DPRESENTFLAG_LOCKABLE_BACKBUFFER + + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL + D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL + + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_DEVICECLIP + D3DPRESENTFLAG_DEVICECLIP + + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_VIDEO + D3DPRESENTFLAG_VIDEO + + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_NOAUTOROTATE + D3DPRESENTFLAG_NOAUTOROTATE + + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_UNPRUNEDMODE + D3DPRESENTFLAG_UNPRUNEDMODE + + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_OVERLAY_LIMITEDRGB + D3DPRESENTFLAG_OVERLAY_LIMITEDRGB + + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_OVERLAY_YCbCr_BT709 + D3DPRESENTFLAG_OVERLAY_YCbCr_BT709 + + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_OVERLAY_YCbCr_xvYCC + D3DPRESENTFLAG_OVERLAY_YCbCr_xvYCC + + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_RESTRICTED_CONTENT + D3DPRESENTFLAG_RESTRICTED_CONTENT + + + + No documentation. + + + bb172586 + D3DPRESENTFLAG_RESTRICT_SHARED_RESOURCE_DRIVER + D3DPRESENTFLAG_RESTRICT_SHARED_RESOURCE_DRIVER + + + + None. + + + None + None + + + +

    Describes the relationship between the adapter refresh rate and the rate at which Present or Present operations are completed. These values also serve as flag values for the PresentationIntervals field of .

    +

    + +

    Windowed mode supports , , and . and the are nearly equivalent (see the information regarding timer resolution below). They perform similarly to COPY_VSYNC in that there is only one present per frame, and they prevent tearing with beam-following. In contrast, will attempt to provide an unlimited presentation rate.

    Full-screen mode supports similar usage as windowed mode by supporting regardless of the refresh rate or swap effect. uses the default system timer resolution whereas the calls timeBeginPeriod to enhance system timer resolution. This improves the quality of vertical sync, but consumes slightly more processing time. Both parameters attempt to synchronize vertically.

    +
    + + bb172585 + D3DPRESENT_INTERVAL + D3DPRESENT_INTERVAL +
    + + + No documentation. + + + bb172585 + D3DPRESENT_INTERVAL_DEFAULT + D3DPRESENT_INTERVAL_DEFAULT + + + + No documentation. + + + bb172585 + D3DPRESENT_INTERVAL_ONE + D3DPRESENT_INTERVAL_ONE + + + + No documentation. + + + bb172585 + D3DPRESENT_INTERVAL_TWO + D3DPRESENT_INTERVAL_TWO + + + + No documentation. + + + bb172585 + D3DPRESENT_INTERVAL_THREE + D3DPRESENT_INTERVAL_THREE + + + + No documentation. + + + bb172585 + D3DPRESENT_INTERVAL_FOUR + D3DPRESENT_INTERVAL_FOUR + + + + No documentation. + + + bb172585 + D3DPRESENT_INTERVAL_IMMEDIATE + D3DPRESENT_INTERVAL_IMMEDIATE + + + +

    Miscellaneous driver primitive capability flags.

    +
    + + bb172583 + D3DPMISCCAPS + D3DPMISCCAPS +
    + + + No documentation. + + + bb172583 + D3DPMISCCAPS_MASKZ + D3DPMISCCAPS_MASKZ + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_CULLNONE + D3DPMISCCAPS_CULLNONE + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_CULLCW + D3DPMISCCAPS_CULLCW + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_CULLCCW + D3DPMISCCAPS_CULLCCW + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_COLORWRITEENABLE + D3DPMISCCAPS_COLORWRITEENABLE + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_CLIPPLANESCALEDPOINTS + D3DPMISCCAPS_CLIPPLANESCALEDPOINTS + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_CLIPTLVERTS + D3DPMISCCAPS_CLIPTLVERTS + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_TSSARGTEMP + D3DPMISCCAPS_TSSARGTEMP + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_BLENDOP + D3DPMISCCAPS_BLENDOP + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_NULLREFERENCE + D3DPMISCCAPS_NULLREFERENCE + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_INDEPENDENTWRITEMASKS + D3DPMISCCAPS_INDEPENDENTWRITEMASKS + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_PERSTAGECONSTANT + D3DPMISCCAPS_PERSTAGECONSTANT + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_FOGANDSPECULARALPHA + D3DPMISCCAPS_FOGANDSPECULARALPHA + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_SEPARATEALPHABLEND + D3DPMISCCAPS_SEPARATEALPHABLEND + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS + D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING + D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_FOGVERTEXCLAMPED + D3DPMISCCAPS_FOGVERTEXCLAMPED + + + + No documentation. + + + bb172583 + D3DPMISCCAPS_POSTBLENDSRGBCONVERT + D3DPMISCCAPS_POSTBLENDSRGBCONVERT + + + +

    Defines the primitives supported by Direct3D.

    +
    + +

    Using Triangle Strips or Triangle Fans (Direct3D 9) is often more efficient than using triangle lists because fewer vertices are duplicated.

    +
    + + bb172589 + D3DPRIMITIVETYPE + D3DPRIMITIVETYPE +
    + + +

    Renders the vertices as a collection of isolated points. This value is unsupported for indexed primitives.

    +
    + + bb172589 + D3DPT_POINTLIST + D3DPT_POINTLIST +
    + + +

    Renders the vertices as a list of isolated straight line segments.

    +
    + + bb172589 + D3DPT_LINELIST + D3DPT_LINELIST +
    + + +

    Renders the vertices as a single polyline.

    +
    + + bb172589 + D3DPT_LINESTRIP + D3DPT_LINESTRIP +
    + + +

    Renders the specified vertices as a sequence of isolated triangles. Each group of three vertices defines a separate triangle.

    Back-face culling is affected by the current winding-order render state.

    +
    + + bb172589 + D3DPT_TRIANGLELIST + D3DPT_TRIANGLELIST +
    + + +

    Renders the vertices as a triangle strip. The backface-culling flag is automatically flipped on even-numbered triangles.

    +
    + + bb172589 + D3DPT_TRIANGLESTRIP + D3DPT_TRIANGLESTRIP +
    + + +

    Renders the vertices as a triangle fan.

    +
    + + bb172589 + D3DPT_TRIANGLEFAN + D3DPT_TRIANGLEFAN +
    + + +

    Identifies the query type. For information about queries, see Queries (Direct3D 9)

    +
    + + bb172594 + D3DQUERYTYPE + D3DQUERYTYPE +
    + + + No documentation. + + + bb172594 + D3DQUERYTYPE_VCACHE + D3DQUERYTYPE_VCACHE + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_RESOURCEMANAGER + D3DQUERYTYPE_RESOURCEMANAGER + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_VERTEXSTATS + D3DQUERYTYPE_VERTEXSTATS + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_EVENT + D3DQUERYTYPE_EVENT + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_OCCLUSION + D3DQUERYTYPE_OCCLUSION + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_TIMESTAMP + D3DQUERYTYPE_TIMESTAMP + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_TIMESTAMPDISJOINT + D3DQUERYTYPE_TIMESTAMPDISJOINT + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_TIMESTAMPFREQ + D3DQUERYTYPE_TIMESTAMPFREQ + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_PIPELINETIMINGS + D3DQUERYTYPE_PIPELINETIMINGS + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_INTERFACETIMINGS + D3DQUERYTYPE_INTERFACETIMINGS + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_VERTEXTIMINGS + D3DQUERYTYPE_VERTEXTIMINGS + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_PIXELTIMINGS + D3DQUERYTYPE_PIXELTIMINGS + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_BANDWIDTHTIMINGS + D3DQUERYTYPE_BANDWIDTHTIMINGS + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_CACHEUTILIZATION + D3DQUERYTYPE_CACHEUTILIZATION + + + + No documentation. + + + bb172594 + D3DQUERYTYPE_MEMORYPRESSURE + D3DQUERYTYPE_MEMORYPRESSURE + + + +

    A programmable pixel shader is made up of a set of instructions that operate on pixel data. Registers transfer data in and out of the ALU. Additional control can be applied to modify the instruction, the results, or what data gets written out.

    • ps_3_0 Instructions contains a list of the available instructions.
    • ps_3_0 Registers lists the different types of registers used by the pixel shader ALU.
    • Modifiers Are used to modify the way an instruction works.
    • Destination Register Write Mask determines what components of the destination register get written.
    • Pixel Shader Source Register Modifiers alter the source register data before the instruction runs.
    • Source Register Swizzling gives additional control over which register components are read, copied, or written.
    +
    + + bb219845 + D3DPRASTERCAPS + D3DPRASTERCAPS +
    + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_DITHER + D3DPRASTERCAPS_DITHER + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_ZTEST + D3DPRASTERCAPS_ZTEST + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_FOGVERTEX + D3DPRASTERCAPS_FOGVERTEX + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_FOGTABLE + D3DPRASTERCAPS_FOGTABLE + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_MIPMAPLODBIAS + D3DPRASTERCAPS_MIPMAPLODBIAS + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_ZBUFFERLESSHSR + D3DPRASTERCAPS_ZBUFFERLESSHSR + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_FOGRANGE + D3DPRASTERCAPS_FOGRANGE + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_ANISOTROPY + D3DPRASTERCAPS_ANISOTROPY + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_WBUFFER + D3DPRASTERCAPS_WBUFFER + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_WFOG + D3DPRASTERCAPS_WFOG + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_ZFOG + D3DPRASTERCAPS_ZFOG + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_COLORPERSPECTIVE + D3DPRASTERCAPS_COLORPERSPECTIVE + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_SCISSORTEST + D3DPRASTERCAPS_SCISSORTEST + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS + D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_DEPTHBIAS + D3DPRASTERCAPS_DEPTHBIAS + + + + No documentation. + + + bb219845 + D3DPRASTERCAPS_MULTISAMPLE_TOGGLE + D3DPRASTERCAPS_MULTISAMPLE_TOGGLE + + + +

    Data type of the register.

    +
    + + bb205424 + D3DXREGISTER_SET + D3DXREGISTER_SET +
    + + +

    Boolean value.

    +
    + + bb205424 + D3DXRS_BOOL + D3DXRS_BOOL +
    + + +

    4D integer number.

    +
    + + bb205424 + D3DXRS_INT4 + D3DXRS_INT4 +
    + + +

    4D floating-point number.

    +
    + + bb205424 + D3DXRS_FLOAT4 + D3DXRS_FLOAT4 +
    + + +

    The register contains 4D sampler data.

    +
    + + bb205424 + D3DXRS_SAMPLER + D3DXRS_SAMPLER +
    + + +

    The enumerated type lists a variety of attributes, or render states. The enumerators of that are used exclusively by drivers can specify either rendering information or a texture attribute. The following render states are used by display drivers:

    #define D3DRENDERSTATE_EVICTMANAGEDTEXTURES  61	
    +            #define D3DRENDERSTATE_SCENECAPTURE          62	
    +            #define D3DRS_DELETERTPATCH                  169	
    +            #define D3DRS_MAXVERTEXSHADERINST            196	
    +            #define D3DRS_MAXPIXELSHADERINST             197

    Enumerators

    D3DRENDERSTATE_EVICTMANAGEDTEXTURES

    Determines whether textures are evicted from memory. + The driver uses a data type without a default value to detect whether to evict.

    This render state determines whether the driver evicts textures that it manages (as opposed to textures managed by the Direct3D runtime) from video memory. If the render state value is TRUE, the driver evicts the textures. Otherwise, the driver does not evict those textures.

    D3DRENDERSTATE_SCENECAPTURE

    Specifies either begin scene information or end scene information for geometric data captured within a frame. + The driver uses a data type with a default value of TRUE to detect scene-capture information.

    The driver responds to D3DRENDERSTATE_SCENECAPTURE first with TRUE for begin scene information and next with for end scene information to capture geometric data within a frame. + See the permedia2 sample driver that ships with the Windows Driver Development Kit (DDK) for an example implementation. + Using the D3DRENDERSTATE_SCENECAPTURE render state in a D3dDrawPrimitives2 call replaces the legacy D3DHALCallbacks->D3dSceneCapture callback routine.

    Care must be taken in updating a driver that implements the legacy D3DHALCallbacks->D3dSceneCapture callback routine to one using the D3DRENDERSTATE_SCENECAPTURE render state. The D3dSceneCapture callback routine uses the constants D3DHAL_SCENE_CAPTURE_START and D3DHAL_SCENE_CAPTURE_END to indicate, respectively, the beginning and end of a scene. The values of these constants are, respectively, 0 and 1. If you use these constants in place of TRUE and in this render state, the meaning will be the exact opposite of what you intend.

    D3DRS_DELETERTPATCH

    DirectX 8.0 and later versions only.

    Deletes either a rectangular or triangular patch from memory. + The driver uses a DWORD data type without a default value to detect the patch to delete.

    This render state notifies the driver that a patch is to be deleted. The value of this render state is the handle to the patch affected. All cached information should be freed and the handle should be removed from the driver's patch handle table. This render state is not visible to applications but is generated internally when an application calls the DeletePatch function. This render state is sent to the driver only when patches are deleted by DeletePatch explicitly. All other patches should be cleaned up when the device is destroyed.

    D3DRS_MAXVERTEXSHADERINST

    DirectX 9.0 and later versions only.

    Determines the maximum number of instructions that the vertex shader assembler can execute.

    The driver uses a DWORD data type with a default value of D3DINFINITEINSTRUCTIONS (0xffffffff) to report the maximum number of vertex-shader instructions. + This maximum number depends on the version of the vertex shader that the display device supports as shown in the following table.

    VersionMaximum number
    earlier than 2_00
    2_0 and laterFrom 216 (0x0000ffff) to D3DINFINITEINSTRUCTIONS

    ?

    D3DINFINITEINSTRUCTIONS represents a virtually unlimited amount.

    Valid values for this render state are numbers that are powers of 2; if the driver sets any other integer, the runtime uses the next nearest power of 2 number.

    The runtime sets the MaxVShaderInstructionsExecuted member of the structure to this maximum number.

    D3DRS_MAXPIXELSHADERINST

    DirectX 9.0 and later versions only.

    Determines the maximum number of instructions that the pixel shader assembler can execute.

    The driver uses a DWORD data type with a default value of D3DINFINITEINSTRUCTIONS (0xffffffff) to report the maximum number of pixel-shader instructions. + This maximum number depends on the version of the pixel shader that the display device supports as shown in the following table.

    VersionMaximum number
    earlier than 2_00
    2_0From 96 to D3DINFINITEINSTRUCTIONS
    3_0 and laterFrom 216 (0x0000ffff) to D3DINFINITEINSTRUCTIONS

    ?

    D3DINFINITEINSTRUCTIONS represents a virtually unlimited amount.

    Valid values for this render state are numbers that are powers of 2; if the driver sets any other integer, the runtime uses the next nearest power of 2 number.

    The runtime sets the MaxVShaderInstructionsExecuted member of the structure to this maximum number.

    +
    + +

    The driver uses these render states when it performs graphics rendering. Only render states that are specific to drivers are included in the Windows Driver Kit (WDK) documentation. The render states accessible to DirectX applications are included in the DirectX SDK documentation. These application-level render states include such characteristics as whether alpha blending is enabled, whether dithering is enabled, whether Direct3D lighting is used, and the type of shading to be used.

    To update a particular render state, Direct3D stores information about the render state, and then calls the driver's D3dDrawPrimitives2 callback routine. The information provided to the driver enables it to:

    • Determine that it should update one or more render states.

    • Identify which render states to update, and what the new render state values should be.

    Note that for certain render states to be honored, the driver must have previously set capability flags in the relevant member of the D3DPRIMCAPS structure.

    In order to indicate a specific render state update, Direct3D inserts a D3DHAL_DP2COMMAND structure into the command buffer, setting the bCommand member of this structure to D3DDP2OP_RENDERSTATE (see the description for D3DDP2OP_RENDERSTATE in D3DHAL_DP2OPERATION), and setting the wStateCount member of the same structure to the number of render states to be updated.

    Immediately following the D3DHAL_DP2COMMAND structure, Direct3D inserts one D3DHAL_DP2RENDERSTATE structure into the command buffer for each render state to be updated. The RenderState member of this structure identifies the render state to be changed; the new value of this render state is specified in either the dwState member (for DWORD values) or the fState member (for D3DVALUE values).

    The following figure shows a portion of the command buffer containing a D3DDP2OP_RENDERSTATE command and two D3DHAL_DP2RENDERSTATE structures. The first of the three structures indicates that two render states are to be updated. The second structure indicates that the D3DRENDERSTATE_FILLMODE render state is to be changed to . The third structure indicates that the D3DRENDERSTATE_SHADEMODE render state should be updated to .

    Additional Notes

    See the , , and D3DTEXTUREFILTER enumerated types in the DirectX SDK documentation for complete listings of all of the enabled render state types.

    Some changes have been made to the enumerated type for DirectX 5.0 and beyond. D3DRENDERSTATE_BLENDENABLE has been removed completely although it is defined as D3DRENDERSTATE_ALPHABLENDENABLE in the d3dtypes.h header file. See D3DRENDERSTATE_COLORKEYENABLE for an explanation. The 128 integer values in the interval [128, 255] are reserved for texture coordinate wrap flags. These are constructed with the D3DWRAP_U and D3DWRAP_V macros. Using a flags word preserves forward compatibility with texture coordinates of higher dimension than 2D.

    Multitexture macro ops and D3DRENDERSTATE_TEXTUREFACTOR override all of the per-texture stage blending controls (COLOR{OP,ARG1,ARG2} & ALPHA{OP,ARG1,ARG2}).

    +
    + + ff549036 + D3DRENDERSTATETYPE + D3DRENDERSTATETYPE +
    + + +

    Determines whether textures are evicted from memory. + The driver uses a data type without a default value to detect whether to evict.

    This render state determines whether the driver evicts textures that it manages (as opposed to textures managed by the Direct3D runtime) from video memory. If the render state value is TRUE, the driver evicts the textures. Otherwise, the driver does not evict those textures.

    +
    + + ff549036 + D3DRS_ZENABLE + D3DRS_ZENABLE +
    + + +

    Specifies either begin scene information or end scene information for geometric data captured within a frame. + The driver uses a data type with a default value of TRUE to detect scene-capture information.

    The driver responds to D3DRENDERSTATE_SCENECAPTURE first with TRUE for begin scene information and next with for end scene information to capture geometric data within a frame. + See the permedia2 sample driver that ships with the Windows Driver Development Kit (DDK) for an example implementation. + Using the D3DRENDERSTATE_SCENECAPTURE render state in a D3dDrawPrimitives2 call replaces the legacy D3DHALCallbacks->D3dSceneCapture callback routine.

    Care must be taken in updating a driver that implements the legacy D3DHALCallbacks->D3dSceneCapture callback routine to one using the D3DRENDERSTATE_SCENECAPTURE render state. The D3dSceneCapture callback routine uses the constants D3DHAL_SCENE_CAPTURE_START and D3DHAL_SCENE_CAPTURE_END to indicate, respectively, the beginning and end of a scene. The values of these constants are, respectively, 0 and 1. If you use these constants in place of TRUE and in this render state, the meaning will be the exact opposite of what you intend.

    +
    + + ff549036 + D3DRS_FILLMODE + D3DRS_FILLMODE +
    + + +

    DirectX 8.0 and later versions only.

    Deletes either a rectangular or triangular patch from memory. + The driver uses a DWORD data type without a default value to detect the patch to delete.

    This render state notifies the driver that a patch is to be deleted. The value of this render state is the handle to the patch affected. All cached information should be freed and the handle should be removed from the driver's patch handle table. This render state is not visible to applications but is generated internally when an application calls the DeletePatch function. This render state is sent to the driver only when patches are deleted by DeletePatch explicitly. All other patches should be cleaned up when the device is destroyed.

    +
    + + ff549036 + D3DRS_SHADEMODE + D3DRS_SHADEMODE +
    + + +

    DirectX 9.0 and later versions only.

    Determines the maximum number of instructions that the vertex shader assembler can execute.

    The driver uses a DWORD data type with a default value of D3DINFINITEINSTRUCTIONS (0xffffffff) to report the maximum number of vertex-shader instructions. + This maximum number depends on the version of the vertex shader that the display device supports as shown in the following table.

    VersionMaximum number
    earlier than 2_00
    2_0 and laterFrom 216 (0x0000ffff) to D3DINFINITEINSTRUCTIONS

    ?

    D3DINFINITEINSTRUCTIONS represents a virtually unlimited amount.

    Valid values for this render state are numbers that are powers of 2; if the driver sets any other integer, the runtime uses the next nearest power of 2 number.

    The runtime sets the MaxVShaderInstructionsExecuted member of the structure to this maximum number.

    +
    + + ff549036 + D3DRS_ZWRITEENABLE + D3DRS_ZWRITEENABLE +
    + + +

    DirectX 9.0 and later versions only.

    Determines the maximum number of instructions that the pixel shader assembler can execute.

    The driver uses a DWORD data type with a default value of D3DINFINITEINSTRUCTIONS (0xffffffff) to report the maximum number of pixel-shader instructions. + This maximum number depends on the version of the pixel shader that the display device supports as shown in the following table.

    VersionMaximum number
    earlier than 2_00
    2_0From 96 to D3DINFINITEINSTRUCTIONS
    3_0 and laterFrom 216 (0x0000ffff) to D3DINFINITEINSTRUCTIONS

    ?

    D3DINFINITEINSTRUCTIONS represents a virtually unlimited amount.

    Valid values for this render state are numbers that are powers of 2; if the driver sets any other integer, the runtime uses the next nearest power of 2 number.

    The runtime sets the MaxVShaderInstructionsExecuted member of the structure to this maximum number.

    +
    + + ff549036 + D3DRS_ALPHATESTENABLE + D3DRS_ALPHATESTENABLE +
    + + + No documentation. + + + ff549036 + D3DRS_LASTPIXEL + D3DRS_LASTPIXEL + + + + No documentation. + + + ff549036 + D3DRS_SRCBLEND + D3DRS_SRCBLEND + + + + No documentation. + + + ff549036 + D3DRS_DESTBLEND + D3DRS_DESTBLEND + + + + No documentation. + + + ff549036 + D3DRS_CULLMODE + D3DRS_CULLMODE + + + + No documentation. + + + ff549036 + D3DRS_ZFUNC + D3DRS_ZFUNC + + + + No documentation. + + + ff549036 + D3DRS_ALPHAREF + D3DRS_ALPHAREF + + + + No documentation. + + + ff549036 + D3DRS_ALPHAFUNC + D3DRS_ALPHAFUNC + + + + No documentation. + + + ff549036 + D3DRS_DITHERENABLE + D3DRS_DITHERENABLE + + + + No documentation. + + + ff549036 + D3DRS_ALPHABLENDENABLE + D3DRS_ALPHABLENDENABLE + + + + No documentation. + + + ff549036 + D3DRS_FOGENABLE + D3DRS_FOGENABLE + + + + No documentation. + + + ff549036 + D3DRS_SPECULARENABLE + D3DRS_SPECULARENABLE + + + + No documentation. + + + ff549036 + D3DRS_FOGCOLOR + D3DRS_FOGCOLOR + + + + No documentation. + + + ff549036 + D3DRS_FOGTABLEMODE + D3DRS_FOGTABLEMODE + + + + No documentation. + + + ff549036 + D3DRS_FOGSTART + D3DRS_FOGSTART + + + + No documentation. + + + ff549036 + D3DRS_FOGEND + D3DRS_FOGEND + + + + No documentation. + + + ff549036 + D3DRS_FOGDENSITY + D3DRS_FOGDENSITY + + + + No documentation. + + + ff549036 + D3DRS_RANGEFOGENABLE + D3DRS_RANGEFOGENABLE + + + + No documentation. + + + ff549036 + D3DRS_STENCILENABLE + D3DRS_STENCILENABLE + + + + No documentation. + + + ff549036 + D3DRS_STENCILFAIL + D3DRS_STENCILFAIL + + + + No documentation. + + + ff549036 + D3DRS_STENCILZFAIL + D3DRS_STENCILZFAIL + + + + No documentation. + + + ff549036 + D3DRS_STENCILPASS + D3DRS_STENCILPASS + + + + No documentation. + + + ff549036 + D3DRS_STENCILFUNC + D3DRS_STENCILFUNC + + + + No documentation. + + + ff549036 + D3DRS_STENCILREF + D3DRS_STENCILREF + + + + No documentation. + + + ff549036 + D3DRS_STENCILMASK + D3DRS_STENCILMASK + + + + No documentation. + + + ff549036 + D3DRS_STENCILWRITEMASK + D3DRS_STENCILWRITEMASK + + + + No documentation. + + + ff549036 + D3DRS_TEXTUREFACTOR + D3DRS_TEXTUREFACTOR + + + + No documentation. + + + ff549036 + D3DRS_WRAP0 + D3DRS_WRAP0 + + + + No documentation. + + + ff549036 + D3DRS_WRAP1 + D3DRS_WRAP1 + + + + No documentation. + + + ff549036 + D3DRS_WRAP2 + D3DRS_WRAP2 + + + + No documentation. + + + ff549036 + D3DRS_WRAP3 + D3DRS_WRAP3 + + + + No documentation. + + + ff549036 + D3DRS_WRAP4 + D3DRS_WRAP4 + + + + No documentation. + + + ff549036 + D3DRS_WRAP5 + D3DRS_WRAP5 + + + + No documentation. + + + ff549036 + D3DRS_WRAP6 + D3DRS_WRAP6 + + + + No documentation. + + + ff549036 + D3DRS_WRAP7 + D3DRS_WRAP7 + + + + No documentation. + + + ff549036 + D3DRS_CLIPPING + D3DRS_CLIPPING + + + + No documentation. + + + ff549036 + D3DRS_LIGHTING + D3DRS_LIGHTING + + + + No documentation. + + + ff549036 + D3DRS_AMBIENT + D3DRS_AMBIENT + + + + No documentation. + + + ff549036 + D3DRS_FOGVERTEXMODE + D3DRS_FOGVERTEXMODE + + + + No documentation. + + + ff549036 + D3DRS_COLORVERTEX + D3DRS_COLORVERTEX + + + + No documentation. + + + ff549036 + D3DRS_LOCALVIEWER + D3DRS_LOCALVIEWER + + + + No documentation. + + + ff549036 + D3DRS_NORMALIZENORMALS + D3DRS_NORMALIZENORMALS + + + + No documentation. + + + ff549036 + D3DRS_DIFFUSEMATERIALSOURCE + D3DRS_DIFFUSEMATERIALSOURCE + + + + No documentation. + + + ff549036 + D3DRS_SPECULARMATERIALSOURCE + D3DRS_SPECULARMATERIALSOURCE + + + + No documentation. + + + ff549036 + D3DRS_AMBIENTMATERIALSOURCE + D3DRS_AMBIENTMATERIALSOURCE + + + + No documentation. + + + ff549036 + D3DRS_EMISSIVEMATERIALSOURCE + D3DRS_EMISSIVEMATERIALSOURCE + + + + No documentation. + + + ff549036 + D3DRS_VERTEXBLEND + D3DRS_VERTEXBLEND + + + + No documentation. + + + ff549036 + D3DRS_CLIPPLANEENABLE + D3DRS_CLIPPLANEENABLE + + + + No documentation. + + + ff549036 + D3DRS_POINTSIZE + D3DRS_POINTSIZE + + + + No documentation. + + + ff549036 + D3DRS_POINTSIZE_MIN + D3DRS_POINTSIZE_MIN + + + + No documentation. + + + ff549036 + D3DRS_POINTSPRITEENABLE + D3DRS_POINTSPRITEENABLE + + + + No documentation. + + + ff549036 + D3DRS_POINTSCALEENABLE + D3DRS_POINTSCALEENABLE + + + + No documentation. + + + ff549036 + D3DRS_POINTSCALE_A + D3DRS_POINTSCALE_A + + + + No documentation. + + + ff549036 + D3DRS_POINTSCALE_B + D3DRS_POINTSCALE_B + + + + No documentation. + + + ff549036 + D3DRS_POINTSCALE_C + D3DRS_POINTSCALE_C + + + + No documentation. + + + ff549036 + D3DRS_MULTISAMPLEANTIALIAS + D3DRS_MULTISAMPLEANTIALIAS + + + + No documentation. + + + ff549036 + D3DRS_MULTISAMPLEMASK + D3DRS_MULTISAMPLEMASK + + + + No documentation. + + + ff549036 + D3DRS_PATCHEDGESTYLE + D3DRS_PATCHEDGESTYLE + + + + No documentation. + + + ff549036 + D3DRS_DEBUGMONITORTOKEN + D3DRS_DEBUGMONITORTOKEN + + + + No documentation. + + + ff549036 + D3DRS_POINTSIZE_MAX + D3DRS_POINTSIZE_MAX + + + + No documentation. + + + ff549036 + D3DRS_INDEXEDVERTEXBLENDENABLE + D3DRS_INDEXEDVERTEXBLENDENABLE + + + + No documentation. + + + ff549036 + D3DRS_COLORWRITEENABLE + D3DRS_COLORWRITEENABLE + + + + No documentation. + + + ff549036 + D3DRS_TWEENFACTOR + D3DRS_TWEENFACTOR + + + + No documentation. + + + ff549036 + D3DRS_BLENDOP + D3DRS_BLENDOP + + + + No documentation. + + + ff549036 + D3DRS_POSITIONDEGREE + D3DRS_POSITIONDEGREE + + + + No documentation. + + + ff549036 + D3DRS_NORMALDEGREE + D3DRS_NORMALDEGREE + + + + No documentation. + + + ff549036 + D3DRS_SCISSORTESTENABLE + D3DRS_SCISSORTESTENABLE + + + + No documentation. + + + ff549036 + D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_SLOPESCALEDEPTHBIAS + + + + No documentation. + + + ff549036 + D3DRS_ANTIALIASEDLINEENABLE + D3DRS_ANTIALIASEDLINEENABLE + + + + No documentation. + + + ff549036 + D3DRS_MINTESSELLATIONLEVEL + D3DRS_MINTESSELLATIONLEVEL + + + + No documentation. + + + ff549036 + D3DRS_MAXTESSELLATIONLEVEL + D3DRS_MAXTESSELLATIONLEVEL + + + + No documentation. + + + ff549036 + D3DRS_ADAPTIVETESS_X + D3DRS_ADAPTIVETESS_X + + + + No documentation. + + + ff549036 + D3DRS_ADAPTIVETESS_Y + D3DRS_ADAPTIVETESS_Y + + + + No documentation. + + + ff549036 + D3DRS_ADAPTIVETESS_Z + D3DRS_ADAPTIVETESS_Z + + + + No documentation. + + + ff549036 + D3DRS_ADAPTIVETESS_W + D3DRS_ADAPTIVETESS_W + + + + No documentation. + + + ff549036 + D3DRS_ENABLEADAPTIVETESSELLATION + D3DRS_ENABLEADAPTIVETESSELLATION + + + + No documentation. + + + ff549036 + D3DRS_TWOSIDEDSTENCILMODE + D3DRS_TWOSIDEDSTENCILMODE + + + + No documentation. + + + ff549036 + D3DRS_CCW_STENCILFAIL + D3DRS_CCW_STENCILFAIL + + + + No documentation. + + + ff549036 + D3DRS_CCW_STENCILZFAIL + D3DRS_CCW_STENCILZFAIL + + + + No documentation. + + + ff549036 + D3DRS_CCW_STENCILPASS + D3DRS_CCW_STENCILPASS + + + + No documentation. + + + ff549036 + D3DRS_CCW_STENCILFUNC + D3DRS_CCW_STENCILFUNC + + + + No documentation. + + + ff549036 + D3DRS_COLORWRITEENABLE1 + D3DRS_COLORWRITEENABLE1 + + + + No documentation. + + + ff549036 + D3DRS_COLORWRITEENABLE2 + D3DRS_COLORWRITEENABLE2 + + + + No documentation. + + + ff549036 + D3DRS_COLORWRITEENABLE3 + D3DRS_COLORWRITEENABLE3 + + + + No documentation. + + + ff549036 + D3DRS_BLENDFACTOR + D3DRS_BLENDFACTOR + + + + No documentation. + + + ff549036 + D3DRS_SRGBWRITEENABLE + D3DRS_SRGBWRITEENABLE + + + + No documentation. + + + ff549036 + D3DRS_DEPTHBIAS + D3DRS_DEPTHBIAS + + + + No documentation. + + + ff549036 + D3DRS_WRAP8 + D3DRS_WRAP8 + + + + No documentation. + + + ff549036 + D3DRS_WRAP9 + D3DRS_WRAP9 + + + + No documentation. + + + ff549036 + D3DRS_WRAP10 + D3DRS_WRAP10 + + + + No documentation. + + + ff549036 + D3DRS_WRAP11 + D3DRS_WRAP11 + + + + No documentation. + + + ff549036 + D3DRS_WRAP12 + D3DRS_WRAP12 + + + + No documentation. + + + ff549036 + D3DRS_WRAP13 + D3DRS_WRAP13 + + + + No documentation. + + + ff549036 + D3DRS_WRAP14 + D3DRS_WRAP14 + + + + No documentation. + + + ff549036 + D3DRS_WRAP15 + D3DRS_WRAP15 + + + + No documentation. + + + ff549036 + D3DRS_SEPARATEALPHABLENDENABLE + D3DRS_SEPARATEALPHABLENDENABLE + + + + No documentation. + + + ff549036 + D3DRS_SRCBLENDALPHA + D3DRS_SRCBLENDALPHA + + + + No documentation. + + + ff549036 + D3DRS_DESTBLENDALPHA + D3DRS_DESTBLENDALPHA + + + + No documentation. + + + ff549036 + D3DRS_BLENDOPALPHA + D3DRS_BLENDOPALPHA + + + + No documentation. + + + D3DX_RESOURCE_RESIDENCY + D3DX_RESOURCE_RESIDENCY + + + + No documentation. + + + D3DX_RESOURCE_RESIDENCY_RESIDENT + D3DX_RESOURCE_RESIDENCY_RESIDENT + + + + No documentation. + + + D3DX_RESOURCE_RESIDENCY_RESIDENT_IN_SHARED_MEMORY + D3DX_RESOURCE_RESIDENCY_RESIDENT_IN_SHARED_MEMORY + + + + No documentation. + + + D3DX_RESOURCE_RESIDENCY_NOT_RESIDENT + D3DX_RESOURCE_RESIDENCY_NOT_RESIDENT + + + + No documentation. + + + D3DRESOURCETYPE + D3DRESOURCETYPE + + + + No documentation. + + + D3DRTYPE_SURFACE + D3DRTYPE_SURFACE + + + + No documentation. + + + D3DRTYPE_VOLUME + D3DRTYPE_VOLUME + + + + No documentation. + + + D3DRTYPE_TEXTURE + D3DRTYPE_TEXTURE + + + + No documentation. + + + D3DRTYPE_VOLUMETEXTURE + D3DRTYPE_VOLUMETEXTURE + + + + No documentation. + + + D3DRTYPE_CUBETEXTURE + D3DRTYPE_CUBETEXTURE + + + + No documentation. + + + D3DRTYPE_VERTEXBUFFER + D3DRTYPE_VERTEXBUFFER + + + + No documentation. + + + D3DRTYPE_INDEXBUFFER + D3DRTYPE_INDEXBUFFER + + + +

    Sampler states define texture sampling operations such as texture addressing and texture filtering. Some sampler states set-up vertex processing, and some set-up pixel processing. Sampler states can be saved and restored using stateblocks (see State Blocks Save and Restore State (Direct3D 9)).

    +
    + + bb172602 + D3DSAMPLERSTATETYPE + D3DSAMPLERSTATETYPE +
    + + + No documentation. + + + bb172602 + D3DSAMP_ADDRESSU + D3DSAMP_ADDRESSU + + + + No documentation. + + + bb172602 + D3DSAMP_ADDRESSV + D3DSAMP_ADDRESSV + + + + No documentation. + + + bb172602 + D3DSAMP_ADDRESSW + D3DSAMP_ADDRESSW + + + + No documentation. + + + bb172602 + D3DSAMP_BORDERCOLOR + D3DSAMP_BORDERCOLOR + + + + No documentation. + + + bb172602 + D3DSAMP_MAGFILTER + D3DSAMP_MAGFILTER + + + + No documentation. + + + bb172602 + D3DSAMP_MINFILTER + D3DSAMP_MINFILTER + + + + No documentation. + + + bb172602 + D3DSAMP_MIPFILTER + D3DSAMP_MIPFILTER + + + + No documentation. + + + bb172602 + D3DSAMP_MIPMAPLODBIAS + D3DSAMP_MIPMAPLODBIAS + + + + No documentation. + + + bb172602 + D3DSAMP_MAXMIPLEVEL + D3DSAMP_MAXMIPLEVEL + + + + No documentation. + + + bb172602 + D3DSAMP_MAXANISOTROPY + D3DSAMP_MAXANISOTROPY + + + + No documentation. + + + bb172602 + D3DSAMP_SRGBTEXTURE + D3DSAMP_SRGBTEXTURE + + + + No documentation. + + + bb172602 + D3DSAMP_ELEMENTINDEX + D3DSAMP_ELEMENTINDEX + + + + No documentation. + + + bb172602 + D3DSAMP_DMAPOFFSET + D3DSAMP_DMAPOFFSET + + + +

    Defines the sampler texture types for vertex shaders.

    +
    + + bb172603 + D3DSAMPLER_TEXTURE_TYPE + D3DSAMPLER_TEXTURE_TYPE +
    + + +

    Uninitialized value. The value of this element is D3DSP_TEXTURETYPE_SHIFT.

    +
    + + bb172603 + D3DSTT_UNKNOWN + D3DSTT_UNKNOWN +
    + + +

    Declaring a 2D texture. The value of this element is D3DSP_TEXTURETYPE_SHIFT * 4.

    +
    + + bb172603 + D3DSTT_2D + D3DSTT_2D +
    + + +

    Declaring a cube texture. The value of this element is D3DSP_TEXTURETYPE_SHIFT * 8.

    +
    + + bb172603 + D3DSTT_CUBE + D3DSTT_CUBE +
    + + +

    Declaring a volume texture. The value of this element is D3DSP_TEXTURETYPE_SHIFT * 16.

    +
    + + bb172603 + D3DSTT_VOLUME + D3DSTT_VOLUME +
    + + +

    Flags indicating the method the rasterizer uses to create an image on a surface.

    +
    + +

    This enumeration is used as a member in and .

    +
    + + bb172604 + D3DSCANLINEORDERING + D3DSCANLINEORDERING +
    + + +

    The image is created from the first scanline to the last without skipping any.

    +
    + + bb172604 + D3DSCANLINEORDERING_UNKNOWN + D3DSCANLINEORDERING_UNKNOWN +
    + + +

    The image is created using the interlaced method in which odd-numbered lines are drawn on odd-numbered passes and even lines are drawn on even-numbered passes.

    +
    + + bb172604 + D3DSCANLINEORDERING_PROGRESSIVE + D3DSCANLINEORDERING_PROGRESSIVE +
    + + +

    The image is created using the interlaced method in which odd-numbered lines are drawn on odd-numbered passes and even lines are drawn on even-numbered passes.

    +
    + + bb172604 + D3DSCANLINEORDERING_INTERLACED + D3DSCANLINEORDERING_INTERLACED +
    + + +

    The following page provides a basic outline of key differences between Direct3D 9 and Direct3D 10. The outline below provides some insight to assist developers with Direct3D 9 experience to explore and relate to Direct3D 10.

    Although the info in this topic compares Direct3D 9 with Direct3D 10, because Direct3D 11 builds on the improvements made in Direct3D 10 and 10.1, you also need this info to migrate from Direct3D 9 to Direct3D 11. For info about moving beyond Direct3D 10 to Direct3D 11, see Migrating to Direct3D 11.

    • Overview
      • Removal
      • Device
    • Engine
      • Direct
    • Tricks
      • Overriding
      • Resolving
      • Simulating
    • Driving
      • Resource
      • Views
      • Static
      • Direct3D
      • HLSL
      • Shader
      • Creation
      • Shader
      • Input
      • Impact
      • Vertex
      • State
    • Porting
      • File
      • Mapping
    • Porting
      • Direct3D
      • Shader
      • HLSL
      • Constant
      • User
    • Additional
      • Integers
      • Mouse
      • Mapping
      • Reference
      • Test
      • StretchRect
    • Additional
    • Related
    +
    + + bb205073 + D3DPSHADECAPS + D3DPSHADECAPS +
    + + + No documentation. + + + bb205073 + D3DPSHADECAPS_COLORGOURAUDRGB + D3DPSHADECAPS_COLORGOURAUDRGB + + + + No documentation. + + + bb205073 + D3DPSHADECAPS_SPECULARGOURAUDRGB + D3DPSHADECAPS_SPECULARGOURAUDRGB + + + + No documentation. + + + bb205073 + D3DPSHADECAPS_ALPHAGOURAUDBLEND + D3DPSHADECAPS_ALPHAGOURAUDBLEND + + + + No documentation. + + + bb205073 + D3DPSHADECAPS_FOGGOURAUD + D3DPSHADECAPS_FOGGOURAUD + + + +

    Defines constants that describe the supported shading modes.

    +
    + +

    The first vertex of a triangle for flat shading mode is defined in the following manner.

    • For a triangle list, the first vertex of the triangle i is i * 3.
    • For a triangle strip, the first vertex of the triangle i is vertex i.
    • For a triangle fan, the first vertex of the triangle i is vertex i + 1.

    The members of this enumerated type define the vales for the render state.

    +
    + + bb172605 + D3DSHADEMODE + D3DSHADEMODE +
    + + +

    Flat shading mode. The color and specular component of the first vertex in the triangle are used to determine the color and specular component of the face. These colors remain constant across the triangle; that is, they are not interpolated. The specular alpha is interpolated. See Remarks.

    +
    + + bb172605 + D3DSHADE_FLAT + D3DSHADE_FLAT +
    + + +

    Gouraud shading mode. The color and specular components of the face are determined by a linear interpolation between all three of the triangle's vertices.

    +
    + + bb172605 + D3DSHADE_GOURAUD + D3DSHADE_GOURAUD +
    + + +

    Not supported.

    +
    + + bb172605 + D3DSHADE_PHONG + D3DSHADE_PHONG +
    + + +

    The flags are used for parsing, compiling, or assembling shaders.

    Parser flags

    Parse time flags are only used by the effect system (before effect compilation) when you create an effect compiler. For example, you could create a compiler object with , and then use that compiler object repeatedly with different compiler flags to generate specialized code.

    +
    + +

    The effect system will use parser flags when called by the following functions:

    • CompileEffect

    The effect system will use compiler flags when called by the following functions:

    • (or or )
    • CompileEffect (or CompileShader)

    In addition, you can use compiler flags when creating an effect by calling (or or ).

    • If you pass in an uncompiled .fx file, the effect system will use the flag input parameter during compilation.
    • If you pass in a compiled effect, the effect system will ignore the compiler flags since they are not needed to load the effect.

    The effect system will use assembler flags when called by the following functions:

    Applying compiler flags or assembler flags to the incorrect API will fail shader validation. Check the Direct3D error code return value from the function (with the DirectX Error Lookup Tool) to help track down this error.

    +
    + + bb205441 + D3DXSHADER + D3DXSHADER +
    + + + No documentation. + + + bb205441 + D3DXSHADER_DEBUG + D3DXSHADER_DEBUG + + + + No documentation. + + + bb205441 + D3DXSHADER_SKIPVALIDATION + D3DXSHADER_SKIPVALIDATION + + + + No documentation. + + + bb205441 + D3DXSHADER_SKIPOPTIMIZATION + D3DXSHADER_SKIPOPTIMIZATION + + + + No documentation. + + + bb205441 + D3DXSHADER_PACKMATRIX_ROWMAJOR + D3DXSHADER_PACKMATRIX_ROWMAJOR + + + + No documentation. + + + bb205441 + D3DXSHADER_PACKMATRIX_COLUMNMAJOR + D3DXSHADER_PACKMATRIX_COLUMNMAJOR + + + + No documentation. + + + bb205441 + D3DXSHADER_PARTIALPRECISION + D3DXSHADER_PARTIALPRECISION + + + + No documentation. + + + bb205441 + D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT + D3DXSHADER_FORCE_VS_SOFTWARE_NOOPT + + + + No documentation. + + + bb205441 + D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT + D3DXSHADER_FORCE_PS_SOFTWARE_NOOPT + + + + No documentation. + + + bb205441 + D3DXSHADER_NO_PRESHADER + D3DXSHADER_NO_PRESHADER + + + + No documentation. + + + bb205441 + D3DXSHADER_AVOID_FLOW_CONTROL + D3DXSHADER_AVOID_FLOW_CONTROL + + + + No documentation. + + + bb205441 + D3DXSHADER_PREFER_FLOW_CONTROL + D3DXSHADER_PREFER_FLOW_CONTROL + + + + No documentation. + + + bb205441 + D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY + D3DXSHADER_ENABLE_BACKWARDS_COMPATIBILITY + + + + No documentation. + + + bb205441 + D3DXSHADER_IEEE_STRICTNESS + D3DXSHADER_IEEE_STRICTNESS + + + + No documentation. + + + bb205441 + D3DXSHADER_USE_LEGACY_D3DX9_31_DLL + D3DXSHADER_USE_LEGACY_D3DX9_31_DLL + + + + No documentation. + + + bb205441 + D3DXSHADER_OPTIMIZATION_LEVEL0 + D3DXSHADER_OPTIMIZATION_LEVEL0 + + + + No documentation. + + + bb205441 + D3DXSHADER_OPTIMIZATION_LEVEL1 + D3DXSHADER_OPTIMIZATION_LEVEL1 + + + + No documentation. + + + bb205441 + D3DXSHADER_OPTIMIZATION_LEVEL2 + D3DXSHADER_OPTIMIZATION_LEVEL2 + + + + No documentation. + + + bb205441 + D3DXSHADER_OPTIMIZATION_LEVEL3 + D3DXSHADER_OPTIMIZATION_LEVEL3 + + + + None. + + + None + None + + + +

    The following flags are used to specify sprite rendering options to the flags parameter in the Begin method:

    +
    + + bb205466 + D3DXSPRITE + D3DXSPRITE +
    + + + No documentation. + + + bb205466 + D3DXSPRITE_DONOTSAVESTATE + D3DXSPRITE_DONOTSAVESTATE + + + + No documentation. + + + bb205466 + D3DXSPRITE_DONOTMODIFY_RENDERSTATE + D3DXSPRITE_DONOTMODIFY_RENDERSTATE + + + + No documentation. + + + bb205466 + D3DXSPRITE_OBJECTSPACE + D3DXSPRITE_OBJECTSPACE + + + + No documentation. + + + bb205466 + D3DXSPRITE_BILLBOARD + D3DXSPRITE_BILLBOARD + + + + No documentation. + + + bb205466 + D3DXSPRITE_ALPHABLEND + D3DXSPRITE_ALPHABLEND + + + + No documentation. + + + bb205466 + D3DXSPRITE_SORT_TEXTURE + D3DXSPRITE_SORT_TEXTURE + + + + No documentation. + + + bb205466 + D3DXSPRITE_SORT_DEPTH_FRONTTOBACK + D3DXSPRITE_SORT_DEPTH_FRONTTOBACK + + + + No documentation. + + + bb205466 + D3DXSPRITE_SORT_DEPTH_BACKTOFRONT + D3DXSPRITE_SORT_DEPTH_BACKTOFRONT + + + + No documentation. + + + bb205466 + D3DXSPRITE_DO_NOT_ADDREF_TEXTURE + D3DXSPRITE_DO_NOT_ADDREF_TEXTURE + + + + None. + + + None + None + + + +

    Predefined sets of pipeline state used by state blocks (see State Blocks Save and Restore State (Direct3D 9)).

    +
    + +

    As the following diagram shows, vertex and pixel state are both subsets of device state.

    There are only a few states that are considered both vertex and pixel state. These states are:

    • Render state:
    • Render state:
    • Render state:
    • Texture state:
    • Texture state:
    +
    + + bb172608 + D3DSTATEBLOCKTYPE + D3DSTATEBLOCKTYPE +
    + + + No documentation. + + + bb172608 + D3DSBT_ALL + D3DSBT_ALL + + + + No documentation. + + + bb172608 + D3DSBT_PIXELSTATE + D3DSBT_PIXELSTATE + + + + No documentation. + + + bb172608 + D3DSBT_VERTEXSTATE + D3DSBT_VERTEXSTATE + + + +

    Driver stencil capability flags.

    +
    + + bb172609 + D3DSTENCILCAPS + D3DSTENCILCAPS +
    + + + No documentation. + + + bb172609 + D3DSTENCILCAPS_KEEP + D3DSTENCILCAPS_KEEP + + + + No documentation. + + + bb172609 + D3DSTENCILCAPS_ZERO + D3DSTENCILCAPS_ZERO + + + + No documentation. + + + bb172609 + D3DSTENCILCAPS_REPLACE + D3DSTENCILCAPS_REPLACE + + + + No documentation. + + + bb172609 + D3DSTENCILCAPS_INCRSAT + D3DSTENCILCAPS_INCRSAT + + + + No documentation. + + + bb172609 + D3DSTENCILCAPS_DECRSAT + D3DSTENCILCAPS_DECRSAT + + + + No documentation. + + + bb172609 + D3DSTENCILCAPS_INVERT + D3DSTENCILCAPS_INVERT + + + + No documentation. + + + bb172609 + D3DSTENCILCAPS_INCR + D3DSTENCILCAPS_INCR + + + + No documentation. + + + bb172609 + D3DSTENCILCAPS_DECR + D3DSTENCILCAPS_DECR + + + + No documentation. + + + bb172609 + D3DSTENCILCAPS_TWOSIDED + D3DSTENCILCAPS_TWOSIDED + + + +

    Defines stencil-buffer operations.

    +
    + +

    Stencil-buffer entries are integer values ranging from 0 through 2n - 1, where n is the bit depth of the stencil buffer.

    +
    + + bb172610 + D3DSTENCILOP + D3DSTENCILOP +
    + + +

    Do not update the entry in the stencil buffer. This is the default value.

    +
    + + bb172610 + D3DSTENCILOP_KEEP + D3DSTENCILOP_KEEP +
    + + +

    Set the stencil-buffer entry to 0.

    +
    + + bb172610 + D3DSTENCILOP_ZERO + D3DSTENCILOP_ZERO +
    + + +

    Replace the stencil-buffer entry with a reference value.

    +
    + + bb172610 + D3DSTENCILOP_REPLACE + D3DSTENCILOP_REPLACE +
    + + +

    Increment the stencil-buffer entry, clamping to the maximum value.

    +
    + + bb172610 + D3DSTENCILOP_INCRSAT + D3DSTENCILOP_INCRSAT +
    + + +

    Decrement the stencil-buffer entry, clamping to zero.

    +
    + + bb172610 + D3DSTENCILOP_DECRSAT + D3DSTENCILOP_DECRSAT +
    + + +

    Invert the bits in the stencil-buffer entry.

    +
    + + bb172610 + D3DSTENCILOP_INVERT + D3DSTENCILOP_INVERT +
    + + +

    Increment the stencil-buffer entry, wrapping to zero if the new value exceeds the maximum value.

    +
    + + bb172610 + D3DSTENCILOP_INCR + D3DSTENCILOP_INCR +
    + + +

    Decrement the stencil-buffer entry, wrapping to the maximum value if the new value is less than zero.

    +
    + + bb172610 + D3DSTENCILOP_DECR + D3DSTENCILOP_DECR +
    + + +

    Given a scene that contains many objects that use the same geometry, you can draw many instances of that geometry at different orientations, sizes, colors, and so on with dramatically better performance by reducing the amount of data you need to supply to the renderer.

    This can be accomplished through the use of two techniques: the first for drawing indexed geometry and the second for non-indexed geometry. Both techniques use two vertex buffers: one to supply geometry data and one to supply per-object instance data. The instance data can be a wide variety of information such as a transform, color data, or lighting data - basically anything that you can describe in a vertex declaration. Drawing many instances of geometry with these techniques can dramatically reduce the amount of data sent to the renderer.

    • Drawing
      • Indexed
    • Drawing
      • Non-Indexed
    • Related
    +
    + + bb173349 + D3DSTREAMSOURCE + D3DSTREAMSOURCE +
    + + + No documentation. + + + bb173349 + D3DSTREAMSOURCE_INDEXEDDATA + D3DSTREAMSOURCE_INDEXEDDATA + + + + No documentation. + + + bb173349 + D3DSTREAMSOURCE_INSTANCEDATA + D3DSTREAMSOURCE_INSTANCEDATA + + + +

    Defines swap effects.

    +
    + +

    The state of the back buffer after a call to Present is well-defined by each of these swap effects, and whether the Direct3D device was created with a full-screen swap chain or a windowed swap chain has no effect on this state. In particular, the swap effect operates the same whether windowed or full-screen, and the Direct3D runtime guarantees this by creating extra buffers. As a result, it is recommended that applications use whenever possible to avoid any such penalties. This is because this swap effect will always be the most efficient in terms of memory consumption and performance.

    Applications that use or should not expect full-screen destination alpha to work. This means that the render state will not work as expected because full-screen swap chains with these swap effects do not have an explicit pixel format from the driver's point of view. The driver infers that they should take on the display format, which does not have an alpha channel. To work around this, take the following steps:

    • Use .
    • Check the flag in the Caps3 member of the structure. This flag indicates whether the driver can do alpha blending when or is used.
    • Applications using flip mode swap effect () should call PresentEx after a window resize or region change to ensure that the display content is updated.

    An invisible window cannot receive user-mode events; furthermore, an invisible-fullscreen window will interfere with the presentation of another applications' windowed-mode window. Therefore, each application needs to ensure that a device window is visible when a swapchain is presented in fullscreen mode.

    +
    + + bb172612 + D3DSWAPEFFECT + D3DSWAPEFFECT +
    + + +

    When a swap chain is created with a swap effect of or , the runtime will guarantee that an operation will not affect the content of any of the back buffers. Unfortunately, meeting this guarantee can involve substantial video memory or processing overheads, especially when implementing flip semantics for a windowed swap chain or copy semantics for a full-screen swap chain. An application may use the swap effect to avoid these overheads and to enable the display driver to select the most efficient presentation technique for the swap chain. This is also the only swap effect that may be used when specifying a value other than for the MultiSampleType member of .

    Like a swap chain that uses , a swap chain that uses might include more than one back buffer, any of which may be accessed using or . The swap chain is best envisaged as a queue in which 0 always indexes the back buffer that will be displayed by the next Present operation and from which buffers are discarded when they have been displayed.

    An application that uses this swap effect cannot make any assumptions about the contents of a discarded back buffer and should therefore update an entire back buffer before invoking a Present operation that would display it. Although this is not enforced, the debug version of the runtime will overwrite the contents of discarded back buffers with random data to enable developers to verify that their applications are updating the entire back buffer surfaces correctly.

    +
    + + bb172612 + D3DSWAPEFFECT_DISCARD + D3DSWAPEFFECT_DISCARD +
    + + +

    The swap chain might include multiple back buffers and is best envisaged as a circular queue that includes the front buffer. Within this queue, the back buffers are always numbered sequentially from 0 to (n - 1), where n is the number of back buffers, so that 0 denotes the least recently presented buffer. When Present is invoked, the queue is "rotated" so that the front buffer becomes back buffer (n - 1), while the back buffer 0 becomes the new front buffer.

    +
    + + bb172612 + D3DSWAPEFFECT_FLIP + D3DSWAPEFFECT_FLIP +
    + + +

    This swap effect may be specified only for a swap chain comprising a single back buffer. Whether the swap chain is windowed or full-screen, the runtime will guarantee the semantics implied by a copy-based Present operation, namely that the operation leaves the content of the back buffer unchanged, instead of replacing it with the content of the front buffer as a flip-based Present operation would.

    For a full-screen swap chain, the runtime uses a combination of flip operations and copy operations, supported if necessary by hidden back buffers, to accomplish the Present operation. Accordingly, the presentation is synchronized with the display adapter's vertical retrace and its rate is constrained by the chosen presentation interval. A swap chain specified with the flag is the only exception. (Refer to the description of the PresentationIntervals member of the structure.) In this case, a Present operation copies the back buffer content directly to the front buffer without waiting for the vertical retrace.

    +
    + + bb172612 + D3DSWAPEFFECT_COPY + D3DSWAPEFFECT_COPY +
    + + +

    Use a dedicated area of video memory that can be overlayed on the primary surface. No copy is performed when the overlay is displayed. The overlay operation is performed in hardware, without modifying the data in the primary surface.

    Differences between Direct3D 9 and Direct3D 9Ex:

    is only available in Direct3D9Ex running on Windows 7 (or more current operating system).

    ?

    +
    + + bb172612 + D3DSWAPEFFECT_OVERLAY + D3DSWAPEFFECT_OVERLAY +
    + + +

    Designates when an application is adopting flip mode, during which time an application's frame is passed instead of copied to the Desktop Window Manager(DWM) for composition when the application is presenting in windowed mode. Flip mode allows an application to more efficiently use memory bandwidth as well as enabling an application to take advantage of full-screen-present statistics. Flip mode does not affect full-screen behavior. A sample application that uses and is the D3D9ExFlipEx sample on the MSDN Code Gallery.

    Note??If you create a swap chain with , you can't override the hDeviceWindow member of the structure when you present a new frame for display. That is, you must pass null to the hDestWindowOverride parameter of to instruct the runtime to use the hDeviceWindow member of for the presentation.

    Differences between Direct3D 9 and Direct3D 9Ex:

    is only available in Direct3D9Ex running on Windows 7 (or more current operating system).

    ?

    +
    + + bb172612 + D3DSWAPEFFECT_FLIPEX + D3DSWAPEFFECT_FLIPEX +
    + + +

    Defines settings used for mesh tangent frame computations.

    +
    + + bb205467 + D3DXTANGENT + D3DXTANGENT +
    + + +

    Texture coordinate values in the u direction are between 0 and 1. In this case a texture coordinate set will be chosen that minimizes the perimeter of the triangle. See Texture Wrapping (Direct3D 9).

    +
    + + bb205467 + D3DXTANGENT_WRAP_U + D3DXTANGENT_WRAP_U +
    + + +

    Texture coordinate values in the v direction are between 0 and 1. In this case a texture coordinate set will be chosen that minimizes the perimeter of the triangle. See Texture Wrapping (Direct3D 9).

    +
    + + bb205467 + D3DXTANGENT_WRAP_V + D3DXTANGENT_WRAP_V +
    + + +

    Texture coordinate values in both u and v directions are between 0 and 1. In this case a texture coordinate set will be chosen that minimizes the perimeter of the triangle. See Texture Wrapping (Direct3D 9).

    +
    + + bb205467 + D3DXTANGENT_WRAP_UV + D3DXTANGENT_WRAP_UV +
    + + +

    Do not normalize partial derivatives with respect to texture coordinates. If not normalized, the scale of the partial derivatives is proportional to the scale of the 3D model divided by the scale of the triangle in (u, v) space. This scale value provides a measure of how much the texture is stretched in a given direction. The resulting vector length is a weighted sum of the lengths of the partial derivatives.

    +
    + + bb205467 + D3DXTANGENT_DONT_NORMALIZE_PARTIALS + D3DXTANGENT_DONT_NORMALIZE_PARTIALS +
    + + +

    Do not transform texture coordinates to orthogonal Cartesian coordinates. Mutually exclusive with and .

    +
    + + bb205467 + D3DXTANGENT_DONT_ORTHOGONALIZE + D3DXTANGENT_DONT_ORTHOGONALIZE +
    + + +

    Compute the partial derivative with respect to texture coordinate v independently for each vertex, and then compute the partial derivative with respect to u as the cross product of the partial derivative with respect to v and the normal vector. Mutually exclusive with and .

    +
    + + bb205467 + D3DXTANGENT_ORTHOGONALIZE_FROM_V + D3DXTANGENT_ORTHOGONALIZE_FROM_V +
    + + +

    Compute the partial derivative with respect to texture coordinate u independently for each vertex, and then compute the partial derivative with respect to v as the cross product of the normal vector and the partial derivative with respect to u. Mutually exclusive with and .

    +
    + + bb205467 + D3DXTANGENT_ORTHOGONALIZE_FROM_U + D3DXTANGENT_ORTHOGONALIZE_FROM_U +
    + + +

    Weight the direction of the computed per-vertex normal or partial derivative vector according to the areas of triangles attached to that vertex. Mutually exclusive with .

    +
    + + bb205467 + D3DXTANGENT_WEIGHT_BY_AREA + D3DXTANGENT_WEIGHT_BY_AREA +
    + + +

    Compute a unit-length normal vector for each triangle of the input mesh. Mutually exclusive with .

    +
    + + bb205467 + D3DXTANGENT_WEIGHT_EQUAL + D3DXTANGENT_WEIGHT_EQUAL +
    + + +

    Vertices are ordered in a clockwise direction around each triangle. The computed normal vector direction is therefore inverted 180 degrees from the direction computed using counterclockwise vertex ordering.

    +
    + + bb205467 + D3DXTANGENT_WIND_CW + D3DXTANGENT_WIND_CW +
    + + +

    Compute the per-vertex normal vector for each triangle of the input mesh, and ignore any normal vectors already in the input mesh.

    +
    + + bb205467 + D3DXTANGENT_CALCULATE_NORMALS + D3DXTANGENT_CALCULATE_NORMALS +
    + + +

    The results are stored in the original input mesh, and the output mesh is not used.

    +
    + + bb205467 + D3DXTANGENT_GENERATE_IN_PLACE + D3DXTANGENT_GENERATE_IN_PLACE +
    + + + None. + + + None + None + + + +

    Defines constants that describe the supported texture-addressing modes.

    +
    + + bb172614 + D3DTEXTUREADDRESS + D3DTEXTUREADDRESS +
    + + +

    Tile the texture at every integer junction. For example, for u values between 0 and 3, the texture is repeated three times; no mirroring is performed.

    +
    + + bb172614 + D3DTADDRESS_WRAP + D3DTADDRESS_WRAP +
    + + +

    Similar to , except that the texture is flipped at every integer junction. For u values between 0 and 1, for example, the texture is addressed normally; between 1 and 2, the texture is flipped (mirrored); between 2 and 3, the texture is normal again; and so on.

    +
    + + bb172614 + D3DTADDRESS_MIRROR + D3DTADDRESS_MIRROR +
    + + +

    Texture coordinates outside the range [0.0, 1.0] are set to the texture color at 0.0 or 1.0, respectively.

    +
    + + bb172614 + D3DTADDRESS_CLAMP + D3DTADDRESS_CLAMP +
    + + +

    Texture coordinates outside the range [0.0, 1.0] are set to the border color.

    +
    + + bb172614 + D3DTADDRESS_BORDER + D3DTADDRESS_BORDER +
    + + +

    Similar to and . Takes the absolute value of the texture coordinate (thus, mirroring around 0), and then clamps to the maximum value. The most common usage is for volume textures, where support for the full texture-addressing mode is not necessary, but the data is symmetric around the one axis.

    +
    + + bb172614 + D3DTADDRESS_MIRRORONCE + D3DTADDRESS_MIRRORONCE +
    + + +

    A programmable pixel shader is made up of a set of instructions that operate on pixel data. Registers transfer data in and out of the ALU. Additional control can be applied to modify the instruction, the results, or what data gets written out.

    • ps_3_0 Instructions contains a list of the available instructions.
    • ps_3_0 Registers lists the different types of registers used by the pixel shader ALU.
    • Modifiers Are used to modify the way an instruction works.
    • Destination Register Write Mask determines what components of the destination register get written.
    • Pixel Shader Source Register Modifiers alter the source register data before the instruction runs.
    • Source Register Swizzling gives additional control over which register components are read, copied, or written.
    +
    + + bb219845 + D3DPTADDRESSCAPS + D3DPTADDRESSCAPS +
    + + + No documentation. + + + bb219845 + D3DPTADDRESSCAPS_WRAP + D3DPTADDRESSCAPS_WRAP + + + + No documentation. + + + bb219845 + D3DPTADDRESSCAPS_MIRROR + D3DPTADDRESSCAPS_MIRROR + + + + No documentation. + + + bb219845 + D3DPTADDRESSCAPS_CLAMP + D3DPTADDRESSCAPS_CLAMP + + + + No documentation. + + + bb219845 + D3DPTADDRESSCAPS_BORDER + D3DPTADDRESSCAPS_BORDER + + + + No documentation. + + + bb219845 + D3DPTADDRESSCAPS_INDEPENDENTUV + D3DPTADDRESSCAPS_INDEPENDENTUV + + + + No documentation. + + + bb219845 + D3DPTADDRESSCAPS_MIRRORONCE + D3DPTADDRESSCAPS_MIRRORONCE + + + +

    Texture argument constants are used as values for the following members of the enumerated type:

    Set and retrieve texture arguments by calling the SetTextureStageState and GetTextureStageState methods.

    Argument flags

    You can combine an argument flag with a modifier, but two argument flags cannot be combined.

    +
    + + bb172613 + D3DTA + D3DTA +
    + + + No documentation. + + + bb172613 + D3DTA_SELECTMASK + D3DTA_SELECTMASK + + + + No documentation. + + + bb172613 + D3DTA_DIFFUSE + D3DTA_DIFFUSE + + + + No documentation. + + + bb172613 + D3DTA_CURRENT + D3DTA_CURRENT + + + + No documentation. + + + bb172613 + D3DTA_TEXTURE + D3DTA_TEXTURE + + + + No documentation. + + + bb172613 + D3DTA_TFACTOR + D3DTA_TFACTOR + + + + No documentation. + + + bb172613 + D3DTA_SPECULAR + D3DTA_SPECULAR + + + + No documentation. + + + bb172613 + D3DTA_TEMP + D3DTA_TEMP + + + + No documentation. + + + bb172613 + D3DTA_CONSTANT + D3DTA_CONSTANT + + + + No documentation. + + + bb172613 + D3DTA_COMPLEMENT + D3DTA_COMPLEMENT + + + + No documentation. + + + bb172613 + D3DTA_ALPHAREPLICATE + D3DTA_ALPHAREPLICATE + + + +

    A programmable pixel shader is made up of a set of instructions that operate on pixel data. Registers transfer data in and out of the ALU. Additional control can be applied to modify the instruction, the results, or what data gets written out.

    • ps_3_0 Instructions contains a list of the available instructions.
    • ps_3_0 Registers lists the different types of registers used by the pixel shader ALU.
    • Modifiers Are used to modify the way an instruction works.
    • Destination Register Write Mask determines what components of the destination register get written.
    • Pixel Shader Source Register Modifiers alter the source register data before the instruction runs.
    • Source Register Swizzling gives additional control over which register components are read, copied, or written.
    +
    + + bb219845 + D3DPTEXTURECAPS + D3DPTEXTURECAPS +
    + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_PERSPECTIVE + D3DPTEXTURECAPS_PERSPECTIVE + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_POW2 + D3DPTEXTURECAPS_POW2 + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_ALPHA + D3DPTEXTURECAPS_ALPHA + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_SQUAREONLY + D3DPTEXTURECAPS_SQUAREONLY + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE + D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_ALPHAPALETTE + D3DPTEXTURECAPS_ALPHAPALETTE + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_NONPOW2CONDITIONAL + D3DPTEXTURECAPS_NONPOW2CONDITIONAL + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_PROJECTED + D3DPTEXTURECAPS_PROJECTED + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_CUBEMAP + D3DPTEXTURECAPS_CUBEMAP + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_VOLUMEMAP + D3DPTEXTURECAPS_VOLUMEMAP + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_MIPMAP + D3DPTEXTURECAPS_MIPMAP + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_MIPVOLUMEMAP + D3DPTEXTURECAPS_MIPVOLUMEMAP + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_MIPCUBEMAP + D3DPTEXTURECAPS_MIPCUBEMAP + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_CUBEMAP_POW2 + D3DPTEXTURECAPS_CUBEMAP_POW2 + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_VOLUMEMAP_POW2 + D3DPTEXTURECAPS_VOLUMEMAP_POW2 + + + + No documentation. + + + bb219845 + D3DPTEXTURECAPS_NOPROJECTEDBUMPENV + D3DPTEXTURECAPS_NOPROJECTEDBUMPENV + + + +

    Driver texture coordinate capability flags.

    +
    + + bb172621 + D3DTSS_TCI + D3DTSS_TCI +
    + + + No documentation. + + + bb172621 + D3DTSS_TCI_PASSTHRU + D3DTSS_TCI_PASSTHRU + + + + No documentation. + + + bb172621 + D3DTSS_TCI_CAMERASPACENORMAL + D3DTSS_TCI_CAMERASPACENORMAL + + + + No documentation. + + + bb172621 + D3DTSS_TCI_CAMERASPACEPOSITION + D3DTSS_TCI_CAMERASPACEPOSITION + + + + No documentation. + + + bb172621 + D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR + D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR + + + + No documentation. + + + bb172621 + D3DTSS_TCI_SPHEREMAP + D3DTSS_TCI_SPHEREMAP + + + +

    Defines texture filtering modes for a texture stage.

    +
    + +

    is used by along with to define texture filtering modes for a texture stage.

    To check if a format supports texture filter types other than (which is always supported), call with .

    Set a texture stage's magnification filter by calling with the value as the second parameter and one member of this enumeration as the third parameter.

    Set a texture stage's minification filter by calling with the value as the second parameter and one member of this enumeration as the third parameter.

    Set the texture filter to use between-mipmap levels by calling with the value as the second parameter and one member of this enumeration as the third parameter.

    Not all valid filtering modes for a device will apply to volume maps. In general, and magnification filters will be supported for volume maps. If is set, then the mipmap filter and and minification filters will be supported for volume maps. The device may or may not support the mipmap filter for volume maps. Devices that support anisotropic filtering for 2D maps do not necessarily support anisotropic filtering for volume maps. However, applications that enable anisotropic filtering will receive the best available filtering (probably linear) if anisotropic filtering is not supported.

    +
    + + bb172615 + D3DTEXTUREFILTERTYPE + D3DTEXTUREFILTERTYPE +
    + + +

    When used with , disables mipmapping.

    +
    + + bb172615 + D3DTEXF_NONE + D3DTEXF_NONE +
    + + +

    When used with D3DSAMP_ MAGFILTER or , specifies that point filtering is to be used as the texture magnification or minification filter respectively. When used with , enables mipmapping and specifies that the rasterizer chooses the color from the texel of the nearest mip level.

    +
    + + bb172615 + D3DTEXF_POINT + D3DTEXF_POINT +
    + + +

    When used with D3DSAMP_ MAGFILTER or , specifies that linear filtering is to be used as the texture magnification or minification filter respectively. When used with , enables mipmapping and trilinear filtering; it specifies that the rasterizer interpolates between the two nearest mip levels.

    +
    + + bb172615 + D3DTEXF_LINEAR + D3DTEXF_LINEAR +
    + + +

    When used with D3DSAMP_ MAGFILTER or , specifies that anisotropic texture filtering used as a texture magnification or minification filter respectively. Compensates for distortion caused by the difference in angle between the texture polygon and the plane of the screen. Use with is undefined.

    +
    + + bb172615 + D3DTEXF_ANISOTROPIC + D3DTEXF_ANISOTROPIC +
    + + +

    A 4-sample tent filter used as a texture magnification or minification filter. Use with is undefined.

    +
    + + bb172615 + D3DTEXF_PYRAMIDALQUAD + D3DTEXF_PYRAMIDALQUAD +
    + + +

    A 4-sample Gaussian filter used as a texture magnification or minification filter. Use with is undefined.

    +
    + + bb172615 + D3DTEXF_GAUSSIANQUAD + D3DTEXF_GAUSSIANQUAD +
    + + +

    Convolution filter for monochrome textures. See .

    Differences between Direct3D 9 and Direct3D 9Ex:

    This flag is available in Direct3D 9Ex only.

    ?

    Use with is undefined.

    +
    + + bb172615 + D3DTEXF_CONVOLUTIONMONO + D3DTEXF_CONVOLUTIONMONO +
    + + +

    Defines per-stage texture-blending operations.

    +
    + +

    The members of this type are used when setting color or alpha operations by using the or values with the method.

    In the above formulas, SRGBA is the RGBA color produced by a texture operation, and Arg1, Arg2, and Arg3 represent the complete RGBA color of the texture arguments. Individual components of an argument are shown with subscripts. For example, the alpha component for argument 1 would be shown as Arg1A.

    +
    + + bb172616 + D3DTEXTUREOP + D3DTEXTUREOP +
    + + +

    Disables output from this texture stage and all stages with a higher index. To disable texture mapping, set this as the color operation for the first texture stage (stage 0). Alpha operations cannot be disabled when color operations are enabled. Setting the alpha operation to when color blending is enabled causes undefined behavior.

    +
    + + bb172616 + D3DTOP_DISABLE + D3DTOP_DISABLE +
    + + +

    Use this texture stage's first color or alpha argument, unmodified, as the output. This operation affects the color argument when used with the texture-stage state, and the alpha argument when used with .

    +
    + + bb172616 + D3DTOP_SELECTARG1 + D3DTOP_SELECTARG1 +
    + + +

    Use this texture stage's second color or alpha argument, unmodified, as the output. This operation affects the color argument when used with the texture stage state, and the alpha argument when used with .

    +
    + + bb172616 + D3DTOP_SELECTARG2 + D3DTOP_SELECTARG2 +
    + + +

    Multiply the components of the arguments.

    +
    + + bb172616 + D3DTOP_MODULATE + D3DTOP_MODULATE +
    + + +

    Multiply the components of the arguments, and shift the products to the left 1 bit (effectively multiplying them by 2) for brightening.

    +
    + + bb172616 + D3DTOP_MODULATE2X + D3DTOP_MODULATE2X +
    + + +

    Multiply the components of the arguments, and shift the products to the left 2 bits (effectively multiplying them by 4) for brightening.

    +
    + + bb172616 + D3DTOP_MODULATE4X + D3DTOP_MODULATE4X +
    + + +

    Add the components of the arguments.

    +
    + + bb172616 + D3DTOP_ADD + D3DTOP_ADD +
    + + +

    Add the components of the arguments with a - 0.5 bias, making the effective range of values from - 0.5 through 0.5.

    +
    + + bb172616 + D3DTOP_ADDSIGNED + D3DTOP_ADDSIGNED +
    + + +

    Add the components of the arguments with a - 0.5 bias, and shift the products to the left 1 bit.

    +
    + + bb172616 + D3DTOP_ADDSIGNED2X + D3DTOP_ADDSIGNED2X +
    + + +

    Subtract the components of the second argument from those of the first argument.

    +
    + + bb172616 + D3DTOP_SUBTRACT + D3DTOP_SUBTRACT +
    + + +

    Add the first and second arguments; then subtract their product from the sum.

    +
    + + bb172616 + D3DTOP_ADDSMOOTH + D3DTOP_ADDSMOOTH +
    + + +

    Linearly blend this texture stage, using the interpolated alpha from each vertex.

    +
    + + bb172616 + D3DTOP_BLENDDIFFUSEALPHA + D3DTOP_BLENDDIFFUSEALPHA +
    + + +

    Linearly blend this texture stage, using the alpha from this stage's texture.

    +
    + + bb172616 + D3DTOP_BLENDTEXTUREALPHA + D3DTOP_BLENDTEXTUREALPHA +
    + + +

    Linearly blend this texture stage, using a scalar alpha set with the render state.

    +
    + + bb172616 + D3DTOP_BLENDFACTORALPHA + D3DTOP_BLENDFACTORALPHA +
    + + +

    Linearly blend a texture stage that uses a premultiplied alpha.

    +
    + + bb172616 + D3DTOP_BLENDTEXTUREALPHAPM + D3DTOP_BLENDTEXTUREALPHAPM +
    + + +

    Linearly blend this texture stage, using the alpha taken from the previous texture stage.

    +
    + + bb172616 + D3DTOP_BLENDCURRENTALPHA + D3DTOP_BLENDCURRENTALPHA +
    + + +

    is set in stage n. The output of stage n is arg1. Additionally, if there is a texture in stage n + 1, any in stage n + 1 is premultiplied by texture in stage n + 1.

    +
    + + bb172616 + D3DTOP_PREMODULATE + D3DTOP_PREMODULATE +
    + + +

    Modulate the color of the second argument, using the alpha of the first argument; then add the result to argument one. This operation is supported only for color operations ().

    +
    + + bb172616 + D3DTOP_MODULATEALPHA_ADDCOLOR + D3DTOP_MODULATEALPHA_ADDCOLOR +
    + + +

    Modulate the arguments; then add the alpha of the first argument. This operation is supported only for color operations ().

    +
    + + bb172616 + D3DTOP_MODULATECOLOR_ADDALPHA + D3DTOP_MODULATECOLOR_ADDALPHA +
    + + +

    Similar to , but use the inverse of the alpha of the first argument. This operation is supported only for color operations ().

    +
    + + bb172616 + D3DTOP_MODULATEINVALPHA_ADDCOLOR + D3DTOP_MODULATEINVALPHA_ADDCOLOR +
    + + +

    Similar to , but use the inverse of the color of the first argument. This operation is supported only for color operations ().

    +
    + + bb172616 + D3DTOP_MODULATEINVCOLOR_ADDALPHA + D3DTOP_MODULATEINVCOLOR_ADDALPHA +
    + + +

    Perform per-pixel bump mapping, using the environment map in the next texture stage, without luminance. This operation is supported only for color operations ().

    +
    + + bb172616 + D3DTOP_BUMPENVMAP + D3DTOP_BUMPENVMAP +
    + + +

    Perform per-pixel bump mapping, using the environment map in the next texture stage, with luminance. This operation is supported only for color operations ().

    +
    + + bb172616 + D3DTOP_BUMPENVMAPLUMINANCE + D3DTOP_BUMPENVMAPLUMINANCE +
    + + +

    Modulate the components of each argument as signed components, add their products; then replicate the sum to all color channels, including alpha. This operation is supported for color and alpha operations.

    In DirectX 6 and DirectX 7, multitexture operations the above inputs are all shifted down by half (y = x - 0.5) before use to simulate signed data, and the scalar result is automatically clamped to positive values and replicated to all three output channels. Also, note that as a color operation this does not updated the alpha it just updates the RGB components.

    However, in DirectX 8.1 shaders you can specify that the output be routed to the .rgb or the .a components or both (the default). You can also specify a separate scalar operation on the alpha channel.

    +
    + + bb172616 + D3DTOP_DOTPRODUCT3 + D3DTOP_DOTPRODUCT3 +
    + + +

    Performs a multiply-accumulate operation. It takes the last two arguments, multiplies them together, and adds them to the remaining input/source argument, and places that into the result.

    SRGBA = Arg1 + Arg2 * Arg3

    +
    + + bb172616 + D3DTOP_MULTIPLYADD + D3DTOP_MULTIPLYADD +
    + + +

    Linearly interpolates between the second and third source arguments by a proportion specified in the first source argument.

    SRGBA = (Arg1) * Arg2 + (1- Arg1) * Arg3.

    +
    + + bb172616 + D3DTOP_LERP + D3DTOP_LERP +
    + + +

    Represents the capabilities of the hardware exposed through the Direct3D object.

    +
    + +

    The MaxTextureBlendStages and MaxSimultaneousTextures members might seem similar, but they contain different information. The MaxTextureBlendStages member contains the total number of texture-blending stages supported by the current device, and the MaxSimultaneousTextures member describes how many of those stages can have textures bound to them by using the SetTexture method.

    When the driver fills this structure, it can set values for execute-buffer capabilities, even when the interface being used to retrieve the capabilities (such as ) does not support execute buffers.

    In general, performance problems may occur if you use a texture and then modify it during a scene. Ensure that no texture used in the current BeginScene and EndScene block is evicted unless absolutely necessary. In the case of extremely high texture usage within a scene, the results are undefined. This occurs when you modify a texture that you have used in the scene and there is no spare texture memory available. For such systems, the contents of the z-buffer become invalid at EndScene. Applications should not call UpdateSurface to or from the back buffer on this type of hardware inside a BeginScene/EndScene pair. In addition, applications should not try to access the z-buffer if the capability flag is set. Finally, applications should not lock the back buffer or the z-buffer inside a BeginScene/EndScene pair.

    The following flags concerning mipmapped textures are not supported in Direct3D 9.

    • D3DPTFILTERCAPS_LINEAR
    • D3DPTFILTERCAPS_LINEARMIPLINEAR
    • D3DPTFILTERCAPS_LINEARMIPNEAREST
    • D3DPTFILTERCAPS_MIPNEAREST
    • D3DPTFILTERCAPS_NEAREST
    +
    + + bb172513 + D3DTEXOPCAPS + D3DTEXOPCAPS +
    + + +

    Member of the enumerated type, which identifies what type of resources are used for processing vertices.

    +
    + + bb172513 + D3DTEXOPCAPS_DISABLE + D3DTEXOPCAPS_DISABLE +
    + + +

    Adapter on which this Direct3D device was created. This ordinal is valid only to pass to methods of the interface that created this Direct3D device. The interface can always be retrieved by calling GetDirect3D.

    +
    + + bb172513 + D3DTEXOPCAPS_SELECTARG1 + D3DTEXOPCAPS_SELECTARG1 +
    + + +

    The following driver-specific capability.

    ValueMeaning

    Display hardware is capable of returning the current scan line.

    The display driver supports an overlay DDI that allows for verification of overlay capabilities. For more information about the overlay DDI, see Overlay DDI.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_SELECTARG2 + D3DTEXOPCAPS_SELECTARG2 +
    + + +

    Driver-specific capabilities identified in .

    +
    + + bb172513 + D3DTEXOPCAPS_MODULATE + D3DTEXOPCAPS_MODULATE +
    + + +

    Driver-specific capabilities identified in .

    +
    + + bb172513 + D3DTEXOPCAPS_MODULATE2X + D3DTEXOPCAPS_MODULATE2X +
    + + +

    Bit mask of values representing what presentation swap intervals are available.

    ValueMeaning

    The driver supports an immediate presentation swap interval.

    The driver supports a presentation swap interval of every screen refresh.

    The driver supports a presentation swap interval of every second screen refresh.

    The driver supports a presentation swap interval of every third screen refresh.

    The driver supports a presentation swap interval of every fourth screen refresh.

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_MODULATE4X + D3DTEXOPCAPS_MODULATE4X +
    + + +

    Bit mask indicating what hardware support is available for cursors. Direct3D 9 does not define alpha-blending cursor capabilities.

    ValueMeaning

    A full-color cursor is supported in hardware. Specifically, this flag indicates that the driver supports at least a hardware color cursor in high-resolution modes (with scan lines greater than or equal to 400).

    A full-color cursor is supported in hardware. Specifically, this flag indicates that the driver supports a hardware color cursor in both high-resolution and low-resolution modes (with scan lines less than 400).

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_ADD + D3DTEXOPCAPS_ADD +
    + + +

    Flags identifying the capabilities of the device.

    ValueMeaning

    Device supports blits from system-memory textures to nonlocal video-memory textures.

    Device can queue rendering commands after a page flip. Applications do not change their behavior if this flag is set; this capability means that the device is relatively fast.

    Device can support at least a DirectX 5-compliant driver.

    Device can support at least a DirectX 7-compliant driver.

    Device exports an -aware hal.

    Device can use execute buffers from system memory.

    Device can use execute buffers from video memory.

    Device has hardware acceleration for scene rasterization.

    Device can support transformation and lighting in hardware.

    Device supports N patches.

    Device can support rasterization, transform, lighting, and shading in hardware.

    Device supports quintic B?zier curves and B-splines.

    Device supports rectangular and triangular patches.

    When this device capability is set, the hardware architecture does not require caching of any information, and uncached patches (handle zero) will be drawn as efficiently as cached ones. Note that setting does not mean that a patch with handle zero can be drawn. A handle-zero patch can always be drawn whether this cap is set or not.

    Device is texturing from separate memory pools.

    Device can retrieve textures from non-local video memory.

    Device can retrieve textures from system memory.

    Device can retrieve textures from device memory.

    Device can use buffers from system memory for transformed and lit vertices.

    Device can use buffers from video memory for transformed and lit vertices.

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_ADDSIGNED + D3DTEXOPCAPS_ADDSIGNED +
    + + +

    Miscellaneous driver primitive capabilities. See .

    +
    + + bb172513 + D3DTEXOPCAPS_ADDSIGNED2X + D3DTEXOPCAPS_ADDSIGNED2X +
    + + +

    Information on raster-drawing capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Device supports anisotropic filtering.

    Device iterates colors perspective correctly.

    Device can dither to improve color resolution.

    Device supports legacy depth bias. For true depth bias, see .

    Device supports range-based fog. In range-based fog, the distance of an object from the viewer is used to compute fog effects, not the depth of the object (that is, the z-coordinate) in the scene.

    Device calculates the fog value by referring to a lookup table containing fog values that are indexed to the depth of a given pixel.

    Device calculates the fog value during the lighting operation and interpolates the fog value during rasterization.

    Device supports level-of-detail bias adjustments. These bias adjustments enable an application to make a mipmap appear crisper or less sharp than it normally would. For more information about level-of-detail bias in mipmaps, see .

    Device supports toggling multisampling on and off between and (using ).

    Device supports scissor test. See Scissor Test (Direct3D 9).

    Device performs true slope-scale based depth bias. This is in contrast to the legacy style depth bias.

    Device supports depth buffering using w.

    Device supports w-based fog. W-based fog is used when a perspective projection matrix is specified, but affine projections still use z-based fog. The system considers a projection matrix that contains a nonzero value in the [3][4] element to be a perspective projection matrix.

    Device can perform hidden-surface removal (HSR) without requiring the application to sort polygons and without requiring the allocation of a depth-buffer. This leaves more video memory for textures. The method used to perform HSR is hardware-dependent and is transparent to the application.

    Z-bufferless HSR is performed if no depth-buffer surface is associated with the rendering-target surface and the depth-buffer comparison test is enabled (that is, when the state value associated with the enumeration constant is set to TRUE).

    Device supports z-based fog.

    Device can perform z-test operations. This effectively renders a primitive and indicates whether any z pixels have been rendered.

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_SUBTRACT + D3DTEXOPCAPS_SUBTRACT +
    + + +

    Z-buffer comparison capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Always pass the z-test.

    Pass the z-test if the new z equals the current z.

    Pass the z-test if the new z is greater than the current z.

    Pass the z-test if the new z is greater than or equal to the current z.

    Pass the z-test if the new z is less than the current z.

    Pass the z-test if the new z is less than or equal to the current z.

    Always fail the z-test.

    Pass the z-test if the new z does not equal the current z.

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_ADDSMOOTH + D3DTEXOPCAPS_ADDSMOOTH +
    + + +

    Source-blending capabilities. This member can be one or more of the following flags. (The RGBA values of the source and destination are indicated by the subscripts s and d.)

    ValueMeaning

    The driver supports both and . See .

    Source blend factor is (1 - As, 1 - As, 1 - As, 1 - As) and destination blend factor is (As, As, As, As); the destination blend selection is overridden.

    The driver supports the blend mode. (This blend mode is obsolete. For more information, see .)

    Blend factor is (Ad, Ad, Ad, Ad).

    Blend factor is (Rd, Gd, Bd, Ad).

    Blend factor is (1 - Ad, 1 - Ad, 1 - Ad, 1 - Ad).

    Blend factor is (1 - Rd, 1 - Gd, 1 - Bd, 1 - Ad).

    Blend factor is (1 - As, 1 - As, 1 - As, 1 - As).

    Blend factor is (1 - Rs, 1 - Gs, 1 - Bs, 1 - As).

    Blend factor is (1 - PSOutColor[1]r, 1 - PSOutColor[1]g, 1 - PSOutColor[1]b, not used)). See Render Target Blending.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    Blend factor is (1, 1, 1, 1).

    Blend factor is (As, As, As, As).

    Blend factor is (f, f, f, 1); f = min(As, 1 - Ad).

    Blend factor is (Rs, Gs, Bs, As).

    Blend factor is (PSOutColor[1]r, PSOutColor[1]g, PSOutColor[1]b, not used). See Render Target Blending.

    Differences between Direct3D 9 and Direct3D 9Ex: This flag is available in Direct3D 9Ex only.

    ?

    Blend factor is (0, 0, 0, 0).

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_BLENDDIFFUSEALPHA + D3DTEXOPCAPS_BLENDDIFFUSEALPHA +
    + + +

    Destination-blending capabilities. This member can be the same capabilities that are defined for the SrcBlendCaps member.

    +
    + + bb172513 + D3DTEXOPCAPS_BLENDTEXTUREALPHA + D3DTEXOPCAPS_BLENDTEXTUREALPHA +
    + + +

    Alpha-test comparison capabilities. This member can include the same capability flags defined for the ZCmpCaps member. If this member contains only the capability or only the capability, the driver does not support alpha tests. Otherwise, the flags identify the individual comparisons that are supported for alpha testing.

    +
    + + bb172513 + D3DTEXOPCAPS_BLENDFACTORALPHA + D3DTEXOPCAPS_BLENDFACTORALPHA +
    + + +

    Shading operations capabilities. It is assumed, in general, that if a device supports a given command at all, it supports the mode (as specified in the enumerated type). This flag specifies whether the driver can also support Gouraud shading and whether alpha color components are supported. When alpha components are not supported, the alpha value of colors generated is implicitly 255. This is the maximum possible alpha (that is, the alpha component is at full intensity).

    The color, specular highlights, fog, and alpha interpolants of a triangle each have capability flags that an application can use to find out how they are implemented by the device driver.

    This member can be one or more of the following flags.

    ValueMeaning

    Device can support an alpha component for Gouraud-blended transparency (the state for the enumerated type). In this mode, the alpha color component of a primitive is provided at vertices and interpolated across a face along with the other color components.

    Device can support colored Gouraud shading. In this mode, the per-vertex color components (red, green, and blue) are interpolated across a triangle face.

    Device can support fog in the Gouraud shading mode.

    Device supports Gouraud shading of specular highlights.

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_BLENDTEXTUREALPHAPM + D3DTEXOPCAPS_BLENDTEXTUREALPHAPM +
    + + +

    Miscellaneous texture-mapping capabilities. This member can be one or more of the following flags.

    ValueMeaning

    Alpha in texture pixels is supported.

    Device can draw alpha from texture palettes.

    Supports cube textures.

    Device requires that cube texture maps have dimensions specified as powers of two.

    Device supports mipmapped cube textures.

    Device supports mipmapped textures.

    Device supports mipmapped volume textures.

    is also set, conditionally supports the use of 2D textures with dimensions that are not powers of two. A device that exposes this capability can use such a texture if all of the following requirements are met.

    • The texture addressing mode for the texture stage is set to .
    • Texture wrapping for the texture stage is disabled (D3DRS_WRAP n set to 0).
    • Mipmapping is not in use (use magnification filter only).
    • Texture formats must not be through .

    If this flag is not set, and is also not set, then unconditional support is provided for 2D textures with dimensions that are not powers of two.

    A texture that is not a power of two cannot be set at a stage that will be read based on a shader computation (such as the bem - ps and texm3x3 - ps instructions in pixel shaders versions 1_0 to 1_3). For example, these textures can be used to store bumps that will be fed into texture reads, but not the environment maps that are used in texbem - ps, texbeml - ps, and texm3x3spec - ps. This means that a texture with dimensions that are not powers of two cannot be addressed or sampled using texture coordinates computed within the shader. This type of operation is known as a dependent read and cannot be performed on these types of textures.

    Device does not support a projected bump-environment loopkup operation in programmable and fixed function shaders.

    Perspective correction texturing is supported.

    If is not set, all textures must have widths and heights specified as powers of two. This requirement does not apply to either cube textures or volume textures.

    If is also set, conditionally supports the use of 2D textures with dimensions that are not powers of two. See description.

    If this flag is not set, and is also not set, then unconditional support is provided for 2D textures with dimensions that are not powers of two.

    Supports the texture transformation flag. When applied, the device divides transformed texture coordinates by the last texture coordinate. If this capability is present, then the projective divide occurs per pixel. If this capability is not present, but the projective divide needs to occur anyway, then it is performed on a per-vertex basis by the Direct3D runtime.

    All textures must be square.

    Texture indices are not scaled by the texture size prior to interpolation.

    Device supports volume textures.

    Device requires that volume texture maps have dimensions specified as powers of two.

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_BLENDCURRENTALPHA + D3DTEXOPCAPS_BLENDCURRENTALPHA +
    + + +

    Texture-filtering capabilities for a texture. Per-stage filtering capabilities reflect which filtering modes are supported for texture stages when performing multiple-texture blending. This member can be any combination of the per-stage texture-filtering flags defined in .

    +
    + + bb172513 + D3DTEXOPCAPS_PREMODULATE + D3DTEXOPCAPS_PREMODULATE +
    + + +

    Texture-filtering capabilities for a cube texture. Per-stage filtering capabilities reflect which filtering modes are supported for texture stages when performing multiple-texture blending. This member can be any combination of the per-stage texture-filtering flags defined in .

    +
    + + bb172513 + D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR + D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR +
    + + +

    Texture-filtering capabilities for a volume texture. Per-stage filtering capabilities reflect which filtering modes are supported for texture stages when performing multiple-texture blending. This member can be any combination of the per-stage texture-filtering flags defined in .

    +
    + + bb172513 + D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA + D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA +
    + + +

    Texture-addressing capabilities for texture objects. This member can be one or more of the following flags.

    ValueMeaning

    Device supports setting coordinates outside the range [0.0, 1.0] to the border color, as specified by the texture-stage state.

    Device can clamp textures to addresses.

    Device can separate the texture-addressing modes of the u and v coordinates of the texture. This ability corresponds to the and render-state values.

    Device can mirror textures to addresses.

    Device can take the absolute value of the texture coordinate (thus, mirroring around 0) and then clamp to the maximum value.

    Device can wrap textures to addresses.

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR + D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR +
    + + +

    Texture-addressing capabilities for a volume texture. This member can be one or more of the flags defined for the TextureAddressCaps member.

    +
    + + bb172513 + D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA + D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA +
    + + +

    Defines the capabilities for line-drawing primitives.

    ValueMeaning

    Supports alpha-test comparisons.

    Antialiased lines are supported.

    Supports source-blending.

    Supports fog.

    Supports texture-mapping.

    Supports z-buffer comparisons.

    ?

    +
    + + bb172513 + D3DTEXOPCAPS_BUMPENVMAP + D3DTEXOPCAPS_BUMPENVMAP +
    + + +

    Maximum texture width for this device.

    +
    + + bb172513 + D3DTEXOPCAPS_BUMPENVMAPLUMINANCE + D3DTEXOPCAPS_BUMPENVMAPLUMINANCE +
    + + +

    Maximum texture height for this device.

    +
    + + bb172513 + D3DTEXOPCAPS_DOTPRODUCT3 + D3DTEXOPCAPS_DOTPRODUCT3 +
    + + +

    Maximum value for any of the three dimensions (width, height, and depth) of a volume texture.

    +
    + + bb172513 + D3DTEXOPCAPS_MULTIPLYADD + D3DTEXOPCAPS_MULTIPLYADD +
    + + +

    This number represents the maximum range of the integer bits of the post-normalized texture coordinates. A texture coordinate is stored as a 32-bit signed integer using 27 bits to store the integer part and 5 bits for the floating point fraction. The maximum integer index, 227, is used to determine the maximum texture coordinate, depending on how the hardware does texture-coordinate scaling.

    Some hardware reports the cap . For this case, the device defers scaling texture coordinates by the texture size until after interpolation and application of the texture address mode, so the number of times a texture can be wrapped is given by the integer value in MaxTextureRepeat.

    Less desirably, on some hardware is not set and the device scales the texture coordinates by the texture size (using the highest level of detail) prior to interpolation. This limits the number of times a texture can be wrapped to MaxTextureRepeat / texture size.

    For example, assume that MaxTextureRepeat is equal to 32k and the size of the texture is 4k. If the hardware sets , then the number of times a texture can be wrapped is equal to MaxTextureRepeat, which is 32k in this example. Otherwise, the number of times a texture can be wrapped is equal to MaxTextureRepeat divided by texture size, which is 32k/4k in this example.

    +
    + + bb172513 + D3DTEXOPCAPS_LERP + D3DTEXOPCAPS_LERP +
    + + +

    Texture stage states define multi-blender texture operations. Some sampler states set up vertex processing, and some set up pixel processing. Texture stage states can be saved and restored using stateblocks (see State Blocks Save and Restore State (Direct3D 9)).

    +
    + +

    Members of this enumerated type are used with the and methods to retrieve and set texture state values.

    The valid range of values for the , , , and bump-mapping matrix coefficients is greater than or equal to -8.0 and less than 8.0. This range, expressed in mathematical notation is (-8.0,8.0).

    +
    + + bb172617 + D3DTEXTURESTAGESTATETYPE + D3DTEXTURESTAGESTATETYPE +
    + + + No documentation. + + + bb172617 + D3DTSS_COLOROP + D3DTSS_COLOROP + + + + No documentation. + + + bb172617 + D3DTSS_COLORARG1 + D3DTSS_COLORARG1 + + + + No documentation. + + + bb172617 + D3DTSS_COLORARG2 + D3DTSS_COLORARG2 + + + + No documentation. + + + bb172617 + D3DTSS_ALPHAOP + D3DTSS_ALPHAOP + + + + No documentation. + + + bb172617 + D3DTSS_ALPHAARG1 + D3DTSS_ALPHAARG1 + + + + No documentation. + + + bb172617 + D3DTSS_ALPHAARG2 + D3DTSS_ALPHAARG2 + + + + No documentation. + + + bb172617 + D3DTSS_BUMPENVMAT00 + D3DTSS_BUMPENVMAT00 + + + + No documentation. + + + bb172617 + D3DTSS_BUMPENVMAT01 + D3DTSS_BUMPENVMAT01 + + + + No documentation. + + + bb172617 + D3DTSS_BUMPENVMAT10 + D3DTSS_BUMPENVMAT10 + + + + No documentation. + + + bb172617 + D3DTSS_BUMPENVMAT11 + D3DTSS_BUMPENVMAT11 + + + + No documentation. + + + bb172617 + D3DTSS_TEXCOORDINDEX + D3DTSS_TEXCOORDINDEX + + + + No documentation. + + + bb172617 + D3DTSS_BUMPENVLSCALE + D3DTSS_BUMPENVLSCALE + + + + No documentation. + + + bb172617 + D3DTSS_BUMPENVLOFFSET + D3DTSS_BUMPENVLOFFSET + + + + No documentation. + + + bb172617 + D3DTSS_TEXTURETRANSFORMFLAGS + D3DTSS_TEXTURETRANSFORMFLAGS + + + + No documentation. + + + bb172617 + D3DTSS_COLORARG0 + D3DTSS_COLORARG0 + + + + No documentation. + + + bb172617 + D3DTSS_ALPHAARG0 + D3DTSS_ALPHAARG0 + + + + No documentation. + + + bb172617 + D3DTSS_RESULTARG + D3DTSS_RESULTARG + + + + No documentation. + + + bb172617 + D3DTSS_CONSTANT + D3DTSS_CONSTANT + + + +

    Defines texture coordinate transformation values.

    +
    + +

    Texture coordinates can be transformed using a 4 x 4 matrix before the results are passed to the rasterizer. The texture coordinate transforms are set by calling , and by passing in the texture stage state and one of the values from . For more information about texture transforms, see Texture Coordinate Transformations (Direct3D 9).

    +
    + + bb172618 + D3DTEXTURETRANSFORMFLAGS + D3DTEXTURETRANSFORMFLAGS +
    + + +

    Texture coordinates are passed directly to the rasterizer.

    +
    + + bb172618 + D3DTTFF_DISABLE + D3DTTFF_DISABLE +
    + + +

    The rasterizer should expect 1D texture coordinates. This value is used by fixed function vertex processing; it should be set to 0 when using a programmable vertex shader.

    +
    + + bb172618 + D3DTTFF_COUNT1 + D3DTTFF_COUNT1 +
    + + +

    The rasterizer should expect 2D texture coordinates. This value is used by fixed function vertex processing; it should be set to 0 when using a programmable vertex shader.

    +
    + + bb172618 + D3DTTFF_COUNT2 + D3DTTFF_COUNT2 +
    + + +

    The rasterizer should expect 3D texture coordinates. This value is used by fixed function vertex processing; it should be set to 0 when using a programmable vertex shader.

    +
    + + bb172618 + D3DTTFF_COUNT3 + D3DTTFF_COUNT3 +
    + + +

    The rasterizer should expect 4D texture coordinates. This value is used by fixed function vertex processing; it should be set to 0 when using a programmable vertex shader.

    +
    + + bb172618 + D3DTTFF_COUNT4 + D3DTTFF_COUNT4 +
    + + +

    This flag is honored by the fixed function pixel pipeline, as well as the programmable pixel pipeline in versions ps_1_1 to ps_1_3. When texture projection is enabled for a texture stage, all four floating point values must be written to the corresponding texture register. Each texture coordinate is divided by the last element before being passed to the rasterizer. For example, if this flag is specified with the flag, the first and second texture coordinates are divided by the third coordinate before being passed to the rasterizer.

    +
    + + bb172618 + D3DTTFF_PROJECTED + D3DTTFF_PROJECTED +
    + + +

    In short, texture wrapping changes the basic way that Direct3D rasterizes textured polygons using the texture coordinates specified for each vertex. While rasterizing a polygon, the system interpolates between the texture coordinates at each of the polygon's vertices to determine the texels that should be used for every pixel of the polygon. Normally, the system treats the texture as a 2D plane, interpolating new texels by taking the shortest route from point A within a texture to point B. If point A represents the u, v position (0.8, 0.1), and point B is at (0.1,0.1), the line of interpolation looks like the following diagram.

    Note that the shortest distance between A and B in this illustration runs roughly through the middle of the texture. Enabling u-texture or v-texture coordinate wrapping changes how Direct3D perceives the shortest route between texture coordinates in the u-direction and v-direction. By definition, texture wrapping causes the rasterizer to take the shortest route between texture coordinate sets, assuming that 0.0 and 1.0 are coincident. The last bit is the tricky part: You can imagine that enabling texture wrapping in one direction causes the system to treat a texture as though it were wrapped around a cylinder. For example, consider the following diagram.

    The preceding illustration shows how wrapping in the u - direction affects how the system interpolates texture coordinates. Using the same points as in the example for normal, or nonwrapped, textures, you can see that the shortest route between points A and B is no longer across the middle of the texture; it's now across the border where 0.0 and 1.0 exist together. Wrapping in the v-direction is similar, except that it wraps the texture around a cylinder that is lying on its side. Wrapping in both the u-direction and v-direction is more complex. In this situation, you can envision the texture as a torus, or doughnut.

    The most common practical application for texture wrapping is to perform environment mapping. Usually, an object textured with an environment map appears very reflective, showing a mirrored image of the object's surroundings in the scene. For the sake of this discussion, picture a room with four walls, each one painted with a letter R, G, B, Y and the corresponding colors: red, green, blue, and yellow. The environment map for such a simple room might look like the following illustration.

    Imagine that the room's ceiling is held up by a perfectly reflective, four-sided, pillar. Mapping the environment map texture to the pillar is simple; making the pillar look as though it is reflecting the letters and colors is not as easy. The following diagram shows a wire frame of the pillar with the applicable texture coordinates listed near the top vertices. The seam where wrapping will cross the edges of the texture is shown with a dotted line.

    With wrapping enabled in the u-direction, the textured pillar shows the colors and symbols from the environment map appropriately and, at the seam in the front of the texture, the rasterizer properly chooses the shortest route between the texture coordinates, assuming that u-coordinates 0.0 and 1.0 share the same location. The textured pillar looks like the following illustration.

    If texture wrapping isn't enabled, the rasterizer does not interpolate in the direction needed to generate a believable, reflected image. Rather, the area at the front of the pillar contains a horizontally compressed version of the texels between u-coordinates 0.175 and 0.875, as they pass through the center of the texture. The wrap effect is ruined.

    +
    + + bb206256 + D3DWRAPCOORD + D3DWRAPCOORD +
    + + + No documentation. + + + bb206256 + D3DWRAPCOORD_0 + D3DWRAPCOORD_0 + + + + No documentation. + + + bb206256 + D3DWRAPCOORD_1 + D3DWRAPCOORD_1 + + + + No documentation. + + + bb206256 + D3DWRAPCOORD_2 + D3DWRAPCOORD_2 + + + + No documentation. + + + bb206256 + D3DWRAPCOORD_3 + D3DWRAPCOORD_3 + + + + None. + + + None + None + + + +

    Defines the priority type to which an animation track is assigned.

    +
    + +

    Tracks with the same priority are blended together, and the two resulting values are then blended using the priority blend factor.

    +
    + + bb205401 + D3DXPRIORITY_TYPE + D3DXPRIORITY_TYPE +
    + + +

    Track should be blended with all the low-priority tracks before the low-priority blend is mixed with the high-priority blend.

    +
    + + bb205401 + D3DXPRIORITY_LOW + D3DXPRIORITY_LOW +
    + + +

    Track should be blended with all the high-priority tracks before the high-priority blend is mixed with the low-priority blend.

    +
    + + bb205401 + D3DXPRIORITY_HIGH + D3DXPRIORITY_HIGH +
    + + + No documentation. + + + D3DTRANSFORMSTATETYPE2 + D3DTRANSFORMSTATETYPE2 + + + + No documentation. + + + D3DTS2_VIEW + D3DTS2_VIEW + + + + No documentation. + + + D3DTS2_PROJECTION + D3DTS2_PROJECTION + + + + No documentation. + + + D3DTS2_WORLD + D3DTS2_WORLD + + + + No documentation. + + + D3DTS2_WORLD1 + D3DTS2_WORLD1 + + + + No documentation. + + + D3DTS2_WORLD2 + D3DTS2_WORLD2 + + + + No documentation. + + + D3DTS2_WORLD3 + D3DTS2_WORLD3 + + + + No documentation. + + + D3DTS2_TEXTURE0 + D3DTS2_TEXTURE0 + + + + No documentation. + + + D3DTS2_TEXTURE1 + D3DTS2_TEXTURE1 + + + + No documentation. + + + D3DTS2_TEXTURE2 + D3DTS2_TEXTURE2 + + + + No documentation. + + + D3DTS2_TEXTURE3 + D3DTS2_TEXTURE3 + + + + No documentation. + + + D3DTS2_TEXTURE4 + D3DTS2_TEXTURE4 + + + + No documentation. + + + D3DTS2_TEXTURE5 + D3DTS2_TEXTURE5 + + + + No documentation. + + + D3DTS2_TEXTURE6 + D3DTS2_TEXTURE6 + + + + No documentation. + + + D3DTS2_TEXTURE7 + D3DTS2_TEXTURE7 + + + +

    Defines the transition style between values of a mesh animation.

    +
    + +

    The calculation for the ramp from ease in to ease out is calculated as follows:

    Q(t) = 2(x - y)t3 + 3(y - x)t2 + x

    where the ramp is a function Q(t) with the following properties:

    • Q(t) is a cubic spline.
    • Q(t) interpolates between x and y as t ranges from 0 to 1.
    • Q(t) is horizontal when t = 0 and t = 1.

    Mathematically, this translates into:

    Q(t) = At3 + Bt2 + Ct + D (and therefore, Q'(t) = 3At2 + 2Bt + C)
    2a) Q(0) = x
    2b) Q(1) = y
    3a) Q'(0) = 0
    3b) Q'(1) = 0

    Solving for A, B, C, D:

    D = x (from 2a)
    C = 0 (from 3a)
    3A + 2B = 0 (from 3b)
    A + B = y - x (from 2b and D = x)

    Therefore:

    A = 2(x - y), B = 3(y - x), C = 0, D = x
    +
    + + bb205475 + D3DXTRANSITION_TYPE + D3DXTRANSITION_TYPE +
    + + +

    Linear transition between values.

    +
    + + bb205475 + D3DXTRANSITION_LINEAR + D3DXTRANSITION_LINEAR +
    + + +

    Ease-in, ease-out spline transition between values.

    +
    + + bb205475 + D3DXTRANSITION_EASEINEASEOUT + D3DXTRANSITION_EASEINEASEOUT +
    + + +

    Usage options that identify how resources are to be used.

    The following table summarizes the available usage options.

    +

    + + bb172625 + D3DUSAGE + D3DUSAGE +
    + + + No documentation. + + + bb172625 + D3DUSAGE_RENDERTARGET + D3DUSAGE_RENDERTARGET + + + + No documentation. + + + bb172625 + D3DUSAGE_DEPTHSTENCIL + D3DUSAGE_DEPTHSTENCIL + + + + No documentation. + + + bb172625 + D3DUSAGE_DYNAMIC + D3DUSAGE_DYNAMIC + + + + No documentation. + + + bb172625 + D3DUSAGE_NONSECURE + D3DUSAGE_NONSECURE + + + + No documentation. + + + bb172625 + D3DUSAGE_AUTOGENMIPMAP + D3DUSAGE_AUTOGENMIPMAP + + + + No documentation. + + + bb172625 + D3DUSAGE_DMAP + D3DUSAGE_DMAP + + + + No documentation. + + + bb172625 + D3DUSAGE_QUERY_LEGACYBUMPMAP + D3DUSAGE_QUERY_LEGACYBUMPMAP + + + + No documentation. + + + bb172625 + D3DUSAGE_QUERY_SRGBREAD + D3DUSAGE_QUERY_SRGBREAD + + + + No documentation. + + + bb172625 + D3DUSAGE_QUERY_FILTER + D3DUSAGE_QUERY_FILTER + + + + No documentation. + + + bb172625 + D3DUSAGE_QUERY_SRGBWRITE + D3DUSAGE_QUERY_SRGBWRITE + + + + No documentation. + + + bb172625 + D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING + D3DUSAGE_QUERY_POSTPIXELSHADER_BLENDING + + + + No documentation. + + + bb172625 + D3DUSAGE_QUERY_VERTEXTEXTURE + D3DUSAGE_QUERY_VERTEXTEXTURE + + + + No documentation. + + + bb172625 + D3DUSAGE_QUERY_WRAPANDMIP + D3DUSAGE_QUERY_WRAPANDMIP + + + + No documentation. + + + bb172625 + D3DUSAGE_WRITEONLY + D3DUSAGE_WRITEONLY + + + + No documentation. + + + bb172625 + D3DUSAGE_SOFTWAREPROCESSING + D3DUSAGE_SOFTWAREPROCESSING + + + + No documentation. + + + bb172625 + D3DUSAGE_DONOTCLIP + D3DUSAGE_DONOTCLIP + + + + No documentation. + + + bb172625 + D3DUSAGE_POINTS + D3DUSAGE_POINTS + + + + No documentation. + + + bb172625 + D3DUSAGE_RTPATCHES + D3DUSAGE_RTPATCHES + + + + No documentation. + + + bb172625 + D3DUSAGE_NPATCHES + D3DUSAGE_NPATCHES + + + + No documentation. + + + bb172625 + D3DUSAGE_TEXTAPI + D3DUSAGE_TEXTAPI + + + + No documentation. + + + bb172625 + D3DUSAGE_RESTRICTED_CONTENT + D3DUSAGE_RESTRICTED_CONTENT + + + + No documentation. + + + bb172625 + D3DUSAGE_RESTRICT_SHARED_RESOURCE + D3DUSAGE_RESTRICT_SHARED_RESOURCE + + + + No documentation. + + + bb172625 + D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER + D3DUSAGE_RESTRICT_SHARED_RESOURCE_DRIVER + + + + None. + + + None + None + + + +

    Texture wrapping options for IMT computation APIs.

    +
    + + bb172880 + D3DXIMT + D3DXIMT +
    + + +

    The texture wraps in the U direction.

    +
    + + bb172880 + D3DXIMT_WRAP_U + D3DXIMT_WRAP_U +
    + + +

    The texture wraps in the V direction.

    +
    + + bb172880 + D3DXIMT_WRAP_V + D3DXIMT_WRAP_V +
    + + +

    The texture wraps in both the U and V direction.

    +
    + + bb172880 + D3DXIMT_WRAP_UV + D3DXIMT_WRAP_UV +
    + + +

    Defines flags used to control the number or matrices that the system applies when performing multimatrix vertex blending.

    +
    + +

    Members of this type are used with the render state.

    Geometry blending (multimatrix vertex blending) requires that your application use a vertex format that has blending (beta) weights for each vertex.

    +
    + + bb172628 + D3DVERTEXBLENDFLAGS + D3DVERTEXBLENDFLAGS +
    + + +

    Disable vertex blending; apply only the world matrix set by the D3DTS_WORLDMATRIX macro, where the index value for the transformation state is 0.

    +
    + + bb172628 + D3DVBF_DISABLE + D3DVBF_DISABLE +
    + + +

    Enable vertex blending between the two matrices set by the D3DTS_WORLDMATRIX macro, where the index value for the transformation states are 0 and 1.

    +
    + + bb172628 + D3DVBF_1WEIGHTS + D3DVBF_1WEIGHTS +
    + + +

    Enable vertex blending between the three matrices set by the D3DTS_WORLDMATRIX macro, where the index value for the transformation states are 0, 1, and 2.

    +
    + + bb172628 + D3DVBF_2WEIGHTS + D3DVBF_2WEIGHTS +
    + + +

    Enable vertex blending between the four matrices set by the D3DTS_WORLDMATRIX macro, where the index value for the transformation states are 0, 1, 2, and 3.

    +
    + + bb172628 + D3DVBF_3WEIGHTS + D3DVBF_3WEIGHTS +
    + + +

    Vertex blending is done by using the value assigned to .

    +
    + + bb172628 + D3DVBF_TWEENING + D3DVBF_TWEENING +
    + + +

    Use a single matrix with a weight of 1.0.

    +
    + + bb172628 + D3DVBF_0WEIGHTS + D3DVBF_0WEIGHTS +
    + + +

    Flexible Vertex Format Constants, or FVF codes, are used to describe the contents of vertices interleaved in a single data stream that will be processed by the fixed-function pipeline.

    +
    + + bb172559 + D3DFVF + D3DFVF +
    + + + No documentation. + + + bb172559 + D3DFVF_RESERVED0 + D3DFVF_RESERVED0 + + + + No documentation. + + + bb172559 + D3DFVF_POSITION_MASK + D3DFVF_POSITION_MASK + + + + No documentation. + + + bb172559 + D3DFVF_XYZ + D3DFVF_XYZ + + + + No documentation. + + + bb172559 + D3DFVF_XYZRHW + D3DFVF_XYZRHW + + + + No documentation. + + + bb172559 + D3DFVF_XYZB1 + D3DFVF_XYZB1 + + + + No documentation. + + + bb172559 + D3DFVF_XYZB2 + D3DFVF_XYZB2 + + + + No documentation. + + + bb172559 + D3DFVF_XYZB3 + D3DFVF_XYZB3 + + + + No documentation. + + + bb172559 + D3DFVF_XYZB4 + D3DFVF_XYZB4 + + + + No documentation. + + + bb172559 + D3DFVF_XYZB5 + D3DFVF_XYZB5 + + + + No documentation. + + + bb172559 + D3DFVF_XYZW + D3DFVF_XYZW + + + + No documentation. + + + bb172559 + D3DFVF_NORMAL + D3DFVF_NORMAL + + + + No documentation. + + + bb172559 + D3DFVF_PSIZE + D3DFVF_PSIZE + + + + No documentation. + + + bb172559 + D3DFVF_DIFFUSE + D3DFVF_DIFFUSE + + + + No documentation. + + + bb172559 + D3DFVF_SPECULAR + D3DFVF_SPECULAR + + + + No documentation. + + + bb172559 + D3DFVF_TEXCOUNT_MASK + D3DFVF_TEXCOUNT_MASK + + + + No documentation. + + + bb172559 + D3DFVF_TEXCOUNT_SHIFT + D3DFVF_TEXCOUNT_SHIFT + + + + No documentation. + + + bb172559 + D3DFVF_TEX0 + D3DFVF_TEX0 + + + + No documentation. + + + bb172559 + D3DFVF_TEX1 + D3DFVF_TEX1 + + + + No documentation. + + + bb172559 + D3DFVF_TEX2 + D3DFVF_TEX2 + + + + No documentation. + + + bb172559 + D3DFVF_TEX3 + D3DFVF_TEX3 + + + + No documentation. + + + bb172559 + D3DFVF_TEX4 + D3DFVF_TEX4 + + + + No documentation. + + + bb172559 + D3DFVF_TEX5 + D3DFVF_TEX5 + + + + No documentation. + + + bb172559 + D3DFVF_TEX6 + D3DFVF_TEX6 + + + + No documentation. + + + bb172559 + D3DFVF_TEX7 + D3DFVF_TEX7 + + + + No documentation. + + + bb172559 + D3DFVF_TEX8 + D3DFVF_TEX8 + + + + No documentation. + + + bb172559 + D3DFVF_LASTBETA_UBYTE4 + D3DFVF_LASTBETA_UBYTE4 + + + + No documentation. + + + bb172559 + D3DFVF_LASTBETA_D3DCOLOR + D3DFVF_LASTBETA_D3DCOLOR + + + + None. + + + None + None + + + + No documentation. + + + ff569467 + D3DFVFCAPS + D3DFVFCAPS + + + + No documentation. + + + ff569467 + D3DFVFCAPS_TEXCOORDCOUNTMASK + D3DFVFCAPS_TEXCOORDCOUNTMASK + + + + No documentation. + + + ff569467 + D3DFVFCAPS_DONOTSTRIPELEMENTS + D3DFVFCAPS_DONOTSTRIPELEMENTS + + + + No documentation. + + + ff569467 + D3DFVFCAPS_PSIZE + D3DFVFCAPS_PSIZE + + + +

    This constant is the maximum number of vertex declarators for a mesh.

    +
    + +

    MAXD3DDECLLENGTH is defined as a maximum of 64 (see d3d9types.h). This does not include the "end" marker vertex element.

    +
    + + bb147183 + _MAX_FVF_DECL_SIZE + _MAX_FVF_DECL_SIZE +
    + + +

    The maximum number of elements in the vertex declaration. The additional (+1) is for D3DDECL_END.

    +
    + + bb147183 + MAX_FVF_DECL_SIZE + MAX_FVF_DECL_SIZE +
    + + +

    A combination of one or more flags that control the device create behavior.

    +
    + + bb172637 + D3DVTXPCAPS + D3DVTXPCAPS +
    + + + No documentation. + + + bb172637 + D3DVTXPCAPS_TEXGEN + D3DVTXPCAPS_TEXGEN + + + + No documentation. + + + bb172637 + D3DVTXPCAPS_MATERIALSOURCE7 + D3DVTXPCAPS_MATERIALSOURCE7 + + + + No documentation. + + + bb172637 + D3DVTXPCAPS_DIRECTIONALLIGHTS + D3DVTXPCAPS_DIRECTIONALLIGHTS + + + + No documentation. + + + bb172637 + D3DVTXPCAPS_POSITIONALLIGHTS + D3DVTXPCAPS_POSITIONALLIGHTS + + + + No documentation. + + + bb172637 + D3DVTXPCAPS_LOCALVIEWER + D3DVTXPCAPS_LOCALVIEWER + + + + No documentation. + + + bb172637 + D3DVTXPCAPS_TWEENING + D3DVTXPCAPS_TWEENING + + + + No documentation. + + + bb172637 + D3DVTXPCAPS_TEXGEN_SPHEREMAP + D3DVTXPCAPS_TEXGEN_SPHEREMAP + + + + No documentation. + + + bb172637 + D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER + D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER + + + +

    Vertex shader caps constants. These constants are used by the VS20Caps member of .

    +
    + + bb172634 + D3DVS20CAPS + D3DVS20CAPS +
    + + + No documentation. + + + bb172634 + D3DVS20CAPS_PREDICATION + D3DVS20CAPS_PREDICATION + + + + None. + + + None + None + + + +

    Vertex texture sampler constants.

    These constants identify the texture samplers used by vertex shaders.

    +
    + + bb172631 + D3DVERTEXTEXTURESAMPLER + D3DVERTEXTEXTURESAMPLER +
    + + + No documentation. + + + bb172631 + D3DVERTEXTEXTURESAMPLER0 + D3DVERTEXTEXTURESAMPLER0 + + + + No documentation. + + + bb172631 + D3DVERTEXTEXTURESAMPLER1 + D3DVERTEXTEXTURESAMPLER1 + + + + No documentation. + + + bb172631 + D3DVERTEXTEXTURESAMPLER2 + D3DVERTEXTEXTURESAMPLER2 + + + + No documentation. + + + bb172631 + D3DVERTEXTEXTURESAMPLER3 + D3DVERTEXTEXTURESAMPLER3 + + + + No documentation. + + + bb172631 + D3DVERTEXTEXTURESAMPLERMAPSAMPLER + D3DVERTEXTEXTURESAMPLERMAPSAMPLER + + + +

    Specifies the type of I/O bus used by the graphics adapter.

    +
    + +

    As many as three flags can be set. Flags in the range 0x00 through 0x04 (D3DBUSTYPE_Xxx) provide the basic bus type. Flags in the range 0x10000 through 0x50000 (D3DBUSIMPL_MODIFIER_Xxx) modify the basic description. The driver sets one bus-type flag, and can set zero or one modifier flag. If the driver sets a modifier flag, it also sets the flag. Flags are combined with a bitwise OR.

    +
    + + dd318379 + D3DBUSTYPE + D3DBUSTYPE +
    + + +

    Indicates a type of bus other than the types listed here. +

    +
    + + dd318379 + D3DBUSTYPE_OTHER + D3DBUSTYPE_OTHER +
    + + +

    PCI bus. +

    +
    + + dd318379 + D3DBUSTYPE_PCI + D3DBUSTYPE_PCI +
    + + +

    PCI-X bus. +

    +
    + + dd318379 + D3DBUSTYPE_PCIX + D3DBUSTYPE_PCIX +
    + + +

    PCI Express bus. +

    +
    + + dd318379 + D3DBUSTYPE_PCIEXPRESS + D3DBUSTYPE_PCIEXPRESS +
    + + +

    Accelerated Graphics Port (AGP) bus. +

    +
    + + dd318379 + D3DBUSTYPE_AGP + D3DBUSTYPE_AGP +
    + + +

    The implementation for the graphics adapter is in a motherboard chipset's north bridge. This flag implies that data never goes over an expansion bus (such as PCI or AGP) when it is transferred from main memory to the graphics adapter.

    +
    + + dd318379 + D3DBUSIMPL_MODIFIER_INSIDE_OF_CHIPSET + D3DBUSIMPL_MODIFIER_INSIDE_OF_CHIPSET +
    + + +

    Indicates that the graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard and all of the graphics adapter's chips are soldered to the motherboard. This flag implies that data never goes over an expansion bus (such as PCI or AGP) when it is transferred from main memory to the graphics adapter.

    +
    + + dd318379 + D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP + D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_CHIP +
    + + +

    The graphics adapter is connected to a motherboard chipset's north bridge by tracks on the motherboard, and all of the graphics adapter's chips are connected through sockets to the motherboard. +

    +
    + + dd318379 + D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET + D3DBUSIMPL_MODIFIER_TRACKS_ON_MOTHER_BOARD_TO_SOCKET +
    + + +

    The graphics adapter is connected to the motherboard through a daughterboard connector. +

    +
    + + dd318379 + D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR + D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR +
    + + +

    The graphics adapter is connected to the motherboard through a daughterboard connector, and the graphics adapter is inside an enclosure that is not user accessible. +

    +
    + + dd318379 + D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE + D3DBUSIMPL_MODIFIER_DAUGHTER_BOARD_CONNECTOR_INSIDE_OF_NUAE +
    + + +

    One of the D3DBUSIMPL_MODIFIER_MODIFIER_Xxx flags is set. +

    +
    + + dd318379 + D3DBUSIMPL_MODIFIER_NON_STANDARD + D3DBUSIMPL_MODIFIER_NON_STANDARD +
    + + +

    Options for welding together vertices.

    +
    + + bb205561 + _D3DXWELDEPSILONSFLAGS + _D3DXWELDEPSILONSFLAGS +
    + + +

    Weld together all vertices that are at the same location. Using this flag avoids an epsilon comparison between vertex components.

    +
    + + bb205561 + D3DXWELDEPSILONS_WELDALL + D3DXWELDEPSILONS_WELDALL +
    + + +

    If a given vertex component is within epsilon, modify partially matched vertices so that both components are identical. If all components are equal, remove one of the vertices.

    +
    + + bb205561 + D3DXWELDEPSILONS_WELDPARTIALMATCHES + D3DXWELDEPSILONS_WELDPARTIALMATCHES +
    + + +

    Instructs the weld to allow only modifications to vertices and not removal. This flag is valid only if is set. It is useful to modify vertices to be equal, but not to allow vertices to be removed.

    +
    + + bb205561 + D3DXWELDEPSILONS_DONOTREMOVEVERTICES + D3DXWELDEPSILONS_DONOTREMOVEVERTICES +
    + + +

    Instructs the weld not to split vertices that are in separate attribute groups. When the method is called with the flag, then the flag will also be set. Setting this flag can slow down software vertex processing.

    +
    + + bb205561 + D3DXWELDEPSILONS_DONOTSPLIT + D3DXWELDEPSILONS_DONOTSPLIT +
    + + + No documentation. + + + D3DXF_FILEFORMAT2 + D3DXF_FILEFORMAT2 + + + + No documentation. + + + D3DXF_FILEFORMAT_BINARY + D3DXF_FILEFORMAT_BINARY + + + + No documentation. + + + D3DXF_FILEFORMAT_TEXT + D3DXF_FILEFORMAT_TEXT + + + + No documentation. + + + D3DXF_FILEFORMAT_COMPRESSED + D3DXF_FILEFORMAT_COMPRESSED + + + + No documentation. + + + D3DZBUFFERTYPE + D3DZBUFFERTYPE + + + + No documentation. + + + D3DZB_FALSE + D3DZB_FALSE + + + + No documentation. + + + D3DZB_TRUE + D3DZB_TRUE + + + + No documentation. + + + D3DZB_USEW + D3DZB_USEW + + + + Functions + + + + + Constant SdkVersion. + D3D_SDK_VERSION + + + +

    Creates an object and returns an interface to it.

    +
    + No documentation. + No documentation. +
    • if Direct3DEx features are not supported (no WDDM driver is installed) or if the SDKVersion does not match the version of the DLL.
    • D3DERR_OUTOFMEMORY if out-of-memory conditions are detected when creating the enumerator object.
    • if the creation of the enumerator object is successful.
    + +

    The object is the first object that the application creates and the last object thta the application releases. Functions for enumerating and retrieving capabilities of a device are accessible through the object. This enables applications to select devices without creating them.

    The interface supports enumeration of active display adapters and allows the creation of objects. If the user dynamically adds adapters (either by adding devices to the desktop, or by hot-docking a laptop), these devices are not included in the enumeration. Creating a new interface will expose the new devices.

    Pass the flag to this function to ensure that header files used in the compiled application match the version of the installed runtime DLLs. is changed in the runtime only when a header or another code change would require rebuilding the application. If this function fails, it indicates that the versions of the header file and the runtime DLL do not match.

    Note??Direct3DCreate9Ex is supported only in Windows Vista, Windows Server 2008, and Windows 7. Earlier versions of the D3D9.dll library do not include Direct3D9Ex and Direct3DCreate9Ex.

    +
    + + bb219676 + HRESULT Direct3DCreate9Ex([In] unsigned int SDKVersion,[Out, Fast] IDirect3D9Ex** arg1) + Direct3DCreate9Ex +
    + + +

    Create an object and return an interface to it.

    +
    +

    The value of this parameter should be . See Remarks.

    +

    If successful, this function returns a reference to an interface; otherwise, a null reference is returned.

    + +

    The Direct3D object is the first Direct3D COM object that your graphical application needs to create and the last object that your application needs to release. Functions for enumerating and retrieving capabilities of a device are accessible through the Direct3D object. This enables applications to select devices without creating them.

    Create an object as shown here:

     LPDIRECT3D9 g_pD3D = null; if( null == (g_pD3D = Direct3DCreate9())) return E_FAIL;	
    +            

    The interface supports enumeration of active display adapters and allows the creation of objects. If the user dynamically adds adapters (either by adding devices to the desktop, or by hot-docking a laptop), those devices will not be included in the enumeration. Creating a new interface will expose the new devices.

    is passed to this function to ensure that the header files against which an application is compiled match the version of the runtime DLL's that are installed on the machine. is only changed in the runtime when a header change (or other code change) would require an application to be rebuilt. If this function fails, it indicates that the header file version does not match the runtime DLL version.

    For an example, see Creating a Device (Direct3D 9).

    +
    + + bb219685 + IDirect3D9* Direct3DCreate9([In] unsigned int SDKVersion) + Direct3DCreate9 +
    + + + Functions + + + + + Constant Version. + D3DX_VERSION + + + Constant SdkVersion. + D3DX_SDK_VERSION + + + + No documentation. + + No documentation. + No documentation. + + void D3DPERF_SetMarker([In] D3DCOLOR col,[In] const wchar_t* wszName) + D3DPERF_SetMarker + + + + No documentation. + + No documentation. + + void D3DPERF_SetOptions([In] unsigned int dwOptions) + D3DPERF_SetOptions + + + + No documentation. + + No documentation. + + unsigned int D3DPERF_GetStatus() + D3DPERF_GetStatus + + + + No documentation. + + No documentation. + No documentation. + + void D3DPERF_SetRegion([In] D3DCOLOR col,[In] const wchar_t* wszName) + D3DPERF_SetRegion + + + + No documentation. + + No documentation. + + int D3DPERF_EndEvent() + D3DPERF_EndEvent + + + +

    Marks the beginning of a section of event code.

    +
    +

    A null-terminated UNICODE string that contains the name of the event. The name is not relevant to the operating system. You can choose a name that is meaningful when the calling application is running under the Direct3D profiling tool.A null reference produces undefined results.

    + No documentation. +

    Returns the number of previous calls to BeginEvent that have not yet been finalized by calls to the ID3DUserDefinedAnnotation::EndEvent method.

    The return value is ?1 if the calling application is not running under a Direct3D profiling tool.

    + +

    You call the EndEvent method to mark the end of the section of event code.

    A user can visualize the event when the calling application is running under an enabled Direct3D profiling tool such as Microsoft Visual Studio Ultimate?2012.

    BeginEvent has no effect if the calling application is not running under an enabled Direct3D profiling tool.

    +
    + + hh446884 + int D3DPERF_BeginEvent([In] D3DCOLOR col,[In] const wchar_t* wszName) + D3DPERF_BeginEvent +
    + + + No documentation. + + No documentation. + + BOOL D3DPERF_QueryRepeatFrame() + D3DPERF_QueryRepeatFrame + + + +

    Adds a child frame to a frame.

    +
    +

    Pointer to the parent node.

    +

    Pointer to the child node.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb172846 + HRESULT D3DXFrameAppendChild([In] D3DXFRAME* pFrameParent,[In] const D3DXFRAME* pFrameChild) + D3DXFrameAppendChild +
    + + +

    Loads the first frame hierarchy from a .x file.

    +
    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Combination of one or more flags from the D3DXMESH enumeration that specify creation options for the mesh.

    +

    Pointer to an interface, the device object associated with the mesh.

    +

    Pointer to an interface.

    +

    Application provided interface that allows loading of user data. See .

    +

    Returns a reference to the loaded frame hierarchy. See .

    +

    Returns a reference to the animation controller corresponding to animation in the .x file. This is created with default tracks and events. See .

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXLoadMeshHierarchyFromXA.

    All the meshes in the file will be collapsed into one output mesh. If the file contains a frame hierarchy, all the transformations will be applied to the mesh.

    loads the animation data and frame hierarchy from a .x file. It scans the .x file and builds a frame hierarchy and animation controller according to the -derived object passed to it through pAlloc. Loading the data requires several steps as follows:

    1. Derive , implementing each method. This controls how frames and meshes are allocated and freed.
    2. Derive , implementing each method. If your .x file has no embedded user-defined data, or if you do not need it, you can skip this part.
    3. Create an object of your class, and optionally of your LoadUserData class. You do not need to call any methods of these objects yourself.
    4. Call , passing in your object and your object (or null) to create the frame hierarchy and animation controller. All the animation sets and frames are automatically registered to the animation controller.

    During the load, CreateFrame and LoadFrameChildData are called back on each frame to control loading and allocation of the frame. The application defines these methods to control how frames are stored. CreateMeshContainer and LoadMeshChildData are called back on each mesh object to control loading and allocation of mesh objects. LoadTopLevelData is called back for each top level object that doesn't get loaded by the other methods.

    To free this data, call ID3DXAnimationController::Release to free the animation sets, and D3DXFRAMEDestroy, passing in the root node of the frame hierarchy and an object of your derived class. DestroyFrame and DestroyMeshContainer will each be called for every frame and mesh object in the frame hierarchy. Your implementation of DestroyFrame should release everything allocated by CreateFrame, and likewise for the mesh container methods.

    +
    + + bb172894 + HRESULT D3DXLoadMeshHierarchyFromXW([In] const wchar_t* Filename,[In] unsigned int MeshOptions,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXAllocateHierarchy* pAlloc,[In] ID3DXLoadUserData* pUserDataLoader,[In] D3DXFRAME** ppFrameHierarchy,[In] ID3DXAnimationController** ppAnimController) + D3DXLoadMeshHierarchyFromXW +
    + + +

    Given a frame hierarchy, registers all the named matrices in the animation mixer.

    +
    +

    The top level node in the frame hierarchy.

    +

    Pointer to the animation controller object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb172851 + HRESULT D3DXFrameRegisterNamedMatrices([In] D3DXFRAME* pFrameRoot,[In] ID3DXAnimationController* pAnimController) + D3DXFrameRegisterNamedMatrices +
    + + +

    Loads the first frame hierarchy from a .x file.

    +
    +

    Pointer to a buffer that contains the mesh hierarchy.

    +

    Size of the pMemory buffer, in bytes.

    +

    Combination of one or more flags from the D3DXMESH enumeration that specify creation options for the mesh.

    +

    Pointer to an interface, the device object associated with the mesh.

    +

    Pointer to an interface.

    +

    Application provided interface that allows loading of user data. See .

    +

    Returns a reference to the loaded frame hierarchy. See .

    +

    Returns a reference to the animation controller corresponding to animation in the .x file. This is created with default tracks and events. See .

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    All the meshes in the file will be collapsed into one output mesh. If the file contains a frame hierarchy, all the transformations will be applied to the mesh.

    +
    + + bb172895 + HRESULT D3DXLoadMeshHierarchyFromXInMemory([In] const void* Memory,[In] unsigned int SizeOfMemory,[In] unsigned int MeshOptions,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXAllocateHierarchy* pAlloc,[In] ID3DXLoadUserData* pUserDataLoader,[In] D3DXFRAME** ppFrameHierarchy,[In] ID3DXAnimationController** ppAnimController) + D3DXLoadMeshHierarchyFromXInMemory +
    + + +

    Creates a key framed animation set interface that stores key frame data in a compressed format.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb172754 + HRESULT D3DXCreateCompressedAnimationSet([In] const char* pName,[In] double TicksPerSecond,[In] D3DXPLAYBACK_TYPE Playback,[In] ID3DXBuffer* pCompressedData,[In] unsigned int NumCallbackKeys,[In] const D3DXKEY_CALLBACK* pCallbackKeys,[In] ID3DXCompressedAnimationSet** ppAnimationSet) + D3DXCreateCompressedAnimationSet +
    + + +

    Creates a .x file and saves the mesh hierarchy and corresponding animations in it.

    +
    +

    Pointer to a string that specifies the name of the .x file identifying the saved mesh. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Format of the .x file (text or binary, compressed or not). See . can be combined (using a logical OR) with either the or flags to reduce the output file size.

    +

    Root node of the hierarchy to be saved. See .

    +

    Animation controller that has animation sets to be stored. See .

    +

    Application-provided interface that allows saving of user data. See .

    +

    If the function succeeds, the return value is . If the function fails, the return value can be: .

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXSaveMeshHierarchyToFileA.

    This function does not save compressed animation sets.

    +
    + + bb205427 + HRESULT D3DXSaveMeshHierarchyToFileW([In] const wchar_t* Filename,[In] unsigned int XFormat,[In] const D3DXFRAME* pFrameRoot,[In] ID3DXAnimationController* pAnimController,[In] ID3DXSaveUserData* pUserDataSaver) + D3DXSaveMeshHierarchyToFileW +
    + + +

    Computes the bounding sphere of all the meshes in the frame hierarchy.

    +
    +

    Pointer to the root node.

    +

    Returns the center of the bounding sphere.

    +

    Returns the radius of the bounding sphere.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb172847 + HRESULT D3DXFrameCalculateBoundingSphere([In] const D3DXFRAME* pFrameRoot,[In] D3DXVECTOR3* pObjectCenter,[In] float* pObjectRadius) + D3DXFrameCalculateBoundingSphere +
    + + +

    Creates an animation controller object.

    +
    +

    Maximum number of animation outputs the controller can support.

    +

    Maximum number of animation sets that can be mixed.

    +

    Maximum number of animation sets that can be mixed simultaneously.

    +

    Maximum number of outstanding events that the controller will support.

    +

    Pointer to the animation controller object created. See .

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    An animation controller controls an animation mixer. The controller adds methods to modify blending parameters over time to enable smooth transitions.

    +
    + + bb172751 + HRESULT D3DXCreateAnimationController([In] unsigned int MaxNumMatrices,[In] unsigned int MaxNumAnimationSets,[In] unsigned int MaxNumTracks,[In] unsigned int MaxNumEvents,[In] ID3DXAnimationController** ppAnimController) + D3DXCreateAnimationController +
    + + +

    Finds the child frame of a root frame.

    +
    +

    Pointer to the root frame. See .

    +

    Name of the child frame to find.

    +

    Returns the child frame if it is found, or null otherwise. See .

    + + bb172849 + D3DXFRAME* D3DXFrameFind([In] const D3DXFRAME* pFrameRoot,[In] const char* Name) + D3DXFrameFind +
    + + +

    Creates a key framed animation set interface.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb172776 + HRESULT D3DXCreateKeyframedAnimationSet([In] const char* pName,[In] double TicksPerSecond,[In] D3DXPLAYBACK_TYPE Playback,[In] unsigned int NumAnimations,[In] unsigned int NumCallbackKeys,[In] const D3DXKEY_CALLBACK* pCallbackKeys,[In] ID3DXKeyframedAnimationSet** ppAnimationSet) + D3DXCreateKeyframedAnimationSet +
    + + +

    Destroys the subtree of frames under the root, including the root.

    +
    +

    Pointer to the root node.

    +

    Allocation interface used to deallocate nodes of the frame hierarchy.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb172848 + HRESULT D3DXFrameDestroy([In] D3DXFRAME* pFrameRoot,[In] ID3DXAllocateHierarchy* pAlloc) + D3DXFrameDestroy +
    + + +

    Counts number of frames in a subtree that have non-null names.

    +
    +

    Pointer to the root node of the subtree.

    +

    Returns the frame count.

    + + bb172850 + unsigned int D3DXFrameNumNamedMatrices([In] const D3DXFRAME* pFrameRoot) + D3DXFrameNumNamedMatrices +
    + + +

    Creates a render environment map.

    +
    +

    Pointer to an interface, which is the device to associate with the render surface.

    +

    Size of the render surface.

    +

    The number of mipmap levels.

    +

    Member of the enumerated type that describes the pixel format of the environment map.

    +

    If TRUE, the render surface supports a depth-stencil surface. Otherwise, this member is set to .

    +

    If DepthStencil is set to TRUE, this parameter is a member of the enumerated type that describes the depth-stencil format of the environment map.

    +

    Address of a reference to an interface that represents the created render environment map.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb172790 + HRESULT D3DXCreateRenderToEnvMap([In] IDirect3DDevice9* pDevice,[In] unsigned int Size,[In] unsigned int MipLevels,[In] D3DFORMAT Format,[In] BOOL DepthStencil,[In] D3DFORMAT DepthStencilFormat,[In] ID3DXRenderToEnvMap** ppRenderToEnvMap) + D3DXCreateRenderToEnvMap +
    + + +

    Returns the driver level.

    +
    +

    Pointer to an interface representing the device.

    +

    The driver level. See remarks.

    + +

    This method returns the driver version, which is one of the following:

    • 700 - Direct3D 7 level driver
    • 800 - Direct3D 8 level driver
    • 900 - Direct3D 9 level driver
    +
    + + bb172865 + unsigned int D3DXGetDriverLevel([In] IDirect3DDevice9* pDevice) + D3DXGetDriverLevel +
    + + +

    Creates a font object for a device and font.

    +
    +

    Pointer to an interface, the device to be associated with the font object.

    +

    The height of the characters in logical units.

    +

    The width of the characters in logical units.

    +

    Typeface weight. One example is bold.

    +

    The number of mipmap levels.

    +

    True for italic font, false otherwise.

    +

    The character set of the font.

    +

    Specifies how Windows should attempt to match the desired font sizes and characteristics with actual fonts. Use OUT_TT_ONLY_PRECIS for instance, to ensure that you always get a TrueType font.

    +

    Specifies how Windows should match the desired font with a real font. It applies to raster fonts only and should not affect TrueType fonts.

    +

    Pitch and family index.

    +

    String containing the typeface name. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Returns a reference to an interface, representing the created font object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The creation of an object requires that the device supports 32-bit color.

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateFontA because ANSI strings are being used.

    If you want more information about font parameters, see The Logical Font.

    +
    + + bb172773 + HRESULT D3DXCreateFontW([In] IDirect3DDevice9* pDevice,[In] int Height,[In] unsigned int Width,[In] unsigned int Weight,[In] unsigned int MipLevels,[In] BOOL Italic,[In] unsigned int CharSet,[In] unsigned int OutputPrecision,[In] unsigned int Quality,[In] unsigned int PitchAndFamily,[In] const wchar_t* pFaceName,[Out, Fast] ID3DXFont** ppFont) + D3DXCreateFontW +
    + + +

    Creates a render surface.

    +
    +

    Pointer to an interface, the device to be associated with the render surface.

    +

    Width of the render surface, in pixels.

    +

    Height of the render surface, in pixels.

    +

    Member of the enumerated type, describing the pixel format of the render surface.

    +

    If TRUE, the render surface supports a depth-stencil surface. Otherwise, this member is set to . This function will create a new depth buffer.

    +

    If DepthStencil is set to TRUE, this parameter is a member of the enumerated type, describing the depth-stencil format of the render surface.

    +

    Address of a reference to an interface, representing the created render surface.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb172791 + HRESULT D3DXCreateRenderToSurface([In] IDirect3DDevice9* pDevice,[In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] BOOL DepthStencil,[In] D3DFORMAT DepthStencilFormat,[Out, Fast] ID3DXRenderToSurface** ppRenderToSurface) + D3DXCreateRenderToSurface +
    + + +

    Creates a sprite object which is associated with a particular device. Sprite objects are used to draw 2D images to the screen.

    +
    +

    Pointer to an interface, the device to be associated with the sprite.

    +

    Address of a reference to an interface. This interface allows the user to access sprite functions.

    +

    If the function succeeds, the return value is .If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This interface can be used to draw two dimensional images in screen space of the associated device.

    +
    + + bb172797 + HRESULT D3DXCreateSprite([In] IDirect3DDevice9* pDevice,[Out, Fast] ID3DXSprite** ppSprite) + D3DXCreateSprite +
    + + +

    Creates a font object indirectly for both a device and a font.

    +
    +

    Pointer to an interface, the device to be associated with the font object.

    +

    Pointer to a structure, describing the attributes of the font object to create. If the compiler settings require Unicode, the data type resolves to ; otherwise, the data type resolves to D3DXFONT_DESCA. See Remarks.

    +

    Returns a reference to an interface, representing the created font object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateFontIndirectA because ANSI strings are being used.

    +
    + + bb172774 + HRESULT D3DXCreateFontIndirectW([In] IDirect3DDevice9* pDevice,[In] const D3DXFONT_DESCW* pDesc,[Out, Fast] ID3DXFont** ppFont) + D3DXCreateFontIndirectW +
    + + +

    Uses a left-handed coordinate system to create a line.

    +
    +

    Pointer to an interface, representing the device associated with the created box mesh.

    +

    Pointer to an interface.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function creates a mesh with the creation option and | Flexible Vertex Format (FVF).

    +
    + + bb172778 + HRESULT D3DXCreateLine([In] IDirect3DDevice9* pDevice,[Out, Fast] ID3DXLine** ppLine) + D3DXCreateLine +
    + + +

    Turns on or off all D3DX debug output.

    +
    +

    If TRUE, debugger output is halted; if , debug output is enabled.

    +

    Returns the previous value of Mute.

    + + bb172817 + BOOL D3DXDebugMute([In] BOOL Mute) + D3DXDebugMute +
    + + +

    Verify that the version of D3DX you compiled with is the version that you are running.

    +
    +

    Use . See remarks.

    +

    Use . See remarks.

    +

    Returns TRUE if the version of D3DX you compiled against is the version you are running with; otherwise, is returned.

    + +

    Use this function during the initialization of your application like this:

      CD3DXMyApplication::Initialize( hInstance,  LPCSTR szWindowName, LPCSTR szClassName, UINT uWidth, UINT uHeight)	
    +            {  hr; if (!(, )) return E_FAIL; ...	
    +            }	
    +            

    Use Direct3DCreate9 to verify that the correct runtime is installed.

    +
    + + bb172717 + BOOL D3DXCheckVersion([In] unsigned int D3DSdkVersion,[In] unsigned int D3DXSdkVersion) + D3DXCheckVersion +
    + + +

    Create an effect from an ASCII or binary effect description.

    +
    +

    Pointer to the device that will create the effect. See .

    +

    Pointer to a buffer containing an effect description.

    +

    Length of the effect data, in bytes.

    +

    An optional null-terminated array of structures that describe preprocessor definitions. This value can be null.

    +

    Optional interface reference, , to use for handling #include directives. If this value is null, #includes will either be honored when compiling from a file or will cause an error when compiled from a resource or memory.

    +

    If pSrcData contains a text effect, flags can be a combination of Flags and flags; otherwise, pSrcData contains a binary effect and the only flags honored are flags. The Direct3D 10 HLSL compiler is now the default. See Effect-Compiler Tool for details.

    +

    Pointer to a object to use for shared parameters. If this value is null, no parameters will be shared.

    +

    Returns a reference to an interface.

    +

    Returns a buffer containing a listing of compile errors.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb172763 + HRESULT D3DXCreateEffect([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + D3DXCreateEffect +
    + + +

    Disassemble an effect.

    +
    +

    Pointer to an interface that contains the effect.

    +

    Enable color coding to make the disassembly easier to read.

    +

    Returns a buffer containing the disassembled shader. See .

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb172819 + HRESULT D3DXDisassembleEffect([In] ID3DXEffect* pEffect,[In] BOOL EnableColorCode,[In] ID3DXBuffer** ppDisassembly) + D3DXDisassembleEffect +
    + + +

    Create an effect from an ASCII or binary effect description. This is an extended version of that allows an application to control which parameters are ignored by the effects system.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function is an extended version of that allows an application to specify which effect constants will be managed by the application. A constant that is managed by the application is ignored by the effects system. That is, the application is responsible for initializing the constant as well as saving and restoring its state whenever appropriate.

    This function checks each constant in pSkipConstants to see that:

    • It is bound to a constant register.
    • It is only used in HLSL shader code.

    If a constant is named in the string that is not present in the effect, it is ignored.

    If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the LPCTSTR data type resolves to LPCSTR.

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateEffectFromResourceA because ANSI strings are being used.

    loads data from a resource of type RT_RCDATA. See MSDN for more information about Windows resources.

    +
    + + bb172771 + HRESULT D3DXCreateEffectFromResourceExW([In] IDirect3DDevice9* pDevice,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + D3DXCreateEffectFromResourceExW +
    + + +

    Create an effect from an ASCII or binary effect description.

    +
    +

    Pointer to the device.

    +

    Handle to a module containing the effect description. If this parameter is null, the current module will be used.

    +

    Pointer to the resource. This parameter supports both Unicode and ANSI strings. See Remarks.

    +

    An optional null-terminated array of structures that describe preprocessor definitions. This value can be null.

    +

    Optional interface reference, , to use for handling #include directives. If this value is null, #includes will either be honored when compiling from a file or will cause an error when compiled from a resource or memory.

    +

    If hSrcModule contains a text effect, flags can be a combination of Flags and flags; otherwise, hSrcModule contains a binary effect and the only flags honored are flags. The Direct3D 10 HLSL compiler is now the default. See Effect-Compiler Tool for details.

    +

    Pointer to a object to use for shared parameters. If this value is null, no parameters will be shared.

    +

    Returns a buffer containing the compiled effect.

    +

    Returns a buffer containing a listing of compile errors.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the LPCTSTR data type resolves to LPCSTR.

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateEffectFromResourceA because ANSI strings are being used.

    loads data from a resource of type RT_RCDATA. See MSDN for more information about Windows resources.

    +
    + + bb172770 + HRESULT D3DXCreateEffectFromResourceW([In] IDirect3DDevice9* pDevice,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + D3DXCreateEffectFromResourceW +
    + + +

    Creates an effect compiler from an ASCII effect description.

    +
    +

    Pointer to a buffer containing an effect description.

    +

    Length, in bytes, of the effect data.

    +

    An optional null-terminated array of structures that describe preprocessor definitions. This value can be null.

    +

    Optional interface reference, , to use for handling #include directives. If this value is null, #includes will either be honored when compiling from a file or will cause an error when compiled from a resource or memory.

    +

    Compile options identified by various flags (see Flags). The Direct3D 10 HLSL compiler is now the default. See Effect-Compiler Tool for details.

    +

    Address of a reference to an interface containing the effect compiler.

    +

    Address of a reference to an interface containing any error messages that occurred during compilation. This parameter can be set to null to ignore error messages.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb172764 + HRESULT D3DXCreateEffectCompiler([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[Out, Fast] ID3DXEffectCompiler** ppCompiler,[In] ID3DXBuffer** ppParseErrors) + D3DXCreateEffectCompiler +
    + + +

    Create an effect from an ASCII or binary effect description. This function is an extended version of that allows an application to control which parameters are ignored by the effects system.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function is an extended version of that allows an application to specify which effect constants will be managed by the application. A constant that is managed by the application is ignored by the effects system. That is, the application is responsible for initializing the constant as well as saving and restoring its state whenever appropriate.

    This function checks each constant in pSkipConstants to see that:

    • It is bound to a constant register.
    • It is only used in HLSL shader code.

    If a constant is named in the string that is not present in the effect, it is ignored.

    If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the LPCTSTR data type resolves to LPCSTR.

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateEffectFromFileA because ANSI strings are being used.

    +
    + + bb172769 + HRESULT D3DXCreateEffectFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + D3DXCreateEffectFromFileExW +
    + + +

    Creates an effect compiler from an ASCII effect description.

    +
    +

    Pointer to the filename. This parameter supports both Unicode and ANSI strings. See Remarks.

    +

    An optional null-terminated array of structures that describe preprocessor definitions. This value can be null.

    +

    Optional interface reference, , to use for handling #include directives. If this value is null, #includes will either be honored when compiling from a file or will cause an error when compiled from a resource or memory.

    +

    Compile options identified by various flags (see Flags). The Direct3D 10 HLSL compiler is now the default. See Effect-Compiler Tool for details.

    +

    Address of a reference to an interface, containing the effect compiler.

    +

    Address of a reference to an interface, containing any error messages that occurred during compilation. This parameter can be set to null to ignore error messages.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the LPCTSTR data type resolves to LPCSTR.

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateEffectCompilerFromFileA because ANSI strings are being used.

    +
    + + bb172765 + HRESULT D3DXCreateEffectCompilerFromFileW([In] const wchar_t* pSrcFile,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXEffectCompiler** ppCompiler,[In] ID3DXBuffer** ppParseErrors) + D3DXCreateEffectCompilerFromFileW +
    + + +

    Creates an from an ASCII effect description.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the LPCTSTR data type resolves to LPCSTR.

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateEffectCompilerFromResourceA because ANSI strings are being used.

    +
    + + bb172766 + HRESULT D3DXCreateEffectCompilerFromResourceW([In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXEffectCompiler** ppCompiler,[In] ID3DXBuffer** ppParseErrors) + D3DXCreateEffectCompilerFromResourceW +
    + + +

    Create an effect from an ASCII or binary effect description.

    +
    +

    Pointer to the device that will create the effect. See .

    +

    Pointer to the filename. This parameter supports both Unicode and ANSI strings. See Remarks.

    +

    Optional null-terminated array of preprocessor macro definitions. See .

    +

    Optional interface reference, , to use for handling #include directives. If this value is null, #includes will either be honored when compiling from a file or will cause an error when compiled from a resource or memory.

    +

    If pSrcFile contains a text effect, flags can be a combination of Flags and flags; otherwise, pSrcFile contains a binary effect and the only flags honored are flags. The Direct3D 10 HLSL compiler is now the default. See Effect-Compiler Tool for details.

    +

    Pointer to a object to use for shared parameters. If this value is null, no parameters will be shared.

    +

    Returns a reference to a buffer containing the compiled effect. See .

    +

    Returns a reference to a buffer containing a listing of compile errors. See .

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the LPCTSTR data type resolves to LPCSTR.

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateEffectFromFileA because ANSI strings are being used.

    +
    + + bb172768 + HRESULT D3DXCreateEffectFromFileW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + D3DXCreateEffectFromFileW +
    + + +

    Create an effect pool. A pool is used to share parameters between effects.

    +
    +

    Returns a reference to the created pool.

    +

    If the method succeeds, the return value is .

    If the arguments are invalid, the method will return .

    If the method fails, the return value will be E_FAIL.

    + +

    For effects within a pool, shared parameters with the same name share values.

    +
    + + bb172772 + HRESULT D3DXCreateEffectPool([Out, Fast] ID3DXEffectPool** ppPool) + D3DXCreateEffectPool +
    + + +

    Creates an effect from an ASCII or binary effect description. This function is an extended version of that allows an application to control which parameters are ignored by the effects system.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function is an extended version of that allows an application to specify which effect constants will be managed by the application. A constant that is managed by the application is ignored by the effects system. That is, the application is responsible for initializing the constant as well as saving and restoring its state whenever appropriate.

    This function checks each constant in pSkipConstants to see that:

    • It is bound to a constant register.
    • It is only used in HLSL shader code.

    If a constant is named in the string that is not present in the effect, it is ignored.

    +
    + + bb172767 + HRESULT D3DXCreateEffectEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pSkipConstants,[In] unsigned int Flags,[In] ID3DXEffectPool* pPool,[In] ID3DXEffect** ppEffect,[In] ID3DXBuffer** ppCompilationErrors) + D3DXCreateEffectEx +
    + + +

    Saves a mesh to a .x file.

    +
    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Pointer to an interface, representing the mesh to save to a .x file.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh. This parameter may be null.

    +

    Pointer to an array of structures, containing material information to be saved in the .x file.

    +

    Pointer to an array of effect instances, one per attribute group in the mesh. This parameter may be null. An effect instance is a particular instance of state information used to initialize an effect. For more information, see .

    +

    Number of structures in the pMaterials array.

    +

    A combination of file format and save options when saving an .x file. See D3DX X File Constants.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: .

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXSaveMeshToXA because ANSI strings are being used.

    The default file format is binary; however, if a file is specified as both a binary and a text file, it will be saved as a text file. Regardless of the file format, you may also use the compressed format to reduce the file size.

    The following is a typical code example of how to use this function.

     *    m_pMesh;           // Mesh object to be saved to a .x file	
    +            * m_pMaterials;      // Array of material structs in the mesh	
    +            DWORD         m_dwNumMaterials;  // Number of material structs in the mesh DWORD dwFormat = ;  // Binary-format .x file (default)	
    +            // DWORD dwFormat = ; // Text-format .x file // Load mesh into m_pMesh and determine values of m_pMaterials and 	
    +            // m_dwNumMaterials with calls to D3DXLoadMeshxxx or other D3DX functions // ... ( L"outputxfilename.x", m_pMesh, null, m_pMaterials, null, m_dwNumMaterials, dwFormat );	
    +            
    +
    + + bb205428 + HRESULT D3DXSaveMeshToXW([In] const wchar_t* pFilename,[In] ID3DXMesh* pMesh,[In] const unsigned int* pAdjacency,[In] const D3DXMATERIAL* pMaterials,[In] const D3DXEFFECTINSTANCE* pEffectInstances,[In] unsigned int NumMaterials,[In] unsigned int Format) + D3DXSaveMeshToXW +
    + + +

    Creates an N-patch mesh from a triangle mesh.

    +
    +

    Address of a reference to an interface that represents the triangle mesh object.

    +

    Address of a reference to an interface that represents the created patch mesh object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb172782 + HRESULT D3DXCreateNPatchMesh([In] ID3DXMesh* pMeshSysMem,[In] ID3DXPatchMesh** pPatchMesh) + D3DXCreateNPatchMesh +
    + + +

    Returns a declarator from a flexible vertex format (FVF) code.

    +
    +

    Combination of that describes the FVF from which to generate the returned declarator array.

    +

    An array of elements describing the vertex format of the mesh vertices. The upper limit of this declarator array is .

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: D3DXERR_INVALIDMESH.

    + + bb172818 + HRESULT D3DXDeclaratorFromFVF([In] D3DFVF FVF,[In, Buffer] D3DVERTEXELEMENT9* pDeclarator) + D3DXDeclaratorFromFVF +
    + + +

    Compute tangent, binormal, and normal vectors for a mesh.

    +
    +

    Pointer to an input mesh object.

    +

    Combination of one or more flags.

    Use null to specify the following options:

    • Weight the normal vector length by the angle, in radians, subtended by the two edges leaving the vertex.
    • Compute orthogonal Cartesian coordinates from the UV texture coordinates.
    • Textures are not wrapped in either U or V directions
    • Partial derivatives with respect to texture coordinates are normalized.
    • Vertices are ordered in a counterclockwise direction around each triangle.
    • Use per-vertex normal vectors already present in the input mesh.
    • The results will be stored in the original input mesh. The function will fail if new vertices need to be created.
    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function simply calls with the following input parameters:

     (pMesh, , 0,    , 0, , 0,  , 0,  dwOptions | , null, 0.01f, 0.25f, 0.01f, null, null);	
    +            

    Singularities are handled as required by grouping edges and splitting vertices. If any vertices need to be split, the function will fail. The computed normal vector at each vertex is always normalized to have unit length.

    The most robust solution for computing orthogonal Cartesian coordinates is to not set flags and , so that orthogonal coordinates are computed from both UV texture coordinates. However, in this case, if either U or V is zero, then the function will compute orthogonal coordinates using or respectively.

    +
    + + bb172744 + HRESULT D3DXComputeTangentFrame([In] ID3DXMesh* pMesh,[In] unsigned int dwOptions) + D3DXComputeTangentFrame +
    + + +

    Generates an optimized face remapping for a triangle list.

    +
    +

    Pointer to triangle list indices to use for ordering vertices.

    +

    Number of faces in the triangle list. For 16-bit meshes, this is limited to 2^16 - 1 (65535) or fewer faces.

    +

    Number of vertices referenced by the triangle list.

    +

    Flag indicating index type: TRUE if indices are 32-bit (more than 65535 indices), if indices are 16-bit (65535 or fewer indices).

    +

    Pointer to the original mesh face that was split to generate the current face.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This function's optimization procedure is functionally equivalent to calling with the flag, but this function makes more efficient use of vertex caches.

    +
    + + bb205376 + HRESULT D3DXOptimizeFaces([In] const void* pbIndices,[In] unsigned int cFaces,[In] unsigned int cVertices,[In] BOOL b32BitIndices,[In, Buffer] int* pFaceRemap) + D3DXOptimizeFaces +
    + + +

    Welds together replicated vertices that have equal attributes. This method uses specified epsilon values for equality comparisons.

    +
    +

    Pointer to an object, the mesh from which to weld vertices.

    +

    Combination of one or more flags from D3DXWELDEPSILONSFLAGS.

    +

    Pointer to a D3DXWeldEpsilons structure, specifying the epsilon values to be used for this method. Use null to initialize all structure members to a default value of 1.0e-6f.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the source mesh. If the edge has no adjacent faces, the value is 0xffffffff. If this parameter is set to null, will be called to create logical adjacency information.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the optimized mesh. If the edge has no adjacent faces, the value is 0xffffffff.

    +

    An array of DWORDs, one per face, that identifies the original mesh face that corresponds to each face in the welded mesh.

    +

    Address of a reference to an interface, which contains a DWORD for each vertex that specifies how the new vertices map to the old vertices. This remap is useful if you need to alter external data based on the new vertex mapping.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This function uses supplied adjacency information to determine the points that are replicated. Vertices are merged based on an epsilon comparison. Vertices with equal position must already have been calculated and represented by point-representative data.

    This function combines logically-welded vertices that have similar components, such as normals or texture coordinates within pEpsilons.

    The following example code calls this function with welding enabled. Vertices are compared using epsilon values for normal vector and vertex position. A reference is returned to a face remapping array (pFaceRemap).

     TCHAR            strMediaPath[512];       // X-file path 	
    +            LPD3DXBUFFER     pAdjacencyBuffer = null; // adjacency data buffer	
    +            LPD3DXBUFFER     pD3DXMtrlBuffer  = null; // material buffer	
    +            LPD3DXMESH       pMesh            = null; // mesh object	
    +            DWORD            m_dwNumMaterials;        // number of materials	
    +             Epsilons;                // structure with epsilon values	
    +            DWORD            *pFaceRemap[65536];      // face remapping array	
    +            DWORD            i;                       // internal variable // Load the mesh from the specified file hr =  ( strMediaPath, , m_pd3dDevice, &pAdjacencyBuffer, &pD3DXMtrlBuffer, null, &m_dwNumMaterials, &pMesh ) ) if( FAILED( hr ) )  goto End;              // Go to error handling // Set epsilon values Epsilons.Normal = 0.001; Epsilons.Position = 0.1; // Weld the vertices for( i=0; i < 65536; i++ ) {  pFaceRemap[i] = 0;  } hr =  ( pMesh, , &Epsilons, (DWORD*)pAdjacencyBuffer->GetBufferPointer(), (DWORD*)pAdjacencyBuffer->GetBufferPointer(), (DWORD*)pFaceRemap, null ) if( FAILED( hr ) )  goto End;              // Go to error handling	
    +            
    +
    + + bb205562 + HRESULT D3DXWeldVertices([In] ID3DXMesh* pMesh,[In] unsigned int Flags,[In] const D3DXWELDEPSILONS* pEpsilons,[In] const unsigned int* pAdjacencyIn,[In] unsigned int* pAdjacencyOut,[In] unsigned int* pFaceRemap,[In] ID3DXBuffer** ppVertexRemap) + D3DXWeldVertices +
    + + +

    Generates an output vertex declaration from the input declaration. The output declaration is intended for use by the mesh tessellation functions.

    +
    +

    Pointer to the output vertex declaration. See .

    +

    Pointer to the input vertex declaration. See .

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: .

    + + bb172861 + HRESULT D3DXGenerateOutputDecl([In, Buffer] D3DVERTEXELEMENT9* pOutput,[In, Buffer] const D3DVERTEXELEMENT9* pInput) + D3DXGenerateOutputDecl +
    + + +

    Creates a buffer object.

    +
    +

    Size of the buffer to create, in bytes.

    +

    Address of a reference to an interface, representing the created buffer object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: E_OUTOFMEMORY.

    + + bb172753 + HRESULT D3DXCreateBuffer([In] unsigned int NumBytes,[In] ID3DXBuffer** ppBuffer) + D3DXCreateBuffer +
    + + +

    Loads a patch mesh from an object.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    For mesh files that do not contain effect instance information, default effect instances will be generated from the material information in the .x file. A default effect instance will have default values that correspond to the members of the structure.

    The default texture name is also filled in, but is handled differently. The name will be Texture0@Name, which corresponds to an effect variable by the name of "Texture0" with an annotation called "Name." This will contain the string file name for the texture.

    +
    + + bb172896 + HRESULT D3DXLoadPatchMeshFromXof([In] ID3DXFileData* pXofObjMesh,[In] unsigned int Options,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXBuffer** ppMaterials,[In] ID3DXBuffer** ppEffectInstances,[In] unsigned int* pNumMaterials,[In] ID3DXPatchMesh** ppMesh) + D3DXLoadPatchMeshFromXof +
    + + +

    Tessellates the given mesh using the N-patch tessellation scheme.

    +
    +

    Pointer to an interface, representing the mesh to tessellate.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the source mesh. This parameter may be null.

    +

    Number of segments per edge to tessellate.

    +

    Set to TRUE to use quadratic interpolation for normals; set to for linear interpolation.

    +

    Address of a reference to an interface, representing the returned tessellated mesh.

    +

    Address of a reference to an interface. If the value of this parameter is not set to null, this buffer will contain an array of three DWORDs per face that specify the three neighbors for each face in the output mesh. This parameter may be null.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function tessellates by using the N-patch algorithm.

    +
    + + bb205469 + HRESULT D3DXTessellateNPatches([In] ID3DXMesh* pMeshIn,[In] const unsigned int* pAdjacencyIn,[In] float NumSegs,[In] BOOL QuadraticInterpNormals,[In] ID3DXMesh** ppMeshOut,[In] ID3DXBuffer** ppAdjacencyOut) + D3DXTessellateNPatches +
    + + +

    Calculates per-triangle IMT's from a custom application-specified signal that varies over the surface of the mesh (generally at a higher frequency than vertex data). The signal is evaluated via a user-specified callback function.

    +
    +

    A reference to an input mesh (see ) which contains the object geometry for calculating the IMT.

    +

    Zero-based texture coordinate index that identifies which set of texture coordinates to use.

    +

    The number of components in each data point in the signal.

    +

    The maximum distance between vertices; the algorithm continues subdividing until the distance between all vertices is less than or equal to fMaxUVDistance.

    +

    Texture wrap options. This is a combination of one or more FLAGS.

    +

    A reference to a user-provided evaluator function, which will be used to compute the signal value at arbitrary U,V coordinates. The function follows the prototype of LPD3DXIMTSIGNALCALLBACK.

    +

    A reference to a user-defined value which is passed to the signal callback function. Typically used by an application to pass a reference to a data structure that provides context information for the callback function.

    +

    A reference to a callback function to monitor IMT computation progress.

    +

    A reference to a user-defined variable which is passed to the status callback function. Typically used by an application to pass a reference to a data structure that provides context information for the callback function.

    +

    A reference to the buffer (see ) containing the returned IMT array. This array can be provided as input to the D3DX UVAtlas Functions to prioritize texture-space allocation in the texture parameterization.

    +

    If the function succeeds, the return value is ; otherwise, the value is .

    + +

    This function requires that the input mesh contain a signal-to-mesh texture mapping (ie. texture coordinates). It allows the user to define a signal arbitrarily over the surface of the mesh.

    +
    + + bb172739 + HRESULT D3DXComputeIMTFromSignal([In] ID3DXMesh* pMesh,[In] unsigned int dwTextureIndex,[In] unsigned int uSignalDimension,[In] float fMaxUVDistance,[In] unsigned int dwOptions,[In] __function__stdcall* pSignalCallback,[In] void* pUserData,[In] __function__stdcall* pStatusCallback,[In] void* pUserContext,[In] ID3DXBuffer** ppIMTData) + D3DXComputeIMTFromSignal +
    + + +

    Validates a patch mesh, returning the number of degenerate vertices and patches.

    +
    +

    Pointer to an interface, representing the patch mesh to be tested.

    +

    Returns the number of degenerate vertices in the patch mesh.

    +

    Returns the number of degenerate patches in the patch mesh.

    +

    Returns a reference to a buffer containing a string of errors and warnings that explain the problems found in the patch mesh.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This method validates the mesh by checking for invalid indices. Error information is available from the debugger output.

    +
    + + bb205483 + HRESULT D3DXValidPatchMesh([In] ID3DXPatchMesh* pMesh,[In] unsigned int* dwcDegenerateVertices,[In] unsigned int* dwcDegeneratePatches,[In] ID3DXBuffer** ppErrorsAndWarnings) + D3DXValidPatchMesh +
    + + +

    Validates a mesh.

    +
    +

    Pointer to an interface, representing the mesh to be tested.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh to be tested.

    +

    Returns a buffer containing a string of errors and warnings, which explain the problems found in the mesh.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: D3DXERR_INVALIDMESH, , E_OUTOFMEMORY.

    + +

    This method validates the mesh by checking for invalid indices. Error information is available from the debugger output.

    +
    + + bb205482 + HRESULT D3DXValidMesh([In] ID3DXMesh* pMeshIn,[In] const unsigned int* pAdjacency,[In] ID3DXBuffer** ppErrorsAndWarnings) + D3DXValidMesh +
    + + +

    Splits a mesh into meshes smaller than the specified size.

    +
    +

    Pointer to an interface, representing the source mesh.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh to be simplified.

    +

    Maximum number of vertices in the resulting mesh.

    +

    Option flags for the new meshes.

    +

    Number of meshes returned.

    +

    Buffer containing an array of interfaces for the new meshes. For a source mesh split into n meshes, ppMeshArrayOut is an array of n references.

    +

    Buffer containing an array of adjacency arrays (DWORDs) for the new meshes. See . This parameter is optional.

    +

    Buffer containing an array of face remap arrays (DWORDs) for the new meshes. See . This parameter is optional.

    +

    Buffer containing an array of vertex remap arrays for the new meshes. See . This parameter is optional.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    A common use of this function is to split a mesh with 32-bit indices (more than 65535 vertices) into more than one mesh, each of which has 16-bit indices.

    The adjacency, vertex remap and face remap arrays are arrays are DWORDs where each array contains n DWORD references, followed by the DWORD data referenced by the references. For example, to obtain the face remap information for face 3 in mesh 2, the following code could be used, assuming the face remap data was returned in a variable named ppFaceRemapArrayOut.

     const DWORD **face_remaps =  static_cast<DWORD **>(ppFaceRemapArrayOut->GetBufferPointer());	
    +            const DWORD remap = face_remaps[2][3];	
    +            
    +
    + + bb205465 + HRESULT D3DXSplitMesh([In] ID3DXMesh* pMeshIn,[In] const unsigned int* pAdjacencyIn,[In] const unsigned int MaxSize,[In] const unsigned int Options,[In] unsigned int* pMeshesOut,[In] ID3DXBuffer** ppMeshArrayOut,[In] ID3DXBuffer** ppAdjacencyArrayOut,[In] ID3DXBuffer** ppFaceRemapArrayOut,[In] ID3DXBuffer** ppVertRemapArrayOut) + D3DXSplitMesh +
    + + +

    Computes the tangent vectors for the texture coordinates given in the texture stage. Provided to support legacy applications. Use for better results.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    If the mesh vertex declaration specifies tangent or binormal fields, will update any user-supplied tangent or binormal data. Alternatively, set TangentIndex to D3DX_DEFAULT to not update the user-supplied tangent data, or set BinormIndex to D3DX_DEFAULT to not update the user-supplied binormal data. TexStageIndex cannot be set to D3DX_DEFAULT.

    depends on the mesh vertex declaration containing either the binormal field (BinormIndex), the tangent field (TangentIndex), or both. If both are missing, this function will fail.

    This function simply calls with the following input parameters:

     ( Mesh, , TexStageIndex, ( BinormIndex == D3DX_DEFAULT ) ? D3DX_DEFAULT : , // provides backward function compatibility BinormIndex, ( TangentIndex == D3DX_DEFAULT ) ? D3DX_DEFAULT : , TangentIndex, D3DX_DEFAULT, // do not store normals 0, ( Wrap ?  : 0 ) |  | , pAdjacency, -1.01f, -0.01f, -1.01f, null, null);	
    +            
    +
    + + bb172743 + HRESULT D3DXComputeTangent([In] ID3DXMesh* Mesh,[In] unsigned int TexStage,[In] unsigned int TangentIndex,[In] unsigned int BinormIndex,[In] unsigned int Wrap,[In] const unsigned int* pAdjacency) + D3DXComputeTangent +
    + + +

    Determines if a ray intersects with a mesh.

    +
    +

    Pointer to an interface, representing the mesh to be tested.

    +

    Pointer to a structure, specifying the point where the ray begins.

    +

    Pointer to a structure, specifying the direction of the ray.

    +

    Pointer to a . If the ray intersects a triangular face on the mesh, this value will be set to TRUE. Otherwise, this value is set to .

    +

    Pointer to an index value of the face closest to the ray origin, if pHit is TRUE.

    +

    Pointer to a barycentric hit coordinate, U.

    +

    Pointer to a barycentric hit coordinate, V.

    +

    Pointer to a ray intersection parameter distance.

    +

    Pointer to an object, containing an array of D3DXINTERSECTINFO structures.

    +

    Pointer to a DWORD that contains the number of entries in the ppAllHits array.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be: E_OUTOFMEMORY.

    + +

    The function provides a way to understand points in and around a triangle, independent of where the triangle is actually located. This function returns the resulting point by using the following equation: V1 + U(V2 - V1) + V(V3 - V1).

    Any point in the plane V1V2V3 can be represented by the barycentric coordinate (U,V). The parameter U controls how much V2 gets weighted into the result, and the parameter V controls how much V3 gets weighted into the result. Lastly, the value of [1 - (U + V)] controls how much V1 gets weighted into the result.

    Barycentric coordinates are a form of general coordinates. In this context, using barycentric coordinates represents a change in coordinate systems. What holds true for Cartesian coordinates holds true for barycentric coordinates.

    Barycentric coordinates define a point inside a triangle in terms of the triangle's vertices. For a more in-depth description of barycentric coordinates, see Mathworld's Barycentric Coordinates Description.

    +
    + + bb172882 + HRESULT D3DXIntersect([In] ID3DXBaseMesh* pMesh,[In] const D3DXVECTOR3* pRayPos,[In] const D3DXVECTOR3* pRayDir,[In] BOOL* pHit,[In] unsigned int* pFaceIndex,[In] float* pU,[In] float* pV,[In] float* pDist,[In] ID3DXBuffer** ppAllHits,[In] unsigned int* pCountOfHits) + D3DXIntersect +
    + + +

    Pack mesh partitioning data into an atlas.

    +
    +

    Pointer to an input mesh (see ) which contains the object geometry for calculating the atlas. At a minimum, the mesh must contain position data and 2D texture coordinates.

    +

    Texture width.

    +

    Texture height.

    +

    The minimum distance, in texels, between two charts on the atlas. The gutter is always scaled by the width; so, if a gutter of 2.5 is used on a 512x512 texture, then the minimum distance between two charts is 2.5 / 512.0 texels.

    +

    Zero-based texture coordinate index that identifies which set of texture coordinates to use.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh. It should be derived from the ppPartitionResultAdjacency returned from . This value cannot be null, because Pack needs to know where charts were cut in the partition step in order to find the edges of each chart.

    +

    A reference to a callback function (see LPD3DXUVATLASCB) that is useful for monitoring progress.

    +

    Specify how often D3DX will call the callback; a reasonable default value is 0.0001f.

    +

    A void reference to be passed back to the callback function.

    +

    This options parameter is currently reserved.

    +

    A reference to an containing the array of the final face-partitioning. Each element contains one DWORD per face.

    +

    If the function succeeds, the return value is ; otherwise, the value is .

    + + bb205480 + HRESULT D3DXUVAtlasPack([In] ID3DXMesh* pMesh,[In] unsigned int uWidth,[In] unsigned int uHeight,[In] float fGutter,[In] unsigned int dwTextureIndex,[In] const unsigned int* pdwPartitionResultAdjacency,[In] __function__stdcall* pStatusCallback,[In] float fCallbackFrequency,[In] void* pUserContext,[In] unsigned int dwOptions,[In] ID3DXBuffer* pFacePartitioning) + D3DXUVAtlasPack +
    + + +

    Loads a skin mesh from a DirectX .x file data object.

    +
    +

    Pointer to an interface, representing the file data object to load.

    +

    Combination of one or more flags, from the D3DXMESH enumeration, specifying creation options for the mesh.

    +

    Pointer to an interface, the device object associated with the mesh.

    +

    Address of a reference to an interface. When this method returns, this parameter is filled with an array of three DWORDs per face that specify the three neighbors for each face in the mesh.

    +

    Address of a reference to an interface. When the method returns, this parameter is filled with an array of structures.

    +

    Pointer to a buffer containing an array of effect instances, one per attribute group in the returned mesh. An effect instance is a particular instance of state information used to initialize an effect. See . For more information about accessing the buffer, see .

    +

    Pointer to the number of structures in the ppMaterials array, when the method returns.

    +

    Address of a reference to an interface, which represents the skinning information.

    +

    Address of a reference to an interface, which represents the loaded mesh.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY

    + +

    This method takes a reference to an internal object in the .x file, enabling you to load the frame hierarchy.

    For mesh files that do not contain effect instance information, default effect instances will be generated from the material information in the .x file. A default effect instance will have default values that correspond to the members of the structure.

    The default texture name is also filled in, but is handled differently. The name will be Texture0@Name, which corresponds to an effect variable by the name of "Texture0" with an annotation called "Name." This will contain the string file name for the texture.

    +
    + + bb172899 + HRESULT D3DXLoadSkinMeshFromXof([In] ID3DXFileData* pxofMesh,[In] unsigned int Options,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXBuffer** ppAdjacency,[In] ID3DXBuffer** ppMaterials,[In] ID3DXBuffer** ppEffectInstances,[In] unsigned int* pMatOut,[In] ID3DXSkinInfo** ppSkinInfo,[In] ID3DXMesh** ppMesh) + D3DXLoadSkinMeshFromXof +
    + + +

    Creates a mesh object using a declarator.

    +
    +

    Number of faces for the mesh. The valid range for this number is greater than 0, and one less than the maximum DWORD (typically 65534), because the last index is reserved.

    +

    Number of vertices for the mesh. This parameter must be greater than 0.

    +

    Combination of one or more flags from the D3DXMESH enumeration, specifying options for the mesh.

    +

    Array of elements, describing the vertex format for the returned mesh. This parameter must map directly to a flexible vertex format (FVF).

    +

    Pointer to an interface, the device object to be associated with the mesh.

    +

    Address of a reference to an interface, representing the created mesh object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb172780 + HRESULT D3DXCreateMesh([In] unsigned int NumFaces,[In] unsigned int NumVertices,[In] unsigned int Options,[In] const D3DVERTEXELEMENT9* pDeclaration,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXMesh** ppMesh) + D3DXCreateMesh +
    + + +

    Creates an empty skin mesh object using a flexible vertex format (FVF) code.

    +
    +

    Number of vertices for the skin mesh.

    +

    Combination of that describes the vertex format for the returned skin mesh.

    +

    Number of bones for the skin mesh.

    +

    Address of a reference to an interface, representing the created skin information object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    Use SetBoneInfluence to populate the empty skin mesh object returned by this method.

    +
    + + bb172794 + HRESULT D3DXCreateSkinInfoFVF([In] unsigned int NumVertices,[In] D3DFVF FVF,[In] unsigned int NumBones,[In] ID3DXSkinInfo** ppSkinInfo) + D3DXCreateSkinInfoFVF +
    + + +

    Intersects the specified ray with the given mesh subset. This provides similar functionality to .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be the following value: E_OUTOFMEMORY.

    + +

    The function provides a way to understand points in and around a triangle, independent of where the triangle is actually located. This function returns the resulting point by using the following equation: V1 + U(V2 - V1) + V(V3 - V1).

    Any point in the plane V1V2V3 can be represented by the barycentric coordinate (U,V). The parameter U controls how much V2 gets weighted into the result and the parameter V controls how much V3 gets weighted into the result. Lastly, the value of [1 - (U + V)] controls how much V1 gets weighted into the result.

    Barycentric coordinates are a form of general coordinates. In this context, using barycentric coordinates represents a change in coordinate systems. What holds true for Cartesian coordinates holds true for barycentric coordinates.

    Barycentric coordinates define a point inside a triangle in terms of the triangle's vertices. For a more in-depth description of barycentric coordinates, see Mathworld's Barycentric Coordinates Description.

    +
    + + bb172884 + HRESULT D3DXIntersectSubset([In] ID3DXBaseMesh* pMesh,[In] unsigned int AttribId,[In] const D3DXVECTOR3* pRayPos,[In] const D3DXVECTOR3* pRayDir,[In] BOOL* pHit,[In] unsigned int* pFaceIndex,[In] float* pU,[In] float* pV,[In] float* pDist,[In] ID3DXBuffer** ppAllHits,[In] unsigned int* pCountOfHits) + D3DXIntersectSubset +
    + + +

    Returns the size of a vertex for a flexible vertex format (FVF).

    +
    +

    FVF to be queried. A combination of .

    +

    The FVF vertex size, in bytes.

    + + bb172866 + unsigned int D3DXGetFVFVertexSize([In] D3DFVF FVF) + D3DXGetFVFVertexSize +
    + + +

    Returns the number of elements in the vertex declaration.

    +
    +

    A reference to the vertex declaration. See .

    +

    The number of elements in the vertex declaration.

    + + bb172863 + unsigned int D3DXGetDeclLength([In, Buffer] const D3DVERTEXELEMENT9* pDecl) + D3DXGetDeclLength +
    + + +

    Cleans a mesh, preparing it for simplification.

    +
    +

    Vertex operations to perform in preparation for mesh cleaning. See .

    +

    Pointer to an interface, representing the mesh to be cleaned.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh to be cleaned.

    +

    Address of a reference to an interface, representing the returned cleaned mesh. The same mesh is returned that was passed in if no cleaning was necessary.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the output mesh.

    +

    Returns a buffer containing a string of errors and warnings, which explain the problems found in the mesh.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This function cleans a mesh using the cleaning method and options specified in the CleanType parameter. See the enumeration for a description of the available options.

    +
    + + bb172719 + HRESULT D3DXCleanMesh([In] D3DXCLEANTYPE CleanType,[In] ID3DXMesh* pMeshIn,[In] const unsigned int* pAdjacencyIn,[In] ID3DXMesh** ppMeshOut,[In] unsigned int* pAdjacencyOut,[In] ID3DXBuffer** ppErrorsAndWarnings) + D3DXCleanMesh +
    + + +

    Computes the intersection of a ray and a triangle.

    +
    +

    Pointer to a structure, describing the first triangle vertex position.

    +

    Pointer to a structure, describing the second triangle vertex position.

    +

    Pointer to a structure, describing the third triangle vertex position.

    +

    Pointer to a structure, specifying the point where the ray begins.

    +

    Pointer to a structure, specifying the direction of the ray.

    +

    Barycentric hit coordinates, U.

    +

    Barycentric hit coordinates, V.

    +

    Ray-intersection parameter distance.

    +

    Returns TRUE if the ray intersects the area of the triangle. Otherwise, returns .

    + +

    Any point in the plane V1V2V3 can be represented by the barycentric coordinate (U,V). The parameter U controls how much V2 gets weighted into the result, and the parameter V controls how much V3 gets weighted into the result. Lastly, the value of [1 - (U + V)] controls how much V1 gets weighted into the result.

    Barycentric coordinates are a form of general coordinates. In this context, using barycentric coordinates represents a change in coordinate systems. What holds true for Cartesian coordinates holds true for barycentric coordinates.

    Barycentric coordinates define a point inside a triangle in terms of the triangle's vertices. For a more in-depth description of barycentric coordinates, see Mathworld's Barycentric Coordinates Description.

    +
    + + bb204928 + BOOL D3DXIntersectTri([In] const D3DXVECTOR3* p0,[In] const D3DXVECTOR3* p1,[In] const D3DXVECTOR3* p2,[In] const D3DXVECTOR3* pRayPos,[In] const D3DXVECTOR3* pRayDir,[In] float* pU,[In] float* pV,[In] float* pDist) + D3DXIntersectTri +
    + + +

    Converts the specified mesh subset into a single triangle strip.

    +
    +

    Pointer to an interface, representing the mesh to convert to a strip.

    +

    Attribute ID of the mesh subset to convert to strips.

    +

    Combination of one or more flags from the D3DXMESH enumeration, specifying options for creating the index buffer. Cannot be . The index buffer will be created with 32-bit or 16-bit indices, depending on the format of the index buffer of the mesh specified by the MeshIn parameter.

    +

    Pointer to an interface, representing the index buffer containing the strip.

    +

    Number of indices in the buffer returned in the ppIndexBuffer parameter.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    Before running this function, call Optimize or , with the flag set.

    +
    + + bb172749 + HRESULT D3DXConvertMeshSubsetToSingleStrip([In] ID3DXBaseMesh* MeshIn,[In] unsigned int AttribId,[In] unsigned int IBOptions,[In] IDirect3DIndexBuffer9** ppIndexBuffer,[In] unsigned int* pNumIndices) + D3DXConvertMeshSubsetToSingleStrip +
    + + +

    Creates an empty skin mesh object using a declarator.

    +
    +

    Number of vertices for the skin mesh.

    +

    Array of elements, describing the vertex format for the returned mesh.

    +

    Number of bones for the skin mesh.

    +

    Address of a reference to an interface, representing the created skin mesh object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be: E_OUTOFMEMORY.

    + +

    Use SetBoneInfluence to populate the empty skin mesh object returned by this method.

    +
    + + bb172792 + HRESULT D3DXCreateSkinInfo([In] unsigned int NumVertices,[In] const D3DVERTEXELEMENT9* pDeclaration,[In] unsigned int NumBones,[In] ID3DXSkinInfo** ppSkinInfo) + D3DXCreateSkinInfo +
    + + +

    Returns the size of a vertex from the vertex declaration.

    +
    +

    A reference to the vertex declaration. See .

    +

    The zero-based stream index.

    +

    The vertex declaration size, in bytes.

    + + bb172864 + unsigned int D3DXGetDeclVertexSize([In, Buffer] const D3DVERTEXELEMENT9* pDecl,[In] unsigned int Stream) + D3DXGetDeclVertexSize +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT D3DXGeneratePMesh([In] ID3DXMesh* pMesh,[In] const unsigned int* pAdjacency,[In] const D3DXATTRIBUTEWEIGHTS* pVertexAttributeWeights,[In] const float* pVertexWeights,[In] unsigned int MinValue,[In] unsigned int Options,[In] ID3DXPMesh** ppPMesh) + D3DXGeneratePMesh + + + +

    Tessellates a rectangular higher-order surface patch into a triangle mesh.

    +
    +

    Vertex buffer containing the patch data.

    +

    Pointer to an array of four floating-point values that identify the number of segments into which each edge of the rectangle patch should be divided when tessellated. See .

    +

    Vertex declaration structure that defines the vertex data. See .

    +

    Describes a rectangular patch. See .

    +

    Pointer to the created mesh. See .

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    Use to get the number of output vertices and indices that the tessellation function needs.

    +
    + + bb205470 + HRESULT D3DXTessellateRectPatch([In] IDirect3DVertexBuffer9* pVB,[In] const float* pNumSegs,[In] const D3DVERTEXELEMENT9* pdwInDecl,[In] const D3DRECTPATCH_INFO* pRectPatchInfo,[In] ID3DXMesh* pMesh) + D3DXTessellateRectPatch +
    + + +

    Returns a flexible vertex format (FVF) code from a declarator.

    +
    +

    Array of elements, describing the FVF code.

    +

    Pointer to a DWORD value, representing the returned combination of that describes the vertex format returned from the declarator.

    + +

    This function will fail for any declarator that does not map directly to an FVF.

    +
    + + bb172854 + HRESULT D3DXFVFFromDeclarator([In, Buffer] const D3DVERTEXELEMENT9* pDeclarator,[Out] D3DFVF* pFVF) + D3DXFVFFromDeclarator +
    + + +

    Computes a coordinate-axis oriented bounding box.

    +
    +

    Pointer to the first position.

    +

    Number of vertices.

    +

    Count or number of bytes between vertices.

    +

    Pointer to a structure, describing the returned lower-left corner of the bounding box.

    +

    Pointer to a structure, describing the returned upper-right corner of the bounding box.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: .

    + + bb204920 + HRESULT D3DXComputeBoundingBox([In] const D3DXVECTOR3* pFirstPosition,[In] unsigned int NumVertices,[In] unsigned int dwStride,[In] D3DXVECTOR3* pMin,[In] D3DXVECTOR3* pMax) + D3DXComputeBoundingBox +
    + + +

    Creates a skin mesh from another mesh.

    +
    +

    Pointer to an object, the mesh from which to create the skin mesh.

    +

    The length of the array attached to the BoneId. See .

    +

    Pointer to an array of bone combinations. See .

    +

    Address of a reference to an interface representing the created skin mesh object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be the following: E_OUTOFMEMORY.

    + + bb172793 + HRESULT D3DXCreateSkinInfoFromBlendedMesh([In] ID3DXBaseMesh* pMesh,[In] unsigned int NumBones,[In] const D3DXBONECOMBINATION* pBoneCombinationTable,[In] ID3DXSkinInfo** ppSkinInfo) + D3DXCreateSkinInfoFromBlendedMesh +
    + + +

    Performs tangent frame computations on a mesh. Tangent, binormal, and optionally normal vectors are generated. Singularities are handled as required by grouping edges and splitting vertices.

    +
    +

    Pointer to an input mesh object.

    +

    Specifies the texture coordinate input semantic. If D3DX_DEFAULT, the function assumes that there are no texture coordinates, and the function will fail unless normal vector calculation is specified.

    +

    If a mesh has multiple texture coordinates, specifies the texture coordinate to use for the tangent frame computations. If zero, the mesh has only a single texture coordinate.

    +

    Specifies the output semantic for the type, typically , that describes where the partial derivative with respect to the U texture coordinate will be stored. If D3DX_DEFAULT, then this partial derivative will not be stored.

    +

    Specifies the semantic index at which to store the partial derivative with respect to the U texture coordinate.

    +

    Specifies the type, typically , that describes where the partial derivative with respect to the V texture coordinate will be stored. If D3DX_DEFAULT, then this partial derivative will not be stored.

    +

    Specifies the semantic index at which to store the partial derivative with respect to the V texture coordinate.

    +

    Specifies the output normal semantic, typically , that describes where the normal vector at each vertex will be stored. If D3DX_DEFAULT, then this normal vector will not be stored.

    +

    Specifies the semantic index at which to store the normal vector at each vertex.

    +

    Combination of one or more flags that specify tangent frame computation options. If null, the following options will be specified:

    Description Flag Value
    Weight the normal vector length by the angle, in radians, subtended by the two edges leaving the vertex.& !( | )
    Compute orthogonal Cartesian coordinates from texture coordinates (u, v). See Remarks.& !( | )
    Textures are not wrapped in either u or v directions& !( )
    Partial derivatives with respect to texture coordinates are normalized.& !( )
    Vertices are ordered in a counterclockwise direction around each triangle.& !( )
    Use per-vertex normal vectors already present in the input mesh.& !( )

    ?

    If is not set, the input mesh is cloned. The original mesh must therefore have sufficient space to store the computed normal vector and partial derivative data.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh. The number of bytes in this array must be at least 3 * GetNumFaces * sizeof(DWORD).

    +

    Specifies the maximum cosine of the angle at which two partial derivatives are deemed to be incompatible with each other. If the dot product of the direction of the two partial derivatives in adjacent triangles is less than or equal to this threshold, then the vertices shared between these triangles will be split.

    +

    Specifies the maximum magnitude of a partial derivative at which a vertex will be deemed singular. As multiple triangles are incident on a point that have nearby tangent frames, but altogether cancel each other out (such as at the top of a sphere), the magnitude of the partial derivative will decrease. If the magnitude is less than or equal to this threshold, then the vertex will be split for every triangle that contains it.

    +

    Similar to fPartialEdgeThreshold, specifies the maximum cosine of the angle between two normals that is a threshold beyond which vertices shared between triangles will be split. If the dot product of the two normals is less than the threshold, the shared vertices will be split, forming a hard edge between neighboring triangles. If the dot product is more than the threshold, neighboring triangles will have their normals interpolated.

    +

    Address of a reference to an output mesh object that receives the computed tangent, binormal, and normal vector data.

    +

    Address of a reference to an output buffer object that receives a mapping of new vertices computed by this method to the original vertices. The buffer is an array of DWORDs, with the array size defined as the number of vertices in ppMeshOut.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    A simplified version of this function is available as .

    The computed normal vector at each vertex is always normalized to have unit length.

    The most robust solution for computing orthogonal Cartesian coordinates is to not set flags and , so that orthogonal coordinates are computed from both texture coordinates u and v. However, in this case, if either u or v is zero, then the function will compute orthogonal coordinates using or , respectively.

    +
    + + bb172745 + HRESULT D3DXComputeTangentFrameEx([In] ID3DXMesh* pMesh,[In] unsigned int dwTextureInSemantic,[In] unsigned int dwTextureInIndex,[In] unsigned int dwUPartialOutSemantic,[In] unsigned int dwUPartialOutIndex,[In] unsigned int dwVPartialOutSemantic,[In] unsigned int dwVPartialOutIndex,[In] unsigned int dwNormalOutSemantic,[In] unsigned int dwNormalOutIndex,[In] unsigned int dwOptions,[In] const unsigned int* pdwAdjacency,[In] float fPartialEdgeThreshold,[In] float fSingularPointThreshold,[In] float fNormalEdgeThreshold,[In] ID3DXMesh** ppMeshOut,[In] ID3DXBuffer** ppVertexMapping) + D3DXComputeTangentFrameEx +
    + + +

    Determines if a ray intersects the volume of a sphere's bounding box.

    +
    +

    Pointer to a structure, specifying the center coordinate of the sphere.

    +

    Radius of the sphere.

    +

    Pointer to a structure, specifying the origin coordinate of the ray.

    +

    Pointer to a structure, specifying the direction of the ray. This vector should not be (0,0,0) but does not need to be normalized.

    +

    Returns TRUE if the ray intersects the volume of the sphere's bounding box. Otherwise, returns .

    + +

    determines if the ray intersects the volume of the sphere's bounding box, not just the surface of the sphere.

    +
    + + bb204995 + BOOL D3DXSphereBoundProbe([In] const D3DXVECTOR3* pCenter,[In] float Radius,[In] const D3DXVECTOR3* pRayPosition,[In] const D3DXVECTOR3* pRayDirection) + D3DXSphereBoundProbe +
    + + +

    Create a UV atlas for a mesh.

    +
    +

    Pointer to an input mesh (see ) which contains the object geometry for calculating the atlas. At a minimum, the mesh must contain position data and 2D texture coordinates.

    +

    The maximum number of charts to partition the mesh into. See remarks about the partitioning modes. Use 0 to tell D3DX that the atlas should be parameterized based on stretch.

    +

    The amount of stretching allowed. 0 means no stretching is allowed, 1 means any amount of stretching can be used.

    +

    Texture width.

    +

    Texture height.

    +

    The minimum distance, in texels, between two charts on the atlas. The gutter is always scaled by the width; so, if a gutter of 2.5 is used on a 512x512 texture, then the minimum distance between two charts is 2.5 / 512.0 texels.

    +

    Zero-based texture coordinate index that identifies which set of texture coordinates to use.

    +

    A reference to an array of adjacency data. with 3 DWORDs per face, indicating which triangles are adjacent to each other (see ).

    +

    An array with 3 DWORDS per face. Each face indicates if an edge is false or not. A non-false edge is indicated by -1, a false edge is indicated by any other value. This enables the parameterization of a mesh of quads where the edges down the middle of each quad will not be cut.

    +

    A reference to an array of integrated metric tensors that describes how to stretch a triangle (see IntegratedMetricTensor).

    +

    A reference to a callback function (see LPD3DXUVATLASCB) that is useful for monitoring progress.

    +

    Specify how often D3DX will call the callback; a reasonable default value is 0.0001f.

    +

    Pointer to a user-defined value which is passed to the callback function; typically used by an application to pass a reference to a data structure that provides context information for the callback function.

    +

    Specify the quality of the charts generated. See D3DXUVATLAS.

    +

    Pointer to the created mesh with the atlas (see ).

    +

    A reference to an array of the final face-partitioning data. Each element contains one DWORD per face (see ).

    +

    A reference to an array of remapped vertices. Each array element identifies the original vertex that each final vertex came from (if the vertex was split during remapping). Each array element contains one DWORD per vertex.

    +

    A reference to the maximum stretch value generated by the atlas algorithm. The range is between 0.0 and 1.0.

    +

    A reference to the number of charts created by the atlas algorithm. If dwMaxChartNumber is too low, this parameter will return the minimum number of charts required to create an atlas.

    +

    If the function succeeds, the return value is ; otherwise, the value is .

    + +

    can partition mesh geometry two ways:

    • Based on the number of charts
    • Based on the maximum allowed stretch. If the maximum allowed stretch is 0, each triangle will likely be in its own chart.
    +
    + + bb205479 + HRESULT D3DXUVAtlasCreate([In] ID3DXMesh* pMesh,[In] unsigned int uMaxChartNumber,[In] float fMaxStretch,[In] unsigned int uWidth,[In] unsigned int uHeight,[In] float fGutter,[In] unsigned int dwTextureIndex,[In] const unsigned int* pdwAdjacency,[In] const unsigned int* pdwFalseEdgeAdjacency,[In] const float* pfIMTArray,[In] __function__stdcall* pStatusCallback,[In] float fCallbackFrequency,[In] void* pUserContext,[In] unsigned int dwOptions,[In] ID3DXMesh** ppMeshOut,[In] ID3DXBuffer** ppFacePartitioning,[In] ID3DXBuffer** ppVertexRemapArray,[In] float* pfMaxStretchOut,[In] unsigned int* puNumChartsOut) + D3DXUVAtlasCreate +
    + + +

    Create a UV atlas for a mesh.

    +
    +

    Pointer to an input mesh (see ) that contains the object geometry for calculating the atlas. At a minimum, the mesh must contain position data and 2D texture coordinates.

    +

    The maximum number of charts to partition the mesh into. See remarks about the partitioning modes. Use 0 to tell D3DX that the atlas should be parameterized based on stretch.

    +

    The amount of stretching allowed. 0 means no stretching is allowed, 1 means any amount of stretching can be used.

    +

    Zero-based texture coordinate index that identifies which set of texture coordinates to use.

    +

    A reference to an array of adjacency data with 3 DWORDs per face, indicating which triangles are adjacent to each other (see ).

    +

    An array with 3 DWORDS per face. Each face indicates if an edge is false or not. A non-false edge is indicated by -1, a false edge is indicated by any other value. This enables the parameterization of a mesh of quads where the edges down the middle of each quad will not be cut.

    +

    A reference to an array of integrated metric tensors that describes how to stretch a triangle (see IntegratedMetricTensor).

    +

    A reference to a callback function (see LPD3DXUVATLASCB) that is useful for monitoring progress.

    +

    Specify how often D3DX will call the callback; a reasonable default value is 0.0001f.

    +

    Pointer to a user-defined value that is passed to the callback function; typically used by an application to pass a reference to a data structure that provides context information for the callback function.

    +

    Specify the quality of the charts generated by combining one or more D3DXUVATLAS flags.

    +

    Pointer to the created mesh with the atlas (see ).

    +

    A reference to an array of the final face-partitioning data. Each element contains one DWORD per face (see ).

    +

    A reference to an array of remapped vertices. Each array element identifies the original vertex each final vertex came from (if the vertex was split during remapping). Each array element contains one DWORD per vertex.

    +

    Address of a reference to an interface. This buffer will contain an array of three DWORDs per face that specify the three neighbors for each face in the output mesh. This parameter must not be null, because the subsequent call to () requires it.

    +

    A reference to the maximum stretch value generated by the atlas algorithm. The range is between 0.0 and 1.0.

    +

    A reference to the number of charts created by the atlas algorithm. If dwMaxChartNumber is too low, this parameter will return the minimum number of charts required to create an atlas.

    +

    If the function succeeds, the return value is ; otherwise, the value is .

    + +

    is similar to , except that does not performing the final packing step.

    +
    + + bb205481 + HRESULT D3DXUVAtlasPartition([In] ID3DXMesh* pMesh,[In] unsigned int uMaxChartNumber,[In] float fMaxStretch,[In] unsigned int dwTextureIndex,[In] const unsigned int* pdwAdjacency,[In] const unsigned int* pdwFalseEdgeAdjacency,[In] const float* pfIMTArray,[In] __function__stdcall* pStatusCallback,[In] float fCallbackFrequency,[In] void* pUserContext,[In] unsigned int dwOptions,[In] ID3DXMesh** ppMeshOut,[In] ID3DXBuffer** ppFacePartitioning,[In] ID3DXBuffer** ppVertexRemapArray,[In] ID3DXBuffer** ppPartitionResultAdjacency,[In] float* pfMaxStretchOut,[In] unsigned int* puNumChartsOut) + D3DXUVAtlasPartition +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT D3DXCreatePMeshFromStream([In] IStream* pStream,[In] unsigned int Options,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXBuffer** ppMaterials,[In] ID3DXBuffer** ppEffectInstances,[In] unsigned int* pNumMaterials,[In] ID3DXPMesh** ppPMesh) + D3DXCreatePMeshFromStream + + + +

    Calculates per-triangle IMT's from a texture mapped onto a mesh, to be used optionally as input to the D3DX UVAtlas Functions.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is ; otherwise, the value is .

    + +

    Given a texture that maps over the surface of the mesh, the algorithm computes the IMT for each face. This will cause triangles containing lower-frequency signal data to take up less space in the final texture atlas when parameterized with the UVAtlas functions. The texture is assumed to be interpolated over the mesh bilinearly.

    +
    + + bb172740 + HRESULT D3DXComputeIMTFromTexture([In] ID3DXMesh* pMesh,[In] IDirect3DTexture9* pTexture,[In] unsigned int dwTextureIndex,[In] unsigned int dwOptions,[In] __function__stdcall* pStatusCallback,[In] void* pUserContext,[In] ID3DXBuffer** ppIMTData) + D3DXComputeIMTFromTexture +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT D3DXCreateSPMesh([In] ID3DXMesh* pMesh,[In] const unsigned int* pAdjacency,[In] const D3DXATTRIBUTEWEIGHTS* pVertexAttributeWeights,[In] const float* pVertexWeights,[In] ID3DXSPMesh** ppSMesh) + D3DXCreateSPMesh + + + +

    Concatenates a group of meshes into one common mesh. This method can optionally apply a matrix transformation to each input mesh and its texture coordinates.

    +
    +

    Array of input mesh references (see ). The number of elements in the array is NumMeshes.

    +

    Number of input meshes to concatenate.

    +

    Mesh creation options; this is a combination of one or more D3DXMESH flags. The mesh creation options are equivalent to the options parameter required by .

    +

    Optional array of geometry transforms. The number of elements in the array is NumMeshes; each element is a transformation matrix (see ). May be null.

    +

    Optional array of texture transforms. The number of elements in the array is NumMeshes; each element is a transformation matrix (see ). This parameter may be null.

    +

    Optional reference to a vertex declaration (see ). This parameter may be null.

    +

    Pointer to a device that is used to create the new mesh.

    +

    Address of a reference to the mesh created (see ).

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of these: , E_OUTOFMEMORY.

    + +

    If no vertex declaration is given as part of the Options mesh creation parameter, the method will generate a union of all of the vertex declarations of the submeshes, promoting channels and types if necessary. The method will create an attribute table from attribute tables of the input meshes. To ensure creation of an attribute table, call Optimize with Flags set to and (see D3DXMESHOPT).

    +
    + + bb172746 + HRESULT D3DXConcatenateMeshes([In] ID3DXMesh** ppMeshes,[In] unsigned int NumMeshes,[In] unsigned int Options,[In] const D3DXMATRIX* pGeomXForms,[In] const D3DXMATRIX* pTextureXForms,[In, Buffer] const D3DVERTEXELEMENT9* pDecl,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXMesh** ppMeshOut) + D3DXConcatenateMeshes +
    + + +

    Determines whether a ray intersects the volume of a box's bounding box.

    +
    +

    Pointer to a , describing the lower-left corner of the bounding box. See Remarks.

    +

    Pointer to a structure, describing the upper-right corner of the bounding box. See Remarks.

    +

    Pointer to a structure, specifying the origin coordinate of the ray.

    +

    Pointer to a structure, specifying the direction of the ray. This vector should not be (0,0,0) but does not need to be normalized.

    +

    Returns TRUE if the ray intersects the volume of the box's bounding box. Otherwise, returns .

    + +

    determines if the ray intersects the volume of the box's bounding box, not just the surface of the box.

    The values passed to are xmin, xmax, ymin, ymax, zmin, and zmax. Thus, the following defines the corners of the bounding box.

     xmax, ymax, zmax	
    +            xmax, ymax, zmin	
    +            xmax, ymin, zmax	
    +            xmax, ymin, zmin	
    +            xmin, ymax, zmax	
    +            xmin, ymax, zmin	
    +            xmin, ymin, zmax	
    +            xmin, ymin, zmin	
    +            

    The depth of the bounding box in the z direction is zmax - zmin, in the y direction is ymax - ymin, and in the x direction is xmax - xmin. For example, with the following minimum and maximum vectors, min (-1, -1, -1) and max (1, 1, 1), the bounding box is defined in the following manner.

     1,  1,  1 1,  1, -1 1, -1,  1 1, -1, -1	
    +            -1,  1,  1	
    +            -1,  1, -1	
    +            -1, -1,  1	
    +            -1, -1, -l	
    +            
    +
    + + bb204916 + BOOL D3DXBoxBoundProbe([In] const D3DXVECTOR3* pMin,[In] const D3DXVECTOR3* pMax,[In] const D3DXVECTOR3* pRayPosition,[In] const D3DXVECTOR3* pRayDirection) + D3DXBoxBoundProbe +
    + + +

    Loads a mesh from a resource.

    +
    +

    Handle to the module where the resource is located, or null for the module associated with the image the operating system used to create the current process. See remarks.

    +

    Pointer to a string that specifies the resource to create the mesh from. See remarks.

    +

    Pointer to a string that specifies the resource type. See remarks.

    +

    Combination of one or more flags from the D3DXMESH enumeration that specify creation options for the mesh.

    +

    Pointer to an interface, the device object associated with the mesh.

    +

    Address of a reference to an interface. When the method returns, this parameter is filled with an array of three DWORDs per face that specify the three neighbors for each face in the mesh.

    +

    Address of a reference to an interface. When this method returns, this parameter is filled with an array of structures, containing information saved in the DirectX file.

    +

    Pointer to a buffer containing an array of effect instances, one per attribute group in the returned mesh. An effect instance is a particular instance of state information used to initialize an effect. See . For more information about accessing the buffer, see .

    +

    Pointer to the number of structures in the ppMaterials array, when the method returns.

    +

    Address of a reference to an interface, representing the loaded mesh.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    See FindResource to find out more about the Module, Name and Type parameters.

    All the meshes in the file will be collapsed into one output mesh. If the file contains a frame hierarchy, all the transformations will be applied to the mesh.

    For mesh files that do not contain effect instance information, default effect instances will be generated from the material information in the .x file. A default effect instance will have default values that correspond to the members of the structure.

    The default texture name is also filled in, but is handled differently. The name will be Texture0@Name, which corresponds to an effect variable by the name of "Texture0" with an annotation called "Name." This will contain the string file name for the texture.

    +
    + + bb172893 + HRESULT D3DXLoadMeshFromXResource([In] HINSTANCE Module,[In] const char* Name,[In] const char* Type,[In] unsigned int Options,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXBuffer** ppAdjacency,[In] ID3DXBuffer** ppMaterials,[In] ID3DXBuffer** ppEffectInstances,[In] unsigned int* pNumMaterials,[In] ID3DXMesh** ppMesh) + D3DXLoadMeshFromXResource +
    + + +

    Generates a simplified mesh using the provided weights that come as close as possible to the given MinValue.

    +
    +

    Pointer to an interface, representing the source mesh.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh to be simplified.

    +

    Pointer to a structure, containing the weight for each vertex component. If this parameter is set to null, a default structure is used. See Remarks.

    +

    Pointer to an array of vertex weights. If this parameter is set to null, all vertex weights are set to 1.0.

    +

    Number of vertices or faces, depending on the flag set in the Options parameter, by which to simplify the source mesh.

    +

    Specifies simplification options for the mesh. One of the flags in D3DXMESHSIMP can be set.

    +

    Address of a reference to an interface, representing the returned simplification mesh.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function generates a mesh that has MinValue vertices or faces.

    If the simplification process cannot reduce the mesh to MinValue, the call still succeeds because MinValue is a desired minimum, not an absolute minimum.

    If pVertexAttributeWeights is set to null, the following values are assigned to the default structure.

      AttributeWeights; AttributeWeights.Position  = 1.0;	
    +            AttributeWeights.Boundary =  1.0;	
    +            AttributeWeights.Normal   =  1.0;	
    +            AttributeWeights.Diffuse  =  0.0;	
    +            AttributeWeights.Specular =  0.0;	
    +            AttributeWeights.Tex[8]   =  {0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0};	
    +            

    This default structure is what most applications should use because it considers only geometric and normal adjustment. Only in special cases will the other member fields need to be modified.

    +
    + + bb205463 + HRESULT D3DXSimplifyMesh([In] ID3DXMesh* pMesh,[In] const unsigned int* pAdjacency,[In] const D3DXATTRIBUTEWEIGHTS* pVertexAttributeWeights,[In] const float* pVertexWeights,[In] unsigned int MinValue,[In] unsigned int Options,[In] ID3DXMesh** ppMesh) + D3DXSimplifyMesh +
    + + +

    Creates a mesh object using a flexible vertex format (FVF) code.

    +
    +

    Number of faces for the mesh. The valid range for this number is greater than 0, and one less than the max DWORD value, typically 232 - 1, because the last index is reserved.

    +

    Number of vertices for the mesh. This parameter must be greater than 0.

    +

    Combination of one or more flags from the D3DXMESH enumeration, specifying creation options for the mesh.

    +

    Combination of that describes the vertex format for the returned mesh. This function does not support .

    +

    Pointer to an interface, the device object to be associated with the mesh.

    +

    Address of a reference to an interface, representing the created mesh object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb172781 + HRESULT D3DXCreateMeshFVF([In] unsigned int NumFaces,[In] unsigned int NumVertices,[In] unsigned int Options,[In] D3DFVF FVF,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXMesh** ppMesh) + D3DXCreateMeshFVF +
    + + +

    Calculate per-triangle IMT's from from per-vertex data. This function allows you to calculate the IMT based off of any value in a mesh (color, normal, etc).

    +
    +

    A reference to an input mesh (see ) which contains the object geometry for calculating the IMT.

    +

    A reference to an array of per-vertex data from which IMT will be computed. The array size is uSignalStride * v, where v is the number of vertices in the mesh.

    +

    The number of floats per vertex.

    +

    The number of bytes per vertex in the array. This must be a multiple of sizeof(float)

    +

    Texture wrap options. This is a combination of one or more FLAGS.

    +

    A reference to a callback function to monitor IMT computation progress.

    +

    A reference to a user-defined variable which is passed to the status callback function. Typically used by an application to pass a reference to a data structure that provides context information for the callback function.

    +

    A reference to the buffer (see ) containing the returned IMT array. This array can be provided as input to the D3DX UVAtlas Functions to prioritize texture-space allocation in the texture parameterization.

    +

    If the function succeeds, the return value is ; otherwise, the value is .

    + + bb172738 + HRESULT D3DXComputeIMTFromPerVertexSignal([In] ID3DXMesh* pMesh,[In] const float* pfVertexSignal,[In] unsigned int uSignalDimension,[In] unsigned int uSignalStride,[In] unsigned int dwOptions,[In] __function__stdcall* pStatusCallback,[In] void* pUserContext,[In] ID3DXBuffer** ppIMTData) + D3DXComputeIMTFromPerVertexSignal +
    + + +

    Generates an optimized vertex remapping for a triangle list. This function is commonly used after applying the face remapping generated by .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    By default, a mesh uses 16 bit indices when it is created unless the application specifies otherwise. To check whether an existing mesh uses 16-bit or 32-bit indices, call and check for the flag.

    +
    + + bb205377 + HRESULT D3DXOptimizeVertices([In] const void* pbIndices,[In] unsigned int cFaces,[In] unsigned int cVertices,[In] BOOL b32BitIndices,[In, Buffer] int* pVertexRemap) + D3DXOptimizeVertices +
    + + +

    Loads a mesh from a DirectX .x file.

    +
    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Combination of one or more flags from the D3DXMESH enumeration, which specifies creation options for the mesh.

    +

    Pointer to an interface, the device object associated with the mesh.

    +

    Pointer to a buffer that contains adjacency data. The adjacency data contains an array of three DWORDs per face that specify the three neighbors for each face in the mesh. For more information about accessing the buffer, see .

    +

    Pointer to a buffer containing materials data. The buffer contains an array of structures, containing information from the DirectX file. For more information about accessing the buffer, see .

    +

    Pointer to a buffer containing an array of effect instances, one per attribute group in the returned mesh. An effect instance is a particular instance of state information used to initialize an effect. See . For more information about accessing the buffer, see .

    +

    Pointer to the number of structures in the ppMaterials array, when the method returns.

    +

    Address of a reference to an interface, representing the loaded mesh.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXLoadMeshFromXA because ANSI strings are being used.

    All the meshes in the file will be collapsed into one output mesh. If the file contains a frame hierarchy, all the transformations will be applied to the mesh.

    For mesh files that do not contain effect instance information, default effect instances will be generated from the material information in the .x file. A default effect instance will have default values that correspond to the members of the structure.

    The default texture name is also filled in, but is handled differently. The name will be Texture0@Name, which corresponds to an effect variable by the name of "Texture0" with an annotation called "Name." This will contain the string file name for the texture.

    +
    + + bb172890 + HRESULT D3DXLoadMeshFromXof([In] ID3DXFileData* pxofMesh,[In] unsigned int Options,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXBuffer** ppAdjacency,[In] ID3DXBuffer** ppMaterials,[In] ID3DXBuffer** ppEffectInstances,[In] unsigned int* pNumMaterials,[In] ID3DXMesh** ppMesh) + D3DXLoadMeshFromXof +
    + + +

    Creates a mesh from a control-patch mesh.

    +
    +

    Patch information structure. For more information, see .

    +

    Number of patches.

    +

    Number of control vertices in the patch.

    +

    Unused. Reserved for later use.

    +

    Array of elements, describing the vertex format for the returned mesh.

    +

    Pointer the device that creates the patch mesh. See .

    +

    Pointer to the object that is created.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This method takes an input patch mesh and converts it to a tessellated mesh. Patch meshes use 16-bit index buffers. Therefore, indices to LockIndexBuffer are 16 bits.

    +
    + + bb172783 + HRESULT D3DXCreatePatchMesh([In] const D3DXPATCHINFO* pInfo,[In] unsigned int dwNumPatches,[In] unsigned int dwNumVertices,[In] unsigned int dwOptions,[In, Buffer] const D3DVERTEXELEMENT9* pDecl,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXPatchMesh** pPatchMesh) + D3DXCreatePatchMesh +
    + + +

    Gets the size of the rectangle patch.

    +
    +

    Number of segments per edge to tessellate.

    +

    Pointer to a DWORD that contains the number of triangles in the patch.

    +

    Pointer to a DWORD that contains the number of vertices in the patch.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb205423 + HRESULT D3DXRectPatchSize([In] const float* pfNumSegs,[Out] unsigned int* pdwTriangles,[Out] unsigned int* pdwVertices) + D3DXRectPatchSize +
    + + +

    Tessellates a triangular higher-order surface patch into a triangle mesh.

    +
    +

    Vertex buffer containing the patch data.

    +

    Pointer to an array of three floating-point values that identify the number of segments into which each edge of the triangle patch should be divided when tessellated. See .

    +

    Vertex declaration structure that defines the vertex data. See .

    +

    Describes a triangle patch. See .

    +

    Pointer to the created mesh. See .

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    Use to get the number of output vertices and indices that the tessellation function needs.

    +
    + + bb205471 + HRESULT D3DXTessellateTriPatch([In] IDirect3DVertexBuffer9* pVB,[In] const float* pNumSegs,[In] const D3DVERTEXELEMENT9* pInDecl,[In] const D3DTRIPATCH_INFO* pTriPatchInfo,[In] ID3DXMesh* pMesh) + D3DXTessellateTriPatch +
    + + +

    Computes a bounding sphere for the mesh.

    +
    +

    Pointer to first position.

    +

    Number of vertices.

    +

    Number of bytes between position vectors. Use GetNumBytesPerVertex, , or to get the vertex stride.

    +

    structure, defining the coordinate center of the returned bounding sphere.

    +

    Radius of the returned bounding sphere.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: .

    + + bb172736 + HRESULT D3DXComputeBoundingSphere([In] const D3DXVECTOR3* pFirstPosition,[In] unsigned int NumVertices,[In] unsigned int dwStride,[In] D3DXVECTOR3* pCenter,[In] float* pRadius) + D3DXComputeBoundingSphere +
    + + +

    Loads a mesh from a DirectX .x file.

    +
    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Combination of one or more flags from the D3DXMESH enumeration, which specifies creation options for the mesh.

    +

    Pointer to an interface, the device object associated with the mesh.

    +

    Pointer to a buffer that contains adjacency data. The adjacency data contains an array of three DWORDs per face that specify the three neighbors for each face in the mesh. For more information about accessing the buffer, see .

    +

    Pointer to a buffer containing materials data. The buffer contains an array of structures, containing information from the DirectX file. For more information about accessing the buffer, see .

    +

    Pointer to a buffer containing an array of effect instances, one per attribute group in the returned mesh. An effect instance is a particular instance of state information used to initialize an effect. See . For more information about accessing the buffer, see .

    +

    Pointer to the number of structures in the ppMaterials array, when the method returns.

    +

    Address of a reference to an interface, representing the loaded mesh.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXLoadMeshFromXA because ANSI strings are being used.

    All the meshes in the file will be collapsed into one output mesh. If the file contains a frame hierarchy, all the transformations will be applied to the mesh.

    For mesh files that do not contain effect instance information, default effect instances will be generated from the material information in the .x file. A default effect instance will have default values that correspond to the members of the structure.

    The default texture name is also filled in, but is handled differently. The name will be Texture0@Name, which corresponds to an effect variable by the name of "Texture0" with an annotation called "Name." This will contain the string file name for the texture.

    +
    + + bb172890 + HRESULT D3DXLoadMeshFromXW([In] const wchar_t* pFilename,[In] unsigned int Options,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXBuffer** ppAdjacency,[In] ID3DXBuffer** ppMaterials,[In] ID3DXBuffer** ppEffectInstances,[In] unsigned int* pNumMaterials,[In] ID3DXMesh** ppMesh) + D3DXLoadMeshFromXW +
    + + +

    Loads a mesh from memory.

    +
    +

    Pointer to the memory buffer which contains the mesh data.

    +

    Size of the file in memory, in bytes.

    +

    Combination of one or more flags from the D3DXMESH enumeration, specifying creation options for the mesh.

    +

    Pointer to an interface, the device object associated with the mesh.

    +

    Address of a reference to an interface. When the method returns, this parameter is filled with an array of three DWORDs per face that specify the three neighbors for each face in the mesh.

    +

    Address of a reference to an interface. When this method returns, this parameter is filled with an array of structures, containing information saved in the DirectX file.

    +

    Pointer to a buffer containing an array of effect instances, one per attribute group in the returned mesh. An effect instance is a particular instance of state information used to initialize an effect. See . For more information about accessing the buffer, see .

    +

    Pointer to the number of structures in the ppMaterials array, when the method returns.

    +

    Address of a reference to an interface, representing the loaded mesh.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    All the meshes in the file will be collapsed into one output mesh. If the file contains a frame hierarchy, all the transformations will be applied to the mesh.

    For mesh files that do not contain effect instance information, default effect instances will be generated from the material information in the .x file. A default effect instance will have default values that correspond to the members of the structure.

    The default texture name is also filled in, but is handled differently. The name will be Texture0@Name, which corresponds to an effect variable by the name of "Texture0" with an annotation called "Name." This will contain the string file name for the texture.

    +
    + + bb172891 + HRESULT D3DXLoadMeshFromXInMemory([In] const void* Memory,[In] unsigned int SizeOfMemory,[In] unsigned int Options,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXBuffer** ppAdjacency,[In] ID3DXBuffer** ppMaterials,[In] ID3DXBuffer** ppEffectInstances,[In] unsigned int* pNumMaterials,[In] ID3DXMesh** ppMesh) + D3DXLoadMeshFromXInMemory +
    + + +

    Convert the specified mesh subset into a series of strips.

    +
    +

    Pointer to an interface, representing the mesh to convert to a strip.

    +

    Attribute ID of the mesh subset to convert to strips.

    +

    Combination of one or more flags from the D3DXMESH enumeration, specifying options for creating the index buffer. Cannot be . The index buffer will be created with 32-bit or 16-bit indices depending on the format of the index buffer of the mesh specified by the MeshIn parameter.

    +

    Pointer to an interface, representing index buffer containing the strip.

    +

    Number of indices in the buffer returned in the ppIndexBuffer parameter.

    +

    Buffer containing an array of one DWORD per strip, which specifies the number of triangles in the that strip.

    +

    Number of individual strips in the index buffer and corresponding strip length array.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    Before running this function, call Optimize or , with the flag set.

    +
    + + bb172750 + HRESULT D3DXConvertMeshSubsetToStrips([In] ID3DXBaseMesh* MeshIn,[In] unsigned int AttribId,[In] unsigned int IBOptions,[In] IDirect3DIndexBuffer9** ppIndexBuffer,[In] unsigned int* pNumIndices,[In] ID3DXBuffer** ppStripLengths,[In] unsigned int* pNumStrips) + D3DXConvertMeshSubsetToStrips +
    + + +

    Calculate per-triangle IMT's from per-texel data. This function is similar to , but it uses a float array to pass in the data, and it can calculate higher dimensional values than 4.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is ; otherwise, the value is .

    + + bb172737 + HRESULT D3DXComputeIMTFromPerTexelSignal([In] ID3DXMesh* pMesh,[In] unsigned int dwTextureIndex,[In] float* pfTexelSignal,[In] unsigned int uWidth,[In] unsigned int uHeight,[In] unsigned int uSignalDimension,[In] unsigned int uComponents,[In] unsigned int dwOptions,[In] __function__stdcall* pStatusCallback,[In] void* pUserContext,[In] ID3DXBuffer** ppIMTData) + D3DXComputeIMTFromPerTexelSignal +
    + + +

    Gets the size of the triangle patch.

    +
    +

    Number of segments per edge to tessellate.

    +

    Pointer to a DWORD that contains the number of triangles in the patch.

    +

    Pointer to a DWORD that contains the number of vertices in the triangle patch.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb205476 + HRESULT D3DXTriPatchSize([In] const float* pfNumSegs,[Out] unsigned int* pdwTriangles,[Out] unsigned int* pdwVertices) + D3DXTriPatchSize +
    + + +

    Computes unit normals for each vertex in a mesh. Provided to support legacy applications. Use for better results.

    +
    + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The input mesh must have the flag specified in its flexible vertex format (FVF).

    A normal for a vertex is generated by averaging the normals of all faces that share that vertex.

    If adjacency is provided, replicated vertices are ignored and "smoothed" over. If adjacency is not provided, replicated vertices will have normals averaged in from only the faces explicitly referencing them.

    This function simply calls with the following input parameters:

     ( pMesh, D3DX_DEFAULT, 0, D3DX_DEFAULT, 0, D3DX_DEFAULT, 0, , 0,  | , pAdjacency, -1.01f, -0.01f, -1.01f, null, null);	
    +            
    +
    + + bb172742 + HRESULT D3DXComputeNormals([In] ID3DXBaseMesh* pMesh,[In] const unsigned int* pAdjacency) + D3DXComputeNormals +
    + + +

    Disassemble a shader.

    Note??Instead of using this legacy function, we recommend that you use the API.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb172820 + HRESULT D3DXDisassembleShader([In] const void* pShader,[In] BOOL EnableColorCode,[In] const char* pComments,[In] ID3DXBuffer** ppDisassembly) + D3DXDisassembleShader +
    + + +

    Preprocesses a shader without performing compilation. This resolves all #defines and #includes, providing a self-contained shader for subsequent compilation.

    Note??Instead of using this legacy function, we recommend that you use the API.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb205398 + HRESULT D3DXPreprocessShader([In] const void* pSrcData,[In] unsigned int SrcDataSize,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + D3DXPreprocessShader +
    + + +

    Compile a shader file.

    Note??Instead of using this legacy function, we recommend that you compile offline by using the Fxc.exe command-line compiler or use the API.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_NOTIMPL, E_OUTOFMEMORY.

    E_NOTIMPL is returned if you're using 1.1 shaders (vs_1_1and ps_1_1).

    + + bb172732 + HRESULT D3DXCompileShaderFromFileW([In] const wchar_t* pSrcFile,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + D3DXCompileShaderFromFileW +
    + + +

    Creates a texture shader object from the compiled shader.

    +
    +

    Pointer to the function DWORD stream.

    +

    Returns an object which can be used to procedurally fill the contents of a texture using the functions.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb172808 + HRESULT D3DXCreateTextureShader([In] const unsigned int* pFunction,[In] ID3DXTextureShader** ppTextureShader) + D3DXCreateTextureShader +
    + + +

    Get the semantics for all shader output elements.

    +
    +

    Pointer to the shader function DWORD stream.

    +

    Pointer to an array of structures. The function will fill this array with the semantics for each output element referenced by the shader. This array is assumed to contain at least MAXD3DDECLLENGTH elements. However, calling with pSemantics = null will return the number of elements needed for pCount.

    +

    Returns the number of elements in pSemantics.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb172873 + HRESULT D3DXGetShaderOutputSemantics([In] const void* pFunction,[In, Out, Buffer] D3DXSEMANTIC* pSemantics,[InOut] unsigned int* pCount) + D3DXGetShaderOutputSemantics +
    + + +

    Gets the semantics for the shader inputs. Use this method to determine the input vertex format.

    +
    +

    Pointer to the shader function DWORD stream.

    +

    Pointer to an array of structures. The function will fill this array with the semantics for each input element referenced by the shader. This array is assumed to contain at least MAXD3DDECLLENGTH elements. However, calling with pSemantics = null will return the number of elements needed for pCount.

    +

    Returns the number of elements in pSemantics.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    Use to return a list of input semantics required by the shader. This is the way to find out what the input vertex format is for a high-level shader language (HLSL) shader. If the shader has additional inputs that your vertex declaration is missing, you could create an extra vertex stream that has a stride of 0 that has the missing components with default values. For instance, this technique could be used to provide default vertex color for models that do not specify it.

    +
    + + bb172872 + HRESULT D3DXGetShaderInputSemantics([In] const void* pFunction,[In, Out, Buffer] D3DXSEMANTIC* pSemantics,[InOut] unsigned int* pCount) + D3DXGetShaderInputSemantics +
    + + +

    Returns the name of the highest high-level shader language (HLSL) profile supported by a given device.

    +
    +

    Pointer to the device. See .

    +

    The HLSL profile name.

    If the device does not support pixel shaders then the function returns null.

    + +

    A shader profile specifies the assembly shader version to use and the capabilities available to the HLSL compiler when compiling a shader. The following table lists the pixel shader profiles that are supported.

    Shader ProfileDescription
    ps_1_1Compile to ps_1_1 version.
    ps_1_2Compile to ps_1_2 version.
    ps_1_3Compile to ps_1_3 version.
    ps_1_4Compile to ps_1_4 version.
    ps_2_0Compile to ps_2_0 version.
    ps_2_aSame as the ps_2_0 profile, with the following additional capabilities available for the compiler to target:
    • Number of Temporary Registers (r#) is greater than or equal to 22.
    • Arbitrary source swizzle.
    • Gradient instructions: dsx, dsy.
    • Predication.
    • No dependent texture read limit.
    • No limit for the number of texture instructions.
    ps_2_bSame as the ps_2_0 profile, with the following additional capabilities available for the compiler to target:
    • Number of Temporary Registers (r#) is greater than or equal to 32.
    • No limit for the number of texture instructions.
    ps_3_0Compile to ps_3_0 version.

    ?

    For more information about the differences between shader versions, see Pixel Shader Differences.

    +
    + + bb172870 + const char* D3DXGetPixelShaderProfile([In] IDirect3DDevice9* pDevice) + D3DXGetPixelShaderProfile +
    + + +

    Searches through a shader for a particular comment. The comment is identified by a four-character code (FOURCC) in the first DWORD of the comment.

    +
    +

    Pointer to the shader function DWORD stream.

    +

    FOURCC code that identifies the comment block. See FourCC Formats.

    +

    Returns a reference to the comment data (not including the comment token and FOURCC code). This value can be null.

    +

    Returns the size of the comment data in bytes. This value can be null.

    +

    If the function succeeds, the return value is . If the comment is not found, and no other error has occurred, S_FALSE is returned.

    + + bb172838 + HRESULT D3DXFindShaderComment([In] const void* pFunction,[In] unsigned int FourCC,[Out] const void** ppData,[Out] unsigned int* pSizeInBytes) + D3DXFindShaderComment +
    + + +

    Assemble a shader.

    +
    +

    Handle to a module containing the effect description. If this parameter is null, the current module will be used.

    +

    Pointer to a string that specifies the resource name. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    An optional null terminated array of structures. This value may be null.

    +

    Optional interface reference, , to use for handling #include directives. If this value is null, #includes will either be honored when compiling from a file or will cause an error when compiled from a resource or memory.

    +

    Compile options identified by various flags. The Direct3D 10 HLSL compiler is now the default. See Flags for details.

    +

    Returns a buffer containing the created shader. This buffer contains the compiled shader code, as well as any embedded debug and symbol table information.

    +

    Returns a buffer containing a listing of errors and warnings that were encountered during the compile. These are the same messages the debugger displays when running in debug mode. This value may be null.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXAssembleShaderFromResourceA because ANSI strings are being used.

    +
    + + bb172709 + HRESULT D3DXAssembleShaderFromResourceW([In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs) + D3DXAssembleShaderFromResourceW +
    + + +

    Assemble a shader.

    +
    +

    Pointer to a memory buffer that contains the shader data.

    +

    Length of the effect data, in bytes.

    +

    An optional null terminated array of structures. This value may be null.

    +

    Optional interface reference, , to use for handling #include directives. If this value is null, #includes will either be honored when compiling from a file or will cause an error when compiled from a resource or memory.

    +

    Compile options identified by various flags. The Direct3D 10 HLSL compiler is now the default. See Flags for details.

    +

    Returns a buffer containing the created shader. This buffer contains the compiled shader code, as well as any embedded debug and symbol table information.

    +

    Returns a buffer containing a listing of errors and warnings that were encountered during the compile. These are the same messages the debugger displays when running in debug mode. This value may be null.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb172707 + HRESULT D3DXAssembleShader([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs) + D3DXAssembleShader +
    + + +

    Compile a shader file.

    Note??Instead of using this legacy function, we recommend that you compile offline by using the Fxc.exe command-line compiler or use the API.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb172731 + HRESULT D3DXCompileShader([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + D3DXCompileShader +
    + + +

    Get the sampler names referenced in a shader.

    +
    +

    Pointer to the shader function DWORD stream.

    +

    Pointer to an array of LPCSTRs. The function will fill this array with references to the sampler names contained within pFunction. The maximum array size is the maximum number of sampler registers (16 for vs_3_0 and ps_3_0).

    To find the number of samplers used, check pCount after calling with pSamplers = null.

    +

    Returns the number of samplers referenced by the shader.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb172874 + HRESULT D3DXGetShaderSamplers([In] const void* pFunction,[In, Out, Buffer] const void** pSamplers,[InOut] unsigned int* pCount) + D3DXGetShaderSamplers +
    + + +

    Gets the shader-constant table embedded inside a shader.

    +
    +

    Pointer to the function DWORD stream.

    +

    Returns the constant table interface (see ) that manages the constant table.

    + +

    A constant table is generated by and embedded in the shader body. If you need additional virtual address space, see .

    +
    + + bb172871 + HRESULT D3DXGetShaderConstantTable([In] const void* pFunction,[Out] ID3DXConstantTable** ppConstantTable) + D3DXGetShaderConstantTable +
    + + +

    Assemble a shader.

    +
    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    An optional null terminated array of structures. This value may be null.

    +

    Optional interface reference, , to use for handling #include directives. If this value is null, #includes will either be honored when compiling from a file or will cause an error when compiled from a resource or memory.

    +

    Compile options identified by various flags. The Direct3D 10 HLSL compiler is now the default. See Flags for details.

    +

    Returns a buffer containing the created shader. This buffer contains the compiled shader code, as well as any embedded debug and symbol table information.

    +

    Returns a buffer containing a listing of errors and warnings that were encountered during the compile. These are the same messages the debugger displays when running in debug mode. This value may be null.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXAssembleShaderFromFileA because ANSI strings are being used.

    +
    + + bb172708 + HRESULT D3DXAssembleShaderFromFileW([In] const wchar_t* pSrcFile,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs) + D3DXAssembleShaderFromFileW +
    + + +

    Gets the shader-constant table embedded inside a shader.

    +
    +

    Pointer to the function DWORD stream.

    +

    Use the D3DXCONSTTABLE_LARGEADDRESSAWARE flag to access up to 4 GB of virtual address space (instead of the default of 2 GB). If you do not need the additional virtual address space, use .

    +

    Returns the constant table interface (see ) that manages the constant table.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    A constant table is generated by and embedded in the shader body.

    +
    + + bb943959 + HRESULT D3DXGetShaderConstantTableEx([In] const void* pFunction,[In] unsigned int Flags,[In] ID3DXConstantTable** ppConstantTable) + D3DXGetShaderConstantTableEx +
    + + +

    Returns the name of the highest high-level shader language (HLSL) profile supported by a given device.

    +
    +

    Pointer to the device. See .

    +

    The HLSL profile name.

    If the device does not support vertex shaders then the function returns null.

    + +

    A shader profile specifies the assembly shader version to use and the capabilities available to the HLSL compiler when compiling a shader. The following table lists the vertex shader profiles that are supported.

    Shader ProfileDescription
    vs_1_1Compile to vs_1_1 version.
    vs_2_0Compile to vs_2_0 version.
    vs_2_aSame as the vs_2_0 profile, with the following additional capabilities available for the compiler to target:
    • Number of Temporary Registers (r#) is greater than or equal to 13.
    • Dynamic flow control instruction.
    • Predication.
    vs_3_0Compile to vs_3_0 version.

    ?

    For more information about the differences between shader versions, see Vertex Shader Differences.

    +
    + + bb172877 + const char* D3DXGetVertexShaderProfile([In] IDirect3DDevice9* pDevice) + D3DXGetVertexShaderProfile +
    + + +

    Preprocesses a shader resource without performing compilation. This resolves all #defines and #includes, providing a self-contained shader for subsequent compilation.

    Note??Instead of using this legacy function, we recommend that you use the API.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb205400 + HRESULT D3DXPreprocessShaderFromResourceW([In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + D3DXPreprocessShaderFromResourceW +
    + + +

    Compile a shader file.

    Note??Instead of using this legacy function, we recommend that you compile offline by using the Fxc.exe command-line compiler or use the API.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb172733 + HRESULT D3DXCompileShaderFromResourceW([In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + D3DXCompileShaderFromResourceW +
    + + +

    Preprocesses a shader file without performing compilation. This resolves all #defines and #includes, providing a self-contained shader for subsequent compilation.

    Note??Instead of using this legacy function, we recommend that you use the API.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + + bb205399 + HRESULT D3DXPreprocessShaderFromFileW([In] const wchar_t* pSrcFile,[In, Buffer, Optional] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + D3DXPreprocessShaderFromFileW +
    + + +

    Returns the size of the shader byte code, in bytes.

    +
    +

    Pointer to the function DWORD stream.

    +

    Returns the size of the shader byte code, in bytes.

    + + bb172875 + unsigned int D3DXGetShaderSize([In] const void* pFunction) + D3DXGetShaderSize +
    + + +

    Returns the shader version of the compiled shader.

    +
    +

    Pointer to the function DWORD stream.

    +

    Returns the shader version of the given shader, or zero if the shader function is null.

    + + bb172876 + unsigned int D3DXGetShaderVersion([In] const void* pFunction) + D3DXGetShaderVersion +
    + + +

    Uses a left-handed coordinate system to create a mesh containing a cylinder.

    +
    +

    Pointer to an interface, representing the device associated with the created cylinder mesh.

    +

    Radius at the negative Z end. Value should be greater than or equal to 0.0f.

    +

    Radius at the positive Z end. Value should be greater than or equal to 0.0f.

    +

    Length of the cylinder along the z-axis.

    +

    Number of slices about the main axis.

    +

    Number of stacks along the main axis.

    +

    Address of a reference to the output shape, an interface.

    +

    Address of a reference to an interface. When the method returns, this parameter is filled with an array of three DWORDs per face that specify the three neighbors for each face in the mesh. null can be specified.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The created cylinder is centered at the origin, and its axis is aligned with the z-axis.

    This function creates a mesh with the creation option and | flexible vertex format (FVF).

    +
    + + bb172762 + HRESULT D3DXCreateCylinder([In] IDirect3DDevice9* pDevice,[In] float Radius1,[In] float Radius2,[In] float Length,[In] unsigned int Slices,[In] unsigned int Stacks,[In] ID3DXMesh** ppMesh,[In] ID3DXBuffer** ppAdjacency) + D3DXCreateCylinder +
    + + +

    Uses a left-handed coordinate system to create a mesh containing a torus.

    +
    +

    Pointer to an interface, representing the device associated with the created torus mesh.

    +

    Inner-radius of the torus. Value should be greater than or equal to 0.0f.

    +

    Outer-radius of the torus. Value should be greater than or equal to 0.0f.

    +

    Number of sides in a cross-section. Value must be greater than or equal to 3.

    +

    Number of rings making up the torus. Value must be greater than or equal to 3.

    +

    Address of a reference to the output shape, an interface.

    +

    Address of a reference to an interface. When the method returns, this parameter is filled with an array of three DWORDs per face that specify the three neighbors for each face in the mesh. null can be specified.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The created torus is centered at the origin, and its axis is aligned with the z-axis. The inner radius of the torus is the radius of the cross-section (the minor radius), and the outer radius of the torus is the radius of the central hole.

    This function returns a mesh that can be used later for drawing or manipulation by the application.

    This function creates a mesh with the creation option and | flexible vertex format (FVF).

    +
    + + bb172809 + HRESULT D3DXCreateTorus([In] IDirect3DDevice9* pDevice,[In] float InnerRadius,[In] float OuterRadius,[In] unsigned int Sides,[In] unsigned int Rings,[In] ID3DXMesh** ppMesh,[In] ID3DXBuffer** ppAdjacency) + D3DXCreateTorus +
    + + +

    Uses a left-handed coordinate system to create a mesh containing a sphere.

    +
    +

    Pointer to an interface, representing the device associated with the created sphere mesh.

    +

    Radius of the sphere. This value should be greater than or equal to 0.0f.

    +

    Number of slices about the main axis.

    +

    Number of stacks along the main axis.

    +

    Address of a reference to the output shape, an interface.

    +

    Address of a reference to an interface. When the method returns, this parameter is filled with an array of three DWORDs per face that specify the three neighbors for each face in the mesh. null can be specified.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The created sphere is centered at the origin, and its axis is aligned with the z-axis.

    This function creates a mesh with the creation option and | flexible vertex format (FVF).

    +
    + + bb172795 + HRESULT D3DXCreateSphere([In] IDirect3DDevice9* pDevice,[In] float Radius,[In] unsigned int Slices,[In] unsigned int Stacks,[In] ID3DXMesh** ppMesh,[In] ID3DXBuffer** ppAdjacency) + D3DXCreateSphere +
    + + +

    Uses a left-handed coordinate system to create a mesh containing a teapot.

    +
    +

    Pointer to an interface, representing the device associated with the created teapot mesh.

    +

    Address of a reference to the output shape, an interface.

    +

    Address of a reference to an interface. When the method returns, this parameter is filled with an array of three DWORDs per face that specify the three neighbors for each face in the mesh. null can be specified.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function creates a mesh with the creation option and | flexible vertex format (FVF).

    +
    + + bb172798 + HRESULT D3DXCreateTeapot([In] IDirect3DDevice9* pDevice,[In] ID3DXMesh** ppMesh,[In] ID3DXBuffer** ppAdjacency) + D3DXCreateTeapot +
    + + +

    Uses a left-handed coordinate system to create a mesh containing an axis-aligned box.

    +
    +

    Pointer to an interface, representing the device associated with the created box mesh.

    +

    Width of the box, along the x-axis.

    +

    Height of the box, along the y-axis.

    +

    Depth of the box, along the z-axis.

    +

    Address of a reference to the output shape, an interface.

    +

    Address of a reference to an interface. When the method returns, this parameter is filled with an array of three DWORDs per face that specify the three neighbors for each face in the mesh. null can be specified.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The created box is centered at the origin.

    This function creates a mesh with the creation option and | flexible vertex format (FVF).

    +
    + + bb172752 + HRESULT D3DXCreateBox([In] IDirect3DDevice9* pDevice,[In] float Width,[In] float Height,[In] float Depth,[In] ID3DXMesh** ppMesh,[In] ID3DXBuffer** ppAdjacency) + D3DXCreateBox +
    + + +

    Uses a left-handed coordinate system to create a mesh containing an + n-sided polygon.

    +
    +

    Pointer to an interface, representing the device associated with the created polygon mesh.

    +

    Length of each side.

    +

    Number of sides for the polygon. Value must be greater than or equal to 3.

    +

    Address of a reference to the output shape, an interface.

    +

    Address of a reference to an interface. When the method returns, this parameter is filled with an array of three DWORDs per face that specify the three neighbors for each face in the mesh. null can be specified.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The created polygon is centered at the origin.

    This function creates a mesh with the creation option and | flexible vertex format (FVF).

    +
    + + bb172785 + HRESULT D3DXCreatePolygon([In] IDirect3DDevice9* pDevice,[In] float Length,[In] unsigned int Sides,[In] ID3DXMesh** ppMesh,[In] ID3DXBuffer** ppAdjacency) + D3DXCreatePolygon +
    + + +

    Creates a mesh containing the specified text, using the font associated with the device context.

    +
    +

    Pointer to the device that created the mesh.

    +

    Device context, containing the font for output. The font selected by the device context must be a TrueType font.

    +

    Pointer to a string that specifies the text to generate. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Maximum chordal deviation from TrueType font outlines.

    +

    Amount to extrude text in the negative z-direction.

    +

    Pointer to the returned mesh.

    +

    Pointer to a buffer containing adjacency information. May be null.

    +

    Pointer to an array of GLYPHMETRICSFLOAT structures that contain the glyph metric data. Each element contains information about the position and orientation of the corresponding glyph in the string. The number of elements in the array should be equal to the number of characters in the string. Note that the origin in each structure is not relative to the entire string, but rather is relative to that character cell. To compute the entire bounding box, add the increment for each glyph while traversing the string. If you are not concerned with the glyph sizes, set this parameter to null.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateTextA because ANSI strings are being used.

    This function creates a mesh with the creation option and | flexible vertex format (FVF).

    +
    + + bb172799 + HRESULT D3DXCreateTextW([In] IDirect3DDevice9* pDevice,[In] HDC hDC,[In] const wchar_t* pText,[In] float Deviation,[In] float Extrusion,[In] ID3DXMesh** ppMesh,[In] ID3DXBuffer** ppAdjacency,[In] LPGLYPHMETRICSFLOAT pGlyphMetrics) + D3DXCreateTextW +
    + + +

    Retrieves information about a given image file in memory.

    +
    +

    VOID reference to the source file in memory.

    +

    Size of file in memory, in bytes. .

    +

    Pointer to a structure to be filled with the description of the data in the source file.

    + + bb172868 + HRESULT D3DXGetImageInfoFromFileInMemory([In] const void* pSrcData,[In] unsigned int SrcDataSize,[Out] D3DXIMAGE_INFO* pSrcInfo) + D3DXGetImageInfoFromFileInMemory +
    + + +

    Uses a compiled high-level shader language (HLSL) function to fill each texel of each mipmap level of a texture.

    +
    +

    Pointer to an object, representing the texture to be filled.

    +

    Pointer to a texture shader object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following:D3DERR_NOTAVAILABLE, .

    + +

    The texture target must be an HLSL function that takes contains the following semantics:

    • One input parameter must use a POSITION semantic.
    • One input parameter must use a PSIZE semantic.
    • The function must return a parameter that uses the COLOR semantic.

    The input parameters can be in any order. For an example, see

    +
    + + bb172836 + HRESULT D3DXFillVolumeTextureTX([In] IDirect3DVolumeTexture9* pVolumeTexture,[In] ID3DXTextureShader* pTextureShader) + D3DXFillVolumeTextureTX +
    + + +

    Creates an empty cube texture, adjusting the calling parameters as needed.

    +
    +

    Pointer to an interface, representing the device to be associated with the texture.

    +

    Width and height of the cube texture, in pixels. For example, if the cube texture is an 8-pixel by 8-pixel cube, the value for this parameter should be 8.

    +

    Number of mip levels requested. If this value is zero or D3DX_DEFAULT, a complete mipmap chain is created.

    +

    0, , or . Setting this flag to indicates that the surface is to be used as a render target. The resource can then be passed to the pNewRenderTarget parameter of the SetRenderTarget method. If is specified, the application should check that the device supports this operation by calling CheckDeviceFormat. For more information about using dynamic textures, see Using Dynamic Textures.

    +

    Member of the enumerated type, describing the requested pixel format for the cube texture. The returned cube texture might have a different format from that specified by Format. Applications should check the format of the returned cube texture.

    +

    Member of the enumerated type, describing the memory class into which the cube texture should be placed.

    +

    Address of a reference to an interface, representing the created cube texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , E_OUTOFMEMORY.

    + +

    Cube textures differ from other surfaces in that they are collections of surfaces.

    Internally, uses to adjust the calling parameters. Therefore, calls to will often succeed where calls to CreateCubeTexture would fail.

    +
    + + bb172755 + HRESULT D3DXCreateCubeTexture([In] IDirect3DDevice9* pDevice,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] IDirect3DCubeTexture9** ppCubeTexture) + D3DXCreateCubeTexture +
    + + +

    Creates a volume texture from a file. This is a more advanced function than .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    When skipping mipmap levels while loading a .dds file, use the D3DX_SKIP_DDS_MIP_LEVELS macro to generate the MipFilter value. This macro takes the number of levels to skip and the filter type and returns the filter value, which would then be passed into the MipFilter parameter.

    +
    + + bb172814 + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Width,[In] unsigned int Height,[In] unsigned int Depth,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + D3DXCreateVolumeTextureFromFileInMemoryEx +
    + + +

    Uses a compiled high-level shader language (HLSL) function to fill each texel of each mipmap level of a texture.

    +
    +

    Pointer to an object, representing the texture to be filled.

    +

    Pointer to a texture shader object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , .

    + +

    The texture target must be an HLSL function that takes contains the following semantics:

    • One input parameter must use a POSITION semantic.
    • One input parameter must use a PSIZE semantic.
    • The function must return a parameter that uses the COLOR semantic.

    The following is an example of such an HLSL function:

     float4 TextureGradientFill( float2 vTexCoord : POSITION,  float2 vTexelSize : PSIZE) : COLOR  { float r,g, b, xSq,ySq, a; xSq = 2.f*vTexCoord.x-1.f; xSq *= xSq; ySq = 2.f*vTexCoord.y-1.f; ySq *= ySq; a = sqrt(xSq+ySq); if (a > 1.0f) { a = 1.0f-(a-1.0f); } else if (a < 0.2f) { a = 0.2f; } r = 1-vTexCoord.x; g = 1-vTexCoord.y; b = vTexCoord.x; return float4(r, g, b, a); };	
    +            

    Note that the input parameters can be in any order, but both input semantics must be represented.

    +
    + + bb172834 + HRESULT D3DXFillTextureTX([In] IDirect3DTexture9* pTexture,[In] ID3DXTextureShader* pTextureShader) + D3DXFillTextureTX +
    + + +

    Checks cube-texture-creation parameters.

    +
    +

    Pointer to an interface, representing the device to be associated with the cube texture.

    +

    Pointer to the requested width and height in pixels, or null. Returns the corrected size.

    +

    Pointer to the number of requested mipmap levels, or null. Returns the corrected number of mipmap levels.

    +

    0 or . Setting this flag to indicates that the surface is to be used as a render target. The resource can then be passed to the pNewRenderTarget parameter of the SetRenderTarget method. If is specified, the application should check that the device supports this operation by calling CheckDeviceFormat.

    +

    Pointer to a member of the enumerated type. Specifies the desired pixel format, or null. Returns the corrected format.

    +

    Member of the enumerated type, describing the memory class into which the texture should be placed.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , .

    + +

    If parameters to this function are invalid, this function returns corrected parameters.

    Cube textures differ from other surfaces in that they are collections of surfaces. To call SetRenderTarget with a cube texture, you must select an individual face using GetCubeMapSurface and pass the resulting surface to SetRenderTarget.

    +
    + + bb172715 + HRESULT D3DXCheckCubeTextureRequirements([In] IDirect3DDevice9* pDevice,[InOut] unsigned int* pSize,[InOut] unsigned int* pNumMipLevels,[In] unsigned int Usage,[InOut] D3DFORMAT* pFormat,[In] D3DPOOL Pool) + D3DXCheckCubeTextureRequirements +
    + + +

    Creates a texture from a file.

    +
    +

    Pointer to an interface, representing the device to be associated with the texture.

    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Address of a reference to an interface, representing the created texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateTextureFromFileA because ANSI strings are being used.

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    The function is equivalent to (pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, , , D3DX_DEFAULT, D3DX_DEFAULT, 0, null, null, ppTexture).

    Mipmapped textures automatically have each level filled with the loaded texture.

    When loading images into mipmapped textures, some devices are unable to go to a 1x1 image and this function will fail. If this happens, the images need to be loaded manually.

    Note that a resource created with this function will be placed in the memory class denoted by .

    Filtering is automatically applied to a texture created using this method. The filtering is equivalent to | in .

    For the best performance when using :

    1. Doing image scaling and format conversion at load time can be slow. Store images in the format and resolution they will be used. If the target hardware requires power of two dimensions, create and store images using power of two dimensions.
    2. Consider using DirectDraw surface (DDS) files. Because DDS files can be used to represent any Direct3D 9 texture format, they are very easy for D3DX to read. Also, they can store mipmaps, so any mipmap-generation algorithms can be used to author the images.
    +
    + + bb172801 + HRESULT D3DXCreateTextureFromFileW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] IDirect3DTexture9** ppTexture) + D3DXCreateTextureFromFileW +
    + + +

    Loads a surface from a file.

    +
    +

    Pointer to an interface. Specifies the destination surface, which receives the image.

    +

    Pointer to a structure, the destination palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the destination rectangle. Set this parameter to null to specify the entire surface.

    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Pointer to a structure. Specifies the source rectangle. Set this parameter to null to specify the entire image.

    +

    Combination of one or more controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying | .

    +

    value to replace with transparent black, or 0 to disable the colorkey. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys Thus, for opaque black, the value would be equal to 0xFF000000.

    +

    Pointer to a structure to be filled with a description of the data in the source image file, or null.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , D3DXERR_INVALIDDATA.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXLoadSurfaceFromFileA because ANSI strings are being used.

    This function handles conversion to and from compressed texture formats and supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Writing to a non-level-zero surface will not cause the dirty rectangle to be updated. If is called and the surface was not already dirty (this is unlikely under normal usage scenarios), the application needs to explicitly call AddDirtyRect on the surface.

    +
    + + bb172900 + HRESULT D3DXLoadSurfaceFromFileW([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const wchar_t* pSrcFile,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + D3DXLoadSurfaceFromFileW +
    + + +

    Uses a user-provided function to fill each texel of each mip level of a given cube texture.

    +
    +

    Pointer to an interface, representing the filled texture.

    +

    Pointer to a user-provided evaluator function, which will be used to compute the value of each texel. The function follows the prototype of LPD3DXFILL3D.

    +

    Pointer to an arbitrary block of user-defined data. This reference will be passed to the function provided in pFunction.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: .

    + +

    Here is an example that creates a function called ColorCubeFill, which relies on .

     // Define a function that matches the prototype of LPD3DXFILL3D	
    +            VOID WINAPI ColorCubeFill (* pOut, const * pTexCoord, 	
    +            const * pTexelSize, LPVOID pData)	
    +            { *pOut = (pTexCoord->x, pTexCoord->y, pTexCoord->z, 0.0f);	
    +            } // Fill the texture using 	
    +            if (FAILED (hr =  (m_pTexture, ColorCubeFill, null)))	
    +            { return hr;	
    +            }	
    +            
    +
    + + bb172831 + HRESULT D3DXFillCubeTexture([In] IDirect3DCubeTexture9* pCubeTexture,[In] __function__stdcall* pFunction,[In] void* pData) + D3DXFillCubeTexture +
    + + +

    Creates an empty volume texture, adjusting the calling parameters as needed.

    +
    +

    Pointer to an interface, representing the device to be associated with the volume texture.

    +

    Width in pixels. This value must be nonzero. The maximum dimension that a driver supports (for width, height, and depth) can be found in MaxVolumeExtent in .

    +

    Height in pixels. This value must be nonzero. The maximum dimension that a driver supports (for width, height, and depth) can be found in MaxVolumeExtent in .

    +

    Depth in pixels. This value must be nonzero. The maximum dimension that a driver supports (for width, height, and depth) can be found in MaxVolumeExtent in .

    +

    Number of mip levels requested. If this value is zero or D3DX_DEFAULT, a complete mipmap chain is created.

    +

    0 or . For more information about using dynamic textures, see Using Dynamic Textures.

    +

    Member of the enumerated type, describing the requested pixel format for the volume texture. The returned volume texture might have a different format from that specified by Format. Applications should check the format of the returned volume texture.

    +

    Member of the enumerated type, describing the memory class into which the volume texture should be placed.

    +

    Address of a reference to an interface, representing the created volume texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , E_OUTOFMEMORY .

    + +

    Internally, uses to adjust the calling parameters. Therefore, calls to will often succeed where calls to CreateVolumeTexture would fail.

    +
    + + bb172810 + HRESULT D3DXCreateVolumeTexture([In] IDirect3DDevice9* pDevice,[In] unsigned int Width,[In] unsigned int Height,[In] unsigned int Depth,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + D3DXCreateVolumeTexture +
    + + +

    Loads a volume from a file.

    +
    +

    Pointer to an interface. Specifies the destination volume.

    +

    Pointer to a structure, the destination palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the destination box. Set this parameter to null to specify the entire volume.

    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Pointer to a structure. Specifies the source box. Set this parameter to null to specify the entire volume.

    +

    Combination of one or more , controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying | .

    +

    value to replace with transparent black, or 0 to disable the colorkey. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys. Thus, for opaque black, the value would be equal to 0xFF000000.

    +

    Pointer to a structure to be filled with a description of the data in the source image file, or null.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , D3DXERR_INVALIDDATA.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXLoadVolumeFromFileA because ANSI strings are being used.

    This function handles conversion to and from compressed texture formats and supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Writing to a non-level-zero surface of the volume texture will not cause the dirty rectangle to be updated. If is called and the texture was not already dirty (this is unlikely under normal usage scenarios), the application needs to explicitly call on the volume texture.

    +
    + + bb172905 + HRESULT D3DXLoadVolumeFromFileW([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const wchar_t* pSrcFile,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + D3DXLoadVolumeFromFileW +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT D3DXLoadSurfaceFromResourceW([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + D3DXLoadSurfaceFromResourceW + + + +

    Creates a texture from a file. This is a more advanced function than .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateTextureFromFileExA because ANSI strings are being used.

    Use to determine if your device can support the texture given the current state.

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Mipmapped textures automatically have each level filled with the loaded texture. When loading images into mipmapped textures, some devices are unable to go to a 1x1 image and this function will fail. If this happens, then the images need to be loaded manually.

    For the best performance when using :

    1. Doing image scaling and format conversion at load time can be slow. Store images in the format and resolution they will be used. If the target hardware requires power of 2 dimensions, then create and store images using power of 2 dimensions.
    2. For mipmap image creation at load time, filter using . A box filter is much faster than other filter types such as .
    3. Consider using DDS files. Since DDS files can be used to represent any Direct3D 9 texture format, they are very easy for D3DX to read. Also, they can store mipmaps, so any mipmap-generation algorithms can be used to author the images.

    When skipping mipmap levels while loading a .dds file, use the D3DX_SKIP_DDS_MIP_LEVELS macro to generate the MipFilter value. This macro takes the number of levels to skip and the filter type and returns the filter value, which would then be passed into the MipFilter parameter.

    +
    + + bb172802 + HRESULT D3DXCreateTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Width,[In] unsigned int Height,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + D3DXCreateTextureFromFileExW +
    + + +

    Converts a height map into a normal map. The (x,y,z) components of each normal are mapped to the (r,g,b) channels of the output texture.

    +
    +

    Pointer to an interface, representing the destination texture.

    +

    Pointer to an interface, representing the source height-map texture.

    +

    Pointer to a type that contains the source palette of 256 colors or null.

    +

    One or more flags that control generation of normal maps.

    +

    One flag specifying the source of height information.

    +

    Constant value multiplier that increases (or decreases) the values in the normal map. Higher values usually make bumps more visible, lower values usually make bumps less visible.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be the following value: .

    + +

    This method computes the normal by using the central difference with a kernel size of 3x3. The central differencing denominator used is 2.0. RGB channels in the destination contain biased (x,y,z) components of the normal.

    +
    + + bb172741 + HRESULT D3DXComputeNormalMap([In] IDirect3DTexture9* pTexture,[In] IDirect3DTexture9* pSrcTexture,[Out, Buffer] const PALETTEENTRY* pSrcPalette,[In] unsigned int Flags,[In] unsigned int Channel,[In] float Amplitude) + D3DXComputeNormalMap +
    + + +

    Checks volume-texture-creation parameters.

    +
    +

    Pointer to an interface, representing the device to be associated with the volume texture.

    +

    Pointer to the requested width in pixels, or null. Returns the corrected size.

    +

    Pointer to the requested height in pixels, or null. Returns the corrected size.

    +

    Pointer to the requested depth in pixels, or null. Returns the corrected size.

    +

    Pointer to the number of requested mipmap levels, or null. Returns the corrected number of mipmap levels.

    +

    Currently not used, set to 0.

    +

    Pointer to a member of the enumerated type. Specifies the desired pixel format, or null. Returns the corrected format.

    +

    Member of the enumerated type, describing the memory class into which the volume texture should be placed.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , .

    + +

    If parameters to this function are invalid, this function returns corrected parameters.

    +
    + + bb172718 + HRESULT D3DXCheckVolumeTextureRequirements([In] IDirect3DDevice9* pDevice,[InOut] unsigned int* pWidth,[InOut] unsigned int* pHeight,[InOut] unsigned int* pDepth,[InOut] unsigned int* pNumMipLevels,[In] unsigned int Usage,[InOut] D3DFORMAT* pFormat,[In] D3DPOOL Pool) + D3DXCheckVolumeTextureRequirements +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT D3DXLoadSurfaceFromFileInMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + D3DXLoadSurfaceFromFileInMemory + + + +

    Creates a texture from a file in memory.

    +
    +

    Pointer to an interface representing the device to be associated with the texture.

    +

    Pointer to the file in memory from which to create the texture.

    +

    Size in bytes of the file in memory.

    +

    Address of a reference to an interface representing the created texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The function is equivalent to (pDevice, pSrcData, SrcDataSize, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, , , D3DX_DEFAULT, D3DX_DEFAULT, 0, null, null, ppTexture).

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Note that a resource created with this function when called from a object will be placed in the memory class denoted by . When this method is called from a object the resource will be placed in the memory class denoted by .

    Filtering is automatically applied to a texture created using this method. The filtering is equivalent to | in .

    +
    + + bb172803 + HRESULT D3DXCreateTextureFromFileInMemory([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] IDirect3DTexture9** ppTexture) + D3DXCreateTextureFromFileInMemory +
    + + +

    Creates a cube texture from a resource specified by a string. This is a more advanced function than .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateCubeTextureFromResourceExA because ANSI strings are being used.

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Cube textures differ from other surfaces in that they are collections of surfaces. To call SetRenderTarget with a cube texture, you must select an individual face using GetCubeMapSurface and pass the resulting surface to SetRenderTarget.

    uses the DirectDraw surface (DDS) file format. The DirectX Texture Editor (Dxtex.exe) enables you to generate a cube map from other file formats and save it in the DDS file format.

    +
    + + bb172761 + HRESULT D3DXCreateCubeTextureFromResourceExW([In] IDirect3DDevice9* pDevice,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] D3DXIMAGE_INFO* pSrcInfo,[In] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + D3DXCreateCubeTextureFromResourceExW +
    + + +

    Creates a volume texture from a file in memory.

    +
    +

    Pointer to an interface, representing the device to be associated with the volume texture.

    +

    Pointer to the file in memory from which to create the volume texture.

    +

    Size of the file in memory, in bytes.

    +

    Address of a reference to an interface, representing the created texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    The function is equivalent to (pDevice, pSrcFile, SrcData, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, , , D3DX_DEFAULT, D3DX_DEFAULT, 0, null, null, ppVolumeTexture).

    Note that a resource created with this function when called from a object will be placed in the memory class denoted by . When this method is called from a object the resource will be placed in the memory class denoted by .

    Filtering is automatically applied to a texture created using this method. The filtering is equivalent to | in .

    +
    + + bb172813 + HRESULT D3DXCreateVolumeTextureFromFileInMemory([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + D3DXCreateVolumeTextureFromFileInMemory +
    + + +

    Loads a volume from another volume.

    +
    +

    Pointer to an interface. Specifies the destination volume, which receives the image.

    +

    Pointer to a structure, the destination palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the destination box. Set this parameter to null to specify the entire volume.

    +

    A Pointer to an interface. Specifies the source volume.

    +

    Pointer to a structure, the source palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the source box. Set this parameter to null to specify the entire volume.

    +

    A combination of one or more , controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying | .

    +

    value to replace with transparent black, or 0 to disable the colorkey. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys. Thus, for opaque black, the value would be equal to 0xFF000000.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    Writing to a non-level-zero surface of the volume texture will not cause the dirty rectangle to be updated. If is called and the surface was not already dirty (this is unlikely under normal usage scenarios), the application needs to explicitly call on the surface.

    +
    + + bb172909 + HRESULT D3DXLoadVolumeFromVolume([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] IDirect3DVolume9* pSrcVolume,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey) + D3DXLoadVolumeFromVolume +
    + + +

    Saves a texture to a file.

    +
    +

    Pointer to a string that specifies the file name of the destination image. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    specifying the file format to use when saving. This function supports saving to all formats except Portable Pixmap (.ppm) and Targa/Truevision Graphics Adapter (.tga).

    +

    Pointer to interface, containing the texture to be saved.

    +

    Pointer to a structure containing a palette of 256 colors. This parameter can be null.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be the following:

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXSaveTextureToFileA because ANSI strings are being used.

    This function handles conversion to and from compressed texture formats.

    If the volume is nondynamic (because of a usage parameter set to 0 at the creation) and located in video memory (the memory pool set to ), will fail because D3DX cannot lock nondynamic volumes located in video memory.

    +
    + + bb205433 + HRESULT D3DXSaveTextureToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DBaseTexture9* pSrcTexture,[In, Buffer] const PALETTEENTRY* pSrcPalette) + D3DXSaveTextureToFileW +
    + + +

    Creates a texture from a file.

    +
    +

    Pointer to an interface, representing the device to be associated with the texture.

    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Address of a reference to an interface, representing the created texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateTextureFromFileA because ANSI strings are being used.

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    The function is equivalent to (pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, , , D3DX_DEFAULT, D3DX_DEFAULT, 0, null, null, ppTexture).

    Mipmapped textures automatically have each level filled with the loaded texture.

    When loading images into mipmapped textures, some devices are unable to go to a 1x1 image and this function will fail. If this happens, the images need to be loaded manually.

    Note that a resource created with this function will be placed in the memory class denoted by .

    Filtering is automatically applied to a texture created using this method. The filtering is equivalent to | in .

    For the best performance when using :

    1. Doing image scaling and format conversion at load time can be slow. Store images in the format and resolution they will be used. If the target hardware requires power of two dimensions, create and store images using power of two dimensions.
    2. Consider using DirectDraw surface (DDS) files. Because DDS files can be used to represent any Direct3D 9 texture format, they are very easy for D3DX to read. Also, they can store mipmaps, so any mipmap-generation algorithms can be used to author the images.
    +
    + + bb172801 + HRESULT D3DXCreateCubeTextureFromFileW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] IDirect3DCubeTexture9** ppCubeTexture) + D3DXCreateCubeTextureFromFileW +
    + + +

    Creates a cube texture from a file in memory. This is a more advanced function than .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Cube textures differ from other surfaces in that they are collections of surfaces. To call SetRenderTarget with a cube texture, you must select an individual face using GetCubeMapSurface and pass the resulting surface to SetRenderTarget .

    This method is designed to be used for loading image files stored as RT_RCDATA, which is an application-defined resource (raw data). Otherwise this method will fail.

    For details on , see the Platform SDK. Note that as of DirectX 8.0, the peFlags member of the structure does not function as documented in the Platform SDK. The peFlags member is now the alpha channel for 8-bit palettized formats.

    uses the DirectDraw surface (DDS) file format. The DirectX Texture Editor (Dxtex.exe) enables you to generate a cube map from other file formats and save it in the DDS file format

    When skipping mipmap levels while loading a .dds file, use the D3DX_SKIP_DDS_MIP_LEVELS macro to generate the MipFilter value. This macro takes the number of levels to skip and the filter type and returns the filter value, which would then be passed into the MipFilter parameter.

    +
    + + bb172759 + HRESULT D3DXCreateCubeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + D3DXCreateCubeTextureFromFileInMemoryEx +
    + + +

    Creates a texture from a resource. This is a more advanced function than .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateTextureFromResourceExA because ANSI strings are being used.

    The resource being loaded must be of type RT_BITMAP or RT_RCDATA. Resource type RT_RCDATA is used to load formats other than bitmaps (such as .tga, .jpg, and .dds).

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    +
    + + bb172806 + HRESULT D3DXCreateTextureFromResourceExW([In] IDirect3DDevice9* pDevice,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In] unsigned int Width,[In] unsigned int Height,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] D3DXIMAGE_INFO* pSrcInfo,[In] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + D3DXCreateTextureFromResourceExW +
    + + +

    Retrieves information about a given image file.

    +
    +

    File name of image to retrieve information about. If UNICODE or _UNICODE are defined, this parameter type is LPCWSTR, otherwise, the type is LPCSTR.

    +

    Pointer to a structure to be filled with the description of the data in the source file.

    + +

    This function supports both Unicode and ANSI strings.

    +
    + + bb172867 + HRESULT D3DXGetImageInfoFromFileW([In] const wchar_t* pSrcFile,[Out] D3DXIMAGE_INFO* pSrcInfo) + D3DXGetImageInfoFromFileW +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT D3DXFilterTexture([In] IDirect3DBaseTexture9* pBaseTexture,[In, Buffer] const PALETTEENTRY* pPalette,[In] unsigned int SrcLevel,[In] D3DX_FILTER Filter) + D3DXFilterTexture + + + +

    Loads a surface from memory.

    +
    +

    Pointer to an interface. Specifies the destination surface, which receives the image.

    +

    Pointer to a structure, the destination palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the destination rectangle. Set this parameter to null to specify the entire surface.

    +

    Pointer to the upper left corner of the source image in memory.

    +

    Member of the enumerated type, the pixel format of the source image.

    +

    Pitch of source image, in bytes. For DXT formats, this number should represent the width of one row of cells, in bytes.

    +

    Pointer to a structure, the source palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the dimensions of the source image in memory. This value cannot be null.

    +

    Combination of one or more controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying | .

    +

    value to replace with transparent black, or 0 to disable the colorkey. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys. Thus, for opaque black, the value would be equal to 0xFF000000.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , D3DXERR_INVALIDDATA.

    + +

    This function handles conversion to and from compressed texture formats.

    Writing to a non-level-zero surface will not cause the dirty rectangle to be updated. If is called and the surface was not already dirty (this is unlikely under normal usage scenarios), the application needs to explicitly call AddDirtyRect on the surface.

    +
    + + bb172902 + HRESULT D3DXLoadSurfaceFromMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcPitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + D3DXLoadSurfaceFromMemory +
    + + +

    Saves a texture to an image file.

    +
    +

    specifying the file format to use when saving. This function supports saving to all formats except Portable Pixmap (.ppm) and Targa/Truevision Graphics Adapter (.tga).

    +

    Pointer to interface containing the image to be saved.

    +

    Pointer to a structure containing a palette of 256 colors. This parameter can be null.

    +

    Address of a reference to an that will store the image.

    + +

    This function handles conversion to and from compressed texture formats.

    +
    + + bb205434 + HRESULT D3DXSaveTextureToFileInMemory([Out] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DBaseTexture9* pSrcTexture,[In, Buffer] const PALETTEENTRY* pSrcPalette) + D3DXSaveTextureToFileInMemory +
    + + +

    Checks texture-creation parameters.

    +
    +

    Pointer to an interface, representing the device to be associated with the texture.

    +

    Pointer to the requested width in pixels, or null. Returns the corrected size.

    +

    Pointer to the requested height in pixels, or null. Returns the corrected size.

    +

    Pointer to number of requested mipmap levels, or null. Returns the corrected number of mipmap levels.

    +

    0 or . Setting this flag to indicates that the surface is to be used as a render target. The resource can then be passed to the pNewRenderTarget parameter of the SetRenderTarget method. If is specified, the application should check that the device supports this operation by calling CheckDeviceFormat.

    +

    Pointer to a member of the enumerated type. Specifies the desired pixel format, or null. Returns the corrected format.

    +

    Member of the enumerated type, describing the memory class into which the texture should be placed.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , .

    + +

    If parameters to this function are invalid, this function returns corrected parameters.

    This function uses the following heuristics when comparing the requested requirements against available formats:

    • Do not choose a format that has fewer channels.
    • Avoid FOURCC And 24-bit formats unless explicitly requested.
    • Try not to add new channels.
    • Try not to change the number of bits per channel.
    • Try to avoid converting between types of formats. For instance, avoid converting an ARGB format to a depth format.
    +
    + + bb172716 + HRESULT D3DXCheckTextureRequirements([In] IDirect3DDevice9* pDevice,[InOut] unsigned int* pWidth,[InOut] unsigned int* pHeight,[InOut] unsigned int* pNumMipLevels,[In] unsigned int Usage,[InOut] D3DFORMAT* pFormat,[In] D3DPOOL Pool) + D3DXCheckTextureRequirements +
    + + +

    Saves a volume to a file on disk.

    +
    +

    Pointer to a string that specifies the file name of the destination image. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    specifying the file format to use when saving. This function supports saving to all formats except Portable Pixmap (.ppm) and Targa/Truevision Graphics Adapter (.tga).

    +

    Pointer to interface containing the image to be saved.

    +

    Pointer to a structure containing a palette of 256 colors. This parameter can be null.

    +

    Pointer to a structure. Specifies the source box. Set this parameter to null to specify the entire volume.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be the following:

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to >D3DXSaveVolumeToFileA because ANSI strings are being used.

    This function handles conversion to and from compressed texture formats.

    If the volume is nondynamic (because of a usage parameter set to 0 at the creation) and located in video memory (the memory pool set to ), will fail because D3DX cannot lock nondynamic volumes located in video memory.

    +
    + + bb205435 + HRESULT D3DXSaveVolumeToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DVolume9* pSrcVolume,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcBox) + D3DXSaveVolumeToFileW +
    + + +

    Loads a volume from a resource.

    +
    +

    Pointer to an interface. Specifies the destination volume.

    +

    Pointer to a structure, the destination palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the destination box. Set this parameter to null to specify the entire volume.

    +

    Handle to the module where the resource is located, or null for module associated with the image the operating system used to create the current process.

    +

    Pointer to a string that specifies the file name of the source image. If UNICODE or _UNICODE are defined, this parameter type is LPCWSTR, otherwise, the type is LPCSTR.

    +

    Pointer to a structure. Specifies the source box. Set this parameter to null to specify the entire volume.

    +

    Combination of one or more , controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying | .

    +

    value to replace with transparent black, or 0 to disable the colorkey. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys. Thus, for opaque black, the value would be equal to 0xFF000000.

    +

    Pointer to a structure to be filled with a description of the data in the source image file, or null.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , D3DXERR_INVALIDDATA.

    + +

    The resource being loaded must be a bitmap resource(RT_BITMAP).

    This function handles conversion to and from compressed texture formats.

    Writing to a non-level-zero surface of the volume texture will not cause the dirty rectangle to be updated. If is called and the texture was not already dirty (this is unlikely under normal usage scenarios), the application needs to explicitly call on the volume texture.

    This function supports both Unicode and ANSI strings.

    +
    + + bb172908 + HRESULT D3DXLoadVolumeFromResourceW([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + D3DXLoadVolumeFromResourceW +
    + + +

    Creates a volume texture from a resource specified by a string. This is a more advanced function than .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateVolumeTextureFromResourceExA because ANSI strings are being used.

    The resource being loaded must be an application-defined resource (RT_RCDATA).

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    +
    + + bb172816 + HRESULT D3DXCreateVolumeTextureFromResourceExW([In] IDirect3DDevice9* pDevice,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In] unsigned int Width,[In] unsigned int Height,[In] unsigned int Depth,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] D3DXIMAGE_INFO* pSrcInfo,[In] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + D3DXCreateVolumeTextureFromResourceExW +
    + + +

    Creates a cube texture from a resource.

    +
    +

    Pointer to an interface, representing the device to be associated with the cube texture.

    +

    Handle to the module where the resource is located, or null for the module associated with the image the operating system used to create the current process.

    +

    Pointer to a string that specifies the resource name. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Address of a reference to an interface, representing the created cube texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateCubeTextureFromResourceA because ANSI strings are being used.

    The function is equivalent to (pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT, 0, , , D3DX_DEFAULT, D3DX_DEFAULT, 0, null, null, ppCubeTexture).

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Note that a resource created with this function when called from a object will be placed in the memory class denoted by . When this method is called from a object the resource will be placed in the memory class denoted by .

    Filtering is automatically applied to a texture created using this method. The filtering is equivalent to | in .

    uses the DirectDraw surface (DDS) file format. The DirectX Texture Editor (Dxtex.exe) enables you to generate a cube map from other file formats and save it in the DDS file format.

    +
    + + bb172760 + HRESULT D3DXCreateCubeTextureFromResourceW([In] IDirect3DDevice9* pDevice,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In] IDirect3DCubeTexture9** ppCubeTexture) + D3DXCreateCubeTextureFromResourceW +
    + + +

    Saves a surface to a file.

    +
    +

    Pointer to a string that specifies the file name of the destination image. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    specifying the file format to use when saving. This function supports saving to all formats except Portable Pixmap (.ppm) and Targa/Truevision Graphics Adapter (.tga).

    +

    Pointer to interface, containing the image to be saved.

    +

    Pointer to a structure containing a palette of 256 colors. This parameter can be null.

    +

    Pointer to a structure. Specifies the source rectangle. Set this parameter to null to specify the entire image.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be the following:

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXSaveSurfaceToFileA because ANSI strings are being used.

    This function handles conversion to and from compressed texture formats.

    +
    + + bb205431 + HRESULT D3DXSaveSurfaceToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect) + D3DXSaveSurfaceToFileW +
    + + +

    Creates a cube texture from a file in memory.

    +
    +

    Pointer to an interface, representing the device to be associated with the cube texture.

    +

    Pointer to the file in memory from which to create the cubemap. See Remarks.

    +

    Size of the file in memory, in bytes.

    +

    Address of a reference to an interface, representing the created cube texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    The function is equivalent to (pDevice, pSrcData, SrcDataSize, D3DX_DEFAULT, D3DX_DEFAULT, 0, , , D3DX_DEFAULT, D3DX_DEFAULT, 0, null, null, ppCubeTexture).

    Note that a resource created with this function when called from a object will be placed in the memory class denoted by . When this method is called from a object the resource will be placed in the memory class denoted by .

    This method is designed to be used for loading image files stored as RT_RCDATA, which is an application-defined resource (raw data). Otherwise this method will fail.

    Filtering is automatically applied to a texture created using this method. The filtering is equivalent to | in .

    uses the DirectDraw surface (DDS) file format. The DirectX Texture Editor (Dxtex.exe) enables you to generate a cube map from other file formats and save it in the DDS file format.

    +
    + + bb172758 + HRESULT D3DXCreateCubeTextureFromFileInMemory([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] IDirect3DCubeTexture9** ppCubeTexture) + D3DXCreateCubeTextureFromFileInMemory +
    + + +

    Creates a cube texture from a file. This is a more advanced function than .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateCubeTextureFromFileExA because ANSI strings are being used.

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Cube textures differ from other surfaces in that they are collections of surfaces. To call SetRenderTarget with a cube texture, you must select an individual face using GetCubeMapSurface and pass the resulting surface to SetRenderTarget.

    uses the DirectDraw surface (DDS) file format. The DirectX Texture Editor (Dxtex.exe) enables you to generate a cube map from other file formats and save it in the DDS file format.

    When skipping mipmap levels while loading a .dds file, use the D3DX_SKIP_DDS_MIP_LEVELS macro to generate the MipFilter value. This macro takes the number of levels to skip and the filter type and returns the filter value, which would then be passed into the MipFilter parameter.

    +
    + + bb172757 + HRESULT D3DXCreateCubeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DCubeTexture9** ppCubeTexture) + D3DXCreateCubeTextureFromFileExW +
    + + +

    Retrieves information about a given image in a resource.

    +
    +

    Module where the resource is loaded. Set this parameter to null to specify the module associated with the image that the operating system used to create the current process.

    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Pointer to a structure to be filled with the description of the data in the source file.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXGetImageInfoFromResourceA because ANSI strings are being used.

    +
    + + bb172869 + HRESULT D3DXGetImageInfoFromResourceW([In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[Out] D3DXIMAGE_INFO* pSrcInfo) + D3DXGetImageInfoFromResourceW +
    + + +

    Uses a compiled high-level shader language (HLSL) function to fill each texel of each mipmap level of a texture.

    +
    +

    Pointer to an object, representing the texture to be filled.

    +

    Pointer to a texture shader object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , .

    + +

    The texture target must be an HLSL function that takes contains the following semantics:

    • One input parameter must use a POSITION semantic.
    • One input parameter must use a PSIZE semantic.
    • The function must return a parameter that uses the COLOR semantic.

    The input parameters can be in any order. For an example, see

    +
    + + bb172832 + HRESULT D3DXFillCubeTextureTX([In] IDirect3DCubeTexture9* pCubeTexture,[In] ID3DXTextureShader* pTextureShader) + D3DXFillCubeTextureTX +
    + + +

    Uses a user-provided function to fill each texel of each mip level of a given texture.

    +
    +

    Pointer to an interface, representing the filled texture.

    +

    Pointer to a user-provided evaluator function, which will be used to compute the value of each texel. The function follows the prototype of LPD3DXFILL2D.

    +

    Pointer to an arbitrary block of user-defined data. This reference will be passed to the function provided in pFunction.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: .

    + +

    Here is an example that creates a function called ColorFill, which relies on .

     // Define a function that matches the prototype of LPD3DXFILL3D	
    +            VOID WINAPI ColorFill (* pOut, const * pTexCoord, 	
    +            const * pTexelSize, LPVOID pData)	
    +            { *pOut = (pTexCoord->x, pTexCoord->y, 0.0f, 0.0f);	
    +            } // Fill the texture using 	
    +            if (FAILED (hr =  (m_pTexture, ColorFill, null)))	
    +            { return hr;	
    +            }	
    +            
    +
    + + bb172833 + HRESULT D3DXFillTexture([In] IDirect3DTexture9* pTexture,[In] __function__stdcall* pFunction,[In] void* pData) + D3DXFillTexture +
    + + +

    Saves a surface to an image file.

    +
    +

    Address of a reference to an that will store the image.

    +

    specifying the file format to use when saving. This function supports saving to all formats except Portable Pixmap (.ppm) and Targa/Truevision Graphics Adapter (.tga).

    +

    Pointer to interface containing the image to be saved.

    +

    Pointer to a structure containing a palette of 256 colors. This parameter can be null.

    +

    Pointer to a structure. Specifies the source rectangle. Set this parameter to null to specify the entire image.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be the following: .

    + +

    This function handles conversion to and from compressed texture formats.

    +
    + + bb205432 + HRESULT D3DXSaveSurfaceToFileInMemory([In] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect) + D3DXSaveSurfaceToFileInMemory +
    + + +

    Creates a volume texture from a file.

    +
    +

    Pointer to an interface, representing the device to be associated with the volume texture.

    +

    Pointer to a string that specifies the file name. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Address of a reference to an interface representing the created texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateVolumeTextureFromFileA because ANSI strings are being used.

    The function is equivalent to (pDevice, pSrcFile, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, , , D3DX_DEFAULT, D3DX_DEFAULT, 0, null, null, ppVolumeTexture).

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Mipmapped textures automatically have each level filled with the loaded texture.

    When loading images into mipmapped textures, some devices are unable to go to a 1x1 image and this function will fail. If this happens, then the images need to be loaded manually.

    Note that a resource created with this function when called from a object will be placed in the memory class denoted by . When this method is called from a object the resource will be placed in the memory class denoted by .

    Filtering is automatically applied to a texture created using this method. The filtering is equivalent to | in .

    +
    + + bb172811 + HRESULT D3DXCreateVolumeTextureFromFileW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + D3DXCreateVolumeTextureFromFileW +
    + + +

    Creates a texture from a resource.

    +
    +

    Pointer to an interface, representing the device to be associated with the texture.

    +

    Handle to the module where the resource is located, or null for module associated with the image the operating system used to create the current process.

    +

    Pointer to a string that specifies the resource name. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Address of a reference to an interface, representing the created texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateTextureFromResourceA because ANSI strings are being used.

    The function is equivalent to (pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, , , D3DX_DEFAULT, D3DX_DEFAULT, 0, null, null, ppTexture).

    The resource being loaded must be of type RT_BITMAP or RT_RCDATA. Resource type RT_RCDATA is used to load formats other than bitmaps (such as .tga, .jpg, and .dds).

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Note that a resource created with this function when called from a object will be placed in the memory class denoted by . When this method is called from a object the resource will be placed in the memory class denoted by .

    Filtering is automatically applied to a texture created using this method. The filtering is equivalent to | in .

    +
    + + bb172805 + HRESULT D3DXCreateTextureFromResourceW([In] IDirect3DDevice9* pDevice,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In] IDirect3DTexture9** ppTexture) + D3DXCreateTextureFromResourceW +
    + + +

    Loads a volume from memory.

    +
    +

    Pointer to an interface. Specifies the destination volume, which receives the image.

    +

    Pointer to a structure, the destination palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the destination box. Set this parameter to null to specify the entire volume.

    +

    Pointer to the top-left corner of the source volume in memory.

    +

    Member of the enumerated type, the pixel format of the source volume.

    +

    Pitch of source image, in bytes. For DXT formats (compressed texture formats), this number should represent the size of one row of cells, in bytes.

    +

    Pitch of source image, in bytes. For DXT formats (compressed texture formats), this number should represent the size of one slice of cells, in bytes.

    +

    Pointer to a structure, the source palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the source box. null is not a valid value for this parameter.

    +

    A combination of one or more controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying | .

    +

    value to replace with transparent black, or 0 to disable the colorkey. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys. Thus, for opaque black, the value would be equal to 0xFF000000.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , D3DXERR_INVALIDDATA.

    + +

    Writing to a non-level-zero surface of the volume texture will not cause the dirty rectangle to be updated. If is called and the texture was not already dirty (this is unlikely under normal usage scenarios), the application needs to explicitly call on the volume texture.

    +
    + + bb172907 + HRESULT D3DXLoadVolumeFromMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcRowPitch,[In] unsigned int SrcSlicePitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey) + D3DXLoadVolumeFromMemory +
    + + +

    Creates a volume texture from a file.

    +
    +

    Pointer to an interface, representing the device to be associated with the texture.

    +

    Pointer to a string that specifies the filename. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Width in pixels. If this value is zero or D3DX_DEFAULT, the dimensions are taken from the file. The maximum dimension that a driver supports (for width, height, and depth) can be found in MaxVolumeExtent in .

    +

    Height, in pixels. If this value is zero or D3DX_DEFAULT, the dimensions are taken from the file. The maximum dimension that a driver supports (for width, height, and depth) can be found in MaxVolumeExtent in .

    +

    Depth, in pixels. If this value is zero or D3DX_DEFAULT, the dimensions are taken from the file. The maximum dimension that a driver supports (for width, height, and depth) can be found in MaxVolumeExtent in .

    +

    Number of mip levels requested. If this value is zero or D3DX_DEFAULT, a complete mipmap chain is created.

    +

    0, , or . Setting this flag to indicates that the surface is to be used as a render target. The resource can then be passed to the pNewRenderTarget parameter of the SetRenderTarget method. If either or is specified, Pool must be set to , and the application should check that the device supports this operation by calling CheckDeviceFormat. indicates that the surface should be handled dynamically. For more information about using dynamic textures, see Using Dynamic Textures.

    +

    Member of the enumerated type, describing the requested pixel format for the texture. The returned texture might have a different format from that specified by Format. Applications should check the format of the returned texture. If , the format is taken from the file. If D3DFMT_FROM_FILE, the format is taken exactly as it is in the file, and the call will fail if this violates device capabilities.

    +

    Member of the enumerated type, describing the memory class into which the texture should be placed.

    +

    A combination of one or more controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying | .

    +

    A combination of one or more controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying . In addition, use bits 27-31 to specify the number of mip levels to be skipped (from the top of the mipmap chain) when a .dds texture is loaded into memory; this allows you to skip up to 32 levels.

    +

    value to replace with transparent black, or 0 to disable the colorkey. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys. Thus, for opaque black, the value would be equal to 0xFF000000.

    +

    Pointer to a structure to be filled in with a description of the data in the source image file, or null.

    +

    Pointer to a structure, representing a 256-color palette to fill in, or null.

    +

    Address of a reference to an interface, representing the created texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateVolumeTextureFromFileExA because ANSI strings are being used.

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Mipmapped textures automatically have each level filled with the loaded volume texture. When loading images into mipmapped textures, some devices are unable to go to a 1x1 image and this function will fail. If this happens, then the images need to be loaded manually.

    When skipping mipmap levels while loading a .dds file, use the D3DX_SKIP_DDS_MIP_LEVELS macro to generate the MipFilter value. This macro takes the number of levels to skip and the filter type and returns the filter value, which would then be passed into the MipFilter parameter.

    +
    + + bb172812 + HRESULT D3DXCreateVolumeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Width,[In] unsigned int Height,[In] unsigned int Depth,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + D3DXCreateVolumeTextureFromFileExW +
    + + +

    Creates a texture from a file in memory. This is a more advanced function than .

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    For details about , see the Platform SDK. Note that as of DirectX 8.0, the peFlags member of the structure does not function as documented in the Platform SDK. The peFlags member is now the alpha channel for 8-bit palettized formats.

    When skipping mipmap levels while loading a .dds file, use the D3DX_SKIP_DDS_MIP_LEVELS macro to generate the MipFilter value. This macro takes the number of levels to skip and the filter type and returns the filter value, which would then be passed into the MipFilter parameter.

    +
    + + bb172804 + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Width,[In] unsigned int Height,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + D3DXCreateTextureFromFileInMemoryEx +
    + + +

    Saves a volume to a buffer. The method creates an buffer to store the data, and returns that object.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be the following:

    + + bb205436 + HRESULT D3DXSaveVolumeToFileInMemory([In] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DVolume9* pSrcVolume,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcBox) + D3DXSaveVolumeToFileInMemory +
    + + +

    Creates a volume texture from a resource.

    +
    +

    Pointer to an interface, representing the device to be associated with the volume texture.

    +

    Handle to the module where the resource is located, or null for the module associated with the image the operating system used to create the current process.

    +

    Pointer to a string that specifies the resource name. If the compiler settings require Unicode, the data type LPCTSTR resolves to LPCWSTR. Otherwise, the string data type resolves to LPCSTR. See Remarks.

    +

    Address of a reference to an interface representing the created texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    The compiler setting also determines the function version. If Unicode is defined, the function call resolves to . Otherwise, the function call resolves to D3DXCreateVolumeTextureFromResourceA because ANSI strings are being used.

    The function is equivalent to (pDevice, hSrcModule, pSrcResource, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, , , D3DX_DEFAULT, D3DX_DEFAULT, 0, null, null, ppVolumeTexture).

    The resource being loaded must be an application-defined resource (RT_RCDATA).

    This function supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Note that a resource created with this function when called from a object will be placed in the memory class denoted by . When this method is called from a object the resource will be placed in the memory class denoted by .

    Filtering is automatically applied to a texture created using this method. The filtering is equivalent to | in .

    +
    + + bb172815 + HRESULT D3DXCreateVolumeTextureFromResourceW([In] IDirect3DDevice9* pDevice,[In] HINSTANCE hSrcModule,[In] const wchar_t* pSrcResource,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + D3DXCreateVolumeTextureFromResourceW +
    + + +

    Creates an empty texture, adjusting the calling parameters as needed.

    +
    +

    Pointer to an interface, representing the device to be associated with the texture.

    +

    Width in pixels. If this value is 0, a value of 1 is used. See Remarks.

    +

    Height in pixels. If this value is 0, a value of 1 is used. See Remarks.

    +

    Number of mip levels requested. If this value is zero or D3DX_DEFAULT, a complete mipmap chain is created.

    +

    0, , or . Setting this flag to indicates that the surface is to be used as a render target by calling the SetRenderTarget method. If either or is specified, the application should check that the device supports this operation by calling CheckDeviceFormat. For more information about using dynamic textures, see Using Dynamic Textures.

    +

    Member of the enumerated type, describing the requested pixel format for the texture. The returned texture may be of a different format from that specified, if the device does not support the requested format. Applications should check the format of the returned texture to see if it matches the format requested.

    +

    Member of the enumerated type, describing the memory class into which the texture should be placed.

    +

    Address of a reference to an interface, representing the created texture object.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , , , E_OUTOFMEMORY.

    + +

    Internally, uses to adjust the calling parameters. Therefore, calls to will often succeed where calls to CreateTexture would fail.

    If both Height and Width are set to D3DX_DEFAULT, a value of 256 is used for both parameters. If either Height or Width is set to D3DX_DEFAULT And the other parameter is set to a numeric value, the texture will be square with both the height and width equal to the numeric value.

    +
    + + bb172800 + HRESULT D3DXCreateTexture([In] IDirect3DDevice9* pDevice,[In] unsigned int Width,[In] unsigned int Height,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] IDirect3DTexture9** ppTexture) + D3DXCreateTexture +
    + + +

    Uses a user-provided function to fill each texel of each mip level of a given volume texture.

    +
    +

    Pointer to an interface, representing the filled texture.

    +

    Pointer to a user-provided evaluator function, which will be used to compute the value of each texel. The function follows the prototype of LPD3DXFILL3D.

    +

    Pointer to an arbitrary block of user-defined data. This reference will be passed to the function provided in pFunction.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: .

    + +

    If the volume is non-dynamic (because usage is set to 0 when it is created), and located in video memory (the memory pool set to ), will fail because the volume cannot be locked.

    This example creates a function called ColorVolumeFill, which relies on .

     // Define a function that matches the prototype of LPD3DXFILL3D	
    +            VOID WINAPI ColorVolumeFill (* pOut, const * pTexCoord, 	
    +            const * pTexelSize, LPVOID pData)	
    +            { *pOut = (pTexCoord->x, pTexCoord->y, pTexCoord->z, 0.0f);	
    +            } // Fill volume texture	
    +            if (FAILED (hr =  (m_pTexture, ColorVolumeFill, null)))	
    +            { return hr;	
    +            }	
    +            
    +
    + + bb172835 + HRESULT D3DXFillVolumeTexture([In] IDirect3DVolumeTexture9* pVolumeTexture,[In] __function__stdcall* pFunction,[In] void* pData) + D3DXFillVolumeTexture +
    + + +

    Loads a surface from another surface with color conversion.

    +
    +

    Pointer to an interface. Specifies the destination surface, which receives the image.

    +

    Pointer to a structure, the destination palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the destination rectangle. Set this parameter to null to specify the entire surface.

    +

    Pointer to an interface, representing the source surface.

    +

    Pointer to a structure, the source palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the source rectangle. Set this parameter to null to specify the entire surface.

    +

    A combination of one or more , controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying | .

    +

    value to replace with transparent black, or 0 to disable the colorkey. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys. Thus, for opaque black, the value would be equal to 0xFF000000.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    This function handles conversion to and from compressed texture formats.

    Writing to a non-level-zero surface will not cause the dirty rectangle to be updated. If is called and the surface was not already dirty (this is unlikely under normal usage scenarios), the application needs to explicitly call AddDirtyRect on the surface.

    +
    + + bb172904 + HRESULT D3DXLoadSurfaceFromSurface([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + D3DXLoadSurfaceFromSurface +
    + + +

    Loads a volume from a file in memory.

    +
    +

    Pointer to an interface. Specifies the destination volume.

    +

    Pointer to a structure, the destination palette of 256 colors or null.

    +

    Pointer to a structure. Specifies the destination box. Set this parameter to null to specify the entire volume.

    +

    Pointer to the file in memory from which to load the volume.

    +

    Size in bytes of the file in memory.

    +

    Pointer to a structure. Specifies the source box. Set this parameter to null to specify the entire volume.

    +

    Combination of one or more , controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying | .

    +

    value to replace with transparent black, or 0 to disable the colorkey. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys. Thus, for opaque black, the value would be equal to 0xFF000000.

    +

    Pointer to a structure to be filled with a description of the data in the source image file, or null.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    This function handles conversion to and from compressed texture formats and supports the following file formats: .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, and .tga. See .

    Writing to a non-level-zero surface of the volume texture will not cause the dirty rectangle to be updated. If is called and the texture was not already dirty (this is unlikely under normal usage scenarios), the application needs to explicitly call on the volume texture.

    +
    + + bb172906 + HRESULT D3DXLoadVolumeFromFileInMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + D3DXLoadVolumeFromFileInMemory +
    + + +

    Creates an instance of an object.

    +
    + No documentation. +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: E_POINTER, E_OUTOFMEMORY.

    + +

    After using this function, use RegisterTemplates or RegisterEnumTemplates to register templates, CreateEnumObject to create an enumerator object, or CreateSaveObject to create a save object.

    +
    + + bb172830 + HRESULT D3DXFileCreate([In] ID3DXFile** lplpDirectXFile) + D3DXFileCreate +
    + + + Functions + + + + + Constant ConflictingRenderState. + D3DERR_CONFLICTINGRENDERSTATE + + + Constant ConflictingTextureFilter. + D3DERR_CONFLICTINGTEXTUREFILTER + + + Constant ConflictingTexturePalette. + D3DERR_CONFLICTINGTEXTUREPALETTE + + + Constant DeviceHung. + D3DERR_DEVICEHUNG + + + Constant DeviceLost. + D3DERR_DEVICELOST + + + Constant DeviceNotReset. + D3DERR_DEVICENOTRESET + + + Constant DeviceRemoved. + D3DERR_DEVICEREMOVED + + + Constant DriverInternalError. + D3DERR_DRIVERINTERNALERROR + + + Constant InvalidCall. + D3DERR_INVALIDCALL + + + Constant InvalidDevice. + D3DERR_INVALIDDEVICE + + + Constant MoreData. + D3DERR_MOREDATA + + + Constant NoAutomaticGeneration. + D3DOK_NOAUTOGEN + + + Constant NotAvailable. + D3DERR_NOTAVAILABLE + + + Constant NotFound. + D3DERR_NOTFOUND + + + Constant OutOfVideoMemory. + D3DERR_OUTOFVIDEOMEMORY + + + Constant PresentModeChanged. + S_PRESENT_MODE_CHANGED + + + Constant PresentOccluded. + S_PRESENT_OCCLUDED + + + Constant ResidentInSharedMemory. + S_RESIDENT_IN_SHARED_MEMORY + + + Constant Success. + D3D_OK + + + Constant TooManyOperations. + D3DERR_TOOMANYOPERATIONS + + + Constant UnsupportedAlphaArgument. + D3DERR_UNSUPPORTEDALPHAARG + + + Constant UnsupportedAlphaOperation. + D3DERR_UNSUPPORTEDALPHAOPERATION + + + Constant UnsupportedColorArgument. + D3DERR_UNSUPPORTEDCOLORARG + + + Constant UnsupportedColorOperation. + D3DERR_UNSUPPORTEDCOLOROPERATION + + + Constant UnsupportedFactorValue. + D3DERR_UNSUPPORTEDFACTORVALUE + + + Constant UnsupportedTextureFilter. + D3DERR_UNSUPPORTEDTEXTUREFILTER + + + Constant WasStillDrawing. + D3DERR_WASSTILLDRAWING + + + Constant WrongTextureFormat. + D3DERR_WRONGTEXTUREFORMAT + + + +

    An application implements this interface to handle callbacks in animation sets generated by calls to .

    +
    + +

    The LPD3DXANIMATIONCALLBACKHANDLER type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXANIMATIONCALLBACKHANDLER;	
    +            
    +
    + + bb205624 + ID3DXAnimationCallbackHandler + ID3DXAnimationCallbackHandler +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    The application implements this method. This method is called when a callback occurs for an animation set in one of the tracks during a call to .

    +
    + No documentation. + No documentation. +

    The return values of this method are implemented by an application programmer. In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR.

    + + bb205625 + HRESULT ID3DXAnimationCallbackHandler::HandleCallback([In] unsigned int Track,[In] void* pCallbackData) + ID3DXAnimationCallbackHandler::HandleCallback +
    + + +

    This interface is used to control animation functionality, connecting animation sets with the transformation frames that are being animated. The interface has methods to mix multiple animations and to modify blending parameters over time to enable smooth transitions and other effects.

    +
    + +

    Create an animation controller object with .

    The LPD3DXANIMATIONCONTROLLER type is defined as a reference to the interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXANIMATIONCONTROLLER;	
    +            

    The D3DXEVENTHANDLE type is defined as an event handle to animation controller events.

     typedef DWORD D3DXEVENTHANDLE;	
    +            

    The LPD3DXEVENTHANDLE type is defined as a reference to an event handle to animation controller events.

     typedef D3DXEVENTHANDLE *LPD3DXEVENTHANDLE;	
    +            
    +
    + + bb205626 + ID3DXAnimationController + ID3DXAnimationController +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get the maximum number of animation outputs the animation controller can support.

    +
    + + bb205634 + GetMaxNumAnimationOutputs + GetMaxNumAnimationOutputs + unsigned int ID3DXAnimationController::GetMaxNumAnimationOutputs() +
    + + +

    Gets the maximum number of animation sets the animation controller can support.

    +
    + + bb205635 + GetMaxNumAnimationSets + GetMaxNumAnimationSets + unsigned int ID3DXAnimationController::GetMaxNumAnimationSets() +
    + + +

    Gets the maximum number of tracks in the animation controller.

    +
    + +

    The maximum number of tracks the controller can manage.

    +
    + + bb205637 + GetMaxNumTracks + GetMaxNumTracks + unsigned int ID3DXAnimationController::GetMaxNumTracks() +
    + + +

    Gets the maximum number of events the animation controller can support.

    +
    + + bb205636 + GetMaxNumEvents + GetMaxNumEvents + unsigned int ID3DXAnimationController::GetMaxNumEvents() +
    + + +

    Returns the number of animation sets currently registered in the animation controller.

    +
    + +

    The controller contains any number of animations sets and tracks. Animation sets can be registered with RegisterAnimationOutput. An animation controller created by a call to will automatically register loaded animation sets.

    +
    + + bb205638 + GetNumAnimationSets + GetNumAnimationSets + unsigned int ID3DXAnimationController::GetNumAnimationSets() +
    + + +

    Gets the global animation time.

    +
    + +

    Animations are designed using a local animation time and mixed into global time with AdvanceTime.

    +
    + + bb205640 + GetTime + GetTime + double ID3DXAnimationController::GetTime() +
    + + +

    Gets or sets the current priority blending weight used by the animation controller.

    +
    + +

    The priority blending weight is used to blend high and low priority tracks together.

    +
    + + bb205639 + GetPriorityBlend / SetPriorityBlend + GetPriorityBlend + float ID3DXAnimationController::GetPriorityBlend() +
    + + +

    Returns an event handle to a priority blend event that is currently running.

    +
    + + bb205631 + GetCurrentPriorityBlend + GetCurrentPriorityBlend + unsigned int ID3DXAnimationController::GetCurrentPriorityBlend() +
    + + +

    Get the maximum number of animation outputs the animation controller can support.

    +
    +

    The maximum number of animation outputs the controller can manage.

    + + bb205634 + unsigned int ID3DXAnimationController::GetMaxNumAnimationOutputs() + ID3DXAnimationController::GetMaxNumAnimationOutputs +
    + + +

    Gets the maximum number of animation sets the animation controller can support.

    +
    +

    The maximum number of animation sets the controller can manage.

    + + bb205635 + unsigned int ID3DXAnimationController::GetMaxNumAnimationSets() + ID3DXAnimationController::GetMaxNumAnimationSets +
    + + +

    Gets the maximum number of tracks in the animation controller.

    +
    +

    Number of tracks.

    + +

    The maximum number of tracks the controller can manage.

    +
    + + bb205637 + unsigned int ID3DXAnimationController::GetMaxNumTracks() + ID3DXAnimationController::GetMaxNumTracks +
    + + +

    Gets the maximum number of events the animation controller can support.

    +
    +

    The maximum number of events the controller can manage.

    + + bb205636 + unsigned int ID3DXAnimationController::GetMaxNumEvents() + ID3DXAnimationController::GetMaxNumEvents +
    + + +

    Adds an animation output to the animation controller and registers references for scale, rotate, and translate (SRT) transformations.

    +
    +

    Name of the animation output.

    +

    Pointer to a structure containing SRT transformation data. Can be null.

    +

    Pointer to a vector that describes the scale of the animation set. Can be null.

    +

    Pointer to a quaternion that describes the rotation of the animation set. Can be null.

    +

    Pointer to a vector that describes the translation of the animation set. Can be null.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    If the animation output is already registered, pMatrix will be filled with the input transformation data.

    Animation sets created with automatically register all loaded animation sets.

    +
    + + bb205650 + HRESULT ID3DXAnimationController::RegisterAnimationOutput([In] const char* pName,[In] D3DXMATRIX* pMatrix,[In] D3DXVECTOR3* pScale,[In] D3DXQUATERNION* pRotation,[In] D3DXVECTOR3* pTranslation) + ID3DXAnimationController::RegisterAnimationOutput +
    + + +

    Adds an animation set to the animation controller.

    +
    +

    Pointer to the animation set to add.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb205651 + HRESULT ID3DXAnimationController::RegisterAnimationSet([In] ID3DXAnimationSet* pAnimSet) + ID3DXAnimationController::RegisterAnimationSet +
    + + +

    Removes an animation set from the animation controller.

    +
    +

    Pointer to the animation set to remove.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , .

    + + bb205664 + HRESULT ID3DXAnimationController::UnregisterAnimationSet([In] ID3DXAnimationSet* pAnimSet) + ID3DXAnimationController::UnregisterAnimationSet +
    + + +

    Returns the number of animation sets currently registered in the animation controller.

    +
    +

    Number of animation sets.

    + +

    The controller contains any number of animations sets and tracks. Animation sets can be registered with RegisterAnimationOutput. An animation controller created by a call to will automatically register loaded animation sets.

    +
    + + bb205638 + unsigned int ID3DXAnimationController::GetNumAnimationSets() + ID3DXAnimationController::GetNumAnimationSets +
    + + +

    Gets an animation set.

    +
    +

    Index of the animation set.

    +

    Pointer to the animation set.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + +

    The animation controller contains an array of animation sets. This method returns one of them at the given index.

    +
    + + bb205629 + HRESULT ID3DXAnimationController::GetAnimationSet([In] unsigned int Index,[Out] ID3DXAnimationSet** ppAnimationSet) + ID3DXAnimationController::GetAnimationSet +
    + + +

    Gets an animation set, given its name.

    +
    +

    String containing the name of the animation set.

    +

    Pointer to the animation set.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + +

    The animation controller contains an array of animation sets. This method returns an animation set that has the given name.

    +
    + + bb205630 + HRESULT ID3DXAnimationController::GetAnimationSetByName([In] const char* szName,[In] ID3DXAnimationSet** ppAnimationSet) + ID3DXAnimationController::GetAnimationSetByName +
    + + +

    Animates the mesh and advances the global animation time by a specified amount.

    +
    +

    Amount, in seconds, by which to advance the global animation time. TimeDelta value must be non-negative or zero.

    +

    Pointer to a user-defined animation callback handler interface, .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb205627 + HRESULT ID3DXAnimationController::AdvanceTime([In] double TimeDelta,[In] ID3DXAnimationCallbackHandler* pCallbackHandler) + ID3DXAnimationController::AdvanceTime +
    + + +

    Resets the global animation time to zero. Any pending events will retain their original schedules, but in the new timeframe.

    +
    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + +

    This method is typically used when the global animation time value is nearing the maximum precision of DOUBLE storage, or 264 - 1.

    +
    + + bb205652 + HRESULT ID3DXAnimationController::ResetTime() + ID3DXAnimationController::ResetTime +
    + + +

    Gets the global animation time.

    +
    +

    Returns the global animation time.

    + +

    Animations are designed using a local animation time and mixed into global time with AdvanceTime.

    +
    + + bb205640 + double ID3DXAnimationController::GetTime() + ID3DXAnimationController::GetTime +
    + + +

    Applies the animation set to the specified track.

    +
    +

    Identifier of the track to which the animation set is applied.

    +

    Pointer to the animation set to be added to the track.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    This method sets the animation set to the specified track for mixing. The animation set for each track is blended according to the track weight and speed when AdvanceTime is called.

    +
    + + bb205654 + HRESULT ID3DXAnimationController::SetTrackAnimationSet([In] unsigned int Track,[In] ID3DXAnimationSet* pAnimSet) + ID3DXAnimationController::SetTrackAnimationSet +
    + + +

    Gets the animation set for the given track.

    +
    +

    Track identifier.

    +

    Pointer to the animation set for the given track.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb205641 + HRESULT ID3DXAnimationController::GetTrackAnimationSet([In] unsigned int Track,[Out] ID3DXAnimationSet** ppAnimSet) + ID3DXAnimationController::GetTrackAnimationSet +
    + + +

    Sets the priority blending weight for the specified animation track.

    +
    +

    Track identifier.

    +

    Track priority. This parameter should be set to one of the constants from .

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb205658 + HRESULT ID3DXAnimationController::SetTrackPriority([In] unsigned int Track,[In] D3DXPRIORITY_TYPE Priority) + ID3DXAnimationController::SetTrackPriority +
    + + +

    Sets the track speed. The track speed is similar to a multiplier that is used to speed up or slow down the playback of the track.

    +
    +

    Identifier of the track to set the speed on.

    +

    New speed.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb205659 + HRESULT ID3DXAnimationController::SetTrackSpeed([In] unsigned int Track,[In] float Speed) + ID3DXAnimationController::SetTrackSpeed +
    + + +

    Sets the track weight. The weight is used to determine how to blend multiple tracks together.

    +
    +

    Identifier of the track to set the weight on.

    +

    Weight value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb205660 + HRESULT ID3DXAnimationController::SetTrackWeight([In] unsigned int Track,[In] float Weight) + ID3DXAnimationController::SetTrackWeight +
    + + +

    Sets the track to the specified local animation time.

    +
    +

    Track identifier.

    +

    Local animation time value to assign to the track.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb205657 + HRESULT ID3DXAnimationController::SetTrackPosition([In] unsigned int Track,[In] double Position) + ID3DXAnimationController::SetTrackPosition +
    + + +

    Enables or disables a track in the animation controller.

    +
    +

    Identifier of the track to be mixed.

    +

    Enable value. Set to TRUE to enable this track in the controller, or to to prevent it from being mixed.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + +

    To mix a track with other tracks, the Enable flag must be set to TRUE. Conversely, setting the flag to will prevent the track from being mixed with other tracks.

    +
    + + bb205656 + HRESULT ID3DXAnimationController::SetTrackEnable([In] unsigned int Track,[In] BOOL Enable) + ID3DXAnimationController::SetTrackEnable +
    + + +

    Sets the track description.

    +
    +

    Identifier of the track to modify.

    +

    Description of the track.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb205655 + HRESULT ID3DXAnimationController::SetTrackDesc([In] unsigned int Track,[In] D3DXTRACK_DESC* pDesc) + ID3DXAnimationController::SetTrackDesc +
    + + +

    Gets the track description.

    +
    +

    Track identifier.

    +

    Pointer to the track description. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb205642 + HRESULT ID3DXAnimationController::GetTrackDesc([In] unsigned int Track,[In] D3DXTRACK_DESC* pDesc) + ID3DXAnimationController::GetTrackDesc +
    + + +

    Sets the priority blending weight used by the animation controller.

    +
    +

    Priority blending weight used by the animation controller.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: .

    + +

    The blend weight is used to blend high and low priority tracks together.

    +
    + + bb205653 + HRESULT ID3DXAnimationController::SetPriorityBlend([In] float BlendWeight) + ID3DXAnimationController::SetPriorityBlend +
    + + +

    Gets the current priority blending weight used by the animation controller.

    +
    +

    Returns the current priority blending weight.

    + +

    The priority blending weight is used to blend high and low priority tracks together.

    +
    + + bb205639 + float ID3DXAnimationController::GetPriorityBlend() + ID3DXAnimationController::GetPriorityBlend +
    + + +

    Sets an event key that changes the rate of play of an animation track.

    +
    +

    Identifier of the track to modify.

    +

    New speed of the animation track.

    +

    Global time key. Specifies the global time when the change will take place.

    +

    Transition time, which specifies how long the smooth transition will take to complete.

    +

    Specifies the transition type used for transitioning between speeds. See .

    +

    Event handle to the priority blend event. null is returned if one or more of the input parameters is invalid, or no free event is available.

    + + bb205648 + unsigned int ID3DXAnimationController::KeyTrackSpeed([In] unsigned int Track,[In] float NewSpeed,[In] double StartTime,[In] double Duration,[In] D3DXTRANSITION_TYPE Transition) + ID3DXAnimationController::KeyTrackSpeed +
    + + +

    Sets an event key that changes the weight of an animation track. The weight is used as a multiplier when combining multiple tracks together.

    +
    +

    Identifier of the track to modify.

    +

    New weight of the track.

    +

    Global time key. Specifies the global time when the change will take place.

    +

    Transition time, which specifies how long the smooth transition will take to complete.

    +

    Specifies the transition type used for transitioning between weights. See .

    +

    Event handle to the priority blend event. null is returned if one or more of the input parameters is invalid, or no free event is available.

    + +

    The weight is used like a multiplier to determine how much of this track to blend together with other tracks.

    +
    + + bb205649 + unsigned int ID3DXAnimationController::KeyTrackWeight([In] unsigned int Track,[In] float NewWeight,[In] double StartTime,[In] double Duration,[In] D3DXTRANSITION_TYPE Transition) + ID3DXAnimationController::KeyTrackWeight +
    + + +

    Sets an event key that changes the local time of an animation track.

    +
    +

    Identifier of the track to modify.

    +

    New local time of the animation track.

    +

    Global time key. Specifies the global time when the change will take place.

    +

    Event handle to the priority blend event. null is returned if Track is invalid, or if no free event is available.

    + + bb205647 + unsigned int ID3DXAnimationController::KeyTrackPosition([In] unsigned int Track,[In] double NewPosition,[In] double StartTime) + ID3DXAnimationController::KeyTrackPosition +
    + + +

    Sets an event key that enables or disables an animation track.

    +
    +

    Identifier of the animation track to modify.

    +

    Enable flag. Set this to TRUE to enable the animation track, or to to disable the track.

    +

    Global time key. Specifies the global time when the change will take place.

    +

    Event handle to the priority blend event. null is returned if Track is invalid.

    + + bb205646 + unsigned int ID3DXAnimationController::KeyTrackEnable([In] unsigned int Track,[In] BOOL NewEnable,[In] double StartTime) + ID3DXAnimationController::KeyTrackEnable +
    + + +

    Sets blending event keys for the specified animation track.

    +
    +

    Number between 0 and 1 that is used to blend tracks together.

    +

    Global time to start the blend.

    +

    Global time duration of the blend.

    +

    Specifies the transition type used for the duration of the blend. See .

    +

    Event handle to the priority blend event. null is returned if one or more of the input parameters is invalid, or no free event is available.

    + +

    The animation controller blends in three phases: low priority tracks are blended first, high priority tracks are blended second, and then the results of both are blended.

    +
    + + bb205645 + unsigned int ID3DXAnimationController::KeyPriorityBlend([In] float NewBlendWeight,[In] double StartTime,[In] double Duration,[In] D3DXTRANSITION_TYPE Transition) + ID3DXAnimationController::KeyPriorityBlend +
    + + +

    Removes a specified event from an animation track, preventing the execution of the event.

    +
    +

    Event handle to the event to be removed from the animation track.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb205663 + HRESULT ID3DXAnimationController::UnkeyEvent([In] unsigned int hEvent) + ID3DXAnimationController::UnkeyEvent +
    + + +

    Removes all events from a specified animation track.

    +
    +

    Identifier of the track on which all events should be removed.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + +

    This method prevents the execution of all events previously scheduled on the track, and discards all data associated with those events.

    +
    + + bb205662 + HRESULT ID3DXAnimationController::UnkeyAllTrackEvents([In] unsigned int Track) + ID3DXAnimationController::UnkeyAllTrackEvents +
    + + +

    Removes all scheduled priority blend events from the animation controller.

    +
    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb205661 + HRESULT ID3DXAnimationController::UnkeyAllPriorityBlends() + ID3DXAnimationController::UnkeyAllPriorityBlends +
    + + +

    Returns an event handle to the event currently running on the specified animation track.

    +
    +

    Track identifier.

    +

    Type of event to query.

    +

    Event handle to the event currently running on the specified track. null is returned if no event is running on the specified track.

    + + bb205632 + unsigned int ID3DXAnimationController::GetCurrentTrackEvent([In] unsigned int Track,[In] D3DXEVENT_TYPE EventType) + ID3DXAnimationController::GetCurrentTrackEvent +
    + + +

    Returns an event handle to a priority blend event that is currently running.

    +
    +

    Event handle to the currently running priority blend event. null is returned if no priority blend event is currently running.

    + + bb205631 + unsigned int ID3DXAnimationController::GetCurrentPriorityBlend() + ID3DXAnimationController::GetCurrentPriorityBlend +
    + + +

    Returns an event handle to the next event scheduled to occur after a specified event on an animation track.

    +
    +

    Track identifier.

    +

    Event handle to a specified event after which to search for a following event. If set to null, then the method will return the next scheduled event.

    +

    Event handle to the next event scheduled to run on the specified track. null is returned if no new event is scheduled.

    + +

    This method can be used iteratively to locate a desired event by repeatedly passing in null for hEvent.

    Note??Do not iterate further after the method has returned null.

    +
    + + bb205644 + unsigned int ID3DXAnimationController::GetUpcomingTrackEvent([In] unsigned int Track,[In] unsigned int hEvent) + ID3DXAnimationController::GetUpcomingTrackEvent +
    + + +

    Returns an event handle to the next priority blend event scheduled to occur after a specified event.

    +
    +

    Event handle to a specified event after which to search for a following priority blend event. If set to null, then the method will return the next scheduled priority blend event.

    +

    Event handle to the next scheduled priority blend event. null is returned if no new priority blend event is scheduled.

    + +

    This method can be used iteratively to locate a desired priority blend event by repeatedly passing in null for hEvent.

    Note??Do not iterate further after the method has returned null.

    +
    + + bb205643 + unsigned int ID3DXAnimationController::GetUpcomingPriorityBlend([In] unsigned int hEvent) + ID3DXAnimationController::GetUpcomingPriorityBlend +
    + + +

    Checks whether a specified event handle is valid and the animation event has not yet completed.

    +
    +

    Event handle to an animation event.

    +

    Returns if the event handle is valid and the event has not yet completed.

    Returns E_FAIL if the event handle is invalid and/or the event has completed.

    + +

    The method will indicate that an event handle is valid even if the event is running but has not yet completed.

    +
    + + bb205665 + HRESULT ID3DXAnimationController::ValidateEvent([In] unsigned int hEvent) + ID3DXAnimationController::ValidateEvent +
    + + +

    Gets a description of a specified animation event.

    +
    +

    Event handle to an animation event to describe.

    +

    Pointer to a structure that contains a description of the animation event.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb205633 + HRESULT ID3DXAnimationController::GetEventDesc([In] unsigned int hEvent,[In] D3DXEVENT_DESC* pDesc) + ID3DXAnimationController::GetEventDesc +
    + + +

    Clones, or copies, an animation controller.

    +
    +

    Maximum number of animation outputs the controller can support.

    +

    Maximum number of animation sets the controller can support.

    +

    Maximum number of tracks the controller can support.

    +

    Maximum number of events the controller can support.

    +

    Address of a reference to the cloned animation controller.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb205628 + HRESULT ID3DXAnimationController::CloneAnimationController([In] unsigned int MaxNumAnimationOutputs,[In] unsigned int MaxNumAnimationSets,[In] unsigned int MaxNumTracks,[In] unsigned int MaxNumEvents,[In] ID3DXAnimationController** ppAnimController) + ID3DXAnimationController::CloneAnimationController +
    + + +

    This interface encapsulates the minimum functionality required of an animation set by an animation controller. Advanced users might want to implement this interface themselves to suit their specialized needs; for most users, however, the derived and interfaces should suffice.

    +
    + +

    An animation set consists of animations for many nodes for the same animation.

    The LPD3DXANIMATIONSET type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXANIMATIONSET;	
    +            
    +
    + + bb205667 + ID3DXAnimationSet + ID3DXAnimationSet +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the animation set name.

    +
    + + bb205671 + GetName + GetName + const char* ID3DXAnimationSet::GetName() +
    + + +

    Gets the period of the animation set.

    +
    + +

    The period is the range of time that the animation key frames are valid. For looping animations, this is the period of the loop. The time units that the key frames are specified in (for example, seconds) is determined by the application.

    +
    + + bb205673 + GetPeriod + GetPeriod + double ID3DXAnimationSet::GetPeriod() +
    + + +

    Gets the number of animations in the animation set.

    +
    + + bb205672 + GetNumAnimations + GetNumAnimations + unsigned int ID3DXAnimationSet::GetNumAnimations() +
    + + +

    Gets the animation set name.

    +
    +

    Name of the animation set.

    + + bb205671 + const char* ID3DXAnimationSet::GetName() + ID3DXAnimationSet::GetName +
    + + +

    Gets the period of the animation set.

    +
    +

    Period of the animation set.

    + +

    The period is the range of time that the animation key frames are valid. For looping animations, this is the period of the loop. The time units that the key frames are specified in (for example, seconds) is determined by the application.

    +
    + + bb205673 + double ID3DXAnimationSet::GetPeriod() + ID3DXAnimationSet::GetPeriod +
    + + +

    Returns time position in the local timeframe of an animation set.

    +
    +

    Local time of the animation set.

    +

    Time position as measured in the timeframe of the animation set. This value will be bounded by the period of the animation set.

    + +

    The time position returned by this method can be used as the PeriodicPosition parameter of .

    +
    + + bb205674 + double ID3DXAnimationSet::GetPeriodicPosition([In] double Position) + ID3DXAnimationSet::GetPeriodicPosition +
    + + +

    Gets the number of animations in the animation set.

    +
    +

    Number of animations in the animation set.

    + + bb205672 + unsigned int ID3DXAnimationSet::GetNumAnimations() + ID3DXAnimationSet::GetNumAnimations +
    + + +

    Gets the name of an animation, given its index.

    +
    +

    Index of the animation.

    +

    Address of a reference to a string that receives the animation name.

    +

    The return values of this method are implemented by an application programmer.In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR.

    + + bb205669 + HRESULT ID3DXAnimationSet::GetAnimationNameByIndex([In] unsigned int Index,[In] const char** ppName) + ID3DXAnimationSet::GetAnimationNameByIndex +
    + + +

    Gets the index of an animation, given its name.

    +
    +

    Name of the animation.

    +

    Pointer to the animation index.

    +

    The return values of this method are implemented by an application programmer.In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR.

    + + bb205668 + HRESULT ID3DXAnimationSet::GetAnimationIndexByName([In] const char* pName,[In] unsigned int* pIndex) + ID3DXAnimationSet::GetAnimationIndexByName +
    + + +

    Gets the scale, rotation, and translation values of the animation set.

    +
    +

    Position of the animation set. The position can be obtained by calling .

    +

    Animation index.

    +

    Pointer to the vector that describes the scale of the animation set.

    +

    Pointer to the quaternion that describes the rotation of the animation set.

    +

    Pointer to the vector that describes the translation of the animation set.

    +

    The return values of this method are implemented by an application programmer.In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR.

    + + bb205675 + HRESULT ID3DXAnimationSet::GetSRT([In] double PeriodicPosition,[In] unsigned int Animation,[Out] D3DXVECTOR3* pScale,[Out] D3DXQUATERNION* pRotation,[Out] D3DXVECTOR3* pTranslation) + ID3DXAnimationSet::GetSRT +
    + + +

    Gets information about a specific callback in the animation set.

    +
    +

    Position from which to find callbacks.

    +

    Callback search flags. This parameter can be set to a combination of one or more flags from .

    +

    Pointer to the position of the callback.

    +

    Address of the callback data reference.

    +

    The return values of this method are implemented by an application programmer.In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR.

    + + bb205670 + HRESULT ID3DXAnimationSet::GetCallback([In] double Position,[In] unsigned int Flags,[Out] double* pCallbackPosition,[In] void** ppCallbackData) + ID3DXAnimationSet::GetCallback +
    + + +

    Locks a vertex buffer and obtains a reference to the vertex buffer memory.

    +
    + +

    When working with vertex buffers, you are allowed to make multiple lock calls; however, you must ensure that the number of lock calls match the number of unlock calls. DrawPrimitive calls will not succeed with any outstanding lock count on any currently set vertex buffer.

    +
    + + bb205749 + ID3DXBaseMesh + ID3DXBaseMesh +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the fixed function vertex value.

    +
    + +

    This method can return 0 if the vertex format cannot be mapped directly to an FVF code. This will occur for a mesh created from a vertex declaration that doesn't have the same order and elements supported by the FVF codes.

    +
    + + bb205741 + GetFVF + GetFVF + unsigned int ID3DXBaseMesh::GetFVF() +
    + + +

    Gets the number of bytes per vertex.

    +
    + + bb205743 + GetNumBytesPerVertex + GetNumBytesPerVertex + unsigned int ID3DXBaseMesh::GetNumBytesPerVertex() +
    + + +

    Retrieves the mesh options enabled for this mesh at creation time.

    +
    + + bb205746 + GetOptions + GetOptions + unsigned int ID3DXBaseMesh::GetOptions() +
    + + +

    Retrieves the device associated with the mesh.

    +
    + +

    Calling this method will increase the internal reference count on the interface. Be sure to call when you are done using this interface or you will have a memory leak.

    +
    + + bb205740 + GetDevice + GetDevice + HRESULT ID3DXBaseMesh::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Retrieves the vertex buffer associated with the mesh.

    +
    + + bb205747 + GetVertexBuffer + GetVertexBuffer + HRESULT ID3DXBaseMesh::GetVertexBuffer([Out] IDirect3DVertexBuffer9** ppVB) +
    + + +

    Retrieves the data in an index buffer.

    +
    + + bb205742 + GetIndexBuffer + GetIndexBuffer + HRESULT ID3DXBaseMesh::GetIndexBuffer([Out] IDirect3DIndexBuffer9** ppIB) +
    + + +

    Draws a subset of a mesh.

    +
    +

    DWORD that specifies which subset of the mesh to draw. This value is used to differentiate faces in a mesh as belonging to one or more attribute groups.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    The subset that is specified by AttribId will be rendered by the method, using the primitive type, so an index buffer must be properly initialized.

    An attribute table is used to identify areas of the mesh that need to be drawn with different textures, render states, materials, and so on. In addition, the application can use the attribute table to hide portions of a mesh by not drawing a given attribute identifier (AttribId) when drawing the frame.

    +
    + + bb205736 + HRESULT ID3DXBaseMesh::DrawSubset([In] unsigned int AttribId) + ID3DXBaseMesh::DrawSubset +
    + + +

    Retrieves the number of faces in the mesh.

    +
    +

    Returns the number of faces in the mesh.

    + + bb205744 + unsigned int ID3DXBaseMesh::GetNumFaces() + ID3DXBaseMesh::GetNumFaces +
    + + +

    Retrieves the number of vertices in the mesh.

    +
    +

    Returns the number of vertices in the mesh.

    + + bb205745 + unsigned int ID3DXBaseMesh::GetNumVertices() + ID3DXBaseMesh::GetNumVertices +
    + + +

    Gets the fixed function vertex value.

    +
    +

    Returns the flexible vertex format (FVF) codes.

    + +

    This method can return 0 if the vertex format cannot be mapped directly to an FVF code. This will occur for a mesh created from a vertex declaration that doesn't have the same order and elements supported by the FVF codes.

    +
    + + bb205741 + unsigned int ID3DXBaseMesh::GetFVF() + ID3DXBaseMesh::GetFVF +
    + + +

    Retrieves a declaration describing the vertices in the mesh.

    +
    +

    Array of elements describing the vertex format of the mesh vertices. The upper limit of this declarator array is . The vertex element array ends with the D3DDECL_END macro.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    The array of elements includes the D3DDECL_END macro, which ends the declaration.

    +
    + + bb205739 + HRESULT ID3DXBaseMesh::GetDeclaration([In] D3DVERTEXELEMENT9* Declaration) + ID3DXBaseMesh::GetDeclaration +
    + + +

    Gets the number of bytes per vertex.

    +
    +

    Returns the number of bytes per vertex.

    + + bb205743 + unsigned int ID3DXBaseMesh::GetNumBytesPerVertex() + ID3DXBaseMesh::GetNumBytesPerVertex +
    + + +

    Retrieves the mesh options enabled for this mesh at creation time.

    +
    +

    Returns a combination of one or more of the following flags, indicating the options enabled for this mesh at creation time.

    ValueDescription
    Use 32-bit indices.
    Use the usage flag for vertex and index buffers.
    Equivalent to specifying both and .
    Use the usage flag for vertex and index buffers.
    Specifying this flag causes the vertex and index buffer of the mesh to be created with flag. This is required if the mesh object is to be rendered using N-Patch enhancement.
    Equivalent to specifying both and .
    Use the usage flag for vertex and index buffers.
    Use the usage flag for index buffers.
    Use the memory class for index buffers.
    Use the memory class for index buffers.
    Use the usage flag for index buffers.
    Equivalent to specifying both and .
    Use the usage flag for vertex buffers.
    Use the memory class for vertex buffers.
    Use the memory class for vertex buffers.
    Use the usage flag for vertex buffers.
    Equivalent to specifying both and .

    ?

    + + bb205746 + unsigned int ID3DXBaseMesh::GetOptions() + ID3DXBaseMesh::GetOptions +
    + + +

    Retrieves the device associated with the mesh.

    +
    +

    Address of a reference to an interface, representing the Direct3D device object associated with the mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Calling this method will increase the internal reference count on the interface. Be sure to call when you are done using this interface or you will have a memory leak.

    +
    + + bb205740 + HRESULT ID3DXBaseMesh::GetDevice([Out] IDirect3DDevice9** ppDevice) + ID3DXBaseMesh::GetDevice +
    + + +

    Clones a mesh using a flexible vertex format (FVF) code.

    +
    +

    A combination of one or more D3DXMESH flags specifying creation options for the mesh.

    +

    Combination of FVF codes, which specifies the vertex format for the vertices in the output mesh. For the values of the codes, see .

    +

    Pointer to an interface representing the device object associated with the mesh.

    +

    Address of a reference to an interface, representing the cloned mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    is used to reformat and change the vertex data layout. This is done by creating a new mesh object. For example, use it to to add space for normals, texture coordinates, colors, weights, etc. that were not present before.

    updates the vertex declaration with different semantic information without changing the layout of the vertex buffer. This method does not modify the contents of the vertex buffer. For example, use it to relabel a 3D texture coordinate as a binormal or tangent or vice versa.

    +
    + + bb205733 + HRESULT ID3DXBaseMesh::CloneMeshFVF([In] unsigned int Options,[In] unsigned int FVF,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXMesh** ppCloneMesh) + ID3DXBaseMesh::CloneMeshFVF +
    + + +

    Clones a mesh using a declarator.

    +
    +

    A combination of one or more D3DXMESH flags specifying creation options for the mesh.

    +

    An array of elements, which specify the vertex format for the vertices in the output mesh.

    +

    Pointer to an interface, representing the device object associated with the mesh.

    +

    Address of a reference to an interface, representing the cloned mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    is used to reformat and change the vertex data layout. This is done by creating a new mesh object. For example, use it to add space for normals, texture coordinates, colors, weights, etc. that were not present before.

    updates the vertex declaration with different semantic information without changing the layout of the vertex buffer. This method does not modify the contents of the vertex buffer. For example, use it to relabel a 3D texture coordinate as a binormal or tangent or vice versa.

    +
    + + bb205732 + HRESULT ID3DXBaseMesh::CloneMesh([In] unsigned int Options,[In] const D3DVERTEXELEMENT9* pDeclaration,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXMesh** ppCloneMesh) + ID3DXBaseMesh::CloneMesh +
    + + +

    Retrieves the vertex buffer associated with the mesh.

    +
    +

    Address of a reference to an interface, representing the vertex buffer object associated with the mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205747 + HRESULT ID3DXBaseMesh::GetVertexBuffer([Out] IDirect3DVertexBuffer9** ppVB) + ID3DXBaseMesh::GetVertexBuffer +
    + + +

    Retrieves the data in an index buffer.

    +
    +

    Address of a reference to an interface, representing the index buffer object associated with the mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205742 + HRESULT ID3DXBaseMesh::GetIndexBuffer([Out] IDirect3DIndexBuffer9** ppIB) + ID3DXBaseMesh::GetIndexBuffer +
    + + +

    Locks a vertex buffer and obtains a reference to the vertex buffer memory.

    +
    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    For a description of the flags, see .

    +

    VOID* reference to a buffer containing the vertex data.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    When working with vertex buffers, you are allowed to make multiple lock calls; however, you must ensure that the number of lock calls match the number of unlock calls. DrawPrimitive calls will not succeed with any outstanding lock count on any currently set vertex buffer.

    +
    + + bb205749 + HRESULT ID3DXBaseMesh::LockVertexBuffer([In] unsigned int Flags,[In] void** ppData) + ID3DXBaseMesh::LockVertexBuffer +
    + + +

    Unlocks a vertex buffer.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205751 + HRESULT ID3DXBaseMesh::UnlockVertexBuffer() + ID3DXBaseMesh::UnlockVertexBuffer +
    + + +

    Locks an index buffer and obtains a reference to the index buffer memory.

    +
    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    For a description of the flags, see .

    +

    VOID* reference to a buffer containing the index data. The count of indices in this buffer will be equal to * 3.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    When working with index buffers, you are allowed to make multiple lock calls. However, you must ensure that the number of lock calls match the number of unlock calls. DrawPrimitive calls will not succeed with any outstanding lock count on any currently set index buffer.

    +
    + + bb205748 + HRESULT ID3DXBaseMesh::LockIndexBuffer([In] unsigned int Flags,[In] void** ppData) + ID3DXBaseMesh::LockIndexBuffer +
    + + +

    Unlocks an index buffer.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205750 + HRESULT ID3DXBaseMesh::UnlockIndexBuffer() + ID3DXBaseMesh::UnlockIndexBuffer +
    + + +

    Retrieves either an attribute table for a mesh, or the number of entries stored in an attribute table for a mesh.

    +
    +

    Pointer to an array of structures, representing the entries in the mesh's attribute table. Specify null to retrieve the value for pAttribTableSize.

    +

    Pointer to either the number of entries stored in pAttribTable or a value to be filled in with the number of entries stored in the attribute table for the mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    An attribute table is created by and passing for the Flags parameter.

    An attribute table is used to identify areas of the mesh that need to be drawn with different textures, render states, materials, and so on. In addition, the application can use the attribute table to hide portions of a mesh by not drawing a given attribute identifier when drawing the frame.

    +
    + + bb205738 + HRESULT ID3DXBaseMesh::GetAttributeTable([Out] D3DXATTRIBUTERANGE* pAttribTable,[Out] unsigned int* pAttribTableSize) + ID3DXBaseMesh::GetAttributeTable +
    + + +

    Converts point representative data to mesh adjacency information.

    +
    +

    Pointer to an array of one DWORD per vertex of the mesh that contains point representative data. This parameter is optional. Supplying a null value will cause this parameter to be interpreted as an "identity" array.

    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh. The number of bytes in this array must be at least 3 * * sizeof(DWORD).

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb205735 + HRESULT ID3DXBaseMesh::ConvertPointRepsToAdjacency([In] const unsigned int* pPRep,[In] unsigned int* pAdjacency) + ID3DXBaseMesh::ConvertPointRepsToAdjacency +
    + + +

    Converts mesh adjacency information to an array of point representatives.

    +
    +

    Pointer to an array of three DWORDs per face that specify the three neighbors for each face in the mesh. The number of bytes in this array must be at least 3 * * sizeof(DWORD).

    +

    Pointer to an array of one DWORD per vertex of the mesh that will be filled with point representative data.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb205734 + HRESULT ID3DXBaseMesh::ConvertAdjacencyToPointReps([In] const unsigned int* pAdjacency,[In] unsigned int* pPRep) + ID3DXBaseMesh::ConvertAdjacencyToPointReps +
    + + +

    Generate a list of mesh edges, as well as a list of faces that share each edge.

    +
    +

    Specifies that vertices that differ in position by less than epsilon should be treated as coincident.

    +

    Pointer to an array of three DWORDs per face to be filled with the indices of adjacent faces. The number of bytes in this array must be at least 3 * * sizeof(DWORD).

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    After an application generates adjacency information for a mesh, the mesh data can be optimized for better drawing performance.

    The order of the entries in the adjacency buffer is determined by the order of the vertex indices in the index buffer. The adjacent triangle 0 always corresponds to the edge between the indices of the corners 0 and 1. The adjacent triangle 1 always corresponds to the edge between the indices of the corners 1 and 2 while the adjacent triangle 2 corresponds to the edge between the indices of the corners 2 and 0.

    +
    + + bb205737 + HRESULT ID3DXBaseMesh::GenerateAdjacency([In] float Epsilon,[In] unsigned int* pAdjacency) + ID3DXBaseMesh::GenerateAdjacency +
    + + +

    This method allows the user to change the mesh declaration without changing the data layout of the vertex buffer. The call is valid only if the old and new declaration formats have the same vertex size.

    +
    +

    An array of elements, describing the vertex format of the mesh vertices. The upper limit of this declarator array is .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    is used to reformat and change the vertex data layout. For example, use it to to add space for normals, texture coordinates, colors, weights, etc. that were not present before.

    is a method for updating the vertex declaration with different semantic information, without changing the layout of the vertex buffer. For example, use it to relabel a 3D texture coordinate as a binormal or tangent, or vice versa.

    +
    + + bb205752 + HRESULT ID3DXBaseMesh::UpdateSemantics([In] D3DVERTEXELEMENT9* Declaration) + ID3DXBaseMesh::UpdateSemantics +
    + + +

    An application uses the methods of this interface to implement a key frame animation set stored in a compressed data format.

    +
    + +

    Create a compressed-format key frame animation set with .

    The LPD3DXCOMPRESSEDANIMATIONSET type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXCOMPRESSEDANIMATIONSET;	
    +            
    +
    + + bb205756 + ID3DXCompressedAnimationSet + ID3DXCompressedAnimationSet +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the type of the animation set playback loop.

    +
    + + bb205760 + GetPlaybackType + GetPlaybackType + D3DXPLAYBACK_TYPE ID3DXCompressedAnimationSet::GetPlaybackType() +
    + + +

    Gets the number of animation key frame ticks that occur per second.

    +
    + + bb205761 + GetSourceTicksPerSecond + GetSourceTicksPerSecond + double ID3DXCompressedAnimationSet::GetSourceTicksPerSecond() +
    + + +

    Gets the data buffer that stores compressed key frame animation data.

    +
    + + bb205758 + GetCompressedData + GetCompressedData + HRESULT ID3DXCompressedAnimationSet::GetCompressedData([Out] ID3DXBuffer** ppCompressedData) +
    + + +

    Gets the number of callback keys in the animation set.

    +
    + + bb205759 + GetNumCallbackKeys + GetNumCallbackKeys + unsigned int ID3DXCompressedAnimationSet::GetNumCallbackKeys() +
    + + +

    Gets the type of the animation set playback loop.

    +
    +

    Type of the animation set playback loop. See .

    + + bb205760 + D3DXPLAYBACK_TYPE ID3DXCompressedAnimationSet::GetPlaybackType() + ID3DXCompressedAnimationSet::GetPlaybackType +
    + + +

    Gets the number of animation key frame ticks that occur per second.

    +
    +

    Number of animation key frame ticks that occur per second.

    + + bb205761 + double ID3DXCompressedAnimationSet::GetSourceTicksPerSecond() + ID3DXCompressedAnimationSet::GetSourceTicksPerSecond +
    + + +

    Gets the data buffer that stores compressed key frame animation data.

    +
    +

    Address of a reference to the data buffer that receives compressed key frame animation data.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb205758 + HRESULT ID3DXCompressedAnimationSet::GetCompressedData([Out] ID3DXBuffer** ppCompressedData) + ID3DXCompressedAnimationSet::GetCompressedData +
    + + +

    Gets the number of callback keys in the animation set.

    +
    +

    Number of callback keys in the animation set.

    + + bb205759 + unsigned int ID3DXCompressedAnimationSet::GetNumCallbackKeys() + ID3DXCompressedAnimationSet::GetNumCallbackKeys +
    + + +

    Fills an array with callback key data used for key frame animation.

    +
    +

    Pointer to a user-allocated array of structures that the method is to fill with callback data.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb205757 + HRESULT ID3DXCompressedAnimationSet::GetCallbackKeys([In] D3DXKEY_CALLBACK* pCallbackKeys) + ID3DXCompressedAnimationSet::GetCallbackKeys +
    + + +

    This is a user-implemented interface that allows a user to set the device state from an effect. Each of the methods in this interface must be implemented by the user and will then be used as callbacks to the application when either of the following occur:

    • An effect calls .
    • Effect state is dynamically updated by calling the appropriate state change API. See individual method pages for details.

    When an application uses the state manager to implement custom callbacks, an effect no longer automatically saves and restores state when calling and . Because the application has implemented a custom save and restore behavior in the callbacks, this automatic behavior is bypassed.

    +
    + +

    A user creates an interface by implementing a class that derives from this interface, and implementing all the interface methods. Once the interface is created, you can get or set the state manager within an effect using and .

    The LPD3DXEFFECTSTATEMANAGER type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXEFFECTSTATEMANAGER;	
    +            
    +
    + + bb205795 + ID3DXEffectStateManager + ID3DXEffectStateManager +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    A callback function that must be implemented by a user to set material state.

    +
    + + bb205799 + SetMaterial + SetMaterial + HRESULT ID3DXEffectStateManager::SetMaterial([In] const D3DMATERIAL9* pMaterial) +
    + + +

    A callback function that must be implemented by a user to set the number of subdivision segments for N-patches.

    +
    + + bb205800 + SetNPatchMode + SetNPatchMode + HRESULT ID3DXEffectStateManager::SetNPatchMode([In] float NumSegments) +
    + + +

    A callback function that must be implemented by a user to set a FVF code.

    +
    + + bb205797 + SetFVF + SetFVF + HRESULT ID3DXEffectStateManager::SetFVF([In] D3DFVF FVF) +
    + + +

    A callback function that must be implemented by a user to set a vertex shader.

    +
    + + bb205810 + SetVertexShader + SetVertexShader + HRESULT ID3DXEffectStateManager::SetVertexShader([In] IDirect3DVertexShader9* pShader) +
    + + +

    A callback function that must be implemented by a user to set a pixel shader.

    +
    + + bb205801 + SetPixelShader + SetPixelShader + HRESULT ID3DXEffectStateManager::SetPixelShader([In] IDirect3DPixelShader9* pShader) +
    + + +

    A callback function that must be implemented by a user to set a transform.

    +
    +

    The type of transform to apply the matrix to. See .

    +

    A transformation matrix. See .

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205809 + HRESULT ID3DXEffectStateManager::SetTransform([In] D3DTRANSFORMSTATETYPE State,[In] const D3DMATRIX* pMatrix) + ID3DXEffectStateManager::SetTransform +
    + + +

    A callback function that must be implemented by a user to set material state.

    +
    +

    A reference to the material state. See .

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205799 + HRESULT ID3DXEffectStateManager::SetMaterial([In] const D3DMATERIAL9* pMaterial) + ID3DXEffectStateManager::SetMaterial +
    + + +

    A callback function that must be implemented by a user to set a light.

    +
    +

    The zero-based index of the light. This is the same index in .

    +

    The light object. See .

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205798 + HRESULT ID3DXEffectStateManager::SetLight([In] unsigned int Index,[In] const D3DLIGHT9* pLight) + ID3DXEffectStateManager::SetLight +
    + + +

    A callback function that must be implemented by a user to enable/disable a light.

    +
    +

    The zero-based index of the light. This is the same index in .

    +

    True to enable the light, false otherwise.

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205796 + HRESULT ID3DXEffectStateManager::LightEnable([In] unsigned int Index,[In] BOOL Enable) + ID3DXEffectStateManager::LightEnable +
    + + +

    A callback function that must be implemented by a user to set render state.

    +
    +

    The render state to set.

    +

    The render state value. See Effect States (Direct3D 9).

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205805 + HRESULT ID3DXEffectStateManager::SetRenderState([In] D3DRENDERSTATETYPE State,[In] unsigned int Value) + ID3DXEffectStateManager::SetRenderState +
    + + +

    A callback function that must be implemented by a user to set a texture.

    +
    +

    The stage to which the texture is assigned. This is the index value in or .

    +

    A reference to the texture object. This can be any of the Direct3D texture types (cube, volume, etc.). See .

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205807 + HRESULT ID3DXEffectStateManager::SetTexture([In] unsigned int Stage,[In] IDirect3DBaseTexture9* pTexture) + ID3DXEffectStateManager::SetTexture +
    + + +

    A callback function that must be implemented by a user to set the texture stage state.

    +
    +

    The stage that the texture is assigned to. This is the index value in or .

    +

    Defines the type of operation that a texture stage will perform. See .

    +

    Can be either an operation () or an argument value (), depending on what is chosen for Type.

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205808 + HRESULT ID3DXEffectStateManager::SetTextureStageState([In] unsigned int Stage,[In] D3DTEXTURESTAGESTATETYPE Type,[In] unsigned int Value) + ID3DXEffectStateManager::SetTextureStageState +
    + + +

    A callback function that must be implemented by a user to set a sampler.

    +
    +

    The zero-based sampler number.

    +

    Identifies sampler state, which can specify the filtering, addressing, or the border color. See .

    +

    A value from one of the sampler state types in Type.

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205806 + HRESULT ID3DXEffectStateManager::SetSamplerState([In] unsigned int Sampler,[In] D3DSAMPLERSTATETYPE Type,[In] unsigned int Value) + ID3DXEffectStateManager::SetSamplerState +
    + + +

    A callback function that must be implemented by a user to set the number of subdivision segments for N-patches.

    +
    +

    Break the surface into this number of subdivisions. This is the same as the number used by .

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205800 + HRESULT ID3DXEffectStateManager::SetNPatchMode([In] float NumSegments) + ID3DXEffectStateManager::SetNPatchMode +
    + + +

    A callback function that must be implemented by a user to set a FVF code.

    +
    +

    The FVF constant, that determines how to interpret vertex data. See .

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205797 + HRESULT ID3DXEffectStateManager::SetFVF([In] D3DFVF FVF) + ID3DXEffectStateManager::SetFVF +
    + + +

    A callback function that must be implemented by a user to set a vertex shader.

    +
    +

    A reference to a vertex shader object. See .

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205810 + HRESULT ID3DXEffectStateManager::SetVertexShader([In] IDirect3DVertexShader9* pShader) + ID3DXEffectStateManager::SetVertexShader +
    + + +

    A callback function that must be implemented by a user to set an array of vertex shader floating-point constants.

    +
    +

    The zero-based index of the first constant register.

    +

    An array of floating-point constants.

    +

    The number of registers in pConstantData.

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205812 + HRESULT ID3DXEffectStateManager::SetVertexShaderConstantF([In] unsigned int RegisterIndex,[In] const float* pConstantData,[In] unsigned int RegisterCount) + ID3DXEffectStateManager::SetVertexShaderConstantF +
    + + +

    A callback function that must be implemented by a user to set an array of vertex shader integer constants.

    +
    +

    The zero-based index of the first constant register.

    +

    An array of integer constants.

    +

    The number of registers in pConstantData.

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205813 + HRESULT ID3DXEffectStateManager::SetVertexShaderConstantI([In] unsigned int RegisterIndex,[In] const int* pConstantData,[In] unsigned int RegisterCount) + ID3DXEffectStateManager::SetVertexShaderConstantI +
    + + +

    A callback function that must be implemented by a user to set an array of vertex shader Boolean constants.

    +
    +

    The zero-based index of the first constant register.

    +

    An array of Boolean constants.

    +

    The number of registers in pConstantData.

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205811 + HRESULT ID3DXEffectStateManager::SetVertexShaderConstantB([In] unsigned int RegisterIndex,[In] const BOOL* pConstantData,[In] unsigned int RegisterCount) + ID3DXEffectStateManager::SetVertexShaderConstantB +
    + + +

    A callback function that must be implemented by a user to set a pixel shader.

    +
    +

    A reference to a pixel shader object. See .

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205801 + HRESULT ID3DXEffectStateManager::SetPixelShader([In] IDirect3DPixelShader9* pShader) + ID3DXEffectStateManager::SetPixelShader +
    + + +

    A callback function that must be implemented by a user to set an array of vertex shader floating-point constants.

    +
    +

    The zero-based index of the first constant register.

    +

    An array of floating-point constants.

    +

    The number of registers in pConstantData.

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205803 + HRESULT ID3DXEffectStateManager::SetPixelShaderConstantF([In] unsigned int RegisterIndex,[In] const float* pConstantData,[In] unsigned int RegisterCount) + ID3DXEffectStateManager::SetPixelShaderConstantF +
    + + +

    A callback function that must be implemented by a user to set an array of vertex shader integer constants.

    +
    +

    The zero-based index of the first constant register.

    +

    An array of integer constants.

    +

    The number of registers in pConstantData.

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205804 + HRESULT ID3DXEffectStateManager::SetPixelShaderConstantI([In] unsigned int RegisterIndex,[In] const int* pConstantData,[In] unsigned int RegisterCount) + ID3DXEffectStateManager::SetPixelShaderConstantI +
    + + +

    A callback function that must be implemented by a user to set an array of vertex shader Boolean constants.

    +
    +

    The zero-based index of the first constant register.

    +

    An array of Boolean constants.

    +

    The number of registers in pConstantData.

    +

    The user-implemented method should return . If the callback fails when setting the device state, either of the following will occur:

    • The effect will fail during .
    • The dynamic effect state call (such as ) will fail.
    + + bb205802 + HRESULT ID3DXEffectStateManager::SetPixelShaderConstantB([In] unsigned int RegisterIndex,[In] const BOOL* pConstantData,[In] unsigned int RegisterCount) + ID3DXEffectStateManager::SetPixelShaderConstantB +
    + + +

    This interface is implemented by the application to allocate or free frame and mesh container objects. Methods on this are called during loading and destroying frame hierarchies.

    +
    + +

    The LPD3DXALLOCATEHIERARCHY type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXALLOCATEHIERARCHY;	
    +            
    +
    + + bb205619 + ID3DXAllocateHierarchy + ID3DXAllocateHierarchy +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Requests allocation of a frame object.

    +
    +

    Name of the frame to be created.

    +

    Returns the created frame object.

    +

    The return values of this method are implemented by an application programmer. In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + + bb205620 + HRESULT ID3DXAllocateHierarchy::CreateFrame([In] const char* Name,[In] D3DXFRAME** ppNewFrame) + ID3DXAllocateHierarchy::CreateFrame +
    + + +

    Requests allocation of a mesh container object.

    +
    +

    Name of the mesh.

    +

    Pointer to the mesh data structure. See .

    +

    Array of materials used in the mesh.

    +

    Array of effect instances used in the mesh. See .

    +

    Number of materials in the materials array.

    +

    Adjacency array for the mesh.

    +

    Pointer to the skin mesh object if skin data is found. See .

    +

    Returns the created mesh container. See .

    +

    The return values of this method are implemented by an application programmer. In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + + bb205621 + HRESULT ID3DXAllocateHierarchy::CreateMeshContainer([In] const char* Name,[In] const D3DXMESHDATA* pMeshData,[In] const D3DXMATERIAL* pMaterials,[In] const D3DXEFFECTINSTANCE* pEffectInstances,[In] unsigned int NumMaterials,[In] const unsigned int* pAdjacency,[In] ID3DXSkinInfo* pSkinInfo,[In] D3DXMESHCONTAINER** ppNewMeshContainer) + ID3DXAllocateHierarchy::CreateMeshContainer +
    + + +

    Requests deallocation of a frame object.

    +
    +

    Pointer to the frame to be deallocated.

    +

    The return values of this method are implemented by an application programmer. In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + + bb205622 + HRESULT ID3DXAllocateHierarchy::DestroyFrame([In] D3DXFRAME* pFrameToFree) + ID3DXAllocateHierarchy::DestroyFrame +
    + + +

    Requests deallocation of a mesh container object.

    +
    +

    Pointer to the mesh container object to be deallocated.

    +

    The return values of this method are implemented by an application programmer. In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + + bb205623 + HRESULT ID3DXAllocateHierarchy::DestroyMeshContainer([In] D3DXMESHCONTAINER* pMeshContainerToFree) + ID3DXAllocateHierarchy::DestroyMeshContainer +
    + + +

    This interface is implemented by the application to save any additional user data embedded in .x files. An instance of this interface is passed to , and D3DX calls the appropriate method on this interface every time the appropriate data is encountered. For example, for each frame object in the .x file, is called and passed the child data.

    +
    + +

    The LPD3DXLOADUSERDATA type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXLOADUSERDATA;	
    +            
    +
    + + bb174034 + ID3DXLoadUserData + ID3DXLoadUserData +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Load top level data from a .x file.

    +
    +

    Pointer to a .x file data structure. This is defined in Dxfile.h.

    +

    The return values of this method are implemented by an application programmer.In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + + bb174037 + HRESULT ID3DXLoadUserData::LoadTopLevelData([In] ID3DXFileData* pXofChildData) + ID3DXLoadUserData::LoadTopLevelData +
    + + +

    Load frame child data from a .x file.

    +
    +

    Pointer to a mesh container. See .

    +

    Pointer to a .x file data structure. This is defined in Dxfile.h.

    +

    The return values of this method are implemented by an application programmer.In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + + bb174035 + HRESULT ID3DXLoadUserData::LoadFrameChildData([In] D3DXFRAME* pFrame,[In] ID3DXFileData* pXofChildData) + ID3DXLoadUserData::LoadFrameChildData +
    + + +

    Load mesh child data from a .x file.

    +
    +

    Pointer to a mesh container. See .

    +

    Pointer to a .x file data structure. This is defined in Dxfile.h.

    +

    The return values of this method are implemented by an application programmer.In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + + bb174036 + HRESULT ID3DXLoadUserData::LoadMeshChildData([In] D3DXMESHCONTAINER* pMeshContainer,[In] ID3DXFileData* pXofChildData) + ID3DXLoadUserData::LoadMeshChildData +
    + + +

    is a user-implemented interface to provide callbacks for #include directives during shader compilation. Each of the methods in this interface must be implemented by the user which will then be used as callbacks to the application when one of the following occurs:

    • An HLSL shader that contains a #include is compiled by calling one of the *** functions.
    • An assembly shader #include is assembled by calling any of the *** functions.
    • An effect that contains a #include is compiled by by calling any of the *** or *** functions.
    +
    + +

    A user creates an interface by implementing a class that derives from this interface, and implementing all the interface methods.

    The LPD3DXINCLUDE type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXINCLUDE;	
    +            
    +
    + + bb173986 + ID3DXInclude + ID3DXInclude +
    + + + A user-implemented method for opening and reading the contents of a shader #include file. + + A -typed value that indicates the location of the #include file. + Name of the #include file. + Pointer to the container that includes the #include file. + Stream that is associated with fileName to be read. This reference remains valid until is called. + HRESULT Open([None] D3D_INCLUDE_TYPE IncludeType,[None] const char* pFileName,[None] LPCVOID pParentData,[None] LPCVOID* ppData,[None] UINT* pBytes) + + + + A user-implemented method for closing a shader #include file. + + + If was successful, Close is guaranteed to be called before the API using the interface returns. + + This is a reference that was returned by the corresponding call. + HRESULT Close([None] LPCVOID pData) + + + +

    Applications use the methods of the interface to manipulate an index buffer resource.

    +
    + +

    The interface is obtained by calling the method.

    This interface inherits additional functionality from the interface.

    This interface, like all COM interfaces, inherits from the interface.

    The LPDIRECT3DINDEXBUFFER9 and PDIRECT3DINDEXBUFFER9 types are defined as references to the interface.

     typedef struct  *LPDIRECT3DINDEXBUFFER9, *PDIRECT3DINDEXBUFFER9;	
    +            
    +
    + + bb205865 + IDirect3DIndexBuffer9 + IDirect3DIndexBuffer9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a description of the index buffer resource.

    +
    + + bb205866 + GetDesc + GetDesc + HRESULT IDirect3DIndexBuffer9::GetDesc([Out] D3DINDEXBUFFER_DESC* pDesc) +
    + + +

    Locks a range of index data and obtains a reference to the index buffer memory.

    +
    +

    Offset into the index data to lock, in bytes. Lock the entire index buffer by specifying 0 for both parameters, SizeToLock and OffsetToLock.

    +

    Size of the index data to lock, in bytes. Lock the entire index buffer by specifying 0 for both parameters, SizeToLock and OffsetToLock.

    +

    VOID* reference to a memory buffer containing the returned index data.

    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    For a description of the flags, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    As a general rule, do not hold a lock across more than one frame. When working with index buffers, you are allowed to make multiple lock calls. However, you must ensure that the number of lock calls match the number of unlock calls. calls will not succeed with any outstanding lock count on any currently set index buffer.

    The and flags are valid only on buffers created with .

    See Programming Tips (Direct3D 9) for information about using or .

    +
    + + bb205867 + HRESULT IDirect3DIndexBuffer9::Lock([In] unsigned int OffsetToLock,[In] unsigned int SizeToLock,[Out] void** ppbData,[In] D3DLOCK Flags) + IDirect3DIndexBuffer9::Lock +
    + + +

    Unlocks index data.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205868 + HRESULT IDirect3DIndexBuffer9::Unlock() + IDirect3DIndexBuffer9::Unlock +
    + + +

    Retrieves a description of the index buffer resource.

    +
    +

    Pointer to a structure, describing the returned index buffer.

    +

    If the method succeeds, the return value is . is returned if the argument is invalid.

    + + bb205866 + HRESULT IDirect3DIndexBuffer9::GetDesc([Out] D3DINDEXBUFFER_DESC* pDesc) + IDirect3DIndexBuffer9::GetDesc +
    + + + Initializes a new instance of the class. + + The device. + The size in bytes. + The usage. + The pool. + if set to true use 16bit index buffer, otherwise, use 32bit index buffer. + bb174357 + HRESULT IDirect3DDevice9::CreateIndexBuffer([In] unsigned int Length,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DIndexBuffer9** ppIndexBuffer,[In] void** pSharedHandle) + IDirect3DDevice9::CreateIndexBuffer + + + + Initializes a new instance of the class. + + The device. + The size in bytes. + The usage. + The pool. + if set to true use 16bit index buffer, otherwise, use 32bit index buffer. + The shared handle. + bb174357 + HRESULT IDirect3DDevice9::CreateIndexBuffer([In] unsigned int Length,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DIndexBuffer9** ppIndexBuffer,[In] void** pSharedHandle) + IDirect3DDevice9::CreateIndexBuffer + + + + Locks the specified index buffer. + + The offset in the buffer. + The size of the buffer to lock. + The lock flags. + A containing the locked index buffer. + bb205867 + HRESULT IDirect3DIndexBuffer9::Lock([In] unsigned int OffsetToLock,[In] unsigned int SizeToLock,[Out] void** ppbData,[In] D3DLOCK Flags) + IDirect3DIndexBuffer9::Lock + + + + Locks the specified index buffer. + + The offset in the buffer. + The size of the buffer to lock. + The lock flags. + A containing the locked index buffer. + bb205867 + HRESULT IDirect3DIndexBuffer9::Lock([In] unsigned int OffsetToLock,[In] unsigned int SizeToLock,[Out] void** ppbData,[In] D3DLOCK Flags) + IDirect3DIndexBuffer9::Lock + + + +

    This interface is implemented by the application to save any additional user data embedded in .x files. An instance of this interface is passed to , and D3DX calls the appropriate method on this interface every time the appropriate data is encountered. For example, for each frame object in the .x file, is called and passed the child data.

    +
    + +

    The LPD3DXSAVEUSERDATA type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXSAVEUSERDATA;	
    +            
    +
    + + bb174199 + ID3DXSaveUserData + ID3DXSaveUserData +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Add child data to the frame.

    +
    +

    Pointer to a mesh container. See .

    +

    Pointer to a .x file save object. Use the reference to call to add a child data object. Do not save the data with .

    +

    Pointer to a .x file data node. Use the reference to call to add a child data object.

    +

    The return values of this method are implemented by an application programmer. In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + +

    and provide a mechanism for adding a template to a .x file for saving user data.

    +
    + + bb174200 + HRESULT ID3DXSaveUserData::AddFrameChildData([In] const D3DXFRAME* pFrame,[In] ID3DXFileSaveObject* pXofSave,[In] ID3DXFileSaveData* pXofFrameData) + ID3DXSaveUserData::AddFrameChildData +
    + + +

    Add child data to the mesh.

    +
    +

    Pointer to a mesh container. See .

    +

    Pointer to a .x file save object. Use the reference to call to add a child data object. Do not save the data with .

    +

    Pointer to a .x file data node. Use the reference to call to add a child data object.

    +

    The return values of this method are implemented by an application programmer. In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + + bb174201 + HRESULT ID3DXSaveUserData::AddMeshChildData([In] const D3DXMESHCONTAINER* pMeshContainer,[In] ID3DXFileSaveObject* pXofSave,[In] ID3DXFileSaveData* pXofMeshData) + ID3DXSaveUserData::AddMeshChildData +
    + + +

    Add a top level object before the frame hierarchy.

    +
    +

    Pointer to a .x file save object. Use this reference to call IDirectXFileSaveObject::CreateDataObject to create the data object to be saved. Then call IDirectXFileSaveObject::SaveData to save the data.

    +

    The return values of this method are implemented by an application programmer. In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + + bb174203 + HRESULT ID3DXSaveUserData::AddTopLevelDataObjectsPre([In] ID3DXFileSaveObject* pXofSave) + ID3DXSaveUserData::AddTopLevelDataObjectsPre +
    + + +

    Add a top level object after the frame hierarchy.

    +
    +

    Pointer to a .x file save object. Use this reference to call IDirectXFileSaveObject::CreateDataObject to create the data object to be saved. Then call IDirectXFileSaveObject::SaveData to save the data.

    +

    The return values of this method are implemented by an application programmer.In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + + bb174202 + HRESULT ID3DXSaveUserData::AddTopLevelDataObjectsPost([In] ID3DXFileSaveObject* pXofSave) + ID3DXSaveUserData::AddTopLevelDataObjectsPost +
    + + +

    A callback for the user to register a .x file template.

    +
    +

    Use this reference to register user-defined .x file templates. See . Do not use this parameter to add data objects.

    +

    The return values of this method are implemented by an application programmer.In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + +

    and provide a mechanism for adding a template to a .x file for saving user data.

    +
    + + bb174204 + HRESULT ID3DXSaveUserData::RegisterTemplates([In] ID3DXFile* pXFileApi) + ID3DXSaveUserData::RegisterTemplates +
    + + +

    A callback for the user to save a .x file template.

    +
    +

    Pointer to a .x file save object. Do not use this parameter to add data objects. See .

    +

    The return values of this method are implemented by an application programmer.In general, if no error occurs, program the method to return . Otherwise, program the method to return an appropriate error message from D3DERR or D3DXERR, as this will cause to fail also, and return the error.

    + +

    and provide a mechanism for adding a template to a .x file for saving user data.

    +
    + + bb174205 + HRESULT ID3DXSaveUserData::SaveTemplates([In] ID3DXFileSaveObject* pXofSave) + ID3DXSaveUserData::SaveTemplates +
    + + +

    An application uses the methods of this interface to implement a key frame animation set.

    +
    + +

    Create a keyframed animation set with .

    The LPD3DXKEYFRAMEDANIMATIONSET type is defined as a reference to this interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXKEYFRAMEDANIMATIONSET;	
    +            
    +
    + + bb173989 + ID3DXKeyframedAnimationSet + ID3DXKeyframedAnimationSet +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the type of the animation set playback loop.

    +
    + + bb173997 + GetPlaybackType + GetPlaybackType + D3DXPLAYBACK_TYPE ID3DXKeyframedAnimationSet::GetPlaybackType() +
    + + +

    Gets the number of animation key frame ticks that occur per second.

    +
    + + bb174004 + GetSourceTicksPerSecond + GetSourceTicksPerSecond + double ID3DXKeyframedAnimationSet::GetSourceTicksPerSecond() +
    + + +

    Gets the number of callback keys in the animation set.

    +
    + + bb173993 + GetNumCallbackKeys + GetNumCallbackKeys + unsigned int ID3DXKeyframedAnimationSet::GetNumCallbackKeys() +
    + + +

    Gets the type of the animation set playback loop.

    +
    +

    Type of the animation set playback loop. See .

    + + bb173997 + D3DXPLAYBACK_TYPE ID3DXKeyframedAnimationSet::GetPlaybackType() + ID3DXKeyframedAnimationSet::GetPlaybackType +
    + + +

    Gets the number of animation key frame ticks that occur per second.

    +
    +

    Number of animation key frame ticks that occur per second.

    + + bb174004 + double ID3DXKeyframedAnimationSet::GetSourceTicksPerSecond() + ID3DXKeyframedAnimationSet::GetSourceTicksPerSecond +
    + + +

    Gets the number of scale keys in the specified key frame animation.

    +
    +

    Animation index.

    +

    Number of scale keys in the specified key frame animation.

    + + bb173995 + unsigned int ID3DXKeyframedAnimationSet::GetNumScaleKeys([In] unsigned int Animation) + ID3DXKeyframedAnimationSet::GetNumScaleKeys +
    + + +

    Fills an array with scale key data used for key frame animation.

    +
    +

    Animation index.

    +

    Pointer to a user-allocated array of vectors that the method is to fill with animation scale data.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb174003 + HRESULT ID3DXKeyframedAnimationSet::GetScaleKeys([In] unsigned int Animation,[In] D3DXKEY_VECTOR3* pScaleKeys) + ID3DXKeyframedAnimationSet::GetScaleKeys +
    + + +

    Get scale information for a specific key frame in the animation set.

    +
    +

    Animation index.

    +

    Key frame.

    +

    Pointer to the scale data. See .

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb174002 + HRESULT ID3DXKeyframedAnimationSet::GetScaleKey([In] unsigned int Animation,[In] unsigned int Key,[In] D3DXKEY_VECTOR3* pScaleKey) + ID3DXKeyframedAnimationSet::GetScaleKey +
    + + +

    Set scale information for a specific key frame in the animation set.

    +
    +

    Animation index.

    +

    Key frame.

    +

    Pointer to the scale data. See .

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb174010 + HRESULT ID3DXKeyframedAnimationSet::SetScaleKey([In] unsigned int Animation,[In] unsigned int Key,[In] D3DXKEY_VECTOR3* pScaleKey) + ID3DXKeyframedAnimationSet::SetScaleKey +
    + + +

    Gets the number of rotation keys in the specified key frame animation.

    +
    +

    Animation index.

    +

    Number of rotation keys in the specified key frame animation.

    + + bb173994 + unsigned int ID3DXKeyframedAnimationSet::GetNumRotationKeys([In] unsigned int Animation) + ID3DXKeyframedAnimationSet::GetNumRotationKeys +
    + + +

    Fills an array with rotational key data used for key frame animation.

    +
    +

    Animation index.

    +

    Pointer to a user-allocated array of quaternions that the method is to fill with animation rotation data.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb174001 + HRESULT ID3DXKeyframedAnimationSet::GetRotationKeys([In] unsigned int Animation,[In] D3DXKEY_QUATERNION* pRotationKeys) + ID3DXKeyframedAnimationSet::GetRotationKeys +
    + + +

    Get rotation information for a specific key frame in the animation set.

    +
    +

    Animation index.

    +

    Key frame.

    +

    Pointer to the rotation data. See .

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb173998 + HRESULT ID3DXKeyframedAnimationSet::GetRotationKey([In] unsigned int Animation,[In] unsigned int Key,[In] D3DXKEY_QUATERNION* pRotationKey) + ID3DXKeyframedAnimationSet::GetRotationKey +
    + + +

    Set rotation information for a specific key frame in the animation set.

    +
    +

    Animation index.

    +

    Key frame.

    +

    Pointer to the rotation data. See .

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb174009 + HRESULT ID3DXKeyframedAnimationSet::SetRotationKey([In] unsigned int Animation,[In] unsigned int Key,[In] D3DXKEY_QUATERNION* pRotationKey) + ID3DXKeyframedAnimationSet::SetRotationKey +
    + + +

    Gets the number of translation keys in the specified key frame animation.

    +
    +

    Animation index.

    +

    Number of translation keys in the specified key frame animation.

    + + bb173996 + unsigned int ID3DXKeyframedAnimationSet::GetNumTranslationKeys([In] unsigned int Animation) + ID3DXKeyframedAnimationSet::GetNumTranslationKeys +
    + + +

    Fills an array with translational key data used for key frame animation.

    +
    +

    Animation index.

    +

    Pointer to a user-allocated array of vectors that the method is to fill with animation translation data.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb174006 + HRESULT ID3DXKeyframedAnimationSet::GetTranslationKeys([In] unsigned int Animation,[In] D3DXKEY_VECTOR3* pTranslationKeys) + ID3DXKeyframedAnimationSet::GetTranslationKeys +
    + + +

    Get translation information for a specific key frame in the animation set.

    +
    +

    Animation index.

    +

    Key Frame.

    +

    Pointer to the rotation information. See .

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb174005 + HRESULT ID3DXKeyframedAnimationSet::GetTranslationKey([In] unsigned int Animation,[In] unsigned int Key,[In] D3DXKEY_VECTOR3* pTranslationKey) + ID3DXKeyframedAnimationSet::GetTranslationKey +
    + + +

    Set translation information for a specific key frame in the animation set.

    +
    +

    Animation index.

    +

    Key Frame.

    +

    Pointer to the translation data. See .

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb174011 + HRESULT ID3DXKeyframedAnimationSet::SetTranslationKey([In] unsigned int Animation,[In] unsigned int Key,[In] D3DXKEY_VECTOR3* pTranslationKey) + ID3DXKeyframedAnimationSet::SetTranslationKey +
    + + +

    Gets the number of callback keys in the animation set.

    +
    +

    Number of callback keys in the animation set.

    + + bb173993 + unsigned int ID3DXKeyframedAnimationSet::GetNumCallbackKeys() + ID3DXKeyframedAnimationSet::GetNumCallbackKeys +
    + + +

    Fills an array with callback key data used for key frame animation.

    +
    +

    Pointer to a user-allocated array of structures that the method is to fill with callback data.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb173992 + HRESULT ID3DXKeyframedAnimationSet::GetCallbackKeys([In] D3DXKEY_CALLBACK* pCallbackKeys) + ID3DXKeyframedAnimationSet::GetCallbackKeys +
    + + +

    Gets information about a specific callback in the animation set.

    +
    +

    Animation index.

    +

    Pointer to the callback function.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb173991 + HRESULT ID3DXKeyframedAnimationSet::GetCallbackKey([In] unsigned int Key,[In] D3DXKEY_CALLBACK* pCallbackKey) + ID3DXKeyframedAnimationSet::GetCallbackKey +
    + + +

    Sets information about a specific callback in the animation set.

    +
    +

    Animation index.

    +

    Pointer to the callback function.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb174008 + HRESULT ID3DXKeyframedAnimationSet::SetCallbackKey([In] unsigned int Key,[In] D3DXKEY_CALLBACK* pCallbackKey) + ID3DXKeyframedAnimationSet::SetCallbackKey +
    + + +

    Removes the scale data at the specified key frame.

    +
    +

    Animation identifier.

    +

    Key frame.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + +

    This method is slow and should not be used after an animation has begun to play.

    +
    + + bb174014 + HRESULT ID3DXKeyframedAnimationSet::UnregisterScaleKey([In] unsigned int Animation,[In] unsigned int Key) + ID3DXKeyframedAnimationSet::UnregisterScaleKey +
    + + +

    Removes the rotation data at the specified key frame.

    +
    +

    Animation identifier.

    +

    Key frame.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + +

    This method is slow and should not be used after an animation has begun to play.

    +
    + + bb174013 + HRESULT ID3DXKeyframedAnimationSet::UnregisterRotationKey([In] unsigned int Animation,[In] unsigned int Key) + ID3DXKeyframedAnimationSet::UnregisterRotationKey +
    + + +

    Removes the translation data at the specified key frame.

    +
    +

    Animation identifier.

    +

    Key frame.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + +

    This method is slow and should not be used after an animation has begun to play.

    +
    + + bb174015 + HRESULT ID3DXKeyframedAnimationSet::UnregisterTranslationKey([In] unsigned int Animation,[In] unsigned int Key) + ID3DXKeyframedAnimationSet::UnregisterTranslationKey +
    + + +

    Register the scale, rotate, and translate (SRT) key frame data for an animation.

    +
    +

    Pointer to the animation name.

    +

    Number of scale keys.

    +

    Number of rotation keys.

    +

    Number of translation keys.

    +

    Address of a reference to a user-allocated array of vectors that the method fills with scale data.

    +

    Address of a reference to a user-allocated array of quaternions that the method fills with rotation data.

    +

    Address of a reference to a user-allocated array of vectors that the method fills with translation data.

    +

    Returns the animation index.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned:

    + + bb174007 + HRESULT ID3DXKeyframedAnimationSet::RegisterAnimationSRTKeys([In] const char* pName,[In] unsigned int NumScaleKeys,[In] unsigned int NumRotationKeys,[In] unsigned int NumTranslationKeys,[In] const D3DXKEY_VECTOR3* pScaleKeys,[In] const D3DXKEY_QUATERNION* pRotationKeys,[In] const D3DXKEY_VECTOR3* pTranslationKeys,[In] unsigned int* pAnimationIndex) + ID3DXKeyframedAnimationSet::RegisterAnimationSRTKeys +
    + + +

    Transforms animations in an animation set into a compressed format and returns a reference to the buffer that stores the compressed data.

    +
    +

    One of the values that define the compression mode used for storing compressed animation set data. is the only value currently supported.

    +

    Desired compression loss ratio, in the range from 0 to 1.

    +

    Pointer to a transformation frame hierarchy. Can be null.

    +

    Address of a reference to the compressed animation set.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: , E_OUTOFMEMORY.

    + + bb173990 + HRESULT ID3DXKeyframedAnimationSet::Compress([In] unsigned int Flags,[In] float Lossiness,[In] D3DXFRAME* pHierarchy,[In] ID3DXBuffer** ppCompressedData) + ID3DXKeyframedAnimationSet::Compress +
    + + +

    Remove the animation data from the animation set.

    +
    +

    The animation index.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: .

    + + bb174012 + HRESULT ID3DXKeyframedAnimationSet::UnregisterAnimation([In] unsigned int Index) + ID3DXKeyframedAnimationSet::UnregisterAnimation +
    + + +

    The interface implements line drawing using textured triangles.

    +
    + +

    Create a line drawing object with .

    The LPD3DXLINE type is defined as a reference to the interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXLINE;	
    +            
    +
    + + bb174016 + ID3DXLine + ID3DXLine +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the Direct3D device associated with the line object.

    +
    + + bb174022 + GetDevice + GetDevice + HRESULT ID3DXLine::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Gets or sets the line stipple pattern.

    +
    + + bb174024 + GetPattern / SetPattern + GetPattern + unsigned int ID3DXLine::GetPattern() +
    + + +

    Gets or sets the stipple-pattern scale value.

    +
    + + bb174025 + GetPatternScale / SetPatternScale + GetPatternScale + float ID3DXLine::GetPatternScale() +
    + + +

    Gets or sets the thickness of the line.

    +
    + + bb174026 + GetWidth / SetWidth + GetWidth + float ID3DXLine::GetWidth() +
    + + +

    Gets or sets the line antialiasing state.

    +
    + + bb174021 + GetAntialias / SetAntialias + GetAntialias + BOOL ID3DXLine::GetAntialias() +
    + + +

    Gets or sets the OpenGL-style line-drawing mode.

    +
    + + bb174023 + GetGLLines / SetGLLines + GetGLLines + BOOL ID3DXLine::GetGLLines() +
    + + +

    Retrieves the Direct3D device associated with the line object.

    +
    +

    Address of a reference to an interface, representing the Direct3D device object associated with the line object.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174022 + HRESULT ID3DXLine::GetDevice([Out] IDirect3DDevice9** ppDevice) + ID3DXLine::GetDevice +
    + + +

    Prepares a device for drawing lines.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    Calling is optional. If called outside of a / sequence, the draw functions will internally call and . To avoid extra overhead, this method should be used if more than one draw function will be called successively.

    This method must be called from inside an and sequence.

    cannot be used as a substitute for either or .

    +
    + + bb174017 + HRESULT ID3DXLine::Begin() + ID3DXLine::Begin +
    + + +

    Draws a line strip in screen space. Input is in the form of an array that defines points (of ) on the line strip.

    +
    + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174018 + HRESULT ID3DXLine::Draw([In] const void* pVertexList,[In] unsigned int dwVertexListCount,[In] D3DCOLOR Color) + ID3DXLine::Draw +
    + + +

    Draws a line strip in screen space with a specified input transformation matrix.

    +
    +

    Array of vertices that make up the line. See .

    +

    Number of vertices in the vertex list.

    +

    A scale, rotate, and translate (SRT) matrix for transforming the points. See . If this matrix is a projection matrix, any stippled lines will be drawn with a perspective-correct stippling pattern. Or, you can transform the vertices and use to draw the line with a nonperspective-correct stipple pattern.

    +

    Color of the line. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174019 + HRESULT ID3DXLine::DrawTransform([In] const void* pVertexList,[In] unsigned int dwVertexListCount,[In] const D3DXMATRIX* pTransform,[In] D3DCOLOR Color) + ID3DXLine::DrawTransform +
    + + +

    Applies a stipple pattern to the line.

    +
    +

    Describes the stipple pattern: 1 is opaque, 0 is transparent.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174031 + HRESULT ID3DXLine::SetPattern([In] unsigned int dwPattern) + ID3DXLine::SetPattern +
    + + +

    Gets the line stipple pattern.

    +
    +

    Returns the line stipple pattern: 1 is opaque, 0 is transparent.

    + + bb174024 + unsigned int ID3DXLine::GetPattern() + ID3DXLine::GetPattern +
    + + +

    Stretches the stipple pattern along the line direction.

    +
    +

    Stipple pattern scaling value. 1.0f is the default value and represents no scaling. A value less than 1.0f shrinks the pattern, and a value greater than 1.0 stretches the pattern.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174032 + HRESULT ID3DXLine::SetPatternScale([In] float fPatternScale) + ID3DXLine::SetPatternScale +
    + + +

    Gets the stipple-pattern scale value.

    +
    +

    Returns the value used to scale the stipple-pattern. 1.0f is the default value and represents no scaling. A value less than 1.0f shrinks the pattern, and a value greater than 1.0 stretches the pattern.

    + + bb174025 + float ID3DXLine::GetPatternScale() + ID3DXLine::GetPatternScale +
    + + +

    Specifies the thickness of the line.

    +
    +

    Describes the line width.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174033 + HRESULT ID3DXLine::SetWidth([In] float fWidth) + ID3DXLine::SetWidth +
    + + +

    Gets the thickness of the line.

    +
    +

    The line thickness.

    + + bb174026 + float ID3DXLine::GetWidth() + ID3DXLine::GetWidth +
    + + +

    Toggles line antialiasing.

    +
    +

    Toggles antialiasing on and off. TRUE turns antialiasing on, and turns antialiasing off.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174029 + HRESULT ID3DXLine::SetAntialias([In] BOOL bAntialias) + ID3DXLine::SetAntialias +
    + + +

    Gets the line antialiasing state.

    +
    +

    Returns the antialiasing switch value. TRUE means antialiasing is on, and means antialiasing is off.

    + + bb174021 + BOOL ID3DXLine::GetAntialias() + ID3DXLine::GetAntialias +
    + + +

    Toggles the mode to draw OpenGL-style lines.

    +
    +

    Toggles OpenGL-style line drawing. TRUE enables OpenGL-style lines, and enables Direct3D-style lines.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174030 + HRESULT ID3DXLine::SetGLLines([In] BOOL bGLLines) + ID3DXLine::SetGLLines +
    + + +

    Gets the OpenGL-style line-drawing mode.

    +
    +

    Returns TRUE if OpenGL-style lines are enabled, and if Direct3D-style lines are enabled.

    + + bb174023 + BOOL ID3DXLine::GetGLLines() + ID3DXLine::GetGLLines +
    + + +

    Restores the device state to how it was when was called.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    cannot be used as a substitute for either or .

    +
    + + bb174020 + HRESULT ID3DXLine::End() + ID3DXLine::End +
    + + +

    Use this method to release all references to video memory resources and delete all stateblocks. This method should be called whenever a device is lost, or before resetting a device.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method should be called whenever the device is lost or before the user calls . Even if the device was not actually lost, is responsible for freeing stateblocks and other resources that may need to be released before resetting the device. As a result, the font object cannot be used again before calling and then .

    +
    + + bb174027 + HRESULT ID3DXLine::OnLostDevice() + ID3DXLine::OnLostDevice +
    + + +

    Use this method to re-acquire resources and save initial state.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    should be called each time the device is reset (using ), before any other methods are called. This is a good place to re-acquire video-memory resources and capture state blocks.

    +
    + + bb174028 + HRESULT ID3DXLine::OnResetDevice() + ID3DXLine::OnResetDevice +
    + + + Instantiates a left-handed coordinate system to create a . + + Pointer to an interface, representing the device associated with the created box mesh. + + This function creates a mesh with the creation option and | Flexible Vertex Format (FVF). + + HRESULT D3DXCreateLine([In] IDirect3DDevice9* pDevice,[Out, Fast] ID3DXLine** ppLine) + + + + Draws a line strip in screen space. Input is in the form of an array that defines points (of ) on the line strip. + + No documentation. + No documentation. + HRESULT ID3DXLine::Draw([In] const void* pVertexList,[In] unsigned int dwVertexListCount,[In] D3DCOLOR Color) + + + + Draws a line strip in screen space. Input is in the form of an array that defines points (of ) on the line strip. + + No documentation. + No documentation. + HRESULT ID3DXLine::Draw([In] const void* pVertexList,[In] unsigned int dwVertexListCount,[In] D3DCOLOR Color) + + + + Draws a line strip in screen space with a specified input transformation matrix. + + Array of vertices that make up the line. See . + A scale, rotate, and translate (SRT) matrix for transforming the points. See . If this matrix is a projection matrix, any stippled lines will be drawn with a perspective-correct stippling pattern. Or, you can transform the vertices and use to draw the line with a nonperspective-correct stipple pattern. + Color of the line. See . + If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA. + HRESULT ID3DXLine::DrawTransform([In] const void* pVertexList,[In] unsigned int dwVertexListCount,[In] const D3DXMATRIX* pTransform,[In] D3DCOLOR Color) + + + + Draws a line strip in screen space with a specified input transformation matrix. + + Array of vertices that make up the line. See . + A scale, rotate, and translate (SRT) matrix for transforming the points. See . If this matrix is a projection matrix, any stippled lines will be drawn with a perspective-correct stippling pattern. Or, you can transform the vertices and use to draw the line with a nonperspective-correct stipple pattern. + Color of the line. See . + If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA. + HRESULT ID3DXLine::DrawTransform([In] const void* pVertexList,[In] unsigned int dwVertexListCount,[In] const D3DXMATRIX* pTransform,[In] D3DCOLOR Color) + + + +

    Applications use the methods of the interface to manipulate mesh objects.

    +
    + +

    To obtain the interface, call either the or function.

    This interface inherits additional functionality from the interface.

    The LPD3DXMESH type is defined as a reference to the interface.

     typedef struct  *LPD3DXMESH;	
    +            
    +
    + + bb174069 + ID3DXMesh + ID3DXMesh +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Locks the mesh buffer that contains the mesh attribute data, and returns a reference to it.

    +
    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    For a description of the flags, see .

    +

    Address of a reference to a buffer containing a DWORD for each face in the mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    If has been called, the mesh will also have an attribute table that can be accessed using the method.

    +
    + + bb174070 + HRESULT ID3DXMesh::LockAttributeBuffer([In] unsigned int Flags,[In] unsigned int** ppData) + ID3DXMesh::LockAttributeBuffer +
    + + +

    Unlocks an attribute buffer.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174074 + HRESULT ID3DXMesh::UnlockAttributeBuffer() + ID3DXMesh::UnlockAttributeBuffer +
    + + +

    Generates a new mesh with reordered faces and vertices to optimize drawing performance.

    +
    +

    Specifies the type of optimization to perform. This parameter can be set to a combination of one or more flags from D3DXMESHOPT and D3DXMESH (except , , and ).

    +

    Pointer to an array of three DWORDs per face that specifies the three neighbors for each face in the source mesh. If the edge has no adjacent faces, the value is 0xffffffff. See Remarks.

    +

    Pointer to an array of three DWORDs per face that specifies the three neighbors for each face in the optimized mesh. If the edge has no adjacent faces, the value is 0xffffffff.

    +

    An array of DWORDs, one per face, that identifies the original mesh face that corresponds to each face in the optimized mesh. If the value supplied for this argument is null, face remap data is not returned.

    +

    Address of a reference to an interface, which contains a DWORD for each vertex that specifies how the new vertices map to the old vertices. This remap is useful if you need to alter external data based on the new vertex mapping.

    +

    Address of a reference to an interface, representing the optimized mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This method generates a new mesh. Before running Optimize, an application must generate an adjacency buffer by calling . The adjacency buffer contains adjacency data, such as a list of edges and the faces that are adjacent to each other.

    This method is very similar to the method, except that it can perform optimization while generating the new clone of the mesh. The output mesh inherits all of the creation parameters of the input mesh.

    +
    + + bb174071 + HRESULT ID3DXMesh::Optimize([In] unsigned int Flags,[In] const unsigned int* pAdjacencyIn,[In] unsigned int* pAdjacencyOut,[In] unsigned int* pFaceRemap,[In] ID3DXBuffer** ppVertexRemap,[In] ID3DXMesh** ppOptMesh) + ID3DXMesh::Optimize +
    + + +

    Generates a mesh with reordered faces and vertices to optimize drawing performance. This method reorders the existing mesh.

    +
    +

    Combination of one or more D3DXMESHOPT flags, specifying the type of optimization to perform.

    +

    Pointer to an array of three DWORDs per face that specifies the three neighbors for each face in the source mesh. If the edge has no adjacent faces, the value is 0xffffffff.

    +

    Pointer to an array of three DWORDs per face that specifies the three neighbors for each face in the optimized mesh. If the edge has no adjacent faces, the value is 0xffffffff. If the value supplied for this argument is null, adjacency data is not returned.

    +

    An array of DWORDs, one per face, that identifies the original mesh face that corresponds to each face in the optimized mesh. If the value supplied for this argument is null, face remap data is not returned.

    +

    Address of a reference to an interface, which contains a DWORD for each vertex that specifies how the new vertices map to the old vertices. This remap is useful if you need to alter external data based on the new vertex mapping. If the value supplied for this argument is null, vertex remap data is not returned.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_CANNOTATTRSORT, E_OUTOFMEMORY.

    + +

    Before running , an application must generate an adjacency buffer by calling . The adjacency buffer contains adjacency data, such as a list of edges and the faces that are adjacent to each other.

    Note??This method will fail if the mesh is sharing its vertex buffer with another mesh, unless the is set in Flags.

    +
    + + bb174072 + HRESULT ID3DXMesh::OptimizeInplace([In] unsigned int Flags,[In] const unsigned int* pAdjacencyIn,[In] unsigned int* pAdjacencyOut,[In] unsigned int* pFaceRemap,[In] ID3DXBuffer** ppVertexRemap) + ID3DXMesh::OptimizeInplace +
    + + +

    Sets the attribute table for a mesh and the number of entries stored in the table.

    +
    +

    Pointer to an array of structures, representing the entries in the mesh attribute table.

    +

    Number of attributes in the mesh attribute table.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    If an application keeps track of the information in an attribute table, and rearranges the table as a result of changes to attributes or faces, this method allows the application to update the attribute tables instead of calling again.

    +
    + + bb174073 + HRESULT ID3DXMesh::SetAttributeTable([In] const D3DXATTRIBUTERANGE* pAttribTable,[In] unsigned int cAttribTableSize) + ID3DXMesh::SetAttributeTable +
    + + +

    This interface encapsulates patch mesh functionality.

    +
    + +

    A patch mesh is a mesh that consists of a series of patches.

    To obtain the interface, call the function.

    The LPD3DXPATCHMESH type is defined as a reference to the interface, as follows:

     typedef struct  *LPD3DXPATCHMESH;	
    +            
    +
    + + bb174075 + ID3DXPatchMesh + ID3DXPatchMesh +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the number of patches in the mesh.

    +
    + + bb174083 + GetNumPatches + GetNumPatches + unsigned int ID3DXPatchMesh::GetNumPatches() +
    + + +

    Gets the number of vertices in the mesh.

    +
    + + bb174084 + GetNumVertices + GetNumVertices + unsigned int ID3DXPatchMesh::GetNumVertices() +
    + + +

    Gets the number of control vertices per patch.

    +
    + + bb174078 + GetControlVerticesPerPatch + GetControlVerticesPerPatch + unsigned int ID3DXPatchMesh::GetControlVerticesPerPatch() +
    + + +

    Gets the type of patch.

    +
    + +

    For more information about patch types, see .

    +
    + + bb174085 + GetOptions + GetOptions + unsigned int ID3DXPatchMesh::GetOptions() +
    + + +

    Gets the device that created the mesh.

    +
    + + bb174080 + GetDevice + GetDevice + HRESULT ID3DXPatchMesh::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Gets the mesh vertex buffer.

    +
    + +

    This method assumes uniform tessellation.

    +
    + + bb174088 + GetVertexBuffer + GetVertexBuffer + HRESULT ID3DXPatchMesh::GetVertexBuffer([Out] IDirect3DVertexBuffer9** ppVB) +
    + + +

    Gets the mesh index buffer.

    +
    + +

    The index buffer contains the vertex ordering in the vertex buffer. The index buffer is used to access the vertex buffer when the mesh is rendered.

    +
    + + bb174082 + GetIndexBuffer + GetIndexBuffer + HRESULT ID3DXPatchMesh::GetIndexBuffer([Out] IDirect3DIndexBuffer9** ppIB) +
    + + +

    Gets the number of patches in the mesh.

    +
    +

    The number of patches.

    + + bb174083 + unsigned int ID3DXPatchMesh::GetNumPatches() + ID3DXPatchMesh::GetNumPatches +
    + + +

    Gets the number of vertices in the mesh.

    +
    +

    The number of vertices.

    + + bb174084 + unsigned int ID3DXPatchMesh::GetNumVertices() + ID3DXPatchMesh::GetNumVertices +
    + + +

    Gets the vertex declaration.

    +
    +

    Array of elements describing the vertex format of the mesh vertices. The dimension of this declarator array is . The vertex element array ends with the D3DDECL_END macro.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    The array of elements includes the D3DDECL_END macro, which ends the declaration.

    +
    + + bb174079 + HRESULT ID3DXPatchMesh::GetDeclaration([In] D3DVERTEXELEMENT9* Declaration) + ID3DXPatchMesh::GetDeclaration +
    + + +

    Gets the number of control vertices per patch.

    +
    +

    The number of control vertices per patch.

    + + bb174078 + unsigned int ID3DXPatchMesh::GetControlVerticesPerPatch() + ID3DXPatchMesh::GetControlVerticesPerPatch +
    + + +

    Gets the type of patch.

    +
    +

    The patch type.

    + +

    For more information about patch types, see .

    +
    + + bb174085 + unsigned int ID3DXPatchMesh::GetOptions() + ID3DXPatchMesh::GetOptions +
    + + +

    Gets the device that created the mesh.

    +
    +

    Pointer to the device.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb174080 + HRESULT ID3DXPatchMesh::GetDevice([Out] IDirect3DDevice9** ppDevice) + ID3DXPatchMesh::GetDevice +
    + + +

    Gets the attributes of the patch.

    +
    +

    Pointer to the structures containing the patch attributes. For more information about patch attributes, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + + bb174086 + HRESULT ID3DXPatchMesh::GetPatchInfo([In] D3DXPATCHINFO* PatchInfo) + ID3DXPatchMesh::GetPatchInfo +
    + + +

    Gets the mesh vertex buffer.

    +
    +

    Pointer to the vertex buffer.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This method assumes uniform tessellation.

    +
    + + bb174088 + HRESULT ID3DXPatchMesh::GetVertexBuffer([Out] IDirect3DVertexBuffer9** ppVB) + ID3DXPatchMesh::GetVertexBuffer +
    + + +

    Gets the mesh index buffer.

    +
    +

    Pointer to the index buffer.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    The index buffer contains the vertex ordering in the vertex buffer. The index buffer is used to access the vertex buffer when the mesh is rendered.

    +
    + + bb174082 + HRESULT ID3DXPatchMesh::GetIndexBuffer([Out] IDirect3DIndexBuffer9** ppIB) + ID3DXPatchMesh::GetIndexBuffer +
    + + +

    Lock the vertex buffer.

    +
    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    For a description of the flags, see .

    +

    VOID* reference to a memory buffer containing the returned vertex data.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    The vertex buffer is usually locked, written to, and then unlocked for reading.

    Patch meshes use 16-bit index buffers.

    +
    + + bb174091 + HRESULT ID3DXPatchMesh::LockVertexBuffer([In] unsigned int flags,[In] void** ppData) + ID3DXPatchMesh::LockVertexBuffer +
    + + +

    Unlock the vertex buffer.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    The vertex buffer is usually locked, written to, and then unlocked for reading.

    +
    + + bb174098 + HRESULT ID3DXPatchMesh::UnlockVertexBuffer() + ID3DXPatchMesh::UnlockVertexBuffer +
    + + +

    Lock the index buffer.

    +
    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    For a description of the flags, see .

    +

    VOID* reference to a memory buffer containing the returned index data.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    The index buffer is usually locked, written to, and then unlocked for reading. Patch mesh index buffers are 16-bit buffers.

    +
    + + bb174090 + HRESULT ID3DXPatchMesh::LockIndexBuffer([In] unsigned int flags,[In] void** ppData) + ID3DXPatchMesh::LockIndexBuffer +
    + + +

    Unlock the index buffer.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    The index buffer is usually locked, written to, and then unlocked for reading.

    +
    + + bb174097 + HRESULT ID3DXPatchMesh::UnlockIndexBuffer() + ID3DXPatchMesh::UnlockIndexBuffer +
    + + +

    Locks the attribute buffer.

    +
    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    For a description of the flags, see .

    +

    Address of a reference to a buffer containing a DWORD for each face in the mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    The attribute buffer is usually locked, written to, and then unlocked for reading.

    +
    + + bb174089 + HRESULT ID3DXPatchMesh::LockAttributeBuffer([In] unsigned int flags,[In] unsigned int** ppData) + ID3DXPatchMesh::LockAttributeBuffer +
    + + +

    Unlock the attribute buffer.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    The attribute buffer is usually locked, written to, and then unlocked for reading.

    +
    + + bb174096 + HRESULT ID3DXPatchMesh::UnlockAttributeBuffer() + ID3DXPatchMesh::UnlockAttributeBuffer +
    + + +

    Gets the size of the tessellated mesh, given a tessellation level.

    +
    +

    Tessellation level.

    +

    Adaptive tessellation. For adaptive tessellation, set this value to TRUE and set fTessLevel to the maximum tessellation value. This will result in the maximum mesh size necessary for adaptive tessellation.

    +

    Pointer to the number of triangles generated by the tessellated mesh.

    +

    Pointer to the number of vertices generated by the tessellated mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This method assumes uniform tessellation.

    +
    + + bb174087 + HRESULT ID3DXPatchMesh::GetTessSize([In] float fTessLevel,[In] unsigned int Adaptive,[Out] unsigned int* NumTriangles,[Out] unsigned int* NumVertices) + ID3DXPatchMesh::GetTessSize +
    + + +

    Generate a list of mesh edges and the patches that share each edge.

    +
    +

    Specifies that vertices that differ in position by less than the tolerance should be treated as coincident.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    After an application generates adjacency information for a mesh, the mesh data can be optimized for better drawing performance. This method determines which patches are adjacent (within the provided tolerance). This information is used internally to optimize tessellation.

    +
    + + bb174077 + HRESULT ID3DXPatchMesh::GenerateAdjacency([In] float Tolerance) + ID3DXPatchMesh::GenerateAdjacency +
    + + +

    Creates a new patch mesh with the specified vertex declaration.

    +
    +

    Combination of one or more D3DXMESH flags that specify creation options for the mesh.

    +

    Array of elements that specify the vertex format for the vertices in the output mesh.

    +

    Address of a reference to an interface that represents the cloned mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    CloneMesh converts the vertex buffer to the new vertex declaration. Entries in the vertex declaration that are new to the original mesh are set to 0. If the current mesh has adjacency, the new mesh will also have adjacency.

    +
    + + bb174076 + HRESULT ID3DXPatchMesh::CloneMesh([In] unsigned int Options,[In] const D3DVERTEXELEMENT9* pDecl,[In] ID3DXPatchMesh** pMesh) + ID3DXPatchMesh::CloneMesh +
    + + +

    Optimizes the patch mesh for efficient tessellation.

    +
    +

    Currently unused.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_CANNOTATTRSORT.

    + +

    After an application generates adjacency information for a mesh, the mesh data can be optimized (reordered) for better drawing performance. This method determines which patches are adjacent (within the provided tolerance).

    Adjacency information is also used to optimize tessellation. Generate adjacency information once and tessellate repeatedly by calling . The optimization performed is independent of the actual tessellation level used. However, if the mesh vertices are changed, you must regenerate the adjacency information.

    +
    + + bb174092 + HRESULT ID3DXPatchMesh::Optimize([In] unsigned int flags) + ID3DXPatchMesh::Optimize +
    + + +

    Sets mesh geometry displacement parameters.

    +
    +

    Texture containing the displacement data.

    +

    Minification level. For more information, see .

    +

    Magnification level. For more information, see .

    +

    Mip filter level. For more information, see .

    +

    Texture address wrap mode. For more information, see

    +

    Level of detail bias value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    Displacement maps can only be 2D textures. Mipmapping is ignored for nonadaptive tessellation.

    +
    + + bb174093 + HRESULT ID3DXPatchMesh::SetDisplaceParam([In] IDirect3DBaseTexture9* Texture,[In] D3DTEXTUREFILTERTYPE MinFilter,[In] D3DTEXTUREFILTERTYPE MagFilter,[In] D3DTEXTUREFILTERTYPE MipFilter,[In] D3DTEXTUREADDRESS Wrap,[In] unsigned int dwLODBias) + ID3DXPatchMesh::SetDisplaceParam +
    + + +

    Gets mesh geometry displacement parameters.

    +
    +

    Texture containing the displacement data.

    +

    Minification level. For more information, see .

    +

    Magnification level. For more information, see .

    +

    Mip filter level. For more information, see .

    +

    Texture address wrap mode. For more information, see .

    +

    Level of detail bias value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    Displacement maps can only be 2D textures. Mipmapping is ignored for nonadaptive tessellation.

    +
    + + bb174081 + HRESULT ID3DXPatchMesh::GetDisplaceParam([Out] IDirect3DBaseTexture9** Texture,[Out] D3DTEXTUREFILTERTYPE* MinFilter,[Out] D3DTEXTUREFILTERTYPE* MagFilter,[Out] D3DTEXTUREFILTERTYPE* MipFilter,[Out] D3DTEXTUREADDRESS* Wrap,[Out] unsigned int* dwLODBias) + ID3DXPatchMesh::GetDisplaceParam +
    + + +

    Performs uniform tessellation based on the tessellation level.

    +
    +

    Tessellation level. This is the number of vertices introduced between existing vertices. The range of this float parameter is 0 < fTessLevel <= 32.

    +

    Resulting tessellated mesh. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This function will perform more efficiently if the patch mesh has been optimized using .

    +
    + + bb174094 + HRESULT ID3DXPatchMesh::Tessellate([In] float fTessLevel,[In] ID3DXMesh* pMesh) + ID3DXPatchMesh::Tessellate +
    + + +

    Performs adaptive tessellation based on the z-based adaptive tessellation criterion.

    +
    +

    Specifies a 4D vector that is dotted with the vertices to get the per-vertex adaptive tessellation amount. Each edge is tessellated to the average value of the tessellation levels for the two vertices it connects.

    +

    Maximum limit for adaptive tessellation. This is the number of vertices introduced between existing vertices. This integer value can range from 1 to 32, inclusive.

    +

    Minimum limit for adaptive tessellation. This is the number of vertices introduced between existing vertices. This integer value can range from 1 to 32, inclusive.

    +

    Resulting tessellated mesh. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This function will perform more efficiently if the patch mesh has been optimized using .

    +
    + + bb174095 + HRESULT ID3DXPatchMesh::TessellateAdaptive([In] const D3DXVECTOR4* pTrans,[In] unsigned int dwMaxTessLevel,[In] unsigned int dwMinTessLevel,[In] ID3DXMesh* pMesh) + ID3DXPatchMesh::TessellateAdaptive +
    + + +

    Applications use the methods of the interface to encapsulate the functionality of a pixel shader.

    +
    + +

    The LPDIRECT3DPIXELSHADER9 and PDIRECT3DPIXELSHADER9 types are defined as references to the interface.

    typedef struct  *LPDIRECT3DPIXELSHADER9, *PDIRECT3DPIXELSHADER9;
    +
    + + bb205869 + IDirect3DPixelShader9 + IDirect3DPixelShader9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant MaxDynamicFlowControlDepth. + D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH + + + Constant MinDynamicFlowControlDepth. + D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH + + + Constant MaxTemps. + D3DPS20_MAX_NUMTEMPS + + + Constant MinTemps. + D3DPS20_MIN_NUMTEMPS + + + Constant MaxStaticFlowControlDepth. + D3DPS20_MAX_STATICFLOWCONTROLDEPTH + + + Constant MinStaticFlowControlDepth. + D3DPS20_MIN_STATICFLOWCONTROLDEPTH + + + Constant MaxInstructionSlots. + D3DPS20_MAX_NUMINSTRUCTIONSLOTS + + + Constant MinInstructionSlots. + D3DPS20_MIN_NUMINSTRUCTIONSLOTS + + + +

    Gets the device.

    +
    + + bb205870 + GetDevice + GetDevice + HRESULT IDirect3DPixelShader9::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Gets the device.

    +
    +

    Pointer to the interface that is returned.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205870 + HRESULT IDirect3DPixelShader9::GetDevice([Out] IDirect3DDevice9** ppDevice) + IDirect3DPixelShader9::GetDevice +
    + + +

    Gets a reference to the shader data.

    +
    +

    Pointer to a buffer that contains the shader data. The application needs to allocate enough room for this.

    +

    Size of the data, in bytes. To get the buffer size that is needed to retrieve the data, set pData = null when calling GetFunction. Then call GetFunction with the returned size, to get the buffer data.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + + bb205871 + HRESULT IDirect3DPixelShader9::GetFunction([In] void* arg0,[InOut] unsigned int* pSizeOfData) + IDirect3DPixelShader9::GetFunction +
    + + + Initializes a new instance of the class. + + The device. + The function. + HRESULT IDirect3DDevice9::CreatePixelShader([In] const void* pFunction,[Out, Fast] IDirect3DPixelShader9** ppShader) + + + + Gets the bytecode associated to this shader.. + + + + + No documentation. + + + bb280447 + ID3DXPMesh + ID3DXPMesh + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetMaxFaces + GetMaxFaces + unsigned int ID3DXPMesh::GetMaxFaces() + + + + No documentation. + + + GetMinFaces + GetMinFaces + unsigned int ID3DXPMesh::GetMinFaces() + + + + No documentation. + + + GetMaxVertices + GetMaxVertices + unsigned int ID3DXPMesh::GetMaxVertices() + + + + No documentation. + + + GetMinVertices + GetMinVertices + unsigned int ID3DXPMesh::GetMinVertices() + + + + No documentation. + + + GetAdjacency + GetAdjacency + HRESULT ID3DXPMesh::GetAdjacency([Out] unsigned int* pAdjacency) + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DXPMesh::ClonePMeshFVF([In] unsigned int Options,[In] unsigned int FVF,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXPMesh** ppCloneMesh) + ID3DXPMesh::ClonePMeshFVF + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DXPMesh::ClonePMesh([In] unsigned int Options,[In] const D3DVERTEXELEMENT9* pDeclaration,[In] IDirect3DDevice9* pD3DDevice,[In] ID3DXPMesh** ppCloneMesh) + ID3DXPMesh::ClonePMesh + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3DXPMesh::SetNumFaces([In] unsigned int Faces) + ID3DXPMesh::SetNumFaces + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3DXPMesh::SetNumVertices([In] unsigned int Vertices) + ID3DXPMesh::SetNumVertices + + + + No documentation. + + No documentation. + + unsigned int ID3DXPMesh::GetMaxFaces() + ID3DXPMesh::GetMaxFaces + + + + No documentation. + + No documentation. + + unsigned int ID3DXPMesh::GetMinFaces() + ID3DXPMesh::GetMinFaces + + + + No documentation. + + No documentation. + + unsigned int ID3DXPMesh::GetMaxVertices() + ID3DXPMesh::GetMaxVertices + + + + No documentation. + + No documentation. + + unsigned int ID3DXPMesh::GetMinVertices() + ID3DXPMesh::GetMinVertices + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DXPMesh::Save([In] IStream* pStream,[In] const D3DXMATERIAL* pMaterials,[In] const D3DXEFFECTINSTANCE* pEffectInstances,[In] unsigned int NumMaterials) + ID3DXPMesh::Save + + + +

    Generates a new mesh with reordered faces and vertices to optimize drawing performance.

    +
    +

    Specifies the type of optimization to perform. This parameter can be set to a combination of one or more flags from D3DXMESHOPT and D3DXMESH (except , , and ).

    +

    Pointer to an array of three DWORDs per face that specifies the three neighbors for each face in the optimized mesh. If the edge has no adjacent faces, the value is 0xffffffff.

    +

    An array of DWORDs, one per face, that identifies the original mesh face that corresponds to each face in the optimized mesh. If the value supplied for this argument is null, face remap data is not returned.

    +

    Address of a reference to an interface, which contains a DWORD for each vertex that specifies how the new vertices map to the old vertices. This remap is useful if you need to alter external data based on the new vertex mapping.

    +

    Address of a reference to an interface, representing the optimized mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    This method generates a new mesh. Before running Optimize, an application must generate an adjacency buffer by calling . The adjacency buffer contains adjacency data, such as a list of edges and the faces that are adjacent to each other.

    This method is very similar to the method, except that it can perform optimization while generating the new clone of the mesh. The output mesh inherits all of the creation parameters of the input mesh.

    +
    + + bb174071 + HRESULT ID3DXPMesh::Optimize([In] unsigned int Flags,[In] unsigned int* pAdjacencyOut,[In] unsigned int* pFaceRemap,[In] ID3DXBuffer** ppVertexRemap,[In] ID3DXMesh** ppOptMesh) + ID3DXPMesh::Optimize +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + + HRESULT ID3DXPMesh::OptimizeBaseLOD([In] unsigned int Flags,[In] unsigned int* pFaceRemap) + ID3DXPMesh::OptimizeBaseLOD + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DXPMesh::TrimByFaces([In] unsigned int NewFacesMin,[In] unsigned int NewFacesMax,[In] unsigned int* rgiFaceRemap,[In] unsigned int* rgiVertRemap) + ID3DXPMesh::TrimByFaces + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DXPMesh::TrimByVertices([In] unsigned int NewVerticesMin,[In] unsigned int NewVerticesMax,[In] unsigned int* rgiFaceRemap,[In] unsigned int* rgiVertRemap) + ID3DXPMesh::TrimByVertices + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3DXPMesh::GetAdjacency([Out] unsigned int* pAdjacency) + ID3DXPMesh::GetAdjacency + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3DXPMesh::GenerateVertexHistory([In] unsigned int* pVertexHistory) + ID3DXPMesh::GenerateVertexHistory + + + +

    Applications use the methods of the interface to perform asynchronous queries on a driver.

    +
    + +

    The LPDIRECT3DQUERY9 and PDIRECT3DQUERY9 types are defined as references to the interface.

    typedef struct  *LPDIRECT3DQUERY9, *PDIRECT3DQUERY9;
    +
    + + bb205872 + IDirect3DQuery9 + IDirect3DQuery9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the device that is being queried.

    +
    + + bb205875 + GetDevice + GetDevice + HRESULT IDirect3DQuery9::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Gets the number of bytes in the query data.

    +
    + + bb205874 + GetDataSize + GetDataSize + unsigned int IDirect3DQuery9::GetDataSize() +
    + + +

    Gets the device that is being queried.

    +
    +

    Pointer to the device being queried. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205875 + HRESULT IDirect3DQuery9::GetDevice([Out] IDirect3DDevice9** ppDevice) + IDirect3DQuery9::GetDevice +
    + + +

    Gets the query type.

    +
    +

    Returns the query type. See .

    + + bb205876 + D3DQUERYTYPE IDirect3DQuery9::GetType() + IDirect3DQuery9::GetType +
    + + +

    Gets the number of bytes in the query data.

    +
    +

    Returns the number of bytes of query data.

    + + bb205874 + unsigned int IDirect3DQuery9::GetDataSize() + IDirect3DQuery9::GetDataSize +
    + + +

    Issue a query.

    +
    +

    Query flags specify the type of state change for the query. See and .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A signaled query means the query has completed, the data is available, and will return .

    +
    + + bb205877 + HRESULT IDirect3DQuery9::Issue([In] D3DISSUE dwIssueFlags) + IDirect3DQuery9::Issue +
    + + +

    Polls a queried resource to get the query state or a query result. For more information about queries, see Queries (Direct3D 9).

    +
    + No documentation. + No documentation. + No documentation. +

    The return type identifies the query state (see Queries (Direct3D 9)). The method returns if the query data is available and S_FALSE if it is not. These are considered successful return values. If the method fails when D3DGETDATA_FLUSH is used, the return value can be .

    + +

    It is possible to lose the device while polling for query status. When D3DGETDATA_FLUSH is specified, this method will return in response to a lost device. This allows an application to prevent threads from endlessly polling due to a lost device (which cannot respond to the query).

    An application must never write code that only invokes GetData ( ... , 0 ), expecting that GetData will eventually return by itself over time. This is true, even if the application has used the FLUSH flag with GetData in the past. For example:

    // Enables an infinite loop:	
    +            while( pQuery->GetData( ... , 0 ) == S_FALSE ) ; // Still enables an infinite loop:	
    +            pQuery->GetData( ... , D3DGETDATA_FLUSH );	
    +            while( pQuery->GetData( ... , 0 ) == S_FALSE ) ; // Does not enable an infinite loop because eventually the command	
    +            // buffer will fill up and that will cause a flush to occur.	
    +            while( pQuery->GetData( ..., 0 ) == S_FALSE ) { pDevice->SetTexture(...); pDevice->Draw(...);	
    +            }	
    +            
    +
    + + bb205873 + HRESULT IDirect3DQuery9::GetData([In] void* pData,[In] unsigned int dwSize,[In] unsigned int dwGetDataFlags) + IDirect3DQuery9::GetData +
    + + + Initializes a new instance of the class. + + The device. + The type. + + + + Gets the type. + + D3DQUERYTYPE IDirect3DQuery9::GetType() + + + + +

    The interface is used to generalize the process of rendering to environment maps.

    +
    + +

    An environment map is used to texture-map scene geometry to provide a more sophisticated scene without using complex geometry. This interface supports creating surfaces for the following kinds of geometry: cube, half sphere or hemispheric, parabolic, or sphere.

    The interface is obtained by calling the function.

    The LPD3DXRenderToEnvMap type is defined as a reference to the interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXRenderToEnvMap;	
    +            
    +
    + + bb174181 + ID3DXRenderToEnvMap + ID3DXRenderToEnvMap +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the Direct3D device associated with the environment map.

    +
    + + bb174189 + GetDevice + GetDevice + HRESULT ID3DXRenderToEnvMap::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Retrieves the description of the render surface.

    +
    + + bb174188 + GetDesc + GetDesc + HRESULT ID3DXRenderToEnvMap::GetDesc([Out] D3DXRTE_DESC* pDesc) +
    + + +

    Retrieves the Direct3D device associated with the environment map.

    +
    +

    Address of a reference to an interface that represents the Direct3D device object associated with the environment map.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be . Calling this method increases the internal reference count on the interface. Be sure to call when you are done using this interface or you will have a memory leak.

    + + bb174189 + HRESULT ID3DXRenderToEnvMap::GetDevice([Out] IDirect3DDevice9** ppDevice) + ID3DXRenderToEnvMap::GetDevice +
    + + +

    Retrieves the description of the render surface.

    +
    +

    Pointer to a structure that describes the rendering surface.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174188 + HRESULT ID3DXRenderToEnvMap::GetDesc([Out] D3DXRTE_DESC* pDesc) + ID3DXRenderToEnvMap::GetDesc +
    + + +

    Initiate the rendering of a cubic environment map.

    +
    +

    Pointer to an interface that represents the cube texture to which to render.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    See to draw each of the 6 faces.

    +
    + + bb174182 + HRESULT ID3DXRenderToEnvMap::BeginCube([In] IDirect3DCubeTexture9* pCubeTex) + ID3DXRenderToEnvMap::BeginCube +
    + + +

    Initiate the rendering of a spherical environment map.

    +
    +

    Pointer to an interface that represents the texture to which to render.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: .E_FAIL

    + +

    See to draw the face.

    +
    + + bb174185 + HRESULT ID3DXRenderToEnvMap::BeginSphere([In] IDirect3DTexture9* pTex) + ID3DXRenderToEnvMap::BeginSphere +
    + + +

    Initiate the rendering of a hemispheric environment map.

    +
    +

    Pointer to an interface that represents the positive texture render surface.

    +

    Pointer to an interface that represents the negative texture render surface.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: .E_FAIL

    + +

    See to draw the face.

    +
    + + bb174183 + HRESULT ID3DXRenderToEnvMap::BeginHemisphere([In] IDirect3DTexture9* pTexZPos,[In] IDirect3DTexture9* pTexZNeg) + ID3DXRenderToEnvMap::BeginHemisphere +
    + + +

    Initiate the rendering of a parabolic environment map.

    +
    +

    Pointer to an interface that represents the positive render texture.

    +

    Pointer to an interface that represents the negative render texture.

    +

    If the function succeeds, the return value is . If the function fails, the return value can be one of the following: .E_FAIL

    + +

    See to draw the faces.

    +
    + + bb174184 + HRESULT ID3DXRenderToEnvMap::BeginParabolic([In] IDirect3DTexture9* pTexZPos,[In] IDirect3DTexture9* pTexZNeg) + ID3DXRenderToEnvMap::BeginParabolic +
    + + +

    Initiate the drawing of each face of an environment map.

    +
    +

    The first face of the environmental cube map. See .

    +

    A valid combination of one or more flags.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method must be called once for each type of environment map. The only exception is a cubic environment map which requires this method to be called six times, once for each face in . For more information, see Environment Mapping (Direct3D 9).

    +
    + + bb174187 + HRESULT ID3DXRenderToEnvMap::Face([In] D3DCUBEMAP_FACES Face,[In] unsigned int MipFilter) + ID3DXRenderToEnvMap::Face +
    + + +

    Restore all render targets and, if needed, compose all the rendered faces into the environment map surface.

    +
    +

    A valid combination of one or more flags.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174186 + HRESULT ID3DXRenderToEnvMap::End([In] unsigned int MipFilter) + ID3DXRenderToEnvMap::End +
    + + +

    Use this method to release all references to video memory resources and delete all stateblocks. This method should be called whenever a device is lost, or before resetting a device.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method should be called whenever the device is lost or before the user calls . Even if the device was not actually lost, is responsible for freeing stateblocks and other resources that may need to be released before resetting the device. As a result, the font object cannot be used again before calling and then .

    +
    + + bb174190 + HRESULT ID3DXRenderToEnvMap::OnLostDevice() + ID3DXRenderToEnvMap::OnLostDevice +
    + + +

    Use this method to re-acquire resources and save initial state.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    should be called each time the device is reset (using ), before any other methods are called. This is a good place to re-acquire video-memory resources and capture state blocks.

    +
    + + bb174191 + HRESULT ID3DXRenderToEnvMap::OnResetDevice() + ID3DXRenderToEnvMap::OnResetDevice +
    + + +

    The interface is used to generalize the process of rendering to surfaces.

    +
    + +

    Surfaces can be used in a variety of ways including render targets, off-screen rendering, or rendering to textures.

    A surface can be configured using a separate viewport using the method, to provide a custom render view. If the surface is not a render target, a compatible render target is used, and the result is copied to the surface at the end of the scene.

    The interface is obtained by calling the function.

    The LPD3DXRENDERTOSURFACE type is defined as a reference to the interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXRENDERTOSURFACE;	
    +            
    +
    + + bb174192 + ID3DXRenderToSurface + ID3DXRenderToSurface +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the Direct3D device associated with the render surface.

    +
    + + bb174196 + GetDevice + GetDevice + HRESULT ID3DXRenderToSurface::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Retrieves the parameters of the render surface.

    +
    + + bb174195 + GetDesc + GetDesc + HRESULT ID3DXRenderToSurface::GetDesc([Out] D3DXRTS_DESC* pDesc) +
    + + +

    Retrieves the Direct3D device associated with the render surface.

    +
    +

    Address of a reference to an interface, representing the Direct3D device object associated with the render surface.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be . Calling this method will increase the internal reference count on the interface. Be sure to call when you are done using this interface or you will have a memory leak.

    + + bb174196 + HRESULT ID3DXRenderToSurface::GetDevice([Out] IDirect3DDevice9** ppDevice) + ID3DXRenderToSurface::GetDevice +
    + + +

    Retrieves the parameters of the render surface.

    +
    +

    Pointer to a structure, describing the parameters of the render surface.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174195 + HRESULT ID3DXRenderToSurface::GetDesc([Out] D3DXRTS_DESC* pDesc) + ID3DXRenderToSurface::GetDesc +
    + + +

    Begins a scene.

    +
    +

    Pointer to an interface, representing the render surface.

    +

    Pointer to a structure, describing the viewport for the scene.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: . D3DXERR_INVALIDDATA E_OUTOFMEMORY

    + + bb174193 + HRESULT ID3DXRenderToSurface::BeginScene([In] IDirect3DSurface9* pSurface,[In] const D3DVIEWPORT9* pViewport) + ID3DXRenderToSurface::BeginScene +
    + + +

    Ends a scene.

    +
    +

    Filter options, enumerated in .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174194 + HRESULT ID3DXRenderToSurface::EndScene([In] D3DX_FILTER MipFilter) + ID3DXRenderToSurface::EndScene +
    + + +

    Use this method to release all references to video memory resources and delete all stateblocks. This method should be called whenever a device is lost or before resetting a device.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method should be called whenever the device is lost or before the user calls . Even if the device was not actually lost, is responsible for freeing stateblocks and other resources that may need to be released before resetting the device. As a result, the font object cannot be used again before calling and then .

    +
    + + bb174197 + HRESULT ID3DXRenderToSurface::OnLostDevice() + ID3DXRenderToSurface::OnLostDevice +
    + + +

    Use this method to re-acquire resources and save initial state.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    should be called each time the device is reset (using ), before any other methods are called. This is a good place to re-acquire video-memory resources and capture state blocks.

    +
    + + bb174198 + HRESULT ID3DXRenderToSurface::OnResetDevice() + ID3DXRenderToSurface::OnResetDevice +
    + + + Creates a render surface. + +

    Pointer to an interface, the device to be associated with the render surface.

    +

    Width of the render surface, in pixels.

    +

    Height of the render surface, in pixels.

    +

    Member of the enumerated type, describing the pixel format of the render surface.

    +

    If TRUE, the render surface supports a depth-stencil surface. Otherwise, this member is set to . This function will create a new depth buffer.

    +

    If DepthStencil is set to TRUE, this parameter is a member of the enumerated type, describing the depth-stencil format of the render surface.

    + bb172791 + HRESULT D3DXCreateRenderToSurface([In] IDirect3DDevice9* pDevice,[In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] BOOL DepthStencil,[In] D3DFORMAT DepthStencilFormat,[In] ID3DXRenderToSurface** ppRenderToSurface) + D3DXCreateRenderToSurface +
    + + +

    Applications use the methods of the interface to query and prepare resources.

    +
    + +

    To create a texture resource, you can call one of the following methods.

    To create a geometry-oriented resource, you can call one of the following methods.

    This interface, like all COM interfaces, inherits from the interface.

    The LPDIRECT3DRESOURCE9 and PDIRECT3DRESOURCE9 types are defined as references to the interface.

     typedef struct  *LPDIRECT3DRESOURCE9, *PDIRECT3DRESOURCE9;	
    +            
    +
    + + bb205878 + IDirect3DResource9 + IDirect3DResource9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the device associated with a resource.

    +
    + +

    This method allows navigation to the owning device object.

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb205880 + GetDevice + GetDevice + HRESULT IDirect3DResource9::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Retrieves the priority for this resource.

    +
    + +

    is used for priority control of managed resources. This method returns 0 on nonmanaged resources.

    Priorities are used to determine when managed resources are to be removed from memory. A resource assigned a low priority is removed before a resource with a high priority. If two resources have the same priority, the resource that was used more recently is kept in memory; the other resource is removed. Managed resources have a default priority of 0.

    +
    + + bb205881 + GetPriority + GetPriority + unsigned int IDirect3DResource9::GetPriority() +
    + + +

    Returns the type of the resource.

    +
    + + bb205883 + GetType + GetType + D3DRESOURCETYPE IDirect3DResource9::GetType() +
    + + +

    Retrieves the device associated with a resource.

    +
    +

    Address of a reference to an interface to fill with the device reference, if the query succeeds.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method allows navigation to the owning device object.

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb205880 + HRESULT IDirect3DResource9::GetDevice([Out] IDirect3DDevice9** ppDevice) + IDirect3DResource9::GetDevice +
    + + +

    Associates data with the resource that is intended for use by the application, not by Direct3D. Data is passed by value, and multiple sets of data can be associated with a single resource.

    +
    +

    Reference to the globally unique identifier that identifies the private data to set.

    +

    Pointer to a buffer that contains the data to be associated with the resource.

    +

    Size of the buffer at pData, in bytes.

    +

    Value that describes the type of data being passed, or indicates to the application that the data should be invalidated when the resource changes.

    ItemDescription

    (none)

    If no flags are specified, Direct3D allocates memory to hold the data within the buffer and copies the data into the new buffer. The buffer allocated by Direct3D is automatically freed, as appropriate.

    D3DSPD_IUNKNOWN

    The data at pData is a reference to an interface. SizeOfData must be set to the size of a reference to , that is, sizeof(*). Direct3D automatically callsIUnknown through pData when the private data is destroyed. Private data will be destroyed by a subsequent call to with the same , a subsequent call to , or when the object is released. For more information, see Remarks.

    ?

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    Direct3D does not manage the memory at pData. If this buffer was dynamically allocated, it is the calling application's responsibility to free the memory.

    +
    + + bb205886 + HRESULT IDirect3DResource9::SetPrivateData([In] const GUID& refguid,[In] const void* pData,[In] unsigned int SizeOfData,[In] unsigned int Flags) + IDirect3DResource9::SetPrivateData +
    + + +

    Copies the private data associated with the resource to a provided buffer.

    +
    +

    The globally unique identifier that identifies the private data to retrieve.

    +

    Pointer to a previously allocated buffer to fill with the requested private data if the call succeeds. The application calling this method is responsible for allocating and releasing this buffer. If this parameter is null, this method will return the buffer size in pSizeOfData.

    +

    Pointer to the size of the buffer at pData, in bytes. If this value is less than the actual size of the private data (such as 0), the method sets this parameter to the required buffer size and the method returns .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , .

    + +

    This method is inherited by the following interfaces: , , , , , , .

    +
    + + bb205882 + HRESULT IDirect3DResource9::GetPrivateData([In] const GUID& refguid,[In] void* pData,[InOut] unsigned int* pSizeOfData) + IDirect3DResource9::GetPrivateData +
    + + +

    Frees the specified private data associated with this resource.

    +
    +

    Reference to the globally unique identifier that identifies the private data to free.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , .

    + +

    Direct3D calls this method automatically when a resource is released.

    +
    + + bb205879 + HRESULT IDirect3DResource9::FreePrivateData([In] const GUID& refguid) + IDirect3DResource9::FreePrivateData +
    + + +

    Assigns the priority of a resource for scheduling purposes.

    +
    +

    Priority to assign to a resource.

    Differences between Direct3D 9 and Direct3D 9 for Windows Vista

    The priority can be any DWORD value; Direct3D 9 for Windows Vista also supports any of these pre-defined values D3D9_RESOURCE_PRIORITY.

    ?

    +

    Returns the previous priority value for the resource.

    + +

    This method is used to change the priority of managed resources (resources created with the flag). This method returns 0 on non-managed resources.

    Priorities are used to determine when managed resources are to be removed from memory. A resource assigned a low priority is removed before a resource with a high priority. If two resources have the same priority, the resource that was used more recently is kept in memory; the other resource is removed. Managed resources have a default priority of 0.

    Windows Vista only - When this method is called using an interface, only resources created with the flag will be affected.

    +
    + + bb205885 + unsigned int IDirect3DResource9::SetPriority([In] unsigned int PriorityNew) + IDirect3DResource9::SetPriority +
    + + +

    Retrieves the priority for this resource.

    +
    +

    Returns a DWORD value, indicating the priority of the resource.

    + +

    is used for priority control of managed resources. This method returns 0 on nonmanaged resources.

    Priorities are used to determine when managed resources are to be removed from memory. A resource assigned a low priority is removed before a resource with a high priority. If two resources have the same priority, the resource that was used more recently is kept in memory; the other resource is removed. Managed resources have a default priority of 0.

    +
    + + bb205881 + unsigned int IDirect3DResource9::GetPriority() + IDirect3DResource9::GetPriority +
    + + +

    Preloads a managed resource.

    +
    + +

    Calling this method indicates that the application will need this managed resource shortly. This method has no effect on nonmanaged resources.

    detects "thrashing" conditions where more resources are being used in each frame than can fit in video memory simultaneously. Under such circumstances silently does nothing.

    +
    + + bb205884 + void IDirect3DResource9::PreLoad() + IDirect3DResource9::PreLoad +
    + + +

    Returns the type of the resource.

    +
    +

    Returns a member of the enumerated type, identifying the type of the resource.

    + + bb205883 + D3DRESOURCETYPE IDirect3DResource9::GetType() + IDirect3DResource9::GetType +
    + + + Gets or sets the debug-name for this object. + + + The debug name. + + + + + No documentation. + + + bb280438 + ID3DXSPMesh + ID3DXSPMesh + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + + No documentation. + + + GetNumFaces + GetNumFaces + unsigned int ID3DXSPMesh::GetNumFaces() + + + + No documentation. + + + GetNumVertices + GetNumVertices + unsigned int ID3DXSPMesh::GetNumVertices() + + + + No documentation. + + + GetFVF + GetFVF + unsigned int ID3DXSPMesh::GetFVF() + + + + No documentation. + + + GetOptions + GetOptions + unsigned int ID3DXSPMesh::GetOptions() + + + + No documentation. + + + GetDevice + GetDevice + HRESULT ID3DXSPMesh::GetDevice([Out] IDirect3DDevice9** ppDevice) + + + + No documentation. + + + GetMaxFaces + GetMaxFaces + unsigned int ID3DXSPMesh::GetMaxFaces() + + + + No documentation. + + + GetMaxVertices + GetMaxVertices + unsigned int ID3DXSPMesh::GetMaxVertices() + + + + No documentation. + + + GetVertexWeights + GetVertexWeights + HRESULT ID3DXSPMesh::GetVertexWeights([Out] float* pVertexWeights) + + + + No documentation. + + No documentation. + + unsigned int ID3DXSPMesh::GetNumFaces() + ID3DXSPMesh::GetNumFaces + + + + No documentation. + + No documentation. + + unsigned int ID3DXSPMesh::GetNumVertices() + ID3DXSPMesh::GetNumVertices + + + + No documentation. + + No documentation. + + unsigned int ID3DXSPMesh::GetFVF() + ID3DXSPMesh::GetFVF + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3DXSPMesh::GetDeclaration([In] D3DVERTEXELEMENT9* Declaration) + ID3DXSPMesh::GetDeclaration + + + + No documentation. + + No documentation. + + unsigned int ID3DXSPMesh::GetOptions() + ID3DXSPMesh::GetOptions + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3DXSPMesh::GetDevice([Out] IDirect3DDevice9** ppDevice) + ID3DXSPMesh::GetDevice + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DXSPMesh::CloneMeshFVF([In] unsigned int Options,[In] unsigned int FVF,[In] IDirect3DDevice9* pD3DDevice,[In] unsigned int* pAdjacencyOut,[In] unsigned int* pVertexRemapOut,[In] ID3DXMesh** ppCloneMesh) + ID3DXSPMesh::CloneMeshFVF + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DXSPMesh::CloneMesh([In] unsigned int Options,[In] const D3DVERTEXELEMENT9* pDeclaration,[In] IDirect3DDevice9* pD3DDevice,[In] unsigned int* pAdjacencyOut,[In] unsigned int* pVertexRemapOut,[In] ID3DXMesh** ppCloneMesh) + ID3DXSPMesh::CloneMesh + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DXSPMesh::ClonePMeshFVF([In] unsigned int Options,[In] unsigned int FVF,[In] IDirect3DDevice9* pD3DDevice,[In] unsigned int* pVertexRemapOut,[In] float* pErrorsByFace,[In] ID3DXPMesh** ppCloneMesh) + ID3DXSPMesh::ClonePMeshFVF + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT ID3DXSPMesh::ClonePMesh([In] unsigned int Options,[In] const D3DVERTEXELEMENT9* pDeclaration,[In] IDirect3DDevice9* pD3DDevice,[In] unsigned int* pVertexRemapOut,[In] float* pErrorsbyFace,[In] ID3DXPMesh** ppCloneMesh) + ID3DXSPMesh::ClonePMesh + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3DXSPMesh::ReduceFaces([In] unsigned int Faces) + ID3DXSPMesh::ReduceFaces + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3DXSPMesh::ReduceVertices([In] unsigned int Vertices) + ID3DXSPMesh::ReduceVertices + + + + No documentation. + + No documentation. + + unsigned int ID3DXSPMesh::GetMaxFaces() + ID3DXSPMesh::GetMaxFaces + + + + No documentation. + + No documentation. + + unsigned int ID3DXSPMesh::GetMaxVertices() + ID3DXSPMesh::GetMaxVertices + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3DXSPMesh::GetVertexAttributeWeights([In] D3DXATTRIBUTEWEIGHTS* pVertexAttributeWeights) + ID3DXSPMesh::GetVertexAttributeWeights + + + + No documentation. + + No documentation. + No documentation. + + HRESULT ID3DXSPMesh::GetVertexWeights([Out] float* pVertexWeights) + ID3DXSPMesh::GetVertexWeights + + + + No documentation. + + + bb280439 + ID3DXSkinInfo + ID3DXSkinInfo + + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the maximum number of influences for any vertex in the mesh.

    +
    + + bb174218 + GetMaxVertexInfluences + GetMaxVertexInfluences + HRESULT ID3DXSkinInfo::GetMaxVertexInfluences([Out] unsigned int* maxVertexInfluences) +
    + + +

    Gets the number of bones.

    +
    + + bb174221 + GetNumBones + GetNumBones + unsigned int ID3DXSkinInfo::GetNumBones() +
    + + +

    Gets or sets the minimum bone influence. Influence values smaller than this are ignored.

    +
    + + bb174219 + GetMinBoneInfluence / SetMinBoneInfluence + GetMinBoneInfluence + float ID3DXSkinInfo::GetMinBoneInfluence() +
    + + +

    Gets or sets the fixed function vertex value.

    +
    + +

    This method can return 0 if the vertex format cannot be mapped directly to an FVF code. This will occur for a mesh created from a vertex declaration that doesn't have the same order and elements supported by the FVF codes.

    +
    + + bb174216 + GetFVF / SetFVF + GetFVF + unsigned int ID3DXSkinInfo::GetFVF() +
    + + +

    Sets the influence value for a bone.

    +
    +

    Bone number.

    +

    Number of influences.

    +

    The array of vertices influenced by a bone.

    +

    The array of weights influenced by a bone.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174224 + HRESULT ID3DXSkinInfo::SetBoneInfluence([In] unsigned int bone,[In] unsigned int numInfluences,[In] const unsigned int* vertices,[In] const float* weights) + ID3DXSkinInfo::SetBoneInfluence +
    + + +

    Sets an influence value of a bone on a single vertex.

    +
    +

    Index of the bone. Must be between 0 and the number of bones.

    +

    Index of the influence array of the specified bone.

    +

    Blend factor of the specified bone influence.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174227 + HRESULT ID3DXSkinInfo::SetBoneVertexInfluence([In] unsigned int boneNum,[In] unsigned int influenceNum,[In] float weight) + ID3DXSkinInfo::SetBoneVertexInfluence +
    + + +

    Gets the number of influences for a bone.

    +
    +

    Bone number.

    +

    Returns the number of influences for a bone.

    + + bb174220 + unsigned int ID3DXSkinInfo::GetNumBoneInfluences([In] unsigned int bone) + ID3DXSkinInfo::GetNumBoneInfluences +
    + + +

    Gets the vertices and weights that a bone influences.

    +
    +

    Bone number.

    +

    Get the array of vertices influenced by a bone.

    +

    Get the array of weights influenced by a bone.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Use to find out how many vertices the bone influences.

    +
    + + bb174211 + HRESULT ID3DXSkinInfo::GetBoneInfluence([In] unsigned int bone,[Out] unsigned int* vertices,[Out] float* weights) + ID3DXSkinInfo::GetBoneInfluence +
    + + +

    Retrieves the blend factor and vertex affected by a specified bone influence.

    +
    +

    Index of the bone. Must be between 0 and the number of bones.

    +

    Index of the influence array of the specified bone.

    +

    Pointer to the blend factor influenced by influenceNum.

    +

    Pointer to the vertex influenced by influenceNum.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174214 + HRESULT ID3DXSkinInfo::GetBoneVertexInfluence([In] unsigned int boneNum,[In] unsigned int influenceNum,[Out] float* pWeight,[Out] unsigned int* pVertexNum) + ID3DXSkinInfo::GetBoneVertexInfluence +
    + + +

    Gets the maximum number of influences for any vertex in the mesh.

    +
    +

    Pointer to the maximum vertex influence.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174218 + HRESULT ID3DXSkinInfo::GetMaxVertexInfluences([Out] unsigned int* maxVertexInfluences) + ID3DXSkinInfo::GetMaxVertexInfluences +
    + + +

    Gets the number of bones.

    +
    +

    Returns the number of bones.

    + + bb174221 + unsigned int ID3DXSkinInfo::GetNumBones() + ID3DXSkinInfo::GetNumBones +
    + + +

    Retrieves the index of the bone influence affecting a single vertex.

    +
    +

    Index of the bone. Must be between 0 and the number of bones.

    +

    Index of the vertex for which the bone influence is to be found. Must be between 0 and the number of vertices in the mesh.

    +

    Pointer to the index of the bone influence that affects vertexNum.

    +

    If the method succeeds, the return value is . If the specified bone does not influence the given vertex, S_FALSE is returned. If the method fails, the return value can be .

    + + bb174210 + HRESULT ID3DXSkinInfo::FindBoneVertexInfluenceIndex([In] unsigned int boneNum,[In] unsigned int vertexNum,[In] unsigned int* pInfluenceIndex) + ID3DXSkinInfo::FindBoneVertexInfluenceIndex +
    + + +

    Gets the maximum face influences in a triangle mesh with the specified index buffer.

    +
    +

    Pointer to the index buffer that contains the mesh index data.

    +

    Number of faces in the mesh.

    +

    Pointer to the maximum face influences.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174217 + HRESULT ID3DXSkinInfo::GetMaxFaceInfluences([In] IDirect3DIndexBuffer9* pIB,[In] unsigned int NumFaces,[Out] unsigned int* maxFaceInfluences) + ID3DXSkinInfo::GetMaxFaceInfluences +
    + + +

    Sets the minimum bone influence. Influence values smaller than this are ignored.

    +
    +

    Minimum influence value. Influence values smaller than this are ignored.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174230 + HRESULT ID3DXSkinInfo::SetMinBoneInfluence([In] float MinInfl) + ID3DXSkinInfo::SetMinBoneInfluence +
    + + +

    Gets the minimum bone influence. Influence values smaller than this are ignored.

    +
    +

    Returns the minimum bone influence value.

    + + bb174219 + float ID3DXSkinInfo::GetMinBoneInfluence() + ID3DXSkinInfo::GetMinBoneInfluence +
    + + +

    Sets the bone name.

    +
    +

    Bone number

    +

    Bone name

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Bone names are returned by .

    +
    + + bb174225 + HRESULT ID3DXSkinInfo::SetBoneName([In] unsigned int Bone,[In] const char* pName) + ID3DXSkinInfo::SetBoneName +
    + + +

    Gets the bone name, from the bone index.

    +
    +

    Bone number.

    +

    Returns the bone name. Do not free this string.

    + + bb174212 + const char* ID3DXSkinInfo::GetBoneName([In] unsigned int Bone) + ID3DXSkinInfo::GetBoneName +
    + + +

    Sets the bone offset matrix.

    +
    +

    Bone number.

    +

    Pointer to the bone offset matrix.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Bone names are returned by .

    +
    + + bb174226 + HRESULT ID3DXSkinInfo::SetBoneOffsetMatrix([In] unsigned int Bone,[In] const D3DXMATRIX* pBoneTransform) + ID3DXSkinInfo::SetBoneOffsetMatrix +
    + + +

    Gets the bone offset matrix.

    +
    +

    Bone number.

    +

    Returns a reference to the bone offset matrix. Do not free this reference.

    + + bb174213 + D3DXMATRIX* ID3DXSkinInfo::GetBoneOffsetMatrix([In] unsigned int Bone) + ID3DXSkinInfo::GetBoneOffsetMatrix +
    + + +

    Clones a skin info object.

    +
    +

    Address of a reference to an object, which will contain the cloned object if the method is successful.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174207 + HRESULT ID3DXSkinInfo::Clone([In] ID3DXSkinInfo** ppSkinInfo) + ID3DXSkinInfo::Clone +
    + + +

    Updates bone influence information to match vertices after they are reordered. This method should be called if the target vertex buffer has been reordered externally.

    +
    +

    Number of vertices to remap.

    +

    Array of DWORDS whose length is specified by NumVertices.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Each element in pVertexRemap specifies the previous vertex index for that position. For example, if a vertex was in position 3 but has been remapped to position 5, then the fifth element of pVertexRemap should contain 3. The vertex remap array returned by can be used.

    +
    + + bb174223 + HRESULT ID3DXSkinInfo::Remap([In] unsigned int NumVertices,[In] unsigned int* pVertexRemap) + ID3DXSkinInfo::Remap +
    + + +

    Sets the flexible vertex format (FVF) type.

    +
    +

    Flexible vertex format. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174229 + HRESULT ID3DXSkinInfo::SetFVF([In] unsigned int FVF) + ID3DXSkinInfo::SetFVF +
    + + +

    Sets the vertex declaration.

    +
    +

    Pointer to an array of elements.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174228 + HRESULT ID3DXSkinInfo::SetDeclaration([In] const D3DVERTEXELEMENT9* pDeclaration) + ID3DXSkinInfo::SetDeclaration +
    + + +

    Gets the fixed function vertex value.

    +
    +

    Returns the flexible vertex format (FVF) codes.

    + +

    This method can return 0 if the vertex format cannot be mapped directly to an FVF code. This will occur for a mesh created from a vertex declaration that doesn't have the same order and elements supported by the FVF codes.

    +
    + + bb174216 + unsigned int ID3DXSkinInfo::GetFVF() + ID3DXSkinInfo::GetFVF +
    + + +

    Gets the vertex declaration.

    +
    +

    Array of elements describing the vertex format of the mesh vertices. The upper limit of this declarator array is . The vertex element array ends with the D3DDECL_END macro.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    The array of elements includes the D3DDECL_END macro, which ends the declaration.

    +
    + + bb174215 + HRESULT ID3DXSkinInfo::GetDeclaration([In] D3DVERTEXELEMENT9* Declaration) + ID3DXSkinInfo::GetDeclaration +
    + + +

    Applies software skinning to the target vertices based on the current matrices.

    +
    +

    Bone transform matrix.

    +

    Inverse transpose of the bone transform matrix.

    +

    Pointer to the buffer containing the source vertices.

    +

    Pointer to the buffer containing the destination vertices.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    When used to skin vertices with two position elements, this method skins the second position element with the inverse of the bone instead of the bone itself.

    +
    + + bb174231 + HRESULT ID3DXSkinInfo::UpdateSkinnedMesh([In] const D3DXMATRIX* pBoneTransforms,[In] const D3DXMATRIX* pBoneInvTransposeTransforms,[In] const void* pVerticesSrc,[In] void* pVerticesDst) + ID3DXSkinInfo::UpdateSkinnedMesh +
    + + +

    Takes a mesh and returns a new mesh with per-vertex blend weights and a bone combination table. The table describes which bones affect which subsets of the mesh.

    +
    +

    Input mesh. See .

    +

    Currently unused.

    +

    Input mesh adjacency information.

    +

    Output mesh adjacency information.

    +

    An array of DWORDs, one per face, that identifies the original mesh face that corresponds to each face in the blended mesh. If the value supplied for this argument is null, face remap data is not returned.

    +

    Address of a reference to an interface, which contains a DWORD for each vertex that specifies how the new vertices map to the old vertices. This remap is useful if you need to alter external data based on the new vertex mapping. This parameter is optional; null may be used.

    +

    Pointer to a DWORD that will contain the maximum number of bone influences required per vertex for this skinning method.

    +

    Pointer to the number of bones in the bone combination table.

    +

    Pointer to the bone combination table. The data is organized in a structure.

    +

    Pointer to the new mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Each element in the remap array specifies the previous index for that position. For example, if a vertex was in position 3 but has been remapped to position 5, then the fifth element of pVertexRemap will contain 3.

    This method does not run on hardware that does not support fixed-function vertex blending.

    +
    + + bb174208 + HRESULT ID3DXSkinInfo::ConvertToBlendedMesh([In] ID3DXMesh* pMesh,[In] unsigned int Options,[In] const unsigned int* pAdjacencyIn,[In] unsigned int* pAdjacencyOut,[In] unsigned int* pFaceRemap,[In] ID3DXBuffer** ppVertexRemap,[In] unsigned int* pMaxFaceInfl,[In] unsigned int* pNumBoneCombinations,[In] ID3DXBuffer** ppBoneCombinationTable,[In] ID3DXMesh** ppMesh) + ID3DXSkinInfo::ConvertToBlendedMesh +
    + + +

    Takes a mesh and returns a new mesh with per-vertex blend weights, indices, and a bone combination table. The table describes which bone palettes affect which subsets of the mesh.

    +
    +

    The input mesh. See .

    +

    Currently unused.

    +

    Number of bone matrices available for matrix palette skinning.

    +

    Input mesh adjacency information.

    +

    Output mesh adjacency information.

    +

    An array of DWORDs, one per face, that identifies the original mesh face that corresponds to each face in the blended mesh. If the value supplied for this argument is null, face remap data is not returned.

    +

    Address of a reference to an interface, which contains a DWORD for each vertex that specifies how the new vertices map to the old vertices. This remap is useful if you need to alter external data based on the new vertex mapping. This parameter is optional; null may be used.

    +

    Pointer to a DWORD that will contain the maximum number of bone influences required per vertex for this skinning method.

    +

    Pointer to the number of bones in the bone combination table.

    +

    Pointer to the bone combination table. The data is organized in a structure.

    +

    Pointer to the new mesh.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Each element in the remap arrays specifies the previous index for that position. For example, if a vertex was in position 3 but has been remapped to position 5, then the fifth element of pVertexRemap will contain 3.

    This method does not run on hardware that does not support fixed-function vertex blending.

    +
    + + bb174209 + HRESULT ID3DXSkinInfo::ConvertToIndexedBlendedMesh([In] ID3DXMesh* pMesh,[In] unsigned int Options,[In] unsigned int paletteSize,[In] const unsigned int* pAdjacencyIn,[In] unsigned int* pAdjacencyOut,[In] unsigned int* pFaceRemap,[In] ID3DXBuffer** ppVertexRemap,[In] unsigned int* pMaxVertexInfl,[In] unsigned int* pNumBoneCombinations,[In] ID3DXBuffer** ppBoneCombinationTable,[In] ID3DXMesh** ppMesh) + ID3DXSkinInfo::ConvertToIndexedBlendedMesh +
    + + +

    The interface provides a set of methods that simplify the process of drawing sprites using Microsoft Direct3D.

    +
    + +

    The interface is obtained by calling the function.

    The application typically first calls , which allows control over the device render state, alpha blending, and sprite transformation and sorting. Then for each sprite to be displayed, call . can be called repeatedly to store any number of sprites. To display the batched sprites to the device, call or .

    The LPD3DXSPRITE type is defined as a reference to the interface.

     typedef interface  ;	
    +            typedef interface  *LPD3DXSPRITE;	
    +            
    +
    + + bb174249 + ID3DXSprite + ID3DXSprite +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the device associated with the sprite object.

    +
    + +

    Calling this method will increase the internal reference count on the interface.

    +
    + + bb174254 + GetDevice + GetDevice + HRESULT ID3DXSprite::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Gets or sets the sprite transform.

    +
    + + bb174255 + GetTransform / SetTransform + GetTransform + HRESULT ID3DXSprite::GetTransform([Out] D3DXMATRIX* pTransform) +
    + + +

    Retrieves the device associated with the sprite object.

    +
    +

    Address of a reference to an interface, representing the Direct3D device object associated with the sprite object.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned.

    + +

    Calling this method will increase the internal reference count on the interface.

    +
    + + bb174254 + HRESULT ID3DXSprite::GetDevice([Out] IDirect3DDevice9** ppDevice) + ID3DXSprite::GetDevice +
    + + +

    Gets the sprite transform.

    +
    +

    Pointer to a that contains a transform of the sprite from the original world space.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned.

    + + bb174255 + HRESULT ID3DXSprite::GetTransform([Out] D3DXMATRIX* pTransform) + ID3DXSprite::GetTransform +
    + + +

    Sets the sprite transform.

    +
    +

    Pointer to a that contains a transform of the sprite from the original world space. Use this transform to scale, rotate, or transform the sprite.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned.

    + + bb174258 + HRESULT ID3DXSprite::SetTransform([In] const D3DXMATRIX* pTransform) + ID3DXSprite::SetTransform +
    + + +

    Sets the right-handed world-view transform for a sprite. A call to this method is required before billboarding or sorting sprites.

    +
    +

    Pointer to a that contains a world transform. If null, the identity matrix is used for the world transform.

    +

    Pointer to a that contains a view transform. If null, the identity matrix is used for the view transform.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned.

    + +

    A call to this method (or to ) is required if the sprite will be rendered with the D3DXSprite__BILLBOARD, D3DXSprite__SORT_DEPTH_FRONTTOBACK, or D3DXSprite__SORT_DEPTH_BACKTOFRONT flag value in .

    +
    + + bb174260 + HRESULT ID3DXSprite::SetWorldViewRH([In] const D3DXMATRIX* pWorld,[In] const D3DXMATRIX* pView) + ID3DXSprite::SetWorldViewRH +
    + + +

    Sets the left-handed world-view transform for a sprite. A call to this method is required before billboarding or sorting sprites.

    +
    +

    Pointer to a that contains a world transform. If null, the identity matrix is used for the world transform.

    +

    Pointer to a that contains a view transform. If null, the identity matrix is used for the view transform.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned.

    + +

    A call to this method (or to ) is required if the sprite will be rendered with the D3DXSprite__BILLBOARD, D3DXSprite__SORT_DEPTH_FRONTTOBACK, or D3DXSprite__SORT_DEPTH_BACKTOFRONT flag value in .

    +
    + + bb174259 + HRESULT ID3DXSprite::SetWorldViewLH([In] const D3DXMATRIX* pWorld,[In] const D3DXMATRIX* pView) + ID3DXSprite::SetWorldViewLH +
    + + +

    Prepares a device for drawing sprites.

    +
    +

    Combination of zero or more flags that describe sprite rendering options. For this method, the valid flags are:

    • D3DXSPRITE__BILLBOARD
    • D3DXSPRITE__SORT_DEPTH_BACKTOFRONT
    • D3DXSPRITE__SORT_DEPTH_FRONTTOBACK
    • D3DXSPRITE__SORT_TEXTURE

    For a description of the flags and for information on how to control device state capture and device view transforms, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , D3DXERR_INVALIDDATA, E_OUTOFMEMORY.

    + +

    This method must be called from inside a . . . sequence. cannot be used as a substitute for either or .

    This method will set the following states on the device.

    Render States:

    Type ()Value
    TRUE
    0x00
    AlphaCmpCaps
    TRUE
    | | |
    0

    ?

    Texture Stage States:

    Stage IdentifierType ()Value
    0
    0
    0
    0
    0
    0
    00
    0
    1
    1

    ?

    Sampler States:

    Sampler Stage IndexType ()Value
    0
    0
    0 if TextureFilterCaps includes ; otherwise
    00
    0MaxAnisotropy
    0 if TextureFilterCaps includes ; otherwise
    0 if TextureFilterCaps includes ; otherwise
    00
    00

    ?

    Note??This method disables N-patches.

    +
    + + bb174250 + HRESULT ID3DXSprite::Begin([In] D3DXSPRITE Flags) + ID3DXSprite::Begin +
    + + +

    Adds a sprite to the list of batched sprites.

    +
    +

    Pointer to an interface that represents the sprite texture.

    +

    Pointer to a structure that indicates the portion of the source texture to use for the sprite. If this parameter is null, then the entire source image is used for the sprite.

    +

    Pointer to a vector that identifies the center of the sprite. If this argument is null, the point (0,0,0) is used, which is the upper-left corner.

    +

    Pointer to a vector that identifies the position of the sprite. If this argument is null, the point (0,0,0) is used, which is the upper-left corner.

    +

    type. The color and alpha channels are modulated by this value. A value of 0xFFFFFFFF maintains the original source color and alpha data. Use the D3DCOLOR_RGBA macro to help generate this color.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    To scale, rotate, or translate a sprite, call with a matrix that contains the scale, rotate, and translate (SRT) values, before calling . For information about setting SRT values in a matrix, see Matrix Transforms.

    +
    + + bb174251 + HRESULT ID3DXSprite::Draw([In] IDirect3DTexture9* pTexture,[In] const void* pSrcRect,[In] const void* pCenter,[In] const void* pPosition,[In] D3DCOLOR Color) + ID3DXSprite::Draw +
    + + +

    Forces all batched sprites to be submitted to the device. Device states remain as they were after the last call to . The list of batched sprites is then cleared.

    +
    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned.

    + + bb174253 + HRESULT ID3DXSprite::Flush() + ID3DXSprite::Flush +
    + + +

    Calls and restores the device state to how it was before was called.

    +
    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned.

    + +

    cannot be used as a substitute for either or .

    +
    + + bb174252 + HRESULT ID3DXSprite::End() + ID3DXSprite::End +
    + + +

    Use this method to release all references to video memory resources and delete all stateblocks. This method should be called whenever a device is lost or before resetting a device.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method should be called whenever the device is lost or before the user calls . Even if the device was not actually lost, is responsible for freeing stateblocks and other resources that may need to be released before resetting the device. As a result, the font object cannot be used again before calling and then .

    +
    + + bb174256 + HRESULT ID3DXSprite::OnLostDevice() + ID3DXSprite::OnLostDevice +
    + + +

    Use this method to re-acquire resources and save initial state.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    should be called each time the device is reset (using ), before any other methods are called. This is a good place to re-acquire video-memory resources and capture state blocks.

    +
    + + bb174257 + HRESULT ID3DXSprite::OnResetDevice() + ID3DXSprite::OnResetDevice +
    + + + Creates a sprite object which is associated with a particular device. Sprite objects are used to draw 2D images to the screen. + + A reference to the device (see ) that will draw the sprite. + + This interface can be used to draw two dimensional images in screen space of the associated device. + + HRESULT D3DXCreateSprite([In] IDirect3DDevice9* pDevice,[Out, Fast] ID3DXSprite** ppSprite) + + + +

    Adds a sprite to the list of batched sprites.

    +
    +

    Pointer to an interface that represents the sprite texture.

    +

    type. The color and alpha channels are modulated by this value. A value of 0xFFFFFFFF maintains the original source color and alpha data. Use the D3DCOLOR_RGBA macro to help generate this color.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    To scale, rotate, or translate a sprite, call with a matrix that contains the scale, rotate, and translate (SRT) values, before calling . For information about setting SRT values in a matrix, see Matrix Transforms.

    +
    + bb174251 + HRESULT ID3DXSprite::Draw([In] IDirect3DTexture9* pTexture,[In] const RECT* pSrcRect,[In] const D3DXVECTOR3* pCenter,[In] const D3DXVECTOR3* pPosition,[In] D3DCOLOR Color) + ID3DXSprite::Draw +
    + + +

    Adds a sprite to the list of batched sprites.

    +
    +

    Pointer to an interface that represents the sprite texture.

    +

    Pointer to a structure that indicates the portion of the source texture to use for the sprite. If this parameter is null, then the entire source image is used for the sprite.

    +

    Pointer to a vector that identifies the center of the sprite. If this argument is null, the point (0,0,0) is used, which is the upper-left corner.

    +

    Pointer to a vector that identifies the position of the sprite. If this argument is null, the point (0,0,0) is used, which is the upper-left corner.

    +

    type. The color and alpha channels are modulated by this value. A value of 0xFFFFFFFF maintains the original source color and alpha data. Use the D3DCOLOR_RGBA macro to help generate this color.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    To scale, rotate, or translate a sprite, call with a matrix that contains the scale, rotate, and translate (SRT) values, before calling . For information about setting SRT values in a matrix, see Matrix Transforms.

    +
    + bb174251 + HRESULT ID3DXSprite::Draw([In] IDirect3DTexture9* pTexture,[In] const RECT* pSrcRect,[In] const D3DXVECTOR3* pCenter,[In] const D3DXVECTOR3* pPosition,[In] D3DCOLOR Color) + ID3DXSprite::Draw +
    + + +

    Applications use the methods of the interface to encapsulate render states.

    +
    + +

    This interface can be used to save and restore pipeline state. It can also be used to capture the current state.

    The LPDIRECT3DSTATEBLOCK9 and PDIRECT3DSTATEBLOCK9 types are defined as references to the interface.

    typedef struct  *LPDIRECT3DSTATEBLOCK9, *PDIRECT3DSTATEBLOCK9;
    +
    + + bb205887 + IDirect3DStateBlock9 + IDirect3DStateBlock9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the device.

    +
    + + bb205891 + GetDevice + GetDevice + HRESULT IDirect3DStateBlock9::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Gets the device.

    +
    +

    Pointer to the interface that is returned.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205891 + HRESULT IDirect3DStateBlock9::GetDevice([Out] IDirect3DDevice9** ppDevice) + IDirect3DStateBlock9::GetDevice +
    + + +

    Capture the current value of states that are included in a stateblock.

    +
    +

    If the method succeeds, the return value is . If the method fails because capture cannot be done while in record mode, the return value is .

    + +

    The Capture method captures current values for states within an existing state block. It does not capture the entire state of the device. For example:

     * pStateBlock = null; pd3dDevice->BeginStateBlock();	
    +            // Add the ZENABLE state to the stateblock 	
    +            pd3dDevice->SetRenderState ( ,  );	
    +            pd3dDevice->EndStateBlock ( &pStateBlock ); // Change the current value that is stored in the state block	
    +            pd3dDevice->SetRenderState ( ,  );	
    +            pStateBlock->Capture();			 pStateBlock->Release();	
    +            

    Creating an empty stateblock and calling the Capture method does nothing if no states have been set.

    The Capture method will not capture information for lights that are explicitly or implicitly created after the stateblock is created.

    +
    + + bb205890 + HRESULT IDirect3DStateBlock9::Capture() + IDirect3DStateBlock9::Capture +
    + + +

    Apply the state block to the current device state.

    +
    +

    If the method succeeds, the return value is . If the method fails while in record mode, the return value is .

    + + bb205889 + HRESULT IDirect3DStateBlock9::Apply() + IDirect3DStateBlock9::Apply +
    + + + Initializes a new instance of the class. + + The device. + The type. + + + +

    Applications use the methods of the interface to query and prepare surfaces.

    +
    + +

    The LPDIRECT3DSURFACE9 and PDIRECT3DSURFACE9 types are defined as references to the interface.

     typedef struct  *LPDIRECT3DSURFACE9, *PDIRECT3DSURFACE9;	
    +            
    +
    + + bb205892 + IDirect3DSurface9 + IDirect3DSurface9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a description of the surface.

    +
    + + bb205895 + GetDesc + GetDesc + HRESULT IDirect3DSurface9::GetDesc([Out] D3DSURFACE_DESC* pDesc) +
    + + +

    Provides access to the parent cube texture or texture (mipmap) object, if this surface is a child level of a cube texture or a mipmap. This method can also provide access to the parent swap chain if the surface is a back-buffer child.

    +
    +

    Reference identifier of the container being requested.

    +

    Address of a reference to fill with the container reference if the query succeeds. See Remarks.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    If the surface is created using CreateRenderTarget or CreateOffscreenPlainSurface or CreateDepthStencilSurface, the surface is considered stand alone. In this case, GetContainer will return the Direct3D device used to create the surface.

    If the call succeeds, the reference count of the container is increased by one.

    Here's an example getting the parent texture of a mip surface.

     // Assumes pSurface is a valid  reference	
    +            void *pContainer = null;	
    +             *pTexture = null;	
    +             hr = pSurface->GetContainer(IID_IDirect3DTexture9, &pContainer);	
    +            if (SUCCEEDED(hr) && pContainer)	
    +            { pTexture = ( *)pContainer;	
    +            }	
    +            
    +
    + + bb205893 + HRESULT IDirect3DSurface9::GetContainer([In] const GUID& riid,[Out] void** ppContainer) + IDirect3DSurface9::GetContainer +
    + + +

    Retrieves a description of the surface.

    +
    +

    Pointer to a structure, describing the surface.

    +

    If the method succeeds, the return value is .

    is returned if the argument is invalid.

    + + bb205895 + HRESULT IDirect3DSurface9::GetDesc([Out] D3DSURFACE_DESC* pDesc) + IDirect3DSurface9::GetDesc +
    + + +

    Locks a rectangle on a surface.

    +
    +

    Pointer to a structure that describes the locked region.

    +

    Pointer to a rectangle to lock. Specified by a reference to a structure. Specifying null for this parameter expands the dirty region to cover the entire surface.

    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    You may not specify a subrect when using . For a description of the flags, see .

    +

    If the method succeeds, the return value is .

    If the method fails, the return value can be or .

    + +

    If the flag is specified and the driver cannot lock the surface immediately, will return so that an application can use the CPU cycles while waiting for the driver to lock the surface.

    The only lockable format for a depth-stencil surface is . See .

    For performance reasons, dirty regions are recorded only for level zero of a texture. Dirty regions are automatically recorded when is called without or . See for more information.

    A multisample back buffer cannot be locked.

    This method cannot retrieve data from a surface that is is contained by a texture resource created with because such a texture must be assigned to memory and is therefore not lockable. In this case, use instead to copy texture data from device memory to system memory.

    +
    + + bb205896 + HRESULT IDirect3DSurface9::LockRect([Out] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + IDirect3DSurface9::LockRect +
    + + +

    Unlocks a rectangle on a surface.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205898 + HRESULT IDirect3DSurface9::UnlockRect() + IDirect3DSurface9::UnlockRect +
    + + +

    Retrieves a device context.

    +
    +

    Pointer to the device context for the surface.

    + +

    The following restrictions apply.

    • is valid on the following formats only: , , , and . Formats that contain Alpha are not supported because the GDI implementations don't have a well-defined behavior on the alpha channel. For more information about formats, see .
    • Only one device context per surface can be returned at a time.
    • will fail if the surface is already locked. If the surface is a member of a mipmap or cubemap, fails if any other mipmap or cubemap member is locked.
    • fails on render targets unless they were created lockable (or, in the case of back buffers, with the flag).
    • For surfaces not created with , will fail on default pool () surfaces unless they are dynamic () or are lockable render targets.
    • will fail on surfaces.

    When a device context is outstanding on a surface, the application may not call these methods:

    *

    ?

    * (on a swap chain that contains the surface)

    causes an implicit lock; do not retain the device context for later use. Call to release it.

    It is valid to call / on levels of a mipmap or cubemap, however, these calls will be slow to all miplevels except the topmost level, and GDI operations to these miplevels will not be accelerated.

    The hdc provides access to Win32 and GDI functionality.

    +
    + + bb205894 + HRESULT IDirect3DSurface9::GetDC([Out] HDC* phdc) + IDirect3DSurface9::GetDC +
    + + +

    Release a device context handle.

    +
    +

    Handle to a device context.

    +

    If the method succeeds, the return value is . is returned if the argument is invalid.

    + +

    An hdc is a Windows resource. It must be released after use so Windows can return it to the pool of available resources.

    This method will release only the device context returned by . Otherwise, this method will fail.

    +
    + + bb205897 + HRESULT IDirect3DSurface9::ReleaseDC([In] HDC hdc) + IDirect3DSurface9::ReleaseDC +
    + + + Creates a depth-stencil surface. + + The device. + The width. + The height. + The format. + Type of the multisample. + The multisample quality. + if set to true [discard]. + A reference to a , representing the created depth-stencil surface resource. + HRESULT IDirect3DDevice9::CreateDepthStencilSurface([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Discard,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle) + + + + Creates a depth-stencil surface. + + The device. + The width. + The height. + The format. + Type of the multisample. + The multisample quality. + if set to true [discard]. + The shared handle. + A reference to a , representing the created depth-stencil surface resource. + HRESULT IDirect3DDevice9::CreateDepthStencilSurface([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Discard,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle) + + + + Creates a depth-stencil surface. + + The device. + The width. + The height. + The format. + Type of the multisample. + The multisample quality. + if set to true [discard]. + The usage. + A reference to a , representing the created depth-stencil surface resource. + HRESULT IDirect3DDevice9Ex::CreateDepthStencilSurfaceEx([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Discard,[Out, Fast] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle,[In] unsigned int Usage) + + + + Creates a depth-stencil surface. + + The device. + The width. + The height. + The format. + Type of the multisample. + The multisample quality. + if set to true [discard]. + The usage. + The shared handle. + A reference to a , representing the created depth-stencil surface resource. + HRESULT IDirect3DDevice9Ex::CreateDepthStencilSurfaceEx([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Discard,[Out, Fast] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle,[In] unsigned int Usage) + + + + Create an off-screen surface. + + The device. + The width. + The height. + The format. + The pool. + A created. + HRESULT IDirect3DDevice9::CreateOffscreenPlainSurface([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle) + + + + Create an off-screen surface. + + The device. + The width. + The height. + The format. + The pool. + The shared handle. + A created. + HRESULT IDirect3DDevice9::CreateOffscreenPlainSurface([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle) + + + + Create an off-screen surface. + + The device. + The width. + The height. + The format. + The pool. + The usage. + + A created. + + HRESULT IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle,[In] unsigned int Usage) + + + + Create an off-screen surface. + + The device. + The width. + The height. + The format. + The pool. + The usage. + The shared handle. + + A created. + + HRESULT IDirect3DDevice9Ex::CreateOffscreenPlainSurfaceEx([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle,[In] unsigned int Usage) + + + + Creates a render-target surface. + + The device. + The width. + The height. + The format. + Type of the multisample. + The multisample quality. + if set to true [lockable]. + + A render-target . + + HRESULT IDirect3DDevice9::CreateRenderTarget([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Lockable,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle) + + + + Creates a render-target surface. + + The device. + The width. + The height. + The format. + Type of the multisample. + The multisample quality. + if set to true [lockable]. + The shared handle. + + A render-target . + + HRESULT IDirect3DDevice9::CreateRenderTarget([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Lockable,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle) + + + + Creates a render-target surface. + + The device. + The width. + The height. + The format. + Type of the multisample. + The multisample quality. + if set to true [lockable]. + The usage. + A render-target . + HRESULT IDirect3DDevice9Ex::CreateRenderTargetEx([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Lockable,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle,[In] unsigned int Usage) + + + + Creates a render-target surface. + + The device. + The width. + The height. + The format. + Type of the multisample. + The multisample quality. + if set to true [lockable]. + The usage. + The shared handle. + A render-target . + HRESULT IDirect3DDevice9Ex::CreateRenderTargetEx([In] unsigned int Width,[In] unsigned int Height,[In] D3DFORMAT Format,[In] D3DMULTISAMPLE_TYPE MultiSample,[In] unsigned int MultisampleQuality,[In] BOOL Lockable,[Out] IDirect3DSurface9** ppSurface,[In] void** pSharedHandle,[In] unsigned int Usage) + + + + Loads a surface from a file. + + The surface. + Name of the file. + The filter. + The color key. + A object describing the result of the operation. + HRESULT D3DXLoadSurfaceFromFileW([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const wchar_t* pSrcFile,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file. + + The surface. + Name of the file. + The filter. + The color key. + The source rectangle. + The destination rectangle. + A object describing the result of the operation. + HRESULT D3DXLoadSurfaceFromFileW([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const wchar_t* pSrcFile,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file. + + The surface. + Name of the file. + The filter. + The color key. + The source rectangle. + The destination rectangle. + The image information. + A object describing the result of the operation. + HRESULT D3DXLoadSurfaceFromFileW([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const wchar_t* pSrcFile,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file. + + The surface. + Name of the file. + The filter. + The color key. + The source rectangle. + The destination rectangle. + The palette. + The image information. + A object describing the result of the operation. + HRESULT D3DXLoadSurfaceFromFileW([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const wchar_t* pSrcFile,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file in memory. + + The surface. + The memory. + The filter. + The color key. + A object describing the result of the operation. + HRESULT D3DXLoadSurfaceFromFileInMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file in memory. + + The surface. + The memory. + The filter. + The color key. + The source rectangle. + The destination rectangle. + A object describing the result of the operation. + HRESULT D3DXLoadSurfaceFromFileInMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file in memory. + + The surface. + The memory. + The filter. + The color key. + The source rectangle. + The destination rectangle. + The image information. + A object describing the result of the operation. + HRESULT D3DXLoadSurfaceFromFileInMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file in memory. + + The surface. + The memory. + The filter. + The color key. + The source rectangle. + The destination rectangle. + The palette. + The image information. + A object describing the result of the operation. + HRESULT D3DXLoadSurfaceFromFileInMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file in memory. + + The surface. + The stream. + The filter. + The color key. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromFileInMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file in memory. + + The surface. + The stream. + The filter. + The color key. + The source rectangle. + The destination rectangle. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromFileInMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file in memory. + + The surface. + The stream. + The filter. + The color key. + The source rectangle. + The destination rectangle. + The image information. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromFileInMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file in memory. + + The surface. + The stream. + The filter. + The color key. + The source rectangle. + The destination rectangle. + The palette. + The image information. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromFileInMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from a file in memory. + + The surface. + The stream. + The filter. + The color key. + The source rectangle. + The destination rectangle. + The palette. + The image information. + A object describing the result of the operation. + HRESULT D3DXLoadSurfaceFromFileInMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a surface from memory. + + The surface. + The data. + The filter. + The color key. + The source format. + The source pitch. + The source rectangle. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcPitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a surface from memory. + + The surface. + The data. + The filter. + The color key. + The source format. + The source pitch. + The source rectangle. + The destination rectangle. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcPitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a surface from memory. + + The surface. + The data. + The filter. + The color key. + The source format. + The source pitch. + The source rectangle. + The source palette. + The destination palette. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcPitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a surface from memory. + + The surface. + The data. + The filter. + The color key. + The source format. + The source pitch. + The source rectangle. + The destination rectangle. + The source palette. + The destination palette. + A object describing the result of the operation. + HRESULT D3DXLoadSurfaceFromMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcPitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a surface from memory. + + The surface. + The stream. + The filter. + The color key. + The source format. + The source pitch. + The source rectangle. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcPitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a surface from memory. + + The surface. + The stream. + The filter. + The color key. + The source format. + The source pitch. + The source rectangle. + The destination rectangle. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcPitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a surface from memory. + + The surface. + The stream. + The filter. + The color key. + The source format. + The source pitch. + The source rectangle. + The source palette. + The destination palette. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcPitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a surface from memory. + + The surface. + The stream. + The filter. + The color key. + The source format. + The source pitch. + The source rectangle. + The destination rectangle. + The source palette. + The destination palette. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromMemory([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcPitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a surface from a source surface. + + The destination surface. + The source surface. + The filter. + The color key. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromSurface([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a surface from a source surface. + + The destination surface. + The source surface. + The filter. + The color key. + The source rectangle. + The destination rectangle. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromSurface([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a surface from a source surface. + + The destination surface. + The source surface. + The filter. + The color key. + The source rectangle. + The destination rectangle. + The destination palette. + The source palette. + + A object describing the result of the operation. + + HRESULT D3DXLoadSurfaceFromSurface([In] IDirect3DSurface9* pDestSurface,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestRect,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Gets the parent cube texture or texture (mipmap) object, if this surface is a child level of a cube texture or a mipmap. + This method can also provide access to the parent swap chain if the surface is a back-buffer child. + + + The GUID. + The parent container texture. + + + + Locks a rectangle on a surface. + + The type of lock to perform. + A pointer to the locked region + HRESULT IDirect3DSurface9::LockRect([Out] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Locks a rectangle on a surface. + + The rectangle to lock. + The type of lock to perform. + A pointer to the locked region + HRESULT IDirect3DSurface9::LockRect([Out] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Locks a rectangle on a surface. + + The type of lock to perform. + The stream pointing to the locked region. + A pointer to the locked region + HRESULT IDirect3DSurface9::LockRect([Out] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Locks a rectangle on a surface. + + The rectangle to lock. + The type of lock to perform. + The stream pointing to the locked region. + A pointer to the locked region + HRESULT IDirect3DSurface9::LockRect([Out] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Saves a surface to a file. + + The surface. + Name of the file. + The format. + + A object describing the result of the operation. + + HRESULT D3DXSaveSurfaceToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect) + + + + Saves a surface to a file. + + The surface. + Name of the file. + The format. + The rectangle. + + A object describing the result of the operation. + + HRESULT D3DXSaveSurfaceToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect) + + + + Saves a surface to a file. + + The surface. + Name of the file. + The format. + The rectangle. + The palette. + + A object describing the result of the operation. + + HRESULT D3DXSaveSurfaceToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect) + + + + Saves a surface to a stream. + + The surface. + The format. + + A object describing the result of the operation. + + HRESULT D3DXSaveSurfaceToFileInMemory([In] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect) + + + + Saves a surface to a stream. + + The surface. + The format. + The rectangle. + + A object describing the result of the operation. + + HRESULT D3DXSaveSurfaceToFileInMemory([In] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect) + + + + Saves a surface to a stream. + + The surface. + The format. + The rectangle. + The palette. + + A object describing the result of the operation. + + HRESULT D3DXSaveSurfaceToFileInMemory([In] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DSurface9* pSrcSurface,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcRect) + + + +

    Presents the contents of the next buffer in the sequence of back buffers owned by the swap chain.

    +
    + +

    The Present method is a shortcut to Present. Present has been updated to take a flag allowing the application to request that the method return immediately when the driver reports that it cannot schedule a presentation.

    If necessary, a stretch operation is applied to transfer the pixels within the source rectangle to the destination rectangle in the client area of the target window.

    Present will fail if called between BeginScene and EndScene pairs unless the render target is not the current render target (such as the back buffer you get from creating an additional swap chain). This is a new behavior for Direct3D 9.

    +
    + + bb205908 + IDirect3DSwapChain9 + IDirect3DSwapChain9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns information describing the raster of the monitor on which the swap chain is presented.

    +
    + + bb205907 + GetRasterStatus + GetRasterStatus + HRESULT IDirect3DSwapChain9::GetRasterStatus([Out] D3DRASTER_STATUS* pRasterStatus) +
    + + +

    Retrieves the display mode's spatial resolution, color resolution, and refresh frequency.

    +
    + + bb205904 + GetDisplayMode + GetDisplayMode + HRESULT IDirect3DSwapChain9::GetDisplayMode([Out] D3DDISPLAYMODE* pMode) +
    + + +

    Retrieves the device associated with the swap chain.

    +
    + +

    This method allows navigation to the owning device object.

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb205903 + GetDevice + GetDevice + HRESULT IDirect3DSwapChain9::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Retrieves the presentation parameters associated with a swap chain.

    +
    + +

    This method can be used to see the presentation parameters of the parent swap chain of a surface (a back buffer, for instance). The parent swap chain can be retrieved with .

    +
    + + bb205906 + GetPresentParameters + GetPresentParameters + HRESULT IDirect3DSwapChain9::GetPresentParameters([Out] D3DPRESENT_PARAMETERS* pPresentationParameters) +
    + + +

    Presents the contents of the next buffer in the sequence of back buffers owned by the swap chain.

    +
    +

    Pointer to the source rectangle (see ). Use null to present the entire surface. This value must be null unless the swap chain was created with . If the rectangle exceeds the source surface, the rectangle is clipped to the source surface.

    +

    Pointer to the destination rectangle in client coordinates (see ). This value must be null unless the swap chain was created with . Use null to fill the entire client area. If the rectangle exceeds the destination client area, the rectangle is clipped to the destination client area.

    +

    Destination window whose client area is taken as the target for this presentation. If this value is null, the runtime uses the hDeviceWindow member of for the presentation.

    +

    This value must be null unless the swap chain was created with . See Flipping Surfaces (Direct3D 9). If this value is non-null, the contained region is expressed in back buffer coordinates. The rectangles within the region are the minimal set of pixels that need to be updated. This method takes these rectangles into account when optimizing the presentation by copying only the pixels within the region, or some suitably expanded set of rectangles. This is an aid to optimization only, and the application should not rely on the region being copied exactly. The implementation may choose to copy the whole source rectangle.

    +

    Allows the application to request that the method return immediately when the driver reports that it cannot schedule a presentation. Valid values are 0, or any combination of or .

    • If dwFlags = 0, this method behaves as it did prior to Direct3D 9. Present will spin until the hardware is free, without returning an error.
    • If dwFlags = , and the hardware is busy processing or waiting for a vertical sync interval, the method will return .
    • If dwFlags = , gamma correction is performed from linear space to sRGB for windowed swap chains. This flag will take effect only when the driver exposes (see Gamma (Direct3D 9)). Appliations should specify this flag if the backbuffer format is 16-bit floating point in order to match windowed mode present to fullscreen gamma behavior.
    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , , , E_OUTOFMEMORY.

    + +

    The Present method is a shortcut to Present. Present has been updated to take a flag allowing the application to request that the method return immediately when the driver reports that it cannot schedule a presentation.

    If necessary, a stretch operation is applied to transfer the pixels within the source rectangle to the destination rectangle in the client area of the target window.

    Present will fail if called between BeginScene and EndScene pairs unless the render target is not the current render target (such as the back buffer you get from creating an additional swap chain). This is a new behavior for Direct3D 9.

    +
    + + bb205908 + HRESULT IDirect3DSwapChain9::Present([In, Optional] const void* pSourceRect,[InOut, Optional] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const RGNDATA* pDirtyRegion,[In] unsigned int dwFlags) + IDirect3DSwapChain9::Present +
    + + +

    Generates a copy of the swapchain's front buffer and places that copy in a system memory buffer provided by the application.

    +
    +

    Pointer to an interface that will receive a copy of the swapchain's front buffer. The data is returned in successive rows with no intervening space, starting from the vertically highest row to the lowest. For windowed mode, the size of the destination surface should be the size of the desktop. For full screen mode, the size of the destination surface should be the screen size.

    +

    If the method succeeds, the return value is . If BackBuffer exceeds or equals the total number of back buffers, the function fails and returns .

    + +

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb205905 + HRESULT IDirect3DSwapChain9::GetFrontBufferData([In] IDirect3DSurface9* pDestSurface) + IDirect3DSwapChain9::GetFrontBufferData +
    + + +

    Retrieves a back buffer from the swap chain of the device.

    +
    +

    Index of the back buffer object to return. Back buffers are numbered from 0 to the total number of back buffers - 1. A value of 0 returns the first back buffer, not the front buffer. The front buffer is not accessible through this method. Use to retrieve a copy of the front buffer.

    +

    Stereo view is not supported in Direct3D 9, so the only valid value for this parameter is .

    +

    Address of a reference to an interface, representing the returned back buffer surface.

    + +

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak. You must release any surfaces obtained through this method before releasing the swap chain it belongs to.

    +
    + + bb205902 + HRESULT IDirect3DSwapChain9::GetBackBuffer([In] unsigned int iBackBuffer,[In] D3DBACKBUFFER_TYPE Type,[Out] IDirect3DSurface9** ppBackBuffer) + IDirect3DSwapChain9::GetBackBuffer +
    + + +

    Returns information describing the raster of the monitor on which the swap chain is presented.

    +
    +

    Pointer to a structure filled with information about the position or other status of the raster on the monitor driven by this adapter.

    +

    If the method succeeds, the return value is . is returned if pRasterStatus is invalid or if the device does not support reading the current scan line. To determine if the device supports reading the scan line, check for the flag in the Caps member of .

    + + bb205907 + HRESULT IDirect3DSwapChain9::GetRasterStatus([Out] D3DRASTER_STATUS* pRasterStatus) + IDirect3DSwapChain9::GetRasterStatus +
    + + +

    Retrieves the display mode's spatial resolution, color resolution, and refresh frequency.

    +
    +

    Pointer to a structure containing data about the display mode of the adapter. As opposed to the display mode of the device, which may not be active if the device does not own full-screen mode.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205904 + HRESULT IDirect3DSwapChain9::GetDisplayMode([Out] D3DDISPLAYMODE* pMode) + IDirect3DSwapChain9::GetDisplayMode +
    + + +

    Retrieves the device associated with the swap chain.

    +
    +

    Address of a reference to an interface to fill with the device reference, if the query succeeds.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method allows navigation to the owning device object.

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb205903 + HRESULT IDirect3DSwapChain9::GetDevice([Out] IDirect3DDevice9** ppDevice) + IDirect3DSwapChain9::GetDevice +
    + + +

    Retrieves the presentation parameters associated with a swap chain.

    +
    +

    Pointer to the presentation parameters. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method can be used to see the presentation parameters of the parent swap chain of a surface (a back buffer, for instance). The parent swap chain can be retrieved with .

    +
    + + bb205906 + HRESULT IDirect3DSwapChain9::GetPresentParameters([Out] D3DPRESENT_PARAMETERS* pPresentationParameters) + IDirect3DSwapChain9::GetPresentParameters +
    + + + Initializes a new instance of the class. + + The device. + The present parameters. + HRESULT IDirect3DDevice9::CreateAdditionalSwapChain([In] D3DPRESENT_PARAMETERS* pPresentationParameters,[In] IDirect3DSwapChain9** pSwapChain) + + + + Retrieves a back buffer from the swap chain of the device. + + The i back buffer. + The back buffer from the swap chain of the device. + HRESULT IDirect3DSwapChain9::GetBackBuffer([In] unsigned int iBackBuffer,[In] D3DBACKBUFFER_TYPE Type,[Out] IDirect3DSurface9** ppBackBuffer) + + + + Presents the contents of the next buffer in the sequence of back buffers to the screen. + + The present flags. + HRESULT IDirect3DSwapChain9::Present([In, Optional] const void* pSourceRect,[InOut, Optional] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const RGNDATA* pDirtyRegion,[In] unsigned int dwFlags) + + + + Presents the contents of the next buffer in the sequence of back buffers to the screen. + + The present flags. + The area of the back buffer that should be presented. + The area of the front buffer that should receive the result of the presentation. + HRESULT IDirect3DSwapChain9::Present([In, Optional] const void* pSourceRect,[InOut, Optional] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const RGNDATA* pDirtyRegion,[In] unsigned int dwFlags) + + + + Presents the contents of the next buffer in the sequence of back buffers to the screen. + + The present flags. + The area of the back buffer that should be presented. + The area of the front buffer that should receive the result of the presentation. + The destination window whose client area is taken as the target for this presentation. + HRESULT IDirect3DSwapChain9::Present([In, Optional] const void* pSourceRect,[InOut, Optional] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const RGNDATA* pDirtyRegion,[In] unsigned int dwFlags) + + + + Presents the contents of the next buffer in the sequence of back buffers to the screen. + + The flags. + The area of the back buffer that should be presented. + The area of the front buffer that should receive the result of the presentation. + The destination window whose client area is taken as the target for this presentation. + Specifies a region on the back buffer that contains the minimal amount of pixels that need to be updated. + HRESULT IDirect3DSwapChain9::Present([In, Optional] const void* pSourceRect,[InOut, Optional] const void* pDestRect,[In] HWND hDestWindowOverride,[In] const RGNDATA* pDirtyRegion,[In] unsigned int dwFlags) + + + +

    Applications use the methods of the interface to manipulate a swap chain.

    +
    + +

    There is always at least one swap chain for each device, known as the implicit swap chain. However, an additional swap chain for rendering multiple views from the same device can be created by calling the CreateAdditionalSwapChain method.

    This interface, like all COM interfaces, inherits from the interface.

    The LPDIRECT3DSWAPCHAIN9 and PDIRECT3DSWAPCHAIN9 types are defined as references to the interface.

    objects are returned as a reference to an object when GetSwapChain is called on an instance of . + The interface is obtained by calling QueryInterface on the instance of that was returned by GetSwapChain.

    +
    + + bb172503 + IDirect3DSwapChain9Ex + IDirect3DSwapChain9Ex +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Returns the number of times the swapchain has been processed.

    +
    + + bb205900 + GetLastPresentCount + GetLastPresentCount + HRESULT IDirect3DSwapChain9Ex::GetLastPresentCount([Out] unsigned int* pLastPresentCount) +
    + + + No documentation. + + + GetPresentStats + GetPresentStats + HRESULT IDirect3DSwapChain9Ex::GetPresentStats([Out] D3DPRESENTSTATS* pPresentationStatistics) + + + +

    Returns the number of times the swapchain has been processed.

    +
    +

    Pointer to a UINT to be filled with the number of times the method has been called. The count will also be incremented by calling some other APIs such as .

    +

    the method was successful.

    + + bb205900 + HRESULT IDirect3DSwapChain9Ex::GetLastPresentCount([Out] unsigned int* pLastPresentCount) + IDirect3DSwapChain9Ex::GetLastPresentCount +
    + + + No documentation. + + No documentation. + No documentation. + + HRESULT IDirect3DSwapChain9Ex::GetPresentStats([Out] D3DPRESENTSTATS* pPresentationStatistics) + IDirect3DSwapChain9Ex::GetPresentStats + + + +

    Retrieves the display mode's spatial resolution, color resolution, refresh frequency, and rotation settings.

    +
    +

    Pointer to a structure containing data about the display mode of the adapter. As opposed to the display mode of the device, which may not be active if the device does not own full-screen mode.

    +

    Pointer to a indicating the type of screen rotation the application will do. The value returned through this reference is important when the flag is used; otherwise, it can be set to null.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb509715 + HRESULT IDirect3DSwapChain9Ex::GetDisplayModeEx([Out] D3DDISPLAYMODEEX* pMode,[Out] D3DDISPLAYROTATION* pRotation) + IDirect3DSwapChain9Ex::GetDisplayModeEx +
    + + +

    Applications use the methods of the interface to manipulate a texture resource.

    +
    + +

    The interface can be obtained by calling the method or one of the xxx functions.

    This interface inherits additional functionality from the interface.

    This interface, like all COM interfaces, inherits from the interface.

    The LPDIRECT3DTEXTURE9 and PDIRECT3DTEXTURE9 types are defined as references to the interface.

     typedef struct  *LPDIRECT3DTEXTURE9, *PDIRECT3DTEXTURE9;	
    +            
    +
    + + bb205909 + IDirect3DTexture9 + IDirect3DTexture9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a level description of a texture resource.

    +
    +

    Identifies a level of the texture resource. This method returns a surface description for the level specified by this parameter.

    +

    Pointer to a structure, describing the returned level.

    + + bb205911 + HRESULT IDirect3DTexture9::GetLevelDesc([In] unsigned int Level,[Out] D3DSURFACE_DESC* pDesc) + IDirect3DTexture9::GetLevelDesc +
    + + +

    Retrieves the specified texture surface level.

    +
    +

    Identifies a level of the texture resource. This method returns a surface for the level specified by this parameter. The top-level surface is denoted by 0.

    +

    Address of a reference to an interface, representing the returned surface.

    + +

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb205912 + HRESULT IDirect3DTexture9::GetSurfaceLevel([In] unsigned int Level,[Out] IDirect3DSurface9** ppSurfaceLevel) + IDirect3DTexture9::GetSurfaceLevel +
    + + +

    Locks a rectangle on a texture resource.

    +
    +

    Specifies the level of the texture resource to lock.

    +

    Pointer to a structure, describing the locked region.

    +

    Pointer to a rectangle to lock. Specified by a reference to a structure. Specifying null for this parameter expands the dirty region to cover the entire texture.

    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    You may not specify a subrect when using . For a description of the flags, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    Textures created with are not lockable. Textures created in video memory are lockable when created with USAGE_DYNAMIC.

    For performance reasons, dirty regions are recorded only for level zero of a texture. Dirty regions are automatically recorded when is called without or . See for more information.

    The only lockable format for a depth-stencil texture is D3DLOCK_D16_LOCKABLE.

    Video memory textures cannot be locked, but must be modified by calling or . There are exceptions for some proprietary driver pixel formats that Direct3D 9 does not recognize. These can be locked.

    This method cannot retrieve data from a texture resource created with because such a texture must be assigned to memory and is therefore not lockable. In this case, use instead to copy texture data from device memory to system memory.

    +
    + + bb205913 + HRESULT IDirect3DTexture9::LockRect([In] unsigned int Level,[Out] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + IDirect3DTexture9::LockRect +
    + + +

    Unlocks a rectangle on a texture resource.

    +
    +

    Specifies the level of the texture resource to unlock.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205914 + HRESULT IDirect3DTexture9::UnlockRect([In] unsigned int Level) + IDirect3DTexture9::UnlockRect +
    + + +

    Adds a dirty region to a texture resource.

    +
    +

    Pointer to a structure, specifying the dirty region to add. Specifying null expands the dirty region to cover the entire texture.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    For performance reasons, dirty regions are only recorded for level zero of a texture. For sublevels, it is assumed that the corresponding (scaled) rectangle or box is also dirty. Dirty regions are automatically recorded when is called without or . The destination surface of is also marked dirty automatically.

    Using and explicitly specifying dirty regions can be used to increase the efficiency of . Using this method, applications can optimize what subset of a resource is copied by specifying dirty regions on the resource. However, the dirty regions may be expanded to optimize alignment.

    +
    + + bb205910 + HRESULT IDirect3DTexture9::AddDirtyRect([In] const void* pDirtyRect) + IDirect3DTexture9::AddDirtyRect +
    + + + Initializes a new instance of the class. + + The device. + The width. + The height. + The level count. + The usage. + The format. + The pool. + HRESULT IDirect3DDevice9::CreateTexture([In] unsigned int Width,[In] unsigned int Height,[In] unsigned int Levels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DTexture9** ppTexture,[In] void** pSharedHandle) + + + + Initializes a new instance of the class. + + The device. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The shared handle. + HRESULT IDirect3DDevice9::CreateTexture([In] unsigned int Width,[In] unsigned int Height,[In] unsigned int Levels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DTexture9** ppTexture,[In] void** pSharedHandle) + + + + Checks texture-creation parameters. + + Device associated with the texture. + The width. + The height. + Requested number of mipmap levels for the texture. + The requested usage for the texture. + Requested format for the texture. + Memory class where the resource will be placed. + + A value type containing the proposed values to pass to the texture creation functions. + + HRESULT D3DXCheckTextureRequirements([In] IDirect3DDevice9* pDevice,[InOut] unsigned int* pWidth,[InOut] unsigned int* pHeight,[InOut] unsigned int* pNumMipLevels,[In] unsigned int Usage,[InOut] D3DFORMAT* pFormat,[In] D3DPOOL Pool) + + + + Computes the normal map. + + The texture. + The source texture. + The flags. + The channel. + The amplitude. + A object describing the result of the operation. + HRESULT D3DXComputeNormalMap([In] IDirect3DTexture9* pTexture,[In] IDirect3DTexture9* pSrcTexture,[Out, Buffer] const PALETTEENTRY* pSrcPalette,[In] unsigned int Flags,[In] unsigned int Channel,[In] float Amplitude) + + + + Computes the normal map. + + The texture. + The source texture. + The palette. + The flags. + The channel. + The amplitude. + A object describing the result of the operation. + HRESULT D3DXComputeNormalMap([In] IDirect3DTexture9* pTexture,[In] IDirect3DTexture9* pSrcTexture,[Out, Buffer] const PALETTEENTRY* pSrcPalette,[In] unsigned int Flags,[In] unsigned int Channel,[In] float Amplitude) + + + + Uses a user-provided function to fill each texel of each mip level of a given texture. + + A function that is used to fill the texture. + A object describing the result of the operation. + HRESULT D3DXFillTexture([In] IDirect3DTexture9* pTexture,[In] __function__stdcall* pFunction,[In] void* pData) + + + + Uses a compiled high-level shader language (HLSL) function to fill each texel of each mipmap level of a texture. + + A texture shader object that is used to fill the texture. + A object describing the result of the operation. + HRESULT D3DXFillTextureTX([In] IDirect3DTexture9* pTexture,[In] ID3DXTextureShader* pTextureShader) + + + + Locks a rectangle on a texture resource. + + The level. + The flags. + + A describing the region locked. + + HRESULT IDirect3DTexture9::LockRect([In] unsigned int Level,[Out] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Locks a rectangle on a texture resource. + + The level. + The flags. + The stream pointing to the locked region. + + A describing the region locked. + + HRESULT IDirect3DTexture9::LockRect([In] unsigned int Level,[Out] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Locks a rectangle on a texture resource. + + The level. + The rectangle. + The flags. + + A describing the region locked. + + HRESULT IDirect3DTexture9::LockRect([In] D3DCUBEMAP_FACES FaceType,[In] unsigned int Level,[In] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Locks a rectangle on a texture resource. + + The level. + The rectangle. + The flags. + The stream pointing to the locked region. + + A describing the region locked. + + HRESULT IDirect3DTexture9::LockRect([In] D3DCUBEMAP_FACES FaceType,[In] unsigned int Level,[In] D3DLOCKED_RECT* pLockedRect,[In] const void* pRect,[In] D3DLOCK Flags) + + + + Adds a dirty region to a texture resource. + + + A object describing the result of the operation. + + HRESULT IDirect3DTexture9::AddDirtyRect([In] const void* pDirtyRect) + + + + Adds a dirty region to a texture resource. + + The dirty rect ref. + + A object describing the result of the operation. + + HRESULT IDirect3DTexture9::AddDirtyRect([In] const void* pDirtyRect) + + + + Creates a from a file + + The device. + The filename. + + A + + HRESULT D3DXCreateTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a file + + The device. + The filename. + The usage. + The pool. + + A + + HRESULT D3DXCreateTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a file + + The device. + The filename. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a file + + The device. + The filename. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + + A + + HRESULT D3DXCreateTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a file + + The device. + The filename. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + + A + + HRESULT D3DXCreateTextureFromFileInMemory([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The usage. + The pool. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a stream. + + The device. + The stream. + A + HRESULT D3DXCreateTextureFromFileInMemory([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a stream. + + The device. + The stream. + The usage. + The pool. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a stream. + + The device. + The stream. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The width. + The height + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a stream. + + The device. + The buffer. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The width. + The height + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + A + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a stream. + + The device. + The pointer. + The size in bytes. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + + Creates a from a stream. + + The device. + Name of the file. + The width. + The height. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DTexture9** ppTexture) + + + +

    The interface.

    +
    + +

    The interface is obtained by calling the function.

    The interface, like all COM interfaces, inherits the interface.

    The LPD3DXTEXTURESHADER type is defined as a reference to the interface.

     typedef interface  *LPD3DXTEXTURESHADER;	
    +            
    +
    + + bb174276 + ID3DXTextureShader + ID3DXTextureShader +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets a reference to the function DWORD stream.

    +
    + + bb174283 + GetFunction + GetFunction + HRESULT ID3DXTextureShader::GetFunction([Out] ID3DXBuffer** ppFunction) +
    + + +

    Get a reference to the constant table.

    +
    + + bb174278 + GetConstantBuffer + GetConstantBuffer + HRESULT ID3DXTextureShader::GetConstantBuffer([Out] ID3DXBuffer** ppConstantBuffer) +
    + + +

    Gets a description of the constant table.

    +
    + + bb174282 + GetDesc + GetDesc + HRESULT ID3DXTextureShader::GetDesc([Out] D3DXCONSTANTTABLE_DESC* pDesc) +
    + + +

    Gets a reference to the function DWORD stream.

    +
    +

    A reference to the function DWORD stream. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174283 + HRESULT ID3DXTextureShader::GetFunction([Out] ID3DXBuffer** ppFunction) + ID3DXTextureShader::GetFunction +
    + + +

    Get a reference to the constant table.

    +
    +

    Pointer to an interface, which contains the constants.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174278 + HRESULT ID3DXTextureShader::GetConstantBuffer([Out] ID3DXBuffer** ppConstantBuffer) + ID3DXTextureShader::GetConstantBuffer +
    + + +

    Gets a description of the constant table.

    +
    +

    The attributes of the constant table. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + + bb174282 + HRESULT ID3DXTextureShader::GetDesc([Out] D3DXCONSTANTTABLE_DESC* pDesc) + ID3DXTextureShader::GetDesc +
    + + +

    Gets a reference to the array of constants in the constant table.

    +
    +

    Unique identifier to a constant. See .

    +

    Returns a reference to an array of descriptions. See .

    +

    The input supplied must be the maximum size of the array. The output is the number of elements that are filled in the array when the function returns.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , D3DXERR_INVALIDDATA.

    + +

    Samplers can appear more than once in a constant table, therefore, this method can return an array of descriptions each with a different register index.

    +
    + + bb174280 + HRESULT ID3DXTextureShader::GetConstantDesc([In] D3DXHANDLE hConstant,[Out, Buffer] D3DXCONSTANT_DESC* pConstantDesc,[InOut] unsigned int* pCount) + ID3DXTextureShader::GetConstantDesc +
    + + +

    Gets a constant by looking up its index.

    +
    +

    A handle to the parent data structure. If the constant is a top-level parameter (there is no parent data structure), use null.

    +

    Zero-based index of the constant.

    +

    Returns a unique identifier to the constant.

    + +

    To get a constant from an array of constants, use .

    +
    + + bb174277 + D3DXHANDLE ID3DXTextureShader::GetConstant([In] D3DXHANDLE hConstant,[In] unsigned int Index) + ID3DXTextureShader::GetConstant +
    + + +

    Gets a constant by looking up its name.

    +
    +

    A handle to the parent data structure. If the constant is a top-level parameter (there is no parent data structure), use null.

    +

    A string containing the name of the constant.

    +

    Returns a unique identifier to the constant.

    + + bb174279 + D3DXHANDLE ID3DXTextureShader::GetConstantByName([In] D3DXHANDLE hConstant,[In] const char* pName) + ID3DXTextureShader::GetConstantByName +
    + + +

    Get a constant from the constant table.

    +
    +

    A handle to the array of constants. This value may not be null.

    +

    Zero-based index of the element in the constant table.

    +

    Returns a unique identifier to the constant.

    + +

    To get a constant that is not part of an array, use or .

    +
    + + bb174281 + D3DXHANDLE ID3DXTextureShader::GetConstantElement([In] D3DXHANDLE hConstant,[In] unsigned int Index) + ID3DXTextureShader::GetConstantElement +
    + + +

    Sets the constants to the default values declared in the shader.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174286 + HRESULT ID3DXTextureShader::SetDefaults() + ID3DXTextureShader::SetDefaults +
    + + +

    Sets the constant table with the data in the buffer.

    +
    +

    Unique identifier to a constant. See .

    +

    A reference to a buffer containing the constant data.

    +

    Size of the buffer, in bytes.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174297 + HRESULT ID3DXTextureShader::SetValue([In] D3DXHANDLE hConstant,[In] const void* pData,[In] unsigned int Bytes) + ID3DXTextureShader::SetValue +
    + + +

    Sets a value.

    +
    +

    Unique identifier to the constant. See .

    +

    value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174284 + HRESULT ID3DXTextureShader::SetBool([In] D3DXHANDLE hConstant,[In] BOOL b) + ID3DXTextureShader::SetBool +
    + + +

    Sets an array of values.

    +
    +

    Unique identifier to the array of constants. See .

    +

    Array of values.

    +

    Number of values in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174285 + HRESULT ID3DXTextureShader::SetBoolArray([In] D3DXHANDLE hConstant,[In] const BOOL* pb,[In] unsigned int Count) + ID3DXTextureShader::SetBoolArray +
    + + +

    Sets an integer value.

    +
    +

    Unique identifier to the constant. See .

    +

    Integer value.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174289 + HRESULT ID3DXTextureShader::SetInt([In] D3DXHANDLE hConstant,[In] int n) + ID3DXTextureShader::SetInt +
    + + +

    Sets an array of integers.

    +
    +

    Unique identifier to the array of constants. See .

    +

    Array of integers.

    +

    Number of integers in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174290 + HRESULT ID3DXTextureShader::SetIntArray([In] D3DXHANDLE hConstant,[In] const int* pn,[In] unsigned int Count) + ID3DXTextureShader::SetIntArray +
    + + +

    Sets a floating-point number.

    +
    +

    Unique identifier to the constant. See .

    +

    Floating-point number.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174287 + HRESULT ID3DXTextureShader::SetFloat([In] D3DXHANDLE hConstant,[In] float f) + ID3DXTextureShader::SetFloat +
    + + +

    Sets an array of floating-point numbers.

    +
    +

    Unique identifier to the array of constants. See .

    +

    Array of floating-point numbers.

    +

    Number of floating-point values in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174288 + HRESULT ID3DXTextureShader::SetFloatArray([In] D3DXHANDLE hConstant,[In] const float* pf,[In] unsigned int Count) + ID3DXTextureShader::SetFloatArray +
    + + +

    Sets a 4D vector.

    +
    +

    Unique identifier to the vector constant. See .

    +

    Pointer to a 4D vector. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174298 + HRESULT ID3DXTextureShader::SetVector([In] D3DXHANDLE hConstant,[In] const D3DXVECTOR4* pVector) + ID3DXTextureShader::SetVector +
    + + +

    Sets an array of 4D vectors.

    +
    +

    Unique identifier to the array of vector constants. See .

    +

    Array of 4D vectors. See .

    +

    Number of vectors in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb174299 + HRESULT ID3DXTextureShader::SetVectorArray([In] D3DXHANDLE hConstant,[In] const D3DXVECTOR4* pVector,[In] unsigned int Count) + ID3DXTextureShader::SetVectorArray +
    + + +

    Sets a non-transposed matrix.

    +
    +

    Unique identifier to the matrix of constants. See .

    +

    Pointer to a non-transposed matrix. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A non-transposed matrix contains row-major data; that is, each vector is contained in a row.

    +
    + + bb174291 + HRESULT ID3DXTextureShader::SetMatrix([In] D3DXHANDLE hConstant,[In] const D3DXMATRIX* pMatrix) + ID3DXTextureShader::SetMatrix +
    + + +

    Sets an array of non-transposed matrices.

    +
    +

    Unique identifier to the array of constant matrices. See .

    +

    Array of non-transposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A non-transposed matrix contains row-major data; that is, each vector is contained in a row.

    +
    + + bb174292 + HRESULT ID3DXTextureShader::SetMatrixArray([In] D3DXHANDLE hConstant,[In] const D3DXMATRIX* pMatrix,[In] unsigned int Count) + ID3DXTextureShader::SetMatrixArray +
    + + +

    Sets an array of references to non-transposed matrices.

    +
    +

    Unique identifier to an array of constant matrices. See .

    +

    Array of references to non-transposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A non-transposed matrix contains row-major data; that is, each vector is contained in a row.

    +
    + + bb174293 + HRESULT ID3DXTextureShader::SetMatrixPointerArray([In] D3DXHANDLE hConstant,[In] const D3DXMATRIX** ppMatrix,[In] unsigned int Count) + ID3DXTextureShader::SetMatrixPointerArray +
    + + +

    Sets a transposed matrix.

    +
    +

    Unique identifier to the matrix of constants. See .

    +

    Pointer to a transposed matrix. See .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A transposed matrix contains column-major data; that is, each vector is contained in a column.

    +
    + + bb174294 + HRESULT ID3DXTextureShader::SetMatrixTranspose([In] D3DXHANDLE hConstant,[In] const D3DXMATRIX* pMatrix) + ID3DXTextureShader::SetMatrixTranspose +
    + + +

    Sets an array of transposed matrices.

    +
    +

    Unique identifier to the array of matrix constants. See .

    +

    Array of transposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A transposed matrix contains column-major data; that is, each vector is contained in a column.

    +
    + + bb174295 + HRESULT ID3DXTextureShader::SetMatrixTransposeArray([In] D3DXHANDLE hConstant,[In] const D3DXMATRIX* pMatrix,[In] unsigned int Count) + ID3DXTextureShader::SetMatrixTransposeArray +
    + + +

    Sets an array of references to transposed matrices.

    +
    +

    Unique identifier to the array of matrix constants. See .

    +

    Array of references to transposed matrices. See .

    +

    Number of matrices in the array.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    A transposed matrix contains column-major data; that is, each vector is contained in a column.

    +
    + + bb174296 + HRESULT ID3DXTextureShader::SetMatrixTransposePointerArray([In] D3DXHANDLE hConstant,[In] const D3DXMATRIX** ppMatrix,[In] unsigned int Count) + ID3DXTextureShader::SetMatrixTransposePointerArray +
    + + +

    Applications use the methods of the interface to manipulate vertex buffer resources.

    +
    + +

    The interface is obtained by calling the method.

    This interface inherits additional functionality from the interface.

    This interface, like all COM interfaces, inherits from the interface.

    The LPDIRECT3DVERTEXBUFFER9 and PDIRECT3DVERTEXBUFFER9 types are defined as references to the interface.

     typedef struct  *LPDIRECT3DVERTEXBUFFER9, *PDIRECT3DVERTEXBUFFER9;	
    +            
    +
    + + bb205915 + IDirect3DVertexBuffer9 + IDirect3DVertexBuffer9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a description of the vertex buffer resource.

    +
    + + bb205916 + GetDesc + GetDesc + HRESULT IDirect3DVertexBuffer9::GetDesc([Out] D3DVERTEXBUFFER_DESC* pDesc) +
    + + +

    Locks a range of vertex data and obtains a reference to the vertex buffer memory.

    +
    +

    Offset into the vertex data to lock, in bytes. To lock the entire vertex buffer, specify 0 for both parameters, SizeToLock and OffsetToLock.

    +

    Size of the vertex data to lock, in bytes. To lock the entire vertex buffer, specify 0 for both parameters, SizeToLock and OffsetToLock.

    +

    VOID* reference to a memory buffer containing the returned vertex data.

    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    For a description of the flags, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    As a general rule, do not hold a lock across more than one frame. When working with vertex buffers, you are allowed to make multiple lock calls; however, you must ensure that the number of lock calls match the number of unlock calls. DrawPrimitive calls will not succeed with any outstanding lock count on any currently set vertex buffer.

    The and flags are valid only on buffers created with .

    For information about using or with , see Using Dynamic Vertex and Index Buffers.

    +
    + + bb205917 + HRESULT IDirect3DVertexBuffer9::Lock([In] unsigned int OffsetToLock,[In] unsigned int SizeToLock,[Out] void** ppbData,[In] D3DLOCK Flags) + IDirect3DVertexBuffer9::Lock +
    + + +

    Unlocks vertex data.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205918 + HRESULT IDirect3DVertexBuffer9::Unlock() + IDirect3DVertexBuffer9::Unlock +
    + + +

    Retrieves a description of the vertex buffer resource.

    +
    +

    Pointer to a structure, describing the returned vertex buffer.

    +

    If the method succeeds, the return value is . is returned if the argument is invalid.

    + + bb205916 + HRESULT IDirect3DVertexBuffer9::GetDesc([Out] D3DVERTEXBUFFER_DESC* pDesc) + IDirect3DVertexBuffer9::GetDesc +
    + + + Initializes a new instance of the class. + + The device that will be used to create the buffer. + Size of the buffer, in bytes. + The requested usage of the buffer. + The vertex format of the vertices in the buffer. If set to .None, the buffer will be a non-FVF buffer. + The memory class into which the resource will be placed. + bb174364 + HRESULT IDirect3DDevice9::CreateVertexBuffer([In] unsigned int Length,[In] D3DUSAGE Usage,[In] D3DFVF FVF,[In] D3DPOOL Pool,[Out, Fast] IDirect3DVertexBuffer9** ppVertexBuffer,[In] void** pSharedHandle) + IDirect3DDevice9::CreateVertexBuffer + + + + Initializes a new instance of the class. + + The device that will be used to create the buffer. + Size of the buffer, in bytes. + The requested usage of the buffer. + The vertex format of the vertices in the buffer. If set to .None, the buffer will be a non-FVF buffer. + The memory class into which the resource will be placed. + The variable that will receive the shared handle for this resource. + This method is only available in Direct3D9 Ex. + bb174364 + HRESULT IDirect3DDevice9::CreateVertexBuffer([In] unsigned int Length,[In] D3DUSAGE Usage,[In] D3DFVF FVF,[In] D3DPOOL Pool,[Out, Fast] IDirect3DVertexBuffer9** ppVertexBuffer,[In] void** pSharedHandle) + IDirect3DDevice9::CreateVertexBuffer + + + + Locks a range of vertex data and obtains a pointer to the vertex buffer memory. + + + As a general rule, do not hold a lock across more than one frame. When working with vertex buffers, you are allowed to make multiple lock calls; however, you must ensure that the number of lock calls match the number of unlock calls. DrawPrimitive calls will not succeed with any outstanding lock count on any currently set vertex buffer. The D3DLOCK_DISCARD and D3DLOCK_NOOVERWRITE flags are valid only on buffers created with D3DUSAGE_DYNAMIC. For information about using D3DLOCK_DISCARD or D3DLOCK_NOOVERWRITE with IDirect3DVertexBuffer9::Lock, see {{Using Dynamic Vertex and Index Buffers}}. + + Offset into the vertex data to lock, in bytes. To lock the entire vertex buffer, specify 0 for both parameters, SizeToLock and OffsetToLock. + Size of the vertex data to lock, in bytes. To lock the entire vertex buffer, specify 0 for both parameters, SizeToLock and OffsetToLock. + Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are: D3DLOCK_DISCARD D3DLOCK_NO_DIRTY_UPDATE D3DLOCK_NOSYSLOCK D3DLOCK_READONLY D3DLOCK_NOOVERWRITE For a description of the flags, see . + A if the method succeeds. + bb205917 + HRESULT IDirect3DVertexBuffer9::Lock([In] unsigned int OffsetToLock,[In] unsigned int SizeToLock,[Out] void** ppbData,[In] D3DLOCK Flags) + IDirect3DVertexBuffer9::Lock + + + + Locks a range of vertex data and obtains a pointer to the vertex buffer memory. + + + As a general rule, do not hold a lock across more than one frame. When working with vertex buffers, you are allowed to make multiple lock calls; however, you must ensure that the number of lock calls match the number of unlock calls. DrawPrimitive calls will not succeed with any outstanding lock count on any currently set vertex buffer. The D3DLOCK_DISCARD and D3DLOCK_NOOVERWRITE flags are valid only on buffers created with D3DUSAGE_DYNAMIC. For information about using D3DLOCK_DISCARD or D3DLOCK_NOOVERWRITE with IDirect3DVertexBuffer9::Lock, see {{Using Dynamic Vertex and Index Buffers}}. + + Offset into the vertex data to lock, in bytes. To lock the entire vertex buffer, specify 0 for both parameters, SizeToLock and OffsetToLock. + Size of the vertex data to lock, in bytes. To lock the entire vertex buffer, specify 0 for both parameters, SizeToLock and OffsetToLock. + Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are: D3DLOCK_DISCARD D3DLOCK_NO_DIRTY_UPDATE D3DLOCK_NOSYSLOCK D3DLOCK_READONLY D3DLOCK_NOOVERWRITE For a description of the flags, see . + A if the method succeeds. + bb205917 + HRESULT IDirect3DVertexBuffer9::Lock([In] unsigned int OffsetToLock,[In] unsigned int SizeToLock,[Out] void** ppbData,[In] D3DLOCK Flags) + IDirect3DVertexBuffer9::Lock + + + +

    Applications use the methods of the interface to encapsulate the vertex shader declaration.

    +
    + +

    A vertex shader declaration is made up of an array of vertex elements.

    The LPDIRECT3DVERTEXDECLARATION9 and PDIRECT3DVERTEXDECLARATION9 types are defined as references to the interface.

    typedef struct  *LPDIRECT3DVERTEXDECLARATION9, *PDIRECT3DVERTEXDECLARATION9;
    +
    + + bb205919 + IDirect3DVertexDeclaration9 + IDirect3DVertexDeclaration9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the current device.

    +
    + + bb205921 + GetDevice + GetDevice + HRESULT IDirect3DVertexDeclaration9::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Gets the current device.

    +
    +

    Pointer to the interface that is returned.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + + bb205921 + HRESULT IDirect3DVertexDeclaration9::GetDevice([Out] IDirect3DDevice9** ppDevice) + IDirect3DVertexDeclaration9::GetDevice +
    + + +

    Gets the vertex shader declaration.

    +
    +

    Array of vertex elements (see ) that make up a vertex shader declaration. The application needs to allocate enough room for this. The vertex element array ends with the D3DDECL_END macro.

    +

    Number of elements in the array. The application needs to allocate enough room for this.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be: .

    + +

    The number of elements, pNumElements, includes the D3DDECL_END macro, which ends the declaration. So the element count is actually one higher than the number of valid vertex elements.

    Here's an example that will return the vertex declaration array of up to 256 elements:

      decl[MAXD3DDECLLENGTH];	
    +            UINT numElements;	
    +             hr = m_pVertexDeclaration->GetDeclaration( decl, &numElements);	
    +            

    Specify null for pDeclto get the number of elements in the declaration.

    +
    + + bb205920 + HRESULT IDirect3DVertexDeclaration9::GetDeclaration([Out, Buffer] D3DVERTEXELEMENT9* pElement,[InOut] unsigned int* pNumElements) + IDirect3DVertexDeclaration9::GetDeclaration +
    + + + Create a vertex shader declaration from the device and the vertex elements. + + + See the {{Vertex Declaration (Direct3D 9)}} page for a detailed description of how to map vertex declarations between different versions of DirectX. + + The device. + An array of vertex elements. + If the method succeeds + HRESULT IDirect3DDevice9::CreateVertexDeclaration([In, Buffer] const D3DVERTEXELEMENT9* pVertexElements,[None] IDirect3DVertexDeclaration9** ppDecl) + + + + Gets the elements. + + HRESULT IDirect3DVertexDeclaration9::GetDeclaration([Out, Buffer] D3DVERTEXELEMENT9* pElement,[InOut] unsigned int* pNumElements) + + + +

    Applications use the methods of the interface to encapsulate the functionality of a vertex shader.

    +
    + +

    The LPDIRECT3DVERTEXSHADER9 and PDIRECT3DVERTEXSHADER9 types are defined as references to the interface.

    typedef struct  *LPDIRECT3DVERTEXSHADER9, *PDIRECT3DVERTEXSHADER9;
    +
    + + bb205922 + IDirect3DVertexShader9 + IDirect3DVertexShader9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + Constant MaxDynamicFlowControlDepth. + D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH + + + Constant MinDynamicFlowControlDepth. + D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH + + + Constant MaxTemps. + D3DVS20_MAX_NUMTEMPS + + + Constant MinTemps. + D3DVS20_MIN_NUMTEMPS + + + Constant MaxStaticFlowControlDepth. + D3DVS20_MAX_STATICFLOWCONTROLDEPTH + + + Constant MinStaticFlowControlDepth. + D3DVS20_MIN_STATICFLOWCONTROLDEPTH + + + +

    Gets the device.

    +
    + + bb205923 + GetDevice + GetDevice + HRESULT IDirect3DVertexShader9::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Gets the device.

    +
    +

    Pointer to the interface that is returned.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205923 + HRESULT IDirect3DVertexShader9::GetDevice([Out] IDirect3DDevice9** ppDevice) + IDirect3DVertexShader9::GetDevice +
    + + +

    Gets a reference to the shader data.

    +
    +

    Pointer to a buffer that contains the shader data. The application needs to allocate enough room for this.

    +

    Size of the data, in bytes. To get the buffer size that is needed to retrieve the data, set pData = null when calling GetFunction. Then call GetFunction with the returned size, to get the buffer data.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205924 + HRESULT IDirect3DVertexShader9::GetFunction([In] void* arg0,[InOut] unsigned int* pSizeOfData) + IDirect3DVertexShader9::GetFunction +
    + + + Initializes a new instance of the class. + + The device. + The function. + HRESULT IDirect3DDevice9::CreateVertexShader([In] const void* pFunction,[Out, Fast] IDirect3DVertexShader9** ppShader) + + + + Gets the bytecode associated to this shader.. + + + + +

    Applications use the methods of the interface to manipulate volume resources.

    +
    + +

    The interface is obtained by calling the method.

    This interface, like all COM interfaces, inherits from the interface.

    The LPDIRECT3DVOLUME9 and PDIRECT3DVOLUME9 types are defined as references to the interface.

     typedef struct  *LPDIRECT3DVOLUME9, *PDIRECT3DVOLUME9;	
    +            
    +
    + + bb205932 + IDirect3DVolume9 + IDirect3DVolume9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the device associated with a volume.

    +
    + +

    This method allows navigation to the owning device object.

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb205936 + GetDevice + GetDevice + HRESULT IDirect3DVolume9::GetDevice([Out] IDirect3DDevice9** ppDevice) +
    + + +

    Retrieves a description of the volume.

    +
    + + bb205935 + GetDesc + GetDesc + HRESULT IDirect3DVolume9::GetDesc([Out] D3DVOLUME_DESC* pDesc) +
    + + +

    Retrieves the device associated with a volume.

    +
    +

    Address of a reference to an interface to fill with the device reference, if the query succeeds.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    This method allows navigation to the owning device object.

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb205936 + HRESULT IDirect3DVolume9::GetDevice([Out] IDirect3DDevice9** ppDevice) + IDirect3DVolume9::GetDevice +
    + + +

    Associates data with the volume that is intended for use by the application, not by Direct3D.

    +
    +

    Reference to the globally unique identifier that identifies the private data to set.

    +

    Pointer to a buffer that contains the data to associate with the volume.

    +

    Size of the buffer at pData in bytes.

    +

    Value that describes the type of data being passed, or indicates to the application that the data should be invalidated when the resource changes.

    ItemDescription

    (none)

    If no flags are specified, Direct3D allocates memory to hold the data within the buffer and copies the data into the new buffer. The buffer allocated by Direct3D is automatically freed, as appropriate.

    D3DSPD_IUNKNOWN

    The data at pData is a reference to an interface. SizeOfData must be set to the size of a reference to an interface, sizeof(*). Direct3D automatically calls through pData and when the private data is destroyed. Private data will be destroyed by a subsequent call to with the same , a subsequent call to , or when the object is released. For more information, see Remarks.

    ?

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , E_OUTOFMEMORY.

    + +

    Direct3D does not manage the memory at pData. If this buffer was dynamically allocated, it is the calling application's responsibility to free the memory.

    Data is passed by value, and multiple sets of data can be associated with a single volume.

    +
    + + bb205939 + HRESULT IDirect3DVolume9::SetPrivateData([In] const GUID& refguid,[In] const void* pData,[In] unsigned int SizeOfData,[In] unsigned int Flags) + IDirect3DVolume9::SetPrivateData +
    + + +

    Copies the private data associated with the volume to a provided buffer.

    +
    +

    Reference to (C++) or address of (C) the globally unique identifier that identifies the private data to retrieve.

    +

    Pointer to a previously allocated buffer to fill with the requested private data if the call succeeds. The application calling this method is responsible for allocating and releasing this buffer. If this parameter is null, this method will return the buffer size in pSizeOfData.

    +

    Pointer to the size of the buffer at pData, in bytes. If this value is less than the actual size of the private data, such as 0, the method sets this parameter to the required buffer size, and the method returns .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , , .

    + + bb205937 + HRESULT IDirect3DVolume9::GetPrivateData([In] const GUID& refguid,[In] void* pData,[Out] unsigned int* pSizeOfData) + IDirect3DVolume9::GetPrivateData +
    + + +

    Frees the specified private data associated with this volume.

    +
    +

    Reference to the globally unique identifier that identifies the private data to free.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: , .

    + +

    Direct3D calls this method automatically when a volume is released.

    +
    + + bb205933 + HRESULT IDirect3DVolume9::FreePrivateData([In] const GUID& refguid) + IDirect3DVolume9::FreePrivateData +
    + + +

    Provides access to the parent volume texture object, if this surface is a child level of a volume texture.

    +
    +

    Reference identifier of the volume being requested.

    +

    Address of a reference to fill with the container reference, if the query succeeds.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    If the call succeeds, the reference count of the container is increased by one.

    Here's an example getting the parent volume texture of a volume texture.

     // Assumes pSurface is a valid  reference	
    +            void *pContainer = null;	
    +             *pVolumeTexture = null;	
    +             hr = pVolume->GetContainer(IID_IDirect3DVolumeTexture9, &pContainer);	
    +            if (SUCCEEDED(hr) && pContainer)	
    +            { pVolumeTexture = ( *)pContainer;	
    +            
    +
    + + bb205934 + HRESULT IDirect3DVolume9::GetContainer([In] const GUID& riid,[In] void** ppContainer) + IDirect3DVolume9::GetContainer +
    + + +

    Retrieves a description of the volume.

    +
    +

    Pointer to a structure, describing the volume.

    +

    If the method succeeds, the return value is . is returned if the argument is invalid.

    + + bb205935 + HRESULT IDirect3DVolume9::GetDesc([Out] D3DVOLUME_DESC* pDesc) + IDirect3DVolume9::GetDesc +
    + + +

    Locks a box on a volume resource.

    +
    +

    Pointer to a structure, describing the locked region.

    +

    Pointer to a box to lock. Specified by a reference to a structure. Specifying null for this parameter locks the entire volume.

    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    For a description of the flags, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    For performance reasons, dirty regions are only recorded for level zero of a texture. Dirty regions are automatically recorded when is called without or . See for more information.

    +
    + + bb205938 + HRESULT IDirect3DVolume9::LockBox([Out] D3DLOCKED_BOX* pLockedVolume,[In] const void* pBox,[In] D3DLOCK Flags) + IDirect3DVolume9::LockBox +
    + + +

    Unlocks a box on a volume resource.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205940 + HRESULT IDirect3DVolume9::UnlockBox() + IDirect3DVolume9::UnlockBox +
    + + + Loads a volume from memory. + + Pointer to a structure, the destination palette of 256 colors or null. + Pointer to a structure. Specifies the destination box. Set this parameter to null to specify the entire volume. + Pointer to the top-left corner of the source volume in memory. + Member of the enumerated type, the pixel format of the source volume. + Pitch of source image, in bytes. For DXT formats (compressed texture formats), this number should represent the size of one row of cells, in bytes. + Pitch of source image, in bytes. For DXT formats (compressed texture formats), this number should represent the size of one slice of cells, in bytes. + Pointer to a structure, the source palette of 256 colors or null. + Pointer to a structure. Specifies the source box. null is not a valid value for this parameter. + A combination of one or more controlling how the image is filtered. Specifying D3DX_DEFAULT for this parameter is the equivalent of specifying | . + value to replace with transparent black, or 0 to disable the color key. This is always a 32-bit ARGB color, independent of the source image format. Alpha is significant and should usually be set to FF for opaque color keys. Thus, for opaque black, the value would be equal to 0xFF000000. + If the function succeeds, the return value is . If the function fails, the return value can be one of the following values: , D3DXERR_INVALIDDATA. + + Writing to a non-level-zero surface of the volume texture will not cause the dirty rectangle to be updated. If is called and the texture was not already dirty (this is unlikely under normal usage scenarios), the application needs to explicitly call on the volume texture. + + HRESULT D3DXLoadVolumeFromMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcMemory,[In] D3DFORMAT SrcFormat,[In] unsigned int SrcRowPitch,[In] unsigned int SrcSlicePitch,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey) + + + + Loads a volume from a file on the disk. + + The volume. + Name of the file. + The filter. + The color key. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileW([In] IDirect3DVolume9* pDestVolume,[In] const PALETTEENTRY* pDestPalette,[In] const D3DBOX* pDestBox,[In] const wchar_t* pSrcFile,[In] const D3DBOX* pSrcBox,[In] unsigned int Filter,[In] D3DCOLOR ColorKey,[In] D3DXIMAGE_INFO* pSrcInfo) + + + + Loads a volume from a file on the disk. + + The volume. + Name of the file. + The filter. + The color key. + The source box. + The destination box. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileW([In] IDirect3DVolume9* pDestVolume,[In] const PALETTEENTRY* pDestPalette,[In] const D3DBOX* pDestBox,[In] const wchar_t* pSrcFile,[In] const D3DBOX* pSrcBox,[In] unsigned int Filter,[In] D3DCOLOR ColorKey,[In] D3DXIMAGE_INFO* pSrcInfo) + + + + Loads a volume from a file on the disk. + + The volume. + Name of the file. + The filter. + The color key. + The source box. + The destination box. + The image information. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileW([In] IDirect3DVolume9* pDestVolume,[In] const PALETTEENTRY* pDestPalette,[In] const D3DBOX* pDestBox,[In] const wchar_t* pSrcFile,[In] const D3DBOX* pSrcBox,[In] unsigned int Filter,[In] D3DCOLOR ColorKey,[In] D3DXIMAGE_INFO* pSrcInfo) + + + + Loads a volume from a file on the disk. + + The volume. + Name of the file. + The filter. + The color key. + The source box. + The destination box. + The palette. + The image information. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileW([In] IDirect3DVolume9* pDestVolume,[In] const PALETTEENTRY* pDestPalette,[In] const D3DBOX* pDestBox,[In] const wchar_t* pSrcFile,[In] const D3DBOX* pSrcBox,[In] unsigned int Filter,[In] D3DCOLOR ColorKey,[In] D3DXIMAGE_INFO* pSrcInfo) + + + + Loads a volume from a file in memory. + + The volume. + The memory. + The filter. + The color key. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileInMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a volume from a file in memory. + + The volume. + The memory. + The filter. + The color key. + The source box. + The destination box. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileInMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a volume from a file in memory. + + The volume. + The memory. + The filter. + The color key. + The source box. + The destination box. + The image information. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileInMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a volume from a file in memory. + + The volume. + The memory. + The filter. + The color key. + The source box. + The destination box. + The palette. + The image information. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileInMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a volume from a file in a stream. + + The volume. + The stream. + The filter. + The color key. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileInMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a volume from a file in a stream. + + The volume. + The stream. + The filter. + The color key. + The source box. + The destination box. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileInMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a volume from a file in a stream. + + The volume. + The stream. + The filter. + The color key. + The source box. + The destination box. + The image information. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromFileInMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a volume from a file in a stream. + + The volume. + The stream. + The filter. + The color key. + The source box. + The destination box. + The palette. + The image information. + A object describing the result of the operation. + HRESULT D3DXLoadVolumeFromFileInMemory([In] IDirect3DVolume9* pDestVolume,[Out, Buffer] const PALETTEENTRY* pDestPalette,[In] const void* pDestBox,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] const void* pSrcBox,[In] D3DX_FILTER Filter,[In] int ColorKey,[In] void* pSrcInfo) + + + + Loads a volume from a source volume. + + The destination volume. + The source volume. + The filter. + The color key. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromVolume([In] IDirect3DVolume9* pDestVolume,[In] const PALETTEENTRY* pDestPalette,[In] const D3DBOX* pDestBox,[In] IDirect3DVolume9* pSrcVolume,[In] const PALETTEENTRY* pSrcPalette,[In] const D3DBOX* pSrcBox,[In] unsigned int Filter,[In] D3DCOLOR ColorKey) + + + + Loads a volume from a source volume. + + The destination volume. + The source volume. + The filter. + The color key. + The source box. + The destination box. + + A object describing the result of the operation. + + HRESULT D3DXLoadVolumeFromVolume([In] IDirect3DVolume9* pDestVolume,[In] const PALETTEENTRY* pDestPalette,[In] const D3DBOX* pDestBox,[In] IDirect3DVolume9* pSrcVolume,[In] const PALETTEENTRY* pSrcPalette,[In] const D3DBOX* pSrcBox,[In] unsigned int Filter,[In] D3DCOLOR ColorKey) + + + + Loads a volume from a source volume. + + The destination volume. + The source volume. + The filter. + The color key. + The source box. + The destination box. + The destination palette. + The source palette. + A object describing the result of the operation. + HRESULT D3DXLoadVolumeFromVolume([In] IDirect3DVolume9* pDestVolume,[In] const PALETTEENTRY* pDestPalette,[In] const D3DBOX* pDestBox,[In] IDirect3DVolume9* pSrcVolume,[In] const PALETTEENTRY* pSrcPalette,[In] const D3DBOX* pSrcBox,[In] unsigned int Filter,[In] D3DCOLOR ColorKey) + + + + Locks a box on a volume resource. + + The flags. + + The locked region of this resource + + HRESULT IDirect3DVolume9::LockBox([Out] D3DLOCKED_BOX* pLockedVolume,[In] const void* pBox,[In] D3DLOCK Flags) + + + + Locks a box on a volume resource. + + The box. + The flags. + The locked region of this resource + HRESULT IDirect3DVolume9::LockBox([Out] D3DLOCKED_BOX* pLockedVolume,[In] const void* pBox,[In] D3DLOCK Flags) + + + + Saves a volume to a file on disk. + + The volume. + Name of the file. + The format. + + A object describing the result of the operation. + + HRESULT D3DXSaveVolumeToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DVolume9* pSrcVolume,[In] const PALETTEENTRY* pSrcPalette,[In] const D3DBOX* pSrcBox) + + + + Saves a volume to a file on disk. + + The volume. + Name of the file. + The format. + The box. + + A object describing the result of the operation. + + HRESULT D3DXSaveVolumeToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DVolume9* pSrcVolume,[In] const PALETTEENTRY* pSrcPalette,[In] const D3DBOX* pSrcBox) + + + + Saves a volume to a file on disk. + + The volume. + Name of the file. + The format. + The box. + The palette. + A object describing the result of the operation. + HRESULT D3DXSaveVolumeToFileW([In] const wchar_t* pDestFile,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DVolume9* pSrcVolume,[In] const PALETTEENTRY* pSrcPalette,[In] const D3DBOX* pSrcBox) + + + + Saves a volume to a . + + The volume. + The format. + + A object describing the result of the operation. + + HRESULT D3DXSaveVolumeToFileInMemory([In] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DVolume9* pSrcVolume,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcBox) + + + + Saves a volume to a . + + The volume. + The format. + The box. + + A object describing the result of the operation. + + HRESULT D3DXSaveVolumeToFileInMemory([In] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DVolume9* pSrcVolume,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcBox) + + + + Saves a volume to a . + + The volume. + The format. + The box. + The palette. + A object describing the result of the operation. + HRESULT D3DXSaveVolumeToFileInMemory([In] ID3DXBuffer** ppDestBuf,[In] D3DXIMAGE_FILEFORMAT DestFormat,[In] IDirect3DVolume9* pSrcVolume,[In, Buffer] const PALETTEENTRY* pSrcPalette,[In] const void* pSrcBox) + + + +

    Applications use the methods of the interface to manipulate a volume texture resource.

    +
    + +

    The interface can be obtained by calling the CreateVolumeTexture method or one of the xxx functions.

    This interface inherits additional functionality from the interface.

    This interface, like all COM interfaces, inherits from the interface.

    The LPDIRECT3DVOLUMETEXTURE9 and PDIRECT3DVOLUMETEXTURE9 types are defined as references to the interface.

     typedef struct  *LPDIRECT3DVOLUMETEXTURE9, *PDIRECT3DVOLUMETEXTURE9;	
    +            
    +
    + + bb205941 + IDirect3DVolumeTexture9 + IDirect3DVolumeTexture9 +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a level description of a volume texture resource.

    +
    +

    Identifies a level of the volume texture resource. This method returns a volume description for the level specified by this parameter.

    +

    Pointer to a structure, describing the returned volume texture level.

    + + bb205943 + HRESULT IDirect3DVolumeTexture9::GetLevelDesc([In] unsigned int Level,[Out] D3DVOLUME_DESC* pDesc) + IDirect3DVolumeTexture9::GetLevelDesc +
    + + +

    Retrieves the specified volume texture level.

    +
    +

    Identifies a level of the volume texture resource. This method returns a volume for the level specified by this parameter.

    +

    Address of a reference to an interface, representing the returned volume level.

    + +

    Calling this method will increase the internal reference count on the interface. Failure to call IUnknown::Release when finished using this interface results in a memory leak.

    +
    + + bb205944 + HRESULT IDirect3DVolumeTexture9::GetVolumeLevel([In] unsigned int Level,[Out] IDirect3DVolume9** ppVolumeLevel) + IDirect3DVolumeTexture9::GetVolumeLevel +
    + + +

    Locks a box on a volume texture resource.

    +
    +

    Specifies the level of the volume texture resource to lock.

    +

    Pointer to a structure, describing the locked region.

    +

    Pointer to the volume to lock. This parameter is specified by a reference to a structure. Specifying null for this parameter locks the entire volume level.

    +

    Combination of zero or more locking flags that describe the type of lock to perform. For this method, the valid flags are:

    For a description of the flags, see .

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    For performance reasons, dirty regions are only recorded for level zero of a texture. Dirty regions are automatically recorded when LockBox is called without or . For more information, see UpdateTexture.

    +
    + + bb205945 + HRESULT IDirect3DVolumeTexture9::LockBox([In] unsigned int Level,[Out] D3DLOCKED_BOX* pLockedVolume,[In] const void* pBox,[In] D3DLOCK Flags) + IDirect3DVolumeTexture9::LockBox +
    + + +

    Unlocks a box on a volume texture resource.

    +
    +

    Specifies the level of the volume texture resource to unlock.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + + bb205946 + HRESULT IDirect3DVolumeTexture9::UnlockBox([In] unsigned int Level) + IDirect3DVolumeTexture9::UnlockBox +
    + + +

    Adds a dirty region to a volume texture resource.

    +
    +

    Pointer to a structure, specifying the dirty region to add. Specifying null expands the dirty region to cover the entire volume texture.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be .

    + +

    For performance reasons, dirty regions are only recorded for level zero of a texture. For sublevels, it is assumed that the corresponding (scaled) box is also dirty. Dirty regions are automatically recorded when LockBox is called without or .

    Using and explicitly specifying dirty regions can be used to increase the efficiency of UpdateTexture. Using this method, applications can optimize what subset of a resource is copied by specifying dirty boxes on the resource. However, the dirty regions may be expanded to optimize alignment.

    +
    + + bb205942 + HRESULT IDirect3DVolumeTexture9::AddDirtyBox([In] const void* pDirtyBox) + IDirect3DVolumeTexture9::AddDirtyBox +
    + + + Initializes a new instance of the class. + + The device. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + HRESULT IDirect3DDevice9::CreateVolumeTexture([In] unsigned int Width,[In] unsigned int Height,[In] unsigned int Levels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DVolumeTexture9** ppVolumeTexture,[In] void** pSharedHandle) + + + + Initializes a new instance of the class. + + The device. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The shared handle. + HRESULT IDirect3DDevice9::CreateVolumeTexture([In] unsigned int Width,[In] unsigned int Height,[In] unsigned int Levels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[Out, Fast] IDirect3DVolumeTexture9** ppVolumeTexture,[In] void** pSharedHandle) + + + + Checks texture-creation parameters. + + Device associated with the texture. + The width. + The height. + The depth. + Requested number of mipmap levels for the texture. + The requested usage for the texture. + Requested format for the texture. + Memory class where the resource will be placed. + + A value type containing the proposed values to pass to the texture creation functions. + + HRESULT D3DXCheckVolumeTextureRequirements([In] IDirect3DDevice9* pDevice,[InOut] unsigned int* pWidth,[InOut] unsigned int* pHeight,[InOut] unsigned int* pDepth,[InOut] unsigned int* pNumMipLevels,[In] unsigned int Usage,[InOut] D3DFORMAT* pFormat,[In] D3DPOOL Pool) + + + + Uses a user-provided function to fill each texel of each mip level of a given texture. + + A function that is used to fill the texture. + A object describing the result of the operation. + HRESULT D3DXFillVolumeTexture([In] IDirect3DVolumeTexture9* pVolumeTexture,[In] __function__stdcall* pFunction,[In] void* pData) + + + + Uses a compiled high-level shader language (HLSL) function to fill each texel of each mipmap level of a texture. + + A texture shader object that is used to fill the texture. + A object describing the result of the operation. + HRESULT D3DXFillVolumeTextureTX([In] IDirect3DVolumeTexture9* pVolumeTexture,[In] ID3DXVolumeTextureShader* pVolumeTextureShader) + + + + Locks a box on a volume texture resource. + + The level. + The flags. + + A describing the region locked. + + HRESULT IDirect3DVolumeTexture9::LockBox([In] unsigned int Level,[Out] D3DLOCKED_BOX* pLockedVolume,[In] const void* pBox,[In] D3DLOCK Flags) + + + + Locks a box on a volume texture resource. + + The level. + The box. + The flags. + + A describing the region locked. + + HRESULT IDirect3DVolumeTexture9::LockBox([In] unsigned int Level,[Out] D3DLOCKED_BOX* pLockedVolume,[In] const void* pBox,[In] D3DLOCK Flags) + + + + Adds a dirty region to a texture resource. + + + A object describing the result of the operation. + + HRESULT IDirect3DVolumeTexture9::AddDirtyBox([In] const void* pDirtyBox) + + + + Adds a dirty region to a texture resource. + + The direct box ref. + + A object describing the result of the operation. + + HRESULT IDirect3DVolumeTexture9::AddDirtyBox([In] const void* pDirtyBox) + + + + Creates a from a file + + The device. + The filename. + + A + + HRESULT D3DXCreateVolumeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a file + + The device. + The filename. + The usage. + The pool. + + A + + HRESULT D3DXCreateVolumeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a file + + The device. + The filename. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateVolumeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a file + + The device. + The filename. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + + A + + HRESULT D3DXCreateVolumeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a file + + The device. + The filename. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateVolumeTextureFromFileExW([In] IDirect3DDevice9* pDevice,[In] const wchar_t* pSrcFile,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[In] void* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemory([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The usage. + The pool. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a memory buffer. + + The device. + The buffer. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a stream. + + The device. + The stream. + A + HRESULT D3DXCreateVolumeTextureFromFileInMemory([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The usage. + The pool. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a stream. + + The device. + The buffer. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a stream. + + The device. + The stream. + The size bytes. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + A + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a stream. + + The device. + The pointer. + The size in bytes. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + + Creates a from a stream. + + The device. + Name of the file. + The width. + The height. + The depth. + The level count. + The usage. + The format. + The pool. + The filter. + The mip filter. + The color key. + The image information. + The palette. + + A + + HRESULT D3DXCreateVolumeTextureFromFileInMemoryEx([In] IDirect3DDevice9* pDevice,[In] const void* pSrcData,[In] unsigned int SrcDataSize,[In] unsigned int Size,[In] unsigned int MipLevels,[In] unsigned int Usage,[In] D3DFORMAT Format,[In] D3DPOOL Pool,[In] unsigned int Filter,[In] unsigned int MipFilter,[In] D3DCOLOR ColorKey,[Out] D3DXIMAGE_INFO* pSrcInfo,[Out, Buffer] PALETTEENTRY* pPalette,[In] IDirect3DVolumeTexture9** ppVolumeTexture) + + + +

    Applications use the methods of the interface to create instances of the and interfaces, and to register templates.

    +
    + +

    An object also contains a local template store. This local storage may be added to only with the and methods.

    and objects created with and also utilize the template store of the parent object.

    The interface is obtained by calling the function.

    The globally unique identifier () for the interface is IID_ID3DXFile.

    The LPD3DXFILE type is defined as a reference to the interface.

     typedef interface  *LPD3DXFILE;	
    +            
    +
    + + bb205836 + ID3DXFile + ID3DXFile +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Creates an enumerator object that will read a .x file.

    +
    +

    The data source. Either:

    • A file name
    • A D3DXF_FILELOADMEMORY structure
    • A D3DXF_FILELOADRESOURCE structure

    Depending on the value of loadflags.

    +

    Value that specifies the source of the data. This value can be one of the D3DXF_FILELOADOPTIONS flags.

    +

    Address of a reference to an interface, representing the created enumerator object.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DXFERR_BADVALUE, D3DXFERR_PARSEERROR.

    + +

    After using this method, use one of the methods to retrieve a data object.

    +
    + + bb173957 + HRESULT ID3DXFile::CreateEnumObject([In] const void* arg0,[In] unsigned int arg1,[In] ID3DXFileEnumObject** arg2) + ID3DXFile::CreateEnumObject +
    + + +

    Creates a save object that will be used to save data to a .x file.

    +
    +

    Pointer to the name of the file to use for saving data.

    +

    Value that specifies the name of the file to which data is to be saved. This value can be one of the File Save Options flags.

    +

    Indicates the format to use when saving the .x file. This value can be one of the File Formats flags. For more information, see Remarks.

    +

    Address of a reference to an interface, representing the created save object.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DXFERR_BADVALUE, D3DXFERR_PARSEERROR.

    + +

    After using this method, use methods of the interface to create data objects and to save templates or data.

    For the saved file format dwFileFormat, one of the binary, legacy binary, or text flags in File Formats must be specified. The file can be compressed by using the optional flag.

    The file format values can be combined in a logical OR to create compressed text or compressed binary files. If you indicate that the file format should be text and compressed, the file will be written out first as text and then compressed. However, compressed text files are not as efficient as binary text files; in most cases, therefore, you will want to indicate binary and compressed.

    +
    + + bb173958 + HRESULT ID3DXFile::CreateSaveObject([In] const void* arg0,[In] unsigned int arg1,[In] unsigned int arg2,[In] ID3DXFileSaveObject** arg3) + ID3DXFile::CreateSaveObject +
    + + +

    Registers custom templates.

    +
    +

    Pointer to a buffer consisting of a .x file in text or binary format that contains templates.

    +

    Size of the buffer pointed to by pvData, in bytes.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DXFERR_BADVALUE, D3DXFERR_PARSEERROR.

    + +

    The following code fragment provides an example call to RegisterTemplates And example contents for the buffer to which pvData points.

     #define XSKINEXP_TEMPLATES \ "xof 0303txt 0032\ template XSkinMeshHeader \ { \ <3CF169CE-FF7C-44ab-93C0-F78F62D172E2> \ WORD nMaxSkinWeightsPerVertex; \ WORD nMaxSkinWeightsPerFace; \ WORD nBones; \ } \ template VertexDuplicationIndices \ { \ <B8D65549-D7C9-4995-89CF-53A9A8B031E3> \ DWORD nIndices; \ DWORD nOriginalVertices; \ array DWORD indices[nIndices]; \ } \ template SkinWeights \ { \ <6F0D123B-BAD2-4167-A0D0-80224F25FABB> \ STRING transformNodeName;\ DWORD nWeights; \ array DWORD vertexIndices[nWeights]; \ array float weights[nWeights]; \ Matrix4x4 matrixOffset; \ }"	
    +            .	
    +            .	
    +            . LPD3DXFILE pD3DXFile = null; if ( FAILED  (hr = pD3DXFile->RegisterTemplates(  (LPVOID)XSKINEXP_TEMPLATES, sizeof( XSKINEXP_TEMPLATES ) - 1 ) ) )	
    +            goto End;	
    +            

    All templates must specify a name and a UUID.

    This method calls the RegisterEnumTemplates method, obtaining an interface reference by calling CreateEnumObject with pvData as the first parameter.

    +
    + + bb173960 + HRESULT ID3DXFile::RegisterTemplates([In] const void* arg0,[In] SIZE_T arg1) + ID3DXFile::RegisterTemplates +
    + + +

    Registers custom templates, given an enumeration object.

    +
    + No documentation. +

    If the method succeeds, the return value is .

    If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + +

    When this method is called, it copies templates stored with the , representing the file, to the local template store of the object.

    If an reference is not available, call the RegisterTemplates method instead.

    +
    + + bb173959 + HRESULT ID3DXFile::RegisterEnumTemplates([In] ID3DXFileEnumObject* arg0) + ID3DXFile::RegisterEnumTemplates +
    + + +

    Applications use the methods of the interface to build or to access the immediate hierarchy of the data object. Template restrictions determine the hierarchy.

    +
    + +

    Data types allowed by the template are called optional members. The optional members are not required, but an object might miss important information without them. These optional members are saved as children of the data object. A child can be another data object or a reference to an earlier data object.

    The for the interface is IID_ID3DXFileData.

    The LPD3DXFILEDATA type is defined as a reference to this interface.

     typedef interface  *LPD3DXFILEDATA;	
    +            
    +
    + + bb205837 + ID3DXFileData + ID3DXFileData +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the enumeration object in this file data object.

    +
    + + bb205840 + GetEnum + GetEnum + HRESULT ID3DXFileData::GetEnum([Out] ID3DXFileEnumObject** arg0) +
    + + +

    Retrieves the template ID in this file data object.

    +
    + + bb205843 + GetType + GetType + HRESULT ID3DXFileData::GetType([Out] GUID* arg0) +
    + + +

    Indicates whether this file data object is a reference object that points to another child data object.

    +
    + + bb205844 + IsReference + IsReference + BOOL ID3DXFileData::IsReference() +
    + + +

    Retrieves the number of children in this file data object.

    +
    + + bb205839 + GetChildren + GetChildren + HRESULT ID3DXFileData::GetChildren([Out] SIZE_T* arg0) +
    + + +

    Retrieves the enumeration object in this file data object.

    +
    +

    Address of a reference to receive the enumeration object in this file data object.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + + bb205840 + HRESULT ID3DXFileData::GetEnum([Out] ID3DXFileEnumObject** arg0) + ID3DXFileData::GetEnum +
    + + +

    Retrieves the name of this file data object.

    +
    +

    Address of a reference to receive the name of this file data object. If this parameter is null, then puiSize will return the size of the string. If szName points to valid memory, the name of this file data object will be copied into szName up to the number of characters given by puiSize.

    +

    Pointer to the size of the string that represents the name of this file data object. This parameter can be null if szName provides a reference to the name. This parameter will return the size of the string if szName is null.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + +

    For this method to succeed, either szName or puiSize must be non-null.

    +
    + + bb205842 + HRESULT ID3DXFileData::GetName([In] char* arg0,[Out] SIZE_T* arg1) + ID3DXFileData::GetName +
    + + +

    Retrieves the of this file data object.

    +
    +

    Pointer to a to receive the ID of this file data object. If the file data object has no ID, the returned parameter value will be GUID_NULL.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + + bb205841 + HRESULT ID3DXFileData::GetId([In] GUID* arg0) + ID3DXFileData::GetId +
    + + +

    Accesses the .x file data.

    +
    +

    Pointer to the size of the .x file data.

    +

    Address of a reference to receive the file data object's interface reference. See Remarks.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + +

    The ppData reference is only valid during a ... sequence. You can make multiple lock calls. However, you must ensure that the number of lock calls matches the number of unlock calls.

    Because file data is not guaranteed to be aligned properly with byte boundaries, you should access ppData with UNALIGNED references.

    Returned parameter values are not guaranteed to be valid due to possible file corruption; therefore, your code should verify the returned parameter values.

    +
    + + bb205845 + HRESULT ID3DXFileData::Lock([In] SIZE_T* arg0,[In] const void** arg1) + ID3DXFileData::Lock +
    + + +

    Ends the lifespan of the ppData reference returned by .

    +
    +

    The return value is .

    + +

    You must ensure that the number of calls matches the number of calls. After calling Unlock, the ppData reference returned by should no longer be used.

    +
    + + bb205846 + HRESULT ID3DXFileData::Unlock() + ID3DXFileData::Unlock +
    + + +

    Retrieves the template ID in this file data object.

    +
    +

    Pointer to the representing the template in this file data object.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + + bb205843 + HRESULT ID3DXFileData::GetType([Out] GUID* arg0) + ID3DXFileData::GetType +
    + + +

    Indicates whether this file data object is a reference object that points to another child data object.

    +
    +

    Returns TRUE if the file data object is a reference object; returns otherwise.

    + + bb205844 + BOOL ID3DXFileData::IsReference() + ID3DXFileData::IsReference +
    + + +

    Retrieves the number of children in this file data object.

    +
    +

    Address of a reference to receive the number of children in this file data object.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + + bb205839 + HRESULT ID3DXFileData::GetChildren([Out] SIZE_T* arg0) + ID3DXFileData::GetChildren +
    + + +

    Retrieves a child object in this file data object.

    +
    +

    ID of the child object to retrieve.

    +

    Address of a reference to receive the child object's interface reference.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following values: D3DXFERR_BADVALUE, D3DXFERR_NOMOREOBJECTS.

    + + bb205838 + HRESULT ID3DXFileData::GetChild([In] SIZE_T arg0,[Out] ID3DXFileData** arg1) + ID3DXFileData::GetChild +
    + + +

    Applications use the methods of the interface to cycle through the child file data objects in the file and to retrieve a child object by its globally unique identifier () or by its name.

    +
    + +

    The for the interface is IID_ID3DXFileEnumObject.

    The LPD3DXFILEENUMOBJECT type is defined as a reference to this interface.

     typedef interface  *LPD3DXFILEENUMOBJECT;	
    +            
    +
    + + bb205847 + ID3DXFileEnumObject + ID3DXFileEnumObject +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves the object.

    +
    + + bb205852 + GetFile + GetFile + HRESULT ID3DXFileEnumObject::GetFile([Out] ID3DXFile** arg0) +
    + + +

    Retrieves the number of child objects in this file data object.

    +
    + + bb205849 + GetChildren + GetChildren + HRESULT ID3DXFileEnumObject::GetChildren([Out] SIZE_T* arg0) +
    + + +

    Retrieves the object.

    +
    + No documentation. +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + + bb205852 + HRESULT ID3DXFileEnumObject::GetFile([Out] ID3DXFile** arg0) + ID3DXFileEnumObject::GetFile +
    + + +

    Retrieves the number of child objects in this file data object.

    +
    +

    Address of a reference to receive the number of child objects in this file data object.

    +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + + bb205849 + HRESULT ID3DXFileEnumObject::GetChildren([Out] SIZE_T* arg0) + ID3DXFileEnumObject::GetChildren +
    + + +

    Retrieves a child object in this file data object.

    +
    +

    ID of the child object to retrieve.

    +

    Address of a reference to receive the child object's interface reference.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DXFERR_BADVALUE, D3DXFERR_NOMOREOBJECTS.

    + + bb205848 + HRESULT ID3DXFileEnumObject::GetChild([In] SIZE_T arg0,[Out] ID3DXFileData** arg1) + ID3DXFileEnumObject::GetChild +
    + + +

    Retrieves the data object that has the specified .

    +
    +

    Reference to the requested .

    +

    Address of a reference to an interface, representing the returned file data object.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following:DXFILEERR_BADVALUE, DXFILEERR_NOTFOUND.

    + +

    Obtain the rguid of the current file data object with the method.

    +
    + + bb205850 + HRESULT ID3DXFileEnumObject::GetDataObjectById([In] const GUID& arg0,[In] ID3DXFileData** arg1) + ID3DXFileEnumObject::GetDataObjectById +
    + + +

    Retrieves the data object that has the specified name.

    +
    +

    Pointer to the requested name.

    +

    Address of a reference to an interface, representing the returned file data object.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following:DXFILEERR_BADVALUE, DXFILEERR_NOTFOUND.

    + +

    Obtain the name szName of the current file data object with the method.

    +
    + + bb205851 + HRESULT ID3DXFileEnumObject::GetDataObjectByName([In] const char* arg0,[In] ID3DXFileData** arg1) + ID3DXFileEnumObject::GetDataObjectByName +
    + + +

    Applications use the methods of the interface to add data objects as children of a .x file data node.

    +
    + +

    The for the interface is IID_ID3DXFileSaveObject.

    The LPD3DXFileSaveData type is defined as a reference to this interface.

     typedef interface  *LPD3DXFILESAVEDATA;	
    +            
    +
    + + bb205853 + ID3DXFileSaveData + ID3DXFileSaveData +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Retrieves a reference to this file data node.

    +
    + + bb173951 + GetSave + GetSave + HRESULT ID3DXFileSaveData::GetSave([Out] ID3DXFileSaveObject** arg0) +
    + + +

    Retrieves the template ID of this file data node.

    +
    + + bb173952 + GetType + GetType + HRESULT ID3DXFileSaveData::GetType([Out] GUID* arg0) +
    + + +

    Retrieves a reference to this file data node.

    +
    + No documentation. +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + + bb173951 + HRESULT ID3DXFileSaveData::GetSave([Out] ID3DXFileSaveObject** arg0) + ID3DXFileSaveData::GetSave +
    + + +

    Retrieves the name of this file data node.

    +
    + No documentation. + No documentation. +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + +

    For this method to succeed, either szName or puiSize must be non-null.

    +
    + + bb173950 + HRESULT ID3DXFileSaveData::GetName([In] char* arg0,[Out] SIZE_T* arg1) + ID3DXFileSaveData::GetName +
    + + +

    Retrieves the of this file data node.

    +
    + No documentation. +

    If the method succeeds, the return value is . If the method fails, the following value will be returned: D3DXFERR_BADVALUE.

    + + bb205856 + HRESULT ID3DXFileSaveData::GetId([In] GUID* arg0) + ID3DXFileSaveData::GetId +
    + + +

    Retrieves the template ID of this file data node.

    +
    +

    Pointer to the representing the template in this file data node.

    +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DXFERR_BADOBJECT, D3DXFERR_BADVALUE.

    + + bb173952 + HRESULT ID3DXFileSaveData::GetType([Out] GUID* arg0) + ID3DXFileSaveData::GetType +
    + + +

    Adds a data object as a child of the file data node.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DXFERR_BADOBJECT, D3DXFERR_BADVALUE, E_OUTOFMEMORY.

    + + bb205854 + HRESULT ID3DXFileSaveData::AddDataObject([In] const GUID& arg0,[In] const char* arg1,[In] const GUID* arg2,[In] SIZE_T arg3,[In] const void* arg4,[In] ID3DXFileSaveData** arg5) + ID3DXFileSaveData::AddDataObject +
    + + +

    Adds a data reference as a child of this file data node. The data reference points to a file data object.

    +
    + No documentation. + No documentation. +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DXFERR_BADOBJECT, D3DXFERR_BADVALUE, E_OUTOFMEMORY.

    + +

    The file data object being referenced must have either a name or a . The file data object must also derive from a different parent object.

    +
    + + bb205855 + HRESULT ID3DXFileSaveData::AddDataReference([In] const char* arg0,[In] const GUID* arg1) + ID3DXFileSaveData::AddDataReference +
    + + +

    Applications use the methods of the interface to write a .x file to disk, and to add and save data objects and templates.

    +
    + +

    Templates are not required in every file. For example, you could put all templates into a single .x file rather than duplicating them in every .x file.

    The interface is obtained by calling the method.

    The globally unique identifier () for the interface is IID_ID3DXFileSaveObject.

    The LPD3DXFILESAVEOBJECT type is defined as a reference to this interface.

     typedef interface  *LPD3DXFILESAVEOBJECT;	
    +            
    +
    + + bb173953 + ID3DXFileSaveObject + ID3DXFileSaveObject +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Gets the interface of the object that created this object.

    +
    + + bb173955 + GetFile + GetFile + HRESULT ID3DXFileSaveObject::GetFile([Out] ID3DXFile** arg0) +
    + + +

    Gets the interface of the object that created this object.

    +
    + No documentation. +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DXFERR_BADVALUE, E_NOINTERFACE, E_POINTER.

    + + bb173955 + HRESULT ID3DXFileSaveObject::GetFile([Out] ID3DXFile** arg0) + ID3DXFileSaveObject::GetFile +
    + + +

    Adds a data object as a child of the object.

    +
    + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. + No documentation. +

    If the method succeeds, the return value is . If the method fails, the return value can be one of the following: D3DXFERR_BADOBJECT, DXFILEERR_BADVALUE, E_OUTOFMEMORY.

    + +

    If a data reference object will reference the data object, either the szName or pId parameter must be non-null.

    Save the created data to disk by using the method.

    +
    + + bb173954 + HRESULT ID3DXFileSaveObject::AddDataObject([In] const GUID& arg0,[In] const char* arg1,[In] const GUID* arg2,[In] SIZE_T arg3,[In] const void* arg4,[In] ID3DXFileSaveData** arg5) + ID3DXFileSaveObject::AddDataObject +
    + + +

    Saves a data object and its children to a .x file on disk.

    +
    +

    If the method succeeds, the return value is . If the method fails, the return value can be the following: D3DXFERR_BADOBJECT.

    + +

    After this method succeeds, , and can no longer be called until a new object is created.

    +
    + + bb173956 + HRESULT ID3DXFileSaveObject::Save() + ID3DXFileSaveObject::Save +
    + + +

    Stores an attribute table entry.

    +
    + +

    An attribute table is used to identify areas of the mesh that need to be drawn with different textures, render states, materials, and so on. In addition, the application can use the attribute table to hide portions of a mesh by not drawing a given attribute identifier (AttribId) when drawing the frame.

    The LPD3DXATTRIBUTERANGE type is defined as a reference to the structure.

     typedef * LPD3DXATTRIBUTERANGE;	
    +            
    +
    + + bb172710 + D3DXATTRIBUTERANGE + D3DXATTRIBUTERANGE +
    + + +

    Attribute table identifier.

    +
    + + bb172710 + unsigned int AttribId + unsigned int AttribId +
    + + +

    Starting face.

    +
    + + bb172710 + unsigned int FaceStart + unsigned int FaceStart +
    + + +

    Face count.

    +
    + + bb172710 + unsigned int FaceCount + unsigned int FaceCount +
    + + +

    Starting vertex.

    +
    + + bb172710 + unsigned int VertexStart + unsigned int VertexStart +
    + + +

    Vertex count.

    +
    + + bb172710 + unsigned int VertexCount + unsigned int VertexCount +
    + + +

    Specifies mesh weight attributes.

    +
    + +

    This structure describes how a simplification operation will consider vertex data when calculating relative costs between collapsing edges. For example, if the Normal field is 0.0, the simplification operation will ignore the vertex normal component when calculating the error for the collapse. However, if the Normal field is 1.0, the simplification operation will use the vertex normal component. If the Normal field is 2.0, double the amount of errors; if the Normal field is 4.0, then quadruple the number of errors, and so on.

    The LPD3DXATTRIBUTEWEIGHTS type is defined as a reference to the structure.

     typedef * LPD3DXATTRIBUTEWEIGHTS;	
    +            
    +
    + + bb172711 + D3DXATTRIBUTEWEIGHTS + D3DXATTRIBUTEWEIGHTS +
    + + +

    Position.

    +
    + + bb172711 + float Position + float Position +
    + + +

    Blend weight.

    +
    + + bb172711 + float Boundary + float Boundary +
    + + +

    Normal.

    +
    + + bb172711 + float Normal + float Normal +
    + + +

    Diffuse lighting value.

    +
    + + bb172711 + float Diffuse + float Diffuse +
    + + +

    Specular lighting value.

    +
    + + bb172711 + float Specular + float Specular +
    + + +

    Eight texture coordinates.

    +
    + + bb172711 + float Texcoord[8] + float Texcoord +
    + + +

    Tangent.

    +
    + + bb172711 + float Tangent + float Tangent +
    + + +

    Binormal.

    +
    + + bb172711 + float Binormal + float Binormal +
    + + +

    Throughput metrics for help in understanding the performance of an application.

    +
    + + bb172539 + D3DDEVINFO_D3D9BANDWIDTHTIMINGS + D3DDEVINFO_D3D9BANDWIDTHTIMINGS +
    + + +

    The bandwidth or maximum data transfer rate from the host CPU to the GPU. This is typically the bandwidth of the PCI or AGP bus which connects the CPU and the GPU.

    +
    + + bb172539 + float MaxBandwidthUtilized + float MaxBandwidthUtilized +
    + + +

    Memory utilized percentage when uploading data from the host CPU to the GPU.

    +
    + + bb172539 + float FrontEndUploadMemoryUtilizedPercent + float FrontEndUploadMemoryUtilizedPercent +
    + + +

    Vertex throughput percentage. This is the number of vertices processed compared to the theoretical maximum vertex processing rate.

    +
    + + bb172539 + float VertexRateUtilizedPercent + float VertexRateUtilizedPercent +
    + + +

    Triangle set-up throughput percentage. This is the number of triangles that are set up for rasterization compared to the theoretical maximum triangle set-up rate.

    +
    + + bb172539 + float TriangleSetupRateUtilizedPercent + float TriangleSetupRateUtilizedPercent +
    + + +

    Pixel fill throughput percentage. This is the number of pixels that are filled compared to the theoretical pixel fill.

    +
    + + bb172539 + float FillRateUtilizedPercent + float FillRateUtilizedPercent +
    + + +

    Defines a volume.

    +
    + +

    includes the left, top, and front edges; however, the right, bottom, and back edges are not included. For example, a box that is 100 units wide and begins at 0 (thus, including the points up to and including 99) would be expressed with a value of 0 for the Left member and a value of 100 for the Right member. Note that a value of 99 is not used for the Right member.

    The restrictions on side ordering observed for are left to right, top to bottom, and front to back.

    +
    + + bb172510 + D3DBOX + D3DBOX +
    + + +

    Position of the left side of the box on the x-axis.

    +
    + + bb172510 + unsigned int Left + unsigned int Left +
    + + +

    Position of the top of the box on the y-axis.

    +
    + + bb172510 + unsigned int Top + unsigned int Top +
    + + +

    Position of the right side of the box on the x-axis.

    +
    + + bb172510 + unsigned int Right + unsigned int Right +
    + + +

    Position of the bottom of the box on the y-axis.

    +
    + + bb172510 + unsigned int Bottom + unsigned int Bottom +
    + + +

    Position of the front of the box on the z-axis.

    +
    + + bb172510 + unsigned int Front + unsigned int Front +
    + + +

    Position of the back of the box on the z-axis.

    +
    + + bb172510 + unsigned int Back + unsigned int Back +
    + + +

    Measure the cache hit rate performance for textures and indexed vertices.

    +
    + +

    An efficient cache is typically closer to a 90 percent hit rate, and an inefficient cache is typically closer to a 10 percent hit rate (although a low percentage is not necessarily a problem).

    +
    + + bb172540 + D3DDEVINFO_D3D9CACHEUTILIZATION + D3DDEVINFO_D3D9CACHEUTILIZATION +
    + + +

    The hit rate for finding a texture in the texture cache. This assumes there is a texture cache. Increasing the level-of-detail bias to use the most detailed texture, using many large textures, or producing a near random texture access pattern on large textures with custom shader code can dramatically affect the texture cache hit rate.

    +
    + + bb172540 + float TextureCacheHitRate + float TextureCacheHitRate +
    + + +

    The hit rate for finding transformed vertices in the vertex cache. The GPU is designed to transform indexed vertices and may store them in a vertex cache. If you are using meshes, or may result in better vertex cache utilization.

    +
    + + bb172540 + float PostTransformVertexCacheHitRate + float PostTransformVertexCacheHitRate +
    + + +

    Describes a callback key for use in key frame animation.

    +
    + + bb172886 + D3DXKEY_CALLBACK + D3DXKEY_CALLBACK +
    + + +

    Key frame time stamp.

    +
    + + bb172886 + float Time + float Time +
    + + +

    Pointer to user callback data.

    +
    + + bb172886 + void* pCallbackData + void pCallbackData +
    + + +

    Describes the current clip status.

    +
    + +

    When clipping is enabled during vertex processing (by ProcessVertices, DrawPrimitive, or other drawing functions), Direct3D computes a clip code for every vertex. The clip code is a combination of D3DCS_* bits. When a vertex is outside a particular clipping plane, the corresponding bit is set in the clipping code. Direct3D maintains the clip status using , which has ClipUnion and ClipIntersection members. ClipUnion is a bitwise OR of all vertex clip codes and ClipIntersection is a bitwise AND of all vertex clip codes. Initial values are zero for ClipUnion and 0xFFFFFFFF for ClipIntersection. When is set to , ClipUnion and ClipIntersection are set to zero. Direct3D updates the clip status during drawing calls. To compute clip status for a particular object, set ClipUnion and ClipIntersection to their initial value and continue drawing.

    Clip status is not updated by DrawRectPatch and DrawTriPatch because there is no software emulation for them.

    +
    + + bb172516 + D3DCLIPSTATUS9 + D3DCLIPSTATUS9 +
    + + +

    Clip union flags that describe the current clip status. This member can be one or more of the following flags:

    ValueMeaning

    Combination of all clip flags.

    All vertices are clipped by the left plane of the viewing frustum.

    All vertices are clipped by the right plane of the viewing frustum.

    All vertices are clipped by the top plane of the viewing frustum.

    All vertices are clipped by the bottom plane of the viewing frustum.

    All vertices are clipped by the front plane of the viewing frustum.

    All vertices are clipped by the back plane of the viewing frustum.

    Application-defined clipping planes.

    Application-defined clipping planes.

    Application-defined clipping planes.

    Application-defined clipping planes.

    Application-defined clipping planes.

    Application-defined clipping planes.

    ?

    +
    + + bb172516 + unsigned int ClipUnion + unsigned int ClipUnion +
    + + +

    Clip intersection flags that describe the current clip status. This member can take the same flags as ClipUnion.

    +
    + + bb172516 + unsigned int ClipIntersection + unsigned int ClipIntersection +
    + + +

    A description of a constant in a constant table.

    +
    + + bb172748 + D3DXCONSTANT_DESC + D3DXCONSTANT_DESC +
    + + +

    Name of the constant.

    +
    + + bb172748 + const char* Name + char Name +
    + + +

    Constant data type. See .

    +
    + + bb172748 + D3DXREGISTER_SET RegisterSet + D3DXREGISTER_SET RegisterSet +
    + + +

    Zero-based index of the constant in the table.

    +
    + + bb172748 + unsigned int RegisterIndex + unsigned int RegisterIndex +
    + + +

    Number of registers that contain data.

    +
    + + bb172748 + unsigned int RegisterCount + unsigned int RegisterCount +
    + + +

    Parameter class. See .

    +
    + + bb172748 + D3DXPARAMETER_CLASS Class + D3DXPARAMETER_CLASS Class +
    + + +

    Parameter type. See .

    +
    + + bb172748 + D3DXPARAMETER_TYPE Type + D3DXPARAMETER_TYPE Type +
    + + +

    Number of rows.

    +
    + + bb172748 + unsigned int Rows + unsigned int Rows +
    + + +

    Number of columns.

    +
    + + bb172748 + unsigned int Columns + unsigned int Columns +
    + + +

    Number of elements in the array.

    +
    + + bb172748 + unsigned int Elements + unsigned int Elements +
    + + +

    Number of structure member sub-parameters.

    +
    + + bb172748 + unsigned int StructMembers + unsigned int StructMembers +
    + + +

    Data size in number of bytes.

    +
    + + bb172748 + unsigned int Bytes + unsigned int Bytes +
    + + +

    Pointer to the default value.

    +
    + + bb172748 + const void* DefaultValue + void DefaultValue +
    + + +

    A description of the constant table.

    +
    + + bb172747 + D3DXCONSTANTTABLE_DESC + D3DXCONSTANTTABLE_DESC +
    + + +

    Name of the constant table creator.

    +
    + + bb172747 + const char* Creator + char Creator +
    + + +

    Shader version.

    +
    + + bb172747 + unsigned int Version + unsigned int Version +
    + + +

    Number of constants in the constant table.

    +
    + + bb172747 + unsigned int Constants + unsigned int Constants +
    + + +

    Describes the creation parameters for a device.

    +
    + + bb172538 + D3DDEVICE_CREATION_PARAMETERS + D3DDEVICE_CREATION_PARAMETERS +
    + + +

    Ordinal number that denotes the display adapter. D3DADAPTER_DEFAULT is always the primary display adapter. Use this ordinal as the Adapter parameter for any of the methods. Note that different instances of Direct3D 9.0 objects can use different ordinals. Adapters can enter or leave a system when users, for example, add or remove monitors from a multiple-monitor system or when they hot-swap a laptop. Consequently, use this ordinal only in a Direct3D 9.0 instance known to be valid, that is, either the Direct3D 9.0 that created this interface or the Direct3D 9.0 returned from GetDirect3D, as called through this interface.

    +
    + + bb172538 + unsigned int AdapterOrdinal + unsigned int AdapterOrdinal +
    + + +

    Member of the enumerated type. Denotes the amount of emulated functionality for this device. The value of this parameter mirrors the value passed to the CreateDevice call that created this device.

    +
    + + bb172538 + D3DDEVTYPE DeviceType + D3DDEVTYPE DeviceType +
    + + +

    Window handle to which focus belongs for this Direct3D device. The value of this parameter mirrors the value passed to the CreateDevice call that created this device.

    +
    + + bb172538 + HWND hFocusWindow + HWND hFocusWindow +
    + + +

    A combination of one or more constants that control global behavior of the device. These constants mirror the constants passed to CreateDevice when the device was created.

    +
    + + bb172538 + unsigned int BehaviorFlags + unsigned int BehaviorFlags +
    + + +

    Specifies types of display modes to filter out.

    +
    + + bb172550 + D3DDISPLAYMODEFILTER + D3DDISPLAYMODEFILTER +
    + + +

    The size of this structure. This should always be set to sizeof().

    +
    + + bb172550 + unsigned int Size + unsigned int Size +
    + + +

    The display mode format to filter out. See .

    +
    + + bb172550 + D3DFORMAT Format + D3DFORMAT Format +
    + + +

    Whether the scanline ordering is interlaced or progressive. See .

    +
    + + bb172550 + D3DSCANLINEORDERING ScanLineOrdering + D3DSCANLINEORDERING ScanLineOrdering +
    + + +

    Describes an effect object.

    +
    + +

    An effect object can contain multiple rendering techniques and parameters for the same effect.

    +
    + + bb172824 + D3DXEFFECT_DESC + D3DXEFFECT_DESC +
    + + +

    String that contains the name of the effect creator.

    +
    + + bb172824 + const char* Creator + char Creator +
    + + +

    Number of parameters used for effect.

    +
    + + bb172824 + unsigned int Parameters + unsigned int Parameters +
    + + +

    Number of techniques that can render the effect.

    +
    + + bb172824 + unsigned int Techniques + unsigned int Techniques +
    + + +

    Number of functions that can render the effect.

    +
    + + bb172824 + unsigned int Functions + unsigned int Functions +
    + + +

    Describes an animation event.

    +
    + + bb172826 + D3DXEVENT_DESC + D3DXEVENT_DESC +
    + + +

    Event type, as defined in .

    +
    + + bb172826 + D3DXEVENT_TYPE Type + D3DXEVENT_TYPE Type +
    + + +

    Event track identifier.

    +
    + + bb172826 + unsigned int Track + unsigned int Track +
    + + +

    Start time of the event in global time.

    +
    + + bb172826 + double StartTime + double StartTime +
    + + +

    Duration of the event in global time.

    +
    + + bb172826 + double Duration + double Duration +
    + + +

    Transition style of the event, as defined in .

    +
    + + bb172826 + D3DXTRANSITION_TYPE Transition + D3DXTRANSITION_TYPE Transition +
    + + +

    Track weight for the event.

    +
    + + bb172826 + float Weight + float Weight +
    + + +

    Track speed for the event.

    +
    + + bb172826 + float Speed + float Speed +
    + + +

    Track position for the event.

    +
    + + bb172826 + double Position + double Position +
    + + +

    Enable flag.

    +
    + + bb172826 + BOOL Enable + BOOL Enable +
    + + +

    Returns material information saved in Direct3D (.x) files.

    +
    + +

    The and functions return an array of structures that specify the material color and name of the texture for each material in the mesh. The application is then required to load the texture.

    The LPD3DXMATERIAL type is defined as a reference to the structure.

     typedef struct * LPD3DXMATERIAL;	
    +            
    +
    + + bb172911 + D3DXMATERIAL + D3DXMATERIAL +
    + + +

    structure that describes the material properties.

    +
    + + bb172911 + D3DMATERIAL9 MatD3D + D3DMATERIAL9 MatD3D +
    + + +

    Pointer to a string that specifies the file name of the texture.

    +
    + + bb172911 + char* pTextureFilename + char pTextureFilename +
    + + +

    Defines the attributes of a font.

    +
    + +

    The compiler setting also determines the structure type. If Unicode is defined, the structure type resolves to a ; otherwise the structure type resolves to a D3DXFONT_DESCA.

    Possible values of the above members are given in the GDI structure.

    +
    + + bb172843 + D3DXFONT_DESCW + D3DXFONT_DESCW +
    + + +

    Height, in logical units, of the font's character cell or character.

    +
    + + bb172843 + int Height + int Height +
    + + +

    Width, in logical units, of characters in the font.

    +
    + + bb172843 + unsigned int Width + unsigned int Width +
    + + +

    Weight of the font in the range from 0 through 1000.

    +
    + + bb172843 + D3DX9_FONT_WEIGHT Weight + D3DX9_FONT_WEIGHT Weight +
    + + +

    Number of mip levels requested. If this value is zero or D3DX_DEFAULT, a complete mipmap chain is created. If the value is 1, the texture space is mapped identically to the screen space.

    +
    + + bb172843 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    Set to TRUE for an Italic font.

    +
    + + bb172843 + BOOL Italic + BOOL Italic +
    + + +

    Character set.

    +
    + + bb172843 + D3DX9_FONT_CHARSET CharSet + D3DX9_FONT_CHARSET CharSet +
    + + +

    Output precision. The output precision defines how closely the output must match the requested font height, width, character orientation, escapement, pitch, and font type.

    +
    + + bb172843 + D3DX9_FONT_PRECISION OutputPrecision + D3DX9_FONT_PRECISION OutputPrecision +
    + + +

    Output quality.

    +
    + + bb172843 + D3DX9_FONT_QUALITY Quality + D3DX9_FONT_QUALITY Quality +
    + + +

    Pitch and family of the font.

    +
    + + bb172843 + D3DX9_FONT_PITCHFAMILY PitchAndFamily + D3DX9_FONT_PITCHFAMILY PitchAndFamily +
    + + +

    A null-terminated string or characters that specifies the typeface name of the font. The length of the string must not exceed 32 characters, including the terminating null character. If FaceName is an empty string, the first font that matches the other specified attributes will be used. If the compiler settings require Unicode, the data type TCHAR resolves to WCHAR; otherwise, the data type resolves to CHAR. See Remarks.

    +
    + + bb172843 + wchar_t FaceName[32] + wchar_t FaceName +
    + + +

    Encapsulates a transform frame in a transformation frame hierarchy.

    +
    + +

    An application can derive from this structure to add other data.

    +
    + + bb172845 + D3DXFRAME + D3DXFRAME +
    + + +

    Name of the frame.

    +
    + + bb172845 + char* Name + char Name +
    + + +

    Transformation matrix.

    +
    + + bb172845 + D3DXMATRIX TransformationMatrix + D3DXMATRIX TransformationMatrix +
    + + +

    Pointer to the mesh container.

    +
    + + bb172845 + D3DXMESHCONTAINER* pMeshContainer + D3DXMESHCONTAINER pMeshContainer +
    + + +

    Pointer to a sibling frame.

    +
    + + bb172845 + D3DXFRAME* pFrameSibling + D3DXFRAME pFrameSibling +
    + + +

    Pointer to a child frame.

    +
    + + bb172845 + D3DXFRAME* pFrameFirstChild + D3DXFRAME pFrameFirstChild +
    + + + No documentation. + + + bb280311 + D3DXFUNCTION_DESC + D3DXFUNCTION_DESC + + + + No documentation. + + + bb280311 + const char* Name + char Name + + + + No documentation. + + + bb280311 + unsigned int Annotations + unsigned int Annotations + + + +

    Contains red, green, and blue ramp data.

    +
    + + bb172561 + D3DGAMMARAMP + D3DGAMMARAMP +
    + + +

    Array of 256 WORD element that describes the red gamma ramp.

    +
    + + bb172561 + unsigned short red[256] + unsigned short red +
    + + +

    Array of 256 WORD element that describes the green gamma ramp.

    +
    + + bb172561 + unsigned short green[256] + unsigned short green +
    + + +

    Array of 256 WORD element that describes the blue gamma ramp.

    +
    + + bb172561 + unsigned short blue[256] + unsigned short blue +
    + + +

    Returns a description of the original contents of an image file.

    +
    + + bb172879 + D3DXIMAGE_INFO + D3DXIMAGE_INFO +
    + + +

    Width of original image in pixels.

    +
    + + bb172879 + unsigned int Width + unsigned int Width +
    + + +

    Height of original image in pixels.

    +
    + + bb172879 + unsigned int Height + unsigned int Height +
    + + +

    Depth of original image in pixels.

    +
    + + bb172879 + unsigned int Depth + unsigned int Depth +
    + + +

    Number of mip levels in original image.

    +
    + + bb172879 + unsigned int MipLevels + unsigned int MipLevels +
    + + +

    A value from the enumerated type that most closely describes the data in the original image.

    +
    + + bb172879 + D3DFORMAT Format + D3DFORMAT Format +
    + + +

    Represents the type of the texture stored in the file. It is either , , or D3DRTYPE_CubeTexture.

    +
    + + bb172879 + D3DRESOURCETYPE ResourceType + D3DRESOURCETYPE ResourceType +
    + + +

    Represents the format of the image file.

    +
    + + bb172879 + D3DXIMAGE_FILEFORMAT ImageFileFormat + D3DXIMAGE_FILEFORMAT ImageFileFormat +
    + + + Retrieves information about a given image file on the disk. + + The filename. + A structure + HRESULT D3DXGetImageInfoFromFileInMemory([In] const void* pSrcData,[In] unsigned int SrcDataSize,[Out] D3DXIMAGE_INFO* pSrcInfo) + + + + Retrieves information about a given image file in memory. + + The memory. + A structure + HRESULT D3DXGetImageInfoFromFileInMemory([In] const void* pSrcData,[In] unsigned int SrcDataSize,[Out] D3DXIMAGE_INFO* pSrcInfo) + + + + Retrieves information about a given image file from a stream. + + The stream. + A structure + This method keeps the position of the stream + HRESULT D3DXGetImageInfoFromFileInMemory([In] const void* pSrcData,[In] unsigned int SrcDataSize,[Out] D3DXIMAGE_INFO* pSrcInfo) + + + + Retrieves information about a given image file from a stream. + + The stream. + if set to true preserve the stream position; false will move the stream pointer. + A structure + HRESULT D3DXGetImageInfoFromFileInMemory([In] const void* pSrcData,[In] unsigned int SrcDataSize,[Out] D3DXIMAGE_INFO* pSrcInfo) + + + +

    Describes an index buffer.

    +
    + + bb172563 + D3DINDEXBUFFER_DESC + D3DINDEXBUFFER_DESC +
    + + +

    Member of the enumerated type, describing the surface format of the index buffer data.

    +
    + + bb172563 + D3DFORMAT Format + D3DFORMAT Format +
    + + +

    Member of the enumerated type, identifying this resource as an index buffer.

    +
    + + bb172563 + D3DRESOURCETYPE Type + D3DRESOURCETYPE Type +
    + + +

    Combination of one or more of the following flags, specifying the usage for this resource.

    ValueMeaning

    Set to indicate that the index buffer content will never require clipping.

    Set to indicate that the index buffer requires dynamic memory use. This is useful for drivers because it enables them to decide where to place the buffer. In general, static index buffers are placed in video memory and dynamic index buffers are placed in AGP memory. Note that there is no separate static usage; if you do not specify the index buffer is made static. is strictly enforced through the and locking flags. As a result, and are only valid on index buffers created with ; they are not valid flags on static vertex buffers.

    For more information about using dynamic index buffers, see Using Dynamic Vertex and Index Buffers.

    Note that cannot be specified on managed index buffers. For more information, see Managing Resources (Direct3D 9).

    Set to indicate when the index buffer is to be used for drawing high-order primitives.

    Set to indicate when the index buffer is to be used for drawing N patches.

    Set to indicate when the index buffer is to be used for drawing point sprites or indexed point lists.

    Set to indicate that the buffer is to be used with software processing.

    Informs the system that the application writes only to the index buffer. Using this flag enables the driver to choose the best memory location for efficient write operations and rendering. Attempts to read from an index buffer that is created with this capability can result in degraded performance.

    ?

    +
    + + bb172563 + D3DUSAGE Usage + D3DUSAGE Usage +
    + + +

    Member of the enumerated type, specifying the class of memory allocated for this index buffer.

    +
    + + bb172563 + D3DPOOL Pool + D3DPOOL Pool +
    + + +

    Size of the index buffer, in bytes.

    +
    + + bb172563 + unsigned int Size + unsigned int Size +
    + + +

    Percent of time processing data in the driver. These statistics may help identify cases when the driver is waiting for other resources.

    +
    + +

    These metrics help identify when a driver is waiting and what it is waiting for. High percentages are not necessarily a problem.

    These system-global metrics may or may not be implemented. Depending on the specific hardware, these metrics may not support multiple queries simultaneously.

    +
    + + bb172541 + D3DDEVINFO_D3D9INTERFACETIMINGS + D3DDEVINFO_D3D9INTERFACETIMINGS +
    + + +

    Percentage of time the driver spent waiting for the GPU to finish using a locked resource (and wasn't specified).

    +
    + + bb172541 + float WaitingForGPUToUseApplicationResourceTimePercent + float WaitingForGPUToUseApplicationResourceTimePercent +
    + + +

    Percentage of time the driver spent waiting for the GPU to finish processing some commands before the driver could send more. This indicates the driver has run out of room to send commands to the GPU.

    +
    + + bb172541 + float WaitingForGPUToAcceptMoreCommandsTimePercent + float WaitingForGPUToAcceptMoreCommandsTimePercent +
    + + +

    Percentage of time the driver spent waiting for the GPU latency to reduce to less than three rendering frames.

    If an application is GPU-limited, the driver must stall the CPU until the GPU gets within three frames. This prevents an application from queuing up many seconds' worth of rendering calls which may dramatically increase the latency between when the user inputs new data and when the user sees the results of that input. In general, the driver can track the number of times Present is called to prevent queuing up more than three frames of rendering work.

    +
    + + bb172541 + float WaitingForGPUToStayWithinLatencyTimePercent + float WaitingForGPUToStayWithinLatencyTimePercent +
    + + +

    Percentage of time the driver spent waiting for a resource that cannot be pipelined (that is operated in parallel). An application may want to avoid using a non-pipelined resource for performance reasons.

    +
    + + bb172541 + float WaitingForGPUExclusiveResourceTimePercent + float WaitingForGPUExclusiveResourceTimePercent +
    + + +

    Percentage of time the driver spent waiting for other GPU processing.

    +
    + + bb172541 + float WaitingForGPUOtherTimePercent + float WaitingForGPUOtherTimePercent +
    + + +

    Defines a set of lighting properties.

    +
    + + bb172566 + D3DLIGHT9 + D3DLIGHT9 +
    + + +

    Type of the light source. This value is one of the members of the enumerated type.

    +
    + + bb172566 + D3DLIGHTTYPE Type + D3DLIGHTTYPE Type +
    + + +

    Diffuse color emitted by the light. This member is a structure.

    +
    + + bb172566 + D3DCOLORVALUE Diffuse + D3DCOLORVALUE Diffuse +
    + + +

    Specular color emitted by the light. This member is a structure.

    +
    + + bb172566 + D3DCOLORVALUE Specular + D3DCOLORVALUE Specular +
    + + +

    Ambient color emitted by the light. This member is a structure.

    +
    + + bb172566 + D3DCOLORVALUE Ambient + D3DCOLORVALUE Ambient +
    + + +

    Position of the light in world space, specified by a structure. This member has no meaning for directional lights and is ignored in that case.

    +
    + + bb172566 + D3DVECTOR Position + D3DVECTOR Position +
    + + +

    Direction that the light is pointing in world space, specified by a structure. This member has meaning only for directional and spotlights. This vector need not be normalized, but it should have a nonzero length.

    +
    + + bb172566 + D3DVECTOR Direction + D3DVECTOR Direction +
    + + +

    Distance beyond which the light has no effect. The maximum allowable value for this member is the square root of FLT_MAX. This member does not affect directional lights.

    +
    + + bb172566 + float Range + float Range +
    + + +

    Decrease in illumination between a spotlight's inner cone (the angle specified by Theta) and the outer edge of the outer cone (the angle specified by Phi).

    The effect of falloff on the lighting is subtle. Furthermore, a small performance penalty is incurred by shaping the falloff curve. For these reasons, most developers set this value to 1.0.

    +
    + + bb172566 + float Falloff + float Falloff +
    + + +

    Value specifying how the light intensity changes over distance. Attenuation values are ignored for directional lights. This member represents an attenuation constant. For information about attenuation, see Light Properties (Direct3D 9). Valid values for this member range from 0.0 to infinity. For non-directional lights, all three attenuation values should not be set to 0.0 at the same time.

    +
    + + bb172566 + float Attenuation0 + float Attenuation0 +
    + + +

    Value specifying how the light intensity changes over distance. Attenuation values are ignored for directional lights. This member represents an attenuation constant. For information about attenuation, see Light Properties (Direct3D 9). Valid values for this member range from 0.0 to infinity. For non-directional lights, all three attenuation values should not be set to 0.0 at the same time.

    +
    + + bb172566 + float Attenuation1 + float Attenuation1 +
    + + +

    Value specifying how the light intensity changes over distance. Attenuation values are ignored for directional lights. This member represents an attenuation constant. For information about attenuation, see Light Properties (Direct3D 9). Valid values for this member range from 0.0 to infinity. For non-directional lights, all three attenuation values should not be set to 0.0 at the same time.

    +
    + + bb172566 + float Attenuation2 + float Attenuation2 +
    + + +

    Angle, in radians, of a spotlight's inner cone - that is, the fully illuminated spotlight cone. This value must be in the range from 0 through the value specified by Phi.

    +
    + + bb172566 + float Theta + float Theta +
    + + +

    Angle, in radians, defining the outer edge of the spotlight's outer cone. Points outside this cone are not lit by the spotlight. This value must be between 0 and pi.

    +
    + + bb172566 + float Phi + float Phi +
    + + + No documentation. + + + bb280342 + D3DLOCKED_BOX + D3DLOCKED_BOX + + + + No documentation. + + + bb280342 + int RowPitch + int RowPitch + + + + No documentation. + + + bb280342 + int SlicePitch + int SlicePitch + + + + No documentation. + + + bb280342 + void* pBits + void pBits + + + +

    Describes a locked rectangular region.

    +
    + +

    The pitch for DXTn formats is different from what was returned in DirectX 7. It now refers to the number of bytes in a row of blocks. For example, if you have a width of 16, then you will have a pitch of 4 blocks (4*8 for DXT1, 4*16 for DXT2-5.)

    +
    + + bb172570 + D3DLOCKED_RECT + D3DLOCKED_RECT +
    + + +

    Number of bytes in one row of the surface.

    +
    + + bb172570 + int Pitch + int Pitch +
    + + +

    Pointer to the locked bits. If a was provided to the LockRect call, pBits will be appropriately offset from the start of the surface.

    +
    + + bb172570 + void* pBits + void pBits +
    + + +

    Describes preprocessor definitions used by an effect object.

    +
    + +

    To use s in more than one line, prefix each new line character with a backslash (like a #define in the C language). For example:

     sample=	
    +            macro.Name = "DO_CODE_BLOCK";	
    +            macro.Definition = "/* here is a block of code */\\\n" "{ do something ... }\\\n";	
    +            

    Notice the 3 backslash characters at the end of the line. The first two are required to output a single '\', followed by the newline character "\n". Optionally, you may also want to terminate your lines using "\\\r\n".

    +
    + + bb172910 + D3DXMACRO + D3DXMACRO +
    + + +

    Preprocessor name.

    +
    + + bb172910 + const char* Name + char Name +
    + + +

    Definition name.

    +
    + + bb172910 + const char* Definition + char Definition +
    + + + Initializes a new instance of the struct. + + The name. + The definition. + + + +

    Specifies material properties.

    +
    + +

    To turn off specular highlights, set to , using . This is the fastest option because no specular highlights will be calculated.

    For more information about using the lighting engine to calculate specular lighting, see Specular Lighting (Direct3D 9).

    +
    + + bb172571 + D3DMATERIAL9 + D3DMATERIAL9 +
    + + +

    Value specifying the diffuse color of the material. See .

    +
    + + bb172571 + D3DCOLORVALUE Diffuse + D3DCOLORVALUE Diffuse +
    + + +

    Value specifying the ambient color of the material. See .

    +
    + + bb172571 + D3DCOLORVALUE Ambient + D3DCOLORVALUE Ambient +
    + + +

    Value specifying the specular color of the material. See .

    +
    + + bb172571 + D3DCOLORVALUE Specular + D3DCOLORVALUE Specular +
    + + +

    Value specifying the emissive color of the material. See .

    +
    + + bb172571 + D3DCOLORVALUE Emissive + D3DCOLORVALUE Emissive +
    + + +

    Floating-point value specifying the sharpness of specular highlights. The higher the value, the sharper the highlight.

    +
    + + bb172571 + float Power + float Power +
    + + + No documentation. + + + bb280302 + D3DXMESHCONTAINER + D3DXMESHCONTAINER + + + + No documentation. + + + bb280302 + char* Name + char Name + + + + No documentation. + + + bb280302 + D3DXMESHDATA MeshData + D3DXMESHDATA MeshData + + + + No documentation. + + + bb280302 + D3DXMATERIAL* pMaterials + D3DXMATERIAL pMaterials + + + + No documentation. + + + bb280302 + D3DXEFFECTINSTANCE* pEffects + D3DXEFFECTINSTANCE pEffects + + + + No documentation. + + + bb280302 + unsigned int NumMaterials + unsigned int NumMaterials + + + + No documentation. + + + bb280302 + unsigned int* pAdjacency + unsigned int pAdjacency + + + + No documentation. + + + bb280302 + ID3DXSkinInfo* pSkinInfo + ID3DXSkinInfo pSkinInfo + + + + No documentation. + + + bb280302 + D3DXMESHCONTAINER* pNextMeshContainer + D3DXMESHCONTAINER pNextMeshContainer + + + + Gets or sets the materials. + + + The materials. + + + + +

    Mesh data structure.

    +
    + + bb205372 + D3DXMESHDATA + D3DXMESHDATA +
    + + +

    Defines the mesh data type. See .

    +
    + + bb205372 + D3DXMESHDATATYPE Type + D3DXMESHDATATYPE Type +
    + + +

    Pointer to a mesh. See .

    +
    + + bb205372 + ID3DXMesh* pMesh + ID3DXMesh pMesh +
    + + +

    Pointer to a patch mesh. See .

    +
    + + bb205372 + ID3DXPMesh* pPMesh + ID3DXPMesh pPMesh +
    + + +

    Pointer to a patch mesh. See .

    +
    + + bb205372 + ID3DXPatchMesh* pPatchMesh + ID3DXPatchMesh pPatchMesh +
    + + +

    Describes a parameter used for an effect object.

    +
    + + bb205379 + D3DXPARAMETER_DESC + D3DXPARAMETER_DESC +
    + + +

    Name of the parameter.

    +
    + + bb205379 + const char* Name + char Name +
    + + +

    Semantic meaning, also called the usage.

    +
    + + bb205379 + const char* Semantic + char Semantic +
    + + +

    Parameter class. Set this to one of the values in .

    +
    + + bb205379 + D3DXPARAMETER_CLASS Class + D3DXPARAMETER_CLASS Class +
    + + +

    Parameter type. Set this to one of the values in .

    +
    + + bb205379 + D3DXPARAMETER_TYPE Type + D3DXPARAMETER_TYPE Type +
    + + +

    Number of rows in the array.

    +
    + + bb205379 + unsigned int Rows + unsigned int Rows +
    + + +

    Number of columns in the array.

    +
    + + bb205379 + unsigned int Columns + unsigned int Columns +
    + + +

    Number of elements in the array.

    +
    + + bb205379 + unsigned int Elements + unsigned int Elements +
    + + +

    Number of annotations.

    +
    + + bb205379 + unsigned int Annotations + unsigned int Annotations +
    + + +

    Number of structure members.

    +
    + + bb205379 + unsigned int StructMembers + unsigned int StructMembers +
    + + +

    Parameter attributes. See Effect Constants.

    +
    + + bb205379 + unsigned int Flags + unsigned int Flags +
    + + +

    The size of the parameter, in bytes.

    +
    + + bb205379 + unsigned int Bytes + unsigned int Bytes +
    + + +

    Describes a pass for an effect object.

    +
    + + bb205381 + D3DXPASS_DESC + D3DXPASS_DESC +
    + + +

    String value used for the pass.

    +
    + + bb205381 + const char* Name + char Name +
    + + +

    Annotations are user-specific data that can be attached to any technique, pass, or parameter. See Add Information to Effect Parameters with_Annotations.

    +
    + + bb205381 + unsigned int Annotations + unsigned int Annotations +
    + + +

    Pointer to the vertex shader function. If an effect is created with , this structure will return a null reference when called by GetPassDesc.

    +
    + + bb205381 + const unsigned int* pVertexShaderFunction + unsigned int pVertexShaderFunction +
    + + +

    Pointer to the pixel shader function. If an effect is created with , this structure will return a null reference when called by GetPassDesc.

    +
    + + bb205381 + const unsigned int* pPixelShaderFunction + unsigned int pPixelShaderFunction +
    + + +

    Structure that contains the attributes of a patch mesh.

    +
    + +

    A mesh is a set of faces, each of which is described by a simple polygon. Objects can be created by connecting several meshes together. A patch mesh is constructed from patches. A patch is a four-sided piece of geometry constructed from curves. The type of curve used and the order of the curve can be varied so that the patch surface will fit almost any surface shape.

    The following types of patch combinations are supported:

    Patch TypeBasisDegree
    RectangleBezier2,3,5
    RectangleB-Spline2,3,5
    RectangleCatmull-Rom3
    TriangleBezier2,3,5
    N-patchN/A3

    ?

    +
    + + bb205382 + D3DXPATCHINFO + D3DXPATCHINFO +
    + + +

    The patch type. For information about patch types, see .

    +
    + + bb205382 + D3DXPATCHMESHTYPE PatchType + D3DXPATCHMESHTYPE PatchType +
    + + +

    Degree of the curves used to construct the patch. For information about the degrees supported, see .

    +
    + + bb205382 + D3DDEGREETYPE Degree + D3DDEGREETYPE Degree +
    + + +

    Type of curve used to construct the patch. For information about the basis types supported, see .

    +
    + + bb205382 + D3DBASISTYPE Basis + D3DBASISTYPE Basis +
    + + +

    Percent of time processing data in the pipeline.

    +
    + +

    For best performance, a balanced load is recommended.

    +
    + + bb172542 + D3DDEVINFO_D3D9PIPELINETIMINGS + D3DDEVINFO_D3D9PIPELINETIMINGS +
    + + +

    Percent of time spent running vertex shaders.

    +
    + + bb172542 + float VertexProcessingTimePercent + float VertexProcessingTimePercent +
    + + +

    Percent of time spent running pixel shaders.

    +
    + + bb172542 + float PixelProcessingTimePercent + float PixelProcessingTimePercent +
    + + +

    Percent of time spent doing other processing.

    +
    + + bb172542 + float OtherGPUProcessingTimePercent + float OtherGPUProcessingTimePercent +
    + + +

    Percent of time not processing anything.

    +
    + + bb172542 + float GPUIdleTimePercent + float GPUIdleTimePercent +
    + + +

    Pixel shader driver caps.

    +
    + + bb172591 + D3DPSHADERCAPS2_0 + D3DPSHADERCAPS2_0 +
    + + +

    Instruction predication is supported if this value is nonzero. See setp_comp - vs.

    +
    + + bb172591 + D3DPS20CAPS Caps + D3DPS20CAPS Caps +
    + + +

    Either 0 or 24, which represents the depth of the dynamic flow control instruction nesting. See .

    +
    + + bb172591 + int DynamicFlowControlDepth + int DynamicFlowControlDepth +
    + + +

    The number of temporary registers supported. See .

    +
    + + bb172591 + int NumTemps + int NumTemps +
    + + +

    The depth of nesting of the loop - vs/rep - vs and call - vs/callnz bool - vs instructions. See .

    +
    + + bb172591 + int StaticFlowControlDepth + int StaticFlowControlDepth +
    + + +

    The number of instruction slots supported. See .

    +
    + + bb172591 + int NumInstructionSlots + int NumInstructionSlots +
    + + +

    Describes swapchain statistics relating to PresentEx calls.

    +
    + +

    When a 9Ex application adopts Flip Mode present (), applications can detect frame dropping by calling GetPresentStatistics at any point in time. In effect, they can do the following.

    1. Render to the back buffer
    2. Call Present
    3. Call GetPresentStats and store the resulting structure
    4. Render the next frame to the back buffer
    5. Call Present
    6. Repeat steps 4 and 5 one or more times
    7. Call GetPresentStats and store the resulting structure
    8. Compare the values of PresentRefreshCount from the two stored structures. The application can calculate the corresponding PresentRefreshCount of a particular PresentCount parameter based on the assumptions of PresentRefreshCount increment and PresentCount assignment of frame presents. If the PresentRefreshCount last sampled does not match the PresentCount (i.e. if the PresentRefreshCount has incremented but PresentCount has not, then there was frame dropping.)

    Applications can determine whether a frame has been dropped by sampling any two instances of PresentCount and GetPresentStats (by calling GetPresentStats API at any two points in time). For example, a media application that is presenting at the same rate as the monitor refresh rate (for example, monitor refresh rate is 60Hz, the application presents a frame every 1/60 seconds) wants to present frames A, B, C, D, E, each corresponding to Present IDs (PresentCount) 1, 2, 3, 7, 8.

    The application code looks like the following sequence.

    1. Render frame A to the back buffer
    2. Call Present, PresentCount = 1
    3. Call GetPresentStats and store the resulting structure
    4. Render the next 4 frames, B, C, D, E, respectively
    5. Call Present 4 times, PresentCounts = 2, 3, 7, 8, respectively
    6. Call GetPresentStats and store the resulting structure
    7. Compare the values of PresentRefreshCount from the two stored structures. If the difference is 2, i.e. 2 vblank intervals has elapsed between the two GetPresentStats API calls, then the last presented frame should be frame C. Because the application presents once very vblank interval (the refresh rate of the monitor), the time elapsed between when frame A is presented and when frame C is presented should be 2 vblanks.
    8. Compare the values of PresentCount from the two stored structures. If the first PresentCount is 1 (corresponding to frame A) and the second PresentCount is 3 (corresponding to frame C), then no frames have been dropped. If the second PresentCount is 3, which corresponds to frame D, then the application knows that one frame has been dropped.

    Note that GetPresentStatistics will be processed after it is called, regardless of the state of FLIPEX mode PresentEx calls.

    Windows?Vista:??The Present calls will be queued and then processed before GetPresentStats call will be processed.

    When an application detects that the presentation of certain frames are behind, it can skip those frames and correct the presentation to re-synchronize with the vblank. To do this, an application can simply not render the late frames and start rendering with the next correct frame in the queue. However, if an application has already started the rendering of late frames, it can use a new Present parameter in D3D9Ex called . The flag will be passed in the parameters of Present API call and indicates to the runtime that the frame will be processed immediately within the next vblank interval, effectively not visible on screen at all. Here is the application usage example after the last step in the previous example.

    1. Render the next frame to the back buffer
    2. Discover from PresentRefreshCount that the next frame is already late
    3. Set Present interval to
    4. Call Present on the next frame

    Applications can synchronize video and audio streams in the same manner because the behavior of GetPresentStatistics does not change in that scenario.

    D3D9Ex Flip Mode provides frame statistics information to windowed applications and full screen 9Ex applications.

    Windows?Vista:??Use the DWM APIs for retrieving present statistics.

    When Desktop Window Manager is turned off, windowed mode 9Ex applications using flip mode will receive present statistics information of limited accuracy.

    Windows?Vista:??

    If an application is not fast enough to keep up with the monitor's refresh rate, possibly due to slow hardware or lack of system resources, then it can experience a graphics glitch. A glitch is a so-called visual hiccup. If a monitor is set to refresh at 60 Hz, and the application can only manage 30 fps, then half of the frames will have glitches.

    Applications can detect a glitch by keeping track of SynchRefreshCount. For example, an application might perform the following sequence of actions.

    1. Render to the back buffer.
    2. Call Present.
    3. Call GetPresentStats and store the resulting structure.
    4. Render the next frame to the back buffer.
    5. Call Present.
    6. Call GetPresentStats and store the resulting structure.
    7. Compare the values of SyncRefreshCount from the two stored structures. If the difference is greater than one, then a frame was skipped.
    +
    + + bb172587 + D3DPRESENTSTATS + D3DPRESENTSTATS +
    + + + No documentation. + + + bb172587 + unsigned int PresentCount + unsigned int PresentCount + + + + No documentation. + + + bb172587 + unsigned int PresentRefreshCount + unsigned int PresentRefreshCount + + + + No documentation. + + + bb172587 + unsigned int SyncRefreshCount + unsigned int SyncRefreshCount + + + + No documentation. + + + bb172587 + LARGE_INTEGER SyncQPCTime + LARGE_INTEGER SyncQPCTime + + + + No documentation. + + + bb172587 + LARGE_INTEGER SyncGPUTime + LARGE_INTEGER SyncGPUTime + + + +

    Describes the presentation parameters.

    +
    + + bb172588 + D3DPRESENT_PARAMETERS + D3DPRESENT_PARAMETERS +
    + + +

    Width of the new swap chain's back buffers, in pixels. If Windowed is (the presentation is full-screen), this value must equal the width of one of the enumerated display modes found through EnumAdapterModes. If Windowed is TRUE and either BackBufferWidth or BackBufferHeight is zero, the corresponding dimension of the client area of the hDeviceWindow (or the focus window, if hDeviceWindow is null) is taken.

    +
    + + bb172588 + unsigned int BackBufferWidth + unsigned int BackBufferWidth +
    + + +

    Height of the new swap chain's back buffers, in pixels. If Windowed is (the presentation is full-screen), this value must equal the height of one of the enumerated display modes found through EnumAdapterModes. If Windowed is TRUE and either BackBufferWidth or BackBufferHeight is zero, the corresponding dimension of the client area of the hDeviceWindow (or the focus window, if hDeviceWindow is null) is taken.

    +
    + + bb172588 + unsigned int BackBufferHeight + unsigned int BackBufferHeight +
    + + +

    The back buffer format. For more information about formats, see . This value must be one of the render-target formats as validated by CheckDeviceType. You can use GetDisplayMode to obtain the current format.

    In fact, can be specified for the BackBufferFormat while in windowed mode. This tells the runtime to use the current display-mode format and eliminates the need to call GetDisplayMode.

    For windowed applications, the back buffer format no longer needs to match the display-mode format because color conversion can now be done by the hardware (if the hardware supports color conversion). The set of possible back buffer formats is constrained, but the runtime will allow any valid back buffer format to be presented to any desktop format. (There is the additional requirement that the device be operable in the desktop; devices typically do not operate in 8 bits per pixel modes.)

    Full-screen applications cannot do color conversion.

    +
    + + bb172588 + D3DFORMAT BackBufferFormat + D3DFORMAT BackBufferFormat +
    + + +

    This value can be between 0 and (or when using Direct3D 9Ex). Values of 0 are treated as 1. If the number of back buffers cannot be created, the runtime will fail the method call and fill this value with the number of back buffers that could be created. As a result, an application can call the method twice with the same structure and expect it to work the second time.

    The method fails if one back buffer cannot be created. The value of BackBufferCount influences what set of swap effects are allowed. Specifically, any swap effect requires that there be exactly one back buffer.

    +
    + + bb172588 + unsigned int BackBufferCount + unsigned int BackBufferCount +
    + + +

    Member of the enumerated type. The value must be unless SwapEffect has been set to . Multisampling is supported only if the swap effect is .

    +
    + + bb172588 + D3DMULTISAMPLE_TYPE MultiSampleType + D3DMULTISAMPLE_TYPE MultiSampleType +
    + + +

    Quality level. The valid range is between zero and one less than the level returned by pQualityLevels used by CheckDeviceMultiSampleType. Passing a larger value returns the error . Paired values of render targets or of depth stencil surfaces and must match.

    +
    + + bb172588 + unsigned int MultiSampleQuality + unsigned int MultiSampleQuality +
    + + +

    Member of the enumerated type. The runtime will guarantee the implied semantics concerning buffer swap behavior; therefore, if Windowed is TRUE and SwapEffect is set to , the runtime will create one extra back buffer and copy whichever becomes the front buffer at presentation time.

    requires that BackBufferCount be set to 1.

    will be enforced in the debug runtime by filling any buffer with noise after it is presented.

    Differences between Direct3D9 and Direct3D9Ex

    In Direct3D9Ex, is added to designate when an application is adopting flip mode. That is, whan an application's frame is passed in window's mode (instead of copied) to the Desktop Window Manager(DWM) for composition. Flip mode provides more efficient memory bandwidth and enables an application to take advantage of full-screen-present statistics. It does not change full screen behavior. Flip mode behavior is available beginning with Windows 7.

    ?

    +
    + + bb172588 + D3DSWAPEFFECT SwapEffect + D3DSWAPEFFECT SwapEffect +
    + + +

    The device window determines the location and size of the back buffer on screen. This is used by Direct3D when the back buffer contents are copied to the front buffer during Present.

    • For a full-screen application, this is a handle to the top window (which is the focus window).

      For applications that use multiple full-screen devices (such as a multimonitor system), exactly one device can use the focus window as the device window. All other devices must have unique device windows.

    • For a windowed-mode application, this handle will be the default target window for Present. If this handle is null, the focus window will be taken.

    Note that no attempt is made by the runtime to reflect user changes in window size. The back buffer is not implicitly reset when this window is reset. However, the Present method does automatically track window position changes.

    +
    + + bb172588 + HWND hDeviceWindow + HWND hDeviceWindow +
    + + +

    TRUE if the application runs windowed; if the application runs full-screen.

    +
    + + bb172588 + BOOL Windowed + BOOL Windowed +
    + + +

    If this value is TRUE, Direct3D will manage depth buffers for the application. The device will create a depth-stencil buffer when it is created. The depth-stencil buffer will be automatically set as the render target of the device. When the device is reset, the depth-stencil buffer will be automatically destroyed and recreated in the new size.

    If EnableAutoDepthStencil is TRUE, then AutoDepthStencilFormat must be a valid depth-stencil format.

    +
    + + bb172588 + BOOL EnableAutoDepthStencil + BOOL EnableAutoDepthStencil +
    + + +

    Member of the enumerated type. The format of the automatic depth-stencil surface that the device will create. This member is ignored unless EnableAutoDepthStencil is TRUE.

    +
    + + bb172588 + D3DFORMAT AutoDepthStencilFormat + D3DFORMAT AutoDepthStencilFormat +
    + + +

    One of the constants.

    +
    + + bb172588 + D3DPRESENTFLAG Flags + D3DPRESENTFLAG Flags +
    + + +

    The rate at which the display adapter refreshes the screen. The value depends on the mode in which the application is running:

    • For windowed mode, the refresh rate must be 0.
    • For full-screen mode, the refresh rate is one of the refresh rates returned by EnumAdapterModes.
    +
    + + bb172588 + unsigned int FullScreen_RefreshRateInHz + unsigned int FullScreen_RefreshRateInHz +
    + + +

    The maximum rate at which the swap chain's back buffers can be presented to the front buffer. For a detailed explanation of the modes and the intervals that are supported, see .

    +
    + + bb172588 + D3DPRESENT_INTERVAL PresentationInterval + D3DPRESENT_INTERVAL PresentationInterval +
    + + + Initializes a new instance of the struct. + + Width of the back buffer. + Height of the back buffer. + + + + Initializes a new instance of the struct. + + Width of the back buffer. + Height of the back buffer. + The back buffer format. + The back buffer count. + Type of the multi sample. + The multi sample quality. + The swap effect. + The device window handle. + if set to true [windowed]. + if set to true [enable auto depth stencil]. + The auto depth stencil format. + The present flags. + The full screen refresh rate in Hz. + The presentation interval. + + + + Init this structure to defaults + + + + +

    Describes the raster status.

    +
    + + bb172596 + D3DRASTER_STATUS + D3DRASTER_STATUS +
    + + +

    TRUE if the raster is in the vertical blank period. if the raster is not in the vertical blank period.

    +
    + + bb172596 + BOOL InVBlank + BOOL InVBlank +
    + + +

    If InVBlank is , then this value is an integer roughly corresponding to the current scan line painted by the raster. Scan lines are numbered in the same way as Direct3D surface coordinates: 0 is the top of the primary surface, extending to the value (height of the surface - 1) at the bottom of the display.

    If InVBlank is TRUE, then this value is set to zero and can be ignored.

    +
    + + bb172596 + unsigned int ScanLine + unsigned int ScanLine +
    + + +

    Describes a rectangular high-order patch.

    +
    + +

    The following diagram identifies the parameters that specify a rectangle patch.

    Each of the vertices in the vertex buffer is shown as a black dot. In this case, the vertex buffer has 20 vertices in it, 16 of which are in the rectangle patch. The stride is the number of vertices in the width of the vertex buffer, in this case five. The x offset to the first vertex is called the StartIndexVertexWidth and is in this case 1. The y offset to the first patch vertex is called the StartIndexVertexHeight and is in this case 0.

    To render a stream of individual rectangular patches (non-mosaic), you should interpret your geometry as a long narrow (1 x N) rectangular patch. The structure for such a strip (cubic B?zier) would be set up in the following manner.

      RectInfo; RectInfo.Width = 4;	
    +            RectInfo.Height = 4;	
    +            RectInfo.Stride = 4;	
    +            RectInfo.Basis = ;	
    +            RectInfo.Order = D3DORDER_CUBIC;	
    +            RectInfo.StartVertexOffsetWidth = 0;	
    +            RectInfo.StartVertexOffsetHeight = 4*i;  // The variable i is the index of the 	
    +            //   patch you want to render.	
    +            
    +
    + + bb172598 + D3DRECTPATCH_INFO + D3DRECTPATCH_INFO +
    + + +

    Starting vertex offset width, in number of vertices.

    +
    + + bb172598 + unsigned int StartVertexOffsetWidth + unsigned int StartVertexOffsetWidth +
    + + +

    Starting vertex offset height, in number of vertices.

    +
    + + bb172598 + unsigned int StartVertexOffsetHeight + unsigned int StartVertexOffsetHeight +
    + + +

    Width of each vertex, in number of vertices.

    +
    + + bb172598 + unsigned int Width + unsigned int Width +
    + + +

    Height of each vertex, in number of vertices.

    +
    + + bb172598 + unsigned int Height + unsigned int Height +
    + + +

    Width of the imaginary two-dimensional vertex array, which occupies the same space as the vertex buffer. For an example, see the diagram below.

    +
    + + bb172598 + unsigned int Stride + unsigned int Stride +
    + + +

    Member of the enumerated type, defining the basis type for the rectangular high-order patch.

    ValueOrder supportedWidth and height
    Linear, cubic, and quinticWidth = height = (DWORD)order + 1
    Linear, cubic, and quinticWidth = height > (DWORD)order
    D3DBASIS_INTERPOLATECubicWidth = height > (DWORD)order

    ?

    +
    + + bb172598 + D3DBASISTYPE Basis + D3DBASISTYPE Basis +
    + + +

    Member of the enumerated type, defining the degree for the rectangular patch.

    +
    + + bb172598 + D3DDEGREETYPE Degree + D3DDEGREETYPE Degree +
    + + +

    Describes an off-screen render target used by an instance of .

    +
    + +

    This method is used to return the creation parameters used when creating an object.

    +
    + + bb205425 + D3DXRTE_DESC + D3DXRTE_DESC +
    + + + No documentation. + + + bb205425 + unsigned int Size + unsigned int Size + + + + No documentation. + + + bb205425 + unsigned int MipLevels + unsigned int MipLevels + + + + No documentation. + + + bb205425 + D3DFORMAT Format + D3DFORMAT Format + + + + No documentation. + + + bb205425 + BOOL DepthStencil + BOOL DepthStencil + + + + No documentation. + + + bb205425 + D3DFORMAT DepthStencilFormat + D3DFORMAT DepthStencilFormat + + + +

    Describes a render surface.

    +
    + + bb205426 + D3DXRTS_DESC + D3DXRTS_DESC +
    + + +

    Width of the render surface, in pixels.

    +
    + + bb205426 + unsigned int Width + unsigned int Width +
    + + +

    Height of the render surface, in pixels.

    +
    + + bb205426 + unsigned int Height + unsigned int Height +
    + + +

    Member of the enumerated type, describing the pixel format of the render surface.

    +
    + + bb205426 + D3DFORMAT Format + D3DFORMAT Format +
    + + +

    If TRUE, the render surface supports a depth-stencil surface; otherwise this member is set to .

    +
    + + bb205426 + BOOL DepthStencil + BOOL DepthStencil +
    + + +

    If DepthStencil is set to TRUE, this parameter is a member of the enumerated type, describing the depth-stencil format of the render surface.

    +
    + + bb205426 + D3DFORMAT DepthStencilFormat + D3DFORMAT DepthStencilFormat +
    + + + No documentation. + + + bb280347 + D3DDEVINFO_RESOURCEMANAGER + D3DDEVINFO_RESOURCEMANAGER + + + + No documentation. + + + bb280347 + D3DRESOURCESTATS stats[8] + D3DRESOURCESTATS stats + + + +

    Resource statistics gathered by the D3DDEVINFO_ResourceManager when using the asynchronous query mechanism.

    +
    + + bb172600 + D3DRESOURCESTATS + D3DRESOURCESTATS +
    + + + No documentation. + + + bb172600 + BOOL bThrashing + BOOL bThrashing + + + + No documentation. + + + bb172600 + unsigned int ApproxBytesDownloaded + unsigned int ApproxBytesDownloaded + + + + No documentation. + + + bb172600 + unsigned int NumEvicts + unsigned int NumEvicts + + + + No documentation. + + + bb172600 + unsigned int NumVidCreates + unsigned int NumVidCreates + + + + No documentation. + + + bb172600 + unsigned int LastPri + unsigned int LastPri + + + + No documentation. + + + bb172600 + unsigned int NumUsed + unsigned int NumUsed + + + + No documentation. + + + bb172600 + unsigned int NumUsedInVidMem + unsigned int NumUsedInVidMem + + + + No documentation. + + + bb172600 + unsigned int WorkingSet + unsigned int WorkingSet + + + + No documentation. + + + bb172600 + unsigned int WorkingSetBytes + unsigned int WorkingSetBytes + + + + No documentation. + + + bb172600 + unsigned int TotalManaged + unsigned int TotalManaged + + + + No documentation. + + + bb172600 + unsigned int TotalBytes + unsigned int TotalBytes + + + + No documentation. + + + bb280307 + D3DXKEY_QUATERNION + D3DXKEY_QUATERNION + + + + No documentation. + + + bb280307 + float Time + float Time + + + + No documentation. + + + bb280307 + D3DXQUATERNION Value + D3DXQUATERNION Value + + + +

    Describes a vector key for use in key frame animation. It specifies a vector at a given time. This is used for scale and translation keys.

    +
    + + bb172889 + D3DXKEY_VECTOR3 + D3DXKEY_VECTOR3 +
    + + +

    Key frame time stamp.

    +
    + + bb172889 + float Time + float Time +
    + + +

    3D vector that supplies scale and/or translation values.

    +
    + + bb172889 + D3DXVECTOR3 Value + D3DXVECTOR3 Value +
    + + + No documentation. + + + bb205439 + D3DXSHADER_CONSTANTINFO + D3DXSHADER_CONSTANTINFO + + + +

    Offset from the beginning of this structure, in bytes, to the string that contains the constant information.

    +
    + + bb205439 + unsigned int Name + unsigned int Name +
    + + +

    Register set. See .

    +
    + + bb205439 + unsigned short RegisterSet + unsigned short RegisterSet +
    + + +

    The register index.

    +
    + + bb205439 + unsigned short RegisterIndex + unsigned short RegisterIndex +
    + + +

    Number of registers.

    +
    + + bb205439 + unsigned short RegisterCount + unsigned short RegisterCount +
    + + +

    Reserved.

    +
    + + bb205439 + unsigned short Reserved + unsigned short Reserved +
    + + +

    Offset from the beginning of this structure, in bytes, to the string that contains the D3DXSHADER_TYPEINFO information.

    +
    + + bb205439 + unsigned int TypeInfo + unsigned int TypeInfo +
    + + +

    Offset from the beginning of this structure, in bytes, to the string that contains the default value.

    +
    + + bb205439 + unsigned int DefaultValue + unsigned int DefaultValue +
    + + +

    Helper structure for managing a shader constant table. This can also be done using .

    +
    + +

    Shader constant information is included in a tab-delimited table of comments. All offsets are measured in bytes from the beginning of the structure. Entries in the constant table are sorted by Creator in ascending order.

    A shader constant table can be managed with the interfaces. Alternatively, you can manage the constant table with .

    This size member is often initialized using the following:

      constantTable;	
    +            constantTable.Size = sizeof()	
    +            
    +
    + + bb205440 + D3DXSHADER_CONSTANTTABLE + D3DXSHADER_CONSTANTTABLE +
    + + + No documentation. + + + bb205440 + unsigned int Size + unsigned int Size + + + + No documentation. + + + bb205440 + unsigned int Creator + unsigned int Creator + + + + No documentation. + + + bb205440 + unsigned int Version + unsigned int Version + + + + No documentation. + + + bb205440 + unsigned int Constants + unsigned int Constants + + + + No documentation. + + + bb205440 + unsigned int ConstantInfo + unsigned int ConstantInfo + + + + No documentation. + + + bb205440 + unsigned int Flags + unsigned int Flags + + + + No documentation. + + + bb205440 + unsigned int Target + unsigned int Target + + + +

    Semantics map a parameter to vertex or pixel shader registers. They can also be optional descriptive strings attached to non-register parameters.

    +
    + +

    Semantics are required for vertex and pixel shader, input and output registers.

    +
    + + bb205437 + D3DXSEMANTIC + D3DXSEMANTIC +
    + + +

    Options that identify how resources are used. See .

    +
    + + bb205437 + D3DDECLUSAGE Usage + D3DDECLUSAGE Usage +
    + + +

    Options that modify how the usage is interpreted. The usage and usage index make up a vertex declaration. See Vertex Declaration (Direct3D 9).

    +
    + + bb205437 + unsigned int UsageIndex + unsigned int UsageIndex +
    + + +

    Percent of time processing shader data.

    +
    + +

    For best performance, a balanced load is recommended.

    +
    + + bb172543 + D3DDEVINFO_D3D9STAGETIMINGS + D3DDEVINFO_D3D9STAGETIMINGS +
    + + +

    Percent of time in shader spent on memory accesses.

    +
    + + bb172543 + float MemoryProcessingPercent + float MemoryProcessingPercent +
    + + +

    Percent of time processing (moving data around in registers or doing mathematical operations).

    +
    + + bb172543 + float ComputationProcessingPercent + float ComputationProcessingPercent +
    + + +

    Describes a surface.

    +
    + + bb172611 + D3DSURFACE_DESC + D3DSURFACE_DESC +
    + + +

    Member of the enumerated type, describing the surface format.

    +
    + + bb172611 + D3DFORMAT Format + D3DFORMAT Format +
    + + +

    Member of the enumerated type, identifying this resource as a surface.

    +
    + + bb172611 + D3DRESOURCETYPE Type + D3DRESOURCETYPE Type +
    + + +

    Either the or values. For more information, see .

    +
    + + bb172611 + D3DUSAGE Usage + D3DUSAGE Usage +
    + + +

    Member of the enumerated type, specifying the class of memory allocated for this surface.

    +
    + + bb172611 + D3DPOOL Pool + D3DPOOL Pool +
    + + +

    Member of the enumerated type, specifying the levels of full-scene multisampling supported by the surface.

    +
    + + bb172611 + D3DMULTISAMPLE_TYPE MultiSampleType + D3DMULTISAMPLE_TYPE MultiSampleType +
    + + +

    Quality level. The valid range is between zero and one less than the level returned by pQualityLevels used by CheckDeviceMultiSampleType. Passing a larger value returns the error, . The MultisampleQuality values of paired render targets, depth stencil surfaces and the MultiSample type must all match.

    +
    + + bb172611 + unsigned int MultiSampleQuality + unsigned int MultiSampleQuality +
    + + +

    Width of the surface, in pixels.

    +
    + + bb172611 + unsigned int Width + unsigned int Width +
    + + +

    Height of the surface, in pixels.

    +
    + + bb172611 + unsigned int Height + unsigned int Height +
    + + +

    Describes a technique used by an effect.

    +
    + +

    Some video cards can render two textures in a single pass. However, if a card does not have this capability, it is often possible to render the same effect in two passes, using one texture for each pass.

    +
    + + bb205468 + D3DXTECHNIQUE_DESC + D3DXTECHNIQUE_DESC +
    + + +

    String that contains the technique name.

    +
    + + bb205468 + const char* Name + char Name +
    + + +

    Number of rendering passes the technique requires. See Remarks.

    +
    + + bb205468 + unsigned int Passes + unsigned int Passes +
    + + +

    The number of annotations. See Add Information to Effect Parameters with_Annotations.

    +
    + + bb205468 + unsigned int Annotations + unsigned int Annotations +
    + + +

    Describes an animation track and specifies blending weight, speed, and position for the track at a given time.

    +
    + +

    Tracks with the same priority are blended together, and the two resulting values are then blended using the priority blend factor. A track must have an animation set (stored separately) associated with it.

    +
    + + bb205474 + D3DXTRACK_DESC + D3DXTRACK_DESC +
    + + +

    Priority type, as defined in .

    +
    + + bb205474 + D3DXPRIORITY_TYPE Priority + D3DXPRIORITY_TYPE Priority +
    + + +

    Weight value. The weight determines the proportion of this track to blend with other tracks.

    +
    + + bb205474 + float Weight + float Weight +
    + + +

    Speed value. This is used similarly to a multiplier to scale the period of the track.

    +
    + + bb205474 + float Speed + float Speed +
    + + +

    Time position of the track, in the local timeframe of its current animation set.

    +
    + + bb205474 + double Position + double Position +
    + + +

    Track enable/disable. To enable, set to TRUE. To disable, set to .

    +
    + + bb205474 + BOOL Enable + BOOL Enable +
    + + +

    Describes a triangular high-order patch.

    +
    + +

    For example, the following diagram identifies the vertex order and segment numbers for a cubic B?zier triangle patch. The vertex order determines the segment numbers used by DrawTriPatch. The offset is the number of bytes to the first triangle patch vertex in the vertex buffer.

    +
    + + bb172620 + D3DTRIPATCH_INFO + D3DTRIPATCH_INFO +
    + + +

    Starting vertex offset, in number of vertices.

    +
    + + bb172620 + unsigned int StartVertexOffset + unsigned int StartVertexOffset +
    + + +

    Number of vertices.

    +
    + + bb172620 + unsigned int NumVertices + unsigned int NumVertices +
    + + +

    Member of the enumerated type, which defines the basis type for the triangular high-order patch. The only valid value for this member is .

    +
    + + bb172620 + D3DBASISTYPE Basis + D3DBASISTYPE Basis +
    + + +

    Member of the enumerated type, defining the degree type for the triangular high-order patch.

    ValueNumber of vertices
    10
    3
    N/A
    21

    ?

    N/A - Not available. Not supported.

    +
    + + bb172620 + D3DDEGREETYPE Degree + D3DDEGREETYPE Degree +
    + + +

    DirectX 8.1 and later versions only.

    The structure describes vertex-cache information of a device.

    +
    + +

    DirectX 8.1 versions only. The Direct3D runtime calls a driver's D3dGetDriverState function to obtain vertex-cache information from the driver. In this D3dGetDriverState call, the runtime specifies the D3DDEVINFOID_VCACHE flag in the dwFlags member of the DD_GETDRIVERSTATEDATA structure that the runtime passes. The driver specifies vertex-cache information in a structure and returns it at the lpdwStates member of DD_GETDRIVERSTATEDATA.

    DirectX 9.0 and later versions only. The Direct3D runtime specifies D3DDP2OP_CREATEQUERY and D3DDP2OP_ISSUEQUERY commands in calls to the driver's D3dDrawPrimitives2 callback to create driver-side resources for the query and then to asynchronously query the driver for vertex-cache information. In the call with the D3DDP2OP_CREATEQUERY command, the runtime specifies the query type in the QueryType member of the D3DHAL_DP2CREATEQUERY structure.

    When the driver completes a vertex-cache query, the driver sets the total size of the response buffer in the dwErrorOffset member of the D3DHAL_DRAWPRIMITIVES2DATA structure and sets the ddrval member of D3DHAL_DRAWPRIMITIVES2DATA to for successful completion. The driver also overwrites the incoming command buffer with the outgoing response buffer. This response buffer contains a D3DHAL_DP2RESPONSEQUERY structure that identifies a response for the vertex-cache query. This D3DHAL_DP2RESPONSEQUERY is followed by the vertex-cache data in the structure.

    +
    + + ff544702 + D3DDEVINFO_VCACHE + D3DDEVINFO_VCACHE +
    + + +

    Specifies the bit pattern. The driver must specify the bit pattern as the CACH four-character code (FOURCC) value. The driver can use the MAKEFOURCC macro as follows to specify the FOURCC value as CACH:

    MAKEFOURCC('C', 'A', 'C', 'H');
    +
    + + ff544702 + unsigned int Pattern + unsigned int Pattern +
    + + +

    Specifies the method of mesh optimization. The driver can use one of the following values to specify the mesh optimization that it uses:

    ValueMeaning

    (0)

    Longest strips optimization

    D3DXMESHOPT_VCACHE (1)

    Vertex-cache based optimization

    ?

    +
    + + ff544702 + unsigned int OptMethod + unsigned int OptMethod +
    + + +

    Specifies the effective size, in entries, for which the driver optimizes the vertex cache. The actual cache size is not required to be the size specified in CacheSize because in most cases the actual cache size turns out to be larger. The driver only specifies an optimized size in CacheSize if it also specifies D3DXMESHOPT_VCACHE in the OptMethod member.

    +
    + + ff544702 + unsigned int CacheSize + unsigned int CacheSize +
    + + +

    Specifies the number that should be used as part of a trial-and-error procedure when determining when to restart the strips list. This number can be set from 1 to the value in the CacheSize member. Typically, the best values are near CacheSize/2.

    +
    + + ff544702 + unsigned int MagicNumber + unsigned int MagicNumber +
    + + +

    Describes a vertex buffer.

    +
    + + bb172629 + D3DVERTEXBUFFER_DESC + D3DVERTEXBUFFER_DESC +
    + + +

    Member of the enumerated type, describing the surface format of the vertex buffer data.

    +
    + + bb172629 + D3DFORMAT Format + D3DFORMAT Format +
    + + +

    Member of the enumerated type, identifying this resource as a vertex buffer.

    +
    + + bb172629 + D3DRESOURCETYPE Type + D3DRESOURCETYPE Type +
    + + +

    Combination of one or more flags.

    +
    + + bb172629 + D3DUSAGE Usage + D3DUSAGE Usage +
    + + +

    Member of the enumerated type, specifying the class of memory allocated for this vertex buffer.

    +
    + + bb172629 + D3DPOOL Pool + D3DPOOL Pool +
    + + +

    Size of the vertex buffer, in bytes.

    +
    + + bb172629 + unsigned int Size + unsigned int Size +
    + + +

    Combination of that describes the vertex format of the vertices in this buffer.

    +
    + + bb172629 + D3DFVF FVF + D3DFVF FVF +
    + + +

    Defines the vertex data layout. Each vertex can contain one or more data types, and each data type is described by a vertex element.

    +
    + +

    Vertex data is defined using an array of structures. Use D3DDECL_END to declare the last element in the declaration.

    +
    + + bb172630 + D3DVERTEXELEMENT9 + D3DVERTEXELEMENT9 +
    + + +

    Stream number.

    +
    + + bb172630 + unsigned short Stream + unsigned short Stream +
    + + +

    Offset from the beginning of the vertex data to the data associated with the particular data type.

    +
    + + bb172630 + unsigned short Offset + unsigned short Offset +
    + + +

    The data type, specified as a . One of several predefined types that define the data size. Some methods have an implied type.

    +
    + + bb172630 + D3DDECLTYPE Type + D3DDECLTYPE Type +
    + + +

    The method specifies the tessellator processing, which determines how the tessellator interprets (or operates on) the vertex data. For more information, see .

    +
    + + bb172630 + D3DDECLMETHOD Method + D3DDECLMETHOD Method +
    + + +

    Defines what the data will be used for; that is, the interoperability between vertex data layouts and vertex shaders. Each usage acts to bind a vertex declaration to a vertex shader. In some cases, they have a special interpretation. For example, an element that specifies or is used by the N-patch tessellator to set up tessellation. See for a list of the available semantics. can be used for user-defined fields (which don't have an existing usage defined).

    +
    + + bb172630 + D3DDECLUSAGE Usage + D3DDECLUSAGE Usage +
    + + +

    Modifies the usage data to allow the user to specify multiple usage types.

    +
    + + bb172630 + unsigned char UsageIndex + unsigned char UsageIndex +
    + + + Used for closing a VertexElement declaration. + + + + + Initializes the struct. + + + + + Initializes a new instance of the struct. + + The stream. + The offset. + The type. + The method. + The usage. + Index of the usage. + + + +

    Vertex shader caps.

    +
    + + bb172635 + D3DVSHADERCAPS2_0 + D3DVSHADERCAPS2_0 +
    + + +

    Instruction predication is supported if this value is nonzero. See setp_comp - vs.

    +
    + + bb172635 + D3DVS20CAPS Caps + D3DVS20CAPS Caps +
    + + +

    Either 0 or 24, which represents the depth of the dynamic flow control instruction nesting. See .

    +
    + + bb172635 + int DynamicFlowControlDepth + int DynamicFlowControlDepth +
    + + +

    The number of temporary registers supported. See .

    +
    + + bb172635 + int NumTemps + int NumTemps +
    + + +

    The depth of nesting of the loop - vs/rep - vs and call - vs/callnz bool - vs instructions. See .

    +
    + + bb172635 + int StaticFlowControlDepth + int StaticFlowControlDepth +
    + + +

    Reports the number of triangles that have been processed and clipped by the runtime's software vertex processing.

    +
    + +

    Use the debug runtime and software vertex processing to get the number of non-clipped and clipped primitives for a particular scene. Primitives will typically be clipped based on a guard band (if one is present). The clipping guard band is set with parameters such as GuardBandLeft in .

    +
    + + bb172544 + D3DDEVINFO_D3DVERTEXSTATS + D3DDEVINFO_D3DVERTEXSTATS +
    + + +

    Total number of triangles that are not clipped in this frame.

    +
    + + bb172544 + unsigned int NumRenderedTriangles + unsigned int NumRenderedTriangles +
    + + +

    Number of new triangles generated by clipping.

    +
    + + bb172544 + unsigned int NumExtraClippingTriangles + unsigned int NumExtraClippingTriangles +
    + + +

    Describes a volume.

    +
    + + bb172633 + D3DVOLUME_DESC + D3DVOLUME_DESC +
    + + +

    Member of the enumerated type, describing the surface format of the volume.

    +
    + + bb172633 + D3DFORMAT Format + D3DFORMAT Format +
    + + +

    Member of the enumerated type, identifying this resource as a volume.

    +
    + + bb172633 + D3DRESOURCETYPE Type + D3DRESOURCETYPE Type +
    + + +

    Currently not used. Always returned as 0.

    +
    + + bb172633 + D3DUSAGE Usage + D3DUSAGE Usage +
    + + +

    Member of the enumerated type, specifying the class of memory allocated for this volume.

    +
    + + bb172633 + D3DPOOL Pool + D3DPOOL Pool +
    + + +

    Width of the volume, in pixels.

    +
    + + bb172633 + unsigned int Width + unsigned int Width +
    + + +

    Height of the volume, in pixels.

    +
    + + bb172633 + unsigned int Height + unsigned int Height +
    + + +

    Depth of the volume, in pixels.

    +
    + + bb172633 + unsigned int Depth + unsigned int Depth +
    + + +

    Specifies tolerance values for each vertex component when comparing vertices to determine if they are similar enough to be welded together.

    +
    + +

    The LPD3DXWELDEPSILONS type is defined as a reference to the structure.

     typedef  *LPD3DXWELDEPSILONS;	
    +            
    +
    + + bb205560 + D3DXWELDEPSILONS + D3DXWELDEPSILONS +
    + + +

    Position

    +
    + + bb205560 + float Position + float Position +
    + + +

    Blend weight

    +
    + + bb205560 + float BlendWeights + float BlendWeights +
    + + +

    Normal

    +
    + + bb205560 + float Normal + float Normal +
    + + +

    Point size value

    +
    + + bb205560 + float PSize + float PSize +
    + + +

    Specular lighting value

    +
    + + bb205560 + float Specular + float Specular +
    + + +

    Diffuse lighting value

    +
    + + bb205560 + float Diffuse + float Diffuse +
    + + +

    Eight texture coordinates

    +
    + + bb205560 + float Texcoord[8] + float Texcoord +
    + + +

    Tangent

    +
    + + bb205560 + float Tangent + float Tangent +
    + + +

    Binormal

    +
    + + bb205560 + float Binormal + float Binormal +
    + + +

    Tessellation factor

    +
    + + bb205560 + float TessFactor + float TessFactor +
    + + +

    Identifies compressed key frame animation data.

    +
    + + bb174824 + XFILECOMPRESSEDANIMATIONSET + XFILECOMPRESSEDANIMATIONSET +
    + + +

    Total size, in bytes, of the compressed data in the compressed key frame animation data buffer.

    +
    + + bb174824 + unsigned int CompressedBlockSize + unsigned int CompressedBlockSize +
    + + +

    Number of animation key frame ticks that occur per second.

    +
    + + bb174824 + float TicksPerSec + float TicksPerSec +
    + + +

    Type of the animation set playback loop. See .

    +
    + + bb174824 + unsigned int PlaybackType + unsigned int PlaybackType +
    + + +

    Minimum buffer size, in bytes, required to hold compressed key frame animation data. Value is equal to ( ( CompressedBlockSize + 3 ) / 4 ).

    +
    + + bb174824 + unsigned int BufferLength + unsigned int BufferLength +
    + + + Shadow callback for . + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + + Internal Include Callback + + + + + A user-implemented method for opening and reading the contents of a shader #include file. + + This pointer + A -typed value that indicates the location of the #include file. + Name of the #include file. + Pointer to the container that includes the #include file. + Pointer to the buffer that Open returns that contains the include directives. This pointer remains valid until is called. + Pointer to the number of bytes that Open returns in ppData. + The user-implemented method should return S_OK. If Open fails when reading the #include file, the application programming interface (API) that caused Open to be called fails. This failure can occur in one of the following situations:The high-level shader language (HLSL) shader fails one of the D3D10CompileShader*** functions.The effect fails one of the D3D10CreateEffect*** functions. + HRESULT Open([None] D3D_INCLUDE_TYPE IncludeType,[None] const char* pFileName,[None] LPCVOID pParentData,[None] LPCVOID* ppData,[None] UINT* pBytes) + + + + A user-implemented method for closing a shader #include file. + + + If was successful, Close is guaranteed to be called before the API using the interface returns. + + This pointer + Pointer to the buffer that contains the include directives. This is the pointer that was returned by the corresponding call. + The user-implemented Close method should return S_OK. If Close fails when it closes the #include file, the application programming interface (API) that caused Close to be called fails. This failure can occur in one of the following situations:The high-level shader language (HLSL) shader fails one of the D3D10CompileShader*** functions.The effect fails one of the D3D10CreateEffect*** functions. + HRESULT Close([None] LPCVOID pData) + + + + Internal class used to initialize this assembly. + + + + + Initializes this assembly. + + + This method is called when the assembly is loaded. + + + + + The namespace provides a managed Direct3D9 API. + + bb219837 + Direct3D9 + Direct3D9 + + + The PaletteEntry struct contains the color and usage of an entry in a logical palette. + PALETTEENTRY + + + + The red intensity value for the palette entry. + + + + + The green intensity value for the palette entry. + + + + + The blue intensity value for the palette entry. + + + + + Indicates how the palette entry is to be used. + TODO define an enum for flags + + + + + Represents the compiled bytecode of a shader or effect. + + Blob + + + + Initializes a new instance of the class. + + A containing the compiled bytecode. + + + + Initializes a new instance of the class. + + A containing the compiled bytecode. + + + + Initializes a new instance of the class. + + The buffer. + + + + Initializes a new instance of the class. + + a pointer to a compiler bytecode + size of the bytecode + + + + Initializes a new instance of the class. + + The BLOB. + + + + Gets the buffer pointer. + + + + + Gets or sets the size of the buffer. + + + The size of the buffer. + + + + + Gets the shader constant table. + + HRESULT D3DXGetShaderConstantTable([In] const void* pFunction,[In] ID3DXConstantTable** ppConstantTable) + + + + Gets the version of the shader. + + unsigned int D3DXGetShaderVersion([In] const void* pFunction) + + + + Gets the size of the shader from a function pointer. + + The shader function pointer. + Size of the shader + + + + Assembles a shader from the given source data. + + The source shader data. + Compilation options. + A object representing the raw shader stream. + HRESULT D3DXAssembleShader([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs) + + + + Assembles a shader from the given source data. + + The source shader data. + Compilation options. + A object representing the raw shader stream. + HRESULT D3DXAssembleShader([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs) + + + + Assembles a shader from the given source data. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + Compilation options. + A object representing the raw shader stream. + HRESULT D3DXAssembleShader([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs) + + + + Assembles a shader from the given source data. + + The source shader data. + Macro definitions. + An interface to use for handling #include directives. + Compilation options. + A object representing the raw shader stream. + HRESULT D3DXAssembleShader([In] const void* pSrcData,[In] unsigned int SrcDataLen,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs) + + + + Assembles a shader from file. + + Name of the shader file. + Compilation options. + A object representing the raw shader stream. + + + + Assembles a shader from file. + + Name of the shader file. + Macro definitions. + An interface to use for handling #include directives. + Compilation options. + + A object representing the raw shader stream. + + + + + Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + + The compiled shader bytecode, or null if the method fails. + + HRESULT D3DXCompileShader([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + + The compiled shader bytecode, or null if the method fails. + + HRESULT D3DXCompileShader([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + + The compiled shader bytecode, or null if the method fails. + + HRESULT D3DXCompileShader([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + + The compiled shader bytecode, or null if the method fails. + + HRESULT D3DXCompileShader([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + A set of macros to define during compilation. + An interface for handling include files. + + The compiled shader bytecode, or null if the method fails. + + HRESULT D3DXCompileShader([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + A set of macros to define during compilation. + An interface for handling include files. + + The compiled shader bytecode, or null if the method fails. + + HRESULT D3DXCompileShader([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Compiles the provided shader or effect source. + + A string containing the source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + A set of macros to define during compilation. + An interface for handling include files. + + The compiled shader bytecode, or null if the method fails. + + HRESULT D3DXCompileShader([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The shader target or set of shader features to compile against. + Shader compilation options. + A set of macros to define during compilation. + An interface for handling include files. + + The compiled shader bytecode, or null if the method fails. + + HRESULT D3DXCompileShader([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Compiles a shader or effect from a file on disk. + + The name of the source file to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + A set of macros to define during compilation. + An interface for handling include files. + + The compiled shader bytecode, or null if the method fails. + + HRESULT D3DXCompileShader([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Compiles the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to compile. + The name of the shader entry-point function, or null for an effect file. + The shader target or set of shader features to compile against. + Shader compilation options. + A set of macros to define during compilation. + An interface for handling include files. + + The compiled shader bytecode, or null if the method fails. + + HRESULT D3DXCompileShader([In] const char* pSrcData,[In] unsigned int SrcDataLen,[In] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] const char* pFunctionName,[In] const char* pProfile,[In] unsigned int Flags,[In] ID3DXBuffer** ppShader,[In] ID3DXBuffer** ppErrorMsgs,[In] ID3DXConstantTable** ppConstantTable) + + + + Disassembles compiled HLSL code back into textual source. + + The textual source of the shader or effect. + HRESULT D3DXDisassembleShader([In] const void* pShader,[In] BOOL EnableColorCode,[In] const char* pComments,[In] ID3DXBuffer** ppDisassembly) + + + + Disassembles compiled HLSL code back into textual source. + + if set to true [enable color code]. + + The textual source of the shader or effect. + + HRESULT D3DXDisassembleShader([In] const void* pShader,[In] BOOL EnableColorCode,[In] const char* pComments,[In] ID3DXBuffer** ppDisassembly) + + + + Disassembles compiled HLSL code back into textual source. + + if set to true [enable color code]. + Commenting information to embed in the disassembly. + + The textual source of the shader or effect. + + HRESULT D3DXDisassembleShader([In] const void* pShader,[In] BOOL EnableColorCode,[In] const char* pComments,[In] ID3DXBuffer** ppDisassembly) + + + + Searches through the shader for the specified comment. + + A FOURCC code used to identify the comment. + The comment data. + HRESULT D3DXFindShaderComment([In] const void* pFunction,[In] unsigned int FourCC,[Out] const void** ppData,[Out] unsigned int* pSizeInBytes) + + + + Gets the set of semantics for shader inputs. + + The set of semantics for shader inputs. + HRESULT D3DXGetShaderInputSemantics([In] const void* pFunction,[In, Out, Buffer] D3DXSEMANTIC* pSemantics,[InOut] unsigned int* pCount) + + + + Gets the set of semantics for shader outputs. + + The set of semantics for shader outputs. + HRESULT D3DXGetShaderOutputSemantics([In] const void* pFunction,[In, Out, Buffer] D3DXSEMANTIC* pSemantics,[InOut] unsigned int* pCount) + + + + Gets the sampler names references in the shader. + + The set of referenced sampler names. + HRESULT D3DXGetShaderSamplers([In] const void* pFunction,[In] const char** pSamplers,[In] unsigned int* pCount) + + + + Extracts the major version component of a shader version number. + + The shader version number. + The major version component. + + + + Extracts the minor version component of a shader version number. + + The shader version number. + The minor version component. + + + + Converts a shader version number into a managed object. + + The shader version number. + The parsed shader version information. + + + + Loads from the specified stream. + + The stream. + A shader bytecode + + + + Saves to the specified file name. + + Name of the file. + + + + Saves this bytecode to the specified stream. + + The stream. + + + + Create a ShaderBytecode from a pointer. + + The pointer. + + + + + Preprocesses the provided shader or effect source. + + A string containing the source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + The preprocessed shader source. + HRESULT D3DXPreprocessShader([In] const void* pSrcData,[In] unsigned int SrcDataSize,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + + + + Preprocesses the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + The preprocessed shader source. + HRESULT D3DXPreprocessShader([In] const void* pSrcData,[In] unsigned int SrcDataSize,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + + + + Preprocesses the provided shader or effect source. + + An array of bytes containing the raw source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + The preprocessed shader source. + HRESULT D3DXPreprocessShader([In] const void* pSrcData,[In] unsigned int SrcDataSize,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + + + + Preprocesses the provided shader or effect source. + + The shader source PTR. + Length of the shader source. + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + + The preprocessed shader source. + + HRESULT D3DXPreprocessShader([In] const void* pSrcData,[In] unsigned int SrcDataSize,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + + + + Preprocesses the provided shader or effect source. + + A string containing the source of the shader or effect to preprocess. + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + The preprocessed shader source. + HRESULT D3DXPreprocessShader([In] const void* pSrcData,[In] unsigned int SrcDataSize,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + + + + Preprocesses a shader or effect from a file on disk. + + The name of the source file to compile. + The preprocessed shader source. + HRESULT D3DXPreprocessShader([In] const void* pSrcData,[In] unsigned int SrcDataSize,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + + + + Preprocesses a shader or effect from a file on disk. + + The name of the source file to compile. + A set of macros to define during preprocessing. + An interface for handling include files. + The preprocessed shader source. + HRESULT D3DXPreprocessShader([In] const void* pSrcData,[In] unsigned int SrcDataSize,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + + + + Preprocesses a shader or effect from a file on disk. + + The name of the source file to compile. + A set of macros to define during preprocessing. + An interface for handling include files. + When the method completes, contains a string of compilation errors, or an empty string if preprocessing succeeded. + The preprocessed shader source. + HRESULT D3DXPreprocessShader([In] const void* pSrcData,[In] unsigned int SrcDataSize,[In, Buffer] const D3DXMACRO* pDefines,[In] ID3DXInclude* pInclude,[In] ID3DXBuffer** ppShaderText,[In] ID3DXBuffer** ppErrorMsgs) + + + + Gets the raw data of the compiled bytecode. + + + + + Read a compiled shader bytecode from a Stream and return a ShaderBytecode + + + + + + + Read a compiled shader bytecode from a Stream and return a ShaderBytecode + + + + + + + Width of the texture. + + + + + Height of the texture. + + + + + Format of the texture. + + + + + Mip level count of the texture. + + + + + Helper methods to create special . + + + + + Calculates a specific TEXCOORDSIZEN . + + The size of the texcoord. The value must be in the range [1,4] (Number of floating point values) + Index of the coord. + The + If size is not in the range [1,4] + + + + + + Contains requested texture creation parameters for volume textures. + + None + + + + The requested width of the texture, in pixels. + + + + + The requested height of the texture, in pixels. + + + + + The requested depth of the texture, in pixels. + + + + + The requested surface format. + + + + + The requested mip level count. + + + + + Internal class to interact with Native Message + + + + diff --git a/RenderHookAPI/bin/SharpDX.Mathematics.dll b/RenderHookAPI/bin/SharpDX.Mathematics.dll new file mode 100644 index 0000000000000000000000000000000000000000..4c0da9c7c75a378117809b06c961c2e6e0695c1d GIT binary patch literal 220672 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�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 + + + SharpDX.Mathematics + + + + + Represents a unit independent angle using a single-precision floating-point + internal representation. + + + + + A value that specifies the size of a single degree. + + + + + A value that specifies the size of a single minute. + + + + + A value that specifies the size of a single second. + + + + + A value that specifies the size of a single radian. + + + + + A value that specifies the size of a single milliradian. + + + + + A value that specifies the size of a single gradian. + + + + + The internal representation of the angle. + + + + + Initializes a new instance of the SharpDX.AngleSingle structure with the + given unit dependant angle and unit type. + + A unit dependant measure of the angle. + The type of unit the angle argument is. + + + + Initializes a new instance of the SharpDX.AngleSingle structure using the + arc length formula (θ = s/r). + + The measure of the arc. + The radius of the circle. + + + + Wraps this SharpDX.AngleSingle to be in the range [π, -π]. + + + + + Wraps this SharpDX.AngleSingle to be in the range [0, 2π). + + + + + Gets or sets the total number of revolutions this SharpDX.AngleSingle represents. + + + + + Gets or sets the total number of degrees this SharpDX.AngleSingle represents. + + + + + Gets or sets the minutes component of the degrees this SharpDX.AngleSingle represents. + When setting the minutes, if the value is in the range (-60, 60) the whole degrees are + not changed; otherwise, the whole degrees may be changed. Fractional values may set + the seconds component. + + + + + Gets or sets the seconds of the degrees this SharpDX.AngleSingle represents. + When setting the seconds, if the value is in the range (-60, 60) the whole minutes + or whole degrees are not changed; otherwise, the whole minutes or whole degrees + may be changed. + + + + + Gets or sets the total number of radians this SharpDX.AngleSingle represents. + + + + + Gets or sets the total number of milliradians this SharpDX.AngleSingle represents. + One milliradian is equal to 1/(2000π). + + + + + Gets or sets the total number of gradians this SharpDX.AngleSingle represents. + + + + + Gets a System.Boolean that determines whether this SharpDX.Angle + is a right angle (i.e. 90° or π/2). + + + + + Gets a System.Boolean that determines whether this SharpDX.Angle + is a straight angle (i.e. 180° or π). + + + + + Gets a System.Boolean that determines whether this SharpDX.Angle + is a full rotation angle (i.e. 360° or 2π). + + + + + Gets a System.Boolean that determines whether this SharpDX.Angle + is an oblique angle (i.e. is not 90° or a multiple of 90°). + + + + + Gets a System.Boolean that determines whether this SharpDX.Angle + is an acute angle (i.e. less than 90° but greater than 0°). + + + + + Gets a System.Boolean that determines whether this SharpDX.Angle + is an obtuse angle (i.e. greater than 90° but less than 180°). + + + + + Gets a System.Boolean that determines whether this SharpDX.Angle + is a reflex angle (i.e. greater than 180° but less than 360°). + + + + + Gets a SharpDX.AngleSingle instance that complements this angle (i.e. the two angles add to 90°). + + + + + Gets a SharpDX.AngleSingle instance that supplements this angle (i.e. the two angles add to 180°). + + + + + Wraps the SharpDX.AngleSingle given in the value argument to be in the range [π, -π]. + + A SharpDX.AngleSingle to wrap. + The SharpDX.AngleSingle that is wrapped. + + + + Wraps the SharpDX.AngleSingle given in the value argument to be in the range [0, 2π). + + A SharpDX.AngleSingle to wrap. + The SharpDX.AngleSingle that is wrapped. + + + + Compares two SharpDX.AngleSingle instances and returns the smaller angle. + + The first SharpDX.AngleSingle instance to compare. + The second SharpDX.AngleSingle instance to compare. + The smaller of the two given SharpDX.AngleSingle instances. + + + + Compares two SharpDX.AngleSingle instances and returns the greater angle. + + The first SharpDX.AngleSingle instance to compare. + The second SharpDX.AngleSingle instance to compare. + The greater of the two given SharpDX.AngleSingle instances. + + + + Adds two SharpDX.AngleSingle objects and returns the result. + + The first object to add. + The second object to add. + The value of the two objects added together. + + + + Subtracts two SharpDX.AngleSingle objects and returns the result. + + The first object to subtract. + The second object to subtract. + The value of the two objects subtracted. + + + + Multiplies two SharpDX.AngleSingle objects and returns the result. + + The first object to multiply. + The second object to multiply. + The value of the two objects multiplied together. + + + + Divides two SharpDX.AngleSingle objects and returns the result. + + The numerator object. + The denominator object. + The value of the two objects divided. + + + + Gets a new SharpDX.AngleSingle instance that represents the zero angle (i.e. 0°). + + + + + Gets a new SharpDX.AngleSingle instance that represents the right angle (i.e. 90° or π/2). + + + + + Gets a new SharpDX.AngleSingle instance that represents the straight angle (i.e. 180° or π). + + + + + Gets a new SharpDX.AngleSingle instance that represents the full rotation angle (i.e. 360° or 2π). + + + + + Returns a System.Boolean that indicates whether the values of two SharpDX.Angle + objects are equal. + + The first object to compare. + The second object to compare. + True if the left and right parameters have the same value; otherwise, false. + + + + Returns a System.Boolean that indicates whether the values of two SharpDX.Angle + objects are not equal. + + The first object to compare. + The second object to compare. + True if the left and right parameters do not have the same value; otherwise, false. + + + + Returns a System.Boolean that indicates whether a SharpDX.Angle + object is less than another SharpDX.AngleSingle object. + + The first object to compare. + The second object to compare. + True if left is less than right; otherwise, false. + + + + Returns a System.Boolean that indicates whether a SharpDX.Angle + object is greater than another SharpDX.AngleSingle object. + + The first object to compare. + The second object to compare. + True if left is greater than right; otherwise, false. + + + + Returns a System.Boolean that indicates whether a SharpDX.Angle + object is less than or equal to another SharpDX.AngleSingle object. + + The first object to compare. + The second object to compare. + True if left is less than or equal to right; otherwise, false. + + + + Returns a System.Boolean that indicates whether a SharpDX.Angle + object is greater than or equal to another SharpDX.AngleSingle object. + + The first object to compare. + The second object to compare. + True if left is greater than or equal to right; otherwise, false. + + + + Returns the value of the SharpDX.AngleSingle operand. (The sign of + the operand is unchanged.) + + A SharpDX.AngleSingle object. + The value of the value parameter. + + + + Returns the the negated value of the SharpDX.AngleSingle operand. + + A SharpDX.AngleSingle object. + The negated value of the value parameter. + + + + Adds two SharpDX.AngleSingle objects and returns the result. + + The first object to add. + The second object to add. + The value of the two objects added together. + + + + Subtracts two SharpDX.AngleSingle objects and returns the result. + + The first object to subtract + The second object to subtract. + The value of the two objects subtracted. + + + + Multiplies two SharpDX.AngleSingle objects and returns the result. + + The first object to multiply. + The second object to multiply. + The value of the two objects multiplied together. + + + + Divides two SharpDX.AngleSingle objects and returns the result. + + The numerator object. + The denominator object. + The value of the two objects divided. + + + + Compares this instance to a specified object and returns an integer that + indicates whether the value of this instance is less than, equal to, or greater + than the value of the specified object. + + The object to compare. + + A signed integer that indicates the relationship of the current instance + to the obj parameter. If the value is less than zero, the current instance + is less than the other. If the value is zero, the current instance is equal + to the other. If the value is greater than zero, the current instance is + greater than the other. + + + + + Compares this instance to a second SharpDX.AngleSingle and returns + an integer that indicates whether the value of this instance is less than, + equal to, or greater than the value of the specified object. + + The object to compare. + + A signed integer that indicates the relationship of the current instance + to the obj parameter. If the value is less than zero, the current instance + is less than the other. If the value is zero, the current instance is equal + to the other. If the value is greater than zero, the current instance is + greater than the other. + + + + + Returns a value that indicates whether the current instance and a specified + SharpDX.AngleSingle object have the same value. + + The object to compare. + + Returns true if this SharpDX.AngleSingle object and another have the same value; + otherwise, false. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this SharpDX.AngleSingle instance. + + A 32-bit signed integer hash code. + + + + Returns a value that indicates whether the current instance and a specified + object have the same value. + + The object to compare. + + Returns true if the obj parameter is a SharpDX.AngleSingle object or a type + capable of implicit conversion to a SharpDX.AngleSingle value, and + its value is equal to the value of the current SharpDX.Angle + object; otherwise, false. + + + + + The assembly is a managed Math API. + + + + + The namespace provides managed Direct3D Compiler API. + + dd607340 + Math + Math + + + + Represents a four dimensional mathematical vector of bool (32 bits per bool value). + + + + + The size of the type, in bytes. + + + + + A with all of its components set to false. + + + + + The X unit (true, 0, 0, 0). + + + + + The Y unit (0, true, 0, 0). + + + + + The Z unit (0, 0, true, 0). + + + + + The W unit (0, 0, 0, true). + + + + + A with all of its components set to true. + + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + The W component of the vector. + + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + The W component of the vector. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + Initial value for the X component of the vector. + Initial value for the Y component of the vector. + Initial value for the Z component of the vector. + Initial value for the W component of the vector. + + + + Initializes a new instance of the struct. + + The values to assign to the X, Y, Z, and W components of the vector. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Gets or sets the component at the specified index. + + The value of the X, Y, Z, or W component, depending on the index. + The index of the component to access. Use 0 for the X component, 1 for the Y component, 2 for the Z component, and 3 for the W component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 3]. + + + + Creates an array containing the elements of the vector. + + A four-element array containing the components of the vector. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from array to . + + The input. + The result of the conversion. + + + + Performs an implicit conversion from to array. + + The input. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Represents an axis-aligned bounding box in three dimensional space. + + + + + The minimum point of the box. + + + + + The maximum point of the box. + + + + + Initializes a new instance of the struct. + + The minimum vertex of the bounding box. + The maximum vertex of the bounding box. + + + + Retrieves the eight corners of the bounding box. + + An array of points representing the eight corners of the bounding box. + + + + Retrieves the eight corners of the bounding box. + + An array of points representing the eight corners of the bounding box. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The plane to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The box to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The box to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The sphere to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The sphere to test. + Whether the two objects intersected. + + + + Determines whether the current objects contains a point. + + The point to test. + The type of containment the two objects have. + + + + Determines whether the current objects contains a point. + + The point to test. + The type of containment the two objects have. + + + + Determines whether the current objects contains a . + + The box to test. + The type of containment the two objects have. + + + + Determines whether the current objects contains a . + + The box to test. + The type of containment the two objects have. + + + + Determines whether the current objects contains a . + + The sphere to test. + The type of containment the two objects have. + + + + Determines whether the current objects contains a . + + The sphere to test. + The type of containment the two objects have. + + + + Constructs a that fully contains the given points. + + The points that will be contained by the box. + When the method completes, contains the newly constructed bounding box. + Thrown when is null. + + + + Constructs a that fully contains the given points. + + The points that will be contained by the box. + The newly constructed bounding box. + Thrown when is null. + + + + Constructs a from a given sphere. + + The sphere that will designate the extents of the box. + When the method completes, contains the newly constructed bounding box. + + + + Constructs a from a given sphere. + + The sphere that will designate the extents of the box. + The newly constructed bounding box. + + + + Constructs a that is as large as the total combined area of the two specified boxes. + + The first box to merge. + The second box to merge. + When the method completes, contains the newly constructed bounding box. + + + + Constructs a that is as large as the total combined area of the two specified boxes. + + The first box to merge. + The second box to merge. + The newly constructed bounding box. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Defines a frustum which can be used in frustum culling, zoom to Extents (zoom to fit) operations, + (matrix, frustum, camera) interchange, and many kind of intersection testing. + + + + + Gets or sets the Matrix that describes this bounding frustum. + + + + + Gets the near plane of the BoundingFrustum. + + + + + Gets the far plane of the BoundingFrustum. + + + + + Gets the left plane of the BoundingFrustum. + + + + + Gets the right plane of the BoundingFrustum. + + + + + Gets the top plane of the BoundingFrustum. + + + + + Gets the bottom plane of the BoundingFrustum. + + + + + Creates a new instance of BoundingFrustum. + + Combined matrix that usually takes view × projection matrix. + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Implements the operator ==. + + The left. + The right. + + The result of the operator. + + + + + Implements the operator !=. + + The left. + The right. + + The result of the operator. + + + + + Returns one of the 6 planes related to this frustum. + + Plane index where 0 fro Left, 1 for Right, 2 for Top, 3 for Bottom, 4 for Near, 5 for Far + + + + + Creates a new frustum relaying on perspective camera parameters + + The camera pos. + The look dir. + Up dir. + The fov. + The znear. + The zfar. + The aspect. + The bounding frustum calculated from perspective camera + + + + Creates a new frustum relaying on perspective camera parameters + + The camera params. + The bounding frustum from camera params + + + + Returns the 8 corners of the frustum, element0 is Near1 (near right down corner) + , element1 is Near2 (near right top corner) + , element2 is Near3 (near Left top corner) + , element3 is Near4 (near Left down corner) + , element4 is Far1 (far right down corner) + , element5 is Far2 (far right top corner) + , element6 is Far3 (far left top corner) + , element7 is Far4 (far left down corner) + + The 8 corners of the frustum + + + + Returns the 8 corners of the frustum, element0 is Near1 (near right down corner) + , element1 is Near2 (near right top corner) + , element2 is Near3 (near Left top corner) + , element3 is Near4 (near Left down corner) + , element4 is Far1 (far right down corner) + , element5 is Far2 (far right top corner) + , element6 is Far3 (far left top corner) + , element7 is Far4 (far left down corner) + + The 8 corners of the frustum + + + + Extracts perspective camera parameters from the frustum, doesn't work with orthographic frustums. + + Perspective camera parameters from the frustum + + + + Checks whether a point lay inside, intersects or lay outside the frustum. + + The point. + Type of the containment + + + + Checks whether a point lay inside, intersects or lay outside the frustum. + + The point. + Type of the containment + + + + Checks whether a group of points lay totally inside the frustum (Contains), or lay partially inside the frustum (Intersects), or lay outside the frustum (Disjoint). + + The points. + Type of the containment + + + + Checks whether a group of points lay totally inside the frustum (Contains), or lay partially inside the frustum (Intersects), or lay outside the frustum (Disjoint). + + The points. + Type of the containment. + + + + Determines the intersection relationship between the frustum and a bounding box. + + The box. + Type of the containment + + + + Determines the intersection relationship between the frustum and a bounding box. + + The box. + Type of the containment + + + + Determines the intersection relationship between the frustum and a bounding box. + + The box. + Type of the containment. + + + + Determines the intersection relationship between the frustum and a bounding sphere. + + The sphere. + Type of the containment + + + + Determines the intersection relationship between the frustum and a bounding sphere. + + The sphere. + Type of the containment + + + + Determines the intersection relationship between the frustum and a bounding sphere. + + The sphere. + Type of the containment. + + + + Determines the intersection relationship between the frustum and another bounding frustum. + + The frustum. + Type of the containment + + + + Determines the intersection relationship between the frustum and another bounding frustum. + + The frustum. + Type of the containment + + + + Determines the intersection relationship between the frustum and another bounding frustum. + + The frustum. + Type of the containment. + + + + Checks whether the current BoundingFrustum intersects a BoundingSphere. + + The sphere. + Type of the containment + + + + Checks whether the current BoundingFrustum intersects a BoundingSphere. + + The sphere. + Set to true if the current BoundingFrustum intersects a BoundingSphere. + + + + Checks whether the current BoundingFrustum intersects a BoundingBox. + + The box. + true if the current BoundingFrustum intersects a BoundingSphere. + + + + Checks whether the current BoundingFrustum intersects a BoundingBox. + + The box. + true if the current BoundingFrustum intersects a BoundingSphere. + + + + Checks whether the current BoundingFrustum intersects the specified Plane. + + The plane. + Plane intersection type. + + + + Checks whether the current BoundingFrustum intersects the specified Plane. + + The plane. + Plane intersection type. + + + + Get the width of the frustum at specified depth. + + the depth at which to calculate frustum width. + With of the frustum at the specified depth + + + + Get the height of the frustum at specified depth. + + the depth at which to calculate frustum height. + Height of the frustum at the specified depth + + + + Checks whether the current BoundingFrustum intersects the specified Ray. + + The ray. + true if the current BoundingFrustum intersects the specified Ray. + + + + Checks whether the current BoundingFrustum intersects the specified Ray. + + The Ray to check for intersection with. + The distance at which the ray enters the frustum if there is an intersection and the ray starts outside the frustum. + The distance at which the ray exits the frustum if there is an intersection. + true if the current BoundingFrustum intersects the specified Ray. + + + + Get the distance which when added to camera position along the lookat direction will do the effect of zoom to extents (zoom to fit) operation, + so all the passed points will fit in the current view. + if the returned value is positive, the camera will move toward the lookat direction (ZoomIn). + if the returned value is negative, the camera will move in the reverse direction of the lookat direction (ZoomOut). + + The points. + The zoom to fit distance + + + + Get the distance which when added to camera position along the lookat direction will do the effect of zoom to extents (zoom to fit) operation, + so all the passed points will fit in the current view. + if the returned value is positive, the camera will move toward the lookat direction (ZoomIn). + if the returned value is negative, the camera will move in the reverse direction of the lookat direction (ZoomOut). + + The bounding box. + The zoom to fit distance + + + + Get the vector shift which when added to camera position will do the effect of zoom to extents (zoom to fit) operation, + so all the passed points will fit in the current view. + + The points. + The zoom to fit vector + + + + Get the vector shift which when added to camera position will do the effect of zoom to extents (zoom to fit) operation, + so all the passed points will fit in the current view. + + The bounding box. + The zoom to fit vector + + + + Indicate whether the current BoundingFrustrum is Orthographic. + + + true if the current BoundingFrustrum is Orthographic; otherwise, false. + + + + + Represents a bounding sphere in three dimensional space. + + + + + The center of the sphere in three dimensional space. + + + + + The radius of the sphere. + + + + + Initializes a new instance of the struct. + + The center of the sphere in three dimensional space. + The radius of the sphere. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The plane to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a triangle. + + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The box to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The box to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The sphere to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The sphere to test. + Whether the two objects intersected. + + + + Determines whether the current objects contains a point. + + The point to test. + The type of containment the two objects have. + + + + Determines whether the current objects contains a triangle. + + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + The type of containment the two objects have. + + + + Determines whether the current objects contains a . + + The box to test. + The type of containment the two objects have. + + + + Determines whether the current objects contains a . + + The sphere to test. + The type of containment the two objects have. + + + + Constructs a that fully contains the given points. + + The points that will be contained by the sphere. + The start index from points array to start compute the bounding sphere. + The count of points to process to compute the bounding sphere. + When the method completes, contains the newly constructed bounding sphere. + points + + start + or + count + + + + + Constructs a that fully contains the given points. + + The points that will be contained by the sphere. + When the method completes, contains the newly constructed bounding sphere. + + + + Constructs a that fully contains the given points. + + The points that will be contained by the sphere. + The newly constructed bounding sphere. + + + + Constructs a from a given box. + + The box that will designate the extents of the sphere. + When the method completes, the newly constructed bounding sphere. + + + + Constructs a from a given box. + + The box that will designate the extents of the sphere. + The newly constructed bounding sphere. + + + + Constructs a that is the as large as the total combined area of the two specified spheres. + + The first sphere to merge. + The second sphere to merge. + When the method completes, contains the newly constructed bounding sphere. + + + + Constructs a that is the as large as the total combined area of the two specified spheres. + + The first sphere to merge. + The second sphere to merge. + The newly constructed bounding sphere. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Contains static methods to help in determining intersections, containment, etc. + + + + + Determines the closest point between a point and a triangle. + + The point to test. + The first vertex to test. + The second vertex to test. + The third vertex to test. + When the method completes, contains the closest point between the two objects. + + + + Determines the closest point between a and a point. + + The plane to test. + The point to test. + When the method completes, contains the closest point between the two objects. + + + + Determines the closest point between a and a point. + + The box to test. + The point to test. + When the method completes, contains the closest point between the two objects. + + + + Determines the closest point between a and a point. + + + The point to test. + When the method completes, contains the closest point between the two objects; + or, if the point is directly in the center of the sphere, contains . + + + + Determines the closest point between a and a . + + The first sphere to test. + The second sphere to test. + When the method completes, contains the closest point between the two objects; + or, if the point is directly in the center of the sphere, contains . + + If the two spheres are overlapping, but not directly on top of each other, the closest point + is the 'closest' point of intersection. This can also be considered is the deepest point of + intersection. + + + + + Determines the distance between a and a point. + + The plane to test. + The point to test. + The distance between the two objects. + + + + Determines the distance between a and a point. + + The box to test. + The point to test. + The distance between the two objects. + + + + Determines the distance between a and a . + + The first box to test. + The second box to test. + The distance between the two objects. + + + + Determines the distance between a and a point. + + The sphere to test. + The point to test. + The distance between the two objects. + + + + Determines the distance between a and a . + + The first sphere to test. + The second sphere to test. + The distance between the two objects. + + + + Determines whether there is an intersection between a and a point. + + The ray to test. + The point to test. + Whether the two objects intersect. + + + + Determines whether there is an intersection between a and a . + + The first ray to test. + The second ray to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersect. + + This method performs a ray vs ray intersection test based on the following formula + from Goldman. + s = det([o_2 - o_1, d_2, d_1 x d_2]) / ||d_1 x d_2||^2 + t = det([o_2 - o_1, d_1, d_1 x d_2]) / ||d_1 x d_2||^2 + Where o_1 is the position of the first ray, o_2 is the position of the second ray, + d_1 is the normalized direction of the first ray, d_2 is the normalized direction + of the second ray, det denotes the determinant of a matrix, x denotes the cross + product, [ ] denotes a matrix, and || || denotes the length or magnitude of a vector. + + + + + Determines whether there is an intersection between a and a . + + The ray to test. + The plane to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersect. + + + + Determines whether there is an intersection between a and a . + + The ray to test. + The plane to test + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a triangle. + + The ray to test. + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersected. + + This method tests if the ray intersects either the front or back of the triangle. + If the ray is parallel to the triangle's plane, no intersection is assumed to have + happened. If the intersection of the ray and the triangle is behind the origin of + the ray, no intersection is assumed to have happened. In both cases of assumptions, + this method returns false. + + + + + Determines whether there is an intersection between a and a triangle. + + The ray to test. + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The ray to test. + The box to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The ray to test. + The box to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The ray to test. + The sphere to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The ray to test. + The sphere to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a point. + + The plane to test. + The point to test. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The first plane to test. + The second plane to test. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The first plane to test. + The second plane to test. + When the method completes, contains the line of intersection + as a , or a zero ray if there was no intersection. + Whether the two objects intersected. + + Although a ray is set to have an origin, the ray returned by this method is really + a line in three dimensions which has no real origin. The ray is considered valid when + both the positive direction is used and when the negative direction is used. + + + + + Determines whether there is an intersection between a and a triangle. + + The plane to test. + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The plane to test. + The box to test. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The plane to test. + The sphere to test. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The first box to test. + The second box to test. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The box to test. + The sphere to test. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a triangle. + + The sphere to test. + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + First sphere to test. + Second sphere to test. + Whether the two objects intersected. + + + + Determines whether a contains a point. + + The box to test. + The point to test. + The type of containment the two objects have. + + + + Determines whether a contains a . + + The first box to test. + The second box to test. + The type of containment the two objects have. + + + + Determines whether a contains a . + + The box to test. + The sphere to test. + The type of containment the two objects have. + + + + Determines whether a contains a point. + + The sphere to test. + The point to test. + The type of containment the two objects have. + + + + Determines whether a contains a triangle. + + The sphere to test. + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + The type of containment the two objects have. + + + + Determines whether a contains a . + + The sphere to test. + The box to test. + The type of containment the two objects have. + + + + Determines whether a contains a . + + The first sphere to test. + The second sphere to test. + The type of containment the two objects have. + + + + Represents a 32-bit color (4 bytes) in the form of RGBA (in byte order: R, G, B, A). + + + List of predefined . + + + + + The red component of the color. + + + + + The green component of the color. + + + + + The blue component of the color. + + + + + The alpha component of the color. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The red component of the color. + The green component of the color. + The blue component of the color. + The alpha component of the color. + + + + Initializes a new instance of the struct. Alpha is set to 255. + + The red component of the color. + The green component of the color. + The blue component of the color. + + + + Initializes a new instance of the struct. Passed values are clamped within byte range. + + The red component of the color. + The green component of the color. + The blue component of the color. + The alpha component of the color + + + + Initializes a new instance of the struct. Alpha is set to 255. Passed values are clamped within byte range. + + The red component of the color. + The green component of the color. + The blue component of the color. + + + + Initializes a new instance of the struct. + + The red component of the color. + The green component of the color. + The blue component of the color. + The alpha component of the color. + + + + Initializes a new instance of the struct. Alpha is set to 255. + + The red component of the color. + The green component of the color. + The blue component of the color. + + + + Initializes a new instance of the struct. + + The red, green, blue, and alpha components of the color. + + + + Initializes a new instance of the struct. + + The red, green, and blue components of the color. + The alpha component of the color. + + + + Initializes a new instance of the struct. Alpha is set to 255. + + The red, green, and blue components of the color. + + + + Initializes a new instance of the struct. + + A packed integer containing all four color components in RGBA order. + + + + Initializes a new instance of the struct. + + A packed integer containing all four color components in RGBA order. + + + + Initializes a new instance of the struct. + + The values to assign to the red, green, and blue, alpha components of the color. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Initializes a new instance of the struct. + + The values to assign to the alpha, red, green, and blue components of the color. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Gets or sets the component at the specified index. + + The value of the alpha, red, green, or blue component, depending on the index. + The index of the component to access. Use 0 for the alpha component, 1 for the red component, 2 for the green component, and 3 for the blue component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 3]. + + + + Converts the color into a packed integer. + + A packed integer containing all four color components. + + + + Converts the color into a packed integer. + + A packed integer containing all four color components. + + + + Converts the color into a packed integer. + + A packed integer containing all four color components. + + + + Converts the color into a three component vector. + + A three component vector containing the red, green, and blue components of the color. + + + + Converts the color into a three component color. + + A three component color containing the red, green, and blue components of the color. + + + + Converts the color into a four component vector. + + A four component vector containing all four color components. + + + + Creates an array containing the elements of the color. + + A four-element array containing the components of the color in RGBA order. + + + + Gets the brightness. + + The Hue-Saturation-Brightness (HSB) brightness for this + + + + Gets the hue. + + The Hue-Saturation-Brightness (HSB) hue for this + + + + Gets the saturation. + + The Hue-Saturation-Brightness (HSB) saturation for this + + + + Adds two colors. + + The first color to add. + The second color to add. + When the method completes, completes the sum of the two colors. + + + + Adds two colors. + + The first color to add. + The second color to add. + The sum of the two colors. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract. + WHen the method completes, contains the difference of the two colors. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract + The difference of the two colors. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + When the method completes, contains the modulated color. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + The modulated color. + + + + Scales a color. + + The color to scale. + The amount by which to scale. + When the method completes, contains the scaled color. + + + + Scales a color. + + The color to scale. + The amount by which to scale. + The scaled color. + + + + Negates a color. + + The color to negate. + When the method completes, contains the negated color. + + + + Negates a color. + + The color to negate. + The negated color. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + + Computes the premultiplied value of the provided color. + + The non-premultiplied value. + The premultiplied result. + + + + Computes the premultiplied value of the provided color. + + The non-premultiplied value. + The premultiplied result. + + + + Converts the color from a packed BGRA integer. + + A packed integer containing all four color components in BGRA order + A color. + + + + Converts the color from a packed BGRA integer. + + A packed integer containing all four color components in BGRA order + A color. + + + + Converts the color from a packed ABGR integer. + + A packed integer containing all four color components in ABGR order + A color. + + + + Converts the color from a packed ABGR integer. + + A packed integer containing all four color components in ABGR order + A color. + + + + Converts the color from a packed BGRA integer. + + A packed integer containing all four color components in RGBA order + A color. + + + + Converts the color from a packed BGRA integer. + + A packed integer containing all four color components in RGBA order + A color. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + + Performs a linear interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two colors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two colors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two colors. + + + + Performs a cubic interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + When the method completes, contains an new color composed of the largest components of the source colors. + + + + Returns a color containing the largest components of the specified colorss. + + The first source color. + The second source color. + A color containing the largest components of the source colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + When the method completes, contains an new color composed of the smallest components of the source colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + A color containing the smallest components of the source colors. + + + + Adjusts the contrast of a color. + + The color whose contrast is to be adjusted. + The amount by which to adjust the contrast. + When the method completes, contains the adjusted color. + + + + Adjusts the contrast of a color. + + The color whose contrast is to be adjusted. + The amount by which to adjust the contrast. + The adjusted color. + + + + Adjusts the saturation of a color. + + The color whose saturation is to be adjusted. + The amount by which to adjust the saturation. + When the method completes, contains the adjusted color. + + + + Adjusts the saturation of a color. + + The color whose saturation is to be adjusted. + The amount by which to adjust the saturation. + The adjusted color. + + + + Adds two colors. + + The first color to add. + The second color to add. + The sum of the two colors. + + + + Assert a color (return it unchanged). + + The color to assert (unchanged). + The asserted (unchanged) color. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract. + The difference of the two colors. + + + + Negates a color. + + The color to negate. + A negated color. + + + + Scales a color. + + The factor by which to scale the color. + The color to scale. + The scaled color. + + + + Scales a color. + + The factor by which to scale the color. + The color to scale. + The scaled color. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + The modulated color. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Convert this instance to a + + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to nullable . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + + The result of the conversion. + + + + + Performs an explicit conversion from to . + + The value. + + The result of the conversion. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format to apply to each channel element (byte). + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format to apply to each channel element (byte). + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Zero color. + + + + + Transparent color. + + + + + AliceBlue color. + + + + + AntiqueWhite color. + + + + + Aqua color. + + + + + Aquamarine color. + + + + + Azure color. + + + + + Beige color. + + + + + Bisque color. + + + + + Black color. + + + + + BlanchedAlmond color. + + + + + Blue color. + + + + + BlueViolet color. + + + + + Brown color. + + + + + BurlyWood color. + + + + + CadetBlue color. + + + + + Chartreuse color. + + + + + Chocolate color. + + + + + Coral color. + + + + + CornflowerBlue color. + + + + + Cornsilk color. + + + + + Crimson color. + + + + + Cyan color. + + + + + DarkBlue color. + + + + + DarkCyan color. + + + + + DarkGoldenrod color. + + + + + DarkGray color. + + + + + DarkGreen color. + + + + + DarkKhaki color. + + + + + DarkMagenta color. + + + + + DarkOliveGreen color. + + + + + DarkOrange color. + + + + + DarkOrchid color. + + + + + DarkRed color. + + + + + DarkSalmon color. + + + + + DarkSeaGreen color. + + + + + DarkSlateBlue color. + + + + + DarkSlateGray color. + + + + + DarkTurquoise color. + + + + + DarkViolet color. + + + + + DeepPink color. + + + + + DeepSkyBlue color. + + + + + DimGray color. + + + + + DodgerBlue color. + + + + + Firebrick color. + + + + + FloralWhite color. + + + + + ForestGreen color. + + + + + Fuchsia color. + + + + + Gainsboro color. + + + + + GhostWhite color. + + + + + Gold color. + + + + + Goldenrod color. + + + + + Gray color. + + + + + Green color. + + + + + GreenYellow color. + + + + + Honeydew color. + + + + + HotPink color. + + + + + IndianRed color. + + + + + Indigo color. + + + + + Ivory color. + + + + + Khaki color. + + + + + Lavender color. + + + + + LavenderBlush color. + + + + + LawnGreen color. + + + + + LemonChiffon color. + + + + + LightBlue color. + + + + + LightCoral color. + + + + + LightCyan color. + + + + + LightGoldenrodYellow color. + + + + + LightGray color. + + + + + LightGreen color. + + + + + LightPink color. + + + + + LightSalmon color. + + + + + LightSeaGreen color. + + + + + LightSkyBlue color. + + + + + LightSlateGray color. + + + + + LightSteelBlue color. + + + + + LightYellow color. + + + + + Lime color. + + + + + LimeGreen color. + + + + + Linen color. + + + + + Magenta color. + + + + + Maroon color. + + + + + MediumAquamarine color. + + + + + MediumBlue color. + + + + + MediumOrchid color. + + + + + MediumPurple color. + + + + + MediumSeaGreen color. + + + + + MediumSlateBlue color. + + + + + MediumSpringGreen color. + + + + + MediumTurquoise color. + + + + + MediumVioletRed color. + + + + + MidnightBlue color. + + + + + MintCream color. + + + + + MistyRose color. + + + + + Moccasin color. + + + + + NavajoWhite color. + + + + + Navy color. + + + + + OldLace color. + + + + + Olive color. + + + + + OliveDrab color. + + + + + Orange color. + + + + + OrangeRed color. + + + + + Orchid color. + + + + + PaleGoldenrod color. + + + + + PaleGreen color. + + + + + PaleTurquoise color. + + + + + PaleVioletRed color. + + + + + PapayaWhip color. + + + + + PeachPuff color. + + + + + Peru color. + + + + + Pink color. + + + + + Plum color. + + + + + PowderBlue color. + + + + + Purple color. + + + + + Red color. + + + + + RosyBrown color. + + + + + RoyalBlue color. + + + + + SaddleBrown color. + + + + + Salmon color. + + + + + SandyBrown color. + + + + + SeaGreen color. + + + + + SeaShell color. + + + + + Sienna color. + + + + + Silver color. + + + + + SkyBlue color. + + + + + SlateBlue color. + + + + + SlateGray color. + + + + + Snow color. + + + + + SpringGreen color. + + + + + SteelBlue color. + + + + + Tan color. + + + + + Teal color. + + + + + Thistle color. + + + + + Tomato color. + + + + + Turquoise color. + + + + + Violet color. + + + + + Wheat color. + + + + + White color. + + + + + WhiteSmoke color. + + + + + Yellow color. + + + + + YellowGreen color. + + + + + Represents a color in the form of rgb. + + + + + The Black color (0, 0, 0). + + + + + The White color (1, 1, 1, 1). + + + + + The red component of the color. + + + + + The green component of the color. + + + + + The blue component of the color. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The red component of the color. + The green component of the color. + The blue component of the color. + + + + Initializes a new instance of the struct. + + The red, green, and blue components of the color. + + + + Initializes a new instance of the struct. + + A packed integer containing all three color components in RGB order. + The alpha component is ignored. + + + + Initializes a new instance of the struct. + + The values to assign to the red, green, and blue components of the color. This must be an array with three elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Gets or sets the component at the specified index. + + The value of the red, green, or blue component, depending on the index. + The index of the component to access. Use 0 for the red component, 1 for the green component, and 2 for the blue component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 2]. + + + + Converts the color into a packed integer. + + A packed integer containing all three color components. + The alpha channel is set to 255. + + + + Converts the color into a packed integer. + + A packed integer containing all three color components. + The alpha channel is set to 255. + + + + Converts the color into a three component vector. + + A three component vector containing the red, green, and blue components of the color. + + + + Creates an array containing the elements of the color. + + A three-element array containing the components of the color. + + + + Adds two colors. + + The first color to add. + The second color to add. + When the method completes, completes the sum of the two colors. + + + + Adds two colors. + + The first color to add. + The second color to add. + The sum of the two colors. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract. + WHen the method completes, contains the difference of the two colors. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract + The difference of the two colors. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + When the method completes, contains the modulated color. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + The modulated color. + + + + Scales a color. + + The color to scale. + The amount by which to scale. + When the method completes, contains the scaled color. + + + + Scales a color. + + The color to scale. + The amount by which to scale. + The scaled color. + + + + Negates a color. + + The color to negate. + When the method completes, contains the negated color. + + + + Negates a color. + + The color to negate. + The negated color. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + + Performs a linear interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two colors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two colors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two colors. + + + + Performs a cubic interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + When the method completes, contains an new color composed of the largest components of the source colors. + + + + Returns a color containing the largest components of the specified colors. + + The first source color. + The second source color. + A color containing the largest components of the source colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + When the method completes, contains an new color composed of the smallest components of the source colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + A color containing the smallest components of the source colors. + + + + Adjusts the contrast of a color. + + The color whose contrast is to be adjusted. + The amount by which to adjust the contrast. + When the method completes, contains the adjusted color. + + + + Adjusts the contrast of a color. + + The color whose contrast is to be adjusted. + The amount by which to adjust the contrast. + The adjusted color. + + + + Adjusts the saturation of a color. + + The color whose saturation is to be adjusted. + The amount by which to adjust the saturation. + When the method completes, contains the adjusted color. + + + + Adjusts the saturation of a color. + + The color whose saturation is to be adjusted. + The amount by which to adjust the saturation. + The adjusted color. + + + + Computes the premultiplied value of the provided color. + + The non-premultiplied value. + The color alpha. + The premultiplied result. + + + + Computes the premultiplied value of the provided color. + + The non-premultiplied value. + The color alpha. + The premultiplied color. + + + + Adds two colors. + + The first color to add. + The second color to add. + The sum of the two colors. + + + + Assert a color (return it unchanged). + + The color to assert (unchanged). + The asserted (unchanged) color. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract. + The difference of the two colors. + + + + Negates a color. + + The color to negate. + A negated color. + + + + Scales a color. + + The factor by which to scale the color. + The color to scale. + The scaled color. + + + + Scales a color. + + The factor by which to scale the color. + The color to scale. + The scaled color. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + The modulated color. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format to apply to each channel element (float) + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format to apply to each channel element (float). + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Represents a color in the form of rgba. + + + + + The Black color (0, 0, 0, 1). + + + + + The White color (1, 1, 1, 1). + + + + + The red component of the color. + + + + + The green component of the color. + + + + + The blue component of the color. + + + + + The alpha component of the color. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The red component of the color. + The green component of the color. + The blue component of the color. + The alpha component of the color. + + + + Initializes a new instance of the struct. + + The red, green, blue, and alpha components of the color. + + + + Initializes a new instance of the struct. + + The red, green, and blue components of the color. + The alpha component of the color. + + + + Initializes a new instance of the struct. + + A packed integer containing all four color components in RGBA order. + + + + Initializes a new instance of the struct. + + A packed integer containing all four color components in RGBA order. + + + + Initializes a new instance of the struct. + + The values to assign to the red, green, blue, and alpha components of the color. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Initializes a new instance of the struct. + + used to initialize the color. + + + + Initializes a new instance of the struct. + + used to initialize the color. + The alpha component of the color. + + + + Gets or sets the component at the specified index. + + The value of the red, green, blue, and alpha components, depending on the index. + The index of the component to access. Use 0 for the alpha component, 1 for the red component, 2 for the green component, and 3 for the blue component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 3]. + + + + Converts the color into a packed integer. + + A packed integer containing all four color components. + + + + Converts the color into a packed integer. + + A packed integer containing all four color components. + + + + Converts the color into a packed integer. + + A packed integer containing all four color components. + + + + Converts the color into a three component vector. + + A three component vector containing the red, green, and blue components of the color. + + + + Converts the color into a four component vector. + + A four component vector containing all four color components. + + + + Creates an array containing the elements of the color. + + A four-element array containing the components of the color. + + + + Adds two colors. + + The first color to add. + The second color to add. + When the method completes, completes the sum of the two colors. + + + + Adds two colors. + + The first color to add. + The second color to add. + The sum of the two colors. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract. + WHen the method completes, contains the difference of the two colors. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract + The difference of the two colors. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + When the method completes, contains the modulated color. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + The modulated color. + + + + Scales a color. + + The color to scale. + The amount by which to scale. + When the method completes, contains the scaled color. + + + + Scales a color. + + The color to scale. + The amount by which to scale. + The scaled color. + + + + Negates a color. + + The color to negate. + When the method completes, contains the negated color. + + + + Negates a color. + + The color to negate. + The negated color. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + + Performs a linear interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two colors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two colors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two colors. + + + + Performs a cubic interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + When the method completes, contains an new color composed of the largest components of the source colors. + + + + Returns a color containing the largest components of the specified colors. + + The first source color. + The second source color. + A color containing the largest components of the source colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + When the method completes, contains an new color composed of the smallest components of the source colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + A color containing the smallest components of the source colors. + + + + Adjusts the contrast of a color. + + The color whose contrast is to be adjusted. + The amount by which to adjust the contrast. + When the method completes, contains the adjusted color. + + + + Adjusts the contrast of a color. + + The color whose contrast is to be adjusted. + The amount by which to adjust the contrast. + The adjusted color. + + + + Adjusts the saturation of a color. + + The color whose saturation is to be adjusted. + The amount by which to adjust the saturation. + When the method completes, contains the adjusted color. + + + + Adjusts the saturation of a color. + + The color whose saturation is to be adjusted. + The amount by which to adjust the saturation. + The adjusted color. + + + + Computes the premultiplied value of the provided color. + + The non-premultiplied value. + The premultiplied result. + + + + Computes the premultiplied value of the provided color. + + The non-premultiplied value. + The premultiplied result. + + + + Adds two colors. + + The first color to add. + The second color to add. + The sum of the two colors. + + + + Assert a color (return it unchanged). + + The color to assert (unchanged). + The asserted (unchanged) color. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract. + The difference of the two colors. + + + + Negates a color. + + The color to negate. + A negated color. + + + + Scales a color. + + The factor by which to scale the color. + The color to scale. + The scaled color. + + + + Scales a color. + + The factor by which to scale the color. + The color to scale. + The scaled color. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + The modulated color. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + + The result of the conversion. + + + + + Performs an explicit conversion from to . + + The value. + + The result of the conversion. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format to apply to each channel (float). + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format to apply to each channel (float). + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Represents a 32-bit color (4 bytes) in the form of BGRA (in byte order: B, G, B, A). + + + + + The blue component of the color. + + + + + The green component of the color. + + + + + The red component of the color. + + + + + The alpha component of the color. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The red component of the color. + The green component of the color. + The blue component of the color. + The alpha component of the color. + + + + Initializes a new instance of the struct. + + The red component of the color. + The green component of the color. + The blue component of the color. + The alpha component of the color. + + + + Initializes a new instance of the struct. + + The red, green, blue, and alpha components of the color. + + + + Initializes a new instance of the struct. + + The red, green, and blue components of the color. + The alpha component of the color. + + + + Initializes a new instance of the struct. + + A packed integer containing all four color components in BGRA order. + + + + Initializes a new instance of the struct. + + A packed integer containing all four color components in BGRA. + + + + Initializes a new instance of the struct. + + The values to assign to the red, green, and blue, alpha components of the color. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Initializes a new instance of the struct. + + The values to assign to the red, green, and blue, alpha components of the color. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Gets or sets the component at the specified index. + + The value of the alpha, red, green, or blue component, depending on the index. + The index of the component to access. Use 0 for the alpha component, 1 for the red component, 2 for the green component, and 3 for the blue component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 3]. + + + + Converts the color into a packed integer. + + A packed integer containing all four color components. + + + + Converts the color into a packed integer. + + A packed integer containing all four color components. + + + + Converts the color into a three component vector. + + A three component vector containing the red, green, and blue components of the color. + + + + Converts the color into a three component color. + + A three component color containing the red, green, and blue components of the color. + + + + Converts the color into a four component vector. + + A four component vector containing all four color components. + + + + Creates an array containing the elements of the color. + + A four-element array containing the components of the color in BGRA order. + + + + Gets the brightness. + + The Hue-Saturation-Brightness (HSB) saturation for this + + + + Gets the hue. + + The Hue-Saturation-Brightness (HSB) saturation for this + + + + Gets the saturation. + + The Hue-Saturation-Brightness (HSB) saturation for this + + + + Converts the color from a packed BGRA integer. + + A packed integer containing all four color components in BGRA order + A color. + + + + Converts the color from a packed BGRA integer. + + A packed integer containing all four color components in BGRA order + A color. + + + + Converts the color from a packed RGBA integer. + + A packed integer containing all four color components in RGBA order + A color. + + + + Converts the color from a packed RGBA integer. + + A packed integer containing all four color components in RGBA order + A color. + + + + Adds two colors. + + The first color to add. + The second color to add. + When the method completes, completes the sum of the two colors. + + + + Adds two colors. + + The first color to add. + The second color to add. + The sum of the two colors. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract. + WHen the method completes, contains the difference of the two colors. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract + The difference of the two colors. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + When the method completes, contains the modulated color. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + The modulated color. + + + + Scales a color. + + The color to scale. + The amount by which to scale. + When the method completes, contains the scaled color. + + + + Scales a color. + + The color to scale. + The amount by which to scale. + The scaled color. + + + + Negates a color. + + The color to negate. + When the method completes, contains the negated color. + + + + Negates a color. + + The color to negate. + The negated color. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + + Performs a linear interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two colors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two colors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two colors. + + + + Performs a cubic interpolation between two colors. + + Start color. + End color. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two colors. + + + + Returns a color containing the smallest components of the specified colorss. + + The first source color. + The second source color. + When the method completes, contains an new color composed of the largest components of the source colorss. + + + + Returns a color containing the largest components of the specified colorss. + + The first source color. + The second source color. + A color containing the largest components of the source colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + When the method completes, contains an new color composed of the smallest components of the source colors. + + + + Returns a color containing the smallest components of the specified colors. + + The first source color. + The second source color. + A color containing the smallest components of the source colors. + + + + Adjusts the contrast of a color. + + The color whose contrast is to be adjusted. + The amount by which to adjust the contrast. + When the method completes, contains the adjusted color. + + + + Adjusts the contrast of a color. + + The color whose contrast is to be adjusted. + The amount by which to adjust the contrast. + The adjusted color. + + + + Adjusts the saturation of a color. + + The color whose saturation is to be adjusted. + The amount by which to adjust the saturation. + When the method completes, contains the adjusted color. + + + + Adjusts the saturation of a color. + + The color whose saturation is to be adjusted. + The amount by which to adjust the saturation. + The adjusted color. + + + + Computes the premultiplied value of the provided color. + + The non-premultiplied value. + The premultiplied result. + + + + Computes the premultiplied value of the provided color. + + The non-premultiplied value. + The premultiplied result. + + + + Adds two colors. + + The first color to add. + The second color to add. + The sum of the two colors. + + + + Assert a color (return it unchanged). + + The color to assert (unchange). + The asserted (unchanged) color. + + + + Subtracts two colors. + + The first color to subtract. + The second color to subtract. + The difference of the two colors. + + + + Negates a color. + + The color to negate. + A negated color. + + + + Scales a color. + + The factor by which to scale the color. + The color to scale. + The scaled color. + + + + Scales a color. + + The factor by which to scale the color. + The color to scale. + The scaled color. + + + + Modulates two colors. + + The first color to modulate. + The second color to modulate. + The modulated color. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + + The result of the conversion. + + + + + Performs an explicit conversion from to . + + The value. + + The result of the conversion. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format to apply to each channel (byte). + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format to apply to each channel (byte). + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Describes the type of angle. + + + + + Specifies an angle measurement in revolutions. + + + + + Specifies an angle measurement in degrees. + + + + + Specifies an angle measurement in radians. + + + + + Specifies an angle measurement in gradians. + + + + + Describes how one bounding volume contains another. + + + + + The two bounding volumes don't intersect at all. + + + + + One bounding volume completely contains another. + + + + + The two bounding volumes overlap. + + + + + Describes the result of an intersection with a plane in three dimensions. + + + + + The object is behind the plane. + + + + + The object is in front of the plane. + + + + + The object is intersecting the plane. + + + + + Frustum camera parameters. + + + + + Position of the camera. + + + + + Looking at direction of the camera. + + + + + Up direction. + + + + + Field of view. + + + + + Z near distance. + + + + + Z far distance. + + + + + Aspect ratio. + + + + + A half precision (16 bit) floating point value. + + + + + Number of decimal digits of precision. + + + + + Number of bits in the mantissa. + + + + + Maximum decimal exponent. + + + + + Maximum binary exponent. + + + + + Minimum decimal exponent. + + + + + Minimum binary exponent. + + + + + Exponent radix. + + + + + Additional rounding. + + + + + Smallest such that 1.0 + epsilon != 1.0 + + + + + Maximum value of the number. + + + + + Minimum value of the number. + + + + + Initializes a new instance of the structure. + + The floating point value that should be stored in 16 bit format. + + + + Initializes a new instance of the structure. + + The floating point value that should be stored in 16 bit format. + + + + Gets or sets the raw 16 bit value used to back this half-float. + + + + + Converts an array of half precision values into full precision values. + + The values to be converted. + An array of converted values. + + + + Converts an array of full precision values into half precision values. + + The values to be converted. + An array of converted values. + + + + Performs an explicit conversion from to . + + The value to be converted. + The converted value. + + + + Performs an implicit conversion from to . + + The value to be converted. + The converted value. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + + Converts the value of the object to its equivalent string representation. + + The string representation of the value of this instance. + + + + Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + + Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or + if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + + Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + + Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + + Defines a two component vector, using half precision floating point coordinates. + + + + + Gets or sets the X component of the vector. + + The X component of the vector. + + + + Gets or sets the Y component of the vector. + + The Y component of the vector. + + + + Initializes a new instance of the structure. + + The X component. + The Y component. + + + + Initializes a new instance of the structure. + + The X component. + The Y component. + + + + Initializes a new instance of the structure. + + The X component. + The Y component. + + + + Initializes a new instance of the structure. + + The value to set for both the X and Y components. + + + + Initializes a new instance of the structure. + + Value to initialize X and Y components with. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + + Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + + Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or + if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + + Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + + Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + + Defines a three component vector, using half precision floating point coordinates. + + + + + Gets or sets the X component of the vector. + + The X component of the vector. + + + + Gets or sets the Y component of the vector. + + The Y component of the vector. + + + + Gets or sets the Z component of the vector. + + The Z component of the vector. + + + + Initializes a new instance of the structure. + + The X component. + The Y component. + The Z component. + + + + Initializes a new instance of the structure. + + The X component. + The Y component. + The Z component. + + + + Initializes a new instance of the structure. + + The X component. + The Y component. + The Z component. + + + + Initializes a new instance of the structure. + + The value to set for the X, Y, and Z components. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + + Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + + Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or + if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + + Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + + Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + + Defines a four component vector, using half precision floating point coordinates. + + + + + Gets or sets the X component of the vector. + + The X component of the vector. + + + + Gets or sets the Y component of the vector. + + The Y component of the vector. + + + + Gets or sets the Z component of the vector. + + The Z component of the vector. + + + + Gets or sets the W component of the vector. + + The W component of the vector. + + + + Initializes a new instance of the structure. + + The X component. + The Y component. + The Z component. + The W component. + + + + Initializes a new instance of the structure. + + The X component. + The Y component. + The Z component. + The W component. + + + + Initializes a new instance of the structure. + + The X component. + The Y component. + The Z component. + The W component. + + + + Initializes a new instance of the structure. + + The value to set for the X, Y, Z, and W components. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + + true if has a different value than ; otherwise, false. + + + + Returns the hash code for this instance. + + A 32-bit signed integer hash code. + + + + Determines whether the specified object instances are considered equal. + + + + + true if is the same instance as or + if both are null references or if value1.Equals(value2) returns true; otherwise, false. + + + + Returns a value that indicates whether the current instance is equal to the specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + + Returns a value that indicates whether the current instance is equal to a specified object. + + Object to make the comparison with. + + true if the current instance is equal to the specified object; false otherwise. + + + + Helper class to perform Half/Float conversion. + Code extract from paper : www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf by Jeroen van der Zijp + + + + + Unpacks the specified h. + + The h. + + + + + Packs the specified f. + + The f. + + + + + Represents a three dimensional mathematical int vector. + + + + + The size of the type, in bytes. + + + + + A with all of its components set to zero. + + + + + The X unit (1, 0, 0). + + + + + The Y unit (0, 1, 0). + + + + + The Z unit (0, 0, 1). + + + + + A with all of its components set to one. + + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + Initial value for the X component of the vector. + Initial value for the Y component of the vector. + Initial value for the Z component of the vector. + + + + Initializes a new instance of the struct. + + The values to assign to the X, Y, Z, and W components of the vector. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Gets or sets the component at the specified index. + + The value of the X, Y, Z, or W component, depending on the index. + The index of the component to access. Use 0 for the X component, 1 for the Y component, 2 for the Z component, and 3 for the W component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 3]. + + + + Creates an array containing the elements of the vector. + + A four-element array containing the components of the vector. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + When the method completes, contains the sum of the two vectors. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + When the method completes, contains the difference of the two vectors. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Modulates a vector with another by performing component-wise multiplication. + + The first vector to modulate. + The second vector to modulate. + When the method completes, contains the modulated vector. + + + + Modulates a vector with another by performing component-wise multiplication. + + The first vector to modulate. + The second vector to modulate. + The modulated vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Reverses the direction of a given vector. + + The vector to negate. + When the method completes, contains a vector facing in the opposite direction. + + + + Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the largest components of the source vectors. + + + + Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the largest components of the source vectors. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the smallest components of the source vectors. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the smallest components of the source vectors. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + + Assert a vector (return it unchanged). + + The vector to assert (unchanged). + The asserted (unchanged) vector. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + + Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from array to . + + The input. + The result of the conversion. + + + + Performs an implicit conversion from to array. + + The input. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Represents a four dimensional mathematical vector. + + + + + The size of the type, in bytes. + + + + + A with all of its components set to zero. + + + + + The X unit (1, 0, 0, 0). + + + + + The Y unit (0, 1, 0, 0). + + + + + The Z unit (0, 0, 1, 0). + + + + + The W unit (0, 0, 0, 1). + + + + + A with all of its components set to one. + + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + The W component of the vector. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + Initial value for the X component of the vector. + Initial value for the Y component of the vector. + Initial value for the Z component of the vector. + Initial value for the W component of the vector. + + + + Initializes a new instance of the struct. + + The values to assign to the X, Y, Z, and W components of the vector. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Gets or sets the component at the specified index. + + The value of the X, Y, Z, or W component, depending on the index. + The index of the component to access. Use 0 for the X component, 1 for the Y component, 2 for the Z component, and 3 for the W component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 3]. + + + + Creates an array containing the elements of the vector. + + A four-element array containing the components of the vector. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + When the method completes, contains the sum of the two vectors. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + When the method completes, contains the difference of the two vectors. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Modulates a vector with another by performing component-wise multiplication. + + The first vector to modulate. + The second vector to modulate. + When the method completes, contains the modulated vector. + + + + Modulates a vector with another by performing component-wise multiplication. + + The first vector to modulate. + The second vector to modulate. + The modulated vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Reverses the direction of a given vector. + + The vector to negate. + When the method completes, contains a vector facing in the opposite direction. + + + + Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the largest components of the source vectors. + + + + Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the largest components of the source vectors. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the smallest components of the source vectors. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the smallest components of the source vectors. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + + Assert a vector (return it unchanged). + + The vector to assert (unchanged). + The asserted (unchanged) vector. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + + Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from array to . + + The input. + The result of the conversion. + + + + Performs an implicit conversion from to array. + + The input. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + The value for which all absolute numbers smaller than are considered equal to zero. + + + + + A value specifying the approximation of π which is 180 degrees. + + + + + A value specifying the approximation of 2π which is 360 degrees. + + + + + A value specifying the approximation of π/2 which is 90 degrees. + + + + + A value specifying the approximation of π/4 which is 45 degrees. + + + + + Checks if a and b are almost equals, taking into account the magnitude of floating point numbers (unlike method). See Remarks. + See remarks. + + The left value to compare. + The right value to compare. + true if a almost equal to b, false otherwise + + The code is using the technique described by Bruce Dawson in + Comparing Floating point numbers 2012 edition. + + + + + Determines whether the specified value is close to zero (0.0f). + + The floating value. + true if the specified value is close to zero (0.0f); otherwise, false. + + + + Determines whether the specified value is close to one (1.0f). + + The floating value. + true if the specified value is close to one (1.0f); otherwise, false. + + + + Checks if a - b are almost equals within a float epsilon. + + The left value to compare. + The right value to compare. + Epsilon value + true if a almost equal to b within a float epsilon, false otherwise + + + + Converts revolutions to degrees. + + The value to convert. + The converted value. + + + + Converts revolutions to radians. + + The value to convert. + The converted value. + + + + Converts revolutions to gradians. + + The value to convert. + The converted value. + + + + Converts degrees to revolutions. + + The value to convert. + The converted value. + + + + Converts degrees to radians. + + The value to convert. + The converted value. + + + + Converts radians to revolutions. + + The value to convert. + The converted value. + + + + Converts radians to gradians. + + The value to convert. + The converted value. + + + + Converts gradians to revolutions. + + The value to convert. + The converted value. + + + + Converts gradians to degrees. + + The value to convert. + The converted value. + + + + Converts gradians to radians. + + The value to convert. + The converted value. + + + + Converts radians to degrees. + + The value to convert. + The converted value. + + + + Clamps the specified value. + + The value. + The min. + The max. + The result of clamping a value between min and max + + + + Clamps the specified value. + + The value. + The min. + The max. + The result of clamping a value between min and max + + + + Interpolates between two values using a linear function by a given amount. + + + See http://www.encyclopediaofmath.org/index.php/Linear_interpolation and + http://fgiesen.wordpress.com/2012/08/15/linear-interpolation-past-present-and-future/ + + Value to interpolate from. + Value to interpolate to. + Interpolation amount. + The result of linear interpolation of values based on the amount. + + + + Interpolates between two values using a linear function by a given amount. + + + See http://www.encyclopediaofmath.org/index.php/Linear_interpolation and + http://fgiesen.wordpress.com/2012/08/15/linear-interpolation-past-present-and-future/ + + Value to interpolate from. + Value to interpolate to. + Interpolation amount. + The result of linear interpolation of values based on the amount. + + + + Interpolates between two values using a linear function by a given amount. + + + See http://www.encyclopediaofmath.org/index.php/Linear_interpolation and + http://fgiesen.wordpress.com/2012/08/15/linear-interpolation-past-present-and-future/ + + Value to interpolate from. + Value to interpolate to. + Interpolation amount. + The result of linear interpolation of values based on the amount. + + + + Performs smooth (cubic Hermite) interpolation between 0 and 1. + + + See https://en.wikipedia.org/wiki/Smoothstep + + Value between 0 and 1 indicating interpolation amount. + + + + Performs a smooth(er) interpolation between 0 and 1 with 1st and 2nd order derivatives of zero at endpoints. + + + See https://en.wikipedia.org/wiki/Smoothstep + + Value between 0 and 1 indicating interpolation amount. + + + + Calculates the modulo of the specified value. + + The value. + The modulo. + The result of the modulo applied to value + + + + Calculates the modulo 2*PI of the specified value. + + The value. + The result of the modulo applied to value + + + + Wraps the specified value into a range [min, max] + + The value to wrap. + The min. + The max. + Result of the wrapping. + Is thrown when is greater than . + + + + Wraps the specified value into a range [min, max[ + + The value. + The min. + The max. + Result of the wrapping. + Is thrown when is greater than . + + + + Gauss function. + http://en.wikipedia.org/wiki/Gaussian_function#Two-dimensional_Gaussian_function + + Curve amplitude. + Position X. + Position Y + Center X. + Center Y. + Curve sigma X. + Curve sigma Y. + The result of Gaussian function. + + + + Gauss function. + http://en.wikipedia.org/wiki/Gaussian_function#Two-dimensional_Gaussian_function + + Curve amplitude. + Position X. + Position Y + Center X. + Center Y. + Curve sigma X. + Curve sigma Y. + The result of Gaussian function. + + + + Represents a 4x4 mathematical matrix. + + + + + The size of the type, in bytes. + + + + + A with all of its components set to zero. + + + + + The identity . + + + + + Value at row 1 column 1 of the matrix. + + + + + Value at row 1 column 2 of the matrix. + + + + + Value at row 1 column 3 of the matrix. + + + + + Value at row 1 column 4 of the matrix. + + + + + Value at row 2 column 1 of the matrix. + + + + + Value at row 2 column 2 of the matrix. + + + + + Value at row 2 column 3 of the matrix. + + + + + Value at row 2 column 4 of the matrix. + + + + + Value at row 3 column 1 of the matrix. + + + + + Value at row 3 column 2 of the matrix. + + + + + Value at row 3 column 3 of the matrix. + + + + + Value at row 3 column 4 of the matrix. + + + + + Value at row 4 column 1 of the matrix. + + + + + Value at row 4 column 2 of the matrix. + + + + + Value at row 4 column 3 of the matrix. + + + + + Value at row 4 column 4 of the matrix. + + + + + Gets or sets the up of the matrix; that is M21, M22, and M23. + + + + + Gets or sets the down of the matrix; that is -M21, -M22, and -M23. + + + + + Gets or sets the right of the matrix; that is M11, M12, and M13. + + + + + Gets or sets the left of the matrix; that is -M11, -M12, and -M13. + + + + + Gets or sets the forward of the matrix; that is -M31, -M32, and -M33. + + + + + Gets or sets the backward of the matrix; that is M31, M32, and M33. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The value to assign at row 1 column 1 of the matrix. + The value to assign at row 1 column 2 of the matrix. + The value to assign at row 1 column 3 of the matrix. + The value to assign at row 1 column 4 of the matrix. + The value to assign at row 2 column 1 of the matrix. + The value to assign at row 2 column 2 of the matrix. + The value to assign at row 2 column 3 of the matrix. + The value to assign at row 2 column 4 of the matrix. + The value to assign at row 3 column 1 of the matrix. + The value to assign at row 3 column 2 of the matrix. + The value to assign at row 3 column 3 of the matrix. + The value to assign at row 3 column 4 of the matrix. + The value to assign at row 4 column 1 of the matrix. + The value to assign at row 4 column 2 of the matrix. + The value to assign at row 4 column 3 of the matrix. + The value to assign at row 4 column 4 of the matrix. + + + + Initializes a new instance of the struct. + + The values to assign to the components of the matrix. This must be an array with sixteen elements. + Thrown when is null. + Thrown when contains more or less than sixteen elements. + + + + Gets or sets the first row in the matrix; that is M11, M12, M13, and M14. + + + + + Gets or sets the second row in the matrix; that is M21, M22, M23, and M24. + + + + + Gets or sets the third row in the matrix; that is M31, M32, M33, and M34. + + + + + Gets or sets the fourth row in the matrix; that is M41, M42, M43, and M44. + + + + + Gets or sets the first column in the matrix; that is M11, M21, M31, and M41. + + + + + Gets or sets the second column in the matrix; that is M12, M22, M32, and M42. + + + + + Gets or sets the third column in the matrix; that is M13, M23, M33, and M43. + + + + + Gets or sets the fourth column in the matrix; that is M14, M24, M34, and M44. + + + + + Gets or sets the translation of the matrix; that is M41, M42, and M43. + + + + + Gets or sets the scale of the matrix; that is M11, M22, and M33. + + + + + Gets a value indicating whether this instance is an identity matrix. + + + true if this instance is an identity matrix; otherwise, false. + + + + + Gets or sets the component at the specified index. + + The value of the matrix component, depending on the index. + The zero-based index of the component to access. + The value of the component at the specified index. + Thrown when the is out of the range [0, 15]. + + + + Gets or sets the component at the specified index. + + The value of the matrix component, depending on the index. + The row of the matrix to access. + The column of the matrix to access. + The value of the component at the specified index. + Thrown when the or is out of the range [0, 3]. + + + + Calculates the determinant of the matrix. + + The determinant of the matrix. + + + + Inverts the matrix. + + + + + Transposes the matrix. + + + + + Orthogonalizes the specified matrix. + + + Orthogonalization is the process of making all rows orthogonal to each other. This + means that any given row in the matrix will be orthogonal to any other given row in the + matrix. + Because this method uses the modified Gram-Schmidt process, the resulting matrix + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the matrix rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Orthonormalizes the specified matrix. + + + Orthonormalization is the process of making all rows and columns orthogonal to each + other and making all rows and columns of unit length. This means that any given row will + be orthogonal to any other given row and any given column will be orthogonal to any other + given column. Any given row will not be orthogonal to any given column. Every row and every + column will be of unit length. + Because this method uses the modified Gram-Schmidt process, the resulting matrix + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the matrix rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Decomposes a matrix into an orthonormalized matrix Q and a right triangular matrix R. + + When the method completes, contains the orthonormalized matrix of the decomposition. + When the method completes, contains the right triangular matrix of the decomposition. + + + + Decomposes a matrix into a lower triangular matrix L and an orthonormalized matrix Q. + + When the method completes, contains the lower triangular matrix of the decomposition. + When the method completes, contains the orthonormalized matrix of the decomposition. + + + + Decomposes a matrix into a scale, rotation, and translation. + + When the method completes, contains the scaling component of the decomposed matrix. + When the method completes, contains the rotation component of the decomposed matrix. + When the method completes, contains the translation component of the decomposed matrix. + + This method is designed to decompose an SRT transformation matrix only. + + + + + Decomposes a uniform scale matrix into a scale, rotation, and translation. + A uniform scale matrix has the same scale in every axis. + + When the method completes, contains the scaling component of the decomposed matrix. + When the method completes, contains the rotation component of the decomposed matrix. + When the method completes, contains the translation component of the decomposed matrix. + + This method is designed to decompose only an SRT transformation matrix that has the same scale in every axis. + + + + + Exchanges two rows in the matrix. + + The first row to exchange. This is an index of the row starting at zero. + The second row to exchange. This is an index of the row starting at zero. + + + + Exchanges two columns in the matrix. + + The first column to exchange. This is an index of the column starting at zero. + The second column to exchange. This is an index of the column starting at zero. + + + + Creates an array containing the elements of the matrix. + + A sixteen-element array containing the components of the matrix. + + + + Determines the sum of two matrices. + + The first matrix to add. + The second matrix to add. + When the method completes, contains the sum of the two matrices. + + + + Determines the sum of two matrices. + + The first matrix to add. + The second matrix to add. + The sum of the two matrices. + + + + Determines the difference between two matrices. + + The first matrix to subtract. + The second matrix to subtract. + When the method completes, contains the difference between the two matrices. + + + + Determines the difference between two matrices. + + The first matrix to subtract. + The second matrix to subtract. + The difference between the two matrices. + + + + Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + When the method completes, contains the scaled matrix. + + + + Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + + Determines the product of two matrices. + + The first matrix to multiply. + The second matrix to multiply. + The product of the two matrices. + + + + Determines the product of two matrices. + + The first matrix to multiply. + The second matrix to multiply. + The product of the two matrices. + + + + Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + When the method completes, contains the scaled matrix. + + + + Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + + Determines the quotient of two matrices. + + The first matrix to divide. + The second matrix to divide. + When the method completes, contains the quotient of the two matrices. + + + + Determines the quotient of two matrices. + + The first matrix to divide. + The second matrix to divide. + The quotient of the two matrices. + + + + Performs the exponential operation on a matrix. + + The matrix to perform the operation on. + The exponent to raise the matrix to. + When the method completes, contains the exponential matrix. + Thrown when the is negative. + + + + Performs the exponential operation on a matrix. + + The matrix to perform the operation on. + The exponent to raise the matrix to. + The exponential matrix. + Thrown when the is negative. + + + + Negates a matrix. + + The matrix to be negated. + When the method completes, contains the negated matrix. + + + + Negates a matrix. + + The matrix to be negated. + The negated matrix. + + + + Performs a linear interpolation between two matrices. + + Start matrix. + End matrix. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two matrices. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two matrices. + + Start matrix. + End matrix. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two matrices. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two matrices. + + Start matrix. + End matrix. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two matrices. + + + + Performs a cubic interpolation between two matrices. + + Start matrix. + End matrix. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two matrices. + + + + Calculates the transpose of the specified matrix. + + The matrix whose transpose is to be calculated. + When the method completes, contains the transpose of the specified matrix. + + + + Calculates the transpose of the specified matrix. + + The matrix whose transpose is to be calculated. + When the method completes, contains the transpose of the specified matrix. + + + + Calculates the transpose of the specified matrix. + + The matrix whose transpose is to be calculated. + The transpose of the specified matrix. + + + + Calculates the inverse of the specified matrix. + + The matrix whose inverse is to be calculated. + When the method completes, contains the inverse of the specified matrix. + + + + Calculates the inverse of the specified matrix. + + The matrix whose inverse is to be calculated. + The inverse of the specified matrix. + + + + Orthogonalizes the specified matrix. + + The matrix to orthogonalize. + When the method completes, contains the orthogonalized matrix. + + Orthogonalization is the process of making all rows orthogonal to each other. This + means that any given row in the matrix will be orthogonal to any other given row in the + matrix. + Because this method uses the modified Gram-Schmidt process, the resulting matrix + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the matrix rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Orthogonalizes the specified matrix. + + The matrix to orthogonalize. + The orthogonalized matrix. + + Orthogonalization is the process of making all rows orthogonal to each other. This + means that any given row in the matrix will be orthogonal to any other given row in the + matrix. + Because this method uses the modified Gram-Schmidt process, the resulting matrix + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the matrix rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Orthonormalizes the specified matrix. + + The matrix to orthonormalize. + When the method completes, contains the orthonormalized matrix. + + Orthonormalization is the process of making all rows and columns orthogonal to each + other and making all rows and columns of unit length. This means that any given row will + be orthogonal to any other given row and any given column will be orthogonal to any other + given column. Any given row will not be orthogonal to any given column. Every row and every + column will be of unit length. + Because this method uses the modified Gram-Schmidt process, the resulting matrix + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the matrix rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Orthonormalizes the specified matrix. + + The matrix to orthonormalize. + The orthonormalized matrix. + + Orthonormalization is the process of making all rows and columns orthogonal to each + other and making all rows and columns of unit length. This means that any given row will + be orthogonal to any other given row and any given column will be orthogonal to any other + given column. Any given row will not be orthogonal to any given column. Every row and every + column will be of unit length. + Because this method uses the modified Gram-Schmidt process, the resulting matrix + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the matrix rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Brings the matrix into upper triangular form using elementary row operations. + + The matrix to put into upper triangular form. + When the method completes, contains the upper triangular matrix. + + If the matrix is not invertible (i.e. its determinant is zero) than the result of this + method may produce Single.Nan and Single.Inf values. When the matrix represents a system + of linear equations, than this often means that either no solution exists or an infinite + number of solutions exist. + + + + + Brings the matrix into upper triangular form using elementary row operations. + + The matrix to put into upper triangular form. + The upper triangular matrix. + + If the matrix is not invertible (i.e. its determinant is zero) than the result of this + method may produce Single.Nan and Single.Inf values. When the matrix represents a system + of linear equations, than this often means that either no solution exists or an infinite + number of solutions exist. + + + + + Brings the matrix into lower triangular form using elementary row operations. + + The matrix to put into lower triangular form. + When the method completes, contains the lower triangular matrix. + + If the matrix is not invertible (i.e. its determinant is zero) than the result of this + method may produce Single.Nan and Single.Inf values. When the matrix represents a system + of linear equations, than this often means that either no solution exists or an infinite + number of solutions exist. + + + + + Brings the matrix into lower triangular form using elementary row operations. + + The matrix to put into lower triangular form. + The lower triangular matrix. + + If the matrix is not invertible (i.e. its determinant is zero) than the result of this + method may produce Single.Nan and Single.Inf values. When the matrix represents a system + of linear equations, than this often means that either no solution exists or an infinite + number of solutions exist. + + + + + Brings the matrix into row echelon form using elementary row operations; + + The matrix to put into row echelon form. + When the method completes, contains the row echelon form of the matrix. + + + + Brings the matrix into row echelon form using elementary row operations; + + The matrix to put into row echelon form. + When the method completes, contains the row echelon form of the matrix. + + + + Brings the matrix into reduced row echelon form using elementary row operations. + + The matrix to put into reduced row echelon form. + The fifth column of the matrix. + When the method completes, contains the resultant matrix after the operation. + When the method completes, contains the resultant fifth column of the matrix. + + The fifth column is often called the augmented part of the matrix. This is because the fifth + column is really just an extension of the matrix so that there is a place to put all of the + non-zero components after the operation is complete. + Often times the resultant matrix will the identity matrix or a matrix similar to the identity + matrix. Sometimes, however, that is not possible and numbers other than zero and one may appear. + This method can be used to solve systems of linear equations. Upon completion of this method, + the will contain the solution for the system. It is up to the user + to analyze both the input and the result to determine if a solution really exists. + + + + + Creates a left-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + When the method completes, contains the created billboard matrix. + + + + Creates a left-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + The created billboard matrix. + + + + Creates a right-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + When the method completes, contains the created billboard matrix. + + + + Creates a right-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + The created billboard matrix. + + + + Creates a left-handed, look-at matrix. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + When the method completes, contains the created look-at matrix. + + + + Creates a left-handed, look-at matrix. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + The created look-at matrix. + + + + Creates a right-handed, look-at matrix. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + When the method completes, contains the created look-at matrix. + + + + Creates a right-handed, look-at matrix. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + The created look-at matrix. + + + + Creates a left-handed, orthographic projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + + Creates a left-handed, orthographic projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + + Creates a right-handed, orthographic projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + + Creates a right-handed, orthographic projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + + Creates a left-handed, customized orthographic projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + + Creates a left-handed, customized orthographic projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + + Creates a right-handed, customized orthographic projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + + Creates a right-handed, customized orthographic projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + + Creates a left-handed, perspective projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + + Creates a left-handed, perspective projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + + Creates a right-handed, perspective projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + + Creates a right-handed, perspective projection matrix. + + Width of the viewing volume. + Height of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + + Creates a left-handed, perspective projection matrix based on a field of view. + + Field of view in the y direction, in radians. + Aspect ratio, defined as view space width divided by height. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + + Creates a left-handed, perspective projection matrix based on a field of view. + + Field of view in the y direction, in radians. + Aspect ratio, defined as view space width divided by height. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + + Creates a right-handed, perspective projection matrix based on a field of view. + + Field of view in the y direction, in radians. + Aspect ratio, defined as view space width divided by height. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + + Creates a right-handed, perspective projection matrix based on a field of view. + + Field of view in the y direction, in radians. + Aspect ratio, defined as view space width divided by height. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + + Creates a left-handed, customized perspective projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + + Creates a left-handed, customized perspective projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + + Creates a right-handed, customized perspective projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + When the method completes, contains the created projection matrix. + + + + Creates a right-handed, customized perspective projection matrix. + + Minimum x-value of the viewing volume. + Maximum x-value of the viewing volume. + Minimum y-value of the viewing volume. + Maximum y-value of the viewing volume. + Minimum z-value of the viewing volume. + Maximum z-value of the viewing volume. + The created projection matrix. + + + + Creates a matrix that scales along the x-axis, y-axis, and y-axis. + + Scaling factor for all three axes. + When the method completes, contains the created scaling matrix. + + + + Creates a matrix that scales along the x-axis, y-axis, and y-axis. + + Scaling factor for all three axes. + The created scaling matrix. + + + + Creates a matrix that scales along the x-axis, y-axis, and y-axis. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + Scaling factor that is applied along the z-axis. + When the method completes, contains the created scaling matrix. + + + + Creates a matrix that scales along the x-axis, y-axis, and y-axis. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + Scaling factor that is applied along the z-axis. + The created scaling matrix. + + + + Creates a matrix that uniformly scales along all three axis. + + The uniform scale that is applied along all axis. + When the method completes, contains the created scaling matrix. + + + + Creates a matrix that uniformly scales along all three axis. + + The uniform scale that is applied along all axis. + The created scaling matrix. + + + + Creates a matrix that rotates around the x-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation matrix. + + + + Creates a matrix that rotates around the x-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation matrix. + + + + Creates a matrix that rotates around the y-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation matrix. + + + + Creates a matrix that rotates around the y-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation matrix. + + + + Creates a matrix that rotates around the z-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation matrix. + + + + Creates a matrix that rotates around the z-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation matrix. + + + + Creates a matrix that rotates around an arbitrary axis. + + The axis around which to rotate. This parameter is assumed to be normalized. + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation matrix. + + + + Creates a matrix that rotates around an arbitrary axis. + + The axis around which to rotate. This parameter is assumed to be normalized. + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation matrix. + + + + Creates a rotation matrix from a quaternion. + + The quaternion to use to build the matrix. + The created rotation matrix. + + + + Creates a rotation matrix from a quaternion. + + The quaternion to use to build the matrix. + The created rotation matrix. + + + + Creates a rotation matrix with a specified yaw, pitch, and roll. + + Yaw around the y-axis, in radians. + Pitch around the x-axis, in radians. + Roll around the z-axis, in radians. + When the method completes, contains the created rotation matrix. + + + + Creates a rotation matrix with a specified yaw, pitch, and roll. + + Yaw around the y-axis, in radians. + Pitch around the x-axis, in radians. + Roll around the z-axis, in radians. + The created rotation matrix. + + + + Creates a translation matrix using the specified offsets. + + The offset for all three coordinate planes. + When the method completes, contains the created translation matrix. + + + + Creates a translation matrix using the specified offsets. + + The offset for all three coordinate planes. + The created translation matrix. + + + + Creates a translation matrix using the specified offsets. + + X-coordinate offset. + Y-coordinate offset. + Z-coordinate offset. + When the method completes, contains the created translation matrix. + + + + Creates a translation matrix using the specified offsets. + + X-coordinate offset. + Y-coordinate offset. + Z-coordinate offset. + The created translation matrix. + + + + Creates a skew/shear matrix by means of a translation vector, a rotation vector, and a rotation angle. + shearing is performed in the direction of translation vector, where translation vector and rotation vector define the shearing plane. + The effect is such that the skewed rotation vector has the specified angle with rotation itself. + + The rotation angle. + The rotation vector + The translation vector + Contains the created skew/shear matrix. + + + + Creates a 3D affine transformation matrix. + + Scaling factor. + The rotation of the transformation. + The translation factor of the transformation. + When the method completes, contains the created affine transformation matrix. + + + + Creates a 3D affine transformation matrix. + + Scaling factor. + The rotation of the transformation. + The translation factor of the transformation. + The created affine transformation matrix. + + + + Creates a 3D affine transformation matrix. + + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + When the method completes, contains the created affine transformation matrix. + + + + Creates a 3D affine transformation matrix. + + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + The created affine transformation matrix. + + + + Creates a 2D affine transformation matrix. + + Scaling factor. + The rotation of the transformation. + The translation factor of the transformation. + When the method completes, contains the created affine transformation matrix. + + + + Creates a 2D affine transformation matrix. + + Scaling factor. + The rotation of the transformation. + The translation factor of the transformation. + The created affine transformation matrix. + + + + Creates a 2D affine transformation matrix. + + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + When the method completes, contains the created affine transformation matrix. + + + + Creates a 2D affine transformation matrix. + + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + The created affine transformation matrix. + + + + Creates a transformation matrix. + + Center point of the scaling operation. + Scaling rotation amount. + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + When the method completes, contains the created transformation matrix. + + + + Creates a transformation matrix. + + Center point of the scaling operation. + Scaling rotation amount. + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + The created transformation matrix. + + + + Creates a 2D transformation matrix. + + Center point of the scaling operation. + Scaling rotation amount. + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + When the method completes, contains the created transformation matrix. + + + + Creates a 2D transformation matrix. + + Center point of the scaling operation. + Scaling rotation amount. + Scaling factor. + The center of the rotation. + The rotation of the transformation. + The translation factor of the transformation. + The created transformation matrix. + + + + Adds two matrices. + + The first matrix to add. + The second matrix to add. + The sum of the two matrices. + + + + Assert a matrix (return it unchanged). + + The matrix to assert (unchanged). + The asserted (unchanged) matrix. + + + + Subtracts two matrices. + + The first matrix to subtract. + The second matrix to subtract. + The difference between the two matrices. + + + + Negates a matrix. + + The matrix to negate. + The negated matrix. + + + + Scales a matrix by a given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + + Scales a matrix by a given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + + Multiplies two matrices. + + The first matrix to multiply. + The second matrix to multiply. + The product of the two matrices. + + + + Scales a matrix by a given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + + Divides two matrices. + + The first matrix to divide. + The second matrix to divide. + The quotient of the two matrices. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Direct2D Matrix3x2. Supports implicit cast from . + + + + + Gets the identity matrix. + + The identity matrix. + + + + Element (1,1) + + + + + Element (1,2) + + + + + Element (2,1) + + + + + Element (2,2) + + + + + Element (3,1) + + + + + Element (3,2) + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The value to assign at row 1 column 1 of the matrix. + The value to assign at row 1 column 2 of the matrix. + The value to assign at row 2 column 1 of the matrix. + The value to assign at row 2 column 2 of the matrix. + The value to assign at row 3 column 1 of the matrix. + The value to assign at row 3 column 2 of the matrix. + + + + Initializes a new instance of the struct. + + The values to assign to the components of the matrix. This must be an array with six elements. + Thrown when is null. + Thrown when contains more or less than six elements. + + + + Gets or sets the first row in the matrix; that is M11 and M12. + + + + + Gets or sets the second row in the matrix; that is M21 and M22. + + + + + Gets or sets the third row in the matrix; that is M31 and M32. + + + + + Gets or sets the first column in the matrix; that is M11, M21, and M31. + + + + + Gets or sets the second column in the matrix; that is M12, M22, and M32. + + + + + Gets or sets the translation of the matrix; that is M31 and M32. + + + + + Gets or sets the scale of the matrix; that is M11 and M22. + + + + + Gets a value indicating whether this instance is an identity matrix. + + + true if this instance is an identity matrix; otherwise, false. + + + + + Gets or sets the component at the specified index. + + The value of the matrix component, depending on the index. + The zero-based index of the component to access. + The value of the component at the specified index. + Thrown when the is out of the range [0, 5]. + + + + Gets or sets the component at the specified index. + + The value of the matrix component, depending on the index. + The row of the matrix to access. + The column of the matrix to access. + The value of the component at the specified index. + Thrown when the or is out of the range [0, 3]. + + + + Creates an array containing the elements of the matrix. + + A sixteen-element array containing the components of the matrix. + + + + Determines the sum of two matrices. + + The first matrix to add. + The second matrix to add. + When the method completes, contains the sum of the two matrices. + + + + Determines the sum of two matrices. + + The first matrix to add. + The second matrix to add. + The sum of the two matrices. + + + + Determines the difference between two matrices. + + The first matrix to subtract. + The second matrix to subtract. + When the method completes, contains the difference between the two matrices. + + + + Determines the difference between two matrices. + + The first matrix to subtract. + The second matrix to subtract. + The difference between the two matrices. + + + + Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + When the method completes, contains the scaled matrix. + + + + Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + + Determines the product of two matrices. + + The first matrix to multiply. + The second matrix to multiply. + The product of the two matrices. + + + + Determines the product of two matrices. + + The first matrix to multiply. + The second matrix to multiply. + The product of the two matrices. + + + + Scales a matrix by the given value. + + The matrix to scale. + The amount by which to scale. + When the method completes, contains the scaled matrix. + + + + Determines the quotient of two matrices. + + The first matrix to divide. + The second matrix to divide. + When the method completes, contains the quotient of the two matrices. + + + + Negates a matrix. + + The matrix to be negated. + When the method completes, contains the negated matrix. + + + + Negates a matrix. + + The matrix to be negated. + The negated matrix. + + + + Performs a linear interpolation between two matrices. + + Start matrix. + End matrix. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two matrices. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two matrices. + + Start matrix. + End matrix. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two matrices. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two matrices. + + Start matrix. + End matrix. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two matrices. + + + + Performs a cubic interpolation between two matrices. + + Start matrix. + End matrix. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two matrices. + + + + Creates a matrix that scales along the x-axis and y-axis. + + Scaling factor for both axes. + When the method completes, contains the created scaling matrix. + + + + Creates a matrix that scales along the x-axis and y-axis. + + Scaling factor for both axes. + The created scaling matrix. + + + + Creates a matrix that scales along the x-axis and y-axis. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + When the method completes, contains the created scaling matrix. + + + + Creates a matrix that scales along the x-axis and y-axis. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + The created scaling matrix. + + + + Creates a matrix that uniformly scales along both axes. + + The uniform scale that is applied along both axes. + When the method completes, contains the created scaling matrix. + + + + Creates a matrix that uniformly scales along both axes. + + The uniform scale that is applied along both axes. + The created scaling matrix. + + + + Creates a matrix that is scaling from a specified center. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + The center of the scaling. + The created scaling matrix. + + + + Creates a matrix that is scaling from a specified center. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + The center of the scaling. + The created scaling matrix. + + + + Calculates the determinant of this matrix. + + Result of the determinant. + + + + Creates a matrix that rotates. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis. + When the method completes, contains the created rotation matrix. + + + + Creates a matrix that rotates. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis. + The created rotation matrix. + + + + Creates a matrix that rotates about a specified center. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis. + The center of the rotation. + The created rotation matrix. + + + + Creates a matrix that rotates about a specified center. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis. + The center of the rotation. + When the method completes, contains the created rotation matrix. + + + + Creates a transformation matrix. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis. + X-coordinate offset. + Y-coordinate offset. + When the method completes, contains the created transformation matrix. + + + + Creates a transformation matrix. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + Angle of rotation in radians. + X-coordinate offset. + Y-coordinate offset. + The created transformation matrix. + + + + Creates a translation matrix using the specified offsets. + + The offset for both coordinate planes. + When the method completes, contains the created translation matrix. + + + + Creates a translation matrix using the specified offsets. + + The offset for both coordinate planes. + The created translation matrix. + + + + Creates a translation matrix using the specified offsets. + + X-coordinate offset. + Y-coordinate offset. + When the method completes, contains the created translation matrix. + + + + Creates a translation matrix using the specified offsets. + + X-coordinate offset. + Y-coordinate offset. + The created translation matrix. + + + + Transforms a vector by this matrix. + + The matrix to use as a transformation matrix. + The original vector to apply the transformation. + The result of the transformation for the input vector. + + + + Transforms a vector by this matrix. + + The matrix to use as a transformation matrix. + The original vector to apply the transformation. + The result of the transformation for the input vector. + + + + + Calculates the inverse of this matrix instance. + + + + + Calculates the inverse of the specified matrix. + + The matrix whose inverse is to be calculated. + the inverse of the specified matrix. + + + + Creates a skew matrix. + + Angle of skew along the X-axis in radians. + Angle of skew along the Y-axis in radians. + The created skew matrix. + + + + Creates a skew matrix. + + Angle of skew along the X-axis in radians. + Angle of skew along the Y-axis in radians. + When the method completes, contains the created skew matrix. + + + + Calculates the inverse of the specified matrix. + + The matrix whose inverse is to be calculated. + When the method completes, contains the inverse of the specified matrix. + + + + Adds two matrices. + + The first matrix to add. + The second matrix to add. + The sum of the two matrices. + + + + Assert a matrix (return it unchanged). + + The matrix to assert (unchanged). + The asserted (unchanged) matrix. + + + + Subtracts two matrices. + + The first matrix to subtract. + The second matrix to subtract. + The difference between the two matrices. + + + + Negates a matrix. + + The matrix to negate. + The negated matrix. + + + + Scales a matrix by a given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + + Scales a matrix by a given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + + Multiplies two matrices. + + The first matrix to multiply. + The second matrix to multiply. + The product of the two matrices. + + + + Scales a matrix by a given value. + + The matrix to scale. + The amount by which to scale. + The scaled matrix. + + + + Divides two matrices. + + The first matrix to divide. + The second matrix to divide. + The quotient of the two matrices. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from to . + + The matrix. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Represents a 3x3 Matrix ( contains only Scale and Rotation ). + + + + + The size of the type, in bytes. + + + + + A with all of its components set to zero. + + + + + The identity . + + + + + Value at row 1 column 1 of the Matrix3x3. + + + + + Value at row 1 column 2 of the Matrix3x3. + + + + + Value at row 1 column 3 of the Matrix3x3. + + + + + Value at row 2 column 1 of the Matrix3x3. + + + + + Value at row 2 column 2 of the Matrix3x3. + + + + + Value at row 2 column 3 of the Matrix3x3. + + + + + Value at row 3 column 1 of the Matrix3x3. + + + + + Value at row 3 column 2 of the Matrix3x3. + + + + + Value at row 3 column 3 of the Matrix3x3. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The value to assign at row 1 column 1 of the Matrix3x3. + The value to assign at row 1 column 2 of the Matrix3x3. + The value to assign at row 1 column 3 of the Matrix3x3. + The value to assign at row 2 column 1 of the Matrix3x3. + The value to assign at row 2 column 2 of the Matrix3x3. + The value to assign at row 2 column 3 of the Matrix3x3. + The value to assign at row 3 column 1 of the Matrix3x3. + The value to assign at row 3 column 2 of the Matrix3x3. + The value to assign at row 3 column 3 of the Matrix3x3. + + + + Initializes a new instance of the struct. + + The values to assign to the components of the Matrix3x3. This must be an array with sixteen elements. + Thrown when is null. + Thrown when contains more or less than sixteen elements. + + + + Gets or sets the first row in the Matrix3x3; that is M11, M12, M13 + + + + + Gets or sets the second row in the Matrix3x3; that is M21, M22, M23 + + + + + Gets or sets the third row in the Matrix3x3; that is M31, M32, M33 + + + + + Gets or sets the first column in the Matrix3x3; that is M11, M21, M31 + + + + + Gets or sets the second column in the Matrix3x3; that is M12, M22, M32 + + + + + Gets or sets the third column in the Matrix3x3; that is M13, M23, M33 + + + + + Gets or sets the scale of the Matrix3x3; that is M11, M22, and M33. + + + + + Gets a value indicating whether this instance is an identity Matrix3x3. + + + true if this instance is an identity Matrix3x3; otherwise, false. + + + + + Gets or sets the component at the specified index. + + The value of the Matrix3x3 component, depending on the index. + The zero-based index of the component to access. + The value of the component at the specified index. + Thrown when the is out of the range [0, 15]. + + + + Gets or sets the component at the specified index. + + The value of the Matrix3x3 component, depending on the index. + The row of the Matrix3x3 to access. + The column of the Matrix3x3 to access. + The value of the component at the specified index. + Thrown when the or is out of the range [0, 3]. + + + + Calculates the determinant of the Matrix3x3. + + The determinant of the Matrix3x3. + + + + Inverts the Matrix3x3. + + + + + Transposes the Matrix3x3. + + + + + Orthogonalizes the specified Matrix3x3. + + + Orthogonalization is the process of making all rows orthogonal to each other. This + means that any given row in the Matrix3x3 will be orthogonal to any other given row in the + Matrix3x3. + Because this method uses the modified Gram-Schmidt process, the resulting Matrix3x3 + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the Matrix3x3 rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Orthonormalizes the specified Matrix3x3. + + + Orthonormalization is the process of making all rows and columns orthogonal to each + other and making all rows and columns of unit length. This means that any given row will + be orthogonal to any other given row and any given column will be orthogonal to any other + given column. Any given row will not be orthogonal to any given column. Every row and every + column will be of unit length. + Because this method uses the modified Gram-Schmidt process, the resulting Matrix3x3 + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the Matrix3x3 rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Decomposes a Matrix3x3 into an orthonormalized Matrix3x3 Q and a right triangular Matrix3x3 R. + + When the method completes, contains the orthonormalized Matrix3x3 of the decomposition. + When the method completes, contains the right triangular Matrix3x3 of the decomposition. + + + + Decomposes a Matrix3x3 into a lower triangular Matrix3x3 L and an orthonormalized Matrix3x3 Q. + + When the method completes, contains the lower triangular Matrix3x3 of the decomposition. + When the method completes, contains the orthonormalized Matrix3x3 of the decomposition. + + + + Decomposes a Matrix3x3 into a scale, rotation, and translation. + + When the method completes, contains the scaling component of the decomposed Matrix3x3. + When the method completes, contains the rotation component of the decomposed Matrix3x3. + + This method is designed to decompose an SRT transformation Matrix3x3 only. + + + + + Decomposes a uniform scale matrix into a scale, rotation, and translation. + A uniform scale matrix has the same scale in every axis. + + When the method completes, contains the scaling component of the decomposed matrix. + When the method completes, contains the rotation component of the decomposed matrix. + + This method is designed to decompose only an SRT transformation matrix that has the same scale in every axis. + + + + + Exchanges two rows in the Matrix3x3. + + The first row to exchange. This is an index of the row starting at zero. + The second row to exchange. This is an index of the row starting at zero. + + + + Exchanges two columns in the Matrix3x3. + + The first column to exchange. This is an index of the column starting at zero. + The second column to exchange. This is an index of the column starting at zero. + + + + Creates an array containing the elements of the Matrix3x3. + + A 9-element array containing the components of the Matrix3x3. + + + + Determines the sum of two matrices. + + The first Matrix3x3 to add. + The second Matrix3x3 to add. + When the method completes, contains the sum of the two matrices. + + + + Determines the sum of two matrices. + + The first Matrix3x3 to add. + The second Matrix3x3 to add. + The sum of the two matrices. + + + + Determines the difference between two matrices. + + The first Matrix3x3 to subtract. + The second Matrix3x3 to subtract. + When the method completes, contains the difference between the two matrices. + + + + Determines the difference between two matrices. + + The first Matrix3x3 to subtract. + The second Matrix3x3 to subtract. + The difference between the two matrices. + + + + Scales a Matrix3x3 by the given value. + + The Matrix3x3 to scale. + The amount by which to scale. + When the method completes, contains the scaled Matrix3x3. + + + + Scales a Matrix3x3 by the given value. + + The Matrix3x3 to scale. + The amount by which to scale. + The scaled Matrix3x3. + + + + Determines the product of two matrices. + + The first Matrix3x3 to multiply. + The second Matrix3x3 to multiply. + The product of the two matrices. + + + + Determines the product of two matrices. + + The first Matrix3x3 to multiply. + The second Matrix3x3 to multiply. + The product of the two matrices. + + + + Scales a Matrix3x3 by the given value. + + The Matrix3x3 to scale. + The amount by which to scale. + When the method completes, contains the scaled Matrix3x3. + + + + Scales a Matrix3x3 by the given value. + + The Matrix3x3 to scale. + The amount by which to scale. + The scaled Matrix3x3. + + + + Determines the quotient of two matrices. + + The first Matrix3x3 to divide. + The second Matrix3x3 to divide. + When the method completes, contains the quotient of the two matrices. + + + + Determines the quotient of two matrices. + + The first Matrix3x3 to divide. + The second Matrix3x3 to divide. + The quotient of the two matrices. + + + + Performs the exponential operation on a Matrix3x3. + + The Matrix3x3 to perform the operation on. + The exponent to raise the Matrix3x3 to. + When the method completes, contains the exponential Matrix3x3. + Thrown when the is negative. + + + + Performs the exponential operation on a Matrix3x3. + + The Matrix3x3 to perform the operation on. + The exponent to raise the Matrix3x3 to. + The exponential Matrix3x3. + Thrown when the is negative. + + + + Negates a Matrix3x3. + + The Matrix3x3 to be negated. + When the method completes, contains the negated Matrix3x3. + + + + Negates a Matrix3x3. + + The Matrix3x3 to be negated. + The negated Matrix3x3. + + + + Performs a linear interpolation between two matrices. + + Start Matrix3x3. + End Matrix3x3. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two matrices. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two matrices. + + Start Matrix3x3. + End Matrix3x3. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two matrices. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two matrices. + + Start Matrix3x3. + End Matrix3x3. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two matrices. + + + + Performs a cubic interpolation between two matrices. + + Start Matrix3x3. + End Matrix3x3. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two matrices. + + + + Calculates the transpose of the specified Matrix3x3. + + The Matrix3x3 whose transpose is to be calculated. + When the method completes, contains the transpose of the specified Matrix3x3. + + + + Calculates the transpose of the specified Matrix3x3. + + The Matrix3x3 whose transpose is to be calculated. + When the method completes, contains the transpose of the specified Matrix3x3. + + + + Calculates the transpose of the specified Matrix3x3. + + The Matrix3x3 whose transpose is to be calculated. + The transpose of the specified Matrix3x3. + + + + Calculates the inverse of the specified Matrix3x3. + + The Matrix3x3 whose inverse is to be calculated. + When the method completes, contains the inverse of the specified Matrix3x3. + + + + Calculates the inverse of the specified Matrix3x3. + + The Matrix3x3 whose inverse is to be calculated. + The inverse of the specified Matrix3x3. + + + + Orthogonalizes the specified Matrix3x3. + + The Matrix3x3 to orthogonalize. + When the method completes, contains the orthogonalized Matrix3x3. + + Orthogonalization is the process of making all rows orthogonal to each other. This + means that any given row in the Matrix3x3 will be orthogonal to any other given row in the + Matrix3x3. + Because this method uses the modified Gram-Schmidt process, the resulting Matrix3x3 + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the Matrix3x3 rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Orthogonalizes the specified Matrix3x3. + + The Matrix3x3 to orthogonalize. + The orthogonalized Matrix3x3. + + Orthogonalization is the process of making all rows orthogonal to each other. This + means that any given row in the Matrix3x3 will be orthogonal to any other given row in the + Matrix3x3. + Because this method uses the modified Gram-Schmidt process, the resulting Matrix3x3 + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the Matrix3x3 rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Orthonormalizes the specified Matrix3x3. + + The Matrix3x3 to orthonormalize. + When the method completes, contains the orthonormalized Matrix3x3. + + Orthonormalization is the process of making all rows and columns orthogonal to each + other and making all rows and columns of unit length. This means that any given row will + be orthogonal to any other given row and any given column will be orthogonal to any other + given column. Any given row will not be orthogonal to any given column. Every row and every + column will be of unit length. + Because this method uses the modified Gram-Schmidt process, the resulting Matrix3x3 + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the Matrix3x3 rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Orthonormalizes the specified Matrix3x3. + + The Matrix3x3 to orthonormalize. + The orthonormalized Matrix3x3. + + Orthonormalization is the process of making all rows and columns orthogonal to each + other and making all rows and columns of unit length. This means that any given row will + be orthogonal to any other given row and any given column will be orthogonal to any other + given column. Any given row will not be orthogonal to any given column. Every row and every + column will be of unit length. + Because this method uses the modified Gram-Schmidt process, the resulting Matrix3x3 + tends to be numerically unstable. The numeric stability decreases according to the rows + so that the first row is the most stable and the last row is the least stable. + This operation is performed on the rows of the Matrix3x3 rather than the columns. + If you wish for this operation to be performed on the columns, first transpose the + input and than transpose the output. + + + + + Brings the Matrix3x3 into upper triangular form using elementary row operations. + + The Matrix3x3 to put into upper triangular form. + When the method completes, contains the upper triangular Matrix3x3. + + If the Matrix3x3 is not invertible (i.e. its determinant is zero) than the result of this + method may produce Single.Nan and Single.Inf values. When the Matrix3x3 represents a system + of linear equations, than this often means that either no solution exists or an infinite + number of solutions exist. + + + + + Brings the Matrix3x3 into upper triangular form using elementary row operations. + + The Matrix3x3 to put into upper triangular form. + The upper triangular Matrix3x3. + + If the Matrix3x3 is not invertible (i.e. its determinant is zero) than the result of this + method may produce Single.Nan and Single.Inf values. When the Matrix3x3 represents a system + of linear equations, than this often means that either no solution exists or an infinite + number of solutions exist. + + + + + Brings the Matrix3x3 into lower triangular form using elementary row operations. + + The Matrix3x3 to put into lower triangular form. + When the method completes, contains the lower triangular Matrix3x3. + + If the Matrix3x3 is not invertible (i.e. its determinant is zero) than the result of this + method may produce Single.Nan and Single.Inf values. When the Matrix3x3 represents a system + of linear equations, than this often means that either no solution exists or an infinite + number of solutions exist. + + + + + Brings the Matrix3x3 into lower triangular form using elementary row operations. + + The Matrix3x3 to put into lower triangular form. + The lower triangular Matrix3x3. + + If the Matrix3x3 is not invertible (i.e. its determinant is zero) than the result of this + method may produce Single.Nan and Single.Inf values. When the Matrix3x3 represents a system + of linear equations, than this often means that either no solution exists or an infinite + number of solutions exist. + + + + + Brings the Matrix3x3 into row echelon form using elementary row operations; + + The Matrix3x3 to put into row echelon form. + When the method completes, contains the row echelon form of the Matrix3x3. + + + + Brings the Matrix3x3 into row echelon form using elementary row operations; + + The Matrix3x3 to put into row echelon form. + When the method completes, contains the row echelon form of the Matrix3x3. + + + + Creates a left-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + When the method completes, contains the created billboard Matrix3x3. + + + + Creates a left-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + The created billboard Matrix3x3. + + + + Creates a right-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + When the method completes, contains the created billboard Matrix3x3. + + + + Creates a right-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + The created billboard Matrix3x3. + + + + Creates a left-handed, look-at Matrix3x3. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + When the method completes, contains the created look-at Matrix3x3. + + + + Creates a left-handed, look-at Matrix3x3. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + The created look-at Matrix3x3. + + + + Creates a right-handed, look-at Matrix3x3. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + When the method completes, contains the created look-at Matrix3x3. + + + + Creates a right-handed, look-at Matrix3x3. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + The created look-at Matrix3x3. + + + + Creates a Matrix3x3 that scales along the x-axis, y-axis, and y-axis. + + Scaling factor for all three axes. + When the method completes, contains the created scaling Matrix3x3. + + + + Creates a Matrix3x3 that scales along the x-axis, y-axis, and y-axis. + + Scaling factor for all three axes. + The created scaling Matrix3x3. + + + + Creates a Matrix3x3 that scales along the x-axis, y-axis, and y-axis. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + Scaling factor that is applied along the z-axis. + When the method completes, contains the created scaling Matrix3x3. + + + + Creates a Matrix3x3 that scales along the x-axis, y-axis, and y-axis. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + Scaling factor that is applied along the z-axis. + The created scaling Matrix3x3. + + + + Creates a Matrix3x3 that uniformly scales along all three axis. + + The uniform scale that is applied along all axis. + When the method completes, contains the created scaling Matrix3x3. + + + + Creates a Matrix3x3 that uniformly scales along all three axis. + + The uniform scale that is applied along all axis. + The created scaling Matrix3x3. + + + + Creates a Matrix3x3 that rotates around the x-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation Matrix3x3. + + + + Creates a Matrix3x3 that rotates around the x-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation Matrix3x3. + + + + Creates a Matrix3x3 that rotates around the y-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation Matrix3x3. + + + + Creates a Matrix3x3 that rotates around the y-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation Matrix3x3. + + + + Creates a Matrix3x3 that rotates around the z-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation Matrix3x3. + + + + Creates a Matrix3x3 that rotates around the z-axis. + + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation Matrix3x3. + + + + Creates a Matrix3x3 that rotates around an arbitrary axis. + + The axis around which to rotate. This parameter is assumed to be normalized. + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + When the method completes, contains the created rotation Matrix3x3. + + + + Creates a Matrix3x3 that rotates around an arbitrary axis. + + The axis around which to rotate. This parameter is assumed to be normalized. + Angle of rotation in radians. Angles are measured clockwise when looking along the rotation axis toward the origin. + The created rotation Matrix3x3. + + + + Creates a rotation Matrix3x3 from a quaternion. + + The quaternion to use to build the Matrix3x3. + The created rotation Matrix3x3. + + + + Creates a rotation Matrix3x3 from a quaternion. + + The quaternion to use to build the Matrix3x3. + The created rotation Matrix3x3. + + + + Creates a rotation Matrix3x3 with a specified yaw, pitch, and roll. + + Yaw around the y-axis, in radians. + Pitch around the x-axis, in radians. + Roll around the z-axis, in radians. + When the method completes, contains the created rotation Matrix3x3. + + + + Creates a rotation Matrix3x3 with a specified yaw, pitch, and roll. + + Yaw around the y-axis, in radians. + Pitch around the x-axis, in radians. + Roll around the z-axis, in radians. + The created rotation Matrix3x3. + + + + Adds two matrices. + + The first Matrix3x3 to add. + The second Matrix3x3 to add. + The sum of the two matrices. + + + + Assert a Matrix3x3 (return it unchanged). + + The Matrix3x3 to assert (unchanged). + The asserted (unchanged) Matrix3x3. + + + + Subtracts two matrices. + + The first Matrix3x3 to subtract. + The second Matrix3x3 to subtract. + The difference between the two matrices. + + + + Negates a Matrix3x3. + + The Matrix3x3 to negate. + The negated Matrix3x3. + + + + Scales a Matrix3x3 by a given value. + + The Matrix3x3 to scale. + The amount by which to scale. + The scaled Matrix3x3. + + + + Scales a Matrix3x3 by a given value. + + The Matrix3x3 to scale. + The amount by which to scale. + The scaled Matrix3x3. + + + + Multiplies two matrices. + + The first Matrix3x3 to multiply. + The second Matrix3x3 to multiply. + The product of the two matrices. + + + + Scales a Matrix3x3 by a given value. + + The Matrix3x3 to scale. + The amount by which to scale. + The scaled Matrix3x3. + + + + Divides two matrices. + + The first Matrix3x3 to divide. + The second Matrix3x3 to divide. + The quotient of the two matrices. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Convert the 3x3 Matrix to a 4x4 Matrix. + + A 4x4 Matrix with zero translation and M44=1 + + + + Convert the 4x4 Matrix to a 3x3 Matrix. + + A 3x3 Matrix + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified are equal. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Represents a 4x4 mathematical Matrix5x4. + + + + + The size of the type, in bytes. + + + + + A with all of its components set to zero. + + + + + The identity . + + + + + Value at row 1 column 1 of the Matrix5x4. + + + + + Value at row 1 column 2 of the Matrix5x4. + + + + + Value at row 1 column 3 of the Matrix5x4. + + + + + Value at row 1 column 4 of the Matrix5x4. + + + + + Value at row 2 column 1 of the Matrix5x4. + + + + + Value at row 2 column 2 of the Matrix5x4. + + + + + Value at row 2 column 3 of the Matrix5x4. + + + + + Value at row 2 column 4 of the Matrix5x4. + + + + + Value at row 3 column 1 of the Matrix5x4. + + + + + Value at row 3 column 2 of the Matrix5x4. + + + + + Value at row 3 column 3 of the Matrix5x4. + + + + + Value at row 3 column 4 of the Matrix5x4. + + + + + Value at row 4 column 1 of the Matrix5x4. + + + + + Value at row 4 column 2 of the Matrix5x4. + + + + + Value at row 4 column 3 of the Matrix5x4. + + + + + Value at row 4 column 4 of the Matrix5x4. + + + + + Value at row 5 column 1 of the Matrix5x4. + + + + + Value at row 5 column 2 of the Matrix5x4. + + + + + Value at row 5 column 3 of the Matrix5x4. + + + + + Value at row 5 column 4 of the Matrix5x4. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The value to assign at row 1 column 1 of the Matrix5x4. + The value to assign at row 1 column 2 of the Matrix5x4. + The value to assign at row 1 column 3 of the Matrix5x4. + The value to assign at row 1 column 4 of the Matrix5x4. + The value to assign at row 2 column 1 of the Matrix5x4. + The value to assign at row 2 column 2 of the Matrix5x4. + The value to assign at row 2 column 3 of the Matrix5x4. + The value to assign at row 2 column 4 of the Matrix5x4. + The value to assign at row 3 column 1 of the Matrix5x4. + The value to assign at row 3 column 2 of the Matrix5x4. + The value to assign at row 3 column 3 of the Matrix5x4. + The value to assign at row 3 column 4 of the Matrix5x4. + The value to assign at row 4 column 1 of the Matrix5x4. + The value to assign at row 4 column 2 of the Matrix5x4. + The value to assign at row 4 column 3 of the Matrix5x4. + The value to assign at row 4 column 4 of the Matrix5x4. + The value to assign at row 5 column 1 of the Matrix5x4. + The value to assign at row 5 column 2 of the Matrix5x4. + The value to assign at row 5 column 3 of the Matrix5x4. + The value to assign at row 5 column 4 of the Matrix5x4. + + + + Initializes a new instance of the struct. + + The values to assign to the components of the Matrix5x4. This must be an array with sixteen elements. + Thrown when is null. + Thrown when contains more or less than sixteen elements. + + + + Gets or sets the first row in the Matrix5x4; that is M11, M12, M13, and M14. + + + + + Gets or sets the second row in the Matrix5x4; that is M21, M22, M23, and M24. + + + + + Gets or sets the third row in the Matrix5x4; that is M31, M32, M33, and M34. + + + + + Gets or sets the fourth row in the Matrix5x4; that is M41, M42, M43, and M44. + + + + + Gets or sets the fifth row in the Matrix5x4; that is M51, M52, M53, and M54. + + + + + Gets or sets the translation of the Matrix5x4; that is M41, M42, and M43. + + + + + Gets or sets the scale of the Matrix5x4; that is M11, M22, and M33. + + + + + Gets a value indicating whether this instance is an identity Matrix5x4. + + + true if this instance is an identity Matrix5x4; otherwise, false. + + + + + Gets or sets the component at the specified index. + + The value of the Matrix5x4 component, depending on the index. + The zero-based index of the component to access. + The value of the component at the specified index. + Thrown when the is out of the range [0, 15]. + + + + Gets or sets the component at the specified index. + + The value of the Matrix5x4 component, depending on the index. + The row of the Matrix5x4 to access. + The column of the Matrix5x4 to access. + The value of the component at the specified index. + Thrown when the or is out of the range [0, 3]. + + + + Determines the sum of two matrices. + + The first Matrix5x4 to add. + The second Matrix5x4 to add. + When the method completes, contains the sum of the two matrices. + + + + Determines the sum of two matrices. + + The first Matrix5x4 to add. + The second Matrix5x4 to add. + The sum of the two matrices. + + + + Determines the difference between two matrices. + + The first Matrix5x4 to subtract. + The second Matrix5x4 to subtract. + When the method completes, contains the difference between the two matrices. + + + + Determines the difference between two matrices. + + The first Matrix5x4 to subtract. + The second Matrix5x4 to subtract. + The difference between the two matrices. + + + + Scales a Matrix5x4 by the given value. + + The Matrix5x4 to scale. + The amount by which to scale. + When the method completes, contains the scaled Matrix5x4. + + + + Scales a Matrix5x4 by the given value. + + The Matrix5x4 to scale. + The amount by which to scale. + When the method completes, contains the scaled Matrix5x4. + + + + Negates a Matrix5x4. + + The Matrix5x4 to be negated. + When the method completes, contains the negated Matrix5x4. + + + + Negates a Matrix5x4. + + The Matrix5x4 to be negated. + The negated Matrix5x4. + + + + Performs a linear interpolation between two matrices. + + Start Matrix5x4. + End Matrix5x4. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two matrices. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two matrices. + + Start Matrix5x4. + End Matrix5x4. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two matrices. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two matrices. + + Start Matrix5x4. + End Matrix5x4. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two matrices. + + + + Performs a cubic interpolation between two matrices. + + Start Matrix5x4. + End Matrix5x4. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two matrices. + + + + Creates a Matrix5x4 that scales along the x-axis, y-axis, y-axis and w-axis + + Scaling factor for all three axes. + When the method completes, contains the created scaling Matrix5x4. + + + + Creates a Matrix5x4 that scales along the x-axis, y-axis, and y-axis. + + Scaling factor for all three axes. + The created scaling Matrix5x4. + + + + Creates a Matrix5x4 that scales along the x-axis, y-axis, z-axis and w-axis. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + Scaling factor that is applied along the z-axis. + Scaling factor that is applied along the w-axis. + When the method completes, contains the created scaling Matrix5x4. + + + + Creates a Matrix5x4 that scales along the x-axis, y-axis, z-axis and w-axis. + + Scaling factor that is applied along the x-axis. + Scaling factor that is applied along the y-axis. + Scaling factor that is applied along the z-axis. + Scaling factor that is applied along the w-axis. + The created scaling Matrix5x4. + + + + Creates a Matrix5x4 that uniformly scales along all three axis. + + The uniform scale that is applied along all axis. + When the method completes, contains the created scaling Matrix5x4. + + + + Creates a Matrix5x4 that uniformly scales along all three axis. + + The uniform scale that is applied along all axis. + The created scaling Matrix5x4. + + + + Creates a translation Matrix5x4 using the specified offsets. + + The offset for all three coordinate planes. + When the method completes, contains the created translation Matrix5x4. + + + + Creates a translation Matrix5x4 using the specified offsets. + + The offset for all three coordinate planes. + The created translation Matrix5x4. + + + + Creates a translation Matrix5x4 using the specified offsets. + + X-coordinate offset. + Y-coordinate offset. + Z-coordinate offset. + W-coordinate offset. + When the method completes, contains the created translation Matrix5x4. + + + + Creates a translation Matrix5x4 using the specified offsets. + + X-coordinate offset. + Y-coordinate offset. + Z-coordinate offset. + W-coordinate offset. + The created translation Matrix5x4. + + + + Adds two matrices. + + The first Matrix5x4 to add. + The second Matrix5x4 to add. + The sum of the two matrices. + + + + Assert a Matrix5x4 (return it unchanged). + + The Matrix5x4 to assert (unchanged). + The asserted (unchanged) Matrix5x4. + + + + Subtracts two matrices. + + The first Matrix5x4 to subtract. + The second Matrix5x4 to subtract. + The difference between the two matrices. + + + + Negates a Matrix5x4. + + The Matrix5x4 to negate. + The negated Matrix5x4. + + + + Scales a Matrix5x4 by a given value. + + The Matrix5x4 to scale. + The amount by which to scale. + The scaled Matrix5x4. + + + + Scales a Matrix5x4 by a given value. + + The Matrix5x4 to scale. + The amount by which to scale. + The scaled Matrix5x4. + + + + Scales a Matrix5x4 by a given value. + + The Matrix5x4 to scale. + The amount by which to scale. + The scaled Matrix5x4. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + OrientedBoundingBox (OBB) is a rectangular block, much like an AABB (BoundingBox) but with an arbitrary orientation. + + + + + Half lengths of the box along each axis. + + + + + The matrix which aligns and scales the box, and its translation vector represents the center of the box. + + + + + Creates an from a BoundingBox. + + The BoundingBox to create from. + + Initially, the OBB is axis-aligned box, but it can be rotated and transformed later. + + + + + Creates an which contained between two minimum and maximum points. + + The minimum vertex of the bounding box. + The maximum vertex of the bounding box. + + Initially, the OrientedBoundingBox is axis-aligned box, but it can be rotated and transformed later. + + + + + Creates an that fully contains the given points. + + The points that will be contained by the box. + + This method is not for computing the best tight-fitting OrientedBoundingBox. + And initially, the OrientedBoundingBox is axis-aligned box, but it can be rotated and transformed later. + + + + + Retrieves the eight corners of the bounding box. + + An array of points representing the eight corners of the bounding box. + + + + Transforms this box using a transformation matrix. + + The transformation matrix. + + While any kind of transformation can be applied, it is recommended to apply scaling using scale method instead, which + scales the Extents and keeps the Transformation matrix for rotation only, and that preserves collision detection accuracy. + + + + + Transforms this box using a transformation matrix. + + The transformation matrix. + + While any kind of transformation can be applied, it is recommended to apply scaling using scale method instead, which + scales the Extents and keeps the Transformation matrix for rotation only, and that preserves collision detection accuracy. + + + + + Scales the by scaling its Extents without affecting the Transformation matrix, + By keeping Transformation matrix scaling-free, the collision detection methods will be more accurate. + + + + + + Scales the by scaling its Extents without affecting the Transformation matrix, + By keeping Transformation matrix scaling-free, the collision detection methods will be more accurate. + + + + + + Scales the by scaling its Extents without affecting the Transformation matrix, + By keeping Transformation matrix scaling-free, the collision detection methods will be more accurate. + + + + + + Translates the to a new position using a translation vector; + + the translation vector. + + + + Translates the to a new position using a translation vector; + + the translation vector. + + + + The size of the if no scaling is applied to the transformation matrix. + + + The property will return the actual size even if the scaling is applied using Scale method, + but if the scaling is applied to transformation matrix, use GetSize Function instead. + + + + + Returns the size of the taking into consideration the scaling applied to the transformation matrix. + + The size of the consideration + + This method is computationally expensive, so if no scale is applied to the transformation matrix + use property instead. + + + + + Returns the square size of the taking into consideration the scaling applied to the transformation matrix. + + The size of the consideration + + + + Returns the center of the . + + + + + Determines whether a contains a point. + + The point to test. + The type of containment the two objects have. + + + + Determines whether a contains a point. + + The point to test. + The type of containment the two objects have. + + + + Determines whether a contains an array of points>. + + The points array to test. + The type of containment. + + + + Determines whether a contains a . + + The sphere to test. + Optimize the check operation by assuming that has no scaling applied + The type of containment the two objects have. + + This method is not designed for which has a non-uniform scaling applied to its transformation matrix. + But any type of scaling applied using Scale method will keep this method accurate. + + + + + Check the intersection between two + + The OrientedBoundingBoxs to test. + The type of containment the two objects have. + + For accuracy, The transformation matrix for both must not have any scaling applied to it. + Anyway, scaling using Scale method will keep this method accurate. + + + + + Check the intersection between an and a line defined by two points + + The first point in the line. + The second point in the line. + The type of containment the two objects have. + + For accuracy, The transformation matrix for the must not have any scaling applied to it. + Anyway, scaling using Scale method will keep this method accurate. + + + + + Check the intersection between an and + + The BoundingBox to test. + The type of containment the two objects have. + + For accuracy, The transformation matrix for the must not have any scaling applied to it. + Anyway, scaling using Scale method will keep this method accurate. + + + + + Determines whether there is an intersection between a and a . + + The ray to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines whether there is an intersection between a and a . + + The ray to test. + Whether the two objects intersected. + + + + Get the axis-aligned which contains all corners. + + The axis-aligned BoundingBox of this OrientedBoundingBox. + + + + Calculates the matrix required to transfer any point from one local coordinates to another. + + The source OrientedBoundingBox. + The target OrientedBoundingBox. + + If true, the method will use a fast algorithm which is inapplicable if a scale is applied to the transformation matrix of the OrientedBoundingBox. + + + + + + Merge an OrientedBoundingBox B into another OrientedBoundingBox A, by expanding A to contain B and keeping A orientation. + + The to merge into it. + The to be merged + + If true, the method will use a fast algorithm which is inapplicable if a scale is applied to the transformation matrix of the OrientedBoundingBox. + + + Unlike merging axis aligned boxes, The operation is not interchangeable, because it keeps A orientation and merge B into it. + + + + + Merge this OrientedBoundingBox into another OrientedBoundingBox, keeping the other OrientedBoundingBox orientation. + + The other to merge into. + + If true, the method will use a fast algorithm which is inapplicable if a scale is applied to the transformation matrix of the OrientedBoundingBox. + + + + + Merge another OrientedBoundingBox into this OrientedBoundingBox. + + The other to merge into this OrientedBoundingBox. + + If true, the method will use a fast algorithm which is inapplicable if a scale is applied to the transformation matrix of the OrientedBoundingBox. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Represents a plane in three dimensional space. + + + + + The normal vector of the plane. + + + + + The distance of the plane along its normal from the origin. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + The X component of the normal. + The Y component of the normal. + The Z component of the normal. + The distance of the plane along its normal from the origin. + + + + Initializes a new instance of the class. + + Any point that lies along the plane. + The normal vector to the plane. + + + + Initializes a new instance of the struct. + + The normal of the plane. + The distance of the plane along its normal from the origin + + + + Initializes a new instance of the struct. + + First point of a triangle defining the plane. + Second point of a triangle defining the plane. + Third point of a triangle defining the plane. + + + + Initializes a new instance of the struct. + + The values to assign to the A, B, C, and D components of the plane. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Gets or sets the component at the specified index. + + The value of the A, B, C, or D component, depending on the index. + The index of the component to access. Use 0 for the A component, 1 for the B component, 2 for the C component, and 3 for the D component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 3]. + + + + Changes the coefficients of the normal vector of the plane to make it of unit length. + + + + + Creates an array containing the elements of the plane. + + A four-element array containing the components of the plane. + + + + Determines if there is an intersection between the current object and a point. + + The point to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The plane to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The plane to test. + When the method completes, contains the line of intersection + as a , or a zero ray if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a triangle. + + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The box to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The sphere to test. + Whether the two objects intersected. + + + + Builds a matrix that can be used to reflect vectors about a plane. + + The plane for which the reflection occurs. This parameter is assumed to be normalized. + When the method completes, contains the reflection matrix. + + + + Builds a matrix that can be used to reflect vectors about a plane. + + The reflection matrix. + + + + Creates a matrix that flattens geometry into a shadow from this the plane onto which to project the geometry as a shadow. + This plane is assumed to be normalized + + The light direction. If the W component is 0, the light is directional light; if the + W component is 1, the light is a point light. + When the method completes, contains the shadow matrix. + + + + Creates a matrix that flattens geometry into a shadow from this the plane onto which to project the geometry as a shadow. + This plane is assumed to be normalized + + The light direction. If the W component is 0, the light is directional light; if the + W component is 1, the light is a point light. + The shadow matrix. + + + + Builds a Matrix3x3 that can be used to reflect vectors about a plane for which the reflection occurs. + This plane is assumed to be normalized + + When the method completes, contains the reflection Matrix3x3. + + + + Builds a Matrix3x3 that can be used to reflect vectors about a plane for which the reflection occurs. + This plane is assumed to be normalized + + The reflection Matrix3x3. + + + + Creates a Matrix3x3 that flattens geometry into a shadow. + + The light direction. If the W component is 0, the light is directional light; if the + W component is 1, the light is a point light. + The plane onto which to project the geometry as a shadow. This parameter is assumed to be normalized. + When the method completes, contains the shadow Matrix3x3. + + + + Creates a Matrix3x3 that flattens geometry into a shadow. + + The light direction. If the W component is 0, the light is directional light; if the + W component is 1, the light is a point light. + The plane onto which to project the geometry as a shadow. This parameter is assumed to be normalized. + The shadow Matrix3x3. + + + + Scales the plane by the given scaling factor. + + The plane to scale. + The amount by which to scale the plane. + When the method completes, contains the scaled plane. + + + + Scales the plane by the given scaling factor. + + The plane to scale. + The amount by which to scale the plane. + The scaled plane. + + + + Calculates the dot product of the specified vector and plane. + + The source plane. + The source vector. + When the method completes, contains the dot product of the specified plane and vector. + + + + Calculates the dot product of the specified vector and plane. + + The source plane. + The source vector. + The dot product of the specified plane and vector. + + + + Calculates the dot product of a specified vector and the normal of the plane plus the distance value of the plane. + + The source plane. + The source vector. + When the method completes, contains the dot product of a specified vector and the normal of the Plane plus the distance value of the plane. + + + + Calculates the dot product of a specified vector and the normal of the plane plus the distance value of the plane. + + The source plane. + The source vector. + The dot product of a specified vector and the normal of the Plane plus the distance value of the plane. + + + + Calculates the dot product of the specified vector and the normal of the plane. + + The source plane. + The source vector. + When the method completes, contains the dot product of the specified vector and the normal of the plane. + + + + Calculates the dot product of the specified vector and the normal of the plane. + + The source plane. + The source vector. + The dot product of the specified vector and the normal of the plane. + + + + Changes the coefficients of the normal vector of the plane to make it of unit length. + + The source plane. + When the method completes, contains the normalized plane. + + + + Changes the coefficients of the normal vector of the plane to make it of unit length. + + The source plane. + The normalized plane. + + + + Transforms a normalized plane by a quaternion rotation. + + The normalized source plane. + The quaternion rotation. + When the method completes, contains the transformed plane. + + + + Transforms a normalized plane by a quaternion rotation. + + The normalized source plane. + The quaternion rotation. + The transformed plane. + + + + Transforms an array of normalized planes by a quaternion rotation. + + The array of normalized planes to transform. + The quaternion rotation. + Thrown when is null. + + + + Transforms a normalized plane by a matrix. + + The normalized source plane. + The transformation matrix. + When the method completes, contains the transformed plane. + + + + Transforms a normalized plane by a matrix. + + The normalized source plane. + The transformation matrix. + When the method completes, contains the transformed plane. + + + + Transforms an array of normalized planes by a matrix. + + The array of normalized planes to transform. + The transformation matrix. + Thrown when is null. + + + + Scales a plane by the given value. + + The amount by which to scale the plane. + The plane to scale. + The scaled plane. + + + + Scales a plane by the given value. + + The plane to scale. + The amount by which to scale the plane. + The scaled plane. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Structure using the same layout than . + + + + + A point with (0,0) coordinates. + + + + + Initializes a new instance of the struct. + + The x. + The y. + + + + Left coordinate. + + + + + Top coordinate. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + + + + + + + Implements the operator ==. + + The left. + The right. + + The result of the operator. + + + + + Implements the operator !=. + + The left. + The right. + + The result of the operator. + + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Represents a four dimensional mathematical quaternion. + + + + + The size of the type, in bytes. + + + + + A with all of its components set to zero. + + + + + A with all of its components set to one. + + + + + The identity (0, 0, 0, 1). + + + + + The X component of the quaternion. + + + + + The Y component of the quaternion. + + + + + The Z component of the quaternion. + + + + + The W component of the quaternion. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + A vector containing the values with which to initialize the components. + + + + Initializes a new instance of the struct. + + A vector containing the values with which to initialize the X, Y, and Z components. + Initial value for the W component of the quaternion. + + + + Initializes a new instance of the struct. + + A vector containing the values with which to initialize the X and Y components. + Initial value for the Z component of the quaternion. + Initial value for the W component of the quaternion. + + + + Initializes a new instance of the struct. + + Initial value for the X component of the quaternion. + Initial value for the Y component of the quaternion. + Initial value for the Z component of the quaternion. + Initial value for the W component of the quaternion. + + + + Initializes a new instance of the struct. + + The values to assign to the X, Y, Z, and W components of the quaternion. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Gets a value indicating whether this instance is equivalent to the identity quaternion. + + + true if this instance is an identity quaternion; otherwise, false. + + + + + Gets a value indicting whether this instance is normalized. + + + + + Gets the angle of the quaternion. + + The quaternion's angle. + + + + Gets the axis components of the quaternion. + + The axis components of the quaternion. + + + + Gets or sets the component at the specified index. + + The value of the X, Y, Z, or W component, depending on the index. + The index of the component to access. Use 0 for the X component, 1 for the Y component, 2 for the Z component, and 3 for the W component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 3]. + + + + Conjugates the quaternion. + + + + + Conjugates and renormalizes the quaternion. + + + + + Calculates the length of the quaternion. + + The length of the quaternion. + + may be preferred when only the relative length is needed + and speed is of the essence. + + + + + Calculates the squared length of the quaternion. + + The squared length of the quaternion. + + This method may be preferred to when only a relative length is needed + and speed is of the essence. + + + + + Converts the quaternion into a unit quaternion. + + + + + Creates an array containing the elements of the quaternion. + + A four-element array containing the components of the quaternion. + + + + Adds two quaternions. + + The first quaternion to add. + The second quaternion to add. + When the method completes, contains the sum of the two quaternions. + + + + Adds two quaternions. + + The first quaternion to add. + The second quaternion to add. + The sum of the two quaternions. + + + + Subtracts two quaternions. + + The first quaternion to subtract. + The second quaternion to subtract. + When the method completes, contains the difference of the two quaternions. + + + + Subtracts two quaternions. + + The first quaternion to subtract. + The second quaternion to subtract. + The difference of the two quaternions. + + + + Scales a quaternion by the given value. + + The quaternion to scale. + The amount by which to scale the quaternion. + When the method completes, contains the scaled quaternion. + + + + Scales a quaternion by the given value. + + The quaternion to scale. + The amount by which to scale the quaternion. + The scaled quaternion. + + + + Multiplies a quaternion by another. + + The first quaternion to multiply. + The second quaternion to multiply. + When the method completes, contains the multiplied quaternion. + + + + Multiplies a quaternion by another. + + The first quaternion to multiply. + The second quaternion to multiply. + The multiplied quaternion. + + + + Reverses the direction of a given quaternion. + + The quaternion to negate. + When the method completes, contains a quaternion facing in the opposite direction. + + + + Reverses the direction of a given quaternion. + + The quaternion to negate. + A quaternion facing in the opposite direction. + + + + Returns a containing the 4D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 2D triangle. + + A containing the 4D Cartesian coordinates of vertex 1 of the triangle. + A containing the 4D Cartesian coordinates of vertex 2 of the triangle. + A containing the 4D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + When the method completes, contains a new containing the 4D Cartesian coordinates of the specified point. + + + + Returns a containing the 4D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 2D triangle. + + A containing the 4D Cartesian coordinates of vertex 1 of the triangle. + A containing the 4D Cartesian coordinates of vertex 2 of the triangle. + A containing the 4D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + A new containing the 4D Cartesian coordinates of the specified point. + + + + Conjugates a quaternion. + + The quaternion to conjugate. + When the method completes, contains the conjugated quaternion. + + + + Conjugates a quaternion. + + The quaternion to conjugate. + The conjugated quaternion. + + + + Calculates the dot product of two quaternions. + + First source quaternion. + Second source quaternion. + When the method completes, contains the dot product of the two quaternions. + + + + Calculates the dot product of two quaternions. + + First source quaternion. + Second source quaternion. + The dot product of the two quaternions. + + + + Exponentiates a quaternion. + + The quaternion to exponentiate. + When the method completes, contains the exponentiated quaternion. + + + + Exponentiates a quaternion. + + The quaternion to exponentiate. + The exponentiated quaternion. + + + + Conjugates and renormalizes the quaternion. + + The quaternion to conjugate and renormalize. + When the method completes, contains the conjugated and renormalized quaternion. + + + + Conjugates and renormalizes the quaternion. + + The quaternion to conjugate and renormalize. + The conjugated and renormalized quaternion. + + + + Performs a linear interpolation between two quaternions. + + Start quaternion. + End quaternion. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two quaternions. + + This method performs the linear interpolation based on the following formula. + start + (end - start) * amount + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two quaternion. + + Start quaternion. + End quaternion. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two quaternions. + + This method performs the linear interpolation based on the following formula. + start + (end - start) * amount + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Calculates the natural logarithm of the specified quaternion. + + The quaternion whose logarithm will be calculated. + When the method completes, contains the natural logarithm of the quaternion. + + + + Calculates the natural logarithm of the specified quaternion. + + The quaternion whose logarithm will be calculated. + The natural logarithm of the quaternion. + + + + Converts the quaternion into a unit quaternion. + + The quaternion to normalize. + When the method completes, contains the normalized quaternion. + + + + Converts the quaternion into a unit quaternion. + + The quaternion to normalize. + The normalized quaternion. + + + + Creates a quaternion given a rotation and an axis. + + The axis of rotation. + The angle of rotation. + When the method completes, contains the newly created quaternion. + + + + Creates a quaternion given a rotation and an axis. + + The axis of rotation. + The angle of rotation. + The newly created quaternion. + + + + Creates a quaternion given a rotation matrix. + + The rotation matrix. + When the method completes, contains the newly created quaternion. + + + + Creates a quaternion given a rotation matrix. + + The rotation matrix. + When the method completes, contains the newly created quaternion. + + + + Creates a left-handed, look-at quaternion. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + When the method completes, contains the created look-at quaternion. + + + + Creates a left-handed, look-at quaternion. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + The created look-at quaternion. + + + + Creates a left-handed, look-at quaternion. + + The camera's forward direction. + The camera's up vector. + When the method completes, contains the created look-at quaternion. + + + + Creates a left-handed, look-at quaternion. + + The camera's forward direction. + The camera's up vector. + The created look-at quaternion. + + + + Creates a right-handed, look-at quaternion. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + When the method completes, contains the created look-at quaternion. + + + + Creates a right-handed, look-at quaternion. + + The position of the viewer's eye. + The camera look-at target. + The camera's up vector. + The created look-at quaternion. + + + + Creates a right-handed, look-at quaternion. + + The camera's forward direction. + The camera's up vector. + When the method completes, contains the created look-at quaternion. + + + + Creates a right-handed, look-at quaternion. + + The camera's forward direction. + The camera's up vector. + The created look-at quaternion. + + + + Creates a left-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + When the method completes, contains the created billboard quaternion. + + + + Creates a left-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + The created billboard quaternion. + + + + Creates a right-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + When the method completes, contains the created billboard quaternion. + + + + Creates a right-handed spherical billboard that rotates around a specified object position. + + The position of the object around which the billboard will rotate. + The position of the camera. + The up vector of the camera. + The forward vector of the camera. + The created billboard quaternion. + + + + Creates a quaternion given a rotation matrix. + + The rotation matrix. + The newly created quaternion. + + + + Creates a quaternion given a yaw, pitch, and roll value. + + The yaw of rotation. + The pitch of rotation. + The roll of rotation. + When the method completes, contains the newly created quaternion. + + + + Creates a quaternion given a yaw, pitch, and roll value. + + The yaw of rotation. + The pitch of rotation. + The roll of rotation. + The newly created quaternion. + + + + Interpolates between two quaternions, using spherical linear interpolation. + + Start quaternion. + End quaternion. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the spherical linear interpolation of the two quaternions. + + + + Interpolates between two quaternions, using spherical linear interpolation. + + Start quaternion. + End quaternion. + Value between 0 and 1 indicating the weight of . + The spherical linear interpolation of the two quaternions. + + + + Interpolates between quaternions, using spherical quadrangle interpolation. + + First source quaternion. + Second source quaternion. + Third source quaternion. + Fourth source quaternion. + Value between 0 and 1 indicating the weight of interpolation. + When the method completes, contains the spherical quadrangle interpolation of the quaternions. + + + + Interpolates between quaternions, using spherical quadrangle interpolation. + + First source quaternion. + Second source quaternion. + Third source quaternion. + Fourth source quaternion. + Value between 0 and 1 indicating the weight of interpolation. + The spherical quadrangle interpolation of the quaternions. + + + + Sets up control points for spherical quadrangle interpolation. + + First source quaternion. + Second source quaternion. + Third source quaternion. + Fourth source quaternion. + An array of three quaternions that represent control points for spherical quadrangle interpolation. + + + + Adds two quaternions. + + The first quaternion to add. + The second quaternion to add. + The sum of the two quaternions. + + + + Subtracts two quaternions. + + The first quaternion to subtract. + The second quaternion to subtract. + The difference of the two quaternions. + + + + Reverses the direction of a given quaternion. + + The quaternion to negate. + A quaternion facing in the opposite direction. + + + + Scales a quaternion by the given value. + + The quaternion to scale. + The amount by which to scale the quaternion. + The scaled quaternion. + + + + Scales a quaternion by the given value. + + The quaternion to scale. + The amount by which to scale the quaternion. + The scaled quaternion. + + + + Multiplies a quaternion by another. + + The first quaternion to multiply. + The second quaternion to multiply. + The multiplied quaternion. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Random functions on commun types. + + + + + Gets random float number within range. + + Current . + Minimum. + Maximum. + Random float number. + + + + Gets random double number within range. + + Current . + Minimum. + Maximum. + Random double number. + + + + Gets random long number. + + Current . + Random long number. + + + + Gets random long number within range. + + Current . + Minimum. + Maximum. + Random long number. + + + + Gets random within range. + + Current . + Minimum. + Maximum. + Random . + + + + Gets random within range. + + Current . + Minimum. + Maximum. + Random . + + + + Gets random within range. + + Current . + Minimum. + Maximum. + Random . + + + + Gets random opaque . + + Current . + Random . + + + + Gets random opaque . + + Current . + Minimum brightness. + Maximum brightness + Random . + + + + Gets random . + + Current . + Minimum brightness. + Maximum brightness + Alpha value. + Random . + + + + Gets random . + + Current . + Minimum brightness. + Maximum brightness + Minimum alpha. + Maximum alpha. + Random . + + + + Gets random . + + Current . + Minimum. + Maximum. + Random . + + + + Gets random . + + Current . + Minimum. + Maximum. + Random . + + + + Represents a three dimensional line based on a point in space and a direction. + + + + + The position in three dimensional space where the ray starts. + + + + + The normalized direction in which the ray points. + + + + + Initializes a new instance of the struct. + + The position in three dimensional space of the origin of the ray. + The normalized direction of the ray. + + + + Determines if there is an intersection between the current object and a point. + + The point to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The ray to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The plane to test + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The plane to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The plane to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a triangle. + + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a triangle. + + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a triangle. + + The first vertex of the triangle to test. + The second vertex of the triangle to test. + The third vertex of the triangle to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The box to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The box to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The box to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The box to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The sphere to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The sphere to test. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The sphere to test. + When the method completes, contains the distance of the intersection, + or 0 if there was no intersection. + Whether the two objects intersected. + + + + Determines if there is an intersection between the current object and a . + + The sphere to test. + When the method completes, contains the point of intersection, + or if there was no intersection. + Whether the two objects intersected. + + + + Calculates a world space from 2d screen coordinates. + + X coordinate on 2d screen. + Y coordinate on 2d screen. + . + Transformation . + Resulting . + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Define a Rectangle. This structure is slightly different from System.Drawing.Rectangle as it is + internally storing Left,Top,Right,Bottom instead of Left,Top,Width,Height. + + + + + The left. + + + + + The top. + + + + + The right. + + + + + The bottom. + + + + + An empty rectangle. + + + + + Initializes a new instance of the struct. + + The left. + The top. + The width. + The height. + + + + Gets or sets the X position. + + The X position. + + + + Gets or sets the Y position. + + The Y position. + + + + Gets or sets the width. + + The width. + + + + Gets or sets the height. + + The height. + + + + Gets a value that indicates whether the rectangle is empty. + + + true if [is empty]; otherwise, false. + + + + Changes the position of the rectangle. + Change in the x-position. + Change in the y-position. + + + Pushes the edges of the rectangle out by the horizontal and vertical values specified. + Value to push the sides out by. + Value to push the top and bottom out by. + + + Determines whether this rectangle contains a specified point represented by its x- and y-coordinates. + The x-coordinate of the specified point. + The y-coordinate of the specified point. + + + Determines whether this rectangle entirely contains a specified rectangle. + The rectangle to evaluate. + + + Determines whether this rectangle entirely contains a specified rectangle. + The rectangle to evaluate. + [OutAttribute] On exit, is true if this rectangle entirely contains the specified rectangle, or false if not. + + + + Checks, if specified point is inside . + + X point coordinate. + Y point coordinate. + true if point is inside , otherwise false. + + + Determines whether a specified rectangle intersects with this rectangle. + The rectangle to evaluate. + + + + Determines whether a specified rectangle intersects with this rectangle. + + The rectangle to evaluate + [OutAttribute] true if the specified rectangle intersects with this one; false otherwise. + + + + Creates a rectangle defining the area where one rectangle overlaps with another rectangle. + + The first rectangle to compare. + The second rectangle to compare. + The intersection rectangle. + + + Creates a rectangle defining the area where one rectangle overlaps with another rectangle. + The first rectangle to compare. + The second rectangle to compare. + [OutAttribute] The area where the two first parameters overlap. + + + + Creates a new rectangle that exactly contains two other rectangles. + + The first rectangle to contain. + The second rectangle to contain. + The union rectangle. + + + + Creates a new rectangle that exactly contains two other rectangles. + + The first rectangle to contain. + The second rectangle to contain. + [OutAttribute] The rectangle that must be the union of the first two rectangles. + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Implements the operator ==. + + The left. + The right. + The result of the operator. + + + + Implements the operator !=. + + The left. + The right. + The result of the operator. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Define a RectangleF. This structure is slightly different from System.Drawing.RectangleF as it is + internally storing Left,Top,Right,Bottom instead of Left,Top,Width,Height. + + + + + The left. + + + + + The top. + + + + + The right. + + + + + The bottom. + + + + + An empty rectangle. + + + + + An infinite rectangle. See remarks. + + + http://msdn.microsoft.com/en-us/library/windows/desktop/dd372261%28v=vs.85%29.aspx + Any properties that involve computations, like , or + may return incorrect results - . + + + + + Initializes a new instance of the struct. + + The left. + The top. + The width. + The height. + + + + Gets or sets the X position. + + The X position. + + + + Gets or sets the Y position. + + The Y position. + + + + Gets or sets the width. + + The width. + + + + Gets or sets the height. + + The height. + + + + Gets or sets the location. + + + The location. + + + + + Gets the Point that specifies the center of the rectangle. + + + The center. + + + + + Gets a value that indicates whether the rectangle is empty. + + + true if [is empty]; otherwise, false. + + + + + Gets or sets the size of the rectangle. + + The size of the rectangle. + + + + Gets the position of the top-left corner of the rectangle. + + The top-left corner of the rectangle. + + + + Gets the position of the top-right corner of the rectangle. + + The top-right corner of the rectangle. + + + + Gets the position of the bottom-left corner of the rectangle. + + The bottom-left corner of the rectangle. + + + + Gets the position of the bottom-right corner of the rectangle. + + The bottom-right corner of the rectangle. + + + Changes the position of the rectangle. + The values to adjust the position of the rectangle by. + + + Changes the position of the rectangle. + The values to adjust the position of the rectangle by. + + + Changes the position of the rectangle. + Change in the x-position. + Change in the y-position. + + + Pushes the edges of the rectangle out by the horizontal and vertical values specified. + Value to push the sides out by. + Value to push the top and bottom out by. + + + Determines whether this rectangle contains a specified Point. + The Point to evaluate. + [OutAttribute] true if the specified Point is contained within this rectangle; false otherwise. + + + Determines whether this rectangle entirely contains a specified rectangle. + The rectangle to evaluate. + + + Determines whether this rectangle entirely contains a specified rectangle. + The rectangle to evaluate. + [OutAttribute] On exit, is true if this rectangle entirely contains the specified rectangle, or false if not. + + + + Checks, if specified point is inside . + + X point coordinate. + Y point coordinate. + true if point is inside , otherwise false. + + + + Checks, if specified is inside . + + Coordinate . + true if is inside , otherwise false. + + + + Checks, if specified is inside . + + Coordinate . + true if is inside , otherwise false. + + + Determines whether a specified rectangle intersects with this rectangle. + The rectangle to evaluate. + + + + Determines whether a specified rectangle intersects with this rectangle. + + The rectangle to evaluate + [OutAttribute] true if the specified rectangle intersects with this one; false otherwise. + + + + Creates a rectangle defining the area where one rectangle overlaps with another rectangle. + + The first Rectangle to compare. + The second Rectangle to compare. + The intersection rectangle. + + + Creates a rectangle defining the area where one rectangle overlaps with another rectangle. + The first rectangle to compare. + The second rectangle to compare. + [OutAttribute] The area where the two first parameters overlap. + + + + Creates a new rectangle that exactly contains two other rectangles. + + The first rectangle to contain. + The second rectangle to contain. + The union rectangle. + + + + Creates a new rectangle that exactly contains two other rectangles. + + The first rectangle to contain. + The second rectangle to contain. + [OutAttribute] The rectangle that must be the union of the first two rectangles. + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Implements the operator ==. + + The left. + The right. + The result of the operator. + + + + Implements the operator !=. + + The left. + The right. + The result of the operator. + + + + Performs an explicit conversion to structure. + + Performs direct float to int conversion, any fractional data is truncated. + The source value. + A converted structure. + + + + Performs an explicit conversion to structure. + + Performs direct float to int conversion, any fractional data is truncated. + The source value. + A converted structure. + + + + Performs an explicit conversion to structure. + + Performs direct float to int conversion, any fractional data is truncated. + The source value. + A converted structure. + + + + Represents a two dimensional mathematical vector. + + + + + The size of the type, in bytes. + + + + + A with all of its components set to zero. + + + + + The X unit (1, 0). + + + + + The Y unit (0, 1). + + + + + A with all of its components set to one. + + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + Initial value for the X component of the vector. + Initial value for the Y component of the vector. + + + + Initializes a new instance of the struct. + + The values to assign to the X and Y components of the vector. This must be an array with two elements. + Thrown when is null. + Thrown when contains more or less than two elements. + + + + Gets a value indicting whether this instance is normalized. + + + + + Gets a value indicting whether this vector is zero + + + + + Gets or sets the component at the specified index. + + The value of the X or Y component, depending on the index. + The index of the component to access. Use 0 for the X component and 1 for the Y component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 1]. + + + + Calculates the length of the vector. + + The length of the vector. + + may be preferred when only the relative length is needed + and speed is of the essence. + + + + + Calculates the squared length of the vector. + + The squared length of the vector. + + This method may be preferred to when only a relative length is needed + and speed is of the essence. + + + + + Converts the vector into a unit vector. + + + + + Creates an array containing the elements of the vector. + + A two-element array containing the components of the vector. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + When the method completes, contains the sum of the two vectors. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + + Perform a component-wise addition + + The input vector + The scalar value to be added to elements + The vector with added scalar for each element. + + + + Perform a component-wise addition + + The input vector + The scalar value to be added to elements + The vector with added scalar for each element. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + When the method completes, contains the difference of the two vectors. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + + Perform a component-wise subtraction + + The input vector + The scalar value to be subtraced from elements + The vector with subtracted scalar for each element. + + + + Perform a component-wise subtraction + + The input vector + The scalar value to be subtraced from elements + The vector with subtracted scalar for each element. + + + + Perform a component-wise subtraction + + The scalar value to be subtraced from elements + The input vector + The vector with subtracted scalar for each element. + + + + Perform a component-wise subtraction + + The scalar value to be subtraced from elements + The input vector + The vector with subtracted scalar for each element. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Multiplies a vector with another by performing component-wise multiplication. + + The first vector to multiply. + The second vector to multiply. + When the method completes, contains the multiplied vector. + + + + Multiplies a vector with another by performing component-wise multiplication. + + The first vector to multiply. + The second vector to multiply. + The multiplied vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The amount by which to scale the vector. + The vector to scale. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Reverses the direction of a given vector. + + The vector to negate. + When the method completes, contains a vector facing in the opposite direction. + + + + Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + + Returns a containing the 2D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 2D triangle. + + A containing the 2D Cartesian coordinates of vertex 1 of the triangle. + A containing the 2D Cartesian coordinates of vertex 2 of the triangle. + A containing the 2D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + When the method completes, contains the 2D Cartesian coordinates of the specified point. + + + + Returns a containing the 2D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 2D triangle. + + A containing the 2D Cartesian coordinates of vertex 1 of the triangle. + A containing the 2D Cartesian coordinates of vertex 2 of the triangle. + A containing the 2D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + A new containing the 2D Cartesian coordinates of the specified point. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + + Saturates this instance in the range [0,1] + + + + + Calculates the distance between two vectors. + + The first vector. + The second vector. + When the method completes, contains the distance between the two vectors. + + may be preferred when only the relative distance is needed + and speed is of the essence. + + + + + Calculates the distance between two vectors. + + The first vector. + The second vector. + The distance between the two vectors. + + may be preferred when only the relative distance is needed + and speed is of the essence. + + + + + Calculates the squared distance between two vectors. + + The first vector. + The second vector + When the method completes, contains the squared distance between the two vectors. + Distance squared is the value before taking the square root. + Distance squared can often be used in place of distance if relative comparisons are being made. + For example, consider three points A, B, and C. To determine whether B or C is further from A, + compare the distance between A and B to the distance between A and C. Calculating the two distances + involves two square roots, which are computationally expensive. However, using distance squared + provides the same information and avoids calculating two square roots. + + + + + Calculates the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between the two vectors. + Distance squared is the value before taking the square root. + Distance squared can often be used in place of distance if relative comparisons are being made. + For example, consider three points A, B, and C. To determine whether B or C is further from A, + compare the distance between A and B to the distance between A and C. Calculating the two distances + involves two square roots, which are computationally expensive. However, using distance squared + provides the same information and avoids calculating two square roots. + + + + + Calculates the dot product of two vectors. + + First source vector. + Second source vector. + When the method completes, contains the dot product of the two vectors. + + + + Calculates the dot product of two vectors. + + First source vector. + Second source vector. + The dot product of the two vectors. + + + + Converts the vector into a unit vector. + + The vector to normalize. + When the method completes, contains the normalized vector. + + + + Converts the vector into a unit vector. + + The vector to normalize. + The normalized vector. + + + + Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two vectors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two vectors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two vectors. + + + + Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two vectors. + + + + Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + When the method completes, contains the result of the Hermite spline interpolation. + + + + Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + The result of the Hermite spline interpolation. + + + + Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + When the method completes, contains the result of the Catmull-Rom interpolation. + + + + Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + A vector that is the result of the Catmull-Rom interpolation. + + + + Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the largest components of the source vectors. + + + + Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the largest components of the source vectors. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the smallest components of the source vectors. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the smallest components of the source vectors. + + + + Returns the reflection of a vector off a surface that has the specified normal. + + The source vector. + Normal of the surface. + When the method completes, contains the reflected vector. + Reflect only gives the direction of a reflection off a surface, it does not determine + whether the original vector was close enough to the surface to hit it. + + + + Returns the reflection of a vector off a surface that has the specified normal. + + The source vector. + Normal of the surface. + The reflected vector. + Reflect only gives the direction of a reflection off a surface, it does not determine + whether the original vector was close enough to the surface to hit it. + + + + Orthogonalizes a list of vectors. + + The list of orthogonalized vectors. + The list of vectors to orthogonalize. + + Orthogonalization is the process of making all vectors orthogonal to each other. This + means that any given vector in the list will be orthogonal to any other given vector in the + list. + Because this method uses the modified Gram-Schmidt process, the resulting vectors + tend to be numerically unstable. The numeric stability decreases according to the vectors + position in the list so that the first vector is the most stable and the last vector is the + least stable. + + Thrown when or is null. + Thrown when is shorter in length than . + + + + Orthonormalizes a list of vectors. + + The list of orthonormalized vectors. + The list of vectors to orthonormalize. + + Orthonormalization is the process of making all vectors orthogonal to each + other and making all vectors of unit length. This means that any given vector will + be orthogonal to any other given vector in the list. + Because this method uses the modified Gram-Schmidt process, the resulting vectors + tend to be numerically unstable. The numeric stability decreases according to the vectors + position in the list so that the first vector is the most stable and the last vector is the + least stable. + + Thrown when or is null. + Thrown when is shorter in length than . + + + + Transforms a 2D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + When the method completes, contains the transformed . + + + + Transforms a 2D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + The transformed . + + + + Transforms an array of vectors by the given rotation. + + The array of vectors to transform. + The rotation to apply. + The array for which the transformed vectors are stored. + This array may be the same array as . + Thrown when or is null. + Thrown when is shorter in length than . + + + + Transforms a 2D vector by the given . + + The source vector. + The transformation . + When the method completes, contains the transformed . + + + + Transforms a 2D vector by the given . + + The source vector. + The transformation . + The transformed . + + + + Transforms an array of 2D vectors by the given . + + The array of vectors to transform. + The transformation . + The array for which the transformed vectors are stored. + Thrown when or is null. + Thrown when is shorter in length than . + + + + Performs a coordinate transformation using the given . + + The coordinate vector to transform. + The transformation . + When the method completes, contains the transformed coordinates. + + A coordinate transform performs the transformation with the assumption that the w component + is one. The four dimensional vector obtained from the transformation operation has each + component in the vector divided by the w component. This forces the w component to be one and + therefore makes the vector homogeneous. The homogeneous vector is often preferred when working + with coordinates as the w component can safely be ignored. + + + + + Performs a coordinate transformation using the given . + + The coordinate vector to transform. + The transformation . + The transformed coordinates. + + A coordinate transform performs the transformation with the assumption that the w component + is one. The four dimensional vector obtained from the transformation operation has each + component in the vector divided by the w component. This forces the w component to be one and + therefore makes the vector homogeneous. The homogeneous vector is often preferred when working + with coordinates as the w component can safely be ignored. + + + + + Performs a coordinate transformation on an array of vectors using the given . + + The array of coordinate vectors to transform. + The transformation . + The array for which the transformed vectors are stored. + This array may be the same array as . + Thrown when or is null. + Thrown when is shorter in length than . + + A coordinate transform performs the transformation with the assumption that the w component + is one. The four dimensional vector obtained from the transformation operation has each + component in the vector divided by the w component. This forces the w component to be one and + therefore makes the vector homogeneous. The homogeneous vector is often preferred when working + with coordinates as the w component can safely be ignored. + + + + + Performs a normal transformation using the given . + + The normal vector to transform. + The transformation . + When the method completes, contains the transformed normal. + + A normal transform performs the transformation with the assumption that the w component + is zero. This causes the fourth row and fourth column of the matrix to be unused. The + end result is a vector that is not translated, but all other transformation properties + apply. This is often preferred for normal vectors as normals purely represent direction + rather than location because normal vectors should not be translated. + + + + + Performs a normal transformation using the given . + + The normal vector to transform. + The transformation . + The transformed normal. + + A normal transform performs the transformation with the assumption that the w component + is zero. This causes the fourth row and fourth column of the matrix to be unused. The + end result is a vector that is not translated, but all other transformation properties + apply. This is often preferred for normal vectors as normals purely represent direction + rather than location because normal vectors should not be translated. + + + + + Performs a normal transformation on an array of vectors using the given . + + The array of normal vectors to transform. + The transformation . + The array for which the transformed vectors are stored. + This array may be the same array as . + Thrown when or is null. + Thrown when is shorter in length than . + + A normal transform performs the transformation with the assumption that the w component + is zero. This causes the fourth row and fourth column of the matrix to be unused. The + end result is a vector that is not translated, but all other transformation properties + apply. This is often preferred for normal vectors as normals purely represent direction + rather than location because normal vectors should not be translated. + + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + + Multiplies a vector with another by performing component-wise multiplication equivalent to . + + The first vector to multiply. + The second vector to multiply. + The multiplication of the two vectors. + + + + Assert a vector (return it unchanged). + + The vector to assert (unchanged). + The asserted (unchanged) vector. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + + Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The amount by which to scale the vector. + The vector to scale. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Perform a component-wise addition + + The input vector. + The scalar value to be added on elements + The vector with added scalar for each element. + + + + Perform a component-wise addition + + The input vector. + The scalar value to be added on elements + The vector with added scalar for each element. + + + + Perform a component-wise subtraction + + The input vector. + The scalar value to be subtraced from elements + The vector with subtraced scalar from each element. + + + + Perform a component-wise subtraction + + The input vector. + The scalar value to be subtraced from elements + The vector with subtraced scalar from each element. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Represents a three dimensional mathematical vector. + + + + + The size of the type, in bytes. + + + + + A with all of its components set to zero. + + + + + The X unit (1, 0, 0). + + + + + The Y unit (0, 1, 0). + + + + + The Z unit (0, 0, 1). + + + + + A with all of its components set to one. + + + + + A unit designating up (0, 1, 0). + + + + + A unit designating down (0, -1, 0). + + + + + A unit designating left (-1, 0, 0). + + + + + A unit designating right (1, 0, 0). + + + + + A unit designating forward in a right-handed coordinate system (0, 0, -1). + + + + + A unit designating forward in a left-handed coordinate system (0, 0, 1). + + + + + A unit designating backward in a right-handed coordinate system (0, 0, 1). + + + + + A unit designating backward in a left-handed coordinate system (0, 0, -1). + + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + Initial value for the X component of the vector. + Initial value for the Y component of the vector. + Initial value for the Z component of the vector. + + + + Initializes a new instance of the struct. + + A vector containing the values with which to initialize the X and Y components. + Initial value for the Z component of the vector. + + + + Initializes a new instance of the struct. + + The values to assign to the X, Y, and Z components of the vector. This must be an array with three elements. + Thrown when is null. + Thrown when contains more or less than three elements. + + + + Gets a value indicting whether this instance is normalized. + + + + + Gets a value indicting whether this vector is zero + + + + + Gets or sets the component at the specified index. + + The value of the X, Y, or Z component, depending on the index. + The index of the component to access. Use 0 for the X component, 1 for the Y component, and 2 for the Z component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 2]. + + + + Calculates the length of the vector. + + The length of the vector. + + may be preferred when only the relative length is needed + and speed is of the essence. + + + + + Calculates the squared length of the vector. + + The squared length of the vector. + + This method may be preferred to when only a relative length is needed + and speed is of the essence. + + + + + Converts the vector into a unit vector. + + + + + Creates an array containing the elements of the vector. + + A three-element array containing the components of the vector. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + When the method completes, contains the sum of the two vectors. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + + Perform a component-wise addition + + The input vector + The scalar value to be added to elements + The vector with added scalar for each element. + + + + Perform a component-wise addition + + The input vector + The scalar value to be added to elements + The vector with added scalar for each element. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + When the method completes, contains the difference of the two vectors. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + + Perform a component-wise subtraction + + The input vector + The scalar value to be subtraced from elements + The vector with subtracted scalar for each element. + + + + Perform a component-wise subtraction + + The input vector + The scalar value to be subtraced from elements + The vector with subtracted scalar for each element. + + + + Perform a component-wise subtraction + + The scalar value to be subtraced from elements + The input vector. + The vector with subtracted scalar for each element. + + + + Perform a component-wise subtraction + + The scalar value to be subtraced from elements + The input vector. + The vector with subtracted scalar for each element. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Multiply a vector with another by performing component-wise multiplication. + + The first vector to multiply. + The second vector to multiply. + When the method completes, contains the multiplied vector. + + + + Multiply a vector with another by performing component-wise multiplication. + + The first vector to Multiply. + The second vector to multiply. + The multiplied vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The amount by which to scale the vector. + The vector to scale. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Reverses the direction of a given vector. + + The vector to negate. + When the method completes, contains a vector facing in the opposite direction. + + + + Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + + Returns a containing the 3D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 3D triangle. + + A containing the 3D Cartesian coordinates of vertex 1 of the triangle. + A containing the 3D Cartesian coordinates of vertex 2 of the triangle. + A containing the 3D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + When the method completes, contains the 3D Cartesian coordinates of the specified point. + + + + Returns a containing the 3D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 3D triangle. + + A containing the 3D Cartesian coordinates of vertex 1 of the triangle. + A containing the 3D Cartesian coordinates of vertex 2 of the triangle. + A containing the 3D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + A new containing the 3D Cartesian coordinates of the specified point. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + + Calculates the cross product of two vectors. + + First source vector. + Second source vector. + When the method completes, contains he cross product of the two vectors. + + + + Calculates the cross product of two vectors. + + First source vector. + Second source vector. + The cross product of the two vectors. + + + + Calculates the distance between two vectors. + + The first vector. + The second vector. + When the method completes, contains the distance between the two vectors. + + may be preferred when only the relative distance is needed + and speed is of the essence. + + + + + Calculates the distance between two vectors. + + The first vector. + The second vector. + The distance between the two vectors. + + may be preferred when only the relative distance is needed + and speed is of the essence. + + + + + Calculates the squared distance between two vectors. + + The first vector. + The second vector. + When the method completes, contains the squared distance between the two vectors. + Distance squared is the value before taking the square root. + Distance squared can often be used in place of distance if relative comparisons are being made. + For example, consider three points A, B, and C. To determine whether B or C is further from A, + compare the distance between A and B to the distance between A and C. Calculating the two distances + involves two square roots, which are computationally expensive. However, using distance squared + provides the same information and avoids calculating two square roots. + + + + + Calculates the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between the two vectors. + Distance squared is the value before taking the square root. + Distance squared can often be used in place of distance if relative comparisons are being made. + For example, consider three points A, B, and C. To determine whether B or C is further from A, + compare the distance between A and B to the distance between A and C. Calculating the two distances + involves two square roots, which are computationally expensive. However, using distance squared + provides the same information and avoids calculating two square roots. + + + + + Tests whether one 3D vector is near another 3D vector. + + The left vector. + The right vector. + The epsilon. + true if left and right are near another 3D, false otherwise + + + + Tests whether one 3D vector is near another 3D vector. + + The left vector. + The right vector. + The epsilon. + true if left and right are near another 3D, false otherwise + + + + Calculates the dot product of two vectors. + + First source vector. + Second source vector. + When the method completes, contains the dot product of the two vectors. + + + + Calculates the dot product of two vectors. + + First source vector. + Second source vector. + The dot product of the two vectors. + + + + Converts the vector into a unit vector. + + The vector to normalize. + When the method completes, contains the normalized vector. + + + + Converts the vector into a unit vector. + + The vector to normalize. + The normalized vector. + + + + Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two vectors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two vectors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two vectors. + + + + Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two vectors. + + + + Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + When the method completes, contains the result of the Hermite spline interpolation. + + + + Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + The result of the Hermite spline interpolation. + + + + Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + When the method completes, contains the result of the Catmull-Rom interpolation. + + + + Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + A vector that is the result of the Catmull-Rom interpolation. + + + + Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the largest components of the source vectors. + + + + Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the largest components of the source vectors. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the smallest components of the source vectors. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the smallest components of the source vectors. + + + + Projects a 3D vector from object space into screen space. + + The vector to project. + The X position of the viewport. + The Y position of the viewport. + The width of the viewport. + The height of the viewport. + The minimum depth of the viewport. + The maximum depth of the viewport. + The combined world-view-projection matrix. + When the method completes, contains the vector in screen space. + + + + Projects a 3D vector from object space into screen space. + + The vector to project. + The X position of the viewport. + The Y position of the viewport. + The width of the viewport. + The height of the viewport. + The minimum depth of the viewport. + The maximum depth of the viewport. + The combined world-view-projection matrix. + The vector in screen space. + + + + Projects a 3D vector from screen space into object space. + + The vector to project. + The X position of the viewport. + The Y position of the viewport. + The width of the viewport. + The height of the viewport. + The minimum depth of the viewport. + The maximum depth of the viewport. + The combined world-view-projection matrix. + When the method completes, contains the vector in object space. + + + + Projects a 3D vector from screen space into object space. + + The vector to project. + The X position of the viewport. + The Y position of the viewport. + The width of the viewport. + The height of the viewport. + The minimum depth of the viewport. + The maximum depth of the viewport. + The combined world-view-projection matrix. + The vector in object space. + + + + Returns the reflection of a vector off a surface that has the specified normal. + + The source vector. + Normal of the surface. + When the method completes, contains the reflected vector. + Reflect only gives the direction of a reflection off a surface, it does not determine + whether the original vector was close enough to the surface to hit it. + + + + Returns the reflection of a vector off a surface that has the specified normal. + + The source vector. + Normal of the surface. + The reflected vector. + Reflect only gives the direction of a reflection off a surface, it does not determine + whether the original vector was close enough to the surface to hit it. + + + + Orthogonalizes a list of vectors. + + The list of orthogonalized vectors. + The list of vectors to orthogonalize. + + Orthogonalization is the process of making all vectors orthogonal to each other. This + means that any given vector in the list will be orthogonal to any other given vector in the + list. + Because this method uses the modified Gram-Schmidt process, the resulting vectors + tend to be numerically unstable. The numeric stability decreases according to the vectors + position in the list so that the first vector is the most stable and the last vector is the + least stable. + + Thrown when or is null. + Thrown when is shorter in length than . + + + + Orthonormalizes a list of vectors. + + The list of orthonormalized vectors. + The list of vectors to orthonormalize. + + Orthonormalization is the process of making all vectors orthogonal to each + other and making all vectors of unit length. This means that any given vector will + be orthogonal to any other given vector in the list. + Because this method uses the modified Gram-Schmidt process, the resulting vectors + tend to be numerically unstable. The numeric stability decreases according to the vectors + position in the list so that the first vector is the most stable and the last vector is the + least stable. + + Thrown when or is null. + Thrown when is shorter in length than . + + + + Transforms a 3D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + When the method completes, contains the transformed . + + + + Transforms a 3D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + The transformed . + + + + Transforms an array of vectors by the given rotation. + + The array of vectors to transform. + The rotation to apply. + The array for which the transformed vectors are stored. + This array may be the same array as . + Thrown when or is null. + Thrown when is shorter in length than . + + + + Transforms a 3D vector by the given . + + The source vector. + The transformation . + When the method completes, contains the transformed . + + + + Transforms a 3D vector by the given . + + The source vector. + The transformation . + The transformed . + + + + Transforms a 3D vector by the given . + + The source vector. + The transformation . + When the method completes, contains the transformed . + + + + Transforms a 3D vector by the given . + + The source vector. + The transformation . + When the method completes, contains the transformed . + + + + Transforms a 3D vector by the given . + + The source vector. + The transformation . + The transformed . + + + + Transforms an array of 3D vectors by the given . + + The array of vectors to transform. + The transformation . + The array for which the transformed vectors are stored. + Thrown when or is null. + Thrown when is shorter in length than . + + + + Performs a coordinate transformation using the given . + + The coordinate vector to transform. + The transformation . + When the method completes, contains the transformed coordinates. + + A coordinate transform performs the transformation with the assumption that the w component + is one. The four dimensional vector obtained from the transformation operation has each + component in the vector divided by the w component. This forces the w component to be one and + therefore makes the vector homogeneous. The homogeneous vector is often preferred when working + with coordinates as the w component can safely be ignored. + + + + + Performs a coordinate transformation using the given . + + The coordinate vector to transform. + The transformation . + The transformed coordinates. + + A coordinate transform performs the transformation with the assumption that the w component + is one. The four dimensional vector obtained from the transformation operation has each + component in the vector divided by the w component. This forces the w component to be one and + therefore makes the vector homogeneous. The homogeneous vector is often preferred when working + with coordinates as the w component can safely be ignored. + + + + + Performs a coordinate transformation on an array of vectors using the given . + + The array of coordinate vectors to transform. + The transformation . + The array for which the transformed vectors are stored. + This array may be the same array as . + Thrown when or is null. + Thrown when is shorter in length than . + + A coordinate transform performs the transformation with the assumption that the w component + is one. The four dimensional vector obtained from the transformation operation has each + component in the vector divided by the w component. This forces the w component to be one and + therefore makes the vector homogeneous. The homogeneous vector is often preferred when working + with coordinates as the w component can safely be ignored. + + + + + Performs a normal transformation using the given . + + The normal vector to transform. + The transformation . + When the method completes, contains the transformed normal. + + A normal transform performs the transformation with the assumption that the w component + is zero. This causes the fourth row and fourth column of the matrix to be unused. The + end result is a vector that is not translated, but all other transformation properties + apply. This is often preferred for normal vectors as normals purely represent direction + rather than location because normal vectors should not be translated. + + + + + Performs a normal transformation using the given . + + The normal vector to transform. + The transformation . + The transformed normal. + + A normal transform performs the transformation with the assumption that the w component + is zero. This causes the fourth row and fourth column of the matrix to be unused. The + end result is a vector that is not translated, but all other transformation properties + apply. This is often preferred for normal vectors as normals purely represent direction + rather than location because normal vectors should not be translated. + + + + + Performs a normal transformation on an array of vectors using the given . + + The array of normal vectors to transform. + The transformation . + The array for which the transformed vectors are stored. + This array may be the same array as . + Thrown when or is null. + Thrown when is shorter in length than . + + A normal transform performs the transformation with the assumption that the w component + is zero. This causes the fourth row and fourth column of the matrix to be unused. The + end result is a vector that is not translated, but all other transformation properties + apply. This is often preferred for normal vectors as normals purely represent direction + rather than location because normal vectors should not be translated. + + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + + Multiplies a vector with another by performing component-wise multiplication equivalent to . + + The first vector to multiply. + The second vector to multiply. + The multiplication of the two vectors. + + + + Assert a vector (return it unchanged). + + The vector to assert (unchanged). + The asserted (unchanged) vector. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + + Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The amount by which to scale the vector. + The vector to scale. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Perform a component-wise addition + + The input vector. + The scalar value to be added on elements + The vector with added scalar for each element. + + + + Perform a component-wise addition + + The input vector. + The scalar value to be added on elements + The vector with added scalar for each element. + + + + Perform a component-wise subtraction + + The input vector. + The scalar value to be subtraced from elements + The vector with added scalar from each element. + + + + Perform a component-wise subtraction + + The input vector. + The scalar value to be subtraced from elements + The vector with subtraced scalar from each element. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Represents a four dimensional mathematical vector. + + + + + The size of the type, in bytes. + + + + + A with all of its components set to zero. + + + + + The X unit (1, 0, 0, 0). + + + + + The Y unit (0, 1, 0, 0). + + + + + The Z unit (0, 0, 1, 0). + + + + + The W unit (0, 0, 0, 1). + + + + + A with all of its components set to one. + + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + The W component of the vector. + + + + + Initializes a new instance of the struct. + + The value that will be assigned to all components. + + + + Initializes a new instance of the struct. + + Initial value for the X component of the vector. + Initial value for the Y component of the vector. + Initial value for the Z component of the vector. + Initial value for the W component of the vector. + + + + Initializes a new instance of the struct. + + A vector containing the values with which to initialize the X, Y, and Z components. + Initial value for the W component of the vector. + + + + Initializes a new instance of the struct. + + A vector containing the values with which to initialize the X and Y components. + Initial value for the Z component of the vector. + Initial value for the W component of the vector. + + + + Initializes a new instance of the struct. + + The values to assign to the X, Y, Z, and W components of the vector. This must be an array with four elements. + Thrown when is null. + Thrown when contains more or less than four elements. + + + + Gets a value indicting whether this instance is normalized. + + + + + Gets a value indicting whether this vector is zero + + + + + Gets or sets the component at the specified index. + + The value of the X, Y, Z, or W component, depending on the index. + The index of the component to access. Use 0 for the X component, 1 for the Y component, 2 for the Z component, and 3 for the W component. + The value of the component at the specified index. + Thrown when the is out of the range [0, 3]. + + + + Calculates the length of the vector. + + The length of the vector. + + may be preferred when only the relative length is needed + and speed is of the essence. + + + + + Calculates the squared length of the vector. + + The squared length of the vector. + + This method may be preferred to when only a relative length is needed + and speed is of the essence. + + + + + Converts the vector into a unit vector. + + + + + Creates an array containing the elements of the vector. + + A four-element array containing the components of the vector. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + When the method completes, contains the sum of the two vectors. + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + + Perform a component-wise addition + + The input vector + The scalar value to be added to elements + The vector with added scalar for each element. + + + + Perform a component-wise addition + + The input vector + The scalar value to be added to elements + The vector with added scalar for each element. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + When the method completes, contains the difference of the two vectors. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + + Perform a component-wise subtraction + + The input vector + The scalar value to be subtraced from elements + The vector with subtracted scalar for each element. + + + + Perform a component-wise subtraction + + The input vector + The scalar value to be subtraced from elements + The vector with subtracted scalar for each element. + + + + Perform a component-wise subtraction + + The scalar value to be subtraced from elements + The input vector. + The vector with subtracted scalar for each element. + + + + Perform a component-wise subtraction + + The scalar value to be subtraced from elements + The input vector. + The vector with subtracted scalar for each element. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Multiplies a vector with another by performing component-wise multiplication. + + The first vector to multiply. + The second vector to multiply. + When the method completes, contains the multiplied vector. + + + + Multiplies a vector with another by performing component-wise multiplication. + + The first vector to multiply. + The second vector to multiply. + The multiplied vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The amount by which to scale the vector. + The vector to scale. + When the method completes, contains the scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Reverses the direction of a given vector. + + The vector to negate. + When the method completes, contains a vector facing in the opposite direction. + + + + Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + + Returns a containing the 4D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 4D triangle. + + A containing the 4D Cartesian coordinates of vertex 1 of the triangle. + A containing the 4D Cartesian coordinates of vertex 2 of the triangle. + A containing the 4D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + When the method completes, contains the 4D Cartesian coordinates of the specified point. + + + + Returns a containing the 4D Cartesian coordinates of a point specified in Barycentric coordinates relative to a 4D triangle. + + A containing the 4D Cartesian coordinates of vertex 1 of the triangle. + A containing the 4D Cartesian coordinates of vertex 2 of the triangle. + A containing the 4D Cartesian coordinates of vertex 3 of the triangle. + Barycentric coordinate b2, which expresses the weighting factor toward vertex 2 (specified in ). + Barycentric coordinate b3, which expresses the weighting factor toward vertex 3 (specified in ). + A new containing the 4D Cartesian coordinates of the specified point. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + When the method completes, contains the clamped value. + + + + Restricts a value to be within a specified range. + + The value to clamp. + The minimum value. + The maximum value. + The clamped value. + + + + Calculates the distance between two vectors. + + The first vector. + The second vector. + When the method completes, contains the distance between the two vectors. + + may be preferred when only the relative distance is needed + and speed is of the essence. + + + + + Calculates the distance between two vectors. + + The first vector. + The second vector. + The distance between the two vectors. + + may be preferred when only the relative distance is needed + and speed is of the essence. + + + + + Calculates the squared distance between two vectors. + + The first vector. + The second vector. + When the method completes, contains the squared distance between the two vectors. + Distance squared is the value before taking the square root. + Distance squared can often be used in place of distance if relative comparisons are being made. + For example, consider three points A, B, and C. To determine whether B or C is further from A, + compare the distance between A and B to the distance between A and C. Calculating the two distances + involves two square roots, which are computationally expensive. However, using distance squared + provides the same information and avoids calculating two square roots. + + + + + Calculates the squared distance between two vectors. + + The first vector. + The second vector. + The squared distance between the two vectors. + Distance squared is the value before taking the square root. + Distance squared can often be used in place of distance if relative comparisons are being made. + For example, consider three points A, B, and C. To determine whether B or C is further from A, + compare the distance between A and B to the distance between A and C. Calculating the two distances + involves two square roots, which are computationally expensive. However, using distance squared + provides the same information and avoids calculating two square roots. + + + + + Calculates the dot product of two vectors. + + First source vector + Second source vector. + When the method completes, contains the dot product of the two vectors. + + + + Calculates the dot product of two vectors. + + First source vector. + Second source vector. + The dot product of the two vectors. + + + + Converts the vector into a unit vector. + + The vector to normalize. + When the method completes, contains the normalized vector. + + + + Converts the vector into a unit vector. + + The vector to normalize. + The normalized vector. + + + + Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the linear interpolation of the two vectors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a linear interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The linear interpolation of the two vectors. + + Passing a value of 0 will cause to be returned; a value of 1 will cause to be returned. + + + + + Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + When the method completes, contains the cubic interpolation of the two vectors. + + + + Performs a cubic interpolation between two vectors. + + Start vector. + End vector. + Value between 0 and 1 indicating the weight of . + The cubic interpolation of the two vectors. + + + + Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + When the method completes, contains the result of the Hermite spline interpolation. + + + + Performs a Hermite spline interpolation. + + First source position vector. + First source tangent vector. + Second source position vector. + Second source tangent vector. + Weighting factor. + The result of the Hermite spline interpolation. + + + + Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + When the method completes, contains the result of the Catmull-Rom interpolation. + + + + Performs a Catmull-Rom interpolation using the specified positions. + + The first position in the interpolation. + The second position in the interpolation. + The third position in the interpolation. + The fourth position in the interpolation. + Weighting factor. + A vector that is the result of the Catmull-Rom interpolation. + + + + Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the largest components of the source vectors. + + + + Returns a vector containing the largest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the largest components of the source vectors. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + When the method completes, contains an new vector composed of the smallest components of the source vectors. + + + + Returns a vector containing the smallest components of the specified vectors. + + The first source vector. + The second source vector. + A vector containing the smallest components of the source vectors. + + + + Orthogonalizes a list of vectors. + + The list of orthogonalized vectors. + The list of vectors to orthogonalize. + + Orthogonalization is the process of making all vectors orthogonal to each other. This + means that any given vector in the list will be orthogonal to any other given vector in the + list. + Because this method uses the modified Gram-Schmidt process, the resulting vectors + tend to be numerically unstable. The numeric stability decreases according to the vectors + position in the list so that the first vector is the most stable and the last vector is the + least stable. + + Thrown when or is null. + Thrown when is shorter in length than . + + + + Orthonormalizes a list of vectors. + + The list of orthonormalized vectors. + The list of vectors to orthonormalize. + + Orthonormalization is the process of making all vectors orthogonal to each + other and making all vectors of unit length. This means that any given vector will + be orthogonal to any other given vector in the list. + Because this method uses the modified Gram-Schmidt process, the resulting vectors + tend to be numerically unstable. The numeric stability decreases according to the vectors + position in the list so that the first vector is the most stable and the last vector is the + least stable. + + Thrown when or is null. + Thrown when is shorter in length than . + + + + Transforms a 4D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + When the method completes, contains the transformed . + + + + Transforms a 4D vector by the given rotation. + + The vector to rotate. + The rotation to apply. + The transformed . + + + + Transforms an array of vectors by the given rotation. + + The array of vectors to transform. + The rotation to apply. + The array for which the transformed vectors are stored. + This array may be the same array as . + Thrown when or is null. + Thrown when is shorter in length than . + + + + Transforms a 4D vector by the given . + + The source vector. + The transformation . + When the method completes, contains the transformed . + + + + Transforms a 4D vector by the given . + + The source vector. + The transformation . + The transformed . + + + + Transforms a 4D vector by the given . + + The source vector. + The transformation . + When the method completes, contains the transformed . + + + + Transforms a 4D vector by the given . + + The source vector. + The transformation . + The transformed . + + + + Transforms an array of 4D vectors by the given . + + The array of vectors to transform. + The transformation . + The array for which the transformed vectors are stored. + This array may be the same array as . + Thrown when or is null. + Thrown when is shorter in length than . + + + + Adds two vectors. + + The first vector to add. + The second vector to add. + The sum of the two vectors. + + + + Multiplies a vector with another by performing component-wise multiplication equivalent to . + + The first vector to multiply. + The second vector to multiply. + The multiplication of the two vectors. + + + + Assert a vector (return it unchanged). + + The vector to assert (unchanged). + The asserted (unchanged) vector. + + + + Subtracts two vectors. + + The first vector to subtract. + The second vector to subtract. + The difference of the two vectors. + + + + Reverses the direction of a given vector. + + The vector to negate. + A vector facing in the opposite direction. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Scales a vector by the given value. + + The amount by which to scale the vector. + The vector to scale. + The scaled vector. + + + + Scales a vector by the given value. + + The vector to scale. + The amount by which to scale the vector. + The scaled vector. + + + + Perform a component-wise addition + + The input vector. + The scalar value to be added on elements + The vector with added scalar for each element. + + + + Perform a component-wise addition + + The input vector. + The scalar value to be added on elements + The vector with added scalar for each element. + + + + Perform a component-wise subtraction + + The input vector. + The scalar value to be subtraced from elements + The vector with subtraced scalar from each element. + + + + Perform a component-wise subtraction + + The input vector. + The scalar value to be subtraced from elements + The vector with subtraced scalar from each element. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Defines the viewport dimensions. + + + + + Position of the pixel coordinate of the upper-left corner of the viewport. + + + + + Position of the pixel coordinate of the upper-left corner of the viewport. + + + + + Width dimension of the viewport. + + + + + Height dimension of the viewport. + + + + + Gets or sets the minimum depth of the clip volume. + + + + + Gets or sets the maximum depth of the clip volume. + + + + + Initializes a new instance of the struct. + + The x coordinate of the upper-left corner of the viewport in pixels. + The y coordinate of the upper-left corner of the viewport in pixels. + The width of the viewport in pixels. + The height of the viewport in pixels. + + + + Initializes a new instance of the struct. + + The x coordinate of the upper-left corner of the viewport in pixels. + The y coordinate of the upper-left corner of the viewport in pixels. + The width of the viewport in pixels. + The height of the viewport in pixels. + The minimum depth of the clip volume. + The maximum depth of the clip volume. + + + + Initializes a new instance of the struct. + + A bounding box that defines the location and size of the viewport in a render target. + + + + Gets the size of this resource. + + The bounds. + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified object is equal to this instance. + + The object to compare with this instance. + + true if the specified object is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Implements the operator ==. + + The left. + The right. + The result of the operator. + + + + Implements the operator !=. + + The left. + The right. + The result of the operator. + + + + Retrieves a string representation of this object. + + A that represents this instance. + + + + Projects a 3D vector from object space into screen space. + + The vector to project. + The projection matrix. + The view matrix. + The world matrix. + The projected vector. + + + + Projects a 3D vector from object space into screen space. + + The vector to project. + A combined WorldViewProjection matrix. + The projected vector. + + + + Converts a screen space point into a corresponding point in world space. + + The vector to project. + The projection matrix. + The view matrix. + The world matrix. + The unprojected Vector. + + + + Converts a screen space point into a corresponding point in world space. + + The vector to project. + An inverted combined WorldViewProjection matrix. + The unprojected vector. + + + + Gets the aspect ratio used by the viewport. + + The aspect ratio. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Defines the viewport dimensions using float coordinates for (X,Y,Width,Height). + + + + + Position of the pixel coordinate of the upper-left corner of the viewport. + + + + + Position of the pixel coordinate of the upper-left corner of the viewport. + + + + + Width dimension of the viewport. + + + + + Height dimension of the viewport. + + + + + Gets or sets the minimum depth of the clip volume. + + + + + Gets or sets the maximum depth of the clip volume. + + + + + Initializes a new instance of the struct. + + The x coordinate of the upper-left corner of the viewport in pixels. + The y coordinate of the upper-left corner of the viewport in pixels. + The width of the viewport in pixels. + The height of the viewport in pixels. + + + + Initializes a new instance of the struct. + + The x coordinate of the upper-left corner of the viewport in pixels. + The y coordinate of the upper-left corner of the viewport in pixels. + The width of the viewport in pixels. + The height of the viewport in pixels. + The minimum depth of the clip volume. + The maximum depth of the clip volume. + + + + Initializes a new instance of the struct. + + A bounding box that defines the location and size of the viewport in a render target. + + + + Gets the size of this resource. + + The bounds. + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified object is equal to this instance. + + The object to compare with this instance. + + true if the specified object is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Implements the operator ==. + + The left. + The right. + The result of the operator. + + + + Implements the operator !=. + + The left. + The right. + The result of the operator. + + + + Retrieves a string representation of this object. + + A that represents this instance. + + + + + Projects a 3D vector from object space into screen space. + + The vector to project. + A combined WorldViewProjection matrix. + The projected vector. + + + + Converts a screen space point into a corresponding point in world space. + + The vector to project. + The projection matrix. + The view matrix. + The world matrix. + The unprojected Vector. + + + + Converts a screen space point into a corresponding point in world space. + + The vector to project. + An inverted combined WorldViewProjection matrix. + The unprojected vector. + + + + Gets the aspect ratio used by the viewport. + + The aspect ratio. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + diff --git a/RenderHookAPI/bin/SharpDX.dll b/RenderHookAPI/bin/SharpDX.dll new file mode 100644 index 0000000000000000000000000000000000000000..baa26ad90e3fa6e9deea304cdd3908ded9439ee4 GIT binary patch literal 278016 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 literal 0 HcmV?d00001 diff --git a/RenderHookAPI/bin/SharpDX.xml b/RenderHookAPI/bin/SharpDX.xml new file mode 100644 index 0000000..f50058a --- /dev/null +++ b/RenderHookAPI/bin/SharpDX.xml @@ -0,0 +1,38946 @@ + + + + SharpDX + + + + + The assembly is the core assembly providing infrastructure for all managed DirectX API. + + + + + Callback base implementation of . + + + + + Releases unmanaged and - optionally - managed resources + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Provides for default value types. + + + + + A default for . + + + + + A fast method to pass array of to SharpDX methods. + + + + + Initializes a new instance of the class. + + The array. + + + + Initializes a new instance of the class. + + The size. + + + + Gets the pointer to the native array associated to this instance. + + + + + Gets the length. + + + + + Gets an object at the specified index. + + The index. + A + + + + Sets an object at the specified index. + + The index. + The value. + + + + + + + A typed version of + + Type of the + + + + Initializes a new instance of the class. + + The array. + + + + Initializes a new instance of the class. + + The size. + + + + Gets or sets the with the specified i. + + + + + Gets or sets the unmanaged callback. + + The unmanaged callback. + + This property is set whenever this instance has an unmanaged callback + registered. This callback must be disposed when disposing this instance. + + + + +

    The + enumeration constants specify the conditions for performing the commit operation in the + IStorage::Commit and + methods.

    +
    + +

    You can specify or some combination of , , and for normal commit operations. You can specify with any other flags.

    Typically, use to protect the storage object in cases where more than one user can edit the object simultaneously.

    +
    + + aa380320 + STGC + STGC +
    + + + No documentation. + + + aa380320 + STGC_DEFAULT + STGC_DEFAULT + + + + No documentation. + + + aa380320 + STGC_OVERWRITE + STGC_OVERWRITE + + + + No documentation. + + + aa380320 + STGC_ONLYIFCURRENT + STGC_ONLYIFCURRENT + + + + No documentation. + + + aa380320 + STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE + STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE + + + + No documentation. + + + aa380320 + STGC_CONSOLIDATE + STGC_CONSOLIDATE + + + + No documentation. + + + SHARPDX_ERRORCODE + SHARPDX_ERRORCODE + + + + No documentation. + + + ERROR_SUCCESS + ERROR_SUCCESS + + + + No documentation. + + + ERROR_INVALID_FUNCTION + ERROR_INVALID_FUNCTION + + + + No documentation. + + + ERROR_FILE_NOT_FOUND + ERROR_FILE_NOT_FOUND + + + + No documentation. + + + ERROR_PATH_NOT_FOUND + ERROR_PATH_NOT_FOUND + + + + No documentation. + + + ERROR_TOO_MANY_OPEN_FILES + ERROR_TOO_MANY_OPEN_FILES + + + + No documentation. + + + ERROR_ACCESS_DENIED + ERROR_ACCESS_DENIED + + + + No documentation. + + + ERROR_INVALID_HANDLE + ERROR_INVALID_HANDLE + + + + No documentation. + + + ERROR_ARENA_TRASHED + ERROR_ARENA_TRASHED + + + + No documentation. + + + ERROR_NOT_ENOUGH_MEMORY + ERROR_NOT_ENOUGH_MEMORY + + + + No documentation. + + + ERROR_INVALID_BLOCK + ERROR_INVALID_BLOCK + + + + No documentation. + + + ERROR_BAD_ENVIRONMENT + ERROR_BAD_ENVIRONMENT + + + + No documentation. + + + ERROR_BAD_FORMAT + ERROR_BAD_FORMAT + + + + No documentation. + + + ERROR_INVALID_ACCESS + ERROR_INVALID_ACCESS + + + + No documentation. + + + ERROR_INVALID_DATA + ERROR_INVALID_DATA + + + + No documentation. + + + ERROR_OUTOFMEMORY + ERROR_OUTOFMEMORY + + + + No documentation. + + + ERROR_INVALID_DRIVE + ERROR_INVALID_DRIVE + + + + No documentation. + + + ERROR_CURRENT_DIRECTORY + ERROR_CURRENT_DIRECTORY + + + + No documentation. + + + ERROR_NOT_SAME_DEVICE + ERROR_NOT_SAME_DEVICE + + + + No documentation. + + + ERROR_NO_MORE_FILES + ERROR_NO_MORE_FILES + + + + No documentation. + + + ERROR_WRITE_PROTECT + ERROR_WRITE_PROTECT + + + + No documentation. + + + ERROR_BAD_UNIT + ERROR_BAD_UNIT + + + + No documentation. + + + ERROR_NOT_READY + ERROR_NOT_READY + + + + No documentation. + + + ERROR_BAD_COMMAND + ERROR_BAD_COMMAND + + + + No documentation. + + + ERROR_CRC + ERROR_CRC + + + + No documentation. + + + ERROR_BAD_LENGTH + ERROR_BAD_LENGTH + + + + No documentation. + + + ERROR_SEEK + ERROR_SEEK + + + + No documentation. + + + ERROR_NOT_DOS_DISK + ERROR_NOT_DOS_DISK + + + + No documentation. + + + ERROR_SECTOR_NOT_FOUND + ERROR_SECTOR_NOT_FOUND + + + + No documentation. + + + ERROR_OUT_OF_PAPER + ERROR_OUT_OF_PAPER + + + + No documentation. + + + ERROR_WRITE_FAULT + ERROR_WRITE_FAULT + + + + No documentation. + + + ERROR_READ_FAULT + ERROR_READ_FAULT + + + + No documentation. + + + ERROR_GEN_FAILURE + ERROR_GEN_FAILURE + + + + No documentation. + + + ERROR_SHARING_VIOLATION + ERROR_SHARING_VIOLATION + + + + No documentation. + + + ERROR_LOCK_VIOLATION + ERROR_LOCK_VIOLATION + + + + No documentation. + + + ERROR_WRONG_DISK + ERROR_WRONG_DISK + + + + No documentation. + + + ERROR_SHARING_BUFFER_EXCEEDED + ERROR_SHARING_BUFFER_EXCEEDED + + + + No documentation. + + + ERROR_HANDLE_EOF + ERROR_HANDLE_EOF + + + + No documentation. + + + ERROR_HANDLE_DISK_FULL + ERROR_HANDLE_DISK_FULL + + + + No documentation. + + + ERROR_NOT_SUPPORTED + ERROR_NOT_SUPPORTED + + + + No documentation. + + + ERROR_REM_NOT_LIST + ERROR_REM_NOT_LIST + + + + No documentation. + + + ERROR_DUP_NAME + ERROR_DUP_NAME + + + + No documentation. + + + ERROR_BAD_NETPATH + ERROR_BAD_NETPATH + + + + No documentation. + + + ERROR_NETWORK_BUSY + ERROR_NETWORK_BUSY + + + + No documentation. + + + ERROR_DEV_NOT_EXIST + ERROR_DEV_NOT_EXIST + + + + No documentation. + + + ERROR_TOO_MANY_CMDS + ERROR_TOO_MANY_CMDS + + + + No documentation. + + + ERROR_ADAP_HDW_ERR + ERROR_ADAP_HDW_ERR + + + + No documentation. + + + ERROR_BAD_NET_RESP + ERROR_BAD_NET_RESP + + + + No documentation. + + + ERROR_UNEXP_NET_ERR + ERROR_UNEXP_NET_ERR + + + + No documentation. + + + ERROR_BAD_REM_ADAP + ERROR_BAD_REM_ADAP + + + + No documentation. + + + ERROR_PRINTQ_FULL + ERROR_PRINTQ_FULL + + + + No documentation. + + + ERROR_NO_SPOOL_SPACE + ERROR_NO_SPOOL_SPACE + + + + No documentation. + + + ERROR_PRINT_CANCELLED + ERROR_PRINT_CANCELLED + + + + No documentation. + + + ERROR_NETNAME_DELETED + ERROR_NETNAME_DELETED + + + + No documentation. + + + ERROR_NETWORK_ACCESS_DENIED + ERROR_NETWORK_ACCESS_DENIED + + + + No documentation. + + + ERROR_BAD_DEV_TYPE + ERROR_BAD_DEV_TYPE + + + + No documentation. + + + ERROR_BAD_NET_NAME + ERROR_BAD_NET_NAME + + + + No documentation. + + + ERROR_TOO_MANY_NAMES + ERROR_TOO_MANY_NAMES + + + + No documentation. + + + ERROR_TOO_MANY_SESS + ERROR_TOO_MANY_SESS + + + + No documentation. + + + ERROR_SHARING_PAUSED + ERROR_SHARING_PAUSED + + + + No documentation. + + + ERROR_REQ_NOT_ACCEP + ERROR_REQ_NOT_ACCEP + + + + No documentation. + + + ERROR_REDIR_PAUSED + ERROR_REDIR_PAUSED + + + + No documentation. + + + ERROR_FILE_EXISTS + ERROR_FILE_EXISTS + + + + No documentation. + + + ERROR_CANNOT_MAKE + ERROR_CANNOT_MAKE + + + + No documentation. + + + ERROR_FAIL_I24 + ERROR_FAIL_I24 + + + + No documentation. + + + ERROR_OUT_OF_STRUCTURES + ERROR_OUT_OF_STRUCTURES + + + + No documentation. + + + ERROR_ALREADY_ASSIGNED + ERROR_ALREADY_ASSIGNED + + + + No documentation. + + + ERROR_INVALID_PASSWORD + ERROR_INVALID_PASSWORD + + + + No documentation. + + + ERROR_INVALID_PARAMETER + ERROR_INVALID_PARAMETER + + + + No documentation. + + + ERROR_NET_WRITE_FAULT + ERROR_NET_WRITE_FAULT + + + + No documentation. + + + ERROR_NO_PROC_SLOTS + ERROR_NO_PROC_SLOTS + + + + No documentation. + + + ERROR_TOO_MANY_SEMAPHORES + ERROR_TOO_MANY_SEMAPHORES + + + + No documentation. + + + ERROR_EXCL_SEM_ALREADY_OWNED + ERROR_EXCL_SEM_ALREADY_OWNED + + + + No documentation. + + + ERROR_SEM_IS_SET + ERROR_SEM_IS_SET + + + + No documentation. + + + ERROR_TOO_MANY_SEM_REQUESTS + ERROR_TOO_MANY_SEM_REQUESTS + + + + No documentation. + + + ERROR_INVALID_AT_INTERRUPT_TIME + ERROR_INVALID_AT_INTERRUPT_TIME + + + + No documentation. + + + ERROR_SEM_OWNER_DIED + ERROR_SEM_OWNER_DIED + + + + No documentation. + + + ERROR_SEM_USER_LIMIT + ERROR_SEM_USER_LIMIT + + + + No documentation. + + + ERROR_DISK_CHANGE + ERROR_DISK_CHANGE + + + + No documentation. + + + ERROR_DRIVE_LOCKED + ERROR_DRIVE_LOCKED + + + + No documentation. + + + ERROR_BROKEN_PIPE + ERROR_BROKEN_PIPE + + + + No documentation. + + + ERROR_OPEN_FAILED + ERROR_OPEN_FAILED + + + + No documentation. + + + ERROR_BUFFER_OVERFLOW + ERROR_BUFFER_OVERFLOW + + + + No documentation. + + + ERROR_DISK_FULL + ERROR_DISK_FULL + + + + No documentation. + + + ERROR_NO_MORE_SEARCH_HANDLES + ERROR_NO_MORE_SEARCH_HANDLES + + + + No documentation. + + + ERROR_INVALID_TARGET_HANDLE + ERROR_INVALID_TARGET_HANDLE + + + + No documentation. + + + ERROR_INVALID_CATEGORY + ERROR_INVALID_CATEGORY + + + + No documentation. + + + ERROR_INVALID_VERIFY_SWITCH + ERROR_INVALID_VERIFY_SWITCH + + + + No documentation. + + + ERROR_BAD_DRIVER_LEVEL + ERROR_BAD_DRIVER_LEVEL + + + + No documentation. + + + ERROR_CALL_NOT_IMPLEMENTED + ERROR_CALL_NOT_IMPLEMENTED + + + + No documentation. + + + ERROR_SEM_TIMEOUT + ERROR_SEM_TIMEOUT + + + + No documentation. + + + ERROR_INSUFFICIENT_BUFFER + ERROR_INSUFFICIENT_BUFFER + + + + No documentation. + + + ERROR_INVALID_NAME + ERROR_INVALID_NAME + + + + No documentation. + + + ERROR_INVALID_LEVEL + ERROR_INVALID_LEVEL + + + + No documentation. + + + ERROR_NO_VOLUME_LABEL + ERROR_NO_VOLUME_LABEL + + + + No documentation. + + + ERROR_MOD_NOT_FOUND + ERROR_MOD_NOT_FOUND + + + + No documentation. + + + ERROR_PROC_NOT_FOUND + ERROR_PROC_NOT_FOUND + + + + No documentation. + + + ERROR_WAIT_NO_CHILDREN + ERROR_WAIT_NO_CHILDREN + + + + No documentation. + + + ERROR_CHILD_NOT_COMPLETE + ERROR_CHILD_NOT_COMPLETE + + + + No documentation. + + + ERROR_DIRECT_ACCESS_HANDLE + ERROR_DIRECT_ACCESS_HANDLE + + + + No documentation. + + + ERROR_NEGATIVE_SEEK + ERROR_NEGATIVE_SEEK + + + + No documentation. + + + ERROR_SEEK_ON_DEVICE + ERROR_SEEK_ON_DEVICE + + + + No documentation. + + + ERROR_IS_JOIN_TARGET + ERROR_IS_JOIN_TARGET + + + + No documentation. + + + ERROR_IS_JOINED + ERROR_IS_JOINED + + + + No documentation. + + + ERROR_IS_SUBSTED + ERROR_IS_SUBSTED + + + + No documentation. + + + ERROR_NOT_JOINED + ERROR_NOT_JOINED + + + + No documentation. + + + ERROR_NOT_SUBSTED + ERROR_NOT_SUBSTED + + + + No documentation. + + + ERROR_JOIN_TO_JOIN + ERROR_JOIN_TO_JOIN + + + + No documentation. + + + ERROR_SUBST_TO_SUBST + ERROR_SUBST_TO_SUBST + + + + No documentation. + + + ERROR_JOIN_TO_SUBST + ERROR_JOIN_TO_SUBST + + + + No documentation. + + + ERROR_SUBST_TO_JOIN + ERROR_SUBST_TO_JOIN + + + + No documentation. + + + ERROR_BUSY_DRIVE + ERROR_BUSY_DRIVE + + + + No documentation. + + + ERROR_SAME_DRIVE + ERROR_SAME_DRIVE + + + + No documentation. + + + ERROR_DIR_NOT_ROOT + ERROR_DIR_NOT_ROOT + + + + No documentation. + + + ERROR_DIR_NOT_EMPTY + ERROR_DIR_NOT_EMPTY + + + + No documentation. + + + ERROR_IS_SUBST_PATH + ERROR_IS_SUBST_PATH + + + + No documentation. + + + ERROR_IS_JOIN_PATH + ERROR_IS_JOIN_PATH + + + + No documentation. + + + ERROR_PATH_BUSY + ERROR_PATH_BUSY + + + + No documentation. + + + ERROR_IS_SUBST_TARGET + ERROR_IS_SUBST_TARGET + + + + No documentation. + + + ERROR_SYSTEM_TRACE + ERROR_SYSTEM_TRACE + + + + No documentation. + + + ERROR_INVALID_EVENT_COUNT + ERROR_INVALID_EVENT_COUNT + + + + No documentation. + + + ERROR_TOO_MANY_MUXWAITERS + ERROR_TOO_MANY_MUXWAITERS + + + + No documentation. + + + ERROR_INVALID_LIST_FORMAT + ERROR_INVALID_LIST_FORMAT + + + + No documentation. + + + ERROR_LABEL_TOO_LONG + ERROR_LABEL_TOO_LONG + + + + No documentation. + + + ERROR_TOO_MANY_TCBS + ERROR_TOO_MANY_TCBS + + + + No documentation. + + + ERROR_SIGNAL_REFUSED + ERROR_SIGNAL_REFUSED + + + + No documentation. + + + ERROR_DISCARDED + ERROR_DISCARDED + + + + No documentation. + + + ERROR_NOT_LOCKED + ERROR_NOT_LOCKED + + + + No documentation. + + + ERROR_BAD_THREADID_ADDR + ERROR_BAD_THREADID_ADDR + + + + No documentation. + + + ERROR_BAD_ARGUMENTS + ERROR_BAD_ARGUMENTS + + + + No documentation. + + + ERROR_BAD_PATHNAME + ERROR_BAD_PATHNAME + + + + No documentation. + + + ERROR_SIGNAL_PENDING + ERROR_SIGNAL_PENDING + + + + No documentation. + + + ERROR_MAX_THRDS_REACHED + ERROR_MAX_THRDS_REACHED + + + + No documentation. + + + ERROR_LOCK_FAILED + ERROR_LOCK_FAILED + + + + No documentation. + + + ERROR_BUSY + ERROR_BUSY + + + + No documentation. + + + ERROR_DEVICE_SUPPORT_IN_PROGRESS + ERROR_DEVICE_SUPPORT_IN_PROGRESS + + + + No documentation. + + + ERROR_CANCEL_VIOLATION + ERROR_CANCEL_VIOLATION + + + + No documentation. + + + ERROR_ATOMIC_LOCKS_NOT_SUPPORTED + ERROR_ATOMIC_LOCKS_NOT_SUPPORTED + + + + No documentation. + + + ERROR_INVALID_SEGMENT_NUMBER + ERROR_INVALID_SEGMENT_NUMBER + + + + No documentation. + + + ERROR_INVALID_ORDINAL + ERROR_INVALID_ORDINAL + + + + No documentation. + + + ERROR_ALREADY_EXISTS + ERROR_ALREADY_EXISTS + + + + No documentation. + + + ERROR_INVALID_FLAG_NUMBER + ERROR_INVALID_FLAG_NUMBER + + + + No documentation. + + + ERROR_SEM_NOT_FOUND + ERROR_SEM_NOT_FOUND + + + + No documentation. + + + ERROR_INVALID_STARTING_CODESEG + ERROR_INVALID_STARTING_CODESEG + + + + No documentation. + + + ERROR_INVALID_STACKSEG + ERROR_INVALID_STACKSEG + + + + No documentation. + + + ERROR_INVALID_MODULETYPE + ERROR_INVALID_MODULETYPE + + + + No documentation. + + + ERROR_INVALID_EXE_SIGNATURE + ERROR_INVALID_EXE_SIGNATURE + + + + No documentation. + + + ERROR_EXE_MARKED_INVALID + ERROR_EXE_MARKED_INVALID + + + + No documentation. + + + ERROR_BAD_EXE_FORMAT + ERROR_BAD_EXE_FORMAT + + + + No documentation. + + + ERROR_ITERATED_DATA_EXCEEDS_64k + ERROR_ITERATED_DATA_EXCEEDS_64k + + + + No documentation. + + + ERROR_INVALID_MINALLOCSIZE + ERROR_INVALID_MINALLOCSIZE + + + + No documentation. + + + ERROR_DYNLINK_FROM_INVALID_RING + ERROR_DYNLINK_FROM_INVALID_RING + + + + No documentation. + + + ERROR_IOPL_NOT_ENABLED + ERROR_IOPL_NOT_ENABLED + + + + No documentation. + + + ERROR_INVALID_SEGDPL + ERROR_INVALID_SEGDPL + + + + No documentation. + + + ERROR_AUTODATASEG_EXCEEDS_64k + ERROR_AUTODATASEG_EXCEEDS_64k + + + + No documentation. + + + ERROR_RING2SEG_MUST_BE_MOVABLE + ERROR_RING2SEG_MUST_BE_MOVABLE + + + + No documentation. + + + ERROR_RELOC_CHAIN_XEEDS_SEGLIM + ERROR_RELOC_CHAIN_XEEDS_SEGLIM + + + + No documentation. + + + ERROR_INFLOOP_IN_RELOC_CHAIN + ERROR_INFLOOP_IN_RELOC_CHAIN + + + + No documentation. + + + ERROR_ENVVAR_NOT_FOUND + ERROR_ENVVAR_NOT_FOUND + + + + No documentation. + + + ERROR_NO_SIGNAL_SENT + ERROR_NO_SIGNAL_SENT + + + + No documentation. + + + ERROR_FILENAME_EXCED_RANGE + ERROR_FILENAME_EXCED_RANGE + + + + No documentation. + + + ERROR_RING2_STACK_IN_USE + ERROR_RING2_STACK_IN_USE + + + + No documentation. + + + ERROR_META_EXPANSION_TOO_LONG + ERROR_META_EXPANSION_TOO_LONG + + + + No documentation. + + + ERROR_INVALID_SIGNAL_NUMBER + ERROR_INVALID_SIGNAL_NUMBER + + + + No documentation. + + + ERROR_THREAD_1_INACTIVE + ERROR_THREAD_1_INACTIVE + + + + No documentation. + + + ERROR_LOCKED + ERROR_LOCKED + + + + No documentation. + + + ERROR_TOO_MANY_MODULES + ERROR_TOO_MANY_MODULES + + + + No documentation. + + + ERROR_NESTING_NOT_ALLOWED + ERROR_NESTING_NOT_ALLOWED + + + + No documentation. + + + ERROR_EXE_MACHINE_TYPE_MISMATCH + ERROR_EXE_MACHINE_TYPE_MISMATCH + + + + No documentation. + + + ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY + ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY + + + + No documentation. + + + ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY + ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY + + + + No documentation. + + + ERROR_FILE_CHECKED_OUT + ERROR_FILE_CHECKED_OUT + + + + No documentation. + + + ERROR_CHECKOUT_REQUIRED + ERROR_CHECKOUT_REQUIRED + + + + No documentation. + + + ERROR_BAD_FILE_TYPE + ERROR_BAD_FILE_TYPE + + + + No documentation. + + + ERROR_FILE_TOO_LARGE + ERROR_FILE_TOO_LARGE + + + + No documentation. + + + ERROR_FORMS_AUTH_REQUIRED + ERROR_FORMS_AUTH_REQUIRED + + + + No documentation. + + + ERROR_VIRUS_INFECTED + ERROR_VIRUS_INFECTED + + + + No documentation. + + + ERROR_VIRUS_DELETED + ERROR_VIRUS_DELETED + + + + No documentation. + + + ERROR_PIPE_LOCAL + ERROR_PIPE_LOCAL + + + + No documentation. + + + ERROR_BAD_PIPE + ERROR_BAD_PIPE + + + + No documentation. + + + ERROR_PIPE_BUSY + ERROR_PIPE_BUSY + + + + No documentation. + + + ERROR_NO_DATA + ERROR_NO_DATA + + + + No documentation. + + + ERROR_PIPE_NOT_CONNECTED + ERROR_PIPE_NOT_CONNECTED + + + + No documentation. + + + ERROR_MORE_DATA + ERROR_MORE_DATA + + + + No documentation. + + + ERROR_NO_WORK_DONE + ERROR_NO_WORK_DONE + + + + No documentation. + + + ERROR_VC_DISCONNECTED + ERROR_VC_DISCONNECTED + + + + No documentation. + + + ERROR_INVALID_EA_NAME + ERROR_INVALID_EA_NAME + + + + No documentation. + + + ERROR_EA_LIST_INCONSISTENT + ERROR_EA_LIST_INCONSISTENT + + + + No documentation. + + + ERROR_NO_MORE_ITEMS + ERROR_NO_MORE_ITEMS + + + + No documentation. + + + ERROR_CANNOT_COPY + ERROR_CANNOT_COPY + + + + No documentation. + + + ERROR_DIRECTORY + ERROR_DIRECTORY + + + + No documentation. + + + ERROR_EAS_DIDNT_FIT + ERROR_EAS_DIDNT_FIT + + + + No documentation. + + + ERROR_EA_FILE_CORRUPT + ERROR_EA_FILE_CORRUPT + + + + No documentation. + + + ERROR_EA_TABLE_FULL + ERROR_EA_TABLE_FULL + + + + No documentation. + + + ERROR_INVALID_EA_HANDLE + ERROR_INVALID_EA_HANDLE + + + + No documentation. + + + ERROR_EAS_NOT_SUPPORTED + ERROR_EAS_NOT_SUPPORTED + + + + No documentation. + + + ERROR_NOT_OWNER + ERROR_NOT_OWNER + + + + No documentation. + + + ERROR_TOO_MANY_POSTS + ERROR_TOO_MANY_POSTS + + + + No documentation. + + + ERROR_PARTIAL_COPY + ERROR_PARTIAL_COPY + + + + No documentation. + + + ERROR_OPLOCK_NOT_GRANTED + ERROR_OPLOCK_NOT_GRANTED + + + + No documentation. + + + ERROR_INVALID_OPLOCK_PROTOCOL + ERROR_INVALID_OPLOCK_PROTOCOL + + + + No documentation. + + + ERROR_DISK_TOO_FRAGMENTED + ERROR_DISK_TOO_FRAGMENTED + + + + No documentation. + + + ERROR_DELETE_PENDING + ERROR_DELETE_PENDING + + + + No documentation. + + + ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING + ERROR_INCOMPATIBLE_WITH_GLOBAL_SHORT_NAME_REGISTRY_SETTING + + + + No documentation. + + + ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME + ERROR_SHORT_NAMES_NOT_ENABLED_ON_VOLUME + + + + No documentation. + + + ERROR_SECURITY_STREAM_IS_INCONSISTENT + ERROR_SECURITY_STREAM_IS_INCONSISTENT + + + + No documentation. + + + ERROR_INVALID_LOCK_RANGE + ERROR_INVALID_LOCK_RANGE + + + + No documentation. + + + ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT + ERROR_IMAGE_SUBSYSTEM_NOT_PRESENT + + + + No documentation. + + + ERROR_NOTIFICATION_GUID_ALREADY_DEFINED + ERROR_NOTIFICATION_GUID_ALREADY_DEFINED + + + + No documentation. + + + ERROR_INVALID_EXCEPTION_HANDLER + ERROR_INVALID_EXCEPTION_HANDLER + + + + No documentation. + + + ERROR_DUPLICATE_PRIVILEGES + ERROR_DUPLICATE_PRIVILEGES + + + + No documentation. + + + ERROR_NO_RANGES_PROCESSED + ERROR_NO_RANGES_PROCESSED + + + + No documentation. + + + ERROR_NOT_ALLOWED_ON_SYSTEM_FILE + ERROR_NOT_ALLOWED_ON_SYSTEM_FILE + + + + No documentation. + + + ERROR_DISK_RESOURCES_EXHAUSTED + ERROR_DISK_RESOURCES_EXHAUSTED + + + + No documentation. + + + ERROR_INVALID_TOKEN + ERROR_INVALID_TOKEN + + + + No documentation. + + + ERROR_DEVICE_FEATURE_NOT_SUPPORTED + ERROR_DEVICE_FEATURE_NOT_SUPPORTED + + + + No documentation. + + + ERROR_MR_MID_NOT_FOUND + ERROR_MR_MID_NOT_FOUND + + + + No documentation. + + + ERROR_SCOPE_NOT_FOUND + ERROR_SCOPE_NOT_FOUND + + + + No documentation. + + + ERROR_UNDEFINED_SCOPE + ERROR_UNDEFINED_SCOPE + + + + No documentation. + + + ERROR_INVALID_CAP + ERROR_INVALID_CAP + + + + No documentation. + + + ERROR_DEVICE_UNREACHABLE + ERROR_DEVICE_UNREACHABLE + + + + No documentation. + + + ERROR_DEVICE_NO_RESOURCES + ERROR_DEVICE_NO_RESOURCES + + + + No documentation. + + + ERROR_DATA_CHECKSUM_ERROR + ERROR_DATA_CHECKSUM_ERROR + + + + No documentation. + + + ERROR_INTERMIXED_KERNEL_EA_OPERATION + ERROR_INTERMIXED_KERNEL_EA_OPERATION + + + + No documentation. + + + ERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED + ERROR_FILE_LEVEL_TRIM_NOT_SUPPORTED + + + + No documentation. + + + ERROR_OFFSET_ALIGNMENT_VIOLATION + ERROR_OFFSET_ALIGNMENT_VIOLATION + + + + No documentation. + + + ERROR_INVALID_FIELD_IN_PARAMETER_LIST + ERROR_INVALID_FIELD_IN_PARAMETER_LIST + + + + No documentation. + + + ERROR_OPERATION_IN_PROGRESS + ERROR_OPERATION_IN_PROGRESS + + + + No documentation. + + + ERROR_BAD_DEVICE_PATH + ERROR_BAD_DEVICE_PATH + + + + No documentation. + + + ERROR_TOO_MANY_DESCRIPTORS + ERROR_TOO_MANY_DESCRIPTORS + + + + No documentation. + + + ERROR_SCRUB_DATA_DISABLED + ERROR_SCRUB_DATA_DISABLED + + + + No documentation. + + + ERROR_NOT_REDUNDANT_STORAGE + ERROR_NOT_REDUNDANT_STORAGE + + + + No documentation. + + + ERROR_RESIDENT_FILE_NOT_SUPPORTED + ERROR_RESIDENT_FILE_NOT_SUPPORTED + + + + No documentation. + + + ERROR_COMPRESSED_FILE_NOT_SUPPORTED + ERROR_COMPRESSED_FILE_NOT_SUPPORTED + + + + No documentation. + + + ERROR_DIRECTORY_NOT_SUPPORTED + ERROR_DIRECTORY_NOT_SUPPORTED + + + + No documentation. + + + ERROR_NOT_READ_FROM_COPY + ERROR_NOT_READ_FROM_COPY + + + + No documentation. + + + ERROR_FT_WRITE_FAILURE + ERROR_FT_WRITE_FAILURE + + + + No documentation. + + + ERROR_FT_DI_SCAN_REQUIRED + ERROR_FT_DI_SCAN_REQUIRED + + + + No documentation. + + + ERROR_INVALID_KERNEL_INFO_VERSION + ERROR_INVALID_KERNEL_INFO_VERSION + + + + No documentation. + + + ERROR_INVALID_PEP_INFO_VERSION + ERROR_INVALID_PEP_INFO_VERSION + + + + No documentation. + + + ERROR_OBJECT_NOT_EXTERNALLY_BACKED + ERROR_OBJECT_NOT_EXTERNALLY_BACKED + + + + No documentation. + + + ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN + ERROR_EXTERNAL_BACKING_PROVIDER_UNKNOWN + + + + No documentation. + + + ERROR_COMPRESSION_NOT_BENEFICIAL + ERROR_COMPRESSION_NOT_BENEFICIAL + + + + No documentation. + + + ERROR_STORAGE_TOPOLOGY_ID_MISMATCH + ERROR_STORAGE_TOPOLOGY_ID_MISMATCH + + + + No documentation. + + + ERROR_BLOCKED_BY_PARENTAL_CONTROLS + ERROR_BLOCKED_BY_PARENTAL_CONTROLS + + + + No documentation. + + + ERROR_BLOCK_TOO_MANY_REFERENCES + ERROR_BLOCK_TOO_MANY_REFERENCES + + + + No documentation. + + + ERROR_MARKED_TO_DISALLOW_WRITES + ERROR_MARKED_TO_DISALLOW_WRITES + + + + No documentation. + + + ERROR_ENCLAVE_FAILURE + ERROR_ENCLAVE_FAILURE + + + + No documentation. + + + ERROR_FAIL_NOACTION_REBOOT + ERROR_FAIL_NOACTION_REBOOT + + + + No documentation. + + + ERROR_FAIL_SHUTDOWN + ERROR_FAIL_SHUTDOWN + + + + No documentation. + + + ERROR_FAIL_RESTART + ERROR_FAIL_RESTART + + + + No documentation. + + + ERROR_MAX_SESSIONS_REACHED + ERROR_MAX_SESSIONS_REACHED + + + + No documentation. + + + ERROR_NETWORK_ACCESS_DENIED_EDP + ERROR_NETWORK_ACCESS_DENIED_EDP + + + + No documentation. + + + ERROR_DEVICE_HINT_NAME_BUFFER_TOO_SMALL + ERROR_DEVICE_HINT_NAME_BUFFER_TOO_SMALL + + + + No documentation. + + + ERROR_EDP_POLICY_DENIES_OPERATION + ERROR_EDP_POLICY_DENIES_OPERATION + + + + No documentation. + + + ERROR_EDP_DPL_POLICY_CANT_BE_SATISFIED + ERROR_EDP_DPL_POLICY_CANT_BE_SATISFIED + + + + No documentation. + + + ERROR_CLOUD_FILE_PROVIDER_UNKNOWN + ERROR_CLOUD_FILE_PROVIDER_UNKNOWN + + + + No documentation. + + + ERROR_DEVICE_IN_MAINTENANCE + ERROR_DEVICE_IN_MAINTENANCE + + + + No documentation. + + + ERROR_NOT_SUPPORTED_ON_DAX + ERROR_NOT_SUPPORTED_ON_DAX + + + + No documentation. + + + ERROR_DAX_MAPPING_EXISTS + ERROR_DAX_MAPPING_EXISTS + + + + No documentation. + + + ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING + ERROR_CLOUD_FILE_PROVIDER_NOT_RUNNING + + + + No documentation. + + + ERROR_CLOUD_FILE_METADATA_CORRUPT + ERROR_CLOUD_FILE_METADATA_CORRUPT + + + + No documentation. + + + ERROR_CLOUD_FILE_METADATA_TOO_LARGE + ERROR_CLOUD_FILE_METADATA_TOO_LARGE + + + + No documentation. + + + ERROR_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE + ERROR_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE + + + + No documentation. + + + ERROR_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH + ERROR_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH + + + + No documentation. + + + ERROR_CHILD_PROCESS_BLOCKED + ERROR_CHILD_PROCESS_BLOCKED + + + + No documentation. + + + ERROR_STORAGE_LOST_DATA_PERSISTENCE + ERROR_STORAGE_LOST_DATA_PERSISTENCE + + + + No documentation. + + + ERROR_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE + ERROR_FILE_SYSTEM_VIRTUALIZATION_UNAVAILABLE + + + + No documentation. + + + ERROR_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT + ERROR_FILE_SYSTEM_VIRTUALIZATION_METADATA_CORRUPT + + + + No documentation. + + + ERROR_FILE_SYSTEM_VIRTUALIZATION_BUSY + ERROR_FILE_SYSTEM_VIRTUALIZATION_BUSY + + + + No documentation. + + + ERROR_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN + ERROR_FILE_SYSTEM_VIRTUALIZATION_PROVIDER_UNKNOWN + + + + No documentation. + + + ERROR_GDI_HANDLE_LEAK + ERROR_GDI_HANDLE_LEAK + + + + No documentation. + + + ERROR_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS + ERROR_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS + + + + No documentation. + + + ERROR_CLOUD_FILE_METADATA_VERSION_NOT_SUPPORTED + ERROR_CLOUD_FILE_METADATA_VERSION_NOT_SUPPORTED + + + + No documentation. + + + ERROR_NOT_A_CLOUD_FILE + ERROR_NOT_A_CLOUD_FILE + + + + No documentation. + + + ERROR_CLOUD_FILE_NOT_IN_SYNC + ERROR_CLOUD_FILE_NOT_IN_SYNC + + + + No documentation. + + + ERROR_THREAD_MODE_ALREADY_BACKGROUND + ERROR_THREAD_MODE_ALREADY_BACKGROUND + + + + No documentation. + + + ERROR_THREAD_MODE_NOT_BACKGROUND + ERROR_THREAD_MODE_NOT_BACKGROUND + + + + No documentation. + + + ERROR_PROCESS_MODE_ALREADY_BACKGROUND + ERROR_PROCESS_MODE_ALREADY_BACKGROUND + + + + No documentation. + + + ERROR_PROCESS_MODE_NOT_BACKGROUND + ERROR_PROCESS_MODE_NOT_BACKGROUND + + + + No documentation. + + + ERROR_CAPAUTHZ_NOT_DEVUNLOCKED + ERROR_CAPAUTHZ_NOT_DEVUNLOCKED + + + + No documentation. + + + ERROR_CAPAUTHZ_CHANGE_TYPE + ERROR_CAPAUTHZ_CHANGE_TYPE + + + + No documentation. + + + ERROR_CAPAUTHZ_NOT_PROVISIONED + ERROR_CAPAUTHZ_NOT_PROVISIONED + + + + No documentation. + + + ERROR_CAPAUTHZ_NOT_AUTHORIZED + ERROR_CAPAUTHZ_NOT_AUTHORIZED + + + + No documentation. + + + ERROR_CAPAUTHZ_NO_POLICY + ERROR_CAPAUTHZ_NO_POLICY + + + + No documentation. + + + ERROR_CAPAUTHZ_DB_CORRUPTED + ERROR_CAPAUTHZ_DB_CORRUPTED + + + + No documentation. + + + ERROR_PNP_QUERY_REMOVE_DEVICE_TIMEOUT + ERROR_PNP_QUERY_REMOVE_DEVICE_TIMEOUT + + + + No documentation. + + + ERROR_PNP_QUERY_REMOVE_RELATED_DEVICE_TIMEOUT + ERROR_PNP_QUERY_REMOVE_RELATED_DEVICE_TIMEOUT + + + + No documentation. + + + ERROR_PNP_QUERY_REMOVE_UNRELATED_DEVICE_TIMEOUT + ERROR_PNP_QUERY_REMOVE_UNRELATED_DEVICE_TIMEOUT + + + + No documentation. + + + ERROR_DEVICE_HARDWARE_ERROR + ERROR_DEVICE_HARDWARE_ERROR + + + + No documentation. + + + ERROR_INVALID_ADDRESS + ERROR_INVALID_ADDRESS + + + + No documentation. + + + ERROR_VRF_CFG_ENABLED + ERROR_VRF_CFG_ENABLED + + + + No documentation. + + + ERROR_USER_PROFILE_LOAD + ERROR_USER_PROFILE_LOAD + + + + No documentation. + + + ERROR_ARITHMETIC_OVERFLOW + ERROR_ARITHMETIC_OVERFLOW + + + + No documentation. + + + ERROR_PIPE_CONNECTED + ERROR_PIPE_CONNECTED + + + + No documentation. + + + ERROR_PIPE_LISTENING + ERROR_PIPE_LISTENING + + + + No documentation. + + + ERROR_VERIFIER_STOP + ERROR_VERIFIER_STOP + + + + No documentation. + + + ERROR_ABIOS_ERROR + ERROR_ABIOS_ERROR + + + + No documentation. + + + ERROR_WX86_WARNING + ERROR_WX86_WARNING + + + + No documentation. + + + ERROR_WX86_ERROR + ERROR_WX86_ERROR + + + + No documentation. + + + ERROR_TIMER_NOT_CANCELED + ERROR_TIMER_NOT_CANCELED + + + + No documentation. + + + ERROR_UNWIND + ERROR_UNWIND + + + + No documentation. + + + ERROR_BAD_STACK + ERROR_BAD_STACK + + + + No documentation. + + + ERROR_INVALID_UNWIND_TARGET + ERROR_INVALID_UNWIND_TARGET + + + + No documentation. + + + ERROR_INVALID_PORT_ATTRIBUTES + ERROR_INVALID_PORT_ATTRIBUTES + + + + No documentation. + + + ERROR_PORT_MESSAGE_TOO_LONG + ERROR_PORT_MESSAGE_TOO_LONG + + + + No documentation. + + + ERROR_INVALID_QUOTA_LOWER + ERROR_INVALID_QUOTA_LOWER + + + + No documentation. + + + ERROR_DEVICE_ALREADY_ATTACHED + ERROR_DEVICE_ALREADY_ATTACHED + + + + No documentation. + + + ERROR_INSTRUCTION_MISALIGNMENT + ERROR_INSTRUCTION_MISALIGNMENT + + + + No documentation. + + + ERROR_PROFILING_NOT_STARTED + ERROR_PROFILING_NOT_STARTED + + + + No documentation. + + + ERROR_PROFILING_NOT_STOPPED + ERROR_PROFILING_NOT_STOPPED + + + + No documentation. + + + ERROR_COULD_NOT_INTERPRET + ERROR_COULD_NOT_INTERPRET + + + + No documentation. + + + ERROR_PROFILING_AT_LIMIT + ERROR_PROFILING_AT_LIMIT + + + + No documentation. + + + ERROR_CANT_WAIT + ERROR_CANT_WAIT + + + + No documentation. + + + ERROR_CANT_TERMINATE_SELF + ERROR_CANT_TERMINATE_SELF + + + + No documentation. + + + ERROR_UNEXPECTED_MM_CREATE_ERR + ERROR_UNEXPECTED_MM_CREATE_ERR + + + + No documentation. + + + ERROR_UNEXPECTED_MM_MAP_ERROR + ERROR_UNEXPECTED_MM_MAP_ERROR + + + + No documentation. + + + ERROR_UNEXPECTED_MM_EXTEND_ERR + ERROR_UNEXPECTED_MM_EXTEND_ERR + + + + No documentation. + + + ERROR_BAD_FUNCTION_TABLE + ERROR_BAD_FUNCTION_TABLE + + + + No documentation. + + + ERROR_NO_GUID_TRANSLATION + ERROR_NO_GUID_TRANSLATION + + + + No documentation. + + + ERROR_INVALID_LDT_SIZE + ERROR_INVALID_LDT_SIZE + + + + No documentation. + + + ERROR_INVALID_LDT_OFFSET + ERROR_INVALID_LDT_OFFSET + + + + No documentation. + + + ERROR_INVALID_LDT_DESCRIPTOR + ERROR_INVALID_LDT_DESCRIPTOR + + + + No documentation. + + + ERROR_TOO_MANY_THREADS + ERROR_TOO_MANY_THREADS + + + + No documentation. + + + ERROR_THREAD_NOT_IN_PROCESS + ERROR_THREAD_NOT_IN_PROCESS + + + + No documentation. + + + ERROR_PAGEFILE_QUOTA_EXCEEDED + ERROR_PAGEFILE_QUOTA_EXCEEDED + + + + No documentation. + + + ERROR_LOGON_SERVER_CONFLICT + ERROR_LOGON_SERVER_CONFLICT + + + + No documentation. + + + ERROR_SYNCHRONIZATION_REQUIRED + ERROR_SYNCHRONIZATION_REQUIRED + + + + No documentation. + + + ERROR_NET_OPEN_FAILED + ERROR_NET_OPEN_FAILED + + + + No documentation. + + + ERROR_IO_PRIVILEGE_FAILED + ERROR_IO_PRIVILEGE_FAILED + + + + No documentation. + + + ERROR_CONTROL_C_EXIT + ERROR_CONTROL_C_EXIT + + + + No documentation. + + + ERROR_MISSING_SYSTEMFILE + ERROR_MISSING_SYSTEMFILE + + + + No documentation. + + + ERROR_UNHANDLED_EXCEPTION + ERROR_UNHANDLED_EXCEPTION + + + + No documentation. + + + ERROR_APP_INIT_FAILURE + ERROR_APP_INIT_FAILURE + + + + No documentation. + + + ERROR_PAGEFILE_CREATE_FAILED + ERROR_PAGEFILE_CREATE_FAILED + + + + No documentation. + + + ERROR_INVALID_IMAGE_HASH + ERROR_INVALID_IMAGE_HASH + + + + No documentation. + + + ERROR_NO_PAGEFILE + ERROR_NO_PAGEFILE + + + + No documentation. + + + ERROR_ILLEGAL_FLOAT_CONTEXT + ERROR_ILLEGAL_FLOAT_CONTEXT + + + + No documentation. + + + ERROR_NO_EVENT_PAIR + ERROR_NO_EVENT_PAIR + + + + No documentation. + + + ERROR_DOMAIN_CTRLR_CONFIG_ERROR + ERROR_DOMAIN_CTRLR_CONFIG_ERROR + + + + No documentation. + + + ERROR_ILLEGAL_CHARACTER + ERROR_ILLEGAL_CHARACTER + + + + No documentation. + + + ERROR_UNDEFINED_CHARACTER + ERROR_UNDEFINED_CHARACTER + + + + No documentation. + + + ERROR_FLOPPY_VOLUME + ERROR_FLOPPY_VOLUME + + + + No documentation. + + + ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT + ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT + + + + No documentation. + + + ERROR_BACKUP_CONTROLLER + ERROR_BACKUP_CONTROLLER + + + + No documentation. + + + ERROR_MUTANT_LIMIT_EXCEEDED + ERROR_MUTANT_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_FS_DRIVER_REQUIRED + ERROR_FS_DRIVER_REQUIRED + + + + No documentation. + + + ERROR_CANNOT_LOAD_REGISTRY_FILE + ERROR_CANNOT_LOAD_REGISTRY_FILE + + + + No documentation. + + + ERROR_DEBUG_ATTACH_FAILED + ERROR_DEBUG_ATTACH_FAILED + + + + No documentation. + + + ERROR_SYSTEM_PROCESS_TERMINATED + ERROR_SYSTEM_PROCESS_TERMINATED + + + + No documentation. + + + ERROR_DATA_NOT_ACCEPTED + ERROR_DATA_NOT_ACCEPTED + + + + No documentation. + + + ERROR_VDM_HARD_ERROR + ERROR_VDM_HARD_ERROR + + + + No documentation. + + + ERROR_DRIVER_CANCEL_TIMEOUT + ERROR_DRIVER_CANCEL_TIMEOUT + + + + No documentation. + + + ERROR_REPLY_MESSAGE_MISMATCH + ERROR_REPLY_MESSAGE_MISMATCH + + + + No documentation. + + + ERROR_LOST_WRITEBEHIND_DATA + ERROR_LOST_WRITEBEHIND_DATA + + + + No documentation. + + + ERROR_CLIENT_SERVER_PARAMETERS_INVALID + ERROR_CLIENT_SERVER_PARAMETERS_INVALID + + + + No documentation. + + + ERROR_NOT_TINY_STREAM + ERROR_NOT_TINY_STREAM + + + + No documentation. + + + ERROR_STACK_OVERFLOW_READ + ERROR_STACK_OVERFLOW_READ + + + + No documentation. + + + ERROR_CONVERT_TO_LARGE + ERROR_CONVERT_TO_LARGE + + + + No documentation. + + + ERROR_FOUND_OUT_OF_SCOPE + ERROR_FOUND_OUT_OF_SCOPE + + + + No documentation. + + + ERROR_ALLOCATE_BUCKET + ERROR_ALLOCATE_BUCKET + + + + No documentation. + + + ERROR_MARSHALL_OVERFLOW + ERROR_MARSHALL_OVERFLOW + + + + No documentation. + + + ERROR_INVALID_VARIANT + ERROR_INVALID_VARIANT + + + + No documentation. + + + ERROR_BAD_COMPRESSION_BUFFER + ERROR_BAD_COMPRESSION_BUFFER + + + + No documentation. + + + ERROR_AUDIT_FAILED + ERROR_AUDIT_FAILED + + + + No documentation. + + + ERROR_TIMER_RESOLUTION_NOT_SET + ERROR_TIMER_RESOLUTION_NOT_SET + + + + No documentation. + + + ERROR_INSUFFICIENT_LOGON_INFO + ERROR_INSUFFICIENT_LOGON_INFO + + + + No documentation. + + + ERROR_BAD_DLL_ENTRYPOINT + ERROR_BAD_DLL_ENTRYPOINT + + + + No documentation. + + + ERROR_BAD_SERVICE_ENTRYPOINT + ERROR_BAD_SERVICE_ENTRYPOINT + + + + No documentation. + + + ERROR_IP_ADDRESS_CONFLICT1 + ERROR_IP_ADDRESS_CONFLICT1 + + + + No documentation. + + + ERROR_IP_ADDRESS_CONFLICT2 + ERROR_IP_ADDRESS_CONFLICT2 + + + + No documentation. + + + ERROR_REGISTRY_QUOTA_LIMIT + ERROR_REGISTRY_QUOTA_LIMIT + + + + No documentation. + + + ERROR_NO_CALLBACK_ACTIVE + ERROR_NO_CALLBACK_ACTIVE + + + + No documentation. + + + ERROR_PWD_TOO_SHORT + ERROR_PWD_TOO_SHORT + + + + No documentation. + + + ERROR_PWD_TOO_RECENT + ERROR_PWD_TOO_RECENT + + + + No documentation. + + + ERROR_PWD_HISTORY_CONFLICT + ERROR_PWD_HISTORY_CONFLICT + + + + No documentation. + + + ERROR_UNSUPPORTED_COMPRESSION + ERROR_UNSUPPORTED_COMPRESSION + + + + No documentation. + + + ERROR_INVALID_HW_PROFILE + ERROR_INVALID_HW_PROFILE + + + + No documentation. + + + ERROR_INVALID_PLUGPLAY_DEVICE_PATH + ERROR_INVALID_PLUGPLAY_DEVICE_PATH + + + + No documentation. + + + ERROR_QUOTA_LIST_INCONSISTENT + ERROR_QUOTA_LIST_INCONSISTENT + + + + No documentation. + + + ERROR_EVALUATION_EXPIRATION + ERROR_EVALUATION_EXPIRATION + + + + No documentation. + + + ERROR_ILLEGAL_DLL_RELOCATION + ERROR_ILLEGAL_DLL_RELOCATION + + + + No documentation. + + + ERROR_DLL_INIT_FAILED_LOGOFF + ERROR_DLL_INIT_FAILED_LOGOFF + + + + No documentation. + + + ERROR_VALIDATE_CONTINUE + ERROR_VALIDATE_CONTINUE + + + + No documentation. + + + ERROR_NO_MORE_MATCHES + ERROR_NO_MORE_MATCHES + + + + No documentation. + + + ERROR_RANGE_LIST_CONFLICT + ERROR_RANGE_LIST_CONFLICT + + + + No documentation. + + + ERROR_SERVER_SID_MISMATCH + ERROR_SERVER_SID_MISMATCH + + + + No documentation. + + + ERROR_CANT_ENABLE_DENY_ONLY + ERROR_CANT_ENABLE_DENY_ONLY + + + + No documentation. + + + ERROR_FLOAT_MULTIPLE_FAULTS + ERROR_FLOAT_MULTIPLE_FAULTS + + + + No documentation. + + + ERROR_FLOAT_MULTIPLE_TRAPS + ERROR_FLOAT_MULTIPLE_TRAPS + + + + No documentation. + + + ERROR_NOINTERFACE + ERROR_NOINTERFACE + + + + No documentation. + + + ERROR_DRIVER_FAILED_SLEEP + ERROR_DRIVER_FAILED_SLEEP + + + + No documentation. + + + ERROR_CORRUPT_SYSTEM_FILE + ERROR_CORRUPT_SYSTEM_FILE + + + + No documentation. + + + ERROR_COMMITMENT_MINIMUM + ERROR_COMMITMENT_MINIMUM + + + + No documentation. + + + ERROR_PNP_RESTART_ENUMERATION + ERROR_PNP_RESTART_ENUMERATION + + + + No documentation. + + + ERROR_SYSTEM_IMAGE_BAD_SIGNATURE + ERROR_SYSTEM_IMAGE_BAD_SIGNATURE + + + + No documentation. + + + ERROR_PNP_REBOOT_REQUIRED + ERROR_PNP_REBOOT_REQUIRED + + + + No documentation. + + + ERROR_INSUFFICIENT_POWER + ERROR_INSUFFICIENT_POWER + + + + No documentation. + + + ERROR_MULTIPLE_FAULT_VIOLATION + ERROR_MULTIPLE_FAULT_VIOLATION + + + + No documentation. + + + ERROR_SYSTEM_SHUTDOWN + ERROR_SYSTEM_SHUTDOWN + + + + No documentation. + + + ERROR_PORT_NOT_SET + ERROR_PORT_NOT_SET + + + + No documentation. + + + ERROR_DS_VERSION_CHECK_FAILURE + ERROR_DS_VERSION_CHECK_FAILURE + + + + No documentation. + + + ERROR_RANGE_NOT_FOUND + ERROR_RANGE_NOT_FOUND + + + + No documentation. + + + ERROR_NOT_SAFE_MODE_DRIVER + ERROR_NOT_SAFE_MODE_DRIVER + + + + No documentation. + + + ERROR_FAILED_DRIVER_ENTRY + ERROR_FAILED_DRIVER_ENTRY + + + + No documentation. + + + ERROR_DEVICE_ENUMERATION_ERROR + ERROR_DEVICE_ENUMERATION_ERROR + + + + No documentation. + + + ERROR_MOUNT_POINT_NOT_RESOLVED + ERROR_MOUNT_POINT_NOT_RESOLVED + + + + No documentation. + + + ERROR_INVALID_DEVICE_OBJECT_PARAMETER + ERROR_INVALID_DEVICE_OBJECT_PARAMETER + + + + No documentation. + + + ERROR_MCA_OCCURED + ERROR_MCA_OCCURED + + + + No documentation. + + + ERROR_DRIVER_DATABASE_ERROR + ERROR_DRIVER_DATABASE_ERROR + + + + No documentation. + + + ERROR_SYSTEM_HIVE_TOO_LARGE + ERROR_SYSTEM_HIVE_TOO_LARGE + + + + No documentation. + + + ERROR_DRIVER_FAILED_PRIOR_UNLOAD + ERROR_DRIVER_FAILED_PRIOR_UNLOAD + + + + No documentation. + + + ERROR_VOLSNAP_PREPARE_HIBERNATE + ERROR_VOLSNAP_PREPARE_HIBERNATE + + + + No documentation. + + + ERROR_HIBERNATION_FAILURE + ERROR_HIBERNATION_FAILURE + + + + No documentation. + + + ERROR_PWD_TOO_LONG + ERROR_PWD_TOO_LONG + + + + No documentation. + + + ERROR_FILE_SYSTEM_LIMITATION + ERROR_FILE_SYSTEM_LIMITATION + + + + No documentation. + + + ERROR_ASSERTION_FAILURE + ERROR_ASSERTION_FAILURE + + + + No documentation. + + + ERROR_ACPI_ERROR + ERROR_ACPI_ERROR + + + + No documentation. + + + ERROR_WOW_ASSERTION + ERROR_WOW_ASSERTION + + + + No documentation. + + + ERROR_PNP_BAD_MPS_TABLE + ERROR_PNP_BAD_MPS_TABLE + + + + No documentation. + + + ERROR_PNP_TRANSLATION_FAILED + ERROR_PNP_TRANSLATION_FAILED + + + + No documentation. + + + ERROR_PNP_IRQ_TRANSLATION_FAILED + ERROR_PNP_IRQ_TRANSLATION_FAILED + + + + No documentation. + + + ERROR_PNP_INVALID_ID + ERROR_PNP_INVALID_ID + + + + No documentation. + + + ERROR_WAKE_SYSTEM_DEBUGGER + ERROR_WAKE_SYSTEM_DEBUGGER + + + + No documentation. + + + ERROR_HANDLES_CLOSED + ERROR_HANDLES_CLOSED + + + + No documentation. + + + ERROR_EXTRANEOUS_INFORMATION + ERROR_EXTRANEOUS_INFORMATION + + + + No documentation. + + + ERROR_RXACT_COMMIT_NECESSARY + ERROR_RXACT_COMMIT_NECESSARY + + + + No documentation. + + + ERROR_MEDIA_CHECK + ERROR_MEDIA_CHECK + + + + No documentation. + + + ERROR_GUID_SUBSTITUTION_MADE + ERROR_GUID_SUBSTITUTION_MADE + + + + No documentation. + + + ERROR_STOPPED_ON_SYMLINK + ERROR_STOPPED_ON_SYMLINK + + + + No documentation. + + + ERROR_LONGJUMP + ERROR_LONGJUMP + + + + No documentation. + + + ERROR_PLUGPLAY_QUERY_VETOED + ERROR_PLUGPLAY_QUERY_VETOED + + + + No documentation. + + + ERROR_UNWIND_CONSOLIDATE + ERROR_UNWIND_CONSOLIDATE + + + + No documentation. + + + ERROR_REGISTRY_HIVE_RECOVERED + ERROR_REGISTRY_HIVE_RECOVERED + + + + No documentation. + + + ERROR_DLL_MIGHT_BE_INSECURE + ERROR_DLL_MIGHT_BE_INSECURE + + + + No documentation. + + + ERROR_DLL_MIGHT_BE_INCOMPATIBLE + ERROR_DLL_MIGHT_BE_INCOMPATIBLE + + + + No documentation. + + + ERROR_DBG_EXCEPTION_NOT_HANDLED + ERROR_DBG_EXCEPTION_NOT_HANDLED + + + + No documentation. + + + ERROR_DBG_REPLY_LATER + ERROR_DBG_REPLY_LATER + + + + No documentation. + + + ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE + ERROR_DBG_UNABLE_TO_PROVIDE_HANDLE + + + + No documentation. + + + ERROR_DBG_TERMINATE_THREAD + ERROR_DBG_TERMINATE_THREAD + + + + No documentation. + + + ERROR_DBG_TERMINATE_PROCESS + ERROR_DBG_TERMINATE_PROCESS + + + + No documentation. + + + ERROR_DBG_CONTROL_C + ERROR_DBG_CONTROL_C + + + + No documentation. + + + ERROR_DBG_PRINTEXCEPTION_C + ERROR_DBG_PRINTEXCEPTION_C + + + + No documentation. + + + ERROR_DBG_RIPEXCEPTION + ERROR_DBG_RIPEXCEPTION + + + + No documentation. + + + ERROR_DBG_CONTROL_BREAK + ERROR_DBG_CONTROL_BREAK + + + + No documentation. + + + ERROR_DBG_COMMAND_EXCEPTION + ERROR_DBG_COMMAND_EXCEPTION + + + + No documentation. + + + ERROR_OBJECT_NAME_EXISTS + ERROR_OBJECT_NAME_EXISTS + + + + No documentation. + + + ERROR_THREAD_WAS_SUSPENDED + ERROR_THREAD_WAS_SUSPENDED + + + + No documentation. + + + ERROR_IMAGE_NOT_AT_BASE + ERROR_IMAGE_NOT_AT_BASE + + + + No documentation. + + + ERROR_RXACT_STATE_CREATED + ERROR_RXACT_STATE_CREATED + + + + No documentation. + + + ERROR_SEGMENT_NOTIFICATION + ERROR_SEGMENT_NOTIFICATION + + + + No documentation. + + + ERROR_BAD_CURRENT_DIRECTORY + ERROR_BAD_CURRENT_DIRECTORY + + + + No documentation. + + + ERROR_FT_READ_RECOVERY_FROM_BACKUP + ERROR_FT_READ_RECOVERY_FROM_BACKUP + + + + No documentation. + + + ERROR_FT_WRITE_RECOVERY + ERROR_FT_WRITE_RECOVERY + + + + No documentation. + + + ERROR_IMAGE_MACHINE_TYPE_MISMATCH + ERROR_IMAGE_MACHINE_TYPE_MISMATCH + + + + No documentation. + + + ERROR_RECEIVE_PARTIAL + ERROR_RECEIVE_PARTIAL + + + + No documentation. + + + ERROR_RECEIVE_EXPEDITED + ERROR_RECEIVE_EXPEDITED + + + + No documentation. + + + ERROR_RECEIVE_PARTIAL_EXPEDITED + ERROR_RECEIVE_PARTIAL_EXPEDITED + + + + No documentation. + + + ERROR_EVENT_DONE + ERROR_EVENT_DONE + + + + No documentation. + + + ERROR_EVENT_PENDING + ERROR_EVENT_PENDING + + + + No documentation. + + + ERROR_CHECKING_FILE_SYSTEM + ERROR_CHECKING_FILE_SYSTEM + + + + No documentation. + + + ERROR_FATAL_APP_EXIT + ERROR_FATAL_APP_EXIT + + + + No documentation. + + + ERROR_PREDEFINED_HANDLE + ERROR_PREDEFINED_HANDLE + + + + No documentation. + + + ERROR_WAS_UNLOCKED + ERROR_WAS_UNLOCKED + + + + No documentation. + + + ERROR_SERVICE_NOTIFICATION + ERROR_SERVICE_NOTIFICATION + + + + No documentation. + + + ERROR_WAS_LOCKED + ERROR_WAS_LOCKED + + + + No documentation. + + + ERROR_LOG_HARD_ERROR + ERROR_LOG_HARD_ERROR + + + + No documentation. + + + ERROR_ALREADY_WIN32 + ERROR_ALREADY_WIN32 + + + + No documentation. + + + ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE + ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE + + + + No documentation. + + + ERROR_NO_YIELD_PERFORMED + ERROR_NO_YIELD_PERFORMED + + + + No documentation. + + + ERROR_TIMER_RESUME_IGNORED + ERROR_TIMER_RESUME_IGNORED + + + + No documentation. + + + ERROR_ARBITRATION_UNHANDLED + ERROR_ARBITRATION_UNHANDLED + + + + No documentation. + + + ERROR_CARDBUS_NOT_SUPPORTED + ERROR_CARDBUS_NOT_SUPPORTED + + + + No documentation. + + + ERROR_MP_PROCESSOR_MISMATCH + ERROR_MP_PROCESSOR_MISMATCH + + + + No documentation. + + + ERROR_HIBERNATED + ERROR_HIBERNATED + + + + No documentation. + + + ERROR_RESUME_HIBERNATION + ERROR_RESUME_HIBERNATION + + + + No documentation. + + + ERROR_FIRMWARE_UPDATED + ERROR_FIRMWARE_UPDATED + + + + No documentation. + + + ERROR_DRIVERS_LEAKING_LOCKED_PAGES + ERROR_DRIVERS_LEAKING_LOCKED_PAGES + + + + No documentation. + + + ERROR_WAKE_SYSTEM + ERROR_WAKE_SYSTEM + + + + No documentation. + + + ERROR_WAIT_1 + ERROR_WAIT_1 + + + + No documentation. + + + ERROR_WAIT_2 + ERROR_WAIT_2 + + + + No documentation. + + + ERROR_WAIT_3 + ERROR_WAIT_3 + + + + No documentation. + + + ERROR_WAIT_63 + ERROR_WAIT_63 + + + + No documentation. + + + ERROR_ABANDONED_WAIT_0 + ERROR_ABANDONED_WAIT_0 + + + + No documentation. + + + ERROR_ABANDONED_WAIT_63 + ERROR_ABANDONED_WAIT_63 + + + + No documentation. + + + ERROR_USER_APC + ERROR_USER_APC + + + + No documentation. + + + ERROR_KERNEL_APC + ERROR_KERNEL_APC + + + + No documentation. + + + ERROR_ALERTED + ERROR_ALERTED + + + + No documentation. + + + ERROR_ELEVATION_REQUIRED + ERROR_ELEVATION_REQUIRED + + + + No documentation. + + + ERROR_REPARSE + ERROR_REPARSE + + + + No documentation. + + + ERROR_OPLOCK_BREAK_IN_PROGRESS + ERROR_OPLOCK_BREAK_IN_PROGRESS + + + + No documentation. + + + ERROR_VOLUME_MOUNTED + ERROR_VOLUME_MOUNTED + + + + No documentation. + + + ERROR_RXACT_COMMITTED + ERROR_RXACT_COMMITTED + + + + No documentation. + + + ERROR_NOTIFY_CLEANUP + ERROR_NOTIFY_CLEANUP + + + + No documentation. + + + ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED + ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED + + + + No documentation. + + + ERROR_PAGE_FAULT_TRANSITION + ERROR_PAGE_FAULT_TRANSITION + + + + No documentation. + + + ERROR_PAGE_FAULT_DEMAND_ZERO + ERROR_PAGE_FAULT_DEMAND_ZERO + + + + No documentation. + + + ERROR_PAGE_FAULT_COPY_ON_WRITE + ERROR_PAGE_FAULT_COPY_ON_WRITE + + + + No documentation. + + + ERROR_PAGE_FAULT_GUARD_PAGE + ERROR_PAGE_FAULT_GUARD_PAGE + + + + No documentation. + + + ERROR_PAGE_FAULT_PAGING_FILE + ERROR_PAGE_FAULT_PAGING_FILE + + + + No documentation. + + + ERROR_CACHE_PAGE_LOCKED + ERROR_CACHE_PAGE_LOCKED + + + + No documentation. + + + ERROR_CRASH_DUMP + ERROR_CRASH_DUMP + + + + No documentation. + + + ERROR_BUFFER_ALL_ZEROS + ERROR_BUFFER_ALL_ZEROS + + + + No documentation. + + + ERROR_REPARSE_OBJECT + ERROR_REPARSE_OBJECT + + + + No documentation. + + + ERROR_RESOURCE_REQUIREMENTS_CHANGED + ERROR_RESOURCE_REQUIREMENTS_CHANGED + + + + No documentation. + + + ERROR_TRANSLATION_COMPLETE + ERROR_TRANSLATION_COMPLETE + + + + No documentation. + + + ERROR_NOTHING_TO_TERMINATE + ERROR_NOTHING_TO_TERMINATE + + + + No documentation. + + + ERROR_PROCESS_NOT_IN_JOB + ERROR_PROCESS_NOT_IN_JOB + + + + No documentation. + + + ERROR_PROCESS_IN_JOB + ERROR_PROCESS_IN_JOB + + + + No documentation. + + + ERROR_VOLSNAP_HIBERNATE_READY + ERROR_VOLSNAP_HIBERNATE_READY + + + + No documentation. + + + ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY + ERROR_FSFILTER_OP_COMPLETED_SUCCESSFULLY + + + + No documentation. + + + ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED + ERROR_INTERRUPT_VECTOR_ALREADY_CONNECTED + + + + No documentation. + + + ERROR_INTERRUPT_STILL_CONNECTED + ERROR_INTERRUPT_STILL_CONNECTED + + + + No documentation. + + + ERROR_WAIT_FOR_OPLOCK + ERROR_WAIT_FOR_OPLOCK + + + + No documentation. + + + ERROR_DBG_EXCEPTION_HANDLED + ERROR_DBG_EXCEPTION_HANDLED + + + + No documentation. + + + ERROR_DBG_CONTINUE + ERROR_DBG_CONTINUE + + + + No documentation. + + + ERROR_CALLBACK_POP_STACK + ERROR_CALLBACK_POP_STACK + + + + No documentation. + + + ERROR_COMPRESSION_DISABLED + ERROR_COMPRESSION_DISABLED + + + + No documentation. + + + ERROR_CANTFETCHBACKWARDS + ERROR_CANTFETCHBACKWARDS + + + + No documentation. + + + ERROR_CANTSCROLLBACKWARDS + ERROR_CANTSCROLLBACKWARDS + + + + No documentation. + + + ERROR_ROWSNOTRELEASED + ERROR_ROWSNOTRELEASED + + + + No documentation. + + + ERROR_BAD_ACCESSOR_FLAGS + ERROR_BAD_ACCESSOR_FLAGS + + + + No documentation. + + + ERROR_ERRORS_ENCOUNTERED + ERROR_ERRORS_ENCOUNTERED + + + + No documentation. + + + ERROR_NOT_CAPABLE + ERROR_NOT_CAPABLE + + + + No documentation. + + + ERROR_REQUEST_OUT_OF_SEQUENCE + ERROR_REQUEST_OUT_OF_SEQUENCE + + + + No documentation. + + + ERROR_VERSION_PARSE_ERROR + ERROR_VERSION_PARSE_ERROR + + + + No documentation. + + + ERROR_BADSTARTPOSITION + ERROR_BADSTARTPOSITION + + + + No documentation. + + + ERROR_MEMORY_HARDWARE + ERROR_MEMORY_HARDWARE + + + + No documentation. + + + ERROR_DISK_REPAIR_DISABLED + ERROR_DISK_REPAIR_DISABLED + + + + No documentation. + + + ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE + ERROR_INSUFFICIENT_RESOURCE_FOR_SPECIFIED_SHARED_SECTION_SIZE + + + + No documentation. + + + ERROR_SYSTEM_POWERSTATE_TRANSITION + ERROR_SYSTEM_POWERSTATE_TRANSITION + + + + No documentation. + + + ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION + ERROR_SYSTEM_POWERSTATE_COMPLEX_TRANSITION + + + + No documentation. + + + ERROR_MCA_EXCEPTION + ERROR_MCA_EXCEPTION + + + + No documentation. + + + ERROR_ACCESS_AUDIT_BY_POLICY + ERROR_ACCESS_AUDIT_BY_POLICY + + + + No documentation. + + + ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY + ERROR_ACCESS_DISABLED_NO_SAFER_UI_BY_POLICY + + + + No documentation. + + + ERROR_ABANDON_HIBERFILE + ERROR_ABANDON_HIBERFILE + + + + No documentation. + + + ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED + ERROR_LOST_WRITEBEHIND_DATA_NETWORK_DISCONNECTED + + + + No documentation. + + + ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR + ERROR_LOST_WRITEBEHIND_DATA_NETWORK_SERVER_ERROR + + + + No documentation. + + + ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR + ERROR_LOST_WRITEBEHIND_DATA_LOCAL_DISK_ERROR + + + + No documentation. + + + ERROR_BAD_MCFG_TABLE + ERROR_BAD_MCFG_TABLE + + + + No documentation. + + + ERROR_DISK_REPAIR_REDIRECTED + ERROR_DISK_REPAIR_REDIRECTED + + + + No documentation. + + + ERROR_DISK_REPAIR_UNSUCCESSFUL + ERROR_DISK_REPAIR_UNSUCCESSFUL + + + + No documentation. + + + ERROR_CORRUPT_LOG_OVERFULL + ERROR_CORRUPT_LOG_OVERFULL + + + + No documentation. + + + ERROR_CORRUPT_LOG_CORRUPTED + ERROR_CORRUPT_LOG_CORRUPTED + + + + No documentation. + + + ERROR_CORRUPT_LOG_UNAVAILABLE + ERROR_CORRUPT_LOG_UNAVAILABLE + + + + No documentation. + + + ERROR_CORRUPT_LOG_DELETED_FULL + ERROR_CORRUPT_LOG_DELETED_FULL + + + + No documentation. + + + ERROR_CORRUPT_LOG_CLEARED + ERROR_CORRUPT_LOG_CLEARED + + + + No documentation. + + + ERROR_ORPHAN_NAME_EXHAUSTED + ERROR_ORPHAN_NAME_EXHAUSTED + + + + No documentation. + + + ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE + ERROR_OPLOCK_SWITCHED_TO_NEW_HANDLE + + + + No documentation. + + + ERROR_CANNOT_GRANT_REQUESTED_OPLOCK + ERROR_CANNOT_GRANT_REQUESTED_OPLOCK + + + + No documentation. + + + ERROR_CANNOT_BREAK_OPLOCK + ERROR_CANNOT_BREAK_OPLOCK + + + + No documentation. + + + ERROR_OPLOCK_HANDLE_CLOSED + ERROR_OPLOCK_HANDLE_CLOSED + + + + No documentation. + + + ERROR_NO_ACE_CONDITION + ERROR_NO_ACE_CONDITION + + + + No documentation. + + + ERROR_INVALID_ACE_CONDITION + ERROR_INVALID_ACE_CONDITION + + + + No documentation. + + + ERROR_FILE_HANDLE_REVOKED + ERROR_FILE_HANDLE_REVOKED + + + + No documentation. + + + ERROR_IMAGE_AT_DIFFERENT_BASE + ERROR_IMAGE_AT_DIFFERENT_BASE + + + + No documentation. + + + ERROR_ENCRYPTED_IO_NOT_POSSIBLE + ERROR_ENCRYPTED_IO_NOT_POSSIBLE + + + + No documentation. + + + ERROR_FILE_METADATA_OPTIMIZATION_IN_PROGRESS + ERROR_FILE_METADATA_OPTIMIZATION_IN_PROGRESS + + + + No documentation. + + + ERROR_QUOTA_ACTIVITY + ERROR_QUOTA_ACTIVITY + + + + No documentation. + + + ERROR_HANDLE_REVOKED + ERROR_HANDLE_REVOKED + + + + No documentation. + + + ERROR_CALLBACK_INVOKE_INLINE + ERROR_CALLBACK_INVOKE_INLINE + + + + No documentation. + + + ERROR_CPU_SET_INVALID + ERROR_CPU_SET_INVALID + + + + No documentation. + + + ERROR_EA_ACCESS_DENIED + ERROR_EA_ACCESS_DENIED + + + + No documentation. + + + ERROR_OPERATION_ABORTED + ERROR_OPERATION_ABORTED + + + + No documentation. + + + ERROR_IO_INCOMPLETE + ERROR_IO_INCOMPLETE + + + + No documentation. + + + ERROR_IO_PENDING + ERROR_IO_PENDING + + + + No documentation. + + + ERROR_NOACCESS + ERROR_NOACCESS + + + + No documentation. + + + ERROR_SWAPERROR + ERROR_SWAPERROR + + + + No documentation. + + + ERROR_STACK_OVERFLOW + ERROR_STACK_OVERFLOW + + + + No documentation. + + + ERROR_INVALID_MESSAGE + ERROR_INVALID_MESSAGE + + + + No documentation. + + + ERROR_CAN_NOT_COMPLETE + ERROR_CAN_NOT_COMPLETE + + + + No documentation. + + + ERROR_INVALID_FLAGS + ERROR_INVALID_FLAGS + + + + No documentation. + + + ERROR_UNRECOGNIZED_VOLUME + ERROR_UNRECOGNIZED_VOLUME + + + + No documentation. + + + ERROR_FILE_INVALID + ERROR_FILE_INVALID + + + + No documentation. + + + ERROR_FULLSCREEN_MODE + ERROR_FULLSCREEN_MODE + + + + No documentation. + + + ERROR_NO_TOKEN + ERROR_NO_TOKEN + + + + No documentation. + + + ERROR_BADDB + ERROR_BADDB + + + + No documentation. + + + ERROR_BADKEY + ERROR_BADKEY + + + + No documentation. + + + ERROR_CANTOPEN + ERROR_CANTOPEN + + + + No documentation. + + + ERROR_CANTREAD + ERROR_CANTREAD + + + + No documentation. + + + ERROR_CANTWRITE + ERROR_CANTWRITE + + + + No documentation. + + + ERROR_REGISTRY_RECOVERED + ERROR_REGISTRY_RECOVERED + + + + No documentation. + + + ERROR_REGISTRY_CORRUPT + ERROR_REGISTRY_CORRUPT + + + + No documentation. + + + ERROR_REGISTRY_IO_FAILED + ERROR_REGISTRY_IO_FAILED + + + + No documentation. + + + ERROR_NOT_REGISTRY_FILE + ERROR_NOT_REGISTRY_FILE + + + + No documentation. + + + ERROR_KEY_DELETED + ERROR_KEY_DELETED + + + + No documentation. + + + ERROR_NO_LOG_SPACE + ERROR_NO_LOG_SPACE + + + + No documentation. + + + ERROR_KEY_HAS_CHILDREN + ERROR_KEY_HAS_CHILDREN + + + + No documentation. + + + ERROR_CHILD_MUST_BE_VOLATILE + ERROR_CHILD_MUST_BE_VOLATILE + + + + No documentation. + + + ERROR_NOTIFY_ENUM_DIR + ERROR_NOTIFY_ENUM_DIR + + + + No documentation. + + + ERROR_DEPENDENT_SERVICES_RUNNING + ERROR_DEPENDENT_SERVICES_RUNNING + + + + No documentation. + + + ERROR_INVALID_SERVICE_CONTROL + ERROR_INVALID_SERVICE_CONTROL + + + + No documentation. + + + ERROR_SERVICE_REQUEST_TIMEOUT + ERROR_SERVICE_REQUEST_TIMEOUT + + + + No documentation. + + + ERROR_SERVICE_NO_THREAD + ERROR_SERVICE_NO_THREAD + + + + No documentation. + + + ERROR_SERVICE_DATABASE_LOCKED + ERROR_SERVICE_DATABASE_LOCKED + + + + No documentation. + + + ERROR_SERVICE_ALREADY_RUNNING + ERROR_SERVICE_ALREADY_RUNNING + + + + No documentation. + + + ERROR_INVALID_SERVICE_ACCOUNT + ERROR_INVALID_SERVICE_ACCOUNT + + + + No documentation. + + + ERROR_SERVICE_DISABLED + ERROR_SERVICE_DISABLED + + + + No documentation. + + + ERROR_CIRCULAR_DEPENDENCY + ERROR_CIRCULAR_DEPENDENCY + + + + No documentation. + + + ERROR_SERVICE_DOES_NOT_EXIST + ERROR_SERVICE_DOES_NOT_EXIST + + + + No documentation. + + + ERROR_SERVICE_CANNOT_ACCEPT_CTRL + ERROR_SERVICE_CANNOT_ACCEPT_CTRL + + + + No documentation. + + + ERROR_SERVICE_NOT_ACTIVE + ERROR_SERVICE_NOT_ACTIVE + + + + No documentation. + + + ERROR_FAILED_SERVICE_CONTROLLER_CONNECT + ERROR_FAILED_SERVICE_CONTROLLER_CONNECT + + + + No documentation. + + + ERROR_EXCEPTION_IN_SERVICE + ERROR_EXCEPTION_IN_SERVICE + + + + No documentation. + + + ERROR_DATABASE_DOES_NOT_EXIST + ERROR_DATABASE_DOES_NOT_EXIST + + + + No documentation. + + + ERROR_SERVICE_SPECIFIC_ERROR + ERROR_SERVICE_SPECIFIC_ERROR + + + + No documentation. + + + ERROR_PROCESS_ABORTED + ERROR_PROCESS_ABORTED + + + + No documentation. + + + ERROR_SERVICE_DEPENDENCY_FAIL + ERROR_SERVICE_DEPENDENCY_FAIL + + + + No documentation. + + + ERROR_SERVICE_LOGON_FAILED + ERROR_SERVICE_LOGON_FAILED + + + + No documentation. + + + ERROR_SERVICE_START_HANG + ERROR_SERVICE_START_HANG + + + + No documentation. + + + ERROR_INVALID_SERVICE_LOCK + ERROR_INVALID_SERVICE_LOCK + + + + No documentation. + + + ERROR_SERVICE_MARKED_FOR_DELETE + ERROR_SERVICE_MARKED_FOR_DELETE + + + + No documentation. + + + ERROR_SERVICE_EXISTS + ERROR_SERVICE_EXISTS + + + + No documentation. + + + ERROR_ALREADY_RUNNING_LKG + ERROR_ALREADY_RUNNING_LKG + + + + No documentation. + + + ERROR_SERVICE_DEPENDENCY_DELETED + ERROR_SERVICE_DEPENDENCY_DELETED + + + + No documentation. + + + ERROR_BOOT_ALREADY_ACCEPTED + ERROR_BOOT_ALREADY_ACCEPTED + + + + No documentation. + + + ERROR_SERVICE_NEVER_STARTED + ERROR_SERVICE_NEVER_STARTED + + + + No documentation. + + + ERROR_DUPLICATE_SERVICE_NAME + ERROR_DUPLICATE_SERVICE_NAME + + + + No documentation. + + + ERROR_DIFFERENT_SERVICE_ACCOUNT + ERROR_DIFFERENT_SERVICE_ACCOUNT + + + + No documentation. + + + ERROR_CANNOT_DETECT_DRIVER_FAILURE + ERROR_CANNOT_DETECT_DRIVER_FAILURE + + + + No documentation. + + + ERROR_CANNOT_DETECT_PROCESS_ABORT + ERROR_CANNOT_DETECT_PROCESS_ABORT + + + + No documentation. + + + ERROR_NO_RECOVERY_PROGRAM + ERROR_NO_RECOVERY_PROGRAM + + + + No documentation. + + + ERROR_SERVICE_NOT_IN_EXE + ERROR_SERVICE_NOT_IN_EXE + + + + No documentation. + + + ERROR_NOT_SAFEBOOT_SERVICE + ERROR_NOT_SAFEBOOT_SERVICE + + + + No documentation. + + + ERROR_END_OF_MEDIA + ERROR_END_OF_MEDIA + + + + No documentation. + + + ERROR_FILEMARK_DETECTED + ERROR_FILEMARK_DETECTED + + + + No documentation. + + + ERROR_BEGINNING_OF_MEDIA + ERROR_BEGINNING_OF_MEDIA + + + + No documentation. + + + ERROR_SETMARK_DETECTED + ERROR_SETMARK_DETECTED + + + + No documentation. + + + ERROR_NO_DATA_DETECTED + ERROR_NO_DATA_DETECTED + + + + No documentation. + + + ERROR_PARTITION_FAILURE + ERROR_PARTITION_FAILURE + + + + No documentation. + + + ERROR_INVALID_BLOCK_LENGTH + ERROR_INVALID_BLOCK_LENGTH + + + + No documentation. + + + ERROR_DEVICE_NOT_PARTITIONED + ERROR_DEVICE_NOT_PARTITIONED + + + + No documentation. + + + ERROR_UNABLE_TO_LOCK_MEDIA + ERROR_UNABLE_TO_LOCK_MEDIA + + + + No documentation. + + + ERROR_UNABLE_TO_UNLOAD_MEDIA + ERROR_UNABLE_TO_UNLOAD_MEDIA + + + + No documentation. + + + ERROR_MEDIA_CHANGED + ERROR_MEDIA_CHANGED + + + + No documentation. + + + ERROR_BUS_RESET + ERROR_BUS_RESET + + + + No documentation. + + + ERROR_NO_MEDIA_IN_DRIVE + ERROR_NO_MEDIA_IN_DRIVE + + + + No documentation. + + + ERROR_NO_UNICODE_TRANSLATION + ERROR_NO_UNICODE_TRANSLATION + + + + No documentation. + + + ERROR_DLL_INIT_FAILED + ERROR_DLL_INIT_FAILED + + + + No documentation. + + + ERROR_SHUTDOWN_IN_PROGRESS + ERROR_SHUTDOWN_IN_PROGRESS + + + + No documentation. + + + ERROR_NO_SHUTDOWN_IN_PROGRESS + ERROR_NO_SHUTDOWN_IN_PROGRESS + + + + No documentation. + + + ERROR_IO_DEVICE + ERROR_IO_DEVICE + + + + No documentation. + + + ERROR_SERIAL_NO_DEVICE + ERROR_SERIAL_NO_DEVICE + + + + No documentation. + + + ERROR_IRQ_BUSY + ERROR_IRQ_BUSY + + + + No documentation. + + + ERROR_MORE_WRITES + ERROR_MORE_WRITES + + + + No documentation. + + + ERROR_COUNTER_TIMEOUT + ERROR_COUNTER_TIMEOUT + + + + No documentation. + + + ERROR_FLOPPY_ID_MARK_NOT_FOUND + ERROR_FLOPPY_ID_MARK_NOT_FOUND + + + + No documentation. + + + ERROR_FLOPPY_WRONG_CYLINDER + ERROR_FLOPPY_WRONG_CYLINDER + + + + No documentation. + + + ERROR_FLOPPY_UNKNOWN_ERROR + ERROR_FLOPPY_UNKNOWN_ERROR + + + + No documentation. + + + ERROR_FLOPPY_BAD_REGISTERS + ERROR_FLOPPY_BAD_REGISTERS + + + + No documentation. + + + ERROR_DISK_RECALIBRATE_FAILED + ERROR_DISK_RECALIBRATE_FAILED + + + + No documentation. + + + ERROR_DISK_OPERATION_FAILED + ERROR_DISK_OPERATION_FAILED + + + + No documentation. + + + ERROR_DISK_RESET_FAILED + ERROR_DISK_RESET_FAILED + + + + No documentation. + + + ERROR_EOM_OVERFLOW + ERROR_EOM_OVERFLOW + + + + No documentation. + + + ERROR_NOT_ENOUGH_SERVER_MEMORY + ERROR_NOT_ENOUGH_SERVER_MEMORY + + + + No documentation. + + + ERROR_POSSIBLE_DEADLOCK + ERROR_POSSIBLE_DEADLOCK + + + + No documentation. + + + ERROR_MAPPED_ALIGNMENT + ERROR_MAPPED_ALIGNMENT + + + + No documentation. + + + ERROR_SET_POWER_STATE_VETOED + ERROR_SET_POWER_STATE_VETOED + + + + No documentation. + + + ERROR_SET_POWER_STATE_FAILED + ERROR_SET_POWER_STATE_FAILED + + + + No documentation. + + + ERROR_TOO_MANY_LINKS + ERROR_TOO_MANY_LINKS + + + + No documentation. + + + ERROR_OLD_WIN_VERSION + ERROR_OLD_WIN_VERSION + + + + No documentation. + + + ERROR_APP_WRONG_OS + ERROR_APP_WRONG_OS + + + + No documentation. + + + ERROR_SINGLE_INSTANCE_APP + ERROR_SINGLE_INSTANCE_APP + + + + No documentation. + + + ERROR_RMODE_APP + ERROR_RMODE_APP + + + + No documentation. + + + ERROR_INVALID_DLL + ERROR_INVALID_DLL + + + + No documentation. + + + ERROR_NO_ASSOCIATION + ERROR_NO_ASSOCIATION + + + + No documentation. + + + ERROR_DDE_FAIL + ERROR_DDE_FAIL + + + + No documentation. + + + ERROR_DLL_NOT_FOUND + ERROR_DLL_NOT_FOUND + + + + No documentation. + + + ERROR_NO_MORE_USER_HANDLES + ERROR_NO_MORE_USER_HANDLES + + + + No documentation. + + + ERROR_MESSAGE_SYNC_ONLY + ERROR_MESSAGE_SYNC_ONLY + + + + No documentation. + + + ERROR_SOURCE_ELEMENT_EMPTY + ERROR_SOURCE_ELEMENT_EMPTY + + + + No documentation. + + + ERROR_DESTINATION_ELEMENT_FULL + ERROR_DESTINATION_ELEMENT_FULL + + + + No documentation. + + + ERROR_ILLEGAL_ELEMENT_ADDRESS + ERROR_ILLEGAL_ELEMENT_ADDRESS + + + + No documentation. + + + ERROR_MAGAZINE_NOT_PRESENT + ERROR_MAGAZINE_NOT_PRESENT + + + + No documentation. + + + ERROR_DEVICE_REINITIALIZATION_NEEDED + ERROR_DEVICE_REINITIALIZATION_NEEDED + + + + No documentation. + + + ERROR_DEVICE_REQUIRES_CLEANING + ERROR_DEVICE_REQUIRES_CLEANING + + + + No documentation. + + + ERROR_DEVICE_DOOR_OPEN + ERROR_DEVICE_DOOR_OPEN + + + + No documentation. + + + ERROR_DEVICE_NOT_CONNECTED + ERROR_DEVICE_NOT_CONNECTED + + + + No documentation. + + + ERROR_NOT_FOUND + ERROR_NOT_FOUND + + + + No documentation. + + + ERROR_NO_MATCH + ERROR_NO_MATCH + + + + No documentation. + + + ERROR_SET_NOT_FOUND + ERROR_SET_NOT_FOUND + + + + No documentation. + + + ERROR_POINT_NOT_FOUND + ERROR_POINT_NOT_FOUND + + + + No documentation. + + + ERROR_NO_TRACKING_SERVICE + ERROR_NO_TRACKING_SERVICE + + + + No documentation. + + + ERROR_NO_VOLUME_ID + ERROR_NO_VOLUME_ID + + + + No documentation. + + + ERROR_UNABLE_TO_REMOVE_REPLACED + ERROR_UNABLE_TO_REMOVE_REPLACED + + + + No documentation. + + + ERROR_UNABLE_TO_MOVE_REPLACEMENT + ERROR_UNABLE_TO_MOVE_REPLACEMENT + + + + No documentation. + + + ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 + ERROR_UNABLE_TO_MOVE_REPLACEMENT_2 + + + + No documentation. + + + ERROR_JOURNAL_DELETE_IN_PROGRESS + ERROR_JOURNAL_DELETE_IN_PROGRESS + + + + No documentation. + + + ERROR_JOURNAL_NOT_ACTIVE + ERROR_JOURNAL_NOT_ACTIVE + + + + No documentation. + + + ERROR_POTENTIAL_FILE_FOUND + ERROR_POTENTIAL_FILE_FOUND + + + + No documentation. + + + ERROR_JOURNAL_ENTRY_DELETED + ERROR_JOURNAL_ENTRY_DELETED + + + + No documentation. + + + ERROR_SHUTDOWN_IS_SCHEDULED + ERROR_SHUTDOWN_IS_SCHEDULED + + + + No documentation. + + + ERROR_SHUTDOWN_USERS_LOGGED_ON + ERROR_SHUTDOWN_USERS_LOGGED_ON + + + + No documentation. + + + ERROR_BAD_DEVICE + ERROR_BAD_DEVICE + + + + No documentation. + + + ERROR_CONNECTION_UNAVAIL + ERROR_CONNECTION_UNAVAIL + + + + No documentation. + + + ERROR_DEVICE_ALREADY_REMEMBERED + ERROR_DEVICE_ALREADY_REMEMBERED + + + + No documentation. + + + ERROR_NO_NET_OR_BAD_PATH + ERROR_NO_NET_OR_BAD_PATH + + + + No documentation. + + + ERROR_BAD_PROVIDER + ERROR_BAD_PROVIDER + + + + No documentation. + + + ERROR_CANNOT_OPEN_PROFILE + ERROR_CANNOT_OPEN_PROFILE + + + + No documentation. + + + ERROR_BAD_PROFILE + ERROR_BAD_PROFILE + + + + No documentation. + + + ERROR_NOT_CONTAINER + ERROR_NOT_CONTAINER + + + + No documentation. + + + ERROR_EXTENDED_ERROR + ERROR_EXTENDED_ERROR + + + + No documentation. + + + ERROR_INVALID_GROUPNAME + ERROR_INVALID_GROUPNAME + + + + No documentation. + + + ERROR_INVALID_COMPUTERNAME + ERROR_INVALID_COMPUTERNAME + + + + No documentation. + + + ERROR_INVALID_EVENTNAME + ERROR_INVALID_EVENTNAME + + + + No documentation. + + + ERROR_INVALID_DOMAINNAME + ERROR_INVALID_DOMAINNAME + + + + No documentation. + + + ERROR_INVALID_SERVICENAME + ERROR_INVALID_SERVICENAME + + + + No documentation. + + + ERROR_INVALID_NETNAME + ERROR_INVALID_NETNAME + + + + No documentation. + + + ERROR_INVALID_SHARENAME + ERROR_INVALID_SHARENAME + + + + No documentation. + + + ERROR_INVALID_PASSWORDNAME + ERROR_INVALID_PASSWORDNAME + + + + No documentation. + + + ERROR_INVALID_MESSAGENAME + ERROR_INVALID_MESSAGENAME + + + + No documentation. + + + ERROR_INVALID_MESSAGEDEST + ERROR_INVALID_MESSAGEDEST + + + + No documentation. + + + ERROR_SESSION_CREDENTIAL_CONFLICT + ERROR_SESSION_CREDENTIAL_CONFLICT + + + + No documentation. + + + ERROR_REMOTE_SESSION_LIMIT_EXCEEDED + ERROR_REMOTE_SESSION_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_DUP_DOMAINNAME + ERROR_DUP_DOMAINNAME + + + + No documentation. + + + ERROR_NO_NETWORK + ERROR_NO_NETWORK + + + + No documentation. + + + ERROR_CANCELLED + ERROR_CANCELLED + + + + No documentation. + + + ERROR_USER_MAPPED_FILE + ERROR_USER_MAPPED_FILE + + + + No documentation. + + + ERROR_CONNECTION_REFUSED + ERROR_CONNECTION_REFUSED + + + + No documentation. + + + ERROR_GRACEFUL_DISCONNECT + ERROR_GRACEFUL_DISCONNECT + + + + No documentation. + + + ERROR_ADDRESS_ALREADY_ASSOCIATED + ERROR_ADDRESS_ALREADY_ASSOCIATED + + + + No documentation. + + + ERROR_ADDRESS_NOT_ASSOCIATED + ERROR_ADDRESS_NOT_ASSOCIATED + + + + No documentation. + + + ERROR_CONNECTION_INVALID + ERROR_CONNECTION_INVALID + + + + No documentation. + + + ERROR_CONNECTION_ACTIVE + ERROR_CONNECTION_ACTIVE + + + + No documentation. + + + ERROR_NETWORK_UNREACHABLE + ERROR_NETWORK_UNREACHABLE + + + + No documentation. + + + ERROR_HOST_UNREACHABLE + ERROR_HOST_UNREACHABLE + + + + No documentation. + + + ERROR_PROTOCOL_UNREACHABLE + ERROR_PROTOCOL_UNREACHABLE + + + + No documentation. + + + ERROR_PORT_UNREACHABLE + ERROR_PORT_UNREACHABLE + + + + No documentation. + + + ERROR_REQUEST_ABORTED + ERROR_REQUEST_ABORTED + + + + No documentation. + + + ERROR_CONNECTION_ABORTED + ERROR_CONNECTION_ABORTED + + + + No documentation. + + + ERROR_RETRY + ERROR_RETRY + + + + No documentation. + + + ERROR_CONNECTION_COUNT_LIMIT + ERROR_CONNECTION_COUNT_LIMIT + + + + No documentation. + + + ERROR_LOGIN_TIME_RESTRICTION + ERROR_LOGIN_TIME_RESTRICTION + + + + No documentation. + + + ERROR_LOGIN_WKSTA_RESTRICTION + ERROR_LOGIN_WKSTA_RESTRICTION + + + + No documentation. + + + ERROR_INCORRECT_ADDRESS + ERROR_INCORRECT_ADDRESS + + + + No documentation. + + + ERROR_ALREADY_REGISTERED + ERROR_ALREADY_REGISTERED + + + + No documentation. + + + ERROR_SERVICE_NOT_FOUND + ERROR_SERVICE_NOT_FOUND + + + + No documentation. + + + ERROR_NOT_AUTHENTICATED + ERROR_NOT_AUTHENTICATED + + + + No documentation. + + + ERROR_NOT_LOGGED_ON + ERROR_NOT_LOGGED_ON + + + + No documentation. + + + ERROR_CONTINUE + ERROR_CONTINUE + + + + No documentation. + + + ERROR_ALREADY_INITIALIZED + ERROR_ALREADY_INITIALIZED + + + + No documentation. + + + ERROR_NO_MORE_DEVICES + ERROR_NO_MORE_DEVICES + + + + No documentation. + + + ERROR_NO_SUCH_SITE + ERROR_NO_SUCH_SITE + + + + No documentation. + + + ERROR_DOMAIN_CONTROLLER_EXISTS + ERROR_DOMAIN_CONTROLLER_EXISTS + + + + No documentation. + + + ERROR_ONLY_IF_CONNECTED + ERROR_ONLY_IF_CONNECTED + + + + No documentation. + + + ERROR_OVERRIDE_NOCHANGES + ERROR_OVERRIDE_NOCHANGES + + + + No documentation. + + + ERROR_BAD_USER_PROFILE + ERROR_BAD_USER_PROFILE + + + + No documentation. + + + ERROR_NOT_SUPPORTED_ON_SBS + ERROR_NOT_SUPPORTED_ON_SBS + + + + No documentation. + + + ERROR_SERVER_SHUTDOWN_IN_PROGRESS + ERROR_SERVER_SHUTDOWN_IN_PROGRESS + + + + No documentation. + + + ERROR_HOST_DOWN + ERROR_HOST_DOWN + + + + No documentation. + + + ERROR_NON_ACCOUNT_SID + ERROR_NON_ACCOUNT_SID + + + + No documentation. + + + ERROR_NON_DOMAIN_SID + ERROR_NON_DOMAIN_SID + + + + No documentation. + + + ERROR_APPHELP_BLOCK + ERROR_APPHELP_BLOCK + + + + No documentation. + + + ERROR_ACCESS_DISABLED_BY_POLICY + ERROR_ACCESS_DISABLED_BY_POLICY + + + + No documentation. + + + ERROR_REG_NAT_CONSUMPTION + ERROR_REG_NAT_CONSUMPTION + + + + No documentation. + + + ERROR_CSCSHARE_OFFLINE + ERROR_CSCSHARE_OFFLINE + + + + No documentation. + + + ERROR_PKINIT_FAILURE + ERROR_PKINIT_FAILURE + + + + No documentation. + + + ERROR_SMARTCARD_SUBSYSTEM_FAILURE + ERROR_SMARTCARD_SUBSYSTEM_FAILURE + + + + No documentation. + + + ERROR_DOWNGRADE_DETECTED + ERROR_DOWNGRADE_DETECTED + + + + No documentation. + + + ERROR_MACHINE_LOCKED + ERROR_MACHINE_LOCKED + + + + No documentation. + + + ERROR_SMB_GUEST_LOGON_BLOCKED + ERROR_SMB_GUEST_LOGON_BLOCKED + + + + No documentation. + + + ERROR_CALLBACK_SUPPLIED_INVALID_DATA + ERROR_CALLBACK_SUPPLIED_INVALID_DATA + + + + No documentation. + + + ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED + ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED + + + + No documentation. + + + ERROR_DRIVER_BLOCKED + ERROR_DRIVER_BLOCKED + + + + No documentation. + + + ERROR_INVALID_IMPORT_OF_NON_DLL + ERROR_INVALID_IMPORT_OF_NON_DLL + + + + No documentation. + + + ERROR_ACCESS_DISABLED_WEBBLADE + ERROR_ACCESS_DISABLED_WEBBLADE + + + + No documentation. + + + ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER + ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER + + + + No documentation. + + + ERROR_RECOVERY_FAILURE + ERROR_RECOVERY_FAILURE + + + + No documentation. + + + ERROR_ALREADY_FIBER + ERROR_ALREADY_FIBER + + + + No documentation. + + + ERROR_ALREADY_THREAD + ERROR_ALREADY_THREAD + + + + No documentation. + + + ERROR_STACK_BUFFER_OVERRUN + ERROR_STACK_BUFFER_OVERRUN + + + + No documentation. + + + ERROR_PARAMETER_QUOTA_EXCEEDED + ERROR_PARAMETER_QUOTA_EXCEEDED + + + + No documentation. + + + ERROR_DEBUGGER_INACTIVE + ERROR_DEBUGGER_INACTIVE + + + + No documentation. + + + ERROR_DELAY_LOAD_FAILED + ERROR_DELAY_LOAD_FAILED + + + + No documentation. + + + ERROR_VDM_DISALLOWED + ERROR_VDM_DISALLOWED + + + + No documentation. + + + ERROR_UNIDENTIFIED_ERROR + ERROR_UNIDENTIFIED_ERROR + + + + No documentation. + + + ERROR_INVALID_CRUNTIME_PARAMETER + ERROR_INVALID_CRUNTIME_PARAMETER + + + + No documentation. + + + ERROR_BEYOND_VDL + ERROR_BEYOND_VDL + + + + No documentation. + + + ERROR_INCOMPATIBLE_SERVICE_SID_TYPE + ERROR_INCOMPATIBLE_SERVICE_SID_TYPE + + + + No documentation. + + + ERROR_DRIVER_PROCESS_TERMINATED + ERROR_DRIVER_PROCESS_TERMINATED + + + + No documentation. + + + ERROR_IMPLEMENTATION_LIMIT + ERROR_IMPLEMENTATION_LIMIT + + + + No documentation. + + + ERROR_PROCESS_IS_PROTECTED + ERROR_PROCESS_IS_PROTECTED + + + + No documentation. + + + ERROR_SERVICE_NOTIFY_CLIENT_LAGGING + ERROR_SERVICE_NOTIFY_CLIENT_LAGGING + + + + No documentation. + + + ERROR_DISK_QUOTA_EXCEEDED + ERROR_DISK_QUOTA_EXCEEDED + + + + No documentation. + + + ERROR_CONTENT_BLOCKED + ERROR_CONTENT_BLOCKED + + + + No documentation. + + + ERROR_INCOMPATIBLE_SERVICE_PRIVILEGE + ERROR_INCOMPATIBLE_SERVICE_PRIVILEGE + + + + No documentation. + + + ERROR_APP_HANG + ERROR_APP_HANG + + + + No documentation. + + + ERROR_INVALID_LABEL + ERROR_INVALID_LABEL + + + + No documentation. + + + ERROR_NOT_ALL_ASSIGNED + ERROR_NOT_ALL_ASSIGNED + + + + No documentation. + + + ERROR_SOME_NOT_MAPPED + ERROR_SOME_NOT_MAPPED + + + + No documentation. + + + ERROR_NO_QUOTAS_FOR_ACCOUNT + ERROR_NO_QUOTAS_FOR_ACCOUNT + + + + No documentation. + + + ERROR_LOCAL_USER_SESSION_KEY + ERROR_LOCAL_USER_SESSION_KEY + + + + No documentation. + + + ERROR_NULL_LM_PASSWORD + ERROR_NULL_LM_PASSWORD + + + + No documentation. + + + ERROR_UNKNOWN_REVISION + ERROR_UNKNOWN_REVISION + + + + No documentation. + + + ERROR_REVISION_MISMATCH + ERROR_REVISION_MISMATCH + + + + No documentation. + + + ERROR_INVALID_OWNER + ERROR_INVALID_OWNER + + + + No documentation. + + + ERROR_INVALID_PRIMARY_GROUP + ERROR_INVALID_PRIMARY_GROUP + + + + No documentation. + + + ERROR_NO_IMPERSONATION_TOKEN + ERROR_NO_IMPERSONATION_TOKEN + + + + No documentation. + + + ERROR_CANT_DISABLE_MANDATORY + ERROR_CANT_DISABLE_MANDATORY + + + + No documentation. + + + ERROR_NO_LOGON_SERVERS + ERROR_NO_LOGON_SERVERS + + + + No documentation. + + + ERROR_NO_SUCH_LOGON_SESSION + ERROR_NO_SUCH_LOGON_SESSION + + + + No documentation. + + + ERROR_NO_SUCH_PRIVILEGE + ERROR_NO_SUCH_PRIVILEGE + + + + No documentation. + + + ERROR_PRIVILEGE_NOT_HELD + ERROR_PRIVILEGE_NOT_HELD + + + + No documentation. + + + ERROR_INVALID_ACCOUNT_NAME + ERROR_INVALID_ACCOUNT_NAME + + + + No documentation. + + + ERROR_USER_EXISTS + ERROR_USER_EXISTS + + + + No documentation. + + + ERROR_NO_SUCH_USER + ERROR_NO_SUCH_USER + + + + No documentation. + + + ERROR_GROUP_EXISTS + ERROR_GROUP_EXISTS + + + + No documentation. + + + ERROR_NO_SUCH_GROUP + ERROR_NO_SUCH_GROUP + + + + No documentation. + + + ERROR_MEMBER_IN_GROUP + ERROR_MEMBER_IN_GROUP + + + + No documentation. + + + ERROR_MEMBER_NOT_IN_GROUP + ERROR_MEMBER_NOT_IN_GROUP + + + + No documentation. + + + ERROR_LAST_ADMIN + ERROR_LAST_ADMIN + + + + No documentation. + + + ERROR_WRONG_PASSWORD + ERROR_WRONG_PASSWORD + + + + No documentation. + + + ERROR_ILL_FORMED_PASSWORD + ERROR_ILL_FORMED_PASSWORD + + + + No documentation. + + + ERROR_PASSWORD_RESTRICTION + ERROR_PASSWORD_RESTRICTION + + + + No documentation. + + + ERROR_LOGON_FAILURE + ERROR_LOGON_FAILURE + + + + No documentation. + + + ERROR_ACCOUNT_RESTRICTION + ERROR_ACCOUNT_RESTRICTION + + + + No documentation. + + + ERROR_INVALID_LOGON_HOURS + ERROR_INVALID_LOGON_HOURS + + + + No documentation. + + + ERROR_INVALID_WORKSTATION + ERROR_INVALID_WORKSTATION + + + + No documentation. + + + ERROR_PASSWORD_EXPIRED + ERROR_PASSWORD_EXPIRED + + + + No documentation. + + + ERROR_ACCOUNT_DISABLED + ERROR_ACCOUNT_DISABLED + + + + No documentation. + + + ERROR_NONE_MAPPED + ERROR_NONE_MAPPED + + + + No documentation. + + + ERROR_TOO_MANY_LUIDS_REQUESTED + ERROR_TOO_MANY_LUIDS_REQUESTED + + + + No documentation. + + + ERROR_LUIDS_EXHAUSTED + ERROR_LUIDS_EXHAUSTED + + + + No documentation. + + + ERROR_INVALID_SUB_AUTHORITY + ERROR_INVALID_SUB_AUTHORITY + + + + No documentation. + + + ERROR_INVALID_ACL + ERROR_INVALID_ACL + + + + No documentation. + + + ERROR_INVALID_SID + ERROR_INVALID_SID + + + + No documentation. + + + ERROR_INVALID_SECURITY_DESCR + ERROR_INVALID_SECURITY_DESCR + + + + No documentation. + + + ERROR_BAD_INHERITANCE_ACL + ERROR_BAD_INHERITANCE_ACL + + + + No documentation. + + + ERROR_SERVER_DISABLED + ERROR_SERVER_DISABLED + + + + No documentation. + + + ERROR_SERVER_NOT_DISABLED + ERROR_SERVER_NOT_DISABLED + + + + No documentation. + + + ERROR_INVALID_ID_AUTHORITY + ERROR_INVALID_ID_AUTHORITY + + + + No documentation. + + + ERROR_ALLOTTED_SPACE_EXCEEDED + ERROR_ALLOTTED_SPACE_EXCEEDED + + + + No documentation. + + + ERROR_INVALID_GROUP_ATTRIBUTES + ERROR_INVALID_GROUP_ATTRIBUTES + + + + No documentation. + + + ERROR_BAD_IMPERSONATION_LEVEL + ERROR_BAD_IMPERSONATION_LEVEL + + + + No documentation. + + + ERROR_CANT_OPEN_ANONYMOUS + ERROR_CANT_OPEN_ANONYMOUS + + + + No documentation. + + + ERROR_BAD_VALIDATION_CLASS + ERROR_BAD_VALIDATION_CLASS + + + + No documentation. + + + ERROR_BAD_TOKEN_TYPE + ERROR_BAD_TOKEN_TYPE + + + + No documentation. + + + ERROR_NO_SECURITY_ON_OBJECT + ERROR_NO_SECURITY_ON_OBJECT + + + + No documentation. + + + ERROR_CANT_ACCESS_DOMAIN_INFO + ERROR_CANT_ACCESS_DOMAIN_INFO + + + + No documentation. + + + ERROR_INVALID_SERVER_STATE + ERROR_INVALID_SERVER_STATE + + + + No documentation. + + + ERROR_INVALID_DOMAIN_STATE + ERROR_INVALID_DOMAIN_STATE + + + + No documentation. + + + ERROR_INVALID_DOMAIN_ROLE + ERROR_INVALID_DOMAIN_ROLE + + + + No documentation. + + + ERROR_NO_SUCH_DOMAIN + ERROR_NO_SUCH_DOMAIN + + + + No documentation. + + + ERROR_DOMAIN_EXISTS + ERROR_DOMAIN_EXISTS + + + + No documentation. + + + ERROR_DOMAIN_LIMIT_EXCEEDED + ERROR_DOMAIN_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_INTERNAL_DB_CORRUPTION + ERROR_INTERNAL_DB_CORRUPTION + + + + No documentation. + + + ERROR_INTERNAL_ERROR + ERROR_INTERNAL_ERROR + + + + No documentation. + + + ERROR_GENERIC_NOT_MAPPED + ERROR_GENERIC_NOT_MAPPED + + + + No documentation. + + + ERROR_BAD_DESCRIPTOR_FORMAT + ERROR_BAD_DESCRIPTOR_FORMAT + + + + No documentation. + + + ERROR_NOT_LOGON_PROCESS + ERROR_NOT_LOGON_PROCESS + + + + No documentation. + + + ERROR_LOGON_SESSION_EXISTS + ERROR_LOGON_SESSION_EXISTS + + + + No documentation. + + + ERROR_NO_SUCH_PACKAGE + ERROR_NO_SUCH_PACKAGE + + + + No documentation. + + + ERROR_BAD_LOGON_SESSION_STATE + ERROR_BAD_LOGON_SESSION_STATE + + + + No documentation. + + + ERROR_LOGON_SESSION_COLLISION + ERROR_LOGON_SESSION_COLLISION + + + + No documentation. + + + ERROR_INVALID_LOGON_TYPE + ERROR_INVALID_LOGON_TYPE + + + + No documentation. + + + ERROR_CANNOT_IMPERSONATE + ERROR_CANNOT_IMPERSONATE + + + + No documentation. + + + ERROR_RXACT_INVALID_STATE + ERROR_RXACT_INVALID_STATE + + + + No documentation. + + + ERROR_RXACT_COMMIT_FAILURE + ERROR_RXACT_COMMIT_FAILURE + + + + No documentation. + + + ERROR_SPECIAL_ACCOUNT + ERROR_SPECIAL_ACCOUNT + + + + No documentation. + + + ERROR_SPECIAL_GROUP + ERROR_SPECIAL_GROUP + + + + No documentation. + + + ERROR_SPECIAL_USER + ERROR_SPECIAL_USER + + + + No documentation. + + + ERROR_MEMBERS_PRIMARY_GROUP + ERROR_MEMBERS_PRIMARY_GROUP + + + + No documentation. + + + ERROR_TOKEN_ALREADY_IN_USE + ERROR_TOKEN_ALREADY_IN_USE + + + + No documentation. + + + ERROR_NO_SUCH_ALIAS + ERROR_NO_SUCH_ALIAS + + + + No documentation. + + + ERROR_MEMBER_NOT_IN_ALIAS + ERROR_MEMBER_NOT_IN_ALIAS + + + + No documentation. + + + ERROR_MEMBER_IN_ALIAS + ERROR_MEMBER_IN_ALIAS + + + + No documentation. + + + ERROR_ALIAS_EXISTS + ERROR_ALIAS_EXISTS + + + + No documentation. + + + ERROR_LOGON_NOT_GRANTED + ERROR_LOGON_NOT_GRANTED + + + + No documentation. + + + ERROR_TOO_MANY_SECRETS + ERROR_TOO_MANY_SECRETS + + + + No documentation. + + + ERROR_SECRET_TOO_LONG + ERROR_SECRET_TOO_LONG + + + + No documentation. + + + ERROR_INTERNAL_DB_ERROR + ERROR_INTERNAL_DB_ERROR + + + + No documentation. + + + ERROR_TOO_MANY_CONTEXT_IDS + ERROR_TOO_MANY_CONTEXT_IDS + + + + No documentation. + + + ERROR_LOGON_TYPE_NOT_GRANTED + ERROR_LOGON_TYPE_NOT_GRANTED + + + + No documentation. + + + ERROR_NT_CROSS_ENCRYPTION_REQUIRED + ERROR_NT_CROSS_ENCRYPTION_REQUIRED + + + + No documentation. + + + ERROR_NO_SUCH_MEMBER + ERROR_NO_SUCH_MEMBER + + + + No documentation. + + + ERROR_INVALID_MEMBER + ERROR_INVALID_MEMBER + + + + No documentation. + + + ERROR_TOO_MANY_SIDS + ERROR_TOO_MANY_SIDS + + + + No documentation. + + + ERROR_LM_CROSS_ENCRYPTION_REQUIRED + ERROR_LM_CROSS_ENCRYPTION_REQUIRED + + + + No documentation. + + + ERROR_NO_INHERITANCE + ERROR_NO_INHERITANCE + + + + No documentation. + + + ERROR_FILE_CORRUPT + ERROR_FILE_CORRUPT + + + + No documentation. + + + ERROR_DISK_CORRUPT + ERROR_DISK_CORRUPT + + + + No documentation. + + + ERROR_NO_USER_SESSION_KEY + ERROR_NO_USER_SESSION_KEY + + + + No documentation. + + + ERROR_LICENSE_QUOTA_EXCEEDED + ERROR_LICENSE_QUOTA_EXCEEDED + + + + No documentation. + + + ERROR_WRONG_TARGET_NAME + ERROR_WRONG_TARGET_NAME + + + + No documentation. + + + ERROR_MUTUAL_AUTH_FAILED + ERROR_MUTUAL_AUTH_FAILED + + + + No documentation. + + + ERROR_TIME_SKEW + ERROR_TIME_SKEW + + + + No documentation. + + + ERROR_CURRENT_DOMAIN_NOT_ALLOWED + ERROR_CURRENT_DOMAIN_NOT_ALLOWED + + + + No documentation. + + + ERROR_INVALID_WINDOW_HANDLE + ERROR_INVALID_WINDOW_HANDLE + + + + No documentation. + + + ERROR_INVALID_MENU_HANDLE + ERROR_INVALID_MENU_HANDLE + + + + No documentation. + + + ERROR_INVALID_CURSOR_HANDLE + ERROR_INVALID_CURSOR_HANDLE + + + + No documentation. + + + ERROR_INVALID_ACCEL_HANDLE + ERROR_INVALID_ACCEL_HANDLE + + + + No documentation. + + + ERROR_INVALID_HOOK_HANDLE + ERROR_INVALID_HOOK_HANDLE + + + + No documentation. + + + ERROR_INVALID_DWP_HANDLE + ERROR_INVALID_DWP_HANDLE + + + + No documentation. + + + ERROR_TLW_WITH_WSCHILD + ERROR_TLW_WITH_WSCHILD + + + + No documentation. + + + ERROR_CANNOT_FIND_WND_CLASS + ERROR_CANNOT_FIND_WND_CLASS + + + + No documentation. + + + ERROR_WINDOW_OF_OTHER_THREAD + ERROR_WINDOW_OF_OTHER_THREAD + + + + No documentation. + + + ERROR_HOTKEY_ALREADY_REGISTERED + ERROR_HOTKEY_ALREADY_REGISTERED + + + + No documentation. + + + ERROR_CLASS_ALREADY_EXISTS + ERROR_CLASS_ALREADY_EXISTS + + + + No documentation. + + + ERROR_CLASS_DOES_NOT_EXIST + ERROR_CLASS_DOES_NOT_EXIST + + + + No documentation. + + + ERROR_CLASS_HAS_WINDOWS + ERROR_CLASS_HAS_WINDOWS + + + + No documentation. + + + ERROR_INVALID_INDEX + ERROR_INVALID_INDEX + + + + No documentation. + + + ERROR_INVALID_ICON_HANDLE + ERROR_INVALID_ICON_HANDLE + + + + No documentation. + + + ERROR_PRIVATE_DIALOG_INDEX + ERROR_PRIVATE_DIALOG_INDEX + + + + No documentation. + + + ERROR_LISTBOX_ID_NOT_FOUND + ERROR_LISTBOX_ID_NOT_FOUND + + + + No documentation. + + + ERROR_NO_WILDCARD_CHARACTERS + ERROR_NO_WILDCARD_CHARACTERS + + + + No documentation. + + + ERROR_CLIPBOARD_NOT_OPEN + ERROR_CLIPBOARD_NOT_OPEN + + + + No documentation. + + + ERROR_HOTKEY_NOT_REGISTERED + ERROR_HOTKEY_NOT_REGISTERED + + + + No documentation. + + + ERROR_WINDOW_NOT_DIALOG + ERROR_WINDOW_NOT_DIALOG + + + + No documentation. + + + ERROR_CONTROL_ID_NOT_FOUND + ERROR_CONTROL_ID_NOT_FOUND + + + + No documentation. + + + ERROR_INVALID_COMBOBOX_MESSAGE + ERROR_INVALID_COMBOBOX_MESSAGE + + + + No documentation. + + + ERROR_WINDOW_NOT_COMBOBOX + ERROR_WINDOW_NOT_COMBOBOX + + + + No documentation. + + + ERROR_INVALID_EDIT_HEIGHT + ERROR_INVALID_EDIT_HEIGHT + + + + No documentation. + + + ERROR_DC_NOT_FOUND + ERROR_DC_NOT_FOUND + + + + No documentation. + + + ERROR_INVALID_HOOK_FILTER + ERROR_INVALID_HOOK_FILTER + + + + No documentation. + + + ERROR_INVALID_FILTER_PROC + ERROR_INVALID_FILTER_PROC + + + + No documentation. + + + ERROR_HOOK_NEEDS_HMOD + ERROR_HOOK_NEEDS_HMOD + + + + No documentation. + + + ERROR_GLOBAL_ONLY_HOOK + ERROR_GLOBAL_ONLY_HOOK + + + + No documentation. + + + ERROR_JOURNAL_HOOK_SET + ERROR_JOURNAL_HOOK_SET + + + + No documentation. + + + ERROR_HOOK_NOT_INSTALLED + ERROR_HOOK_NOT_INSTALLED + + + + No documentation. + + + ERROR_INVALID_LB_MESSAGE + ERROR_INVALID_LB_MESSAGE + + + + No documentation. + + + ERROR_SETCOUNT_ON_BAD_LB + ERROR_SETCOUNT_ON_BAD_LB + + + + No documentation. + + + ERROR_LB_WITHOUT_TABSTOPS + ERROR_LB_WITHOUT_TABSTOPS + + + + No documentation. + + + ERROR_DESTROY_OBJECT_OF_OTHER_THREAD + ERROR_DESTROY_OBJECT_OF_OTHER_THREAD + + + + No documentation. + + + ERROR_CHILD_WINDOW_MENU + ERROR_CHILD_WINDOW_MENU + + + + No documentation. + + + ERROR_NO_SYSTEM_MENU + ERROR_NO_SYSTEM_MENU + + + + No documentation. + + + ERROR_INVALID_MSGBOX_STYLE + ERROR_INVALID_MSGBOX_STYLE + + + + No documentation. + + + ERROR_INVALID_SPI_VALUE + ERROR_INVALID_SPI_VALUE + + + + No documentation. + + + ERROR_SCREEN_ALREADY_LOCKED + ERROR_SCREEN_ALREADY_LOCKED + + + + No documentation. + + + ERROR_HWNDS_HAVE_DIFF_PARENT + ERROR_HWNDS_HAVE_DIFF_PARENT + + + + No documentation. + + + ERROR_NOT_CHILD_WINDOW + ERROR_NOT_CHILD_WINDOW + + + + No documentation. + + + ERROR_INVALID_GW_COMMAND + ERROR_INVALID_GW_COMMAND + + + + No documentation. + + + ERROR_INVALID_THREAD_ID + ERROR_INVALID_THREAD_ID + + + + No documentation. + + + ERROR_NON_MDICHILD_WINDOW + ERROR_NON_MDICHILD_WINDOW + + + + No documentation. + + + ERROR_POPUP_ALREADY_ACTIVE + ERROR_POPUP_ALREADY_ACTIVE + + + + No documentation. + + + ERROR_NO_SCROLLBARS + ERROR_NO_SCROLLBARS + + + + No documentation. + + + ERROR_INVALID_SCROLLBAR_RANGE + ERROR_INVALID_SCROLLBAR_RANGE + + + + No documentation. + + + ERROR_INVALID_SHOWWIN_COMMAND + ERROR_INVALID_SHOWWIN_COMMAND + + + + No documentation. + + + ERROR_NO_SYSTEM_RESOURCES + ERROR_NO_SYSTEM_RESOURCES + + + + No documentation. + + + ERROR_NONPAGED_SYSTEM_RESOURCES + ERROR_NONPAGED_SYSTEM_RESOURCES + + + + No documentation. + + + ERROR_PAGED_SYSTEM_RESOURCES + ERROR_PAGED_SYSTEM_RESOURCES + + + + No documentation. + + + ERROR_WORKING_SET_QUOTA + ERROR_WORKING_SET_QUOTA + + + + No documentation. + + + ERROR_PAGEFILE_QUOTA + ERROR_PAGEFILE_QUOTA + + + + No documentation. + + + ERROR_COMMITMENT_LIMIT + ERROR_COMMITMENT_LIMIT + + + + No documentation. + + + ERROR_MENU_ITEM_NOT_FOUND + ERROR_MENU_ITEM_NOT_FOUND + + + + No documentation. + + + ERROR_INVALID_KEYBOARD_HANDLE + ERROR_INVALID_KEYBOARD_HANDLE + + + + No documentation. + + + ERROR_HOOK_TYPE_NOT_ALLOWED + ERROR_HOOK_TYPE_NOT_ALLOWED + + + + No documentation. + + + ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION + ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION + + + + No documentation. + + + ERROR_TIMEOUT + ERROR_TIMEOUT + + + + No documentation. + + + ERROR_INVALID_MONITOR_HANDLE + ERROR_INVALID_MONITOR_HANDLE + + + + No documentation. + + + ERROR_INCORRECT_SIZE + ERROR_INCORRECT_SIZE + + + + No documentation. + + + ERROR_SYMLINK_CLASS_DISABLED + ERROR_SYMLINK_CLASS_DISABLED + + + + No documentation. + + + ERROR_SYMLINK_NOT_SUPPORTED + ERROR_SYMLINK_NOT_SUPPORTED + + + + No documentation. + + + ERROR_XML_PARSE_ERROR + ERROR_XML_PARSE_ERROR + + + + No documentation. + + + ERROR_XMLDSIG_ERROR + ERROR_XMLDSIG_ERROR + + + + No documentation. + + + ERROR_RESTART_APPLICATION + ERROR_RESTART_APPLICATION + + + + No documentation. + + + ERROR_WRONG_COMPARTMENT + ERROR_WRONG_COMPARTMENT + + + + No documentation. + + + ERROR_AUTHIP_FAILURE + ERROR_AUTHIP_FAILURE + + + + No documentation. + + + ERROR_NO_NVRAM_RESOURCES + ERROR_NO_NVRAM_RESOURCES + + + + No documentation. + + + ERROR_NOT_GUI_PROCESS + ERROR_NOT_GUI_PROCESS + + + + No documentation. + + + ERROR_EVENTLOG_FILE_CORRUPT + ERROR_EVENTLOG_FILE_CORRUPT + + + + No documentation. + + + ERROR_EVENTLOG_CANT_START + ERROR_EVENTLOG_CANT_START + + + + No documentation. + + + ERROR_LOG_FILE_FULL + ERROR_LOG_FILE_FULL + + + + No documentation. + + + ERROR_EVENTLOG_FILE_CHANGED + ERROR_EVENTLOG_FILE_CHANGED + + + + No documentation. + + + ERROR_CONTAINER_ASSIGNED + ERROR_CONTAINER_ASSIGNED + + + + No documentation. + + + ERROR_JOB_NO_CONTAINER + ERROR_JOB_NO_CONTAINER + + + + No documentation. + + + ERROR_INVALID_TASK_NAME + ERROR_INVALID_TASK_NAME + + + + No documentation. + + + ERROR_INVALID_TASK_INDEX + ERROR_INVALID_TASK_INDEX + + + + No documentation. + + + ERROR_THREAD_ALREADY_IN_TASK + ERROR_THREAD_ALREADY_IN_TASK + + + + No documentation. + + + ERROR_INSTALL_SERVICE_FAILURE + ERROR_INSTALL_SERVICE_FAILURE + + + + No documentation. + + + ERROR_INSTALL_USEREXIT + ERROR_INSTALL_USEREXIT + + + + No documentation. + + + ERROR_INSTALL_FAILURE + ERROR_INSTALL_FAILURE + + + + No documentation. + + + ERROR_INSTALL_SUSPEND + ERROR_INSTALL_SUSPEND + + + + No documentation. + + + ERROR_UNKNOWN_PRODUCT + ERROR_UNKNOWN_PRODUCT + + + + No documentation. + + + ERROR_UNKNOWN_FEATURE + ERROR_UNKNOWN_FEATURE + + + + No documentation. + + + ERROR_UNKNOWN_COMPONENT + ERROR_UNKNOWN_COMPONENT + + + + No documentation. + + + ERROR_UNKNOWN_PROPERTY + ERROR_UNKNOWN_PROPERTY + + + + No documentation. + + + ERROR_INVALID_HANDLE_STATE + ERROR_INVALID_HANDLE_STATE + + + + No documentation. + + + ERROR_BAD_CONFIGURATION + ERROR_BAD_CONFIGURATION + + + + No documentation. + + + ERROR_INDEX_ABSENT + ERROR_INDEX_ABSENT + + + + No documentation. + + + ERROR_INSTALL_SOURCE_ABSENT + ERROR_INSTALL_SOURCE_ABSENT + + + + No documentation. + + + ERROR_INSTALL_PACKAGE_VERSION + ERROR_INSTALL_PACKAGE_VERSION + + + + No documentation. + + + ERROR_PRODUCT_UNINSTALLED + ERROR_PRODUCT_UNINSTALLED + + + + No documentation. + + + ERROR_BAD_QUERY_SYNTAX + ERROR_BAD_QUERY_SYNTAX + + + + No documentation. + + + ERROR_INVALID_FIELD + ERROR_INVALID_FIELD + + + + No documentation. + + + ERROR_DEVICE_REMOVED + ERROR_DEVICE_REMOVED + + + + No documentation. + + + ERROR_INSTALL_ALREADY_RUNNING + ERROR_INSTALL_ALREADY_RUNNING + + + + No documentation. + + + ERROR_INSTALL_PACKAGE_OPEN_FAILED + ERROR_INSTALL_PACKAGE_OPEN_FAILED + + + + No documentation. + + + ERROR_INSTALL_PACKAGE_INVALID + ERROR_INSTALL_PACKAGE_INVALID + + + + No documentation. + + + ERROR_INSTALL_UI_FAILURE + ERROR_INSTALL_UI_FAILURE + + + + No documentation. + + + ERROR_INSTALL_LOG_FAILURE + ERROR_INSTALL_LOG_FAILURE + + + + No documentation. + + + ERROR_INSTALL_LANGUAGE_UNSUPPORTED + ERROR_INSTALL_LANGUAGE_UNSUPPORTED + + + + No documentation. + + + ERROR_INSTALL_TRANSFORM_FAILURE + ERROR_INSTALL_TRANSFORM_FAILURE + + + + No documentation. + + + ERROR_INSTALL_PACKAGE_REJECTED + ERROR_INSTALL_PACKAGE_REJECTED + + + + No documentation. + + + ERROR_FUNCTION_NOT_CALLED + ERROR_FUNCTION_NOT_CALLED + + + + No documentation. + + + ERROR_FUNCTION_FAILED + ERROR_FUNCTION_FAILED + + + + No documentation. + + + ERROR_INVALID_TABLE + ERROR_INVALID_TABLE + + + + No documentation. + + + ERROR_DATATYPE_MISMATCH + ERROR_DATATYPE_MISMATCH + + + + No documentation. + + + ERROR_UNSUPPORTED_TYPE + ERROR_UNSUPPORTED_TYPE + + + + No documentation. + + + ERROR_CREATE_FAILED + ERROR_CREATE_FAILED + + + + No documentation. + + + ERROR_INSTALL_TEMP_UNWRITABLE + ERROR_INSTALL_TEMP_UNWRITABLE + + + + No documentation. + + + ERROR_INSTALL_PLATFORM_UNSUPPORTED + ERROR_INSTALL_PLATFORM_UNSUPPORTED + + + + No documentation. + + + ERROR_INSTALL_NOTUSED + ERROR_INSTALL_NOTUSED + + + + No documentation. + + + ERROR_PATCH_PACKAGE_OPEN_FAILED + ERROR_PATCH_PACKAGE_OPEN_FAILED + + + + No documentation. + + + ERROR_PATCH_PACKAGE_INVALID + ERROR_PATCH_PACKAGE_INVALID + + + + No documentation. + + + ERROR_PATCH_PACKAGE_UNSUPPORTED + ERROR_PATCH_PACKAGE_UNSUPPORTED + + + + No documentation. + + + ERROR_PRODUCT_VERSION + ERROR_PRODUCT_VERSION + + + + No documentation. + + + ERROR_INVALID_COMMAND_LINE + ERROR_INVALID_COMMAND_LINE + + + + No documentation. + + + ERROR_INSTALL_REMOTE_DISALLOWED + ERROR_INSTALL_REMOTE_DISALLOWED + + + + No documentation. + + + ERROR_SUCCESS_REBOOT_INITIATED + ERROR_SUCCESS_REBOOT_INITIATED + + + + No documentation. + + + ERROR_PATCH_TARGET_NOT_FOUND + ERROR_PATCH_TARGET_NOT_FOUND + + + + No documentation. + + + ERROR_PATCH_PACKAGE_REJECTED + ERROR_PATCH_PACKAGE_REJECTED + + + + No documentation. + + + ERROR_INSTALL_TRANSFORM_REJECTED + ERROR_INSTALL_TRANSFORM_REJECTED + + + + No documentation. + + + ERROR_INSTALL_REMOTE_PROHIBITED + ERROR_INSTALL_REMOTE_PROHIBITED + + + + No documentation. + + + ERROR_PATCH_REMOVAL_UNSUPPORTED + ERROR_PATCH_REMOVAL_UNSUPPORTED + + + + No documentation. + + + ERROR_UNKNOWN_PATCH + ERROR_UNKNOWN_PATCH + + + + No documentation. + + + ERROR_PATCH_NO_SEQUENCE + ERROR_PATCH_NO_SEQUENCE + + + + No documentation. + + + ERROR_PATCH_REMOVAL_DISALLOWED + ERROR_PATCH_REMOVAL_DISALLOWED + + + + No documentation. + + + ERROR_INVALID_PATCH_XML + ERROR_INVALID_PATCH_XML + + + + No documentation. + + + ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT + ERROR_PATCH_MANAGED_ADVERTISED_PRODUCT + + + + No documentation. + + + ERROR_INSTALL_SERVICE_SAFEBOOT + ERROR_INSTALL_SERVICE_SAFEBOOT + + + + No documentation. + + + ERROR_FAIL_FAST_EXCEPTION + ERROR_FAIL_FAST_EXCEPTION + + + + No documentation. + + + ERROR_INSTALL_REJECTED + ERROR_INSTALL_REJECTED + + + + No documentation. + + + ERROR_DYNAMIC_CODE_BLOCKED + ERROR_DYNAMIC_CODE_BLOCKED + + + + No documentation. + + + ERROR_NOT_SAME_OBJECT + ERROR_NOT_SAME_OBJECT + + + + No documentation. + + + ERROR_STRICT_CFG_VIOLATION + ERROR_STRICT_CFG_VIOLATION + + + + No documentation. + + + ERROR_STRICT_RFG_VIOLATION + ERROR_STRICT_RFG_VIOLATION + + + + No documentation. + + + ERROR_RFG_ACCESS_VIOLATION + ERROR_RFG_ACCESS_VIOLATION + + + + No documentation. + + + ERROR_SET_CONTEXT_DENIED + ERROR_SET_CONTEXT_DENIED + + + + No documentation. + + + ERROR_CROSS_PARTITION_VIOLATION + ERROR_CROSS_PARTITION_VIOLATION + + + + No documentation. + + + ERROR_INVALID_USER_BUFFER + ERROR_INVALID_USER_BUFFER + + + + No documentation. + + + ERROR_UNRECOGNIZED_MEDIA + ERROR_UNRECOGNIZED_MEDIA + + + + No documentation. + + + ERROR_NO_TRUST_LSA_SECRET + ERROR_NO_TRUST_LSA_SECRET + + + + No documentation. + + + ERROR_NO_TRUST_SAM_ACCOUNT + ERROR_NO_TRUST_SAM_ACCOUNT + + + + No documentation. + + + ERROR_TRUSTED_DOMAIN_FAILURE + ERROR_TRUSTED_DOMAIN_FAILURE + + + + No documentation. + + + ERROR_TRUSTED_RELATIONSHIP_FAILURE + ERROR_TRUSTED_RELATIONSHIP_FAILURE + + + + No documentation. + + + ERROR_TRUST_FAILURE + ERROR_TRUST_FAILURE + + + + No documentation. + + + ERROR_NETLOGON_NOT_STARTED + ERROR_NETLOGON_NOT_STARTED + + + + No documentation. + + + ERROR_ACCOUNT_EXPIRED + ERROR_ACCOUNT_EXPIRED + + + + No documentation. + + + ERROR_REDIRECTOR_HAS_OPEN_HANDLES + ERROR_REDIRECTOR_HAS_OPEN_HANDLES + + + + No documentation. + + + ERROR_PRINTER_DRIVER_ALREADY_INSTALLED + ERROR_PRINTER_DRIVER_ALREADY_INSTALLED + + + + No documentation. + + + ERROR_UNKNOWN_PORT + ERROR_UNKNOWN_PORT + + + + No documentation. + + + ERROR_UNKNOWN_PRINTER_DRIVER + ERROR_UNKNOWN_PRINTER_DRIVER + + + + No documentation. + + + ERROR_UNKNOWN_PRINTPROCESSOR + ERROR_UNKNOWN_PRINTPROCESSOR + + + + No documentation. + + + ERROR_INVALID_SEPARATOR_FILE + ERROR_INVALID_SEPARATOR_FILE + + + + No documentation. + + + ERROR_INVALID_PRIORITY + ERROR_INVALID_PRIORITY + + + + No documentation. + + + ERROR_INVALID_PRINTER_NAME + ERROR_INVALID_PRINTER_NAME + + + + No documentation. + + + ERROR_PRINTER_ALREADY_EXISTS + ERROR_PRINTER_ALREADY_EXISTS + + + + No documentation. + + + ERROR_INVALID_PRINTER_COMMAND + ERROR_INVALID_PRINTER_COMMAND + + + + No documentation. + + + ERROR_INVALID_DATATYPE + ERROR_INVALID_DATATYPE + + + + No documentation. + + + ERROR_INVALID_ENVIRONMENT + ERROR_INVALID_ENVIRONMENT + + + + No documentation. + + + ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT + ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT + + + + No documentation. + + + ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT + ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT + + + + No documentation. + + + ERROR_NOLOGON_SERVER_TRUST_ACCOUNT + ERROR_NOLOGON_SERVER_TRUST_ACCOUNT + + + + No documentation. + + + ERROR_DOMAIN_TRUST_INCONSISTENT + ERROR_DOMAIN_TRUST_INCONSISTENT + + + + No documentation. + + + ERROR_SERVER_HAS_OPEN_HANDLES + ERROR_SERVER_HAS_OPEN_HANDLES + + + + No documentation. + + + ERROR_RESOURCE_DATA_NOT_FOUND + ERROR_RESOURCE_DATA_NOT_FOUND + + + + No documentation. + + + ERROR_RESOURCE_TYPE_NOT_FOUND + ERROR_RESOURCE_TYPE_NOT_FOUND + + + + No documentation. + + + ERROR_RESOURCE_NAME_NOT_FOUND + ERROR_RESOURCE_NAME_NOT_FOUND + + + + No documentation. + + + ERROR_RESOURCE_LANG_NOT_FOUND + ERROR_RESOURCE_LANG_NOT_FOUND + + + + No documentation. + + + ERROR_NOT_ENOUGH_QUOTA + ERROR_NOT_ENOUGH_QUOTA + + + + No documentation. + + + ERROR_INVALID_TIME + ERROR_INVALID_TIME + + + + No documentation. + + + ERROR_INVALID_FORM_NAME + ERROR_INVALID_FORM_NAME + + + + No documentation. + + + ERROR_INVALID_FORM_SIZE + ERROR_INVALID_FORM_SIZE + + + + No documentation. + + + ERROR_ALREADY_WAITING + ERROR_ALREADY_WAITING + + + + No documentation. + + + ERROR_PRINTER_DELETED + ERROR_PRINTER_DELETED + + + + No documentation. + + + ERROR_INVALID_PRINTER_STATE + ERROR_INVALID_PRINTER_STATE + + + + No documentation. + + + ERROR_PASSWORD_MUST_CHANGE + ERROR_PASSWORD_MUST_CHANGE + + + + No documentation. + + + ERROR_DOMAIN_CONTROLLER_NOT_FOUND + ERROR_DOMAIN_CONTROLLER_NOT_FOUND + + + + No documentation. + + + ERROR_ACCOUNT_LOCKED_OUT + ERROR_ACCOUNT_LOCKED_OUT + + + + No documentation. + + + ERROR_NO_SITENAME + ERROR_NO_SITENAME + + + + No documentation. + + + ERROR_CANT_ACCESS_FILE + ERROR_CANT_ACCESS_FILE + + + + No documentation. + + + ERROR_CANT_RESOLVE_FILENAME + ERROR_CANT_RESOLVE_FILENAME + + + + No documentation. + + + ERROR_KM_DRIVER_BLOCKED + ERROR_KM_DRIVER_BLOCKED + + + + No documentation. + + + ERROR_CONTEXT_EXPIRED + ERROR_CONTEXT_EXPIRED + + + + No documentation. + + + ERROR_PER_USER_TRUST_QUOTA_EXCEEDED + ERROR_PER_USER_TRUST_QUOTA_EXCEEDED + + + + No documentation. + + + ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED + ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED + + + + No documentation. + + + ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED + ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED + + + + No documentation. + + + ERROR_AUTHENTICATION_FIREWALL_FAILED + ERROR_AUTHENTICATION_FIREWALL_FAILED + + + + No documentation. + + + ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED + ERROR_REMOTE_PRINT_CONNECTIONS_BLOCKED + + + + No documentation. + + + ERROR_NTLM_BLOCKED + ERROR_NTLM_BLOCKED + + + + No documentation. + + + ERROR_PASSWORD_CHANGE_REQUIRED + ERROR_PASSWORD_CHANGE_REQUIRED + + + + No documentation. + + + ERROR_LOST_MODE_LOGON_RESTRICTION + ERROR_LOST_MODE_LOGON_RESTRICTION + + + + No documentation. + + + ERROR_INVALID_PIXEL_FORMAT + ERROR_INVALID_PIXEL_FORMAT + + + + No documentation. + + + ERROR_BAD_DRIVER + ERROR_BAD_DRIVER + + + + No documentation. + + + ERROR_INVALID_WINDOW_STYLE + ERROR_INVALID_WINDOW_STYLE + + + + No documentation. + + + ERROR_METAFILE_NOT_SUPPORTED + ERROR_METAFILE_NOT_SUPPORTED + + + + No documentation. + + + ERROR_TRANSFORM_NOT_SUPPORTED + ERROR_TRANSFORM_NOT_SUPPORTED + + + + No documentation. + + + ERROR_CLIPPING_NOT_SUPPORTED + ERROR_CLIPPING_NOT_SUPPORTED + + + + No documentation. + + + ERROR_INVALID_CMM + ERROR_INVALID_CMM + + + + No documentation. + + + ERROR_INVALID_PROFILE + ERROR_INVALID_PROFILE + + + + No documentation. + + + ERROR_TAG_NOT_FOUND + ERROR_TAG_NOT_FOUND + + + + No documentation. + + + ERROR_TAG_NOT_PRESENT + ERROR_TAG_NOT_PRESENT + + + + No documentation. + + + ERROR_DUPLICATE_TAG + ERROR_DUPLICATE_TAG + + + + No documentation. + + + ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE + ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE + + + + No documentation. + + + ERROR_PROFILE_NOT_FOUND + ERROR_PROFILE_NOT_FOUND + + + + No documentation. + + + ERROR_INVALID_COLORSPACE + ERROR_INVALID_COLORSPACE + + + + No documentation. + + + ERROR_ICM_NOT_ENABLED + ERROR_ICM_NOT_ENABLED + + + + No documentation. + + + ERROR_DELETING_ICM_XFORM + ERROR_DELETING_ICM_XFORM + + + + No documentation. + + + ERROR_INVALID_TRANSFORM + ERROR_INVALID_TRANSFORM + + + + No documentation. + + + ERROR_COLORSPACE_MISMATCH + ERROR_COLORSPACE_MISMATCH + + + + No documentation. + + + ERROR_INVALID_COLORINDEX + ERROR_INVALID_COLORINDEX + + + + No documentation. + + + ERROR_PROFILE_DOES_NOT_MATCH_DEVICE + ERROR_PROFILE_DOES_NOT_MATCH_DEVICE + + + + No documentation. + + + ERROR_CONNECTED_OTHER_PASSWORD + ERROR_CONNECTED_OTHER_PASSWORD + + + + No documentation. + + + ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT + ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT + + + + No documentation. + + + ERROR_BAD_USERNAME + ERROR_BAD_USERNAME + + + + No documentation. + + + ERROR_NOT_CONNECTED + ERROR_NOT_CONNECTED + + + + No documentation. + + + ERROR_OPEN_FILES + ERROR_OPEN_FILES + + + + No documentation. + + + ERROR_ACTIVE_CONNECTIONS + ERROR_ACTIVE_CONNECTIONS + + + + No documentation. + + + ERROR_DEVICE_IN_USE + ERROR_DEVICE_IN_USE + + + + No documentation. + + + ERROR_UNKNOWN_PRINT_MONITOR + ERROR_UNKNOWN_PRINT_MONITOR + + + + No documentation. + + + ERROR_PRINTER_DRIVER_IN_USE + ERROR_PRINTER_DRIVER_IN_USE + + + + No documentation. + + + ERROR_SPOOL_FILE_NOT_FOUND + ERROR_SPOOL_FILE_NOT_FOUND + + + + No documentation. + + + ERROR_SPL_NO_STARTDOC + ERROR_SPL_NO_STARTDOC + + + + No documentation. + + + ERROR_SPL_NO_ADDJOB + ERROR_SPL_NO_ADDJOB + + + + No documentation. + + + ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED + ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED + + + + No documentation. + + + ERROR_PRINT_MONITOR_ALREADY_INSTALLED + ERROR_PRINT_MONITOR_ALREADY_INSTALLED + + + + No documentation. + + + ERROR_INVALID_PRINT_MONITOR + ERROR_INVALID_PRINT_MONITOR + + + + No documentation. + + + ERROR_PRINT_MONITOR_IN_USE + ERROR_PRINT_MONITOR_IN_USE + + + + No documentation. + + + ERROR_PRINTER_HAS_JOBS_QUEUED + ERROR_PRINTER_HAS_JOBS_QUEUED + + + + No documentation. + + + ERROR_SUCCESS_REBOOT_REQUIRED + ERROR_SUCCESS_REBOOT_REQUIRED + + + + No documentation. + + + ERROR_SUCCESS_RESTART_REQUIRED + ERROR_SUCCESS_RESTART_REQUIRED + + + + No documentation. + + + ERROR_PRINTER_NOT_FOUND + ERROR_PRINTER_NOT_FOUND + + + + No documentation. + + + ERROR_PRINTER_DRIVER_WARNED + ERROR_PRINTER_DRIVER_WARNED + + + + No documentation. + + + ERROR_PRINTER_DRIVER_BLOCKED + ERROR_PRINTER_DRIVER_BLOCKED + + + + No documentation. + + + ERROR_PRINTER_DRIVER_PACKAGE_IN_USE + ERROR_PRINTER_DRIVER_PACKAGE_IN_USE + + + + No documentation. + + + ERROR_CORE_DRIVER_PACKAGE_NOT_FOUND + ERROR_CORE_DRIVER_PACKAGE_NOT_FOUND + + + + No documentation. + + + ERROR_FAIL_REBOOT_REQUIRED + ERROR_FAIL_REBOOT_REQUIRED + + + + No documentation. + + + ERROR_FAIL_REBOOT_INITIATED + ERROR_FAIL_REBOOT_INITIATED + + + + No documentation. + + + ERROR_PRINTER_DRIVER_DOWNLOAD_NEEDED + ERROR_PRINTER_DRIVER_DOWNLOAD_NEEDED + + + + No documentation. + + + ERROR_PRINT_JOB_RESTART_REQUIRED + ERROR_PRINT_JOB_RESTART_REQUIRED + + + + No documentation. + + + ERROR_INVALID_PRINTER_DRIVER_MANIFEST + ERROR_INVALID_PRINTER_DRIVER_MANIFEST + + + + No documentation. + + + ERROR_PRINTER_NOT_SHAREABLE + ERROR_PRINTER_NOT_SHAREABLE + + + + No documentation. + + + ERROR_REQUEST_PAUSED + ERROR_REQUEST_PAUSED + + + + No documentation. + + + ERROR_IO_REISSUE_AS_CACHED + ERROR_IO_REISSUE_AS_CACHED + + + + No documentation. + + + ERROR_WINS_INTERNAL + ERROR_WINS_INTERNAL + + + + No documentation. + + + ERROR_CAN_NOT_DEL_LOCAL_WINS + ERROR_CAN_NOT_DEL_LOCAL_WINS + + + + No documentation. + + + ERROR_STATIC_INIT + ERROR_STATIC_INIT + + + + No documentation. + + + ERROR_INC_BACKUP + ERROR_INC_BACKUP + + + + No documentation. + + + ERROR_FULL_BACKUP + ERROR_FULL_BACKUP + + + + No documentation. + + + ERROR_REC_NON_EXISTENT + ERROR_REC_NON_EXISTENT + + + + No documentation. + + + ERROR_RPL_NOT_ALLOWED + ERROR_RPL_NOT_ALLOWED + + + + No documentation. + + + ERROR_DHCP_ADDRESS_CONFLICT + ERROR_DHCP_ADDRESS_CONFLICT + + + + No documentation. + + + ERROR_WMI_GUID_NOT_FOUND + ERROR_WMI_GUID_NOT_FOUND + + + + No documentation. + + + ERROR_WMI_INSTANCE_NOT_FOUND + ERROR_WMI_INSTANCE_NOT_FOUND + + + + No documentation. + + + ERROR_WMI_ITEMID_NOT_FOUND + ERROR_WMI_ITEMID_NOT_FOUND + + + + No documentation. + + + ERROR_WMI_TRY_AGAIN + ERROR_WMI_TRY_AGAIN + + + + No documentation. + + + ERROR_WMI_DP_NOT_FOUND + ERROR_WMI_DP_NOT_FOUND + + + + No documentation. + + + ERROR_WMI_UNRESOLVED_INSTANCE_REF + ERROR_WMI_UNRESOLVED_INSTANCE_REF + + + + No documentation. + + + ERROR_WMI_ALREADY_ENABLED + ERROR_WMI_ALREADY_ENABLED + + + + No documentation. + + + ERROR_WMI_GUID_DISCONNECTED + ERROR_WMI_GUID_DISCONNECTED + + + + No documentation. + + + ERROR_WMI_SERVER_UNAVAILABLE + ERROR_WMI_SERVER_UNAVAILABLE + + + + No documentation. + + + ERROR_WMI_DP_FAILED + ERROR_WMI_DP_FAILED + + + + No documentation. + + + ERROR_WMI_INVALID_MOF + ERROR_WMI_INVALID_MOF + + + + No documentation. + + + ERROR_WMI_INVALID_REGINFO + ERROR_WMI_INVALID_REGINFO + + + + No documentation. + + + ERROR_WMI_ALREADY_DISABLED + ERROR_WMI_ALREADY_DISABLED + + + + No documentation. + + + ERROR_WMI_READ_ONLY + ERROR_WMI_READ_ONLY + + + + No documentation. + + + ERROR_WMI_SET_FAILURE + ERROR_WMI_SET_FAILURE + + + + No documentation. + + + ERROR_NOT_APPCONTAINER + ERROR_NOT_APPCONTAINER + + + + No documentation. + + + ERROR_APPCONTAINER_REQUIRED + ERROR_APPCONTAINER_REQUIRED + + + + No documentation. + + + ERROR_NOT_SUPPORTED_IN_APPCONTAINER + ERROR_NOT_SUPPORTED_IN_APPCONTAINER + + + + No documentation. + + + ERROR_INVALID_PACKAGE_SID_LENGTH + ERROR_INVALID_PACKAGE_SID_LENGTH + + + + No documentation. + + + ERROR_INVALID_MEDIA + ERROR_INVALID_MEDIA + + + + No documentation. + + + ERROR_INVALID_LIBRARY + ERROR_INVALID_LIBRARY + + + + No documentation. + + + ERROR_INVALID_MEDIA_POOL + ERROR_INVALID_MEDIA_POOL + + + + No documentation. + + + ERROR_DRIVE_MEDIA_MISMATCH + ERROR_DRIVE_MEDIA_MISMATCH + + + + No documentation. + + + ERROR_MEDIA_OFFLINE + ERROR_MEDIA_OFFLINE + + + + No documentation. + + + ERROR_LIBRARY_OFFLINE + ERROR_LIBRARY_OFFLINE + + + + No documentation. + + + ERROR_EMPTY + ERROR_EMPTY + + + + No documentation. + + + ERROR_NOT_EMPTY + ERROR_NOT_EMPTY + + + + No documentation. + + + ERROR_MEDIA_UNAVAILABLE + ERROR_MEDIA_UNAVAILABLE + + + + No documentation. + + + ERROR_RESOURCE_DISABLED + ERROR_RESOURCE_DISABLED + + + + No documentation. + + + ERROR_INVALID_CLEANER + ERROR_INVALID_CLEANER + + + + No documentation. + + + ERROR_UNABLE_TO_CLEAN + ERROR_UNABLE_TO_CLEAN + + + + No documentation. + + + ERROR_OBJECT_NOT_FOUND + ERROR_OBJECT_NOT_FOUND + + + + No documentation. + + + ERROR_DATABASE_FAILURE + ERROR_DATABASE_FAILURE + + + + No documentation. + + + ERROR_DATABASE_FULL + ERROR_DATABASE_FULL + + + + No documentation. + + + ERROR_MEDIA_INCOMPATIBLE + ERROR_MEDIA_INCOMPATIBLE + + + + No documentation. + + + ERROR_RESOURCE_NOT_PRESENT + ERROR_RESOURCE_NOT_PRESENT + + + + No documentation. + + + ERROR_INVALID_OPERATION + ERROR_INVALID_OPERATION + + + + No documentation. + + + ERROR_MEDIA_NOT_AVAILABLE + ERROR_MEDIA_NOT_AVAILABLE + + + + No documentation. + + + ERROR_DEVICE_NOT_AVAILABLE + ERROR_DEVICE_NOT_AVAILABLE + + + + No documentation. + + + ERROR_REQUEST_REFUSED + ERROR_REQUEST_REFUSED + + + + No documentation. + + + ERROR_INVALID_DRIVE_OBJECT + ERROR_INVALID_DRIVE_OBJECT + + + + No documentation. + + + ERROR_LIBRARY_FULL + ERROR_LIBRARY_FULL + + + + No documentation. + + + ERROR_MEDIUM_NOT_ACCESSIBLE + ERROR_MEDIUM_NOT_ACCESSIBLE + + + + No documentation. + + + ERROR_UNABLE_TO_LOAD_MEDIUM + ERROR_UNABLE_TO_LOAD_MEDIUM + + + + No documentation. + + + ERROR_UNABLE_TO_INVENTORY_DRIVE + ERROR_UNABLE_TO_INVENTORY_DRIVE + + + + No documentation. + + + ERROR_UNABLE_TO_INVENTORY_SLOT + ERROR_UNABLE_TO_INVENTORY_SLOT + + + + No documentation. + + + ERROR_UNABLE_TO_INVENTORY_TRANSPORT + ERROR_UNABLE_TO_INVENTORY_TRANSPORT + + + + No documentation. + + + ERROR_TRANSPORT_FULL + ERROR_TRANSPORT_FULL + + + + No documentation. + + + ERROR_CONTROLLING_IEPORT + ERROR_CONTROLLING_IEPORT + + + + No documentation. + + + ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA + ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA + + + + No documentation. + + + ERROR_CLEANER_SLOT_SET + ERROR_CLEANER_SLOT_SET + + + + No documentation. + + + ERROR_CLEANER_SLOT_NOT_SET + ERROR_CLEANER_SLOT_NOT_SET + + + + No documentation. + + + ERROR_CLEANER_CARTRIDGE_SPENT + ERROR_CLEANER_CARTRIDGE_SPENT + + + + No documentation. + + + ERROR_UNEXPECTED_OMID + ERROR_UNEXPECTED_OMID + + + + No documentation. + + + ERROR_CANT_DELETE_LAST_ITEM + ERROR_CANT_DELETE_LAST_ITEM + + + + No documentation. + + + ERROR_MESSAGE_EXCEEDS_MAX_SIZE + ERROR_MESSAGE_EXCEEDS_MAX_SIZE + + + + No documentation. + + + ERROR_VOLUME_CONTAINS_SYS_FILES + ERROR_VOLUME_CONTAINS_SYS_FILES + + + + No documentation. + + + ERROR_INDIGENOUS_TYPE + ERROR_INDIGENOUS_TYPE + + + + No documentation. + + + ERROR_NO_SUPPORTING_DRIVES + ERROR_NO_SUPPORTING_DRIVES + + + + No documentation. + + + ERROR_CLEANER_CARTRIDGE_INSTALLED + ERROR_CLEANER_CARTRIDGE_INSTALLED + + + + No documentation. + + + ERROR_IEPORT_FULL + ERROR_IEPORT_FULL + + + + No documentation. + + + ERROR_FILE_OFFLINE + ERROR_FILE_OFFLINE + + + + No documentation. + + + ERROR_REMOTE_STORAGE_NOT_ACTIVE + ERROR_REMOTE_STORAGE_NOT_ACTIVE + + + + No documentation. + + + ERROR_REMOTE_STORAGE_MEDIA_ERROR + ERROR_REMOTE_STORAGE_MEDIA_ERROR + + + + No documentation. + + + ERROR_NOT_A_REPARSE_POINT + ERROR_NOT_A_REPARSE_POINT + + + + No documentation. + + + ERROR_REPARSE_ATTRIBUTE_CONFLICT + ERROR_REPARSE_ATTRIBUTE_CONFLICT + + + + No documentation. + + + ERROR_INVALID_REPARSE_DATA + ERROR_INVALID_REPARSE_DATA + + + + No documentation. + + + ERROR_REPARSE_TAG_INVALID + ERROR_REPARSE_TAG_INVALID + + + + No documentation. + + + ERROR_REPARSE_TAG_MISMATCH + ERROR_REPARSE_TAG_MISMATCH + + + + No documentation. + + + ERROR_REPARSE_POINT_ENCOUNTERED + ERROR_REPARSE_POINT_ENCOUNTERED + + + + No documentation. + + + ERROR_APP_DATA_NOT_FOUND + ERROR_APP_DATA_NOT_FOUND + + + + No documentation. + + + ERROR_APP_DATA_EXPIRED + ERROR_APP_DATA_EXPIRED + + + + No documentation. + + + ERROR_APP_DATA_CORRUPT + ERROR_APP_DATA_CORRUPT + + + + No documentation. + + + ERROR_APP_DATA_LIMIT_EXCEEDED + ERROR_APP_DATA_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_APP_DATA_REBOOT_REQUIRED + ERROR_APP_DATA_REBOOT_REQUIRED + + + + No documentation. + + + ERROR_SECUREBOOT_ROLLBACK_DETECTED + ERROR_SECUREBOOT_ROLLBACK_DETECTED + + + + No documentation. + + + ERROR_SECUREBOOT_POLICY_VIOLATION + ERROR_SECUREBOOT_POLICY_VIOLATION + + + + No documentation. + + + ERROR_SECUREBOOT_INVALID_POLICY + ERROR_SECUREBOOT_INVALID_POLICY + + + + No documentation. + + + ERROR_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND + ERROR_SECUREBOOT_POLICY_PUBLISHER_NOT_FOUND + + + + No documentation. + + + ERROR_SECUREBOOT_POLICY_NOT_SIGNED + ERROR_SECUREBOOT_POLICY_NOT_SIGNED + + + + No documentation. + + + ERROR_SECUREBOOT_NOT_ENABLED + ERROR_SECUREBOOT_NOT_ENABLED + + + + No documentation. + + + ERROR_SECUREBOOT_FILE_REPLACED + ERROR_SECUREBOOT_FILE_REPLACED + + + + No documentation. + + + ERROR_SECUREBOOT_POLICY_NOT_AUTHORIZED + ERROR_SECUREBOOT_POLICY_NOT_AUTHORIZED + + + + No documentation. + + + ERROR_SECUREBOOT_POLICY_UNKNOWN + ERROR_SECUREBOOT_POLICY_UNKNOWN + + + + No documentation. + + + ERROR_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION + ERROR_SECUREBOOT_POLICY_MISSING_ANTIROLLBACKVERSION + + + + No documentation. + + + ERROR_SECUREBOOT_PLATFORM_ID_MISMATCH + ERROR_SECUREBOOT_PLATFORM_ID_MISMATCH + + + + No documentation. + + + ERROR_SECUREBOOT_POLICY_ROLLBACK_DETECTED + ERROR_SECUREBOOT_POLICY_ROLLBACK_DETECTED + + + + No documentation. + + + ERROR_SECUREBOOT_POLICY_UPGRADE_MISMATCH + ERROR_SECUREBOOT_POLICY_UPGRADE_MISMATCH + + + + No documentation. + + + ERROR_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING + ERROR_SECUREBOOT_REQUIRED_POLICY_FILE_MISSING + + + + No documentation. + + + ERROR_SECUREBOOT_NOT_BASE_POLICY + ERROR_SECUREBOOT_NOT_BASE_POLICY + + + + No documentation. + + + ERROR_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY + ERROR_SECUREBOOT_NOT_SUPPLEMENTAL_POLICY + + + + No documentation. + + + ERROR_OFFLOAD_READ_FLT_NOT_SUPPORTED + ERROR_OFFLOAD_READ_FLT_NOT_SUPPORTED + + + + No documentation. + + + ERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED + ERROR_OFFLOAD_WRITE_FLT_NOT_SUPPORTED + + + + No documentation. + + + ERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED + ERROR_OFFLOAD_READ_FILE_NOT_SUPPORTED + + + + No documentation. + + + ERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED + ERROR_OFFLOAD_WRITE_FILE_NOT_SUPPORTED + + + + No documentation. + + + ERROR_ALREADY_HAS_STREAM_ID + ERROR_ALREADY_HAS_STREAM_ID + + + + No documentation. + + + ERROR_VOLUME_NOT_SIS_ENABLED + ERROR_VOLUME_NOT_SIS_ENABLED + + + + No documentation. + + + ERROR_SYSTEM_INTEGRITY_ROLLBACK_DETECTED + ERROR_SYSTEM_INTEGRITY_ROLLBACK_DETECTED + + + + No documentation. + + + ERROR_SYSTEM_INTEGRITY_POLICY_VIOLATION + ERROR_SYSTEM_INTEGRITY_POLICY_VIOLATION + + + + No documentation. + + + ERROR_SYSTEM_INTEGRITY_INVALID_POLICY + ERROR_SYSTEM_INTEGRITY_INVALID_POLICY + + + + No documentation. + + + ERROR_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED + ERROR_SYSTEM_INTEGRITY_POLICY_NOT_SIGNED + + + + No documentation. + + + ERROR_VSM_NOT_INITIALIZED + ERROR_VSM_NOT_INITIALIZED + + + + No documentation. + + + ERROR_VSM_DMA_PROTECTION_NOT_IN_USE + ERROR_VSM_DMA_PROTECTION_NOT_IN_USE + + + + No documentation. + + + ERROR_PLATFORM_MANIFEST_NOT_AUTHORIZED + ERROR_PLATFORM_MANIFEST_NOT_AUTHORIZED + + + + No documentation. + + + ERROR_PLATFORM_MANIFEST_INVALID + ERROR_PLATFORM_MANIFEST_INVALID + + + + No documentation. + + + ERROR_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED + ERROR_PLATFORM_MANIFEST_FILE_NOT_AUTHORIZED + + + + No documentation. + + + ERROR_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED + ERROR_PLATFORM_MANIFEST_CATALOG_NOT_AUTHORIZED + + + + No documentation. + + + ERROR_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND + ERROR_PLATFORM_MANIFEST_BINARY_ID_NOT_FOUND + + + + No documentation. + + + ERROR_PLATFORM_MANIFEST_NOT_ACTIVE + ERROR_PLATFORM_MANIFEST_NOT_ACTIVE + + + + No documentation. + + + ERROR_PLATFORM_MANIFEST_NOT_SIGNED + ERROR_PLATFORM_MANIFEST_NOT_SIGNED + + + + No documentation. + + + ERROR_DEPENDENT_RESOURCE_EXISTS + ERROR_DEPENDENT_RESOURCE_EXISTS + + + + No documentation. + + + ERROR_DEPENDENCY_NOT_FOUND + ERROR_DEPENDENCY_NOT_FOUND + + + + No documentation. + + + ERROR_DEPENDENCY_ALREADY_EXISTS + ERROR_DEPENDENCY_ALREADY_EXISTS + + + + No documentation. + + + ERROR_RESOURCE_NOT_ONLINE + ERROR_RESOURCE_NOT_ONLINE + + + + No documentation. + + + ERROR_HOST_NODE_NOT_AVAILABLE + ERROR_HOST_NODE_NOT_AVAILABLE + + + + No documentation. + + + ERROR_RESOURCE_NOT_AVAILABLE + ERROR_RESOURCE_NOT_AVAILABLE + + + + No documentation. + + + ERROR_RESOURCE_NOT_FOUND + ERROR_RESOURCE_NOT_FOUND + + + + No documentation. + + + ERROR_SHUTDOWN_CLUSTER + ERROR_SHUTDOWN_CLUSTER + + + + No documentation. + + + ERROR_CANT_EVICT_ACTIVE_NODE + ERROR_CANT_EVICT_ACTIVE_NODE + + + + No documentation. + + + ERROR_OBJECT_ALREADY_EXISTS + ERROR_OBJECT_ALREADY_EXISTS + + + + No documentation. + + + ERROR_OBJECT_IN_LIST + ERROR_OBJECT_IN_LIST + + + + No documentation. + + + ERROR_GROUP_NOT_AVAILABLE + ERROR_GROUP_NOT_AVAILABLE + + + + No documentation. + + + ERROR_GROUP_NOT_FOUND + ERROR_GROUP_NOT_FOUND + + + + No documentation. + + + ERROR_GROUP_NOT_ONLINE + ERROR_GROUP_NOT_ONLINE + + + + No documentation. + + + ERROR_HOST_NODE_NOT_RESOURCE_OWNER + ERROR_HOST_NODE_NOT_RESOURCE_OWNER + + + + No documentation. + + + ERROR_HOST_NODE_NOT_GROUP_OWNER + ERROR_HOST_NODE_NOT_GROUP_OWNER + + + + No documentation. + + + ERROR_RESMON_CREATE_FAILED + ERROR_RESMON_CREATE_FAILED + + + + No documentation. + + + ERROR_RESMON_ONLINE_FAILED + ERROR_RESMON_ONLINE_FAILED + + + + No documentation. + + + ERROR_RESOURCE_ONLINE + ERROR_RESOURCE_ONLINE + + + + No documentation. + + + ERROR_QUORUM_RESOURCE + ERROR_QUORUM_RESOURCE + + + + No documentation. + + + ERROR_NOT_QUORUM_CAPABLE + ERROR_NOT_QUORUM_CAPABLE + + + + No documentation. + + + ERROR_CLUSTER_SHUTTING_DOWN + ERROR_CLUSTER_SHUTTING_DOWN + + + + No documentation. + + + ERROR_INVALID_STATE + ERROR_INVALID_STATE + + + + No documentation. + + + ERROR_RESOURCE_PROPERTIES_STORED + ERROR_RESOURCE_PROPERTIES_STORED + + + + No documentation. + + + ERROR_NOT_QUORUM_CLASS + ERROR_NOT_QUORUM_CLASS + + + + No documentation. + + + ERROR_CORE_RESOURCE + ERROR_CORE_RESOURCE + + + + No documentation. + + + ERROR_QUORUM_RESOURCE_ONLINE_FAILED + ERROR_QUORUM_RESOURCE_ONLINE_FAILED + + + + No documentation. + + + ERROR_QUORUMLOG_OPEN_FAILED + ERROR_QUORUMLOG_OPEN_FAILED + + + + No documentation. + + + ERROR_CLUSTERLOG_CORRUPT + ERROR_CLUSTERLOG_CORRUPT + + + + No documentation. + + + ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE + ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE + + + + No documentation. + + + ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE + ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE + + + + No documentation. + + + ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND + ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND + + + + No documentation. + + + ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE + ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE + + + + No documentation. + + + ERROR_QUORUM_OWNER_ALIVE + ERROR_QUORUM_OWNER_ALIVE + + + + No documentation. + + + ERROR_NETWORK_NOT_AVAILABLE + ERROR_NETWORK_NOT_AVAILABLE + + + + No documentation. + + + ERROR_NODE_NOT_AVAILABLE + ERROR_NODE_NOT_AVAILABLE + + + + No documentation. + + + ERROR_ALL_NODES_NOT_AVAILABLE + ERROR_ALL_NODES_NOT_AVAILABLE + + + + No documentation. + + + ERROR_RESOURCE_FAILED + ERROR_RESOURCE_FAILED + + + + No documentation. + + + ERROR_CLUSTER_INVALID_NODE + ERROR_CLUSTER_INVALID_NODE + + + + No documentation. + + + ERROR_CLUSTER_NODE_EXISTS + ERROR_CLUSTER_NODE_EXISTS + + + + No documentation. + + + ERROR_CLUSTER_JOIN_IN_PROGRESS + ERROR_CLUSTER_JOIN_IN_PROGRESS + + + + No documentation. + + + ERROR_CLUSTER_NODE_NOT_FOUND + ERROR_CLUSTER_NODE_NOT_FOUND + + + + No documentation. + + + ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND + ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND + + + + No documentation. + + + ERROR_CLUSTER_NETWORK_EXISTS + ERROR_CLUSTER_NETWORK_EXISTS + + + + No documentation. + + + ERROR_CLUSTER_NETWORK_NOT_FOUND + ERROR_CLUSTER_NETWORK_NOT_FOUND + + + + No documentation. + + + ERROR_CLUSTER_NETINTERFACE_EXISTS + ERROR_CLUSTER_NETINTERFACE_EXISTS + + + + No documentation. + + + ERROR_CLUSTER_NETINTERFACE_NOT_FOUND + ERROR_CLUSTER_NETINTERFACE_NOT_FOUND + + + + No documentation. + + + ERROR_CLUSTER_INVALID_REQUEST + ERROR_CLUSTER_INVALID_REQUEST + + + + No documentation. + + + ERROR_CLUSTER_INVALID_NETWORK_PROVIDER + ERROR_CLUSTER_INVALID_NETWORK_PROVIDER + + + + No documentation. + + + ERROR_CLUSTER_NODE_DOWN + ERROR_CLUSTER_NODE_DOWN + + + + No documentation. + + + ERROR_CLUSTER_NODE_UNREACHABLE + ERROR_CLUSTER_NODE_UNREACHABLE + + + + No documentation. + + + ERROR_CLUSTER_NODE_NOT_MEMBER + ERROR_CLUSTER_NODE_NOT_MEMBER + + + + No documentation. + + + ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS + ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS + + + + No documentation. + + + ERROR_CLUSTER_INVALID_NETWORK + ERROR_CLUSTER_INVALID_NETWORK + + + + No documentation. + + + ERROR_CLUSTER_NODE_UP + ERROR_CLUSTER_NODE_UP + + + + No documentation. + + + ERROR_CLUSTER_IPADDR_IN_USE + ERROR_CLUSTER_IPADDR_IN_USE + + + + No documentation. + + + ERROR_CLUSTER_NODE_NOT_PAUSED + ERROR_CLUSTER_NODE_NOT_PAUSED + + + + No documentation. + + + ERROR_CLUSTER_NO_SECURITY_CONTEXT + ERROR_CLUSTER_NO_SECURITY_CONTEXT + + + + No documentation. + + + ERROR_CLUSTER_NETWORK_NOT_INTERNAL + ERROR_CLUSTER_NETWORK_NOT_INTERNAL + + + + No documentation. + + + ERROR_CLUSTER_NODE_ALREADY_UP + ERROR_CLUSTER_NODE_ALREADY_UP + + + + No documentation. + + + ERROR_CLUSTER_NODE_ALREADY_DOWN + ERROR_CLUSTER_NODE_ALREADY_DOWN + + + + No documentation. + + + ERROR_CLUSTER_NETWORK_ALREADY_ONLINE + ERROR_CLUSTER_NETWORK_ALREADY_ONLINE + + + + No documentation. + + + ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE + ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE + + + + No documentation. + + + ERROR_CLUSTER_NODE_ALREADY_MEMBER + ERROR_CLUSTER_NODE_ALREADY_MEMBER + + + + No documentation. + + + ERROR_CLUSTER_LAST_INTERNAL_NETWORK + ERROR_CLUSTER_LAST_INTERNAL_NETWORK + + + + No documentation. + + + ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS + ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS + + + + No documentation. + + + ERROR_INVALID_OPERATION_ON_QUORUM + ERROR_INVALID_OPERATION_ON_QUORUM + + + + No documentation. + + + ERROR_DEPENDENCY_NOT_ALLOWED + ERROR_DEPENDENCY_NOT_ALLOWED + + + + No documentation. + + + ERROR_CLUSTER_NODE_PAUSED + ERROR_CLUSTER_NODE_PAUSED + + + + No documentation. + + + ERROR_NODE_CANT_HOST_RESOURCE + ERROR_NODE_CANT_HOST_RESOURCE + + + + No documentation. + + + ERROR_CLUSTER_NODE_NOT_READY + ERROR_CLUSTER_NODE_NOT_READY + + + + No documentation. + + + ERROR_CLUSTER_NODE_SHUTTING_DOWN + ERROR_CLUSTER_NODE_SHUTTING_DOWN + + + + No documentation. + + + ERROR_CLUSTER_JOIN_ABORTED + ERROR_CLUSTER_JOIN_ABORTED + + + + No documentation. + + + ERROR_CLUSTER_INCOMPATIBLE_VERSIONS + ERROR_CLUSTER_INCOMPATIBLE_VERSIONS + + + + No documentation. + + + ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED + ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED + + + + No documentation. + + + ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED + ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND + ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND + + + + No documentation. + + + ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED + ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED + + + + No documentation. + + + ERROR_CLUSTER_RESNAME_NOT_FOUND + ERROR_CLUSTER_RESNAME_NOT_FOUND + + + + No documentation. + + + ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED + ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED + + + + No documentation. + + + ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST + ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST + + + + No documentation. + + + ERROR_CLUSTER_DATABASE_SEQMISMATCH + ERROR_CLUSTER_DATABASE_SEQMISMATCH + + + + No documentation. + + + ERROR_RESMON_INVALID_STATE + ERROR_RESMON_INVALID_STATE + + + + No documentation. + + + ERROR_CLUSTER_GUM_NOT_LOCKER + ERROR_CLUSTER_GUM_NOT_LOCKER + + + + No documentation. + + + ERROR_QUORUM_DISK_NOT_FOUND + ERROR_QUORUM_DISK_NOT_FOUND + + + + No documentation. + + + ERROR_DATABASE_BACKUP_CORRUPT + ERROR_DATABASE_BACKUP_CORRUPT + + + + No documentation. + + + ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT + ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT + + + + No documentation. + + + ERROR_RESOURCE_PROPERTY_UNCHANGEABLE + ERROR_RESOURCE_PROPERTY_UNCHANGEABLE + + + + No documentation. + + + ERROR_NO_ADMIN_ACCESS_POINT + ERROR_NO_ADMIN_ACCESS_POINT + + + + No documentation. + + + ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE + ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE + + + + No documentation. + + + ERROR_CLUSTER_QUORUMLOG_NOT_FOUND + ERROR_CLUSTER_QUORUMLOG_NOT_FOUND + + + + No documentation. + + + ERROR_CLUSTER_MEMBERSHIP_HALT + ERROR_CLUSTER_MEMBERSHIP_HALT + + + + No documentation. + + + ERROR_CLUSTER_INSTANCE_ID_MISMATCH + ERROR_CLUSTER_INSTANCE_ID_MISMATCH + + + + No documentation. + + + ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP + ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP + + + + No documentation. + + + ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH + ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH + + + + No documentation. + + + ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP + ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP + + + + No documentation. + + + ERROR_CLUSTER_PARAMETER_MISMATCH + ERROR_CLUSTER_PARAMETER_MISMATCH + + + + No documentation. + + + ERROR_NODE_CANNOT_BE_CLUSTERED + ERROR_NODE_CANNOT_BE_CLUSTERED + + + + No documentation. + + + ERROR_CLUSTER_WRONG_OS_VERSION + ERROR_CLUSTER_WRONG_OS_VERSION + + + + No documentation. + + + ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME + ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME + + + + No documentation. + + + ERROR_CLUSCFG_ALREADY_COMMITTED + ERROR_CLUSCFG_ALREADY_COMMITTED + + + + No documentation. + + + ERROR_CLUSCFG_ROLLBACK_FAILED + ERROR_CLUSCFG_ROLLBACK_FAILED + + + + No documentation. + + + ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT + ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT + + + + No documentation. + + + ERROR_CLUSTER_OLD_VERSION + ERROR_CLUSTER_OLD_VERSION + + + + No documentation. + + + ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME + ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME + + + + No documentation. + + + ERROR_CLUSTER_NO_NET_ADAPTERS + ERROR_CLUSTER_NO_NET_ADAPTERS + + + + No documentation. + + + ERROR_CLUSTER_POISONED + ERROR_CLUSTER_POISONED + + + + No documentation. + + + ERROR_CLUSTER_GROUP_MOVING + ERROR_CLUSTER_GROUP_MOVING + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_TYPE_BUSY + ERROR_CLUSTER_RESOURCE_TYPE_BUSY + + + + No documentation. + + + ERROR_RESOURCE_CALL_TIMED_OUT + ERROR_RESOURCE_CALL_TIMED_OUT + + + + No documentation. + + + ERROR_INVALID_CLUSTER_IPV6_ADDRESS + ERROR_INVALID_CLUSTER_IPV6_ADDRESS + + + + No documentation. + + + ERROR_CLUSTER_INTERNAL_INVALID_FUNCTION + ERROR_CLUSTER_INTERNAL_INVALID_FUNCTION + + + + No documentation. + + + ERROR_CLUSTER_PARAMETER_OUT_OF_BOUNDS + ERROR_CLUSTER_PARAMETER_OUT_OF_BOUNDS + + + + No documentation. + + + ERROR_CLUSTER_PARTIAL_SEND + ERROR_CLUSTER_PARTIAL_SEND + + + + No documentation. + + + ERROR_CLUSTER_REGISTRY_INVALID_FUNCTION + ERROR_CLUSTER_REGISTRY_INVALID_FUNCTION + + + + No documentation. + + + ERROR_CLUSTER_INVALID_STRING_TERMINATION + ERROR_CLUSTER_INVALID_STRING_TERMINATION + + + + No documentation. + + + ERROR_CLUSTER_INVALID_STRING_FORMAT + ERROR_CLUSTER_INVALID_STRING_FORMAT + + + + No documentation. + + + ERROR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS + ERROR_CLUSTER_DATABASE_TRANSACTION_IN_PROGRESS + + + + No documentation. + + + ERROR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS + ERROR_CLUSTER_DATABASE_TRANSACTION_NOT_IN_PROGRESS + + + + No documentation. + + + ERROR_CLUSTER_NULL_DATA + ERROR_CLUSTER_NULL_DATA + + + + No documentation. + + + ERROR_CLUSTER_PARTIAL_READ + ERROR_CLUSTER_PARTIAL_READ + + + + No documentation. + + + ERROR_CLUSTER_PARTIAL_WRITE + ERROR_CLUSTER_PARTIAL_WRITE + + + + No documentation. + + + ERROR_CLUSTER_CANT_DESERIALIZE_DATA + ERROR_CLUSTER_CANT_DESERIALIZE_DATA + + + + No documentation. + + + ERROR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT + ERROR_DEPENDENT_RESOURCE_PROPERTY_CONFLICT + + + + No documentation. + + + ERROR_CLUSTER_NO_QUORUM + ERROR_CLUSTER_NO_QUORUM + + + + No documentation. + + + ERROR_CLUSTER_INVALID_IPV6_NETWORK + ERROR_CLUSTER_INVALID_IPV6_NETWORK + + + + No documentation. + + + ERROR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK + ERROR_CLUSTER_INVALID_IPV6_TUNNEL_NETWORK + + + + No documentation. + + + ERROR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP + ERROR_QUORUM_NOT_ALLOWED_IN_THIS_GROUP + + + + No documentation. + + + ERROR_DEPENDENCY_TREE_TOO_COMPLEX + ERROR_DEPENDENCY_TREE_TOO_COMPLEX + + + + No documentation. + + + ERROR_EXCEPTION_IN_RESOURCE_CALL + ERROR_EXCEPTION_IN_RESOURCE_CALL + + + + No documentation. + + + ERROR_CLUSTER_RHS_FAILED_INITIALIZATION + ERROR_CLUSTER_RHS_FAILED_INITIALIZATION + + + + No documentation. + + + ERROR_CLUSTER_NOT_INSTALLED + ERROR_CLUSTER_NOT_INSTALLED + + + + No documentation. + + + ERROR_CLUSTER_RESOURCES_MUST_BE_ONLINE_ON_THE_SAME_NODE + ERROR_CLUSTER_RESOURCES_MUST_BE_ONLINE_ON_THE_SAME_NODE + + + + No documentation. + + + ERROR_CLUSTER_MAX_NODES_IN_CLUSTER + ERROR_CLUSTER_MAX_NODES_IN_CLUSTER + + + + No documentation. + + + ERROR_CLUSTER_TOO_MANY_NODES + ERROR_CLUSTER_TOO_MANY_NODES + + + + No documentation. + + + ERROR_CLUSTER_OBJECT_ALREADY_USED + ERROR_CLUSTER_OBJECT_ALREADY_USED + + + + No documentation. + + + ERROR_NONCORE_GROUPS_FOUND + ERROR_NONCORE_GROUPS_FOUND + + + + No documentation. + + + ERROR_FILE_SHARE_RESOURCE_CONFLICT + ERROR_FILE_SHARE_RESOURCE_CONFLICT + + + + No documentation. + + + ERROR_CLUSTER_EVICT_INVALID_REQUEST + ERROR_CLUSTER_EVICT_INVALID_REQUEST + + + + No documentation. + + + ERROR_CLUSTER_SINGLETON_RESOURCE + ERROR_CLUSTER_SINGLETON_RESOURCE + + + + No documentation. + + + ERROR_CLUSTER_GROUP_SINGLETON_RESOURCE + ERROR_CLUSTER_GROUP_SINGLETON_RESOURCE + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_PROVIDER_FAILED + ERROR_CLUSTER_RESOURCE_PROVIDER_FAILED + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_CONFIGURATION_ERROR + ERROR_CLUSTER_RESOURCE_CONFIGURATION_ERROR + + + + No documentation. + + + ERROR_CLUSTER_GROUP_BUSY + ERROR_CLUSTER_GROUP_BUSY + + + + No documentation. + + + ERROR_CLUSTER_NOT_SHARED_VOLUME + ERROR_CLUSTER_NOT_SHARED_VOLUME + + + + No documentation. + + + ERROR_CLUSTER_INVALID_SECURITY_DESCRIPTOR + ERROR_CLUSTER_INVALID_SECURITY_DESCRIPTOR + + + + No documentation. + + + ERROR_CLUSTER_SHARED_VOLUMES_IN_USE + ERROR_CLUSTER_SHARED_VOLUMES_IN_USE + + + + No documentation. + + + ERROR_CLUSTER_USE_SHARED_VOLUMES_API + ERROR_CLUSTER_USE_SHARED_VOLUMES_API + + + + No documentation. + + + ERROR_CLUSTER_BACKUP_IN_PROGRESS + ERROR_CLUSTER_BACKUP_IN_PROGRESS + + + + No documentation. + + + ERROR_NON_CSV_PATH + ERROR_NON_CSV_PATH + + + + No documentation. + + + ERROR_CSV_VOLUME_NOT_LOCAL + ERROR_CSV_VOLUME_NOT_LOCAL + + + + No documentation. + + + ERROR_CLUSTER_WATCHDOG_TERMINATING + ERROR_CLUSTER_WATCHDOG_TERMINATING + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_INCOMPATIBLE_NODES + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_INCOMPATIBLE_NODES + + + + No documentation. + + + ERROR_CLUSTER_INVALID_NODE_WEIGHT + ERROR_CLUSTER_INVALID_NODE_WEIGHT + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_VETOED_CALL + ERROR_CLUSTER_RESOURCE_VETOED_CALL + + + + No documentation. + + + ERROR_RESMON_SYSTEM_RESOURCES_LACKING + ERROR_RESMON_SYSTEM_RESOURCES_LACKING + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_DESTINATION + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_DESTINATION + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_SOURCE + ERROR_CLUSTER_RESOURCE_VETOED_MOVE_NOT_ENOUGH_RESOURCES_ON_SOURCE + + + + No documentation. + + + ERROR_CLUSTER_GROUP_QUEUED + ERROR_CLUSTER_GROUP_QUEUED + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_LOCKED_STATUS + ERROR_CLUSTER_RESOURCE_LOCKED_STATUS + + + + No documentation. + + + ERROR_CLUSTER_SHARED_VOLUME_FAILOVER_NOT_ALLOWED + ERROR_CLUSTER_SHARED_VOLUME_FAILOVER_NOT_ALLOWED + + + + No documentation. + + + ERROR_CLUSTER_NODE_DRAIN_IN_PROGRESS + ERROR_CLUSTER_NODE_DRAIN_IN_PROGRESS + + + + No documentation. + + + ERROR_CLUSTER_DISK_NOT_CONNECTED + ERROR_CLUSTER_DISK_NOT_CONNECTED + + + + No documentation. + + + ERROR_DISK_NOT_CSV_CAPABLE + ERROR_DISK_NOT_CSV_CAPABLE + + + + No documentation. + + + ERROR_RESOURCE_NOT_IN_AVAILABLE_STORAGE + ERROR_RESOURCE_NOT_IN_AVAILABLE_STORAGE + + + + No documentation. + + + ERROR_CLUSTER_SHARED_VOLUME_REDIRECTED + ERROR_CLUSTER_SHARED_VOLUME_REDIRECTED + + + + No documentation. + + + ERROR_CLUSTER_SHARED_VOLUME_NOT_REDIRECTED + ERROR_CLUSTER_SHARED_VOLUME_NOT_REDIRECTED + + + + No documentation. + + + ERROR_CLUSTER_CANNOT_RETURN_PROPERTIES + ERROR_CLUSTER_CANNOT_RETURN_PROPERTIES + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_CONTAINS_UNSUPPORTED_DIFF_AREA_FOR_SHARED_VOLUMES + ERROR_CLUSTER_RESOURCE_CONTAINS_UNSUPPORTED_DIFF_AREA_FOR_SHARED_VOLUMES + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_IS_IN_MAINTENANCE_MODE + ERROR_CLUSTER_RESOURCE_IS_IN_MAINTENANCE_MODE + + + + No documentation. + + + ERROR_CLUSTER_AFFINITY_CONFLICT + ERROR_CLUSTER_AFFINITY_CONFLICT + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_IS_REPLICA_VIRTUAL_MACHINE + ERROR_CLUSTER_RESOURCE_IS_REPLICA_VIRTUAL_MACHINE + + + + No documentation. + + + ERROR_CLUSTER_UPGRADE_INCOMPATIBLE_VERSIONS + ERROR_CLUSTER_UPGRADE_INCOMPATIBLE_VERSIONS + + + + No documentation. + + + ERROR_CLUSTER_UPGRADE_FIX_QUORUM_NOT_SUPPORTED + ERROR_CLUSTER_UPGRADE_FIX_QUORUM_NOT_SUPPORTED + + + + No documentation. + + + ERROR_CLUSTER_UPGRADE_RESTART_REQUIRED + ERROR_CLUSTER_UPGRADE_RESTART_REQUIRED + + + + No documentation. + + + ERROR_CLUSTER_UPGRADE_IN_PROGRESS + ERROR_CLUSTER_UPGRADE_IN_PROGRESS + + + + No documentation. + + + ERROR_CLUSTER_UPGRADE_INCOMPLETE + ERROR_CLUSTER_UPGRADE_INCOMPLETE + + + + No documentation. + + + ERROR_CLUSTER_NODE_IN_GRACE_PERIOD + ERROR_CLUSTER_NODE_IN_GRACE_PERIOD + + + + No documentation. + + + ERROR_CLUSTER_CSV_IO_PAUSE_TIMEOUT + ERROR_CLUSTER_CSV_IO_PAUSE_TIMEOUT + + + + No documentation. + + + ERROR_NODE_NOT_ACTIVE_CLUSTER_MEMBER + ERROR_NODE_NOT_ACTIVE_CLUSTER_MEMBER + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_NOT_MONITORED + ERROR_CLUSTER_RESOURCE_NOT_MONITORED + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_DOES_NOT_SUPPORT_UNMONITORED + ERROR_CLUSTER_RESOURCE_DOES_NOT_SUPPORT_UNMONITORED + + + + No documentation. + + + ERROR_CLUSTER_RESOURCE_IS_REPLICATED + ERROR_CLUSTER_RESOURCE_IS_REPLICATED + + + + No documentation. + + + ERROR_CLUSTER_NODE_ISOLATED + ERROR_CLUSTER_NODE_ISOLATED + + + + No documentation. + + + ERROR_CLUSTER_NODE_QUARANTINED + ERROR_CLUSTER_NODE_QUARANTINED + + + + No documentation. + + + ERROR_CLUSTER_DATABASE_UPDATE_CONDITION_FAILED + ERROR_CLUSTER_DATABASE_UPDATE_CONDITION_FAILED + + + + No documentation. + + + ERROR_CLUSTER_SPACE_DEGRADED + ERROR_CLUSTER_SPACE_DEGRADED + + + + No documentation. + + + ERROR_CLUSTER_TOKEN_DELEGATION_NOT_SUPPORTED + ERROR_CLUSTER_TOKEN_DELEGATION_NOT_SUPPORTED + + + + No documentation. + + + ERROR_CLUSTER_CSV_INVALID_HANDLE + ERROR_CLUSTER_CSV_INVALID_HANDLE + + + + No documentation. + + + ERROR_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR + ERROR_CLUSTER_CSV_SUPPORTED_ONLY_ON_COORDINATOR + + + + No documentation. + + + ERROR_GROUPSET_NOT_AVAILABLE + ERROR_GROUPSET_NOT_AVAILABLE + + + + No documentation. + + + ERROR_GROUPSET_NOT_FOUND + ERROR_GROUPSET_NOT_FOUND + + + + No documentation. + + + ERROR_GROUPSET_CANT_PROVIDE + ERROR_GROUPSET_CANT_PROVIDE + + + + No documentation. + + + ERROR_CLUSTER_FAULT_DOMAIN_PARENT_NOT_FOUND + ERROR_CLUSTER_FAULT_DOMAIN_PARENT_NOT_FOUND + + + + No documentation. + + + ERROR_CLUSTER_FAULT_DOMAIN_INVALID_HIERARCHY + ERROR_CLUSTER_FAULT_DOMAIN_INVALID_HIERARCHY + + + + No documentation. + + + ERROR_CLUSTER_FAULT_DOMAIN_FAILED_S2D_VALIDATION + ERROR_CLUSTER_FAULT_DOMAIN_FAILED_S2D_VALIDATION + + + + No documentation. + + + ERROR_CLUSTER_FAULT_DOMAIN_S2D_CONNECTIVITY_LOSS + ERROR_CLUSTER_FAULT_DOMAIN_S2D_CONNECTIVITY_LOSS + + + + No documentation. + + + ERROR_ENCRYPTION_FAILED + ERROR_ENCRYPTION_FAILED + + + + No documentation. + + + ERROR_DECRYPTION_FAILED + ERROR_DECRYPTION_FAILED + + + + No documentation. + + + ERROR_FILE_ENCRYPTED + ERROR_FILE_ENCRYPTED + + + + No documentation. + + + ERROR_NO_RECOVERY_POLICY + ERROR_NO_RECOVERY_POLICY + + + + No documentation. + + + ERROR_NO_EFS + ERROR_NO_EFS + + + + No documentation. + + + ERROR_WRONG_EFS + ERROR_WRONG_EFS + + + + No documentation. + + + ERROR_NO_USER_KEYS + ERROR_NO_USER_KEYS + + + + No documentation. + + + ERROR_FILE_NOT_ENCRYPTED + ERROR_FILE_NOT_ENCRYPTED + + + + No documentation. + + + ERROR_NOT_EXPORT_FORMAT + ERROR_NOT_EXPORT_FORMAT + + + + No documentation. + + + ERROR_FILE_READ_ONLY + ERROR_FILE_READ_ONLY + + + + No documentation. + + + ERROR_DIR_EFS_DISALLOWED + ERROR_DIR_EFS_DISALLOWED + + + + No documentation. + + + ERROR_EFS_SERVER_NOT_TRUSTED + ERROR_EFS_SERVER_NOT_TRUSTED + + + + No documentation. + + + ERROR_BAD_RECOVERY_POLICY + ERROR_BAD_RECOVERY_POLICY + + + + No documentation. + + + ERROR_EFS_ALG_BLOB_TOO_BIG + ERROR_EFS_ALG_BLOB_TOO_BIG + + + + No documentation. + + + ERROR_VOLUME_NOT_SUPPORT_EFS + ERROR_VOLUME_NOT_SUPPORT_EFS + + + + No documentation. + + + ERROR_EFS_DISABLED + ERROR_EFS_DISABLED + + + + No documentation. + + + ERROR_EFS_VERSION_NOT_SUPPORT + ERROR_EFS_VERSION_NOT_SUPPORT + + + + No documentation. + + + ERROR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE + ERROR_CS_ENCRYPTION_INVALID_SERVER_RESPONSE + + + + No documentation. + + + ERROR_CS_ENCRYPTION_UNSUPPORTED_SERVER + ERROR_CS_ENCRYPTION_UNSUPPORTED_SERVER + + + + No documentation. + + + ERROR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE + ERROR_CS_ENCRYPTION_EXISTING_ENCRYPTED_FILE + + + + No documentation. + + + ERROR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE + ERROR_CS_ENCRYPTION_NEW_ENCRYPTED_FILE + + + + No documentation. + + + ERROR_CS_ENCRYPTION_FILE_NOT_CSE + ERROR_CS_ENCRYPTION_FILE_NOT_CSE + + + + No documentation. + + + ERROR_ENCRYPTION_POLICY_DENIES_OPERATION + ERROR_ENCRYPTION_POLICY_DENIES_OPERATION + + + + No documentation. + + + ERROR_NO_BROWSER_SERVERS_FOUND + ERROR_NO_BROWSER_SERVERS_FOUND + + + + No documentation. + + + ERROR_LOG_SECTOR_INVALID + ERROR_LOG_SECTOR_INVALID + + + + No documentation. + + + ERROR_LOG_SECTOR_PARITY_INVALID + ERROR_LOG_SECTOR_PARITY_INVALID + + + + No documentation. + + + ERROR_LOG_SECTOR_REMAPPED + ERROR_LOG_SECTOR_REMAPPED + + + + No documentation. + + + ERROR_LOG_BLOCK_INCOMPLETE + ERROR_LOG_BLOCK_INCOMPLETE + + + + No documentation. + + + ERROR_LOG_INVALID_RANGE + ERROR_LOG_INVALID_RANGE + + + + No documentation. + + + ERROR_LOG_BLOCKS_EXHAUSTED + ERROR_LOG_BLOCKS_EXHAUSTED + + + + No documentation. + + + ERROR_LOG_READ_CONTEXT_INVALID + ERROR_LOG_READ_CONTEXT_INVALID + + + + No documentation. + + + ERROR_LOG_RESTART_INVALID + ERROR_LOG_RESTART_INVALID + + + + No documentation. + + + ERROR_LOG_BLOCK_VERSION + ERROR_LOG_BLOCK_VERSION + + + + No documentation. + + + ERROR_LOG_BLOCK_INVALID + ERROR_LOG_BLOCK_INVALID + + + + No documentation. + + + ERROR_LOG_READ_MODE_INVALID + ERROR_LOG_READ_MODE_INVALID + + + + No documentation. + + + ERROR_LOG_NO_RESTART + ERROR_LOG_NO_RESTART + + + + No documentation. + + + ERROR_LOG_METADATA_CORRUPT + ERROR_LOG_METADATA_CORRUPT + + + + No documentation. + + + ERROR_LOG_METADATA_INVALID + ERROR_LOG_METADATA_INVALID + + + + No documentation. + + + ERROR_LOG_METADATA_INCONSISTENT + ERROR_LOG_METADATA_INCONSISTENT + + + + No documentation. + + + ERROR_LOG_RESERVATION_INVALID + ERROR_LOG_RESERVATION_INVALID + + + + No documentation. + + + ERROR_LOG_CANT_DELETE + ERROR_LOG_CANT_DELETE + + + + No documentation. + + + ERROR_LOG_CONTAINER_LIMIT_EXCEEDED + ERROR_LOG_CONTAINER_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_LOG_START_OF_LOG + ERROR_LOG_START_OF_LOG + + + + No documentation. + + + ERROR_LOG_POLICY_ALREADY_INSTALLED + ERROR_LOG_POLICY_ALREADY_INSTALLED + + + + No documentation. + + + ERROR_LOG_POLICY_NOT_INSTALLED + ERROR_LOG_POLICY_NOT_INSTALLED + + + + No documentation. + + + ERROR_LOG_POLICY_INVALID + ERROR_LOG_POLICY_INVALID + + + + No documentation. + + + ERROR_LOG_POLICY_CONFLICT + ERROR_LOG_POLICY_CONFLICT + + + + No documentation. + + + ERROR_LOG_PINNED_ARCHIVE_TAIL + ERROR_LOG_PINNED_ARCHIVE_TAIL + + + + No documentation. + + + ERROR_LOG_RECORD_NONEXISTENT + ERROR_LOG_RECORD_NONEXISTENT + + + + No documentation. + + + ERROR_LOG_RECORDS_RESERVED_INVALID + ERROR_LOG_RECORDS_RESERVED_INVALID + + + + No documentation. + + + ERROR_LOG_SPACE_RESERVED_INVALID + ERROR_LOG_SPACE_RESERVED_INVALID + + + + No documentation. + + + ERROR_LOG_TAIL_INVALID + ERROR_LOG_TAIL_INVALID + + + + No documentation. + + + ERROR_LOG_FULL + ERROR_LOG_FULL + + + + No documentation. + + + ERROR_COULD_NOT_RESIZE_LOG + ERROR_COULD_NOT_RESIZE_LOG + + + + No documentation. + + + ERROR_LOG_MULTIPLEXED + ERROR_LOG_MULTIPLEXED + + + + No documentation. + + + ERROR_LOG_DEDICATED + ERROR_LOG_DEDICATED + + + + No documentation. + + + ERROR_LOG_ARCHIVE_NOT_IN_PROGRESS + ERROR_LOG_ARCHIVE_NOT_IN_PROGRESS + + + + No documentation. + + + ERROR_LOG_ARCHIVE_IN_PROGRESS + ERROR_LOG_ARCHIVE_IN_PROGRESS + + + + No documentation. + + + ERROR_LOG_EPHEMERAL + ERROR_LOG_EPHEMERAL + + + + No documentation. + + + ERROR_LOG_NOT_ENOUGH_CONTAINERS + ERROR_LOG_NOT_ENOUGH_CONTAINERS + + + + No documentation. + + + ERROR_LOG_CLIENT_ALREADY_REGISTERED + ERROR_LOG_CLIENT_ALREADY_REGISTERED + + + + No documentation. + + + ERROR_LOG_CLIENT_NOT_REGISTERED + ERROR_LOG_CLIENT_NOT_REGISTERED + + + + No documentation. + + + ERROR_LOG_FULL_HANDLER_IN_PROGRESS + ERROR_LOG_FULL_HANDLER_IN_PROGRESS + + + + No documentation. + + + ERROR_LOG_CONTAINER_READ_FAILED + ERROR_LOG_CONTAINER_READ_FAILED + + + + No documentation. + + + ERROR_LOG_CONTAINER_WRITE_FAILED + ERROR_LOG_CONTAINER_WRITE_FAILED + + + + No documentation. + + + ERROR_LOG_CONTAINER_OPEN_FAILED + ERROR_LOG_CONTAINER_OPEN_FAILED + + + + No documentation. + + + ERROR_LOG_CONTAINER_STATE_INVALID + ERROR_LOG_CONTAINER_STATE_INVALID + + + + No documentation. + + + ERROR_LOG_STATE_INVALID + ERROR_LOG_STATE_INVALID + + + + No documentation. + + + ERROR_LOG_PINNED + ERROR_LOG_PINNED + + + + No documentation. + + + ERROR_LOG_METADATA_FLUSH_FAILED + ERROR_LOG_METADATA_FLUSH_FAILED + + + + No documentation. + + + ERROR_LOG_INCONSISTENT_SECURITY + ERROR_LOG_INCONSISTENT_SECURITY + + + + No documentation. + + + ERROR_LOG_APPENDED_FLUSH_FAILED + ERROR_LOG_APPENDED_FLUSH_FAILED + + + + No documentation. + + + ERROR_LOG_PINNED_RESERVATION + ERROR_LOG_PINNED_RESERVATION + + + + No documentation. + + + ERROR_INVALID_TRANSACTION + ERROR_INVALID_TRANSACTION + + + + No documentation. + + + ERROR_TRANSACTION_NOT_ACTIVE + ERROR_TRANSACTION_NOT_ACTIVE + + + + No documentation. + + + ERROR_TRANSACTION_REQUEST_NOT_VALID + ERROR_TRANSACTION_REQUEST_NOT_VALID + + + + No documentation. + + + ERROR_TRANSACTION_NOT_REQUESTED + ERROR_TRANSACTION_NOT_REQUESTED + + + + No documentation. + + + ERROR_TRANSACTION_ALREADY_ABORTED + ERROR_TRANSACTION_ALREADY_ABORTED + + + + No documentation. + + + ERROR_TRANSACTION_ALREADY_COMMITTED + ERROR_TRANSACTION_ALREADY_COMMITTED + + + + No documentation. + + + ERROR_TM_INITIALIZATION_FAILED + ERROR_TM_INITIALIZATION_FAILED + + + + No documentation. + + + ERROR_RESOURCEMANAGER_READ_ONLY + ERROR_RESOURCEMANAGER_READ_ONLY + + + + No documentation. + + + ERROR_TRANSACTION_NOT_JOINED + ERROR_TRANSACTION_NOT_JOINED + + + + No documentation. + + + ERROR_TRANSACTION_SUPERIOR_EXISTS + ERROR_TRANSACTION_SUPERIOR_EXISTS + + + + No documentation. + + + ERROR_CRM_PROTOCOL_ALREADY_EXISTS + ERROR_CRM_PROTOCOL_ALREADY_EXISTS + + + + No documentation. + + + ERROR_TRANSACTION_PROPAGATION_FAILED + ERROR_TRANSACTION_PROPAGATION_FAILED + + + + No documentation. + + + ERROR_CRM_PROTOCOL_NOT_FOUND + ERROR_CRM_PROTOCOL_NOT_FOUND + + + + No documentation. + + + ERROR_TRANSACTION_INVALID_MARSHALL_BUFFER + ERROR_TRANSACTION_INVALID_MARSHALL_BUFFER + + + + No documentation. + + + ERROR_CURRENT_TRANSACTION_NOT_VALID + ERROR_CURRENT_TRANSACTION_NOT_VALID + + + + No documentation. + + + ERROR_TRANSACTION_NOT_FOUND + ERROR_TRANSACTION_NOT_FOUND + + + + No documentation. + + + ERROR_RESOURCEMANAGER_NOT_FOUND + ERROR_RESOURCEMANAGER_NOT_FOUND + + + + No documentation. + + + ERROR_ENLISTMENT_NOT_FOUND + ERROR_ENLISTMENT_NOT_FOUND + + + + No documentation. + + + ERROR_TRANSACTIONMANAGER_NOT_FOUND + ERROR_TRANSACTIONMANAGER_NOT_FOUND + + + + No documentation. + + + ERROR_TRANSACTIONMANAGER_NOT_ONLINE + ERROR_TRANSACTIONMANAGER_NOT_ONLINE + + + + No documentation. + + + ERROR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION + ERROR_TRANSACTIONMANAGER_RECOVERY_NAME_COLLISION + + + + No documentation. + + + ERROR_TRANSACTION_NOT_ROOT + ERROR_TRANSACTION_NOT_ROOT + + + + No documentation. + + + ERROR_TRANSACTION_OBJECT_EXPIRED + ERROR_TRANSACTION_OBJECT_EXPIRED + + + + No documentation. + + + ERROR_TRANSACTION_RESPONSE_NOT_ENLISTED + ERROR_TRANSACTION_RESPONSE_NOT_ENLISTED + + + + No documentation. + + + ERROR_TRANSACTION_RECORD_TOO_LONG + ERROR_TRANSACTION_RECORD_TOO_LONG + + + + No documentation. + + + ERROR_IMPLICIT_TRANSACTION_NOT_SUPPORTED + ERROR_IMPLICIT_TRANSACTION_NOT_SUPPORTED + + + + No documentation. + + + ERROR_TRANSACTION_INTEGRITY_VIOLATED + ERROR_TRANSACTION_INTEGRITY_VIOLATED + + + + No documentation. + + + ERROR_TRANSACTIONMANAGER_IDENTITY_MISMATCH + ERROR_TRANSACTIONMANAGER_IDENTITY_MISMATCH + + + + No documentation. + + + ERROR_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT + ERROR_RM_CANNOT_BE_FROZEN_FOR_SNAPSHOT + + + + No documentation. + + + ERROR_TRANSACTION_MUST_WRITETHROUGH + ERROR_TRANSACTION_MUST_WRITETHROUGH + + + + No documentation. + + + ERROR_TRANSACTION_NO_SUPERIOR + ERROR_TRANSACTION_NO_SUPERIOR + + + + No documentation. + + + ERROR_HEURISTIC_DAMAGE_POSSIBLE + ERROR_HEURISTIC_DAMAGE_POSSIBLE + + + + No documentation. + + + ERROR_TRANSACTIONAL_CONFLICT + ERROR_TRANSACTIONAL_CONFLICT + + + + No documentation. + + + ERROR_RM_NOT_ACTIVE + ERROR_RM_NOT_ACTIVE + + + + No documentation. + + + ERROR_RM_METADATA_CORRUPT + ERROR_RM_METADATA_CORRUPT + + + + No documentation. + + + ERROR_DIRECTORY_NOT_RM + ERROR_DIRECTORY_NOT_RM + + + + No documentation. + + + ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE + ERROR_TRANSACTIONS_UNSUPPORTED_REMOTE + + + + No documentation. + + + ERROR_LOG_RESIZE_INVALID_SIZE + ERROR_LOG_RESIZE_INVALID_SIZE + + + + No documentation. + + + ERROR_OBJECT_NO_LONGER_EXISTS + ERROR_OBJECT_NO_LONGER_EXISTS + + + + No documentation. + + + ERROR_STREAM_MINIVERSION_NOT_FOUND + ERROR_STREAM_MINIVERSION_NOT_FOUND + + + + No documentation. + + + ERROR_STREAM_MINIVERSION_NOT_VALID + ERROR_STREAM_MINIVERSION_NOT_VALID + + + + No documentation. + + + ERROR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION + ERROR_MINIVERSION_INACCESSIBLE_FROM_SPECIFIED_TRANSACTION + + + + No documentation. + + + ERROR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT + ERROR_CANT_OPEN_MINIVERSION_WITH_MODIFY_INTENT + + + + No documentation. + + + ERROR_CANT_CREATE_MORE_STREAM_MINIVERSIONS + ERROR_CANT_CREATE_MORE_STREAM_MINIVERSIONS + + + + No documentation. + + + ERROR_REMOTE_FILE_VERSION_MISMATCH + ERROR_REMOTE_FILE_VERSION_MISMATCH + + + + No documentation. + + + ERROR_HANDLE_NO_LONGER_VALID + ERROR_HANDLE_NO_LONGER_VALID + + + + No documentation. + + + ERROR_NO_TXF_METADATA + ERROR_NO_TXF_METADATA + + + + No documentation. + + + ERROR_LOG_CORRUPTION_DETECTED + ERROR_LOG_CORRUPTION_DETECTED + + + + No documentation. + + + ERROR_CANT_RECOVER_WITH_HANDLE_OPEN + ERROR_CANT_RECOVER_WITH_HANDLE_OPEN + + + + No documentation. + + + ERROR_RM_DISCONNECTED + ERROR_RM_DISCONNECTED + + + + No documentation. + + + ERROR_ENLISTMENT_NOT_SUPERIOR + ERROR_ENLISTMENT_NOT_SUPERIOR + + + + No documentation. + + + ERROR_RECOVERY_NOT_NEEDED + ERROR_RECOVERY_NOT_NEEDED + + + + No documentation. + + + ERROR_RM_ALREADY_STARTED + ERROR_RM_ALREADY_STARTED + + + + No documentation. + + + ERROR_FILE_IDENTITY_NOT_PERSISTENT + ERROR_FILE_IDENTITY_NOT_PERSISTENT + + + + No documentation. + + + ERROR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY + ERROR_CANT_BREAK_TRANSACTIONAL_DEPENDENCY + + + + No documentation. + + + ERROR_CANT_CROSS_RM_BOUNDARY + ERROR_CANT_CROSS_RM_BOUNDARY + + + + No documentation. + + + ERROR_TXF_DIR_NOT_EMPTY + ERROR_TXF_DIR_NOT_EMPTY + + + + No documentation. + + + ERROR_INDOUBT_TRANSACTIONS_EXIST + ERROR_INDOUBT_TRANSACTIONS_EXIST + + + + No documentation. + + + ERROR_TM_VOLATILE + ERROR_TM_VOLATILE + + + + No documentation. + + + ERROR_ROLLBACK_TIMER_EXPIRED + ERROR_ROLLBACK_TIMER_EXPIRED + + + + No documentation. + + + ERROR_TXF_ATTRIBUTE_CORRUPT + ERROR_TXF_ATTRIBUTE_CORRUPT + + + + No documentation. + + + ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION + ERROR_EFS_NOT_ALLOWED_IN_TRANSACTION + + + + No documentation. + + + ERROR_TRANSACTIONAL_OPEN_NOT_ALLOWED + ERROR_TRANSACTIONAL_OPEN_NOT_ALLOWED + + + + No documentation. + + + ERROR_LOG_GROWTH_FAILED + ERROR_LOG_GROWTH_FAILED + + + + No documentation. + + + ERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE + ERROR_TRANSACTED_MAPPING_UNSUPPORTED_REMOTE + + + + No documentation. + + + ERROR_TXF_METADATA_ALREADY_PRESENT + ERROR_TXF_METADATA_ALREADY_PRESENT + + + + No documentation. + + + ERROR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET + ERROR_TRANSACTION_SCOPE_CALLBACKS_NOT_SET + + + + No documentation. + + + ERROR_TRANSACTION_REQUIRED_PROMOTION + ERROR_TRANSACTION_REQUIRED_PROMOTION + + + + No documentation. + + + ERROR_CANNOT_EXECUTE_FILE_IN_TRANSACTION + ERROR_CANNOT_EXECUTE_FILE_IN_TRANSACTION + + + + No documentation. + + + ERROR_TRANSACTIONS_NOT_FROZEN + ERROR_TRANSACTIONS_NOT_FROZEN + + + + No documentation. + + + ERROR_TRANSACTION_FREEZE_IN_PROGRESS + ERROR_TRANSACTION_FREEZE_IN_PROGRESS + + + + No documentation. + + + ERROR_NOT_SNAPSHOT_VOLUME + ERROR_NOT_SNAPSHOT_VOLUME + + + + No documentation. + + + ERROR_NO_SAVEPOINT_WITH_OPEN_FILES + ERROR_NO_SAVEPOINT_WITH_OPEN_FILES + + + + No documentation. + + + ERROR_DATA_LOST_REPAIR + ERROR_DATA_LOST_REPAIR + + + + No documentation. + + + ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION + ERROR_SPARSE_NOT_ALLOWED_IN_TRANSACTION + + + + No documentation. + + + ERROR_TM_IDENTITY_MISMATCH + ERROR_TM_IDENTITY_MISMATCH + + + + No documentation. + + + ERROR_FLOATED_SECTION + ERROR_FLOATED_SECTION + + + + No documentation. + + + ERROR_CANNOT_ACCEPT_TRANSACTED_WORK + ERROR_CANNOT_ACCEPT_TRANSACTED_WORK + + + + No documentation. + + + ERROR_CANNOT_ABORT_TRANSACTIONS + ERROR_CANNOT_ABORT_TRANSACTIONS + + + + No documentation. + + + ERROR_BAD_CLUSTERS + ERROR_BAD_CLUSTERS + + + + No documentation. + + + ERROR_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION + ERROR_COMPRESSION_NOT_ALLOWED_IN_TRANSACTION + + + + No documentation. + + + ERROR_VOLUME_DIRTY + ERROR_VOLUME_DIRTY + + + + No documentation. + + + ERROR_NO_LINK_TRACKING_IN_TRANSACTION + ERROR_NO_LINK_TRACKING_IN_TRANSACTION + + + + No documentation. + + + ERROR_OPERATION_NOT_SUPPORTED_IN_TRANSACTION + ERROR_OPERATION_NOT_SUPPORTED_IN_TRANSACTION + + + + No documentation. + + + ERROR_EXPIRED_HANDLE + ERROR_EXPIRED_HANDLE + + + + No documentation. + + + ERROR_TRANSACTION_NOT_ENLISTED + ERROR_TRANSACTION_NOT_ENLISTED + + + + No documentation. + + + ERROR_CTX_WINSTATION_NAME_INVALID + ERROR_CTX_WINSTATION_NAME_INVALID + + + + No documentation. + + + ERROR_CTX_INVALID_PD + ERROR_CTX_INVALID_PD + + + + No documentation. + + + ERROR_CTX_PD_NOT_FOUND + ERROR_CTX_PD_NOT_FOUND + + + + No documentation. + + + ERROR_CTX_WD_NOT_FOUND + ERROR_CTX_WD_NOT_FOUND + + + + No documentation. + + + ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY + ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY + + + + No documentation. + + + ERROR_CTX_SERVICE_NAME_COLLISION + ERROR_CTX_SERVICE_NAME_COLLISION + + + + No documentation. + + + ERROR_CTX_CLOSE_PENDING + ERROR_CTX_CLOSE_PENDING + + + + No documentation. + + + ERROR_CTX_NO_OUTBUF + ERROR_CTX_NO_OUTBUF + + + + No documentation. + + + ERROR_CTX_MODEM_INF_NOT_FOUND + ERROR_CTX_MODEM_INF_NOT_FOUND + + + + No documentation. + + + ERROR_CTX_INVALID_MODEMNAME + ERROR_CTX_INVALID_MODEMNAME + + + + No documentation. + + + ERROR_CTX_MODEM_RESPONSE_ERROR + ERROR_CTX_MODEM_RESPONSE_ERROR + + + + No documentation. + + + ERROR_CTX_MODEM_RESPONSE_TIMEOUT + ERROR_CTX_MODEM_RESPONSE_TIMEOUT + + + + No documentation. + + + ERROR_CTX_MODEM_RESPONSE_NO_CARRIER + ERROR_CTX_MODEM_RESPONSE_NO_CARRIER + + + + No documentation. + + + ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE + ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE + + + + No documentation. + + + ERROR_CTX_MODEM_RESPONSE_BUSY + ERROR_CTX_MODEM_RESPONSE_BUSY + + + + No documentation. + + + ERROR_CTX_MODEM_RESPONSE_VOICE + ERROR_CTX_MODEM_RESPONSE_VOICE + + + + No documentation. + + + ERROR_CTX_TD_ERROR + ERROR_CTX_TD_ERROR + + + + No documentation. + + + ERROR_CTX_WINSTATION_NOT_FOUND + ERROR_CTX_WINSTATION_NOT_FOUND + + + + No documentation. + + + ERROR_CTX_WINSTATION_ALREADY_EXISTS + ERROR_CTX_WINSTATION_ALREADY_EXISTS + + + + No documentation. + + + ERROR_CTX_WINSTATION_BUSY + ERROR_CTX_WINSTATION_BUSY + + + + No documentation. + + + ERROR_CTX_BAD_VIDEO_MODE + ERROR_CTX_BAD_VIDEO_MODE + + + + No documentation. + + + ERROR_CTX_GRAPHICS_INVALID + ERROR_CTX_GRAPHICS_INVALID + + + + No documentation. + + + ERROR_CTX_LOGON_DISABLED + ERROR_CTX_LOGON_DISABLED + + + + No documentation. + + + ERROR_CTX_NOT_CONSOLE + ERROR_CTX_NOT_CONSOLE + + + + No documentation. + + + ERROR_CTX_CLIENT_QUERY_TIMEOUT + ERROR_CTX_CLIENT_QUERY_TIMEOUT + + + + No documentation. + + + ERROR_CTX_CONSOLE_DISCONNECT + ERROR_CTX_CONSOLE_DISCONNECT + + + + No documentation. + + + ERROR_CTX_CONSOLE_CONNECT + ERROR_CTX_CONSOLE_CONNECT + + + + No documentation. + + + ERROR_CTX_SHADOW_DENIED + ERROR_CTX_SHADOW_DENIED + + + + No documentation. + + + ERROR_CTX_WINSTATION_ACCESS_DENIED + ERROR_CTX_WINSTATION_ACCESS_DENIED + + + + No documentation. + + + ERROR_CTX_INVALID_WD + ERROR_CTX_INVALID_WD + + + + No documentation. + + + ERROR_CTX_SHADOW_INVALID + ERROR_CTX_SHADOW_INVALID + + + + No documentation. + + + ERROR_CTX_SHADOW_DISABLED + ERROR_CTX_SHADOW_DISABLED + + + + No documentation. + + + ERROR_CTX_CLIENT_LICENSE_IN_USE + ERROR_CTX_CLIENT_LICENSE_IN_USE + + + + No documentation. + + + ERROR_CTX_CLIENT_LICENSE_NOT_SET + ERROR_CTX_CLIENT_LICENSE_NOT_SET + + + + No documentation. + + + ERROR_CTX_LICENSE_NOT_AVAILABLE + ERROR_CTX_LICENSE_NOT_AVAILABLE + + + + No documentation. + + + ERROR_CTX_LICENSE_CLIENT_INVALID + ERROR_CTX_LICENSE_CLIENT_INVALID + + + + No documentation. + + + ERROR_CTX_LICENSE_EXPIRED + ERROR_CTX_LICENSE_EXPIRED + + + + No documentation. + + + ERROR_CTX_SHADOW_NOT_RUNNING + ERROR_CTX_SHADOW_NOT_RUNNING + + + + No documentation. + + + ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE + ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE + + + + No documentation. + + + ERROR_ACTIVATION_COUNT_EXCEEDED + ERROR_ACTIVATION_COUNT_EXCEEDED + + + + No documentation. + + + ERROR_CTX_WINSTATIONS_DISABLED + ERROR_CTX_WINSTATIONS_DISABLED + + + + No documentation. + + + ERROR_CTX_ENCRYPTION_LEVEL_REQUIRED + ERROR_CTX_ENCRYPTION_LEVEL_REQUIRED + + + + No documentation. + + + ERROR_CTX_SESSION_IN_USE + ERROR_CTX_SESSION_IN_USE + + + + No documentation. + + + ERROR_CTX_NO_FORCE_LOGOFF + ERROR_CTX_NO_FORCE_LOGOFF + + + + No documentation. + + + ERROR_CTX_ACCOUNT_RESTRICTION + ERROR_CTX_ACCOUNT_RESTRICTION + + + + No documentation. + + + ERROR_RDP_PROTOCOL_ERROR + ERROR_RDP_PROTOCOL_ERROR + + + + No documentation. + + + ERROR_CTX_CDM_CONNECT + ERROR_CTX_CDM_CONNECT + + + + No documentation. + + + ERROR_CTX_CDM_DISCONNECT + ERROR_CTX_CDM_DISCONNECT + + + + No documentation. + + + ERROR_CTX_SECURITY_LAYER_ERROR + ERROR_CTX_SECURITY_LAYER_ERROR + + + + No documentation. + + + ERROR_TS_INCOMPATIBLE_SESSIONS + ERROR_TS_INCOMPATIBLE_SESSIONS + + + + No documentation. + + + ERROR_TS_VIDEO_SUBSYSTEM_ERROR + ERROR_TS_VIDEO_SUBSYSTEM_ERROR + + + + No documentation. + + + ERROR_DS_NOT_INSTALLED + ERROR_DS_NOT_INSTALLED + + + + No documentation. + + + ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY + ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY + + + + No documentation. + + + ERROR_DS_NO_ATTRIBUTE_OR_VALUE + ERROR_DS_NO_ATTRIBUTE_OR_VALUE + + + + No documentation. + + + ERROR_DS_INVALID_ATTRIBUTE_SYNTAX + ERROR_DS_INVALID_ATTRIBUTE_SYNTAX + + + + No documentation. + + + ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED + ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED + + + + No documentation. + + + ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS + ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS + + + + No documentation. + + + ERROR_DS_BUSY + ERROR_DS_BUSY + + + + No documentation. + + + ERROR_DS_UNAVAILABLE + ERROR_DS_UNAVAILABLE + + + + No documentation. + + + ERROR_DS_NO_RIDS_ALLOCATED + ERROR_DS_NO_RIDS_ALLOCATED + + + + No documentation. + + + ERROR_DS_NO_MORE_RIDS + ERROR_DS_NO_MORE_RIDS + + + + No documentation. + + + ERROR_DS_INCORRECT_ROLE_OWNER + ERROR_DS_INCORRECT_ROLE_OWNER + + + + No documentation. + + + ERROR_DS_RIDMGR_INIT_ERROR + ERROR_DS_RIDMGR_INIT_ERROR + + + + No documentation. + + + ERROR_DS_OBJ_CLASS_VIOLATION + ERROR_DS_OBJ_CLASS_VIOLATION + + + + No documentation. + + + ERROR_DS_CANT_ON_NON_LEAF + ERROR_DS_CANT_ON_NON_LEAF + + + + No documentation. + + + ERROR_DS_CANT_ON_RDN + ERROR_DS_CANT_ON_RDN + + + + No documentation. + + + ERROR_DS_CANT_MOD_OBJ_CLASS + ERROR_DS_CANT_MOD_OBJ_CLASS + + + + No documentation. + + + ERROR_DS_CROSS_DOM_MOVE_ERROR + ERROR_DS_CROSS_DOM_MOVE_ERROR + + + + No documentation. + + + ERROR_DS_GC_NOT_AVAILABLE + ERROR_DS_GC_NOT_AVAILABLE + + + + No documentation. + + + ERROR_SHARED_POLICY + ERROR_SHARED_POLICY + + + + No documentation. + + + ERROR_POLICY_OBJECT_NOT_FOUND + ERROR_POLICY_OBJECT_NOT_FOUND + + + + No documentation. + + + ERROR_POLICY_ONLY_IN_DS + ERROR_POLICY_ONLY_IN_DS + + + + No documentation. + + + ERROR_PROMOTION_ACTIVE + ERROR_PROMOTION_ACTIVE + + + + No documentation. + + + ERROR_NO_PROMOTION_ACTIVE + ERROR_NO_PROMOTION_ACTIVE + + + + No documentation. + + + ERROR_DS_OPERATIONS_ERROR + ERROR_DS_OPERATIONS_ERROR + + + + No documentation. + + + ERROR_DS_PROTOCOL_ERROR + ERROR_DS_PROTOCOL_ERROR + + + + No documentation. + + + ERROR_DS_TIMELIMIT_EXCEEDED + ERROR_DS_TIMELIMIT_EXCEEDED + + + + No documentation. + + + ERROR_DS_SIZELIMIT_EXCEEDED + ERROR_DS_SIZELIMIT_EXCEEDED + + + + No documentation. + + + ERROR_DS_ADMIN_LIMIT_EXCEEDED + ERROR_DS_ADMIN_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_DS_COMPARE_FALSE + ERROR_DS_COMPARE_FALSE + + + + No documentation. + + + ERROR_DS_COMPARE_TRUE + ERROR_DS_COMPARE_TRUE + + + + No documentation. + + + ERROR_DS_AUTH_METHOD_NOT_SUPPORTED + ERROR_DS_AUTH_METHOD_NOT_SUPPORTED + + + + No documentation. + + + ERROR_DS_STRONG_AUTH_REQUIRED + ERROR_DS_STRONG_AUTH_REQUIRED + + + + No documentation. + + + ERROR_DS_INAPPROPRIATE_AUTH + ERROR_DS_INAPPROPRIATE_AUTH + + + + No documentation. + + + ERROR_DS_AUTH_UNKNOWN + ERROR_DS_AUTH_UNKNOWN + + + + No documentation. + + + ERROR_DS_REFERRAL + ERROR_DS_REFERRAL + + + + No documentation. + + + ERROR_DS_UNAVAILABLE_CRIT_EXTENSION + ERROR_DS_UNAVAILABLE_CRIT_EXTENSION + + + + No documentation. + + + ERROR_DS_CONFIDENTIALITY_REQUIRED + ERROR_DS_CONFIDENTIALITY_REQUIRED + + + + No documentation. + + + ERROR_DS_INAPPROPRIATE_MATCHING + ERROR_DS_INAPPROPRIATE_MATCHING + + + + No documentation. + + + ERROR_DS_CONSTRAINT_VIOLATION + ERROR_DS_CONSTRAINT_VIOLATION + + + + No documentation. + + + ERROR_DS_NO_SUCH_OBJECT + ERROR_DS_NO_SUCH_OBJECT + + + + No documentation. + + + ERROR_DS_ALIAS_PROBLEM + ERROR_DS_ALIAS_PROBLEM + + + + No documentation. + + + ERROR_DS_INVALID_DN_SYNTAX + ERROR_DS_INVALID_DN_SYNTAX + + + + No documentation. + + + ERROR_DS_IS_LEAF + ERROR_DS_IS_LEAF + + + + No documentation. + + + ERROR_DS_ALIAS_DEREF_PROBLEM + ERROR_DS_ALIAS_DEREF_PROBLEM + + + + No documentation. + + + ERROR_DS_UNWILLING_TO_PERFORM + ERROR_DS_UNWILLING_TO_PERFORM + + + + No documentation. + + + ERROR_DS_LOOP_DETECT + ERROR_DS_LOOP_DETECT + + + + No documentation. + + + ERROR_DS_NAMING_VIOLATION + ERROR_DS_NAMING_VIOLATION + + + + No documentation. + + + ERROR_DS_OBJECT_RESULTS_TOO_LARGE + ERROR_DS_OBJECT_RESULTS_TOO_LARGE + + + + No documentation. + + + ERROR_DS_AFFECTS_MULTIPLE_DSAS + ERROR_DS_AFFECTS_MULTIPLE_DSAS + + + + No documentation. + + + ERROR_DS_SERVER_DOWN + ERROR_DS_SERVER_DOWN + + + + No documentation. + + + ERROR_DS_LOCAL_ERROR + ERROR_DS_LOCAL_ERROR + + + + No documentation. + + + ERROR_DS_ENCODING_ERROR + ERROR_DS_ENCODING_ERROR + + + + No documentation. + + + ERROR_DS_DECODING_ERROR + ERROR_DS_DECODING_ERROR + + + + No documentation. + + + ERROR_DS_FILTER_UNKNOWN + ERROR_DS_FILTER_UNKNOWN + + + + No documentation. + + + ERROR_DS_PARAM_ERROR + ERROR_DS_PARAM_ERROR + + + + No documentation. + + + ERROR_DS_NOT_SUPPORTED + ERROR_DS_NOT_SUPPORTED + + + + No documentation. + + + ERROR_DS_NO_RESULTS_RETURNED + ERROR_DS_NO_RESULTS_RETURNED + + + + No documentation. + + + ERROR_DS_CONTROL_NOT_FOUND + ERROR_DS_CONTROL_NOT_FOUND + + + + No documentation. + + + ERROR_DS_CLIENT_LOOP + ERROR_DS_CLIENT_LOOP + + + + No documentation. + + + ERROR_DS_REFERRAL_LIMIT_EXCEEDED + ERROR_DS_REFERRAL_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_DS_SORT_CONTROL_MISSING + ERROR_DS_SORT_CONTROL_MISSING + + + + No documentation. + + + ERROR_DS_OFFSET_RANGE_ERROR + ERROR_DS_OFFSET_RANGE_ERROR + + + + No documentation. + + + ERROR_DS_RIDMGR_DISABLED + ERROR_DS_RIDMGR_DISABLED + + + + No documentation. + + + ERROR_DS_ROOT_MUST_BE_NC + ERROR_DS_ROOT_MUST_BE_NC + + + + No documentation. + + + ERROR_DS_ADD_REPLICA_INHIBITED + ERROR_DS_ADD_REPLICA_INHIBITED + + + + No documentation. + + + ERROR_DS_ATT_NOT_DEF_IN_SCHEMA + ERROR_DS_ATT_NOT_DEF_IN_SCHEMA + + + + No documentation. + + + ERROR_DS_MAX_OBJ_SIZE_EXCEEDED + ERROR_DS_MAX_OBJ_SIZE_EXCEEDED + + + + No documentation. + + + ERROR_DS_OBJ_STRING_NAME_EXISTS + ERROR_DS_OBJ_STRING_NAME_EXISTS + + + + No documentation. + + + ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA + ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA + + + + No documentation. + + + ERROR_DS_RDN_DOESNT_MATCH_SCHEMA + ERROR_DS_RDN_DOESNT_MATCH_SCHEMA + + + + No documentation. + + + ERROR_DS_NO_REQUESTED_ATTS_FOUND + ERROR_DS_NO_REQUESTED_ATTS_FOUND + + + + No documentation. + + + ERROR_DS_USER_BUFFER_TO_SMALL + ERROR_DS_USER_BUFFER_TO_SMALL + + + + No documentation. + + + ERROR_DS_ATT_IS_NOT_ON_OBJ + ERROR_DS_ATT_IS_NOT_ON_OBJ + + + + No documentation. + + + ERROR_DS_ILLEGAL_MOD_OPERATION + ERROR_DS_ILLEGAL_MOD_OPERATION + + + + No documentation. + + + ERROR_DS_OBJ_TOO_LARGE + ERROR_DS_OBJ_TOO_LARGE + + + + No documentation. + + + ERROR_DS_BAD_INSTANCE_TYPE + ERROR_DS_BAD_INSTANCE_TYPE + + + + No documentation. + + + ERROR_DS_MASTERDSA_REQUIRED + ERROR_DS_MASTERDSA_REQUIRED + + + + No documentation. + + + ERROR_DS_OBJECT_CLASS_REQUIRED + ERROR_DS_OBJECT_CLASS_REQUIRED + + + + No documentation. + + + ERROR_DS_MISSING_REQUIRED_ATT + ERROR_DS_MISSING_REQUIRED_ATT + + + + No documentation. + + + ERROR_DS_ATT_NOT_DEF_FOR_CLASS + ERROR_DS_ATT_NOT_DEF_FOR_CLASS + + + + No documentation. + + + ERROR_DS_ATT_ALREADY_EXISTS + ERROR_DS_ATT_ALREADY_EXISTS + + + + No documentation. + + + ERROR_DS_CANT_ADD_ATT_VALUES + ERROR_DS_CANT_ADD_ATT_VALUES + + + + No documentation. + + + ERROR_DS_SINGLE_VALUE_CONSTRAINT + ERROR_DS_SINGLE_VALUE_CONSTRAINT + + + + No documentation. + + + ERROR_DS_RANGE_CONSTRAINT + ERROR_DS_RANGE_CONSTRAINT + + + + No documentation. + + + ERROR_DS_ATT_VAL_ALREADY_EXISTS + ERROR_DS_ATT_VAL_ALREADY_EXISTS + + + + No documentation. + + + ERROR_DS_CANT_REM_MISSING_ATT + ERROR_DS_CANT_REM_MISSING_ATT + + + + No documentation. + + + ERROR_DS_CANT_REM_MISSING_ATT_VAL + ERROR_DS_CANT_REM_MISSING_ATT_VAL + + + + No documentation. + + + ERROR_DS_ROOT_CANT_BE_SUBREF + ERROR_DS_ROOT_CANT_BE_SUBREF + + + + No documentation. + + + ERROR_DS_NO_CHAINING + ERROR_DS_NO_CHAINING + + + + No documentation. + + + ERROR_DS_NO_CHAINED_EVAL + ERROR_DS_NO_CHAINED_EVAL + + + + No documentation. + + + ERROR_DS_NO_PARENT_OBJECT + ERROR_DS_NO_PARENT_OBJECT + + + + No documentation. + + + ERROR_DS_PARENT_IS_AN_ALIAS + ERROR_DS_PARENT_IS_AN_ALIAS + + + + No documentation. + + + ERROR_DS_CANT_MIX_MASTER_AND_REPS + ERROR_DS_CANT_MIX_MASTER_AND_REPS + + + + No documentation. + + + ERROR_DS_CHILDREN_EXIST + ERROR_DS_CHILDREN_EXIST + + + + No documentation. + + + ERROR_DS_OBJ_NOT_FOUND + ERROR_DS_OBJ_NOT_FOUND + + + + No documentation. + + + ERROR_DS_ALIASED_OBJ_MISSING + ERROR_DS_ALIASED_OBJ_MISSING + + + + No documentation. + + + ERROR_DS_BAD_NAME_SYNTAX + ERROR_DS_BAD_NAME_SYNTAX + + + + No documentation. + + + ERROR_DS_ALIAS_POINTS_TO_ALIAS + ERROR_DS_ALIAS_POINTS_TO_ALIAS + + + + No documentation. + + + ERROR_DS_CANT_DEREF_ALIAS + ERROR_DS_CANT_DEREF_ALIAS + + + + No documentation. + + + ERROR_DS_OUT_OF_SCOPE + ERROR_DS_OUT_OF_SCOPE + + + + No documentation. + + + ERROR_DS_OBJECT_BEING_REMOVED + ERROR_DS_OBJECT_BEING_REMOVED + + + + No documentation. + + + ERROR_DS_CANT_DELETE_DSA_OBJ + ERROR_DS_CANT_DELETE_DSA_OBJ + + + + No documentation. + + + ERROR_DS_GENERIC_ERROR + ERROR_DS_GENERIC_ERROR + + + + No documentation. + + + ERROR_DS_DSA_MUST_BE_INT_MASTER + ERROR_DS_DSA_MUST_BE_INT_MASTER + + + + No documentation. + + + ERROR_DS_CLASS_NOT_DSA + ERROR_DS_CLASS_NOT_DSA + + + + No documentation. + + + ERROR_DS_INSUFF_ACCESS_RIGHTS + ERROR_DS_INSUFF_ACCESS_RIGHTS + + + + No documentation. + + + ERROR_DS_ILLEGAL_SUPERIOR + ERROR_DS_ILLEGAL_SUPERIOR + + + + No documentation. + + + ERROR_DS_ATTRIBUTE_OWNED_BY_SAM + ERROR_DS_ATTRIBUTE_OWNED_BY_SAM + + + + No documentation. + + + ERROR_DS_NAME_TOO_MANY_PARTS + ERROR_DS_NAME_TOO_MANY_PARTS + + + + No documentation. + + + ERROR_DS_NAME_TOO_LONG + ERROR_DS_NAME_TOO_LONG + + + + No documentation. + + + ERROR_DS_NAME_VALUE_TOO_LONG + ERROR_DS_NAME_VALUE_TOO_LONG + + + + No documentation. + + + ERROR_DS_NAME_UNPARSEABLE + ERROR_DS_NAME_UNPARSEABLE + + + + No documentation. + + + ERROR_DS_NAME_TYPE_UNKNOWN + ERROR_DS_NAME_TYPE_UNKNOWN + + + + No documentation. + + + ERROR_DS_NOT_AN_OBJECT + ERROR_DS_NOT_AN_OBJECT + + + + No documentation. + + + ERROR_DS_SEC_DESC_TOO_SHORT + ERROR_DS_SEC_DESC_TOO_SHORT + + + + No documentation. + + + ERROR_DS_SEC_DESC_INVALID + ERROR_DS_SEC_DESC_INVALID + + + + No documentation. + + + ERROR_DS_NO_DELETED_NAME + ERROR_DS_NO_DELETED_NAME + + + + No documentation. + + + ERROR_DS_SUBREF_MUST_HAVE_PARENT + ERROR_DS_SUBREF_MUST_HAVE_PARENT + + + + No documentation. + + + ERROR_DS_NCNAME_MUST_BE_NC + ERROR_DS_NCNAME_MUST_BE_NC + + + + No documentation. + + + ERROR_DS_CANT_ADD_SYSTEM_ONLY + ERROR_DS_CANT_ADD_SYSTEM_ONLY + + + + No documentation. + + + ERROR_DS_CLASS_MUST_BE_CONCRETE + ERROR_DS_CLASS_MUST_BE_CONCRETE + + + + No documentation. + + + ERROR_DS_INVALID_DMD + ERROR_DS_INVALID_DMD + + + + No documentation. + + + ERROR_DS_OBJ_GUID_EXISTS + ERROR_DS_OBJ_GUID_EXISTS + + + + No documentation. + + + ERROR_DS_NOT_ON_BACKLINK + ERROR_DS_NOT_ON_BACKLINK + + + + No documentation. + + + ERROR_DS_NO_CROSSREF_FOR_NC + ERROR_DS_NO_CROSSREF_FOR_NC + + + + No documentation. + + + ERROR_DS_SHUTTING_DOWN + ERROR_DS_SHUTTING_DOWN + + + + No documentation. + + + ERROR_DS_UNKNOWN_OPERATION + ERROR_DS_UNKNOWN_OPERATION + + + + No documentation. + + + ERROR_DS_INVALID_ROLE_OWNER + ERROR_DS_INVALID_ROLE_OWNER + + + + No documentation. + + + ERROR_DS_COULDNT_CONTACT_FSMO + ERROR_DS_COULDNT_CONTACT_FSMO + + + + No documentation. + + + ERROR_DS_CROSS_NC_DN_RENAME + ERROR_DS_CROSS_NC_DN_RENAME + + + + No documentation. + + + ERROR_DS_CANT_MOD_SYSTEM_ONLY + ERROR_DS_CANT_MOD_SYSTEM_ONLY + + + + No documentation. + + + ERROR_DS_REPLICATOR_ONLY + ERROR_DS_REPLICATOR_ONLY + + + + No documentation. + + + ERROR_DS_OBJ_CLASS_NOT_DEFINED + ERROR_DS_OBJ_CLASS_NOT_DEFINED + + + + No documentation. + + + ERROR_DS_OBJ_CLASS_NOT_SUBCLASS + ERROR_DS_OBJ_CLASS_NOT_SUBCLASS + + + + No documentation. + + + ERROR_DS_NAME_REFERENCE_INVALID + ERROR_DS_NAME_REFERENCE_INVALID + + + + No documentation. + + + ERROR_DS_CROSS_REF_EXISTS + ERROR_DS_CROSS_REF_EXISTS + + + + No documentation. + + + ERROR_DS_CANT_DEL_MASTER_CROSSREF + ERROR_DS_CANT_DEL_MASTER_CROSSREF + + + + No documentation. + + + ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD + ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD + + + + No documentation. + + + ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX + ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX + + + + No documentation. + + + ERROR_DS_DUP_RDN + ERROR_DS_DUP_RDN + + + + No documentation. + + + ERROR_DS_DUP_OID + ERROR_DS_DUP_OID + + + + No documentation. + + + ERROR_DS_DUP_MAPI_ID + ERROR_DS_DUP_MAPI_ID + + + + No documentation. + + + ERROR_DS_DUP_SCHEMA_ID_GUID + ERROR_DS_DUP_SCHEMA_ID_GUID + + + + No documentation. + + + ERROR_DS_DUP_LDAP_DISPLAY_NAME + ERROR_DS_DUP_LDAP_DISPLAY_NAME + + + + No documentation. + + + ERROR_DS_SEMANTIC_ATT_TEST + ERROR_DS_SEMANTIC_ATT_TEST + + + + No documentation. + + + ERROR_DS_SYNTAX_MISMATCH + ERROR_DS_SYNTAX_MISMATCH + + + + No documentation. + + + ERROR_DS_EXISTS_IN_MUST_HAVE + ERROR_DS_EXISTS_IN_MUST_HAVE + + + + No documentation. + + + ERROR_DS_EXISTS_IN_MAY_HAVE + ERROR_DS_EXISTS_IN_MAY_HAVE + + + + No documentation. + + + ERROR_DS_NONEXISTENT_MAY_HAVE + ERROR_DS_NONEXISTENT_MAY_HAVE + + + + No documentation. + + + ERROR_DS_NONEXISTENT_MUST_HAVE + ERROR_DS_NONEXISTENT_MUST_HAVE + + + + No documentation. + + + ERROR_DS_AUX_CLS_TEST_FAIL + ERROR_DS_AUX_CLS_TEST_FAIL + + + + No documentation. + + + ERROR_DS_NONEXISTENT_POSS_SUP + ERROR_DS_NONEXISTENT_POSS_SUP + + + + No documentation. + + + ERROR_DS_SUB_CLS_TEST_FAIL + ERROR_DS_SUB_CLS_TEST_FAIL + + + + No documentation. + + + ERROR_DS_BAD_RDN_ATT_ID_SYNTAX + ERROR_DS_BAD_RDN_ATT_ID_SYNTAX + + + + No documentation. + + + ERROR_DS_EXISTS_IN_AUX_CLS + ERROR_DS_EXISTS_IN_AUX_CLS + + + + No documentation. + + + ERROR_DS_EXISTS_IN_SUB_CLS + ERROR_DS_EXISTS_IN_SUB_CLS + + + + No documentation. + + + ERROR_DS_EXISTS_IN_POSS_SUP + ERROR_DS_EXISTS_IN_POSS_SUP + + + + No documentation. + + + ERROR_DS_RECALCSCHEMA_FAILED + ERROR_DS_RECALCSCHEMA_FAILED + + + + No documentation. + + + ERROR_DS_TREE_DELETE_NOT_FINISHED + ERROR_DS_TREE_DELETE_NOT_FINISHED + + + + No documentation. + + + ERROR_DS_CANT_DELETE + ERROR_DS_CANT_DELETE + + + + No documentation. + + + ERROR_DS_ATT_SCHEMA_REQ_ID + ERROR_DS_ATT_SCHEMA_REQ_ID + + + + No documentation. + + + ERROR_DS_BAD_ATT_SCHEMA_SYNTAX + ERROR_DS_BAD_ATT_SCHEMA_SYNTAX + + + + No documentation. + + + ERROR_DS_CANT_CACHE_ATT + ERROR_DS_CANT_CACHE_ATT + + + + No documentation. + + + ERROR_DS_CANT_CACHE_CLASS + ERROR_DS_CANT_CACHE_CLASS + + + + No documentation. + + + ERROR_DS_CANT_REMOVE_ATT_CACHE + ERROR_DS_CANT_REMOVE_ATT_CACHE + + + + No documentation. + + + ERROR_DS_CANT_REMOVE_CLASS_CACHE + ERROR_DS_CANT_REMOVE_CLASS_CACHE + + + + No documentation. + + + ERROR_DS_CANT_RETRIEVE_DN + ERROR_DS_CANT_RETRIEVE_DN + + + + No documentation. + + + ERROR_DS_MISSING_SUPREF + ERROR_DS_MISSING_SUPREF + + + + No documentation. + + + ERROR_DS_CANT_RETRIEVE_INSTANCE + ERROR_DS_CANT_RETRIEVE_INSTANCE + + + + No documentation. + + + ERROR_DS_CODE_INCONSISTENCY + ERROR_DS_CODE_INCONSISTENCY + + + + No documentation. + + + ERROR_DS_DATABASE_ERROR + ERROR_DS_DATABASE_ERROR + + + + No documentation. + + + ERROR_DS_GOVERNSID_MISSING + ERROR_DS_GOVERNSID_MISSING + + + + No documentation. + + + ERROR_DS_MISSING_EXPECTED_ATT + ERROR_DS_MISSING_EXPECTED_ATT + + + + No documentation. + + + ERROR_DS_NCNAME_MISSING_CR_REF + ERROR_DS_NCNAME_MISSING_CR_REF + + + + No documentation. + + + ERROR_DS_SECURITY_CHECKING_ERROR + ERROR_DS_SECURITY_CHECKING_ERROR + + + + No documentation. + + + ERROR_DS_SCHEMA_NOT_LOADED + ERROR_DS_SCHEMA_NOT_LOADED + + + + No documentation. + + + ERROR_DS_SCHEMA_ALLOC_FAILED + ERROR_DS_SCHEMA_ALLOC_FAILED + + + + No documentation. + + + ERROR_DS_ATT_SCHEMA_REQ_SYNTAX + ERROR_DS_ATT_SCHEMA_REQ_SYNTAX + + + + No documentation. + + + ERROR_DS_GCVERIFY_ERROR + ERROR_DS_GCVERIFY_ERROR + + + + No documentation. + + + ERROR_DS_DRA_SCHEMA_MISMATCH + ERROR_DS_DRA_SCHEMA_MISMATCH + + + + No documentation. + + + ERROR_DS_CANT_FIND_DSA_OBJ + ERROR_DS_CANT_FIND_DSA_OBJ + + + + No documentation. + + + ERROR_DS_CANT_FIND_EXPECTED_NC + ERROR_DS_CANT_FIND_EXPECTED_NC + + + + No documentation. + + + ERROR_DS_CANT_FIND_NC_IN_CACHE + ERROR_DS_CANT_FIND_NC_IN_CACHE + + + + No documentation. + + + ERROR_DS_CANT_RETRIEVE_CHILD + ERROR_DS_CANT_RETRIEVE_CHILD + + + + No documentation. + + + ERROR_DS_SECURITY_ILLEGAL_MODIFY + ERROR_DS_SECURITY_ILLEGAL_MODIFY + + + + No documentation. + + + ERROR_DS_CANT_REPLACE_HIDDEN_REC + ERROR_DS_CANT_REPLACE_HIDDEN_REC + + + + No documentation. + + + ERROR_DS_BAD_HIERARCHY_FILE + ERROR_DS_BAD_HIERARCHY_FILE + + + + No documentation. + + + ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED + ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED + + + + No documentation. + + + ERROR_DS_CONFIG_PARAM_MISSING + ERROR_DS_CONFIG_PARAM_MISSING + + + + No documentation. + + + ERROR_DS_COUNTING_AB_INDICES_FAILED + ERROR_DS_COUNTING_AB_INDICES_FAILED + + + + No documentation. + + + ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED + ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED + + + + No documentation. + + + ERROR_DS_INTERNAL_FAILURE + ERROR_DS_INTERNAL_FAILURE + + + + No documentation. + + + ERROR_DS_UNKNOWN_ERROR + ERROR_DS_UNKNOWN_ERROR + + + + No documentation. + + + ERROR_DS_ROOT_REQUIRES_CLASS_TOP + ERROR_DS_ROOT_REQUIRES_CLASS_TOP + + + + No documentation. + + + ERROR_DS_REFUSING_FSMO_ROLES + ERROR_DS_REFUSING_FSMO_ROLES + + + + No documentation. + + + ERROR_DS_MISSING_FSMO_SETTINGS + ERROR_DS_MISSING_FSMO_SETTINGS + + + + No documentation. + + + ERROR_DS_UNABLE_TO_SURRENDER_ROLES + ERROR_DS_UNABLE_TO_SURRENDER_ROLES + + + + No documentation. + + + ERROR_DS_DRA_GENERIC + ERROR_DS_DRA_GENERIC + + + + No documentation. + + + ERROR_DS_DRA_INVALID_PARAMETER + ERROR_DS_DRA_INVALID_PARAMETER + + + + No documentation. + + + ERROR_DS_DRA_BUSY + ERROR_DS_DRA_BUSY + + + + No documentation. + + + ERROR_DS_DRA_BAD_DN + ERROR_DS_DRA_BAD_DN + + + + No documentation. + + + ERROR_DS_DRA_BAD_NC + ERROR_DS_DRA_BAD_NC + + + + No documentation. + + + ERROR_DS_DRA_DN_EXISTS + ERROR_DS_DRA_DN_EXISTS + + + + No documentation. + + + ERROR_DS_DRA_INTERNAL_ERROR + ERROR_DS_DRA_INTERNAL_ERROR + + + + No documentation. + + + ERROR_DS_DRA_INCONSISTENT_DIT + ERROR_DS_DRA_INCONSISTENT_DIT + + + + No documentation. + + + ERROR_DS_DRA_CONNECTION_FAILED + ERROR_DS_DRA_CONNECTION_FAILED + + + + No documentation. + + + ERROR_DS_DRA_BAD_INSTANCE_TYPE + ERROR_DS_DRA_BAD_INSTANCE_TYPE + + + + No documentation. + + + ERROR_DS_DRA_OUT_OF_MEM + ERROR_DS_DRA_OUT_OF_MEM + + + + No documentation. + + + ERROR_DS_DRA_MAIL_PROBLEM + ERROR_DS_DRA_MAIL_PROBLEM + + + + No documentation. + + + ERROR_DS_DRA_REF_ALREADY_EXISTS + ERROR_DS_DRA_REF_ALREADY_EXISTS + + + + No documentation. + + + ERROR_DS_DRA_REF_NOT_FOUND + ERROR_DS_DRA_REF_NOT_FOUND + + + + No documentation. + + + ERROR_DS_DRA_OBJ_IS_REP_SOURCE + ERROR_DS_DRA_OBJ_IS_REP_SOURCE + + + + No documentation. + + + ERROR_DS_DRA_DB_ERROR + ERROR_DS_DRA_DB_ERROR + + + + No documentation. + + + ERROR_DS_DRA_NO_REPLICA + ERROR_DS_DRA_NO_REPLICA + + + + No documentation. + + + ERROR_DS_DRA_ACCESS_DENIED + ERROR_DS_DRA_ACCESS_DENIED + + + + No documentation. + + + ERROR_DS_DRA_NOT_SUPPORTED + ERROR_DS_DRA_NOT_SUPPORTED + + + + No documentation. + + + ERROR_DS_DRA_RPC_CANCELLED + ERROR_DS_DRA_RPC_CANCELLED + + + + No documentation. + + + ERROR_DS_DRA_SOURCE_DISABLED + ERROR_DS_DRA_SOURCE_DISABLED + + + + No documentation. + + + ERROR_DS_DRA_SINK_DISABLED + ERROR_DS_DRA_SINK_DISABLED + + + + No documentation. + + + ERROR_DS_DRA_NAME_COLLISION + ERROR_DS_DRA_NAME_COLLISION + + + + No documentation. + + + ERROR_DS_DRA_SOURCE_REINSTALLED + ERROR_DS_DRA_SOURCE_REINSTALLED + + + + No documentation. + + + ERROR_DS_DRA_MISSING_PARENT + ERROR_DS_DRA_MISSING_PARENT + + + + No documentation. + + + ERROR_DS_DRA_PREEMPTED + ERROR_DS_DRA_PREEMPTED + + + + No documentation. + + + ERROR_DS_DRA_ABANDON_SYNC + ERROR_DS_DRA_ABANDON_SYNC + + + + No documentation. + + + ERROR_DS_DRA_SHUTDOWN + ERROR_DS_DRA_SHUTDOWN + + + + No documentation. + + + ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET + ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET + + + + No documentation. + + + ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA + ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA + + + + No documentation. + + + ERROR_DS_DRA_EXTN_CONNECTION_FAILED + ERROR_DS_DRA_EXTN_CONNECTION_FAILED + + + + No documentation. + + + ERROR_DS_INSTALL_SCHEMA_MISMATCH + ERROR_DS_INSTALL_SCHEMA_MISMATCH + + + + No documentation. + + + ERROR_DS_DUP_LINK_ID + ERROR_DS_DUP_LINK_ID + + + + No documentation. + + + ERROR_DS_NAME_ERROR_RESOLVING + ERROR_DS_NAME_ERROR_RESOLVING + + + + No documentation. + + + ERROR_DS_NAME_ERROR_NOT_FOUND + ERROR_DS_NAME_ERROR_NOT_FOUND + + + + No documentation. + + + ERROR_DS_NAME_ERROR_NOT_UNIQUE + ERROR_DS_NAME_ERROR_NOT_UNIQUE + + + + No documentation. + + + ERROR_DS_NAME_ERROR_NO_MAPPING + ERROR_DS_NAME_ERROR_NO_MAPPING + + + + No documentation. + + + ERROR_DS_NAME_ERROR_DOMAIN_ONLY + ERROR_DS_NAME_ERROR_DOMAIN_ONLY + + + + No documentation. + + + ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING + ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING + + + + No documentation. + + + ERROR_DS_CONSTRUCTED_ATT_MOD + ERROR_DS_CONSTRUCTED_ATT_MOD + + + + No documentation. + + + ERROR_DS_WRONG_OM_OBJ_CLASS + ERROR_DS_WRONG_OM_OBJ_CLASS + + + + No documentation. + + + ERROR_DS_DRA_REPL_PENDING + ERROR_DS_DRA_REPL_PENDING + + + + No documentation. + + + ERROR_DS_DS_REQUIRED + ERROR_DS_DS_REQUIRED + + + + No documentation. + + + ERROR_DS_INVALID_LDAP_DISPLAY_NAME + ERROR_DS_INVALID_LDAP_DISPLAY_NAME + + + + No documentation. + + + ERROR_DS_NON_BASE_SEARCH + ERROR_DS_NON_BASE_SEARCH + + + + No documentation. + + + ERROR_DS_CANT_RETRIEVE_ATTS + ERROR_DS_CANT_RETRIEVE_ATTS + + + + No documentation. + + + ERROR_DS_BACKLINK_WITHOUT_LINK + ERROR_DS_BACKLINK_WITHOUT_LINK + + + + No documentation. + + + ERROR_DS_EPOCH_MISMATCH + ERROR_DS_EPOCH_MISMATCH + + + + No documentation. + + + ERROR_DS_SRC_NAME_MISMATCH + ERROR_DS_SRC_NAME_MISMATCH + + + + No documentation. + + + ERROR_DS_SRC_AND_DST_NC_IDENTICAL + ERROR_DS_SRC_AND_DST_NC_IDENTICAL + + + + No documentation. + + + ERROR_DS_DST_NC_MISMATCH + ERROR_DS_DST_NC_MISMATCH + + + + No documentation. + + + ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC + ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC + + + + No documentation. + + + ERROR_DS_SRC_GUID_MISMATCH + ERROR_DS_SRC_GUID_MISMATCH + + + + No documentation. + + + ERROR_DS_CANT_MOVE_DELETED_OBJECT + ERROR_DS_CANT_MOVE_DELETED_OBJECT + + + + No documentation. + + + ERROR_DS_PDC_OPERATION_IN_PROGRESS + ERROR_DS_PDC_OPERATION_IN_PROGRESS + + + + No documentation. + + + ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD + ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD + + + + No documentation. + + + ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION + ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION + + + + No documentation. + + + ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS + ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS + + + + No documentation. + + + ERROR_DS_NC_MUST_HAVE_NC_PARENT + ERROR_DS_NC_MUST_HAVE_NC_PARENT + + + + No documentation. + + + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE + + + + No documentation. + + + ERROR_DS_DST_DOMAIN_NOT_NATIVE + ERROR_DS_DST_DOMAIN_NOT_NATIVE + + + + No documentation. + + + ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER + ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER + + + + No documentation. + + + ERROR_DS_CANT_MOVE_ACCOUNT_GROUP + ERROR_DS_CANT_MOVE_ACCOUNT_GROUP + + + + No documentation. + + + ERROR_DS_CANT_MOVE_RESOURCE_GROUP + ERROR_DS_CANT_MOVE_RESOURCE_GROUP + + + + No documentation. + + + ERROR_DS_INVALID_SEARCH_FLAG + ERROR_DS_INVALID_SEARCH_FLAG + + + + No documentation. + + + ERROR_DS_NO_TREE_DELETE_ABOVE_NC + ERROR_DS_NO_TREE_DELETE_ABOVE_NC + + + + No documentation. + + + ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE + ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE + + + + No documentation. + + + ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE + ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE + + + + No documentation. + + + ERROR_DS_SAM_INIT_FAILURE + ERROR_DS_SAM_INIT_FAILURE + + + + No documentation. + + + ERROR_DS_SENSITIVE_GROUP_VIOLATION + ERROR_DS_SENSITIVE_GROUP_VIOLATION + + + + No documentation. + + + ERROR_DS_CANT_MOD_PRIMARYGROUPID + ERROR_DS_CANT_MOD_PRIMARYGROUPID + + + + No documentation. + + + ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD + ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD + + + + No documentation. + + + ERROR_DS_NONSAFE_SCHEMA_CHANGE + ERROR_DS_NONSAFE_SCHEMA_CHANGE + + + + No documentation. + + + ERROR_DS_SCHEMA_UPDATE_DISALLOWED + ERROR_DS_SCHEMA_UPDATE_DISALLOWED + + + + No documentation. + + + ERROR_DS_CANT_CREATE_UNDER_SCHEMA + ERROR_DS_CANT_CREATE_UNDER_SCHEMA + + + + No documentation. + + + ERROR_DS_INSTALL_NO_SRC_SCH_VERSION + ERROR_DS_INSTALL_NO_SRC_SCH_VERSION + + + + No documentation. + + + ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE + ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE + + + + No documentation. + + + ERROR_DS_INVALID_GROUP_TYPE + ERROR_DS_INVALID_GROUP_TYPE + + + + No documentation. + + + ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN + ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN + + + + No documentation. + + + ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN + ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN + + + + No documentation. + + + ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER + ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER + + + + No documentation. + + + ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER + ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER + + + + No documentation. + + + ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER + ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER + + + + No documentation. + + + ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER + ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER + + + + No documentation. + + + ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER + ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER + + + + No documentation. + + + ERROR_DS_HAVE_PRIMARY_MEMBERS + ERROR_DS_HAVE_PRIMARY_MEMBERS + + + + No documentation. + + + ERROR_DS_STRING_SD_CONVERSION_FAILED + ERROR_DS_STRING_SD_CONVERSION_FAILED + + + + No documentation. + + + ERROR_DS_NAMING_MASTER_GC + ERROR_DS_NAMING_MASTER_GC + + + + No documentation. + + + ERROR_DS_DNS_LOOKUP_FAILURE + ERROR_DS_DNS_LOOKUP_FAILURE + + + + No documentation. + + + ERROR_DS_COULDNT_UPDATE_SPNS + ERROR_DS_COULDNT_UPDATE_SPNS + + + + No documentation. + + + ERROR_DS_CANT_RETRIEVE_SD + ERROR_DS_CANT_RETRIEVE_SD + + + + No documentation. + + + ERROR_DS_KEY_NOT_UNIQUE + ERROR_DS_KEY_NOT_UNIQUE + + + + No documentation. + + + ERROR_DS_WRONG_LINKED_ATT_SYNTAX + ERROR_DS_WRONG_LINKED_ATT_SYNTAX + + + + No documentation. + + + ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD + ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD + + + + No documentation. + + + ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY + ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY + + + + No documentation. + + + ERROR_DS_CANT_START + ERROR_DS_CANT_START + + + + No documentation. + + + ERROR_DS_INIT_FAILURE + ERROR_DS_INIT_FAILURE + + + + No documentation. + + + ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION + ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION + + + + No documentation. + + + ERROR_DS_SOURCE_DOMAIN_IN_FOREST + ERROR_DS_SOURCE_DOMAIN_IN_FOREST + + + + No documentation. + + + ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST + ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST + + + + No documentation. + + + ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED + ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED + + + + No documentation. + + + ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN + ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN + + + + No documentation. + + + ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER + ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER + + + + No documentation. + + + ERROR_DS_SRC_SID_EXISTS_IN_FOREST + ERROR_DS_SRC_SID_EXISTS_IN_FOREST + + + + No documentation. + + + ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH + ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH + + + + No documentation. + + + ERROR_SAM_INIT_FAILURE + ERROR_SAM_INIT_FAILURE + + + + No documentation. + + + ERROR_DS_DRA_SCHEMA_INFO_SHIP + ERROR_DS_DRA_SCHEMA_INFO_SHIP + + + + No documentation. + + + ERROR_DS_DRA_SCHEMA_CONFLICT + ERROR_DS_DRA_SCHEMA_CONFLICT + + + + No documentation. + + + ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT + ERROR_DS_DRA_EARLIER_SCHEMA_CONFLICT + + + + No documentation. + + + ERROR_DS_DRA_OBJ_NC_MISMATCH + ERROR_DS_DRA_OBJ_NC_MISMATCH + + + + No documentation. + + + ERROR_DS_NC_STILL_HAS_DSAS + ERROR_DS_NC_STILL_HAS_DSAS + + + + No documentation. + + + ERROR_DS_GC_REQUIRED + ERROR_DS_GC_REQUIRED + + + + No documentation. + + + ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY + ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY + + + + No documentation. + + + ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS + ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS + + + + No documentation. + + + ERROR_DS_CANT_ADD_TO_GC + ERROR_DS_CANT_ADD_TO_GC + + + + No documentation. + + + ERROR_DS_NO_CHECKPOINT_WITH_PDC + ERROR_DS_NO_CHECKPOINT_WITH_PDC + + + + No documentation. + + + ERROR_DS_SOURCE_AUDITING_NOT_ENABLED + ERROR_DS_SOURCE_AUDITING_NOT_ENABLED + + + + No documentation. + + + ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC + ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC + + + + No documentation. + + + ERROR_DS_INVALID_NAME_FOR_SPN + ERROR_DS_INVALID_NAME_FOR_SPN + + + + No documentation. + + + ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS + ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS + + + + No documentation. + + + ERROR_DS_UNICODEPWD_NOT_IN_QUOTES + ERROR_DS_UNICODEPWD_NOT_IN_QUOTES + + + + No documentation. + + + ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED + ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED + + + + No documentation. + + + ERROR_DS_MUST_BE_RUN_ON_DST_DC + ERROR_DS_MUST_BE_RUN_ON_DST_DC + + + + No documentation. + + + ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER + ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER + + + + No documentation. + + + ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ + ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ + + + + No documentation. + + + ERROR_DS_INIT_FAILURE_CONSOLE + ERROR_DS_INIT_FAILURE_CONSOLE + + + + No documentation. + + + ERROR_DS_SAM_INIT_FAILURE_CONSOLE + ERROR_DS_SAM_INIT_FAILURE_CONSOLE + + + + No documentation. + + + ERROR_DS_FOREST_VERSION_TOO_HIGH + ERROR_DS_FOREST_VERSION_TOO_HIGH + + + + No documentation. + + + ERROR_DS_DOMAIN_VERSION_TOO_HIGH + ERROR_DS_DOMAIN_VERSION_TOO_HIGH + + + + No documentation. + + + ERROR_DS_FOREST_VERSION_TOO_LOW + ERROR_DS_FOREST_VERSION_TOO_LOW + + + + No documentation. + + + ERROR_DS_DOMAIN_VERSION_TOO_LOW + ERROR_DS_DOMAIN_VERSION_TOO_LOW + + + + No documentation. + + + ERROR_DS_INCOMPATIBLE_VERSION + ERROR_DS_INCOMPATIBLE_VERSION + + + + No documentation. + + + ERROR_DS_LOW_DSA_VERSION + ERROR_DS_LOW_DSA_VERSION + + + + No documentation. + + + ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN + ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN + + + + No documentation. + + + ERROR_DS_NOT_SUPPORTED_SORT_ORDER + ERROR_DS_NOT_SUPPORTED_SORT_ORDER + + + + No documentation. + + + ERROR_DS_NAME_NOT_UNIQUE + ERROR_DS_NAME_NOT_UNIQUE + + + + No documentation. + + + ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 + ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4 + + + + No documentation. + + + ERROR_DS_OUT_OF_VERSION_STORE + ERROR_DS_OUT_OF_VERSION_STORE + + + + No documentation. + + + ERROR_DS_INCOMPATIBLE_CONTROLS_USED + ERROR_DS_INCOMPATIBLE_CONTROLS_USED + + + + No documentation. + + + ERROR_DS_NO_REF_DOMAIN + ERROR_DS_NO_REF_DOMAIN + + + + No documentation. + + + ERROR_DS_RESERVED_LINK_ID + ERROR_DS_RESERVED_LINK_ID + + + + No documentation. + + + ERROR_DS_LINK_ID_NOT_AVAILABLE + ERROR_DS_LINK_ID_NOT_AVAILABLE + + + + No documentation. + + + ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER + ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER + + + + No documentation. + + + ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE + ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE + + + + No documentation. + + + ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC + ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC + + + + No documentation. + + + ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG + ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG + + + + No documentation. + + + ERROR_DS_MODIFYDN_WRONG_GRANDPARENT + ERROR_DS_MODIFYDN_WRONG_GRANDPARENT + + + + No documentation. + + + ERROR_DS_NAME_ERROR_TRUST_REFERRAL + ERROR_DS_NAME_ERROR_TRUST_REFERRAL + + + + No documentation. + + + ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER + ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER + + + + No documentation. + + + ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD + ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD + + + + No documentation. + + + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2 + + + + No documentation. + + + ERROR_DS_THREAD_LIMIT_EXCEEDED + ERROR_DS_THREAD_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_DS_NOT_CLOSEST + ERROR_DS_NOT_CLOSEST + + + + No documentation. + + + ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF + ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF + + + + No documentation. + + + ERROR_DS_SINGLE_USER_MODE_FAILED + ERROR_DS_SINGLE_USER_MODE_FAILED + + + + No documentation. + + + ERROR_DS_NTDSCRIPT_SYNTAX_ERROR + ERROR_DS_NTDSCRIPT_SYNTAX_ERROR + + + + No documentation. + + + ERROR_DS_NTDSCRIPT_PROCESS_ERROR + ERROR_DS_NTDSCRIPT_PROCESS_ERROR + + + + No documentation. + + + ERROR_DS_DIFFERENT_REPL_EPOCHS + ERROR_DS_DIFFERENT_REPL_EPOCHS + + + + No documentation. + + + ERROR_DS_DRS_EXTENSIONS_CHANGED + ERROR_DS_DRS_EXTENSIONS_CHANGED + + + + No documentation. + + + ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR + ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR + + + + No documentation. + + + ERROR_DS_NO_MSDS_INTID + ERROR_DS_NO_MSDS_INTID + + + + No documentation. + + + ERROR_DS_DUP_MSDS_INTID + ERROR_DS_DUP_MSDS_INTID + + + + No documentation. + + + ERROR_DS_EXISTS_IN_RDNATTID + ERROR_DS_EXISTS_IN_RDNATTID + + + + No documentation. + + + ERROR_DS_AUTHORIZATION_FAILED + ERROR_DS_AUTHORIZATION_FAILED + + + + No documentation. + + + ERROR_DS_INVALID_SCRIPT + ERROR_DS_INVALID_SCRIPT + + + + No documentation. + + + ERROR_DS_REMOTE_CROSSREF_OP_FAILED + ERROR_DS_REMOTE_CROSSREF_OP_FAILED + + + + No documentation. + + + ERROR_DS_CROSS_REF_BUSY + ERROR_DS_CROSS_REF_BUSY + + + + No documentation. + + + ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN + ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN + + + + No documentation. + + + ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC + ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC + + + + No documentation. + + + ERROR_DS_DUPLICATE_ID_FOUND + ERROR_DS_DUPLICATE_ID_FOUND + + + + No documentation. + + + ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT + ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT + + + + No documentation. + + + ERROR_DS_GROUP_CONVERSION_ERROR + ERROR_DS_GROUP_CONVERSION_ERROR + + + + No documentation. + + + ERROR_DS_CANT_MOVE_APP_BASIC_GROUP + ERROR_DS_CANT_MOVE_APP_BASIC_GROUP + + + + No documentation. + + + ERROR_DS_CANT_MOVE_APP_QUERY_GROUP + ERROR_DS_CANT_MOVE_APP_QUERY_GROUP + + + + No documentation. + + + ERROR_DS_ROLE_NOT_VERIFIED + ERROR_DS_ROLE_NOT_VERIFIED + + + + No documentation. + + + ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL + ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL + + + + No documentation. + + + ERROR_DS_DOMAIN_RENAME_IN_PROGRESS + ERROR_DS_DOMAIN_RENAME_IN_PROGRESS + + + + No documentation. + + + ERROR_DS_EXISTING_AD_CHILD_NC + ERROR_DS_EXISTING_AD_CHILD_NC + + + + No documentation. + + + ERROR_DS_REPL_LIFETIME_EXCEEDED + ERROR_DS_REPL_LIFETIME_EXCEEDED + + + + No documentation. + + + ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER + ERROR_DS_DISALLOWED_IN_SYSTEM_CONTAINER + + + + No documentation. + + + ERROR_DS_LDAP_SEND_QUEUE_FULL + ERROR_DS_LDAP_SEND_QUEUE_FULL + + + + No documentation. + + + ERROR_DS_DRA_OUT_SCHEDULE_WINDOW + ERROR_DS_DRA_OUT_SCHEDULE_WINDOW + + + + No documentation. + + + ERROR_DS_POLICY_NOT_KNOWN + ERROR_DS_POLICY_NOT_KNOWN + + + + No documentation. + + + ERROR_NO_SITE_SETTINGS_OBJECT + ERROR_NO_SITE_SETTINGS_OBJECT + + + + No documentation. + + + ERROR_NO_SECRETS + ERROR_NO_SECRETS + + + + No documentation. + + + ERROR_NO_WRITABLE_DC_FOUND + ERROR_NO_WRITABLE_DC_FOUND + + + + No documentation. + + + ERROR_DS_NO_SERVER_OBJECT + ERROR_DS_NO_SERVER_OBJECT + + + + No documentation. + + + ERROR_DS_NO_NTDSA_OBJECT + ERROR_DS_NO_NTDSA_OBJECT + + + + No documentation. + + + ERROR_DS_NON_ASQ_SEARCH + ERROR_DS_NON_ASQ_SEARCH + + + + No documentation. + + + ERROR_DS_AUDIT_FAILURE + ERROR_DS_AUDIT_FAILURE + + + + No documentation. + + + ERROR_DS_INVALID_SEARCH_FLAG_SUBTREE + ERROR_DS_INVALID_SEARCH_FLAG_SUBTREE + + + + No documentation. + + + ERROR_DS_INVALID_SEARCH_FLAG_TUPLE + ERROR_DS_INVALID_SEARCH_FLAG_TUPLE + + + + No documentation. + + + ERROR_DS_HIERARCHY_TABLE_TOO_DEEP + ERROR_DS_HIERARCHY_TABLE_TOO_DEEP + + + + No documentation. + + + ERROR_DS_DRA_CORRUPT_UTD_VECTOR + ERROR_DS_DRA_CORRUPT_UTD_VECTOR + + + + No documentation. + + + ERROR_DS_DRA_SECRETS_DENIED + ERROR_DS_DRA_SECRETS_DENIED + + + + No documentation. + + + ERROR_DS_RESERVED_MAPI_ID + ERROR_DS_RESERVED_MAPI_ID + + + + No documentation. + + + ERROR_DS_MAPI_ID_NOT_AVAILABLE + ERROR_DS_MAPI_ID_NOT_AVAILABLE + + + + No documentation. + + + ERROR_DS_DRA_MISSING_KRBTGT_SECRET + ERROR_DS_DRA_MISSING_KRBTGT_SECRET + + + + No documentation. + + + ERROR_DS_DOMAIN_NAME_EXISTS_IN_FOREST + ERROR_DS_DOMAIN_NAME_EXISTS_IN_FOREST + + + + No documentation. + + + ERROR_DS_FLAT_NAME_EXISTS_IN_FOREST + ERROR_DS_FLAT_NAME_EXISTS_IN_FOREST + + + + No documentation. + + + ERROR_INVALID_USER_PRINCIPAL_NAME + ERROR_INVALID_USER_PRINCIPAL_NAME + + + + No documentation. + + + ERROR_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS + ERROR_DS_OID_MAPPED_GROUP_CANT_HAVE_MEMBERS + + + + No documentation. + + + ERROR_DS_OID_NOT_FOUND + ERROR_DS_OID_NOT_FOUND + + + + No documentation. + + + ERROR_DS_DRA_RECYCLED_TARGET + ERROR_DS_DRA_RECYCLED_TARGET + + + + No documentation. + + + ERROR_DS_DISALLOWED_NC_REDIRECT + ERROR_DS_DISALLOWED_NC_REDIRECT + + + + No documentation. + + + ERROR_DS_HIGH_ADLDS_FFL + ERROR_DS_HIGH_ADLDS_FFL + + + + No documentation. + + + ERROR_DS_HIGH_DSA_VERSION + ERROR_DS_HIGH_DSA_VERSION + + + + No documentation. + + + ERROR_DS_LOW_ADLDS_FFL + ERROR_DS_LOW_ADLDS_FFL + + + + No documentation. + + + ERROR_DOMAIN_SID_SAME_AS_LOCAL_WORKSTATION + ERROR_DOMAIN_SID_SAME_AS_LOCAL_WORKSTATION + + + + No documentation. + + + ERROR_DS_UNDELETE_SAM_VALIDATION_FAILED + ERROR_DS_UNDELETE_SAM_VALIDATION_FAILED + + + + No documentation. + + + ERROR_INCORRECT_ACCOUNT_TYPE + ERROR_INCORRECT_ACCOUNT_TYPE + + + + No documentation. + + + ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST + ERROR_DS_SPN_VALUE_NOT_UNIQUE_IN_FOREST + + + + No documentation. + + + ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST + ERROR_DS_UPN_VALUE_NOT_UNIQUE_IN_FOREST + + + + No documentation. + + + ERROR_DS_MISSING_FOREST_TRUST + ERROR_DS_MISSING_FOREST_TRUST + + + + No documentation. + + + ERROR_DS_VALUE_KEY_NOT_UNIQUE + ERROR_DS_VALUE_KEY_NOT_UNIQUE + + + + No documentation. + + + ERROR_IPSEC_QM_POLICY_EXISTS + ERROR_IPSEC_QM_POLICY_EXISTS + + + + No documentation. + + + ERROR_IPSEC_QM_POLICY_NOT_FOUND + ERROR_IPSEC_QM_POLICY_NOT_FOUND + + + + No documentation. + + + ERROR_IPSEC_QM_POLICY_IN_USE + ERROR_IPSEC_QM_POLICY_IN_USE + + + + No documentation. + + + ERROR_IPSEC_MM_POLICY_EXISTS + ERROR_IPSEC_MM_POLICY_EXISTS + + + + No documentation. + + + ERROR_IPSEC_MM_POLICY_NOT_FOUND + ERROR_IPSEC_MM_POLICY_NOT_FOUND + + + + No documentation. + + + ERROR_IPSEC_MM_POLICY_IN_USE + ERROR_IPSEC_MM_POLICY_IN_USE + + + + No documentation. + + + ERROR_IPSEC_MM_FILTER_EXISTS + ERROR_IPSEC_MM_FILTER_EXISTS + + + + No documentation. + + + ERROR_IPSEC_MM_FILTER_NOT_FOUND + ERROR_IPSEC_MM_FILTER_NOT_FOUND + + + + No documentation. + + + ERROR_IPSEC_TRANSPORT_FILTER_EXISTS + ERROR_IPSEC_TRANSPORT_FILTER_EXISTS + + + + No documentation. + + + ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND + ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND + + + + No documentation. + + + ERROR_IPSEC_MM_AUTH_EXISTS + ERROR_IPSEC_MM_AUTH_EXISTS + + + + No documentation. + + + ERROR_IPSEC_MM_AUTH_NOT_FOUND + ERROR_IPSEC_MM_AUTH_NOT_FOUND + + + + No documentation. + + + ERROR_IPSEC_MM_AUTH_IN_USE + ERROR_IPSEC_MM_AUTH_IN_USE + + + + No documentation. + + + ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND + ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND + + + + No documentation. + + + ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND + ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND + + + + No documentation. + + + ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND + ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND + + + + No documentation. + + + ERROR_IPSEC_TUNNEL_FILTER_EXISTS + ERROR_IPSEC_TUNNEL_FILTER_EXISTS + + + + No documentation. + + + ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND + ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND + + + + No documentation. + + + ERROR_IPSEC_MM_FILTER_PENDING_DELETION + ERROR_IPSEC_MM_FILTER_PENDING_DELETION + + + + No documentation. + + + ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION + ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION + + + + No documentation. + + + ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION + ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION + + + + No documentation. + + + ERROR_IPSEC_MM_POLICY_PENDING_DELETION + ERROR_IPSEC_MM_POLICY_PENDING_DELETION + + + + No documentation. + + + ERROR_IPSEC_MM_AUTH_PENDING_DELETION + ERROR_IPSEC_MM_AUTH_PENDING_DELETION + + + + No documentation. + + + ERROR_IPSEC_QM_POLICY_PENDING_DELETION + ERROR_IPSEC_QM_POLICY_PENDING_DELETION + + + + No documentation. + + + ERROR_IPSEC_IKE_NEG_STATUS_BEGIN + ERROR_IPSEC_IKE_NEG_STATUS_BEGIN + + + + No documentation. + + + ERROR_IPSEC_IKE_AUTH_FAIL + ERROR_IPSEC_IKE_AUTH_FAIL + + + + No documentation. + + + ERROR_IPSEC_IKE_ATTRIB_FAIL + ERROR_IPSEC_IKE_ATTRIB_FAIL + + + + No documentation. + + + ERROR_IPSEC_IKE_NEGOTIATION_PENDING + ERROR_IPSEC_IKE_NEGOTIATION_PENDING + + + + No documentation. + + + ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR + ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR + + + + No documentation. + + + ERROR_IPSEC_IKE_TIMED_OUT + ERROR_IPSEC_IKE_TIMED_OUT + + + + No documentation. + + + ERROR_IPSEC_IKE_NO_CERT + ERROR_IPSEC_IKE_NO_CERT + + + + No documentation. + + + ERROR_IPSEC_IKE_SA_DELETED + ERROR_IPSEC_IKE_SA_DELETED + + + + No documentation. + + + ERROR_IPSEC_IKE_SA_REAPED + ERROR_IPSEC_IKE_SA_REAPED + + + + No documentation. + + + ERROR_IPSEC_IKE_MM_ACQUIRE_DROP + ERROR_IPSEC_IKE_MM_ACQUIRE_DROP + + + + No documentation. + + + ERROR_IPSEC_IKE_QM_ACQUIRE_DROP + ERROR_IPSEC_IKE_QM_ACQUIRE_DROP + + + + No documentation. + + + ERROR_IPSEC_IKE_QUEUE_DROP_MM + ERROR_IPSEC_IKE_QUEUE_DROP_MM + + + + No documentation. + + + ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM + ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM + + + + No documentation. + + + ERROR_IPSEC_IKE_DROP_NO_RESPONSE + ERROR_IPSEC_IKE_DROP_NO_RESPONSE + + + + No documentation. + + + ERROR_IPSEC_IKE_MM_DELAY_DROP + ERROR_IPSEC_IKE_MM_DELAY_DROP + + + + No documentation. + + + ERROR_IPSEC_IKE_QM_DELAY_DROP + ERROR_IPSEC_IKE_QM_DELAY_DROP + + + + No documentation. + + + ERROR_IPSEC_IKE_ERROR + ERROR_IPSEC_IKE_ERROR + + + + No documentation. + + + ERROR_IPSEC_IKE_CRL_FAILED + ERROR_IPSEC_IKE_CRL_FAILED + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_KEY_USAGE + ERROR_IPSEC_IKE_INVALID_KEY_USAGE + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_CERT_TYPE + ERROR_IPSEC_IKE_INVALID_CERT_TYPE + + + + No documentation. + + + ERROR_IPSEC_IKE_NO_PRIVATE_KEY + ERROR_IPSEC_IKE_NO_PRIVATE_KEY + + + + No documentation. + + + ERROR_IPSEC_IKE_SIMULTANEOUS_REKEY + ERROR_IPSEC_IKE_SIMULTANEOUS_REKEY + + + + No documentation. + + + ERROR_IPSEC_IKE_DH_FAIL + ERROR_IPSEC_IKE_DH_FAIL + + + + No documentation. + + + ERROR_IPSEC_IKE_CRITICAL_PAYLOAD_NOT_RECOGNIZED + ERROR_IPSEC_IKE_CRITICAL_PAYLOAD_NOT_RECOGNIZED + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_HEADER + ERROR_IPSEC_IKE_INVALID_HEADER + + + + No documentation. + + + ERROR_IPSEC_IKE_NO_POLICY + ERROR_IPSEC_IKE_NO_POLICY + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_SIGNATURE + ERROR_IPSEC_IKE_INVALID_SIGNATURE + + + + No documentation. + + + ERROR_IPSEC_IKE_KERBEROS_ERROR + ERROR_IPSEC_IKE_KERBEROS_ERROR + + + + No documentation. + + + ERROR_IPSEC_IKE_NO_PUBLIC_KEY + ERROR_IPSEC_IKE_NO_PUBLIC_KEY + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR + ERROR_IPSEC_IKE_PROCESS_ERR + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_SA + ERROR_IPSEC_IKE_PROCESS_ERR_SA + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_PROP + ERROR_IPSEC_IKE_PROCESS_ERR_PROP + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_TRANS + ERROR_IPSEC_IKE_PROCESS_ERR_TRANS + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_KE + ERROR_IPSEC_IKE_PROCESS_ERR_KE + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_ID + ERROR_IPSEC_IKE_PROCESS_ERR_ID + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_CERT + ERROR_IPSEC_IKE_PROCESS_ERR_CERT + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ + ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_HASH + ERROR_IPSEC_IKE_PROCESS_ERR_HASH + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_SIG + ERROR_IPSEC_IKE_PROCESS_ERR_SIG + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_NONCE + ERROR_IPSEC_IKE_PROCESS_ERR_NONCE + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY + ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_DELETE + ERROR_IPSEC_IKE_PROCESS_ERR_DELETE + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR + ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_PAYLOAD + ERROR_IPSEC_IKE_INVALID_PAYLOAD + + + + No documentation. + + + ERROR_IPSEC_IKE_LOAD_SOFT_SA + ERROR_IPSEC_IKE_LOAD_SOFT_SA + + + + No documentation. + + + ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN + ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_COOKIE + ERROR_IPSEC_IKE_INVALID_COOKIE + + + + No documentation. + + + ERROR_IPSEC_IKE_NO_PEER_CERT + ERROR_IPSEC_IKE_NO_PEER_CERT + + + + No documentation. + + + ERROR_IPSEC_IKE_PEER_CRL_FAILED + ERROR_IPSEC_IKE_PEER_CRL_FAILED + + + + No documentation. + + + ERROR_IPSEC_IKE_POLICY_CHANGE + ERROR_IPSEC_IKE_POLICY_CHANGE + + + + No documentation. + + + ERROR_IPSEC_IKE_NO_MM_POLICY + ERROR_IPSEC_IKE_NO_MM_POLICY + + + + No documentation. + + + ERROR_IPSEC_IKE_NOTCBPRIV + ERROR_IPSEC_IKE_NOTCBPRIV + + + + No documentation. + + + ERROR_IPSEC_IKE_SECLOADFAIL + ERROR_IPSEC_IKE_SECLOADFAIL + + + + No documentation. + + + ERROR_IPSEC_IKE_FAILSSPINIT + ERROR_IPSEC_IKE_FAILSSPINIT + + + + No documentation. + + + ERROR_IPSEC_IKE_FAILQUERYSSP + ERROR_IPSEC_IKE_FAILQUERYSSP + + + + No documentation. + + + ERROR_IPSEC_IKE_SRVACQFAIL + ERROR_IPSEC_IKE_SRVACQFAIL + + + + No documentation. + + + ERROR_IPSEC_IKE_SRVQUERYCRED + ERROR_IPSEC_IKE_SRVQUERYCRED + + + + No documentation. + + + ERROR_IPSEC_IKE_GETSPIFAIL + ERROR_IPSEC_IKE_GETSPIFAIL + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_FILTER + ERROR_IPSEC_IKE_INVALID_FILTER + + + + No documentation. + + + ERROR_IPSEC_IKE_OUT_OF_MEMORY + ERROR_IPSEC_IKE_OUT_OF_MEMORY + + + + No documentation. + + + ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED + ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_POLICY + ERROR_IPSEC_IKE_INVALID_POLICY + + + + No documentation. + + + ERROR_IPSEC_IKE_UNKNOWN_DOI + ERROR_IPSEC_IKE_UNKNOWN_DOI + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_SITUATION + ERROR_IPSEC_IKE_INVALID_SITUATION + + + + No documentation. + + + ERROR_IPSEC_IKE_DH_FAILURE + ERROR_IPSEC_IKE_DH_FAILURE + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_GROUP + ERROR_IPSEC_IKE_INVALID_GROUP + + + + No documentation. + + + ERROR_IPSEC_IKE_ENCRYPT + ERROR_IPSEC_IKE_ENCRYPT + + + + No documentation. + + + ERROR_IPSEC_IKE_DECRYPT + ERROR_IPSEC_IKE_DECRYPT + + + + No documentation. + + + ERROR_IPSEC_IKE_POLICY_MATCH + ERROR_IPSEC_IKE_POLICY_MATCH + + + + No documentation. + + + ERROR_IPSEC_IKE_UNSUPPORTED_ID + ERROR_IPSEC_IKE_UNSUPPORTED_ID + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_HASH + ERROR_IPSEC_IKE_INVALID_HASH + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_HASH_ALG + ERROR_IPSEC_IKE_INVALID_HASH_ALG + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_HASH_SIZE + ERROR_IPSEC_IKE_INVALID_HASH_SIZE + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG + ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_AUTH_ALG + ERROR_IPSEC_IKE_INVALID_AUTH_ALG + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_SIG + ERROR_IPSEC_IKE_INVALID_SIG + + + + No documentation. + + + ERROR_IPSEC_IKE_LOAD_FAILED + ERROR_IPSEC_IKE_LOAD_FAILED + + + + No documentation. + + + ERROR_IPSEC_IKE_RPC_DELETE + ERROR_IPSEC_IKE_RPC_DELETE + + + + No documentation. + + + ERROR_IPSEC_IKE_BENIGN_REINIT + ERROR_IPSEC_IKE_BENIGN_REINIT + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY + ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_MAJOR_VERSION + ERROR_IPSEC_IKE_INVALID_MAJOR_VERSION + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN + ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN + + + + No documentation. + + + ERROR_IPSEC_IKE_MM_LIMIT + ERROR_IPSEC_IKE_MM_LIMIT + + + + No documentation. + + + ERROR_IPSEC_IKE_NEGOTIATION_DISABLED + ERROR_IPSEC_IKE_NEGOTIATION_DISABLED + + + + No documentation. + + + ERROR_IPSEC_IKE_QM_LIMIT + ERROR_IPSEC_IKE_QM_LIMIT + + + + No documentation. + + + ERROR_IPSEC_IKE_MM_EXPIRED + ERROR_IPSEC_IKE_MM_EXPIRED + + + + No documentation. + + + ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID + ERROR_IPSEC_IKE_PEER_MM_ASSUMED_INVALID + + + + No documentation. + + + ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH + ERROR_IPSEC_IKE_CERT_CHAIN_POLICY_MISMATCH + + + + No documentation. + + + ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID + ERROR_IPSEC_IKE_UNEXPECTED_MESSAGE_ID + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD + ERROR_IPSEC_IKE_INVALID_AUTH_PAYLOAD + + + + No documentation. + + + ERROR_IPSEC_IKE_DOS_COOKIE_SENT + ERROR_IPSEC_IKE_DOS_COOKIE_SENT + + + + No documentation. + + + ERROR_IPSEC_IKE_SHUTTING_DOWN + ERROR_IPSEC_IKE_SHUTTING_DOWN + + + + No documentation. + + + ERROR_IPSEC_IKE_CGA_AUTH_FAILED + ERROR_IPSEC_IKE_CGA_AUTH_FAILED + + + + No documentation. + + + ERROR_IPSEC_IKE_PROCESS_ERR_NATOA + ERROR_IPSEC_IKE_PROCESS_ERR_NATOA + + + + No documentation. + + + ERROR_IPSEC_IKE_INVALID_MM_FOR_QM + ERROR_IPSEC_IKE_INVALID_MM_FOR_QM + + + + No documentation. + + + ERROR_IPSEC_IKE_QM_EXPIRED + ERROR_IPSEC_IKE_QM_EXPIRED + + + + No documentation. + + + ERROR_IPSEC_IKE_TOO_MANY_FILTERS + ERROR_IPSEC_IKE_TOO_MANY_FILTERS + + + + No documentation. + + + ERROR_IPSEC_IKE_NEG_STATUS_END + ERROR_IPSEC_IKE_NEG_STATUS_END + + + + No documentation. + + + ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL + ERROR_IPSEC_IKE_KILL_DUMMY_NAP_TUNNEL + + + + No documentation. + + + ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE + ERROR_IPSEC_IKE_INNER_IP_ASSIGNMENT_FAILURE + + + + No documentation. + + + ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING + ERROR_IPSEC_IKE_REQUIRE_CP_PAYLOAD_MISSING + + + + No documentation. + + + ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING + ERROR_IPSEC_KEY_MODULE_IMPERSONATION_NEGOTIATION_PENDING + + + + No documentation. + + + ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS + ERROR_IPSEC_IKE_COEXISTENCE_SUPPRESS + + + + No documentation. + + + ERROR_IPSEC_IKE_RATELIMIT_DROP + ERROR_IPSEC_IKE_RATELIMIT_DROP + + + + No documentation. + + + ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE + ERROR_IPSEC_IKE_PEER_DOESNT_SUPPORT_MOBIKE + + + + No documentation. + + + ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE + ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE + + + + No documentation. + + + ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE + ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_FAILURE + + + + No documentation. + + + ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY + ERROR_IPSEC_IKE_AUTHORIZATION_FAILURE_WITH_OPTIONAL_RETRY + + + + No documentation. + + + ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE + ERROR_IPSEC_IKE_STRONG_CRED_AUTHORIZATION_AND_CERTMAP_FAILURE + + + + No documentation. + + + ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END + ERROR_IPSEC_IKE_NEG_STATUS_EXTENDED_END + + + + No documentation. + + + ERROR_IPSEC_BAD_SPI + ERROR_IPSEC_BAD_SPI + + + + No documentation. + + + ERROR_IPSEC_SA_LIFETIME_EXPIRED + ERROR_IPSEC_SA_LIFETIME_EXPIRED + + + + No documentation. + + + ERROR_IPSEC_WRONG_SA + ERROR_IPSEC_WRONG_SA + + + + No documentation. + + + ERROR_IPSEC_REPLAY_CHECK_FAILED + ERROR_IPSEC_REPLAY_CHECK_FAILED + + + + No documentation. + + + ERROR_IPSEC_INVALID_PACKET + ERROR_IPSEC_INVALID_PACKET + + + + No documentation. + + + ERROR_IPSEC_INTEGRITY_CHECK_FAILED + ERROR_IPSEC_INTEGRITY_CHECK_FAILED + + + + No documentation. + + + ERROR_IPSEC_CLEAR_TEXT_DROP + ERROR_IPSEC_CLEAR_TEXT_DROP + + + + No documentation. + + + ERROR_IPSEC_AUTH_FIREWALL_DROP + ERROR_IPSEC_AUTH_FIREWALL_DROP + + + + No documentation. + + + ERROR_IPSEC_THROTTLE_DROP + ERROR_IPSEC_THROTTLE_DROP + + + + No documentation. + + + ERROR_IPSEC_DOSP_BLOCK + ERROR_IPSEC_DOSP_BLOCK + + + + No documentation. + + + ERROR_IPSEC_DOSP_RECEIVED_MULTICAST + ERROR_IPSEC_DOSP_RECEIVED_MULTICAST + + + + No documentation. + + + ERROR_IPSEC_DOSP_INVALID_PACKET + ERROR_IPSEC_DOSP_INVALID_PACKET + + + + No documentation. + + + ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED + ERROR_IPSEC_DOSP_STATE_LOOKUP_FAILED + + + + No documentation. + + + ERROR_IPSEC_DOSP_MAX_ENTRIES + ERROR_IPSEC_DOSP_MAX_ENTRIES + + + + No documentation. + + + ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED + ERROR_IPSEC_DOSP_KEYMOD_NOT_ALLOWED + + + + No documentation. + + + ERROR_IPSEC_DOSP_NOT_INSTALLED + ERROR_IPSEC_DOSP_NOT_INSTALLED + + + + No documentation. + + + ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES + ERROR_IPSEC_DOSP_MAX_PER_IP_RATELIMIT_QUEUES + + + + No documentation. + + + ERROR_SXS_SECTION_NOT_FOUND + ERROR_SXS_SECTION_NOT_FOUND + + + + No documentation. + + + ERROR_SXS_CANT_GEN_ACTCTX + ERROR_SXS_CANT_GEN_ACTCTX + + + + No documentation. + + + ERROR_SXS_INVALID_ACTCTXDATA_FORMAT + ERROR_SXS_INVALID_ACTCTXDATA_FORMAT + + + + No documentation. + + + ERROR_SXS_ASSEMBLY_NOT_FOUND + ERROR_SXS_ASSEMBLY_NOT_FOUND + + + + No documentation. + + + ERROR_SXS_MANIFEST_FORMAT_ERROR + ERROR_SXS_MANIFEST_FORMAT_ERROR + + + + No documentation. + + + ERROR_SXS_MANIFEST_PARSE_ERROR + ERROR_SXS_MANIFEST_PARSE_ERROR + + + + No documentation. + + + ERROR_SXS_ACTIVATION_CONTEXT_DISABLED + ERROR_SXS_ACTIVATION_CONTEXT_DISABLED + + + + No documentation. + + + ERROR_SXS_KEY_NOT_FOUND + ERROR_SXS_KEY_NOT_FOUND + + + + No documentation. + + + ERROR_SXS_VERSION_CONFLICT + ERROR_SXS_VERSION_CONFLICT + + + + No documentation. + + + ERROR_SXS_WRONG_SECTION_TYPE + ERROR_SXS_WRONG_SECTION_TYPE + + + + No documentation. + + + ERROR_SXS_THREAD_QUERIES_DISABLED + ERROR_SXS_THREAD_QUERIES_DISABLED + + + + No documentation. + + + ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET + ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET + + + + No documentation. + + + ERROR_SXS_UNKNOWN_ENCODING_GROUP + ERROR_SXS_UNKNOWN_ENCODING_GROUP + + + + No documentation. + + + ERROR_SXS_UNKNOWN_ENCODING + ERROR_SXS_UNKNOWN_ENCODING + + + + No documentation. + + + ERROR_SXS_INVALID_XML_NAMESPACE_URI + ERROR_SXS_INVALID_XML_NAMESPACE_URI + + + + No documentation. + + + ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED + ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED + + + + No documentation. + + + ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED + ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED + + + + No documentation. + + + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE + + + + No documentation. + + + ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE + ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE + + + + No documentation. + + + ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE + ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE + + + + No documentation. + + + ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT + ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT + + + + No documentation. + + + ERROR_SXS_DUPLICATE_DLL_NAME + ERROR_SXS_DUPLICATE_DLL_NAME + + + + No documentation. + + + ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME + ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME + + + + No documentation. + + + ERROR_SXS_DUPLICATE_CLSID + ERROR_SXS_DUPLICATE_CLSID + + + + No documentation. + + + ERROR_SXS_DUPLICATE_IID + ERROR_SXS_DUPLICATE_IID + + + + No documentation. + + + ERROR_SXS_DUPLICATE_TLBID + ERROR_SXS_DUPLICATE_TLBID + + + + No documentation. + + + ERROR_SXS_DUPLICATE_PROGID + ERROR_SXS_DUPLICATE_PROGID + + + + No documentation. + + + ERROR_SXS_DUPLICATE_ASSEMBLY_NAME + ERROR_SXS_DUPLICATE_ASSEMBLY_NAME + + + + No documentation. + + + ERROR_SXS_FILE_HASH_MISMATCH + ERROR_SXS_FILE_HASH_MISMATCH + + + + No documentation. + + + ERROR_SXS_POLICY_PARSE_ERROR + ERROR_SXS_POLICY_PARSE_ERROR + + + + No documentation. + + + ERROR_SXS_XML_E_MISSINGQUOTE + ERROR_SXS_XML_E_MISSINGQUOTE + + + + No documentation. + + + ERROR_SXS_XML_E_COMMENTSYNTAX + ERROR_SXS_XML_E_COMMENTSYNTAX + + + + No documentation. + + + ERROR_SXS_XML_E_BADSTARTNAMECHAR + ERROR_SXS_XML_E_BADSTARTNAMECHAR + + + + No documentation. + + + ERROR_SXS_XML_E_BADNAMECHAR + ERROR_SXS_XML_E_BADNAMECHAR + + + + No documentation. + + + ERROR_SXS_XML_E_BADCHARINSTRING + ERROR_SXS_XML_E_BADCHARINSTRING + + + + No documentation. + + + ERROR_SXS_XML_E_XMLDECLSYNTAX + ERROR_SXS_XML_E_XMLDECLSYNTAX + + + + No documentation. + + + ERROR_SXS_XML_E_BADCHARDATA + ERROR_SXS_XML_E_BADCHARDATA + + + + No documentation. + + + ERROR_SXS_XML_E_MISSINGWHITESPACE + ERROR_SXS_XML_E_MISSINGWHITESPACE + + + + No documentation. + + + ERROR_SXS_XML_E_EXPECTINGTAGEND + ERROR_SXS_XML_E_EXPECTINGTAGEND + + + + No documentation. + + + ERROR_SXS_XML_E_MISSINGSEMICOLON + ERROR_SXS_XML_E_MISSINGSEMICOLON + + + + No documentation. + + + ERROR_SXS_XML_E_UNBALANCEDPAREN + ERROR_SXS_XML_E_UNBALANCEDPAREN + + + + No documentation. + + + ERROR_SXS_XML_E_INTERNALERROR + ERROR_SXS_XML_E_INTERNALERROR + + + + No documentation. + + + ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE + ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE + + + + No documentation. + + + ERROR_SXS_XML_E_INCOMPLETE_ENCODING + ERROR_SXS_XML_E_INCOMPLETE_ENCODING + + + + No documentation. + + + ERROR_SXS_XML_E_MISSING_PAREN + ERROR_SXS_XML_E_MISSING_PAREN + + + + No documentation. + + + ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE + ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE + + + + No documentation. + + + ERROR_SXS_XML_E_MULTIPLE_COLONS + ERROR_SXS_XML_E_MULTIPLE_COLONS + + + + No documentation. + + + ERROR_SXS_XML_E_INVALID_DECIMAL + ERROR_SXS_XML_E_INVALID_DECIMAL + + + + No documentation. + + + ERROR_SXS_XML_E_INVALID_HEXIDECIMAL + ERROR_SXS_XML_E_INVALID_HEXIDECIMAL + + + + No documentation. + + + ERROR_SXS_XML_E_INVALID_UNICODE + ERROR_SXS_XML_E_INVALID_UNICODE + + + + No documentation. + + + ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK + ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK + + + + No documentation. + + + ERROR_SXS_XML_E_UNEXPECTEDENDTAG + ERROR_SXS_XML_E_UNEXPECTEDENDTAG + + + + No documentation. + + + ERROR_SXS_XML_E_UNCLOSEDTAG + ERROR_SXS_XML_E_UNCLOSEDTAG + + + + No documentation. + + + ERROR_SXS_XML_E_DUPLICATEATTRIBUTE + ERROR_SXS_XML_E_DUPLICATEATTRIBUTE + + + + No documentation. + + + ERROR_SXS_XML_E_MULTIPLEROOTS + ERROR_SXS_XML_E_MULTIPLEROOTS + + + + No documentation. + + + ERROR_SXS_XML_E_INVALIDATROOTLEVEL + ERROR_SXS_XML_E_INVALIDATROOTLEVEL + + + + No documentation. + + + ERROR_SXS_XML_E_BADXMLDECL + ERROR_SXS_XML_E_BADXMLDECL + + + + No documentation. + + + ERROR_SXS_XML_E_MISSINGROOT + ERROR_SXS_XML_E_MISSINGROOT + + + + No documentation. + + + ERROR_SXS_XML_E_UNEXPECTEDEOF + ERROR_SXS_XML_E_UNEXPECTEDEOF + + + + No documentation. + + + ERROR_SXS_XML_E_BADPEREFINSUBSET + ERROR_SXS_XML_E_BADPEREFINSUBSET + + + + No documentation. + + + ERROR_SXS_XML_E_UNCLOSEDSTARTTAG + ERROR_SXS_XML_E_UNCLOSEDSTARTTAG + + + + No documentation. + + + ERROR_SXS_XML_E_UNCLOSEDENDTAG + ERROR_SXS_XML_E_UNCLOSEDENDTAG + + + + No documentation. + + + ERROR_SXS_XML_E_UNCLOSEDSTRING + ERROR_SXS_XML_E_UNCLOSEDSTRING + + + + No documentation. + + + ERROR_SXS_XML_E_UNCLOSEDCOMMENT + ERROR_SXS_XML_E_UNCLOSEDCOMMENT + + + + No documentation. + + + ERROR_SXS_XML_E_UNCLOSEDDECL + ERROR_SXS_XML_E_UNCLOSEDDECL + + + + No documentation. + + + ERROR_SXS_XML_E_UNCLOSEDCDATA + ERROR_SXS_XML_E_UNCLOSEDCDATA + + + + No documentation. + + + ERROR_SXS_XML_E_RESERVEDNAMESPACE + ERROR_SXS_XML_E_RESERVEDNAMESPACE + + + + No documentation. + + + ERROR_SXS_XML_E_INVALIDENCODING + ERROR_SXS_XML_E_INVALIDENCODING + + + + No documentation. + + + ERROR_SXS_XML_E_INVALIDSWITCH + ERROR_SXS_XML_E_INVALIDSWITCH + + + + No documentation. + + + ERROR_SXS_XML_E_BADXMLCASE + ERROR_SXS_XML_E_BADXMLCASE + + + + No documentation. + + + ERROR_SXS_XML_E_INVALID_STANDALONE + ERROR_SXS_XML_E_INVALID_STANDALONE + + + + No documentation. + + + ERROR_SXS_XML_E_UNEXPECTED_STANDALONE + ERROR_SXS_XML_E_UNEXPECTED_STANDALONE + + + + No documentation. + + + ERROR_SXS_XML_E_INVALID_VERSION + ERROR_SXS_XML_E_INVALID_VERSION + + + + No documentation. + + + ERROR_SXS_XML_E_MISSINGEQUALS + ERROR_SXS_XML_E_MISSINGEQUALS + + + + No documentation. + + + ERROR_SXS_PROTECTION_RECOVERY_FAILED + ERROR_SXS_PROTECTION_RECOVERY_FAILED + + + + No documentation. + + + ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT + ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT + + + + No documentation. + + + ERROR_SXS_PROTECTION_CATALOG_NOT_VALID + ERROR_SXS_PROTECTION_CATALOG_NOT_VALID + + + + No documentation. + + + ERROR_SXS_UNTRANSLATABLE_HRESULT + ERROR_SXS_UNTRANSLATABLE_HRESULT + + + + No documentation. + + + ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING + ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING + + + + No documentation. + + + ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE + ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE + + + + No documentation. + + + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME + + + + No documentation. + + + ERROR_SXS_ASSEMBLY_MISSING + ERROR_SXS_ASSEMBLY_MISSING + + + + No documentation. + + + ERROR_SXS_CORRUPT_ACTIVATION_STACK + ERROR_SXS_CORRUPT_ACTIVATION_STACK + + + + No documentation. + + + ERROR_SXS_CORRUPTION + ERROR_SXS_CORRUPTION + + + + No documentation. + + + ERROR_SXS_EARLY_DEACTIVATION + ERROR_SXS_EARLY_DEACTIVATION + + + + No documentation. + + + ERROR_SXS_INVALID_DEACTIVATION + ERROR_SXS_INVALID_DEACTIVATION + + + + No documentation. + + + ERROR_SXS_MULTIPLE_DEACTIVATION + ERROR_SXS_MULTIPLE_DEACTIVATION + + + + No documentation. + + + ERROR_SXS_PROCESS_TERMINATION_REQUESTED + ERROR_SXS_PROCESS_TERMINATION_REQUESTED + + + + No documentation. + + + ERROR_SXS_RELEASE_ACTIVATION_CONTEXT + ERROR_SXS_RELEASE_ACTIVATION_CONTEXT + + + + No documentation. + + + ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY + ERROR_SXS_SYSTEM_DEFAULT_ACTIVATION_CONTEXT_EMPTY + + + + No documentation. + + + ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE + ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_VALUE + + + + No documentation. + + + ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME + ERROR_SXS_INVALID_IDENTITY_ATTRIBUTE_NAME + + + + No documentation. + + + ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE + ERROR_SXS_IDENTITY_DUPLICATE_ATTRIBUTE + + + + No documentation. + + + ERROR_SXS_IDENTITY_PARSE_ERROR + ERROR_SXS_IDENTITY_PARSE_ERROR + + + + No documentation. + + + ERROR_MALFORMED_SUBSTITUTION_STRING + ERROR_MALFORMED_SUBSTITUTION_STRING + + + + No documentation. + + + ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN + ERROR_SXS_INCORRECT_PUBLIC_KEY_TOKEN + + + + No documentation. + + + ERROR_UNMAPPED_SUBSTITUTION_STRING + ERROR_UNMAPPED_SUBSTITUTION_STRING + + + + No documentation. + + + ERROR_SXS_ASSEMBLY_NOT_LOCKED + ERROR_SXS_ASSEMBLY_NOT_LOCKED + + + + No documentation. + + + ERROR_SXS_COMPONENT_STORE_CORRUPT + ERROR_SXS_COMPONENT_STORE_CORRUPT + + + + No documentation. + + + ERROR_ADVANCED_INSTALLER_FAILED + ERROR_ADVANCED_INSTALLER_FAILED + + + + No documentation. + + + ERROR_XML_ENCODING_MISMATCH + ERROR_XML_ENCODING_MISMATCH + + + + No documentation. + + + ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT + ERROR_SXS_MANIFEST_IDENTITY_SAME_BUT_CONTENTS_DIFFERENT + + + + No documentation. + + + ERROR_SXS_IDENTITIES_DIFFERENT + ERROR_SXS_IDENTITIES_DIFFERENT + + + + No documentation. + + + ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT + ERROR_SXS_ASSEMBLY_IS_NOT_A_DEPLOYMENT + + + + No documentation. + + + ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY + ERROR_SXS_FILE_NOT_PART_OF_ASSEMBLY + + + + No documentation. + + + ERROR_SXS_MANIFEST_TOO_BIG + ERROR_SXS_MANIFEST_TOO_BIG + + + + No documentation. + + + ERROR_SXS_SETTING_NOT_REGISTERED + ERROR_SXS_SETTING_NOT_REGISTERED + + + + No documentation. + + + ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE + ERROR_SXS_TRANSACTION_CLOSURE_INCOMPLETE + + + + No documentation. + + + ERROR_SMI_PRIMITIVE_INSTALLER_FAILED + ERROR_SMI_PRIMITIVE_INSTALLER_FAILED + + + + No documentation. + + + ERROR_GENERIC_COMMAND_FAILED + ERROR_GENERIC_COMMAND_FAILED + + + + No documentation. + + + ERROR_SXS_FILE_HASH_MISSING + ERROR_SXS_FILE_HASH_MISSING + + + + No documentation. + + + ERROR_EVT_INVALID_CHANNEL_PATH + ERROR_EVT_INVALID_CHANNEL_PATH + + + + No documentation. + + + ERROR_EVT_INVALID_QUERY + ERROR_EVT_INVALID_QUERY + + + + No documentation. + + + ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND + ERROR_EVT_PUBLISHER_METADATA_NOT_FOUND + + + + No documentation. + + + ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND + ERROR_EVT_EVENT_TEMPLATE_NOT_FOUND + + + + No documentation. + + + ERROR_EVT_INVALID_PUBLISHER_NAME + ERROR_EVT_INVALID_PUBLISHER_NAME + + + + No documentation. + + + ERROR_EVT_INVALID_EVENT_DATA + ERROR_EVT_INVALID_EVENT_DATA + + + + No documentation. + + + ERROR_EVT_CHANNEL_NOT_FOUND + ERROR_EVT_CHANNEL_NOT_FOUND + + + + No documentation. + + + ERROR_EVT_MALFORMED_XML_TEXT + ERROR_EVT_MALFORMED_XML_TEXT + + + + No documentation. + + + ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL + ERROR_EVT_SUBSCRIPTION_TO_DIRECT_CHANNEL + + + + No documentation. + + + ERROR_EVT_CONFIGURATION_ERROR + ERROR_EVT_CONFIGURATION_ERROR + + + + No documentation. + + + ERROR_EVT_QUERY_RESULT_STALE + ERROR_EVT_QUERY_RESULT_STALE + + + + No documentation. + + + ERROR_EVT_QUERY_RESULT_INVALID_POSITION + ERROR_EVT_QUERY_RESULT_INVALID_POSITION + + + + No documentation. + + + ERROR_EVT_NON_VALIDATING_MSXML + ERROR_EVT_NON_VALIDATING_MSXML + + + + No documentation. + + + ERROR_EVT_FILTER_ALREADYSCOPED + ERROR_EVT_FILTER_ALREADYSCOPED + + + + No documentation. + + + ERROR_EVT_FILTER_NOTELTSET + ERROR_EVT_FILTER_NOTELTSET + + + + No documentation. + + + ERROR_EVT_FILTER_INVARG + ERROR_EVT_FILTER_INVARG + + + + No documentation. + + + ERROR_EVT_FILTER_INVTEST + ERROR_EVT_FILTER_INVTEST + + + + No documentation. + + + ERROR_EVT_FILTER_INVTYPE + ERROR_EVT_FILTER_INVTYPE + + + + No documentation. + + + ERROR_EVT_FILTER_PARSEERR + ERROR_EVT_FILTER_PARSEERR + + + + No documentation. + + + ERROR_EVT_FILTER_UNSUPPORTEDOP + ERROR_EVT_FILTER_UNSUPPORTEDOP + + + + No documentation. + + + ERROR_EVT_FILTER_UNEXPECTEDTOKEN + ERROR_EVT_FILTER_UNEXPECTEDTOKEN + + + + No documentation. + + + ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL + ERROR_EVT_INVALID_OPERATION_OVER_ENABLED_DIRECT_CHANNEL + + + + No documentation. + + + ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE + ERROR_EVT_INVALID_CHANNEL_PROPERTY_VALUE + + + + No documentation. + + + ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE + ERROR_EVT_INVALID_PUBLISHER_PROPERTY_VALUE + + + + No documentation. + + + ERROR_EVT_CHANNEL_CANNOT_ACTIVATE + ERROR_EVT_CHANNEL_CANNOT_ACTIVATE + + + + No documentation. + + + ERROR_EVT_FILTER_TOO_COMPLEX + ERROR_EVT_FILTER_TOO_COMPLEX + + + + No documentation. + + + ERROR_EVT_MESSAGE_NOT_FOUND + ERROR_EVT_MESSAGE_NOT_FOUND + + + + No documentation. + + + ERROR_EVT_MESSAGE_ID_NOT_FOUND + ERROR_EVT_MESSAGE_ID_NOT_FOUND + + + + No documentation. + + + ERROR_EVT_UNRESOLVED_VALUE_INSERT + ERROR_EVT_UNRESOLVED_VALUE_INSERT + + + + No documentation. + + + ERROR_EVT_UNRESOLVED_PARAMETER_INSERT + ERROR_EVT_UNRESOLVED_PARAMETER_INSERT + + + + No documentation. + + + ERROR_EVT_MAX_INSERTS_REACHED + ERROR_EVT_MAX_INSERTS_REACHED + + + + No documentation. + + + ERROR_EVT_EVENT_DEFINITION_NOT_FOUND + ERROR_EVT_EVENT_DEFINITION_NOT_FOUND + + + + No documentation. + + + ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND + ERROR_EVT_MESSAGE_LOCALE_NOT_FOUND + + + + No documentation. + + + ERROR_EVT_VERSION_TOO_OLD + ERROR_EVT_VERSION_TOO_OLD + + + + No documentation. + + + ERROR_EVT_VERSION_TOO_NEW + ERROR_EVT_VERSION_TOO_NEW + + + + No documentation. + + + ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY + ERROR_EVT_CANNOT_OPEN_CHANNEL_OF_QUERY + + + + No documentation. + + + ERROR_EVT_PUBLISHER_DISABLED + ERROR_EVT_PUBLISHER_DISABLED + + + + No documentation. + + + ERROR_EVT_FILTER_OUT_OF_RANGE + ERROR_EVT_FILTER_OUT_OF_RANGE + + + + No documentation. + + + ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE + ERROR_EC_SUBSCRIPTION_CANNOT_ACTIVATE + + + + No documentation. + + + ERROR_EC_LOG_DISABLED + ERROR_EC_LOG_DISABLED + + + + No documentation. + + + ERROR_EC_CIRCULAR_FORWARDING + ERROR_EC_CIRCULAR_FORWARDING + + + + No documentation. + + + ERROR_EC_CREDSTORE_FULL + ERROR_EC_CREDSTORE_FULL + + + + No documentation. + + + ERROR_EC_CRED_NOT_FOUND + ERROR_EC_CRED_NOT_FOUND + + + + No documentation. + + + ERROR_EC_NO_ACTIVE_CHANNEL + ERROR_EC_NO_ACTIVE_CHANNEL + + + + No documentation. + + + ERROR_MUI_FILE_NOT_FOUND + ERROR_MUI_FILE_NOT_FOUND + + + + No documentation. + + + ERROR_MUI_INVALID_FILE + ERROR_MUI_INVALID_FILE + + + + No documentation. + + + ERROR_MUI_INVALID_RC_CONFIG + ERROR_MUI_INVALID_RC_CONFIG + + + + No documentation. + + + ERROR_MUI_INVALID_LOCALE_NAME + ERROR_MUI_INVALID_LOCALE_NAME + + + + No documentation. + + + ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME + ERROR_MUI_INVALID_ULTIMATEFALLBACK_NAME + + + + No documentation. + + + ERROR_MUI_FILE_NOT_LOADED + ERROR_MUI_FILE_NOT_LOADED + + + + No documentation. + + + ERROR_RESOURCE_ENUM_USER_STOP + ERROR_RESOURCE_ENUM_USER_STOP + + + + No documentation. + + + ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED + ERROR_MUI_INTLSETTINGS_UILANG_NOT_INSTALLED + + + + No documentation. + + + ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME + ERROR_MUI_INTLSETTINGS_INVALID_LOCALE_NAME + + + + No documentation. + + + ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE + ERROR_MRM_RUNTIME_NO_DEFAULT_OR_NEUTRAL_RESOURCE + + + + No documentation. + + + ERROR_MRM_INVALID_PRICONFIG + ERROR_MRM_INVALID_PRICONFIG + + + + No documentation. + + + ERROR_MRM_INVALID_FILE_TYPE + ERROR_MRM_INVALID_FILE_TYPE + + + + No documentation. + + + ERROR_MRM_UNKNOWN_QUALIFIER + ERROR_MRM_UNKNOWN_QUALIFIER + + + + No documentation. + + + ERROR_MRM_INVALID_QUALIFIER_VALUE + ERROR_MRM_INVALID_QUALIFIER_VALUE + + + + No documentation. + + + ERROR_MRM_NO_CANDIDATE + ERROR_MRM_NO_CANDIDATE + + + + No documentation. + + + ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE + ERROR_MRM_NO_MATCH_OR_DEFAULT_CANDIDATE + + + + No documentation. + + + ERROR_MRM_RESOURCE_TYPE_MISMATCH + ERROR_MRM_RESOURCE_TYPE_MISMATCH + + + + No documentation. + + + ERROR_MRM_DUPLICATE_MAP_NAME + ERROR_MRM_DUPLICATE_MAP_NAME + + + + No documentation. + + + ERROR_MRM_DUPLICATE_ENTRY + ERROR_MRM_DUPLICATE_ENTRY + + + + No documentation. + + + ERROR_MRM_INVALID_RESOURCE_IDENTIFIER + ERROR_MRM_INVALID_RESOURCE_IDENTIFIER + + + + No documentation. + + + ERROR_MRM_FILEPATH_TOO_LONG + ERROR_MRM_FILEPATH_TOO_LONG + + + + No documentation. + + + ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE + ERROR_MRM_UNSUPPORTED_DIRECTORY_TYPE + + + + No documentation. + + + ERROR_MRM_INVALID_PRI_FILE + ERROR_MRM_INVALID_PRI_FILE + + + + No documentation. + + + ERROR_MRM_NAMED_RESOURCE_NOT_FOUND + ERROR_MRM_NAMED_RESOURCE_NOT_FOUND + + + + No documentation. + + + ERROR_MRM_MAP_NOT_FOUND + ERROR_MRM_MAP_NOT_FOUND + + + + No documentation. + + + ERROR_MRM_UNSUPPORTED_PROFILE_TYPE + ERROR_MRM_UNSUPPORTED_PROFILE_TYPE + + + + No documentation. + + + ERROR_MRM_INVALID_QUALIFIER_OPERATOR + ERROR_MRM_INVALID_QUALIFIER_OPERATOR + + + + No documentation. + + + ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE + ERROR_MRM_INDETERMINATE_QUALIFIER_VALUE + + + + No documentation. + + + ERROR_MRM_AUTOMERGE_ENABLED + ERROR_MRM_AUTOMERGE_ENABLED + + + + No documentation. + + + ERROR_MRM_TOO_MANY_RESOURCES + ERROR_MRM_TOO_MANY_RESOURCES + + + + No documentation. + + + ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_MERGE + ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_MERGE + + + + No documentation. + + + ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_LOAD_UNLOAD_PRI_FILE + ERROR_MRM_UNSUPPORTED_FILE_TYPE_FOR_LOAD_UNLOAD_PRI_FILE + + + + No documentation. + + + ERROR_MRM_NO_CURRENT_VIEW_ON_THREAD + ERROR_MRM_NO_CURRENT_VIEW_ON_THREAD + + + + No documentation. + + + ERROR_DIFFERENT_PROFILE_RESOURCE_MANAGER_EXIST + ERROR_DIFFERENT_PROFILE_RESOURCE_MANAGER_EXIST + + + + No documentation. + + + ERROR_OPERATION_NOT_ALLOWED_FROM_SYSTEM_COMPONENT + ERROR_OPERATION_NOT_ALLOWED_FROM_SYSTEM_COMPONENT + + + + No documentation. + + + ERROR_MRM_DIRECT_REF_TO_NON_DEFAULT_RESOURCE + ERROR_MRM_DIRECT_REF_TO_NON_DEFAULT_RESOURCE + + + + No documentation. + + + ERROR_MRM_GENERATION_COUNT_MISMATCH + ERROR_MRM_GENERATION_COUNT_MISMATCH + + + + No documentation. + + + ERROR_PRI_MERGE_VERSION_MISMATCH + ERROR_PRI_MERGE_VERSION_MISMATCH + + + + No documentation. + + + ERROR_PRI_MERGE_MISSING_SCHEMA + ERROR_PRI_MERGE_MISSING_SCHEMA + + + + No documentation. + + + ERROR_PRI_MERGE_LOAD_FILE_FAILED + ERROR_PRI_MERGE_LOAD_FILE_FAILED + + + + No documentation. + + + ERROR_PRI_MERGE_ADD_FILE_FAILED + ERROR_PRI_MERGE_ADD_FILE_FAILED + + + + No documentation. + + + ERROR_PRI_MERGE_WRITE_FILE_FAILED + ERROR_PRI_MERGE_WRITE_FILE_FAILED + + + + No documentation. + + + ERROR_PRI_MERGE_MULTIPLE_PACKAGE_FAMILIES_NOT_ALLOWED + ERROR_PRI_MERGE_MULTIPLE_PACKAGE_FAMILIES_NOT_ALLOWED + + + + No documentation. + + + ERROR_PRI_MERGE_MULTIPLE_MAIN_PACKAGES_NOT_ALLOWED + ERROR_PRI_MERGE_MULTIPLE_MAIN_PACKAGES_NOT_ALLOWED + + + + No documentation. + + + ERROR_PRI_MERGE_BUNDLE_PACKAGES_NOT_ALLOWED + ERROR_PRI_MERGE_BUNDLE_PACKAGES_NOT_ALLOWED + + + + No documentation. + + + ERROR_PRI_MERGE_MAIN_PACKAGE_REQUIRED + ERROR_PRI_MERGE_MAIN_PACKAGE_REQUIRED + + + + No documentation. + + + ERROR_PRI_MERGE_RESOURCE_PACKAGE_REQUIRED + ERROR_PRI_MERGE_RESOURCE_PACKAGE_REQUIRED + + + + No documentation. + + + ERROR_PRI_MERGE_INVALID_FILE_NAME + ERROR_PRI_MERGE_INVALID_FILE_NAME + + + + No documentation. + + + ERROR_MCA_INVALID_CAPABILITIES_STRING + ERROR_MCA_INVALID_CAPABILITIES_STRING + + + + No documentation. + + + ERROR_MCA_INVALID_VCP_VERSION + ERROR_MCA_INVALID_VCP_VERSION + + + + No documentation. + + + ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION + ERROR_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION + + + + No documentation. + + + ERROR_MCA_MCCS_VERSION_MISMATCH + ERROR_MCA_MCCS_VERSION_MISMATCH + + + + No documentation. + + + ERROR_MCA_UNSUPPORTED_MCCS_VERSION + ERROR_MCA_UNSUPPORTED_MCCS_VERSION + + + + No documentation. + + + ERROR_MCA_INTERNAL_ERROR + ERROR_MCA_INTERNAL_ERROR + + + + No documentation. + + + ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED + ERROR_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED + + + + No documentation. + + + ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE + ERROR_MCA_UNSUPPORTED_COLOR_TEMPERATURE + + + + No documentation. + + + ERROR_AMBIGUOUS_SYSTEM_DEVICE + ERROR_AMBIGUOUS_SYSTEM_DEVICE + + + + No documentation. + + + ERROR_SYSTEM_DEVICE_NOT_FOUND + ERROR_SYSTEM_DEVICE_NOT_FOUND + + + + No documentation. + + + ERROR_HASH_NOT_SUPPORTED + ERROR_HASH_NOT_SUPPORTED + + + + No documentation. + + + ERROR_HASH_NOT_PRESENT + ERROR_HASH_NOT_PRESENT + + + + No documentation. + + + ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED + ERROR_SECONDARY_IC_PROVIDER_NOT_REGISTERED + + + + No documentation. + + + ERROR_GPIO_CLIENT_INFORMATION_INVALID + ERROR_GPIO_CLIENT_INFORMATION_INVALID + + + + No documentation. + + + ERROR_GPIO_VERSION_NOT_SUPPORTED + ERROR_GPIO_VERSION_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GPIO_INVALID_REGISTRATION_PACKET + ERROR_GPIO_INVALID_REGISTRATION_PACKET + + + + No documentation. + + + ERROR_GPIO_OPERATION_DENIED + ERROR_GPIO_OPERATION_DENIED + + + + No documentation. + + + ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE + ERROR_GPIO_INCOMPATIBLE_CONNECT_MODE + + + + No documentation. + + + ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED + ERROR_GPIO_INTERRUPT_ALREADY_UNMASKED + + + + No documentation. + + + ERROR_CANNOT_SWITCH_RUNLEVEL + ERROR_CANNOT_SWITCH_RUNLEVEL + + + + No documentation. + + + ERROR_INVALID_RUNLEVEL_SETTING + ERROR_INVALID_RUNLEVEL_SETTING + + + + No documentation. + + + ERROR_RUNLEVEL_SWITCH_TIMEOUT + ERROR_RUNLEVEL_SWITCH_TIMEOUT + + + + No documentation. + + + ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT + ERROR_RUNLEVEL_SWITCH_AGENT_TIMEOUT + + + + No documentation. + + + ERROR_RUNLEVEL_SWITCH_IN_PROGRESS + ERROR_RUNLEVEL_SWITCH_IN_PROGRESS + + + + No documentation. + + + ERROR_SERVICES_FAILED_AUTOSTART + ERROR_SERVICES_FAILED_AUTOSTART + + + + No documentation. + + + ERROR_COM_TASK_STOP_PENDING + ERROR_COM_TASK_STOP_PENDING + + + + No documentation. + + + ERROR_INSTALL_OPEN_PACKAGE_FAILED + ERROR_INSTALL_OPEN_PACKAGE_FAILED + + + + No documentation. + + + ERROR_INSTALL_PACKAGE_NOT_FOUND + ERROR_INSTALL_PACKAGE_NOT_FOUND + + + + No documentation. + + + ERROR_INSTALL_INVALID_PACKAGE + ERROR_INSTALL_INVALID_PACKAGE + + + + No documentation. + + + ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED + ERROR_INSTALL_RESOLVE_DEPENDENCY_FAILED + + + + No documentation. + + + ERROR_INSTALL_OUT_OF_DISK_SPACE + ERROR_INSTALL_OUT_OF_DISK_SPACE + + + + No documentation. + + + ERROR_INSTALL_NETWORK_FAILURE + ERROR_INSTALL_NETWORK_FAILURE + + + + No documentation. + + + ERROR_INSTALL_REGISTRATION_FAILURE + ERROR_INSTALL_REGISTRATION_FAILURE + + + + No documentation. + + + ERROR_INSTALL_DEREGISTRATION_FAILURE + ERROR_INSTALL_DEREGISTRATION_FAILURE + + + + No documentation. + + + ERROR_INSTALL_CANCEL + ERROR_INSTALL_CANCEL + + + + No documentation. + + + ERROR_INSTALL_FAILED + ERROR_INSTALL_FAILED + + + + No documentation. + + + ERROR_REMOVE_FAILED + ERROR_REMOVE_FAILED + + + + No documentation. + + + ERROR_PACKAGE_ALREADY_EXISTS + ERROR_PACKAGE_ALREADY_EXISTS + + + + No documentation. + + + ERROR_NEEDS_REMEDIATION + ERROR_NEEDS_REMEDIATION + + + + No documentation. + + + ERROR_INSTALL_PREREQUISITE_FAILED + ERROR_INSTALL_PREREQUISITE_FAILED + + + + No documentation. + + + ERROR_PACKAGE_REPOSITORY_CORRUPTED + ERROR_PACKAGE_REPOSITORY_CORRUPTED + + + + No documentation. + + + ERROR_INSTALL_POLICY_FAILURE + ERROR_INSTALL_POLICY_FAILURE + + + + No documentation. + + + ERROR_PACKAGE_UPDATING + ERROR_PACKAGE_UPDATING + + + + No documentation. + + + ERROR_DEPLOYMENT_BLOCKED_BY_POLICY + ERROR_DEPLOYMENT_BLOCKED_BY_POLICY + + + + No documentation. + + + ERROR_PACKAGES_IN_USE + ERROR_PACKAGES_IN_USE + + + + No documentation. + + + ERROR_RECOVERY_FILE_CORRUPT + ERROR_RECOVERY_FILE_CORRUPT + + + + No documentation. + + + ERROR_INVALID_STAGED_SIGNATURE + ERROR_INVALID_STAGED_SIGNATURE + + + + No documentation. + + + ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED + ERROR_DELETING_EXISTING_APPLICATIONDATA_STORE_FAILED + + + + No documentation. + + + ERROR_INSTALL_PACKAGE_DOWNGRADE + ERROR_INSTALL_PACKAGE_DOWNGRADE + + + + No documentation. + + + ERROR_SYSTEM_NEEDS_REMEDIATION + ERROR_SYSTEM_NEEDS_REMEDIATION + + + + No documentation. + + + ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN + ERROR_APPX_INTEGRITY_FAILURE_CLR_NGEN + + + + No documentation. + + + ERROR_RESILIENCY_FILE_CORRUPT + ERROR_RESILIENCY_FILE_CORRUPT + + + + No documentation. + + + ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING + ERROR_INSTALL_FIREWALL_SERVICE_NOT_RUNNING + + + + No documentation. + + + ERROR_PACKAGE_MOVE_FAILED + ERROR_PACKAGE_MOVE_FAILED + + + + No documentation. + + + ERROR_INSTALL_VOLUME_NOT_EMPTY + ERROR_INSTALL_VOLUME_NOT_EMPTY + + + + No documentation. + + + ERROR_INSTALL_VOLUME_OFFLINE + ERROR_INSTALL_VOLUME_OFFLINE + + + + No documentation. + + + ERROR_INSTALL_VOLUME_CORRUPT + ERROR_INSTALL_VOLUME_CORRUPT + + + + No documentation. + + + ERROR_NEEDS_REGISTRATION + ERROR_NEEDS_REGISTRATION + + + + No documentation. + + + ERROR_INSTALL_WRONG_PROCESSOR_ARCHITECTURE + ERROR_INSTALL_WRONG_PROCESSOR_ARCHITECTURE + + + + No documentation. + + + ERROR_DEV_SIDELOAD_LIMIT_EXCEEDED + ERROR_DEV_SIDELOAD_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE + ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE + + + + No documentation. + + + ERROR_PACKAGE_NOT_SUPPORTED_ON_FILESYSTEM + ERROR_PACKAGE_NOT_SUPPORTED_ON_FILESYSTEM + + + + No documentation. + + + ERROR_PACKAGE_MOVE_BLOCKED_BY_STREAMING + ERROR_PACKAGE_MOVE_BLOCKED_BY_STREAMING + + + + No documentation. + + + ERROR_INSTALL_OPTIONAL_PACKAGE_APPLICATIONID_NOT_UNIQUE + ERROR_INSTALL_OPTIONAL_PACKAGE_APPLICATIONID_NOT_UNIQUE + + + + No documentation. + + + ERROR_PACKAGE_STAGING_ONHOLD + ERROR_PACKAGE_STAGING_ONHOLD + + + + No documentation. + + + ERROR_INSTALL_INVALID_RELATED_SET_UPDATE + ERROR_INSTALL_INVALID_RELATED_SET_UPDATE + + + + No documentation. + + + ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_FULLTRUST_CAPABILITY + ERROR_INSTALL_OPTIONAL_PACKAGE_REQUIRES_MAIN_PACKAGE_FULLTRUST_CAPABILITY + + + + No documentation. + + + ERROR_STATE_LOAD_STORE_FAILED + ERROR_STATE_LOAD_STORE_FAILED + + + + No documentation. + + + ERROR_STATE_GET_VERSION_FAILED + ERROR_STATE_GET_VERSION_FAILED + + + + No documentation. + + + ERROR_STATE_SET_VERSION_FAILED + ERROR_STATE_SET_VERSION_FAILED + + + + No documentation. + + + ERROR_STATE_STRUCTURED_RESET_FAILED + ERROR_STATE_STRUCTURED_RESET_FAILED + + + + No documentation. + + + ERROR_STATE_OPEN_CONTAINER_FAILED + ERROR_STATE_OPEN_CONTAINER_FAILED + + + + No documentation. + + + ERROR_STATE_CREATE_CONTAINER_FAILED + ERROR_STATE_CREATE_CONTAINER_FAILED + + + + No documentation. + + + ERROR_STATE_DELETE_CONTAINER_FAILED + ERROR_STATE_DELETE_CONTAINER_FAILED + + + + No documentation. + + + ERROR_STATE_READ_SETTING_FAILED + ERROR_STATE_READ_SETTING_FAILED + + + + No documentation. + + + ERROR_STATE_WRITE_SETTING_FAILED + ERROR_STATE_WRITE_SETTING_FAILED + + + + No documentation. + + + ERROR_STATE_DELETE_SETTING_FAILED + ERROR_STATE_DELETE_SETTING_FAILED + + + + No documentation. + + + ERROR_STATE_QUERY_SETTING_FAILED + ERROR_STATE_QUERY_SETTING_FAILED + + + + No documentation. + + + ERROR_STATE_READ_COMPOSITE_SETTING_FAILED + ERROR_STATE_READ_COMPOSITE_SETTING_FAILED + + + + No documentation. + + + ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED + ERROR_STATE_WRITE_COMPOSITE_SETTING_FAILED + + + + No documentation. + + + ERROR_STATE_ENUMERATE_CONTAINER_FAILED + ERROR_STATE_ENUMERATE_CONTAINER_FAILED + + + + No documentation. + + + ERROR_STATE_ENUMERATE_SETTINGS_FAILED + ERROR_STATE_ENUMERATE_SETTINGS_FAILED + + + + No documentation. + + + ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED + ERROR_STATE_COMPOSITE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED + ERROR_STATE_SETTING_VALUE_SIZE_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED + ERROR_STATE_SETTING_NAME_SIZE_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED + ERROR_STATE_CONTAINER_NAME_SIZE_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_API_UNAVAILABLE + ERROR_API_UNAVAILABLE + + + + No documentation. + + + ERROR_AUDITING_DISABLED + ERROR_AUDITING_DISABLED + + + + No documentation. + + + ERROR_ALL_SIDS_FILTERED + ERROR_ALL_SIDS_FILTERED + + + + No documentation. + + + ERROR_BIZRULES_NOT_ENABLED + ERROR_BIZRULES_NOT_ENABLED + + + + No documentation. + + + ERROR_CRED_REQUIRES_CONFIRMATION + ERROR_CRED_REQUIRES_CONFIRMATION + + + + No documentation. + + + ERROR_FLT_IO_COMPLETE + ERROR_FLT_IO_COMPLETE + + + + No documentation. + + + ERROR_FLT_NO_HANDLER_DEFINED + ERROR_FLT_NO_HANDLER_DEFINED + + + + No documentation. + + + ERROR_FLT_CONTEXT_ALREADY_DEFINED + ERROR_FLT_CONTEXT_ALREADY_DEFINED + + + + No documentation. + + + ERROR_FLT_INVALID_ASYNCHRONOUS_REQUEST + ERROR_FLT_INVALID_ASYNCHRONOUS_REQUEST + + + + No documentation. + + + ERROR_FLT_DISALLOW_FAST_IO + ERROR_FLT_DISALLOW_FAST_IO + + + + No documentation. + + + ERROR_FLT_INVALID_NAME_REQUEST + ERROR_FLT_INVALID_NAME_REQUEST + + + + No documentation. + + + ERROR_FLT_NOT_SAFE_TO_POST_OPERATION + ERROR_FLT_NOT_SAFE_TO_POST_OPERATION + + + + No documentation. + + + ERROR_FLT_NOT_INITIALIZED + ERROR_FLT_NOT_INITIALIZED + + + + No documentation. + + + ERROR_FLT_FILTER_NOT_READY + ERROR_FLT_FILTER_NOT_READY + + + + No documentation. + + + ERROR_FLT_POST_OPERATION_CLEANUP + ERROR_FLT_POST_OPERATION_CLEANUP + + + + No documentation. + + + ERROR_FLT_INTERNAL_ERROR + ERROR_FLT_INTERNAL_ERROR + + + + No documentation. + + + ERROR_FLT_DELETING_OBJECT + ERROR_FLT_DELETING_OBJECT + + + + No documentation. + + + ERROR_FLT_MUST_BE_NONPAGED_POOL + ERROR_FLT_MUST_BE_NONPAGED_POOL + + + + No documentation. + + + ERROR_FLT_DUPLICATE_ENTRY + ERROR_FLT_DUPLICATE_ENTRY + + + + No documentation. + + + ERROR_FLT_CBDQ_DISABLED + ERROR_FLT_CBDQ_DISABLED + + + + No documentation. + + + ERROR_FLT_DO_NOT_ATTACH + ERROR_FLT_DO_NOT_ATTACH + + + + No documentation. + + + ERROR_FLT_DO_NOT_DETACH + ERROR_FLT_DO_NOT_DETACH + + + + No documentation. + + + ERROR_FLT_INSTANCE_ALTITUDE_COLLISION + ERROR_FLT_INSTANCE_ALTITUDE_COLLISION + + + + No documentation. + + + ERROR_FLT_INSTANCE_NAME_COLLISION + ERROR_FLT_INSTANCE_NAME_COLLISION + + + + No documentation. + + + ERROR_FLT_FILTER_NOT_FOUND + ERROR_FLT_FILTER_NOT_FOUND + + + + No documentation. + + + ERROR_FLT_VOLUME_NOT_FOUND + ERROR_FLT_VOLUME_NOT_FOUND + + + + No documentation. + + + ERROR_FLT_INSTANCE_NOT_FOUND + ERROR_FLT_INSTANCE_NOT_FOUND + + + + No documentation. + + + ERROR_FLT_CONTEXT_ALLOCATION_NOT_FOUND + ERROR_FLT_CONTEXT_ALLOCATION_NOT_FOUND + + + + No documentation. + + + ERROR_FLT_INVALID_CONTEXT_REGISTRATION + ERROR_FLT_INVALID_CONTEXT_REGISTRATION + + + + No documentation. + + + ERROR_FLT_NAME_CACHE_MISS + ERROR_FLT_NAME_CACHE_MISS + + + + No documentation. + + + ERROR_FLT_NO_DEVICE_OBJECT + ERROR_FLT_NO_DEVICE_OBJECT + + + + No documentation. + + + ERROR_FLT_VOLUME_ALREADY_MOUNTED + ERROR_FLT_VOLUME_ALREADY_MOUNTED + + + + No documentation. + + + ERROR_FLT_ALREADY_ENLISTED + ERROR_FLT_ALREADY_ENLISTED + + + + No documentation. + + + ERROR_FLT_CONTEXT_ALREADY_LINKED + ERROR_FLT_CONTEXT_ALREADY_LINKED + + + + No documentation. + + + ERROR_FLT_NO_WAITER_FOR_REPLY + ERROR_FLT_NO_WAITER_FOR_REPLY + + + + No documentation. + + + ERROR_FLT_REGISTRATION_BUSY + ERROR_FLT_REGISTRATION_BUSY + + + + No documentation. + + + ERROR_HUNG_DISPLAY_DRIVER_THREAD + ERROR_HUNG_DISPLAY_DRIVER_THREAD + + + + No documentation. + + + ERROR_MONITOR_NO_DESCRIPTOR + ERROR_MONITOR_NO_DESCRIPTOR + + + + No documentation. + + + ERROR_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT + ERROR_MONITOR_UNKNOWN_DESCRIPTOR_FORMAT + + + + No documentation. + + + ERROR_MONITOR_INVALID_DESCRIPTOR_CHECKSUM + ERROR_MONITOR_INVALID_DESCRIPTOR_CHECKSUM + + + + No documentation. + + + ERROR_MONITOR_INVALID_STANDARD_TIMING_BLOCK + ERROR_MONITOR_INVALID_STANDARD_TIMING_BLOCK + + + + No documentation. + + + ERROR_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED + ERROR_MONITOR_WMI_DATABLOCK_REGISTRATION_FAILED + + + + No documentation. + + + ERROR_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK + ERROR_MONITOR_INVALID_SERIAL_NUMBER_MONDSC_BLOCK + + + + No documentation. + + + ERROR_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK + ERROR_MONITOR_INVALID_USER_FRIENDLY_MONDSC_BLOCK + + + + No documentation. + + + ERROR_MONITOR_NO_MORE_DESCRIPTOR_DATA + ERROR_MONITOR_NO_MORE_DESCRIPTOR_DATA + + + + No documentation. + + + ERROR_MONITOR_INVALID_DETAILED_TIMING_BLOCK + ERROR_MONITOR_INVALID_DETAILED_TIMING_BLOCK + + + + No documentation. + + + ERROR_MONITOR_INVALID_MANUFACTURE_DATE + ERROR_MONITOR_INVALID_MANUFACTURE_DATE + + + + No documentation. + + + ERROR_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER + ERROR_GRAPHICS_NOT_EXCLUSIVE_MODE_OWNER + + + + No documentation. + + + ERROR_GRAPHICS_INSUFFICIENT_DMA_BUFFER + ERROR_GRAPHICS_INSUFFICIENT_DMA_BUFFER + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_DISPLAY_ADAPTER + ERROR_GRAPHICS_INVALID_DISPLAY_ADAPTER + + + + No documentation. + + + ERROR_GRAPHICS_ADAPTER_WAS_RESET + ERROR_GRAPHICS_ADAPTER_WAS_RESET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_DRIVER_MODEL + ERROR_GRAPHICS_INVALID_DRIVER_MODEL + + + + No documentation. + + + ERROR_GRAPHICS_PRESENT_MODE_CHANGED + ERROR_GRAPHICS_PRESENT_MODE_CHANGED + + + + No documentation. + + + ERROR_GRAPHICS_PRESENT_OCCLUDED + ERROR_GRAPHICS_PRESENT_OCCLUDED + + + + No documentation. + + + ERROR_GRAPHICS_PRESENT_DENIED + ERROR_GRAPHICS_PRESENT_DENIED + + + + No documentation. + + + ERROR_GRAPHICS_CANNOTCOLORCONVERT + ERROR_GRAPHICS_CANNOTCOLORCONVERT + + + + No documentation. + + + ERROR_GRAPHICS_DRIVER_MISMATCH + ERROR_GRAPHICS_DRIVER_MISMATCH + + + + No documentation. + + + ERROR_GRAPHICS_PARTIAL_DATA_POPULATED + ERROR_GRAPHICS_PARTIAL_DATA_POPULATED + + + + No documentation. + + + ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED + ERROR_GRAPHICS_PRESENT_REDIRECTION_DISABLED + + + + No documentation. + + + ERROR_GRAPHICS_PRESENT_UNOCCLUDED + ERROR_GRAPHICS_PRESENT_UNOCCLUDED + + + + No documentation. + + + ERROR_GRAPHICS_WINDOWDC_NOT_AVAILABLE + ERROR_GRAPHICS_WINDOWDC_NOT_AVAILABLE + + + + No documentation. + + + ERROR_GRAPHICS_WINDOWLESS_PRESENT_DISABLED + ERROR_GRAPHICS_WINDOWLESS_PRESENT_DISABLED + + + + No documentation. + + + ERROR_GRAPHICS_NO_VIDEO_MEMORY + ERROR_GRAPHICS_NO_VIDEO_MEMORY + + + + No documentation. + + + ERROR_GRAPHICS_CANT_LOCK_MEMORY + ERROR_GRAPHICS_CANT_LOCK_MEMORY + + + + No documentation. + + + ERROR_GRAPHICS_ALLOCATION_BUSY + ERROR_GRAPHICS_ALLOCATION_BUSY + + + + No documentation. + + + ERROR_GRAPHICS_TOO_MANY_REFERENCES + ERROR_GRAPHICS_TOO_MANY_REFERENCES + + + + No documentation. + + + ERROR_GRAPHICS_TRY_AGAIN_LATER + ERROR_GRAPHICS_TRY_AGAIN_LATER + + + + No documentation. + + + ERROR_GRAPHICS_TRY_AGAIN_NOW + ERROR_GRAPHICS_TRY_AGAIN_NOW + + + + No documentation. + + + ERROR_GRAPHICS_ALLOCATION_INVALID + ERROR_GRAPHICS_ALLOCATION_INVALID + + + + No documentation. + + + ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE + ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNAVAILABLE + + + + No documentation. + + + ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED + ERROR_GRAPHICS_UNSWIZZLING_APERTURE_UNSUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION + ERROR_GRAPHICS_CANT_EVICT_PINNED_ALLOCATION + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_ALLOCATION_USAGE + ERROR_GRAPHICS_INVALID_ALLOCATION_USAGE + + + + No documentation. + + + ERROR_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION + ERROR_GRAPHICS_CANT_RENDER_LOCKED_ALLOCATION + + + + No documentation. + + + ERROR_GRAPHICS_ALLOCATION_CLOSED + ERROR_GRAPHICS_ALLOCATION_CLOSED + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_ALLOCATION_INSTANCE + ERROR_GRAPHICS_INVALID_ALLOCATION_INSTANCE + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_ALLOCATION_HANDLE + ERROR_GRAPHICS_INVALID_ALLOCATION_HANDLE + + + + No documentation. + + + ERROR_GRAPHICS_WRONG_ALLOCATION_DEVICE + ERROR_GRAPHICS_WRONG_ALLOCATION_DEVICE + + + + No documentation. + + + ERROR_GRAPHICS_ALLOCATION_CONTENT_LOST + ERROR_GRAPHICS_ALLOCATION_CONTENT_LOST + + + + No documentation. + + + ERROR_GRAPHICS_GPU_EXCEPTION_ON_DEVICE + ERROR_GRAPHICS_GPU_EXCEPTION_ON_DEVICE + + + + No documentation. + + + ERROR_GRAPHICS_SKIP_ALLOCATION_PREPARATION + ERROR_GRAPHICS_SKIP_ALLOCATION_PREPARATION + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY + ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY + + + + No documentation. + + + ERROR_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED + ERROR_GRAPHICS_VIDPN_TOPOLOGY_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED + ERROR_GRAPHICS_VIDPN_TOPOLOGY_CURRENTLY_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDPN + ERROR_GRAPHICS_INVALID_VIDPN + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET + + + + No documentation. + + + ERROR_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED + ERROR_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_MODE_NOT_PINNED + ERROR_GRAPHICS_MODE_NOT_PINNED + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDPN_SOURCEMODESET + ERROR_GRAPHICS_INVALID_VIDPN_SOURCEMODESET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDPN_TARGETMODESET + ERROR_GRAPHICS_INVALID_VIDPN_TARGETMODESET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_FREQUENCY + ERROR_GRAPHICS_INVALID_FREQUENCY + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_ACTIVE_REGION + ERROR_GRAPHICS_INVALID_ACTIVE_REGION + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_TOTAL_REGION + ERROR_GRAPHICS_INVALID_TOTAL_REGION + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_SOURCE_MODE + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE + ERROR_GRAPHICS_INVALID_VIDEO_PRESENT_TARGET_MODE + + + + No documentation. + + + ERROR_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET + ERROR_GRAPHICS_PINNED_MODE_MUST_REMAIN_IN_SET + + + + No documentation. + + + ERROR_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY + ERROR_GRAPHICS_PATH_ALREADY_IN_TOPOLOGY + + + + No documentation. + + + ERROR_GRAPHICS_MODE_ALREADY_IN_MODESET + ERROR_GRAPHICS_MODE_ALREADY_IN_MODESET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET + ERROR_GRAPHICS_INVALID_VIDEOPRESENTSOURCESET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET + ERROR_GRAPHICS_INVALID_VIDEOPRESENTTARGETSET + + + + No documentation. + + + ERROR_GRAPHICS_SOURCE_ALREADY_IN_SET + ERROR_GRAPHICS_SOURCE_ALREADY_IN_SET + + + + No documentation. + + + ERROR_GRAPHICS_TARGET_ALREADY_IN_SET + ERROR_GRAPHICS_TARGET_ALREADY_IN_SET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDPN_PRESENT_PATH + ERROR_GRAPHICS_INVALID_VIDPN_PRESENT_PATH + + + + No documentation. + + + ERROR_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY + ERROR_GRAPHICS_NO_RECOMMENDED_VIDPN_TOPOLOGY + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGESET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE + + + + No documentation. + + + ERROR_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET + ERROR_GRAPHICS_FREQUENCYRANGE_NOT_IN_SET + + + + No documentation. + + + ERROR_GRAPHICS_NO_PREFERRED_MODE + ERROR_GRAPHICS_NO_PREFERRED_MODE + + + + No documentation. + + + ERROR_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET + ERROR_GRAPHICS_FREQUENCYRANGE_ALREADY_IN_SET + + + + No documentation. + + + ERROR_GRAPHICS_STALE_MODESET + ERROR_GRAPHICS_STALE_MODESET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_MONITOR_SOURCEMODESET + ERROR_GRAPHICS_INVALID_MONITOR_SOURCEMODESET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_MONITOR_SOURCE_MODE + ERROR_GRAPHICS_INVALID_MONITOR_SOURCE_MODE + + + + No documentation. + + + ERROR_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN + ERROR_GRAPHICS_NO_RECOMMENDED_FUNCTIONAL_VIDPN + + + + No documentation. + + + ERROR_GRAPHICS_MODE_ID_MUST_BE_UNIQUE + ERROR_GRAPHICS_MODE_ID_MUST_BE_UNIQUE + + + + No documentation. + + + ERROR_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION + ERROR_GRAPHICS_EMPTY_ADAPTER_MONITOR_MODE_SUPPORT_INTERSECTION + + + + No documentation. + + + ERROR_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES + ERROR_GRAPHICS_VIDEO_PRESENT_TARGETS_LESS_THAN_SOURCES + + + + No documentation. + + + ERROR_GRAPHICS_PATH_NOT_IN_TOPOLOGY + ERROR_GRAPHICS_PATH_NOT_IN_TOPOLOGY + + + + No documentation. + + + ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE + ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_SOURCE + + + + No documentation. + + + ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET + ERROR_GRAPHICS_ADAPTER_MUST_HAVE_AT_LEAST_ONE_TARGET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_MONITORDESCRIPTORSET + ERROR_GRAPHICS_INVALID_MONITORDESCRIPTORSET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_MONITORDESCRIPTOR + ERROR_GRAPHICS_INVALID_MONITORDESCRIPTOR + + + + No documentation. + + + ERROR_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET + ERROR_GRAPHICS_MONITORDESCRIPTOR_NOT_IN_SET + + + + No documentation. + + + ERROR_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET + ERROR_GRAPHICS_MONITORDESCRIPTOR_ALREADY_IN_SET + + + + No documentation. + + + ERROR_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE + ERROR_GRAPHICS_MONITORDESCRIPTOR_ID_MUST_BE_UNIQUE + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE + ERROR_GRAPHICS_INVALID_VIDPN_TARGET_SUBSET_TYPE + + + + No documentation. + + + ERROR_GRAPHICS_RESOURCES_NOT_RELATED + ERROR_GRAPHICS_RESOURCES_NOT_RELATED + + + + No documentation. + + + ERROR_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE + ERROR_GRAPHICS_SOURCE_ID_MUST_BE_UNIQUE + + + + No documentation. + + + ERROR_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE + ERROR_GRAPHICS_TARGET_ID_MUST_BE_UNIQUE + + + + No documentation. + + + ERROR_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET + ERROR_GRAPHICS_NO_AVAILABLE_VIDPN_TARGET + + + + No documentation. + + + ERROR_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER + ERROR_GRAPHICS_MONITOR_COULD_NOT_BE_ASSOCIATED_WITH_ADAPTER + + + + No documentation. + + + ERROR_GRAPHICS_NO_VIDPNMGR + ERROR_GRAPHICS_NO_VIDPNMGR + + + + No documentation. + + + ERROR_GRAPHICS_NO_ACTIVE_VIDPN + ERROR_GRAPHICS_NO_ACTIVE_VIDPN + + + + No documentation. + + + ERROR_GRAPHICS_STALE_VIDPN_TOPOLOGY + ERROR_GRAPHICS_STALE_VIDPN_TOPOLOGY + + + + No documentation. + + + ERROR_GRAPHICS_MONITOR_NOT_CONNECTED + ERROR_GRAPHICS_MONITOR_NOT_CONNECTED + + + + No documentation. + + + ERROR_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY + ERROR_GRAPHICS_SOURCE_NOT_IN_TOPOLOGY + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE + ERROR_GRAPHICS_INVALID_PRIMARYSURFACE_SIZE + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VISIBLEREGION_SIZE + ERROR_GRAPHICS_INVALID_VISIBLEREGION_SIZE + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_STRIDE + ERROR_GRAPHICS_INVALID_STRIDE + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_PIXELFORMAT + ERROR_GRAPHICS_INVALID_PIXELFORMAT + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_COLORBASIS + ERROR_GRAPHICS_INVALID_COLORBASIS + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_PIXELVALUEACCESSMODE + ERROR_GRAPHICS_INVALID_PIXELVALUEACCESSMODE + + + + No documentation. + + + ERROR_GRAPHICS_TARGET_NOT_IN_TOPOLOGY + ERROR_GRAPHICS_TARGET_NOT_IN_TOPOLOGY + + + + No documentation. + + + ERROR_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT + ERROR_GRAPHICS_NO_DISPLAY_MODE_MANAGEMENT_SUPPORT + + + + No documentation. + + + ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE + ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE + + + + No documentation. + + + ERROR_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN + ERROR_GRAPHICS_CANT_ACCESS_ACTIVE_VIDPN + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL + ERROR_GRAPHICS_INVALID_PATH_IMPORTANCE_ORDINAL + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION + ERROR_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION + + + + No documentation. + + + ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED + ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_GAMMA_RAMP + ERROR_GRAPHICS_INVALID_GAMMA_RAMP + + + + No documentation. + + + ERROR_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED + ERROR_GRAPHICS_GAMMA_RAMP_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED + ERROR_GRAPHICS_MULTISAMPLING_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_MODE_NOT_IN_MODESET + ERROR_GRAPHICS_MODE_NOT_IN_MODESET + + + + No documentation. + + + ERROR_GRAPHICS_DATASET_IS_EMPTY + ERROR_GRAPHICS_DATASET_IS_EMPTY + + + + No documentation. + + + ERROR_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET + ERROR_GRAPHICS_NO_MORE_ELEMENTS_IN_DATASET + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON + ERROR_GRAPHICS_INVALID_VIDPN_TOPOLOGY_RECOMMENDATION_REASON + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_PATH_CONTENT_TYPE + ERROR_GRAPHICS_INVALID_PATH_CONTENT_TYPE + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_COPYPROTECTION_TYPE + ERROR_GRAPHICS_INVALID_COPYPROTECTION_TYPE + + + + No documentation. + + + ERROR_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS + ERROR_GRAPHICS_UNASSIGNED_MODESET_ALREADY_EXISTS + + + + No documentation. + + + ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED + ERROR_GRAPHICS_PATH_CONTENT_GEOMETRY_TRANSFORMATION_NOT_PINNED + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_SCANLINE_ORDERING + ERROR_GRAPHICS_INVALID_SCANLINE_ORDERING + + + + No documentation. + + + ERROR_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED + ERROR_GRAPHICS_TOPOLOGY_CHANGES_NOT_ALLOWED + + + + No documentation. + + + ERROR_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS + ERROR_GRAPHICS_NO_AVAILABLE_IMPORTANCE_ORDINALS + + + + No documentation. + + + ERROR_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT + ERROR_GRAPHICS_INCOMPATIBLE_PRIVATE_FORMAT + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM + ERROR_GRAPHICS_INVALID_MODE_PRUNING_ALGORITHM + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN + ERROR_GRAPHICS_INVALID_MONITOR_CAPABILITY_ORIGIN + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT + ERROR_GRAPHICS_INVALID_MONITOR_FREQUENCYRANGE_CONSTRAINT + + + + No documentation. + + + ERROR_GRAPHICS_MAX_NUM_PATHS_REACHED + ERROR_GRAPHICS_MAX_NUM_PATHS_REACHED + + + + No documentation. + + + ERROR_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION + ERROR_GRAPHICS_CANCEL_VIDPN_TOPOLOGY_AUGMENTATION + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_CLIENT_TYPE + ERROR_GRAPHICS_INVALID_CLIENT_TYPE + + + + No documentation. + + + ERROR_GRAPHICS_CLIENTVIDPN_NOT_SET + ERROR_GRAPHICS_CLIENTVIDPN_NOT_SET + + + + No documentation. + + + ERROR_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED + ERROR_GRAPHICS_SPECIFIED_CHILD_ALREADY_CONNECTED + + + + No documentation. + + + ERROR_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED + ERROR_GRAPHICS_CHILD_DESCRIPTOR_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_UNKNOWN_CHILD_STATUS + ERROR_GRAPHICS_UNKNOWN_CHILD_STATUS + + + + No documentation. + + + ERROR_GRAPHICS_NOT_A_LINKED_ADAPTER + ERROR_GRAPHICS_NOT_A_LINKED_ADAPTER + + + + No documentation. + + + ERROR_GRAPHICS_LEADLINK_NOT_ENUMERATED + ERROR_GRAPHICS_LEADLINK_NOT_ENUMERATED + + + + No documentation. + + + ERROR_GRAPHICS_CHAINLINKS_NOT_ENUMERATED + ERROR_GRAPHICS_CHAINLINKS_NOT_ENUMERATED + + + + No documentation. + + + ERROR_GRAPHICS_ADAPTER_CHAIN_NOT_READY + ERROR_GRAPHICS_ADAPTER_CHAIN_NOT_READY + + + + No documentation. + + + ERROR_GRAPHICS_CHAINLINKS_NOT_STARTED + ERROR_GRAPHICS_CHAINLINKS_NOT_STARTED + + + + No documentation. + + + ERROR_GRAPHICS_CHAINLINKS_NOT_POWERED_ON + ERROR_GRAPHICS_CHAINLINKS_NOT_POWERED_ON + + + + No documentation. + + + ERROR_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE + ERROR_GRAPHICS_INCONSISTENT_DEVICE_LINK_STATE + + + + No documentation. + + + ERROR_GRAPHICS_LEADLINK_START_DEFERRED + ERROR_GRAPHICS_LEADLINK_START_DEFERRED + + + + No documentation. + + + ERROR_GRAPHICS_NOT_POST_DEVICE_DRIVER + ERROR_GRAPHICS_NOT_POST_DEVICE_DRIVER + + + + No documentation. + + + ERROR_GRAPHICS_POLLING_TOO_FREQUENTLY + ERROR_GRAPHICS_POLLING_TOO_FREQUENTLY + + + + No documentation. + + + ERROR_GRAPHICS_START_DEFERRED + ERROR_GRAPHICS_START_DEFERRED + + + + No documentation. + + + ERROR_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED + ERROR_GRAPHICS_ADAPTER_ACCESS_NOT_EXCLUDED + + + + No documentation. + + + ERROR_GRAPHICS_DEPENDABLE_CHILD_STATUS + ERROR_GRAPHICS_DEPENDABLE_CHILD_STATUS + + + + No documentation. + + + ERROR_GRAPHICS_OPM_NOT_SUPPORTED + ERROR_GRAPHICS_OPM_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_COPP_NOT_SUPPORTED + ERROR_GRAPHICS_COPP_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_UAB_NOT_SUPPORTED + ERROR_GRAPHICS_UAB_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS + ERROR_GRAPHICS_OPM_INVALID_ENCRYPTED_PARAMETERS + + + + No documentation. + + + ERROR_GRAPHICS_OPM_NO_VIDEO_OUTPUTS_EXIST + ERROR_GRAPHICS_OPM_NO_VIDEO_OUTPUTS_EXIST + + + + No documentation. + + + ERROR_GRAPHICS_OPM_INTERNAL_ERROR + ERROR_GRAPHICS_OPM_INTERNAL_ERROR + + + + No documentation. + + + ERROR_GRAPHICS_OPM_INVALID_HANDLE + ERROR_GRAPHICS_OPM_INVALID_HANDLE + + + + No documentation. + + + ERROR_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH + ERROR_GRAPHICS_PVP_INVALID_CERTIFICATE_LENGTH + + + + No documentation. + + + ERROR_GRAPHICS_OPM_SPANNING_MODE_ENABLED + ERROR_GRAPHICS_OPM_SPANNING_MODE_ENABLED + + + + No documentation. + + + ERROR_GRAPHICS_OPM_THEATER_MODE_ENABLED + ERROR_GRAPHICS_OPM_THEATER_MODE_ENABLED + + + + No documentation. + + + ERROR_GRAPHICS_PVP_HFS_FAILED + ERROR_GRAPHICS_PVP_HFS_FAILED + + + + No documentation. + + + ERROR_GRAPHICS_OPM_INVALID_SRM + ERROR_GRAPHICS_OPM_INVALID_SRM + + + + No documentation. + + + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_HDCP + + + + No documentation. + + + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_ACP + + + + No documentation. + + + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA + ERROR_GRAPHICS_OPM_OUTPUT_DOES_NOT_SUPPORT_CGMSA + + + + No documentation. + + + ERROR_GRAPHICS_OPM_HDCP_SRM_NEVER_SET + ERROR_GRAPHICS_OPM_HDCP_SRM_NEVER_SET + + + + No documentation. + + + ERROR_GRAPHICS_OPM_RESOLUTION_TOO_HIGH + ERROR_GRAPHICS_OPM_RESOLUTION_TOO_HIGH + + + + No documentation. + + + ERROR_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE + ERROR_GRAPHICS_OPM_ALL_HDCP_HARDWARE_ALREADY_IN_USE + + + + No documentation. + + + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_NO_LONGER_EXISTS + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_NO_LONGER_EXISTS + + + + No documentation. + + + ERROR_GRAPHICS_OPM_SESSION_TYPE_CHANGE_IN_PROGRESS + ERROR_GRAPHICS_OPM_SESSION_TYPE_CHANGE_IN_PROGRESS + + + + No documentation. + + + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_COPP_SEMANTICS + + + + No documentation. + + + ERROR_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST + ERROR_GRAPHICS_OPM_INVALID_INFORMATION_REQUEST + + + + No documentation. + + + ERROR_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR + ERROR_GRAPHICS_OPM_DRIVER_INTERNAL_ERROR + + + + No documentation. + + + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS + ERROR_GRAPHICS_OPM_VIDEO_OUTPUT_DOES_NOT_HAVE_OPM_SEMANTICS + + + + No documentation. + + + ERROR_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED + ERROR_GRAPHICS_OPM_SIGNALING_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST + ERROR_GRAPHICS_OPM_INVALID_CONFIGURATION_REQUEST + + + + No documentation. + + + ERROR_GRAPHICS_I2C_NOT_SUPPORTED + ERROR_GRAPHICS_I2C_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST + ERROR_GRAPHICS_I2C_DEVICE_DOES_NOT_EXIST + + + + No documentation. + + + ERROR_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA + ERROR_GRAPHICS_I2C_ERROR_TRANSMITTING_DATA + + + + No documentation. + + + ERROR_GRAPHICS_I2C_ERROR_RECEIVING_DATA + ERROR_GRAPHICS_I2C_ERROR_RECEIVING_DATA + + + + No documentation. + + + ERROR_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED + ERROR_GRAPHICS_DDCCI_VCP_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_DDCCI_INVALID_DATA + ERROR_GRAPHICS_DDCCI_INVALID_DATA + + + + No documentation. + + + ERROR_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE + ERROR_GRAPHICS_DDCCI_MONITOR_RETURNED_INVALID_TIMING_STATUS_BYTE + + + + No documentation. + + + ERROR_GRAPHICS_MCA_INVALID_CAPABILITIES_STRING + ERROR_GRAPHICS_MCA_INVALID_CAPABILITIES_STRING + + + + No documentation. + + + ERROR_GRAPHICS_MCA_INTERNAL_ERROR + ERROR_GRAPHICS_MCA_INTERNAL_ERROR + + + + No documentation. + + + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_COMMAND + + + + No documentation. + + + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_LENGTH + + + + No documentation. + + + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM + ERROR_GRAPHICS_DDCCI_INVALID_MESSAGE_CHECKSUM + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE + ERROR_GRAPHICS_INVALID_PHYSICAL_MONITOR_HANDLE + + + + No documentation. + + + ERROR_GRAPHICS_MONITOR_NO_LONGER_EXISTS + ERROR_GRAPHICS_MONITOR_NO_LONGER_EXISTS + + + + No documentation. + + + ERROR_GRAPHICS_DDCCI_CURRENT_CURRENT_VALUE_GREATER_THAN_MAXIMUM_VALUE + ERROR_GRAPHICS_DDCCI_CURRENT_CURRENT_VALUE_GREATER_THAN_MAXIMUM_VALUE + + + + No documentation. + + + ERROR_GRAPHICS_MCA_INVALID_VCP_VERSION + ERROR_GRAPHICS_MCA_INVALID_VCP_VERSION + + + + No documentation. + + + ERROR_GRAPHICS_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION + ERROR_GRAPHICS_MCA_MONITOR_VIOLATES_MCCS_SPECIFICATION + + + + No documentation. + + + ERROR_GRAPHICS_MCA_MCCS_VERSION_MISMATCH + ERROR_GRAPHICS_MCA_MCCS_VERSION_MISMATCH + + + + No documentation. + + + ERROR_GRAPHICS_MCA_UNSUPPORTED_MCCS_VERSION + ERROR_GRAPHICS_MCA_UNSUPPORTED_MCCS_VERSION + + + + No documentation. + + + ERROR_GRAPHICS_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED + ERROR_GRAPHICS_MCA_INVALID_TECHNOLOGY_TYPE_RETURNED + + + + No documentation. + + + ERROR_GRAPHICS_MCA_UNSUPPORTED_COLOR_TEMPERATURE + ERROR_GRAPHICS_MCA_UNSUPPORTED_COLOR_TEMPERATURE + + + + No documentation. + + + ERROR_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED + ERROR_GRAPHICS_ONLY_CONSOLE_SESSION_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME + ERROR_GRAPHICS_NO_DISPLAY_DEVICE_CORRESPONDS_TO_NAME + + + + No documentation. + + + ERROR_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP + ERROR_GRAPHICS_DISPLAY_DEVICE_NOT_ATTACHED_TO_DESKTOP + + + + No documentation. + + + ERROR_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED + ERROR_GRAPHICS_MIRRORING_DEVICES_NOT_SUPPORTED + + + + No documentation. + + + ERROR_GRAPHICS_INVALID_POINTER + ERROR_GRAPHICS_INVALID_POINTER + + + + No documentation. + + + ERROR_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE + ERROR_GRAPHICS_NO_MONITORS_CORRESPOND_TO_DISPLAY_DEVICE + + + + No documentation. + + + ERROR_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL + ERROR_GRAPHICS_PARAMETER_ARRAY_TOO_SMALL + + + + No documentation. + + + ERROR_GRAPHICS_INTERNAL_ERROR + ERROR_GRAPHICS_INTERNAL_ERROR + + + + No documentation. + + + ERROR_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS + ERROR_GRAPHICS_SESSION_TYPE_CHANGE_IN_PROGRESS + + + + No documentation. + + + ERROR_NDIS_INTERFACE_CLOSING + ERROR_NDIS_INTERFACE_CLOSING + + + + No documentation. + + + ERROR_NDIS_BAD_VERSION + ERROR_NDIS_BAD_VERSION + + + + No documentation. + + + ERROR_NDIS_BAD_CHARACTERISTICS + ERROR_NDIS_BAD_CHARACTERISTICS + + + + No documentation. + + + ERROR_NDIS_ADAPTER_NOT_FOUND + ERROR_NDIS_ADAPTER_NOT_FOUND + + + + No documentation. + + + ERROR_NDIS_OPEN_FAILED + ERROR_NDIS_OPEN_FAILED + + + + No documentation. + + + ERROR_NDIS_DEVICE_FAILED + ERROR_NDIS_DEVICE_FAILED + + + + No documentation. + + + ERROR_NDIS_MULTICAST_FULL + ERROR_NDIS_MULTICAST_FULL + + + + No documentation. + + + ERROR_NDIS_MULTICAST_EXISTS + ERROR_NDIS_MULTICAST_EXISTS + + + + No documentation. + + + ERROR_NDIS_MULTICAST_NOT_FOUND + ERROR_NDIS_MULTICAST_NOT_FOUND + + + + No documentation. + + + ERROR_NDIS_REQUEST_ABORTED + ERROR_NDIS_REQUEST_ABORTED + + + + No documentation. + + + ERROR_NDIS_RESET_IN_PROGRESS + ERROR_NDIS_RESET_IN_PROGRESS + + + + No documentation. + + + ERROR_NDIS_NOT_SUPPORTED + ERROR_NDIS_NOT_SUPPORTED + + + + No documentation. + + + ERROR_NDIS_INVALID_PACKET + ERROR_NDIS_INVALID_PACKET + + + + No documentation. + + + ERROR_NDIS_ADAPTER_NOT_READY + ERROR_NDIS_ADAPTER_NOT_READY + + + + No documentation. + + + ERROR_NDIS_INVALID_LENGTH + ERROR_NDIS_INVALID_LENGTH + + + + No documentation. + + + ERROR_NDIS_INVALID_DATA + ERROR_NDIS_INVALID_DATA + + + + No documentation. + + + ERROR_NDIS_BUFFER_TOO_SHORT + ERROR_NDIS_BUFFER_TOO_SHORT + + + + No documentation. + + + ERROR_NDIS_INVALID_OID + ERROR_NDIS_INVALID_OID + + + + No documentation. + + + ERROR_NDIS_ADAPTER_REMOVED + ERROR_NDIS_ADAPTER_REMOVED + + + + No documentation. + + + ERROR_NDIS_UNSUPPORTED_MEDIA + ERROR_NDIS_UNSUPPORTED_MEDIA + + + + No documentation. + + + ERROR_NDIS_GROUP_ADDRESS_IN_USE + ERROR_NDIS_GROUP_ADDRESS_IN_USE + + + + No documentation. + + + ERROR_NDIS_FILE_NOT_FOUND + ERROR_NDIS_FILE_NOT_FOUND + + + + No documentation. + + + ERROR_NDIS_ERROR_READING_FILE + ERROR_NDIS_ERROR_READING_FILE + + + + No documentation. + + + ERROR_NDIS_ALREADY_MAPPED + ERROR_NDIS_ALREADY_MAPPED + + + + No documentation. + + + ERROR_NDIS_RESOURCE_CONFLICT + ERROR_NDIS_RESOURCE_CONFLICT + + + + No documentation. + + + ERROR_NDIS_MEDIA_DISCONNECTED + ERROR_NDIS_MEDIA_DISCONNECTED + + + + No documentation. + + + ERROR_NDIS_INVALID_ADDRESS + ERROR_NDIS_INVALID_ADDRESS + + + + No documentation. + + + ERROR_NDIS_INVALID_DEVICE_REQUEST + ERROR_NDIS_INVALID_DEVICE_REQUEST + + + + No documentation. + + + ERROR_NDIS_PAUSED + ERROR_NDIS_PAUSED + + + + No documentation. + + + ERROR_NDIS_INTERFACE_NOT_FOUND + ERROR_NDIS_INTERFACE_NOT_FOUND + + + + No documentation. + + + ERROR_NDIS_UNSUPPORTED_REVISION + ERROR_NDIS_UNSUPPORTED_REVISION + + + + No documentation. + + + ERROR_NDIS_INVALID_PORT + ERROR_NDIS_INVALID_PORT + + + + No documentation. + + + ERROR_NDIS_INVALID_PORT_STATE + ERROR_NDIS_INVALID_PORT_STATE + + + + No documentation. + + + ERROR_NDIS_LOW_POWER_STATE + ERROR_NDIS_LOW_POWER_STATE + + + + No documentation. + + + ERROR_NDIS_REINIT_REQUIRED + ERROR_NDIS_REINIT_REQUIRED + + + + No documentation. + + + ERROR_NDIS_DOT11_AUTO_CONFIG_ENABLED + ERROR_NDIS_DOT11_AUTO_CONFIG_ENABLED + + + + No documentation. + + + ERROR_NDIS_DOT11_MEDIA_IN_USE + ERROR_NDIS_DOT11_MEDIA_IN_USE + + + + No documentation. + + + ERROR_NDIS_DOT11_POWER_STATE_INVALID + ERROR_NDIS_DOT11_POWER_STATE_INVALID + + + + No documentation. + + + ERROR_NDIS_PM_WOL_PATTERN_LIST_FULL + ERROR_NDIS_PM_WOL_PATTERN_LIST_FULL + + + + No documentation. + + + ERROR_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL + ERROR_NDIS_PM_PROTOCOL_OFFLOAD_LIST_FULL + + + + No documentation. + + + ERROR_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE + ERROR_NDIS_DOT11_AP_CHANNEL_CURRENTLY_NOT_AVAILABLE + + + + No documentation. + + + ERROR_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE + ERROR_NDIS_DOT11_AP_BAND_CURRENTLY_NOT_AVAILABLE + + + + No documentation. + + + ERROR_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED + ERROR_NDIS_DOT11_AP_CHANNEL_NOT_ALLOWED + + + + No documentation. + + + ERROR_NDIS_DOT11_AP_BAND_NOT_ALLOWED + ERROR_NDIS_DOT11_AP_BAND_NOT_ALLOWED + + + + No documentation. + + + ERROR_NDIS_INDICATION_REQUIRED + ERROR_NDIS_INDICATION_REQUIRED + + + + No documentation. + + + ERROR_NDIS_OFFLOAD_POLICY + ERROR_NDIS_OFFLOAD_POLICY + + + + No documentation. + + + ERROR_NDIS_OFFLOAD_CONNECTION_REJECTED + ERROR_NDIS_OFFLOAD_CONNECTION_REJECTED + + + + No documentation. + + + ERROR_NDIS_OFFLOAD_PATH_REJECTED + ERROR_NDIS_OFFLOAD_PATH_REJECTED + + + + No documentation. + + + ERROR_HV_INVALID_HYPERCALL_CODE + ERROR_HV_INVALID_HYPERCALL_CODE + + + + No documentation. + + + ERROR_HV_INVALID_HYPERCALL_INPUT + ERROR_HV_INVALID_HYPERCALL_INPUT + + + + No documentation. + + + ERROR_HV_INVALID_ALIGNMENT + ERROR_HV_INVALID_ALIGNMENT + + + + No documentation. + + + ERROR_HV_INVALID_PARAMETER + ERROR_HV_INVALID_PARAMETER + + + + No documentation. + + + ERROR_HV_ACCESS_DENIED + ERROR_HV_ACCESS_DENIED + + + + No documentation. + + + ERROR_HV_INVALID_PARTITION_STATE + ERROR_HV_INVALID_PARTITION_STATE + + + + No documentation. + + + ERROR_HV_OPERATION_DENIED + ERROR_HV_OPERATION_DENIED + + + + No documentation. + + + ERROR_HV_UNKNOWN_PROPERTY + ERROR_HV_UNKNOWN_PROPERTY + + + + No documentation. + + + ERROR_HV_PROPERTY_VALUE_OUT_OF_RANGE + ERROR_HV_PROPERTY_VALUE_OUT_OF_RANGE + + + + No documentation. + + + ERROR_HV_INSUFFICIENT_MEMORY + ERROR_HV_INSUFFICIENT_MEMORY + + + + No documentation. + + + ERROR_HV_PARTITION_TOO_DEEP + ERROR_HV_PARTITION_TOO_DEEP + + + + No documentation. + + + ERROR_HV_INVALID_PARTITION_ID + ERROR_HV_INVALID_PARTITION_ID + + + + No documentation. + + + ERROR_HV_INVALID_VP_INDEX + ERROR_HV_INVALID_VP_INDEX + + + + No documentation. + + + ERROR_HV_INVALID_PORT_ID + ERROR_HV_INVALID_PORT_ID + + + + No documentation. + + + ERROR_HV_INVALID_CONNECTION_ID + ERROR_HV_INVALID_CONNECTION_ID + + + + No documentation. + + + ERROR_HV_INSUFFICIENT_BUFFERS + ERROR_HV_INSUFFICIENT_BUFFERS + + + + No documentation. + + + ERROR_HV_NOT_ACKNOWLEDGED + ERROR_HV_NOT_ACKNOWLEDGED + + + + No documentation. + + + ERROR_HV_INVALID_VP_STATE + ERROR_HV_INVALID_VP_STATE + + + + No documentation. + + + ERROR_HV_ACKNOWLEDGED + ERROR_HV_ACKNOWLEDGED + + + + No documentation. + + + ERROR_HV_INVALID_SAVE_RESTORE_STATE + ERROR_HV_INVALID_SAVE_RESTORE_STATE + + + + No documentation. + + + ERROR_HV_INVALID_SYNIC_STATE + ERROR_HV_INVALID_SYNIC_STATE + + + + No documentation. + + + ERROR_HV_OBJECT_IN_USE + ERROR_HV_OBJECT_IN_USE + + + + No documentation. + + + ERROR_HV_INVALID_PROXIMITY_DOMAIN_INFO + ERROR_HV_INVALID_PROXIMITY_DOMAIN_INFO + + + + No documentation. + + + ERROR_HV_NO_DATA + ERROR_HV_NO_DATA + + + + No documentation. + + + ERROR_HV_INACTIVE + ERROR_HV_INACTIVE + + + + No documentation. + + + ERROR_HV_NO_RESOURCES + ERROR_HV_NO_RESOURCES + + + + No documentation. + + + ERROR_HV_FEATURE_UNAVAILABLE + ERROR_HV_FEATURE_UNAVAILABLE + + + + No documentation. + + + ERROR_HV_INSUFFICIENT_BUFFER + ERROR_HV_INSUFFICIENT_BUFFER + + + + No documentation. + + + ERROR_HV_INSUFFICIENT_DEVICE_DOMAINS + ERROR_HV_INSUFFICIENT_DEVICE_DOMAINS + + + + No documentation. + + + ERROR_HV_CPUID_FEATURE_VALIDATION + ERROR_HV_CPUID_FEATURE_VALIDATION + + + + No documentation. + + + ERROR_HV_CPUID_XSAVE_FEATURE_VALIDATION + ERROR_HV_CPUID_XSAVE_FEATURE_VALIDATION + + + + No documentation. + + + ERROR_HV_PROCESSOR_STARTUP_TIMEOUT + ERROR_HV_PROCESSOR_STARTUP_TIMEOUT + + + + No documentation. + + + ERROR_HV_SMX_ENABLED + ERROR_HV_SMX_ENABLED + + + + No documentation. + + + ERROR_HV_INVALID_LP_INDEX + ERROR_HV_INVALID_LP_INDEX + + + + No documentation. + + + ERROR_HV_INVALID_REGISTER_VALUE + ERROR_HV_INVALID_REGISTER_VALUE + + + + No documentation. + + + ERROR_HV_INVALID_VTL_STATE + ERROR_HV_INVALID_VTL_STATE + + + + No documentation. + + + ERROR_HV_NX_NOT_DETECTED + ERROR_HV_NX_NOT_DETECTED + + + + No documentation. + + + ERROR_HV_INVALID_DEVICE_ID + ERROR_HV_INVALID_DEVICE_ID + + + + No documentation. + + + ERROR_HV_INVALID_DEVICE_STATE + ERROR_HV_INVALID_DEVICE_STATE + + + + No documentation. + + + ERROR_HV_PENDING_PAGE_REQUESTS + ERROR_HV_PENDING_PAGE_REQUESTS + + + + No documentation. + + + ERROR_HV_PAGE_REQUEST_INVALID + ERROR_HV_PAGE_REQUEST_INVALID + + + + No documentation. + + + ERROR_HV_INVALID_CPU_GROUP_ID + ERROR_HV_INVALID_CPU_GROUP_ID + + + + No documentation. + + + ERROR_HV_INVALID_CPU_GROUP_STATE + ERROR_HV_INVALID_CPU_GROUP_STATE + + + + No documentation. + + + ERROR_HV_OPERATION_FAILED + ERROR_HV_OPERATION_FAILED + + + + No documentation. + + + ERROR_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE + ERROR_HV_NOT_ALLOWED_WITH_NESTED_VIRT_ACTIVE + + + + No documentation. + + + ERROR_HV_NOT_PRESENT + ERROR_HV_NOT_PRESENT + + + + No documentation. + + + ERROR_VID_DUPLICATE_HANDLER + ERROR_VID_DUPLICATE_HANDLER + + + + No documentation. + + + ERROR_VID_TOO_MANY_HANDLERS + ERROR_VID_TOO_MANY_HANDLERS + + + + No documentation. + + + ERROR_VID_QUEUE_FULL + ERROR_VID_QUEUE_FULL + + + + No documentation. + + + ERROR_VID_HANDLER_NOT_PRESENT + ERROR_VID_HANDLER_NOT_PRESENT + + + + No documentation. + + + ERROR_VID_INVALID_OBJECT_NAME + ERROR_VID_INVALID_OBJECT_NAME + + + + No documentation. + + + ERROR_VID_PARTITION_NAME_TOO_LONG + ERROR_VID_PARTITION_NAME_TOO_LONG + + + + No documentation. + + + ERROR_VID_MESSAGE_QUEUE_NAME_TOO_LONG + ERROR_VID_MESSAGE_QUEUE_NAME_TOO_LONG + + + + No documentation. + + + ERROR_VID_PARTITION_ALREADY_EXISTS + ERROR_VID_PARTITION_ALREADY_EXISTS + + + + No documentation. + + + ERROR_VID_PARTITION_DOES_NOT_EXIST + ERROR_VID_PARTITION_DOES_NOT_EXIST + + + + No documentation. + + + ERROR_VID_PARTITION_NAME_NOT_FOUND + ERROR_VID_PARTITION_NAME_NOT_FOUND + + + + No documentation. + + + ERROR_VID_MESSAGE_QUEUE_ALREADY_EXISTS + ERROR_VID_MESSAGE_QUEUE_ALREADY_EXISTS + + + + No documentation. + + + ERROR_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT + ERROR_VID_EXCEEDED_MBP_ENTRY_MAP_LIMIT + + + + No documentation. + + + ERROR_VID_MB_STILL_REFERENCED + ERROR_VID_MB_STILL_REFERENCED + + + + No documentation. + + + ERROR_VID_CHILD_GPA_PAGE_SET_CORRUPTED + ERROR_VID_CHILD_GPA_PAGE_SET_CORRUPTED + + + + No documentation. + + + ERROR_VID_INVALID_NUMA_SETTINGS + ERROR_VID_INVALID_NUMA_SETTINGS + + + + No documentation. + + + ERROR_VID_INVALID_NUMA_NODE_INDEX + ERROR_VID_INVALID_NUMA_NODE_INDEX + + + + No documentation. + + + ERROR_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED + ERROR_VID_NOTIFICATION_QUEUE_ALREADY_ASSOCIATED + + + + No documentation. + + + ERROR_VID_INVALID_MEMORY_BLOCK_HANDLE + ERROR_VID_INVALID_MEMORY_BLOCK_HANDLE + + + + No documentation. + + + ERROR_VID_PAGE_RANGE_OVERFLOW + ERROR_VID_PAGE_RANGE_OVERFLOW + + + + No documentation. + + + ERROR_VID_INVALID_MESSAGE_QUEUE_HANDLE + ERROR_VID_INVALID_MESSAGE_QUEUE_HANDLE + + + + No documentation. + + + ERROR_VID_INVALID_GPA_RANGE_HANDLE + ERROR_VID_INVALID_GPA_RANGE_HANDLE + + + + No documentation. + + + ERROR_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE + ERROR_VID_NO_MEMORY_BLOCK_NOTIFICATION_QUEUE + + + + No documentation. + + + ERROR_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED + ERROR_VID_MEMORY_BLOCK_LOCK_COUNT_EXCEEDED + + + + No documentation. + + + ERROR_VID_INVALID_PPM_HANDLE + ERROR_VID_INVALID_PPM_HANDLE + + + + No documentation. + + + ERROR_VID_MBPS_ARE_LOCKED + ERROR_VID_MBPS_ARE_LOCKED + + + + No documentation. + + + ERROR_VID_MESSAGE_QUEUE_CLOSED + ERROR_VID_MESSAGE_QUEUE_CLOSED + + + + No documentation. + + + ERROR_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED + ERROR_VID_VIRTUAL_PROCESSOR_LIMIT_EXCEEDED + + + + No documentation. + + + ERROR_VID_STOP_PENDING + ERROR_VID_STOP_PENDING + + + + No documentation. + + + ERROR_VID_INVALID_PROCESSOR_STATE + ERROR_VID_INVALID_PROCESSOR_STATE + + + + No documentation. + + + ERROR_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT + ERROR_VID_EXCEEDED_KM_CONTEXT_COUNT_LIMIT + + + + No documentation. + + + ERROR_VID_KM_INTERFACE_ALREADY_INITIALIZED + ERROR_VID_KM_INTERFACE_ALREADY_INITIALIZED + + + + No documentation. + + + ERROR_VID_MB_PROPERTY_ALREADY_SET_RESET + ERROR_VID_MB_PROPERTY_ALREADY_SET_RESET + + + + No documentation. + + + ERROR_VID_MMIO_RANGE_DESTROYED + ERROR_VID_MMIO_RANGE_DESTROYED + + + + No documentation. + + + ERROR_VID_INVALID_CHILD_GPA_PAGE_SET + ERROR_VID_INVALID_CHILD_GPA_PAGE_SET + + + + No documentation. + + + ERROR_VID_RESERVE_PAGE_SET_IS_BEING_USED + ERROR_VID_RESERVE_PAGE_SET_IS_BEING_USED + + + + No documentation. + + + ERROR_VID_RESERVE_PAGE_SET_TOO_SMALL + ERROR_VID_RESERVE_PAGE_SET_TOO_SMALL + + + + No documentation. + + + ERROR_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE + ERROR_VID_MBP_ALREADY_LOCKED_USING_RESERVED_PAGE + + + + No documentation. + + + ERROR_VID_MBP_COUNT_EXCEEDED_LIMIT + ERROR_VID_MBP_COUNT_EXCEEDED_LIMIT + + + + No documentation. + + + ERROR_VID_SAVED_STATE_CORRUPT + ERROR_VID_SAVED_STATE_CORRUPT + + + + No documentation. + + + ERROR_VID_SAVED_STATE_UNRECOGNIZED_ITEM + ERROR_VID_SAVED_STATE_UNRECOGNIZED_ITEM + + + + No documentation. + + + ERROR_VID_SAVED_STATE_INCOMPATIBLE + ERROR_VID_SAVED_STATE_INCOMPATIBLE + + + + No documentation. + + + ERROR_VID_VTL_ACCESS_DENIED + ERROR_VID_VTL_ACCESS_DENIED + + + + No documentation. + + + ERROR_VMCOMPUTE_TERMINATED_DURING_START + ERROR_VMCOMPUTE_TERMINATED_DURING_START + + + + No documentation. + + + ERROR_VMCOMPUTE_IMAGE_MISMATCH + ERROR_VMCOMPUTE_IMAGE_MISMATCH + + + + No documentation. + + + ERROR_VMCOMPUTE_HYPERV_NOT_INSTALLED + ERROR_VMCOMPUTE_HYPERV_NOT_INSTALLED + + + + No documentation. + + + ERROR_VMCOMPUTE_OPERATION_PENDING + ERROR_VMCOMPUTE_OPERATION_PENDING + + + + No documentation. + + + ERROR_VMCOMPUTE_TOO_MANY_NOTIFICATIONS + ERROR_VMCOMPUTE_TOO_MANY_NOTIFICATIONS + + + + No documentation. + + + ERROR_VMCOMPUTE_INVALID_STATE + ERROR_VMCOMPUTE_INVALID_STATE + + + + No documentation. + + + ERROR_VMCOMPUTE_UNEXPECTED_EXIT + ERROR_VMCOMPUTE_UNEXPECTED_EXIT + + + + No documentation. + + + ERROR_VMCOMPUTE_TERMINATED + ERROR_VMCOMPUTE_TERMINATED + + + + No documentation. + + + ERROR_VMCOMPUTE_CONNECT_FAILED + ERROR_VMCOMPUTE_CONNECT_FAILED + + + + No documentation. + + + ERROR_VMCOMPUTE_TIMEOUT + ERROR_VMCOMPUTE_TIMEOUT + + + + No documentation. + + + ERROR_VMCOMPUTE_CONNECTION_CLOSED + ERROR_VMCOMPUTE_CONNECTION_CLOSED + + + + No documentation. + + + ERROR_VMCOMPUTE_UNKNOWN_MESSAGE + ERROR_VMCOMPUTE_UNKNOWN_MESSAGE + + + + No documentation. + + + ERROR_VMCOMPUTE_UNSUPPORTED_PROTOCOL_VERSION + ERROR_VMCOMPUTE_UNSUPPORTED_PROTOCOL_VERSION + + + + No documentation. + + + ERROR_VMCOMPUTE_INVALID_JSON + ERROR_VMCOMPUTE_INVALID_JSON + + + + No documentation. + + + ERROR_VMCOMPUTE_SYSTEM_NOT_FOUND + ERROR_VMCOMPUTE_SYSTEM_NOT_FOUND + + + + No documentation. + + + ERROR_VMCOMPUTE_SYSTEM_ALREADY_EXISTS + ERROR_VMCOMPUTE_SYSTEM_ALREADY_EXISTS + + + + No documentation. + + + ERROR_VMCOMPUTE_SYSTEM_ALREADY_STOPPED + ERROR_VMCOMPUTE_SYSTEM_ALREADY_STOPPED + + + + No documentation. + + + ERROR_VMCOMPUTE_PROTOCOL_ERROR + ERROR_VMCOMPUTE_PROTOCOL_ERROR + + + + No documentation. + + + ERROR_VNET_VIRTUAL_SWITCH_NAME_NOT_FOUND + ERROR_VNET_VIRTUAL_SWITCH_NAME_NOT_FOUND + + + + No documentation. + + + ERROR_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED + ERROR_VID_REMOTE_NODE_PARENT_GPA_PAGES_USED + + + + No documentation. + + + ERROR_VOLMGR_INCOMPLETE_REGENERATION + ERROR_VOLMGR_INCOMPLETE_REGENERATION + + + + No documentation. + + + ERROR_VOLMGR_INCOMPLETE_DISK_MIGRATION + ERROR_VOLMGR_INCOMPLETE_DISK_MIGRATION + + + + No documentation. + + + ERROR_VOLMGR_DATABASE_FULL + ERROR_VOLMGR_DATABASE_FULL + + + + No documentation. + + + ERROR_VOLMGR_DISK_CONFIGURATION_CORRUPTED + ERROR_VOLMGR_DISK_CONFIGURATION_CORRUPTED + + + + No documentation. + + + ERROR_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC + ERROR_VOLMGR_DISK_CONFIGURATION_NOT_IN_SYNC + + + + No documentation. + + + ERROR_VOLMGR_PACK_CONFIG_UPDATE_FAILED + ERROR_VOLMGR_PACK_CONFIG_UPDATE_FAILED + + + + No documentation. + + + ERROR_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME + ERROR_VOLMGR_DISK_CONTAINS_NON_SIMPLE_VOLUME + + + + No documentation. + + + ERROR_VOLMGR_DISK_DUPLICATE + ERROR_VOLMGR_DISK_DUPLICATE + + + + No documentation. + + + ERROR_VOLMGR_DISK_DYNAMIC + ERROR_VOLMGR_DISK_DYNAMIC + + + + No documentation. + + + ERROR_VOLMGR_DISK_ID_INVALID + ERROR_VOLMGR_DISK_ID_INVALID + + + + No documentation. + + + ERROR_VOLMGR_DISK_INVALID + ERROR_VOLMGR_DISK_INVALID + + + + No documentation. + + + ERROR_VOLMGR_DISK_LAST_VOTER + ERROR_VOLMGR_DISK_LAST_VOTER + + + + No documentation. + + + ERROR_VOLMGR_DISK_LAYOUT_INVALID + ERROR_VOLMGR_DISK_LAYOUT_INVALID + + + + No documentation. + + + ERROR_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS + ERROR_VOLMGR_DISK_LAYOUT_NON_BASIC_BETWEEN_BASIC_PARTITIONS + + + + No documentation. + + + ERROR_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED + ERROR_VOLMGR_DISK_LAYOUT_NOT_CYLINDER_ALIGNED + + + + No documentation. + + + ERROR_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL + ERROR_VOLMGR_DISK_LAYOUT_PARTITIONS_TOO_SMALL + + + + No documentation. + + + ERROR_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS + ERROR_VOLMGR_DISK_LAYOUT_PRIMARY_BETWEEN_LOGICAL_PARTITIONS + + + + No documentation. + + + ERROR_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS + ERROR_VOLMGR_DISK_LAYOUT_TOO_MANY_PARTITIONS + + + + No documentation. + + + ERROR_VOLMGR_DISK_MISSING + ERROR_VOLMGR_DISK_MISSING + + + + No documentation. + + + ERROR_VOLMGR_DISK_NOT_EMPTY + ERROR_VOLMGR_DISK_NOT_EMPTY + + + + No documentation. + + + ERROR_VOLMGR_DISK_NOT_ENOUGH_SPACE + ERROR_VOLMGR_DISK_NOT_ENOUGH_SPACE + + + + No documentation. + + + ERROR_VOLMGR_DISK_REVECTORING_FAILED + ERROR_VOLMGR_DISK_REVECTORING_FAILED + + + + No documentation. + + + ERROR_VOLMGR_DISK_SECTOR_SIZE_INVALID + ERROR_VOLMGR_DISK_SECTOR_SIZE_INVALID + + + + No documentation. + + + ERROR_VOLMGR_DISK_SET_NOT_CONTAINED + ERROR_VOLMGR_DISK_SET_NOT_CONTAINED + + + + No documentation. + + + ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS + ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_MEMBERS + + + + No documentation. + + + ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES + ERROR_VOLMGR_DISK_USED_BY_MULTIPLE_PLEXES + + + + No documentation. + + + ERROR_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED + ERROR_VOLMGR_DYNAMIC_DISK_NOT_SUPPORTED + + + + No documentation. + + + ERROR_VOLMGR_EXTENT_ALREADY_USED + ERROR_VOLMGR_EXTENT_ALREADY_USED + + + + No documentation. + + + ERROR_VOLMGR_EXTENT_NOT_CONTIGUOUS + ERROR_VOLMGR_EXTENT_NOT_CONTIGUOUS + + + + No documentation. + + + ERROR_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION + ERROR_VOLMGR_EXTENT_NOT_IN_PUBLIC_REGION + + + + No documentation. + + + ERROR_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED + ERROR_VOLMGR_EXTENT_NOT_SECTOR_ALIGNED + + + + No documentation. + + + ERROR_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION + ERROR_VOLMGR_EXTENT_OVERLAPS_EBR_PARTITION + + + + No documentation. + + + ERROR_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH + ERROR_VOLMGR_EXTENT_VOLUME_LENGTHS_DO_NOT_MATCH + + + + No documentation. + + + ERROR_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED + ERROR_VOLMGR_FAULT_TOLERANT_NOT_SUPPORTED + + + + No documentation. + + + ERROR_VOLMGR_INTERLEAVE_LENGTH_INVALID + ERROR_VOLMGR_INTERLEAVE_LENGTH_INVALID + + + + No documentation. + + + ERROR_VOLMGR_MAXIMUM_REGISTERED_USERS + ERROR_VOLMGR_MAXIMUM_REGISTERED_USERS + + + + No documentation. + + + ERROR_VOLMGR_MEMBER_IN_SYNC + ERROR_VOLMGR_MEMBER_IN_SYNC + + + + No documentation. + + + ERROR_VOLMGR_MEMBER_INDEX_DUPLICATE + ERROR_VOLMGR_MEMBER_INDEX_DUPLICATE + + + + No documentation. + + + ERROR_VOLMGR_MEMBER_INDEX_INVALID + ERROR_VOLMGR_MEMBER_INDEX_INVALID + + + + No documentation. + + + ERROR_VOLMGR_MEMBER_MISSING + ERROR_VOLMGR_MEMBER_MISSING + + + + No documentation. + + + ERROR_VOLMGR_MEMBER_NOT_DETACHED + ERROR_VOLMGR_MEMBER_NOT_DETACHED + + + + No documentation. + + + ERROR_VOLMGR_MEMBER_REGENERATING + ERROR_VOLMGR_MEMBER_REGENERATING + + + + No documentation. + + + ERROR_VOLMGR_ALL_DISKS_FAILED + ERROR_VOLMGR_ALL_DISKS_FAILED + + + + No documentation. + + + ERROR_VOLMGR_NO_REGISTERED_USERS + ERROR_VOLMGR_NO_REGISTERED_USERS + + + + No documentation. + + + ERROR_VOLMGR_NO_SUCH_USER + ERROR_VOLMGR_NO_SUCH_USER + + + + No documentation. + + + ERROR_VOLMGR_NOTIFICATION_RESET + ERROR_VOLMGR_NOTIFICATION_RESET + + + + No documentation. + + + ERROR_VOLMGR_NUMBER_OF_MEMBERS_INVALID + ERROR_VOLMGR_NUMBER_OF_MEMBERS_INVALID + + + + No documentation. + + + ERROR_VOLMGR_NUMBER_OF_PLEXES_INVALID + ERROR_VOLMGR_NUMBER_OF_PLEXES_INVALID + + + + No documentation. + + + ERROR_VOLMGR_PACK_DUPLICATE + ERROR_VOLMGR_PACK_DUPLICATE + + + + No documentation. + + + ERROR_VOLMGR_PACK_ID_INVALID + ERROR_VOLMGR_PACK_ID_INVALID + + + + No documentation. + + + ERROR_VOLMGR_PACK_INVALID + ERROR_VOLMGR_PACK_INVALID + + + + No documentation. + + + ERROR_VOLMGR_PACK_NAME_INVALID + ERROR_VOLMGR_PACK_NAME_INVALID + + + + No documentation. + + + ERROR_VOLMGR_PACK_OFFLINE + ERROR_VOLMGR_PACK_OFFLINE + + + + No documentation. + + + ERROR_VOLMGR_PACK_HAS_QUORUM + ERROR_VOLMGR_PACK_HAS_QUORUM + + + + No documentation. + + + ERROR_VOLMGR_PACK_WITHOUT_QUORUM + ERROR_VOLMGR_PACK_WITHOUT_QUORUM + + + + No documentation. + + + ERROR_VOLMGR_PARTITION_STYLE_INVALID + ERROR_VOLMGR_PARTITION_STYLE_INVALID + + + + No documentation. + + + ERROR_VOLMGR_PARTITION_UPDATE_FAILED + ERROR_VOLMGR_PARTITION_UPDATE_FAILED + + + + No documentation. + + + ERROR_VOLMGR_PLEX_IN_SYNC + ERROR_VOLMGR_PLEX_IN_SYNC + + + + No documentation. + + + ERROR_VOLMGR_PLEX_INDEX_DUPLICATE + ERROR_VOLMGR_PLEX_INDEX_DUPLICATE + + + + No documentation. + + + ERROR_VOLMGR_PLEX_INDEX_INVALID + ERROR_VOLMGR_PLEX_INDEX_INVALID + + + + No documentation. + + + ERROR_VOLMGR_PLEX_LAST_ACTIVE + ERROR_VOLMGR_PLEX_LAST_ACTIVE + + + + No documentation. + + + ERROR_VOLMGR_PLEX_MISSING + ERROR_VOLMGR_PLEX_MISSING + + + + No documentation. + + + ERROR_VOLMGR_PLEX_REGENERATING + ERROR_VOLMGR_PLEX_REGENERATING + + + + No documentation. + + + ERROR_VOLMGR_PLEX_TYPE_INVALID + ERROR_VOLMGR_PLEX_TYPE_INVALID + + + + No documentation. + + + ERROR_VOLMGR_PLEX_NOT_RAID5 + ERROR_VOLMGR_PLEX_NOT_RAID5 + + + + No documentation. + + + ERROR_VOLMGR_PLEX_NOT_SIMPLE + ERROR_VOLMGR_PLEX_NOT_SIMPLE + + + + No documentation. + + + ERROR_VOLMGR_STRUCTURE_SIZE_INVALID + ERROR_VOLMGR_STRUCTURE_SIZE_INVALID + + + + No documentation. + + + ERROR_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS + ERROR_VOLMGR_TOO_MANY_NOTIFICATION_REQUESTS + + + + No documentation. + + + ERROR_VOLMGR_TRANSACTION_IN_PROGRESS + ERROR_VOLMGR_TRANSACTION_IN_PROGRESS + + + + No documentation. + + + ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE + ERROR_VOLMGR_UNEXPECTED_DISK_LAYOUT_CHANGE + + + + No documentation. + + + ERROR_VOLMGR_VOLUME_CONTAINS_MISSING_DISK + ERROR_VOLMGR_VOLUME_CONTAINS_MISSING_DISK + + + + No documentation. + + + ERROR_VOLMGR_VOLUME_ID_INVALID + ERROR_VOLMGR_VOLUME_ID_INVALID + + + + No documentation. + + + ERROR_VOLMGR_VOLUME_LENGTH_INVALID + ERROR_VOLMGR_VOLUME_LENGTH_INVALID + + + + No documentation. + + + ERROR_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE + ERROR_VOLMGR_VOLUME_LENGTH_NOT_SECTOR_SIZE_MULTIPLE + + + + No documentation. + + + ERROR_VOLMGR_VOLUME_NOT_MIRRORED + ERROR_VOLMGR_VOLUME_NOT_MIRRORED + + + + No documentation. + + + ERROR_VOLMGR_VOLUME_NOT_RETAINED + ERROR_VOLMGR_VOLUME_NOT_RETAINED + + + + No documentation. + + + ERROR_VOLMGR_VOLUME_OFFLINE + ERROR_VOLMGR_VOLUME_OFFLINE + + + + No documentation. + + + ERROR_VOLMGR_VOLUME_RETAINED + ERROR_VOLMGR_VOLUME_RETAINED + + + + No documentation. + + + ERROR_VOLMGR_NUMBER_OF_EXTENTS_INVALID + ERROR_VOLMGR_NUMBER_OF_EXTENTS_INVALID + + + + No documentation. + + + ERROR_VOLMGR_DIFFERENT_SECTOR_SIZE + ERROR_VOLMGR_DIFFERENT_SECTOR_SIZE + + + + No documentation. + + + ERROR_VOLMGR_BAD_BOOT_DISK + ERROR_VOLMGR_BAD_BOOT_DISK + + + + No documentation. + + + ERROR_VOLMGR_PACK_CONFIG_OFFLINE + ERROR_VOLMGR_PACK_CONFIG_OFFLINE + + + + No documentation. + + + ERROR_VOLMGR_PACK_CONFIG_ONLINE + ERROR_VOLMGR_PACK_CONFIG_ONLINE + + + + No documentation. + + + ERROR_VOLMGR_NOT_PRIMARY_PACK + ERROR_VOLMGR_NOT_PRIMARY_PACK + + + + No documentation. + + + ERROR_VOLMGR_PACK_LOG_UPDATE_FAILED + ERROR_VOLMGR_PACK_LOG_UPDATE_FAILED + + + + No documentation. + + + ERROR_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID + ERROR_VOLMGR_NUMBER_OF_DISKS_IN_PLEX_INVALID + + + + No documentation. + + + ERROR_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID + ERROR_VOLMGR_NUMBER_OF_DISKS_IN_MEMBER_INVALID + + + + No documentation. + + + ERROR_VOLMGR_VOLUME_MIRRORED + ERROR_VOLMGR_VOLUME_MIRRORED + + + + No documentation. + + + ERROR_VOLMGR_PLEX_NOT_SIMPLE_SPANNED + ERROR_VOLMGR_PLEX_NOT_SIMPLE_SPANNED + + + + No documentation. + + + ERROR_VOLMGR_NO_VALID_LOG_COPIES + ERROR_VOLMGR_NO_VALID_LOG_COPIES + + + + No documentation. + + + ERROR_VOLMGR_PRIMARY_PACK_PRESENT + ERROR_VOLMGR_PRIMARY_PACK_PRESENT + + + + No documentation. + + + ERROR_VOLMGR_NUMBER_OF_DISKS_INVALID + ERROR_VOLMGR_NUMBER_OF_DISKS_INVALID + + + + No documentation. + + + ERROR_VOLMGR_MIRROR_NOT_SUPPORTED + ERROR_VOLMGR_MIRROR_NOT_SUPPORTED + + + + No documentation. + + + ERROR_VOLMGR_RAID5_NOT_SUPPORTED + ERROR_VOLMGR_RAID5_NOT_SUPPORTED + + + + No documentation. + + + ERROR_BCD_NOT_ALL_ENTRIES_IMPORTED + ERROR_BCD_NOT_ALL_ENTRIES_IMPORTED + + + + No documentation. + + + ERROR_BCD_TOO_MANY_ELEMENTS + ERROR_BCD_TOO_MANY_ELEMENTS + + + + No documentation. + + + ERROR_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED + ERROR_BCD_NOT_ALL_ENTRIES_SYNCHRONIZED + + + + No documentation. + + + ERROR_VHD_DRIVE_FOOTER_MISSING + ERROR_VHD_DRIVE_FOOTER_MISSING + + + + No documentation. + + + ERROR_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH + ERROR_VHD_DRIVE_FOOTER_CHECKSUM_MISMATCH + + + + No documentation. + + + ERROR_VHD_DRIVE_FOOTER_CORRUPT + ERROR_VHD_DRIVE_FOOTER_CORRUPT + + + + No documentation. + + + ERROR_VHD_FORMAT_UNKNOWN + ERROR_VHD_FORMAT_UNKNOWN + + + + No documentation. + + + ERROR_VHD_FORMAT_UNSUPPORTED_VERSION + ERROR_VHD_FORMAT_UNSUPPORTED_VERSION + + + + No documentation. + + + ERROR_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH + ERROR_VHD_SPARSE_HEADER_CHECKSUM_MISMATCH + + + + No documentation. + + + ERROR_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION + ERROR_VHD_SPARSE_HEADER_UNSUPPORTED_VERSION + + + + No documentation. + + + ERROR_VHD_SPARSE_HEADER_CORRUPT + ERROR_VHD_SPARSE_HEADER_CORRUPT + + + + No documentation. + + + ERROR_VHD_BLOCK_ALLOCATION_FAILURE + ERROR_VHD_BLOCK_ALLOCATION_FAILURE + + + + No documentation. + + + ERROR_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT + ERROR_VHD_BLOCK_ALLOCATION_TABLE_CORRUPT + + + + No documentation. + + + ERROR_VHD_INVALID_BLOCK_SIZE + ERROR_VHD_INVALID_BLOCK_SIZE + + + + No documentation. + + + ERROR_VHD_BITMAP_MISMATCH + ERROR_VHD_BITMAP_MISMATCH + + + + No documentation. + + + ERROR_VHD_PARENT_VHD_NOT_FOUND + ERROR_VHD_PARENT_VHD_NOT_FOUND + + + + No documentation. + + + ERROR_VHD_CHILD_PARENT_ID_MISMATCH + ERROR_VHD_CHILD_PARENT_ID_MISMATCH + + + + No documentation. + + + ERROR_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH + ERROR_VHD_CHILD_PARENT_TIMESTAMP_MISMATCH + + + + No documentation. + + + ERROR_VHD_METADATA_READ_FAILURE + ERROR_VHD_METADATA_READ_FAILURE + + + + No documentation. + + + ERROR_VHD_METADATA_WRITE_FAILURE + ERROR_VHD_METADATA_WRITE_FAILURE + + + + No documentation. + + + ERROR_VHD_INVALID_SIZE + ERROR_VHD_INVALID_SIZE + + + + No documentation. + + + ERROR_VHD_INVALID_FILE_SIZE + ERROR_VHD_INVALID_FILE_SIZE + + + + No documentation. + + + ERROR_VIRTDISK_PROVIDER_NOT_FOUND + ERROR_VIRTDISK_PROVIDER_NOT_FOUND + + + + No documentation. + + + ERROR_VIRTDISK_NOT_VIRTUAL_DISK + ERROR_VIRTDISK_NOT_VIRTUAL_DISK + + + + No documentation. + + + ERROR_VHD_PARENT_VHD_ACCESS_DENIED + ERROR_VHD_PARENT_VHD_ACCESS_DENIED + + + + No documentation. + + + ERROR_VHD_CHILD_PARENT_SIZE_MISMATCH + ERROR_VHD_CHILD_PARENT_SIZE_MISMATCH + + + + No documentation. + + + ERROR_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED + ERROR_VHD_DIFFERENCING_CHAIN_CYCLE_DETECTED + + + + No documentation. + + + ERROR_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT + ERROR_VHD_DIFFERENCING_CHAIN_ERROR_IN_PARENT + + + + No documentation. + + + ERROR_VIRTUAL_DISK_LIMITATION + ERROR_VIRTUAL_DISK_LIMITATION + + + + No documentation. + + + ERROR_VHD_INVALID_TYPE + ERROR_VHD_INVALID_TYPE + + + + No documentation. + + + ERROR_VHD_INVALID_STATE + ERROR_VHD_INVALID_STATE + + + + No documentation. + + + ERROR_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE + ERROR_VIRTDISK_UNSUPPORTED_DISK_SECTOR_SIZE + + + + No documentation. + + + ERROR_VIRTDISK_DISK_ALREADY_OWNED + ERROR_VIRTDISK_DISK_ALREADY_OWNED + + + + No documentation. + + + ERROR_VIRTDISK_DISK_ONLINE_AND_WRITABLE + ERROR_VIRTDISK_DISK_ONLINE_AND_WRITABLE + + + + No documentation. + + + ERROR_CTLOG_TRACKING_NOT_INITIALIZED + ERROR_CTLOG_TRACKING_NOT_INITIALIZED + + + + No documentation. + + + ERROR_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE + ERROR_CTLOG_LOGFILE_SIZE_EXCEEDED_MAXSIZE + + + + No documentation. + + + ERROR_CTLOG_VHD_CHANGED_OFFLINE + ERROR_CTLOG_VHD_CHANGED_OFFLINE + + + + No documentation. + + + ERROR_CTLOG_INVALID_TRACKING_STATE + ERROR_CTLOG_INVALID_TRACKING_STATE + + + + No documentation. + + + ERROR_CTLOG_INCONSISTENT_TRACKING_FILE + ERROR_CTLOG_INCONSISTENT_TRACKING_FILE + + + + No documentation. + + + ERROR_VHD_RESIZE_WOULD_TRUNCATE_DATA + ERROR_VHD_RESIZE_WOULD_TRUNCATE_DATA + + + + No documentation. + + + ERROR_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE + ERROR_VHD_COULD_NOT_COMPUTE_MINIMUM_VIRTUAL_SIZE + + + + No documentation. + + + ERROR_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE + ERROR_VHD_ALREADY_AT_OR_BELOW_MINIMUM_VIRTUAL_SIZE + + + + No documentation. + + + ERROR_VHD_METADATA_FULL + ERROR_VHD_METADATA_FULL + + + + No documentation. + + + ERROR_VHD_INVALID_CHANGE_TRACKING_ID + ERROR_VHD_INVALID_CHANGE_TRACKING_ID + + + + No documentation. + + + ERROR_VHD_CHANGE_TRACKING_DISABLED + ERROR_VHD_CHANGE_TRACKING_DISABLED + + + + No documentation. + + + ERROR_VHD_MISSING_CHANGE_TRACKING_INFORMATION + ERROR_VHD_MISSING_CHANGE_TRACKING_INFORMATION + + + + No documentation. + + + ERROR_QUERY_STORAGE_ERROR + ERROR_QUERY_STORAGE_ERROR + + + + No documentation. + + + ERROR_HNS_PORT_ALLOCATED + ERROR_HNS_PORT_ALLOCATED + + + + No documentation. + + + ERROR_HNS_MAPPING_NOT_SUPPORTED + ERROR_HNS_MAPPING_NOT_SUPPORTED + + + + No documentation. + + + ERROR_SPACES_POOL_WAS_DELETED + ERROR_SPACES_POOL_WAS_DELETED + + + + No documentation. + + + ERROR_SPACES_FAULT_DOMAIN_TYPE_INVALID + ERROR_SPACES_FAULT_DOMAIN_TYPE_INVALID + + + + No documentation. + + + ERROR_SPACES_INTERNAL_ERROR + ERROR_SPACES_INTERNAL_ERROR + + + + No documentation. + + + ERROR_SPACES_RESILIENCY_TYPE_INVALID + ERROR_SPACES_RESILIENCY_TYPE_INVALID + + + + No documentation. + + + ERROR_SPACES_DRIVE_SECTOR_SIZE_INVALID + ERROR_SPACES_DRIVE_SECTOR_SIZE_INVALID + + + + No documentation. + + + ERROR_SPACES_DRIVE_REDUNDANCY_INVALID + ERROR_SPACES_DRIVE_REDUNDANCY_INVALID + + + + No documentation. + + + ERROR_SPACES_NUMBER_OF_DATA_COPIES_INVALID + ERROR_SPACES_NUMBER_OF_DATA_COPIES_INVALID + + + + No documentation. + + + ERROR_SPACES_PARITY_LAYOUT_INVALID + ERROR_SPACES_PARITY_LAYOUT_INVALID + + + + No documentation. + + + ERROR_SPACES_INTERLEAVE_LENGTH_INVALID + ERROR_SPACES_INTERLEAVE_LENGTH_INVALID + + + + No documentation. + + + ERROR_SPACES_NUMBER_OF_COLUMNS_INVALID + ERROR_SPACES_NUMBER_OF_COLUMNS_INVALID + + + + No documentation. + + + ERROR_SPACES_NOT_ENOUGH_DRIVES + ERROR_SPACES_NOT_ENOUGH_DRIVES + + + + No documentation. + + + ERROR_SPACES_EXTENDED_ERROR + ERROR_SPACES_EXTENDED_ERROR + + + + No documentation. + + + ERROR_SPACES_PROVISIONING_TYPE_INVALID + ERROR_SPACES_PROVISIONING_TYPE_INVALID + + + + No documentation. + + + ERROR_SPACES_ALLOCATION_SIZE_INVALID + ERROR_SPACES_ALLOCATION_SIZE_INVALID + + + + No documentation. + + + ERROR_SPACES_ENCLOSURE_AWARE_INVALID + ERROR_SPACES_ENCLOSURE_AWARE_INVALID + + + + No documentation. + + + ERROR_SPACES_WRITE_CACHE_SIZE_INVALID + ERROR_SPACES_WRITE_CACHE_SIZE_INVALID + + + + No documentation. + + + ERROR_SPACES_NUMBER_OF_GROUPS_INVALID + ERROR_SPACES_NUMBER_OF_GROUPS_INVALID + + + + No documentation. + + + ERROR_SPACES_DRIVE_OPERATIONAL_STATE_INVALID + ERROR_SPACES_DRIVE_OPERATIONAL_STATE_INVALID + + + + No documentation. + + + ERROR_VOLSNAP_BOOTFILE_NOT_VALID + ERROR_VOLSNAP_BOOTFILE_NOT_VALID + + + + No documentation. + + + ERROR_VOLSNAP_ACTIVATION_TIMEOUT + ERROR_VOLSNAP_ACTIVATION_TIMEOUT + + + + No documentation. + + + ERROR_TIERING_NOT_SUPPORTED_ON_VOLUME + ERROR_TIERING_NOT_SUPPORTED_ON_VOLUME + + + + No documentation. + + + ERROR_TIERING_VOLUME_DISMOUNT_IN_PROGRESS + ERROR_TIERING_VOLUME_DISMOUNT_IN_PROGRESS + + + + No documentation. + + + ERROR_TIERING_STORAGE_TIER_NOT_FOUND + ERROR_TIERING_STORAGE_TIER_NOT_FOUND + + + + No documentation. + + + ERROR_TIERING_INVALID_FILE_ID + ERROR_TIERING_INVALID_FILE_ID + + + + No documentation. + + + ERROR_TIERING_WRONG_CLUSTER_NODE + ERROR_TIERING_WRONG_CLUSTER_NODE + + + + No documentation. + + + ERROR_TIERING_ALREADY_PROCESSING + ERROR_TIERING_ALREADY_PROCESSING + + + + No documentation. + + + ERROR_TIERING_CANNOT_PIN_OBJECT + ERROR_TIERING_CANNOT_PIN_OBJECT + + + + No documentation. + + + ERROR_TIERING_FILE_IS_NOT_PINNED + ERROR_TIERING_FILE_IS_NOT_PINNED + + + + No documentation. + + + ERROR_NOT_A_TIERED_VOLUME + ERROR_NOT_A_TIERED_VOLUME + + + + No documentation. + + + ERROR_ATTRIBUTE_NOT_PRESENT + ERROR_ATTRIBUTE_NOT_PRESENT + + + + No documentation. + + + ERROR_SECCORE_INVALID_COMMAND + ERROR_SECCORE_INVALID_COMMAND + + + + No documentation. + + + ERROR_NO_APPLICABLE_APP_LICENSES_FOUND + ERROR_NO_APPLICABLE_APP_LICENSES_FOUND + + + + No documentation. + + + ERROR_CLIP_LICENSE_NOT_FOUND + ERROR_CLIP_LICENSE_NOT_FOUND + + + + No documentation. + + + ERROR_CLIP_DEVICE_LICENSE_MISSING + ERROR_CLIP_DEVICE_LICENSE_MISSING + + + + No documentation. + + + ERROR_CLIP_LICENSE_INVALID_SIGNATURE + ERROR_CLIP_LICENSE_INVALID_SIGNATURE + + + + No documentation. + + + ERROR_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID + ERROR_CLIP_KEYHOLDER_LICENSE_MISSING_OR_INVALID + + + + No documentation. + + + ERROR_CLIP_LICENSE_EXPIRED + ERROR_CLIP_LICENSE_EXPIRED + + + + No documentation. + + + ERROR_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE + ERROR_CLIP_LICENSE_SIGNED_BY_UNKNOWN_SOURCE + + + + No documentation. + + + ERROR_CLIP_LICENSE_NOT_SIGNED + ERROR_CLIP_LICENSE_NOT_SIGNED + + + + No documentation. + + + ERROR_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE + ERROR_CLIP_LICENSE_HARDWARE_ID_OUT_OF_TOLERANCE + + + + No documentation. + + + ERROR_CLIP_LICENSE_DEVICE_ID_MISMATCH + ERROR_CLIP_LICENSE_DEVICE_ID_MISMATCH + + + + No documentation. + + + ERROR_DBG_CREATE_PROCESS_FAILURE_LOCKDOWN + ERROR_DBG_CREATE_PROCESS_FAILURE_LOCKDOWN + + + + No documentation. + + + ERROR_DBG_ATTACH_PROCESS_FAILURE_LOCKDOWN + ERROR_DBG_ATTACH_PROCESS_FAILURE_LOCKDOWN + + + + No documentation. + + + ERROR_DBG_CONNECT_SERVER_FAILURE_LOCKDOWN + ERROR_DBG_CONNECT_SERVER_FAILURE_LOCKDOWN + + + + No documentation. + + + ERROR_DBG_START_SERVER_FAILURE_LOCKDOWN + ERROR_DBG_START_SERVER_FAILURE_LOCKDOWN + + + + No documentation. + + + ERROR_IO_PREEMPTED + ERROR_IO_PREEMPTED + + + + No documentation. + + + ERROR_SVHDX_ERROR_STORED + ERROR_SVHDX_ERROR_STORED + + + + No documentation. + + + ERROR_SVHDX_ERROR_NOT_AVAILABLE + ERROR_SVHDX_ERROR_NOT_AVAILABLE + + + + No documentation. + + + ERROR_SVHDX_UNIT_ATTENTION_AVAILABLE + ERROR_SVHDX_UNIT_ATTENTION_AVAILABLE + + + + No documentation. + + + ERROR_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED + ERROR_SVHDX_UNIT_ATTENTION_CAPACITY_DATA_CHANGED + + + + No documentation. + + + ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED + ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_PREEMPTED + + + + No documentation. + + + ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED + ERROR_SVHDX_UNIT_ATTENTION_RESERVATIONS_RELEASED + + + + No documentation. + + + ERROR_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED + ERROR_SVHDX_UNIT_ATTENTION_REGISTRATIONS_PREEMPTED + + + + No documentation. + + + ERROR_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED + ERROR_SVHDX_UNIT_ATTENTION_OPERATING_DEFINITION_CHANGED + + + + No documentation. + + + ERROR_SVHDX_RESERVATION_CONFLICT + ERROR_SVHDX_RESERVATION_CONFLICT + + + + No documentation. + + + ERROR_SVHDX_WRONG_FILE_TYPE + ERROR_SVHDX_WRONG_FILE_TYPE + + + + No documentation. + + + ERROR_SVHDX_VERSION_MISMATCH + ERROR_SVHDX_VERSION_MISMATCH + + + + No documentation. + + + ERROR_VHD_SHARED + ERROR_VHD_SHARED + + + + No documentation. + + + ERROR_SVHDX_NO_INITIATOR + ERROR_SVHDX_NO_INITIATOR + + + + No documentation. + + + ERROR_VHDSET_BACKING_STORAGE_NOT_FOUND + ERROR_VHDSET_BACKING_STORAGE_NOT_FOUND + + + + No documentation. + + + ERROR_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP + ERROR_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP + + + + No documentation. + + + ERROR_SMB_BAD_CLUSTER_DIALECT + ERROR_SMB_BAD_CLUSTER_DIALECT + + + +

    The + enumeration values indicate the type of locking requested for the specified range of bytes. The values are used in the + ILockBytes::LockRegion and + methods.

    +
    + + aa380048 + LOCKTYPE + LOCKTYPE +
    + + + No documentation. + + + aa380048 + LOCK_WRITE + LOCK_WRITE + + + + No documentation. + + + aa380048 + LOCK_EXCLUSIVE + LOCK_EXCLUSIVE + + + + No documentation. + + + aa380048 + LOCK_ONLYONCE + LOCK_ONLYONCE + + + +

    The + enumeration values indicate whether the method should try to return a name in the pwcsName member of the + structure. The values are used in the + ILockBytes::Stat, + IStorage::Stat, and + methods to save memory when the pwcsName member is not required.

    +
    + + aa380316 + STATFLAG + STATFLAG +
    + + + No documentation. + + + aa380316 + STATFLAG_DEFAULT + STATFLAG_DEFAULT + + + + No documentation. + + + aa380316 + STATFLAG_NONAME + STATFLAG_NONAME + + + + None. + + + None + None + + + +

    The + interface lets you read and write data to stream objects. Stream objects contain the data in a structured storage object, where storages provide the structure. Simple data can be written directly to a stream but, most frequently, streams are elements nested within a storage object. They are similar to standard files.

    The + interface defines methods similar to the MS-DOS FAT file functions. For example, each stream object has its own access rights and a seek reference. The main difference between a DOS file and a stream object is that in the latter case, streams are opened using an + interface reference rather than a file handle.

    The methods in this interface present your object's data as a contiguous sequence of bytes that you can read or write. There are also methods for committing and reverting changes on streams that are open in transacted mode and methods for restricting access to a range of bytes in the stream.

    Streams can remain open for long periods of time without consuming file-system resources. The IUnknown::Release method is similar to a close function on a file. Once released, the stream object is no longer valid and cannot be used.

    Clients of asynchronous monikers can choose between a data-pull or data-push model for driving an asynchronous + IMoniker::BindToStorage operation and for receiving asynchronous notifications. See + URL Monikers for more information. The following table compares the behavior of asynchronous + and + calls returned in IBindStatusCallback::OnDataAvailable in these two download models:

    +
    + + aa380034 + IStream + IStream +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    The Seek method changes the seek reference to a new location. The new location is relative to either the beginning of the stream, the end of the stream, or the current seek reference.

    +
    +

    The displacement to be added to the location indicated by the dwOrigin parameter. If dwOrigin is STREAM_SEEK_SET, this is interpreted as an unsigned value rather than a signed value.

    +

    The origin for the displacement specified in dlibMove. The origin can be the beginning of the file (STREAM_SEEK_SET), the current seek reference (STREAM_SEEK_CUR), or the end of the file (STREAM_SEEK_END). For more information about values, see the STREAM_SEEK enumeration.

    +

    A reference to the location where this method writes the value of the new seek reference from the beginning of the stream.

    You can set this reference to null. In this case, this method does not provide the new seek reference.

    + +

    changes the seek reference so that subsequent read and write operations can be performed at a different location in the stream object. It is an error to seek before the beginning of the stream. It is not, however, an error to seek past the end of the stream. Seeking past the end of the stream is useful for subsequent write operations, as the stream byte range will be extended to the new seek position immediately before the write is complete.

    You can also use this method to obtain the current value of the seek reference by calling this method with the dwOrigin parameter set to STREAM_SEEK_CUR and the dlibMove parameter set to 0 so that the seek reference is not changed. The current seek reference is returned in the plibNewPosition parameter.

    +
    + + aa380043 + HRESULT IStream::Seek([In] LARGE_INTEGER dlibMove,[In] SHARPDX_SEEKORIGIN dwOrigin,[Out, Optional] ULARGE_INTEGER* plibNewPosition) + IStream::Seek +
    + + +

    The SetSize method changes the size of the stream object.

    +
    +

    Specifies the new size, in bytes, of the stream.

    +

    This method can return one of these values.

    The size of the stream object was successfully changed.

    E_PENDING

    Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information, see IFillLockBytes and Asynchronous Storage.

    STG_E_MEDIUMFULL

    The stream size is not changed because there is no space left on the storage device.

    STG_E_INVALIDFUNCTION

    The value of the libNewSize parameter is not supported by the implementation. Not all streams support greater than 2?? bytes. If a stream does not support more than 2?? bytes, the high DWORD data type of libNewSize must be zero. If it is nonzero, the implementation may return STG_E_INVALIDFUNCTION. In general, COM-based implementations of the interface do not support streams larger than 2?? bytes.

    STG_E_REVERTED

    The object has been invalidated by a revert operation above it in the transaction tree.

    + +

    changes the size of the stream object. Call this method to preallocate space for the stream. If the libNewSize parameter is larger than the current stream size, the stream is extended to the indicated size by filling the intervening space with bytes of undefined value. This operation is similar to the + method if the seek reference is past the current end of the stream.

    If the libNewSize parameter is smaller than the current stream, the stream is truncated to the indicated size.

    The seek reference is not affected by the change in stream size.

    Calling can be an effective way to obtain a large chunk of contiguous space.

    +
    + + aa380044 + HRESULT IStream::SetSize([In] ULARGE_INTEGER libNewSize) + IStream::SetSize +
    + + +

    The CopyTo method copies a specified number of bytes from the current seek reference in the stream to the current seek reference in another stream.

    +
    +

    A reference to the destination stream. The stream pointed to by pstm can be a new stream or a clone of the source stream.

    +

    The number of bytes to copy from the source stream.

    +

    A reference to the location where this method writes the actual number of bytes written to the destination. You can set this reference to null. In this case, this method does not provide the actual number of bytes written.

    +

    A reference to the location where this method writes the actual number of bytes read from the source. You can set this reference to null. In this case, this method does not provide the actual number of bytes read.

    + +

    The CopyTo method copies the specified bytes from one stream to another. It can also be used to copy a stream to itself. The seek reference in each stream instance is adjusted for the number of bytes read or written. This method is equivalent to reading cb bytes into memory using + and then immediately writing them to the destination stream using + , although will be more efficient.

    The destination stream can be a clone of the source stream created by calling the + method.

    If returns an error, you cannot assume that the seek references are valid for either the source or destination. Additionally, the values of pcbRead and pcbWritten are not meaningful even though they are returned.

    If returns successfully, the actual number of bytes read and written are the same.

    To copy the remainder of the source from the current seek reference, specify the maximum large integer value for the cb parameter. If the seek reference is the beginning of the stream, this operation copies the entire stream.

    +
    + + aa380038 + HRESULT IStream::CopyTo([In] IStream* pstm,[In] ULARGE_INTEGER cb,[Out] ULARGE_INTEGER* pcbRead,[Out] ULARGE_INTEGER* pcbWritten) + IStream::CopyTo +
    + + +

    The Commit method ensures that any changes made to a stream object open in transacted mode are reflected in the parent storage. If the stream object is open in direct mode, has no effect other than flushing all memory buffers to the next-level storage object. The COM compound file implementation of streams does not support opening streams in transacted mode.

    +
    +

    Controls how the changes for the stream object are committed. See the enumeration for a definition of these values.

    +

    This method can return one of these values.

    Changes to the stream object were successfully committed to the parent level.

    E_PENDING

    Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see IFillLockBytes and Asynchronous Storage.

    STG_E_MEDIUMFULL

    The commit operation failed due to lack of space on the storage device.

    STG_E_REVERTED

    The object has been invalidated by a revert operation above it in the transaction tree.

    + +

    The Commit method ensures that changes to a stream object opened in transacted mode are reflected in the parent storage. Changes that have been made to the stream since it was opened or last committed are reflected to the parent storage object. If the parent is opened in transacted mode, the parent may revert at a later time, rolling back the changes to this stream object. The compound file implementation does not support the opening of streams in transacted mode, so this method has very little effect other than to flush memory buffers. For more information, see + - Compound File Implementation.

    If the stream is open in direct mode, this method ensures that any memory buffers have been flushed out to the underlying storage object. This is much like a flush in traditional file systems.

    The method is useful on a direct mode stream when the implementation of the + interface is a wrapper for underlying file system APIs. In this case, would be connected to the file system's flush call.

    +
    + + aa380036 + HRESULT IStream::Commit([In] STGC grfCommitFlags) + IStream::Commit +
    + + +

    The Revert method discards all changes that have been made to a transacted stream since the last + call. On streams open in direct mode and streams using the COM compound file implementation of , this method has no effect.

    +
    +

    This method can return one of these values.

    The stream was successfully reverted to its previous version.

    E_PENDING

    Asynchronous Storage only: Part or all of the stream's data is currently unavailable. For more information see IFillLockBytes and Asynchronous Storage.

    + +

    The Revert method discards changes made to a transacted stream since the last commit operation.

    +
    + + aa380042 + HRESULT IStream::Revert() + IStream::Revert +
    + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT IStream::LockRegion([In] ULARGE_INTEGER libOffset,[In] ULARGE_INTEGER cb,[In] LOCKTYPE dwLockType) + IStream::LockRegion + + + + No documentation. + + No documentation. + No documentation. + No documentation. + No documentation. + + HRESULT IStream::UnlockRegion([In] ULARGE_INTEGER libOffset,[In] ULARGE_INTEGER cb,[In] LOCKTYPE dwLockType) + IStream::UnlockRegion + + + +

    The Stat method retrieves the + structure for this stream.

    +
    + No documentation. + No documentation. + +

    retrieves a reference to the + structure that contains information about this open stream. When this stream is within a structured storage and + IStorage::EnumElements is called, it creates an enumerator object with the + IEnumSTATSTG interface on it, which can be called to enumerate the storages and streams through the + structures associated with each of them.

    +
    + + aa380045 + HRESULT IStream::Stat([Out] STATSTG* pstatstg,[In] STATFLAG grfStatFlag) + IStream::Stat +
    + + +

    The Clone method creates a new stream object with its own seek reference that references the same bytes as the original stream.

    +
    +

    When successful, reference to the location of an reference to the new stream object. If an error occurs, this parameter is null.

    + +

    The Clone method creates a new stream object for accessing the same bytes but using a separate seek reference. The new stream object sees the same data as the source-stream object. Changes written to one object are immediately visible in the other. Range locking is shared between the stream objects.

    The initial setting of the seek reference in the cloned stream instance is the same as the current setting of the seek reference in the original stream at the time of the clone operation.

    +
    + + aa380035 + HRESULT IStream::Clone([Out] IStream** ppstm) + IStream::Clone +
    + + + Copies a specified number of bytes from the current seek pointer in the stream to the current seek pointer in another stream. + + The stream destination. + The number of bytes to copy. + The bytes written. + The number of bytes read from this instance + + + + Gets a com pointer to the underlying object. + + The stream. + A Com pointer + + + +

    The + interface supports simplified sequential access to stream objects. The + interface inherits its + Read and + Write methods from + .

    +
    + + aa380010 + ISequentialStream + ISequentialStream +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Reads a specified number of bytes from the stream object into memory starting at the current read/write location within the stream.

    +
    +

    [in]Points to the buffer into which the stream is read. If an error occurs, this value is null.

    +

    [in]Specifies the number of bytes of data to attempt to read from the stream object.

    +

    [out]Pointer to a location where this method writes the actual number of bytes read from the stream object. You can set this reference to null to indicate that you are not interested in this value. In this case, this method does not provide the actual number of bytes read.

    + + ms713642 + HRESULT ISequentialStream::Read([Out, Buffer] void* pv,[In] unsigned int cb,[Out, Optional] unsigned int* pcbRead) + ISequentialStream::Read +
    + + +

    Writes a specified number of bytes into the stream object starting at the current read/write location within the stream.

    +
    +

    [in] Points to the buffer into which the stream should be written.

    +

    [in] The number of bytes of data to attempt to write into the stream.

    +

    [out] Pointer to a location where this method writes the actual number of bytes written to the stream object. The caller can set this reference to null, in which case this method does not provide the actual number of bytes written.

    + + ms711215 + HRESULT ISequentialStream::Write([In, Buffer] const void* pv,[In] unsigned int cb,[Out, Optional] unsigned int* pcbWritten) + ISequentialStream::Write +
    + + +

    The + interface lets you read and write data to stream objects. Stream objects contain the data in a structured storage object, where storages provide the structure. Simple data can be written directly to a stream but, most frequently, streams are elements nested within a storage object. They are similar to standard files.

    The + interface defines methods similar to the MS-DOS FAT file functions. For example, each stream object has its own access rights and a seek reference. The main difference between a DOS file and a stream object is that in the latter case, streams are opened using an + interface reference rather than a file handle.

    The methods in this interface present your object's data as a contiguous sequence of bytes that you can read or write. There are also methods for committing and reverting changes on streams that are open in transacted mode and methods for restricting access to a range of bytes in the stream.

    Streams can remain open for long periods of time without consuming file-system resources. The IUnknown::Release method is similar to a close function on a file. Once released, the stream object is no longer valid and cannot be used.

    Clients of asynchronous monikers can choose between a data-pull or data-push model for driving an asynchronous + IMoniker::BindToStorage operation and for receiving asynchronous notifications. See + URL Monikers for more information. The following table compares the behavior of asynchronous + and + calls returned in IBindStatusCallback::OnDataAvailable in these two download models:

    +
    + + aa380034 + IStream + IStream +
    + + + Changes the seek pointer to a new location relative to the beginning of the stream, to the end of the stream, or to the current seek pointer. + + The offset. + The origin. + The offset of the seek pointer from the beginning of the stream. + + + + Changes the size of the stream object. + + The new size. + + + + Copies a specified number of bytes from the current seek pointer in the stream to the current seek pointer in another stream. + + The stream destination. + The number of bytes to copy. + The number of bytes written. + The number of bytes read + + + + Commit method ensures that any changes made to a stream object open in transacted mode are reflected in the parent storage. If the stream object is open in direct mode, Commit has no effect other than flushing all memory buffers to the next-level storage object. The COM compound file implementation of streams does not support opening streams in transacted mode. + + The GRF commit flags. + + + + Discards all changes that have been made to a transacted stream since the last call. + + + + + Restricts access to a specified range of bytes in the stream. + + The offset. + The number of bytes to lock. + Type of the dw lock. + + + + Unlocks access to a specified range of bytes in the stream. + + The offset. + The number of bytes to lock. + Type of the dw lock. + + + + Gets the statistics. + + The storage statistics flags. + + + + + Clones this instance. + + + + + +

    The + interface supports simplified sequential access to stream objects. The + interface inherits its + Read and + Write methods from + .

    +
    + + aa380010 + ISequentialStream + ISequentialStream +
    + + + Reads a specified number of bytes from the stream object into memory starting at the current seek pointer. + + The read buffer. + The number of bytes to read. + The actual number of bytes read from the stream object. + + + + Writes a specified number of bytes into the stream object starting at the current seek pointer. + + The buffer. + The number of bytes to read. + The actual number of bytes written to the stream object + + + +

    The + structure contains statistical data about an open storage, stream, or byte-array object. This structure is used in the + IEnumSTATSTG, + ILockBytes, + IStorage, and + interfaces.

    +
    + + aa380319 + STATSTG + STATSTG +
    + + + No documentation. + + + aa380319 + wchar_t* pwcsName + wchar_t pwcsName + + + + No documentation. + + + aa380319 + unsigned int type + unsigned int type + + + + No documentation. + + + aa380319 + ULARGE_INTEGER cbSize + ULARGE_INTEGER cbSize + + + + No documentation. + + + aa380319 + FILETIME mtime + FILETIME mtime + + + + No documentation. + + + aa380319 + FILETIME ctime + FILETIME ctime + + + + No documentation. + + + aa380319 + FILETIME atime + FILETIME atime + + + + No documentation. + + + aa380319 + unsigned int grfMode + unsigned int grfMode + + + + No documentation. + + + aa380319 + unsigned int grfLocksSupported + unsigned int grfLocksSupported + + + + No documentation. + + + aa380319 + GUID clsid + GUID clsid + + + + No documentation. + + + aa380319 + unsigned int grfStateBits + unsigned int grfStateBits + + + + No documentation. + + + aa380319 + unsigned int reserved + unsigned int reserved + + + + Internal FontFileEnumerator Callback + + + + HRESULT ISequentialStream::Read([Out, Buffer] void* pv,[In] unsigned int cb,[Out, Optional] unsigned int* pcbRead) + + + HRESULT ISequentialStream::Write([In, Buffer] const void* pv,[In] unsigned int cb,[Out, Optional] unsigned int* pcbWritten) + + + + Internal FontFileEnumerator callback + + + + + Callbacks to pointer. + + The stream. + + + + HRESULT IStream::Seek([In] LARGE_INTEGER dlibMove,[In] SHARPDX_SEEKORIGIN dwOrigin,[Out, Optional] ULARGE_INTEGER* plibNewPosition) + + + HRESULT IStream::SetSize([In] ULARGE_INTEGER libNewSize) + + + HRESULT IStream::CopyTo([In] IStream* pstm,[In] ULARGE_INTEGER cb,[Out, Optional] ULARGE_INTEGER* pcbRead,[Out, Optional] ULARGE_INTEGER* pcbWritten) + + + HRESULT IStream::Commit([In] STGC grfCommitFlags) + + + HRESULT IStream::Revert() + + + HRESULT IStream::LockRegion([In] ULARGE_INTEGER libOffset,[In] ULARGE_INTEGER cb,[In] LOCKTYPE dwLockType) + + + HRESULT IStream::UnlockRegion([In] ULARGE_INTEGER libOffset,[In] ULARGE_INTEGER cb,[In] LOCKTYPE dwLockType) + + + HRESULT IStream::Stat([Out] STATSTG* pstatstg,[In] STATFLAG grfStatFlag) + + + HRESULT IStream::Clone([Out] IStream** ppstm) + + + + An enumerator using internally a . + + + + + Initializes a new instance of the class. + + The PTR to I enum string. + + + + Converts a win32 error code to a . + + The error code. + A HRESULT code + + + + Converts a win32 error code to a . + + The error code. + A HRESULT code + + + + The namespace contains common enumerations, structures and helper classes for Win32 low-level API. + + + + + Implementation of OLE IPropertyBag2. + + IPropertyBag2 + + + + Initializes a new instance of the class. + + The property bag pointer. + + + + Gets the number of properties. + + + + + Gets the keys. + + + + + Gets the value of the property with this name. + + The name. + Value of the property + + + + Gets the value of the property by using a + + The public type of this property. + The marshaling type of this property. + The property key. + Value of the property + + + + Sets the value of the property with this name + + The name. + The value. + + + + Sets the value of the property by using a + + The public type of this property. + The marshaling type of this property. + The property key. + The value. + + + + Identifies a typed property in a . + + The public type of this property. + The marshaling type of this property. + + + + Initializes a new instance of the class. + + The name. + + + + Gets the name. + + + + + Security attributes. + + SECURITY_ATTRIBUTES + + + + Length. + + + + + Descriptor. + + + + + Gets or sets a value indicating whether [inherit handle]. + + + true if [inherit handle]; otherwise, false. + + + + + Variant COM. + + PROPVARIANT + + + + Gets the type of the element. + + + The type of the element. + + + + + Gets the type. + + + + + Gets or sets the value. + + + The value. + + + + + Type of a simple variant value. + + + + + Type of a variant + + + + + Simple value + + + + + Vector value. + + + + + Array value. + + + + + By reference. + + + + + Reserved value. + + + + + Root IUnknown class to interop with COM object + + + + + Initializes a new instance of the class. + + Pointer to Cpp Object + + + + Initializes a new instance of the class from a IUnknown object. + + Reference to a IUnknown object + + + + Initializes a new instance of the class. + + + + + Query this instance for a particular COM GUID/interface support. + + GUID query interface + output object associated with this GUID, IntPtr.Zero in interface is not supported + If this object doesn't support the interface + ms682521 + IUnknown::QueryInterface + IUnknown::QueryInterface + + + + Query instance for a particular COM GUID/interface support. + + GUID query interface + If this object doesn't support the interface + ms682521 + IUnknown::QueryInterface + IUnknown::QueryInterface + + + + Compares 2 COM objects and return true if the native pointer is the same. + + The left. + The right. + true if the native pointer is the same, false otherwise + + + + Query this instance for a particular COM interface support. + + The type of the COM interface to query + An instance of the queried interface + If this object doesn't support the interface + ms682521 + IUnknown::QueryInterface + IUnknown::QueryInterface + + + + Query this instance for a particular COM interface support. + + The type of the COM interface to query + An instance of the queried interface + If this object doesn't support the interface + ms682521 + IUnknown::QueryInterface + IUnknown::QueryInterface + + + + Queries a managed object for a particular COM interface support (This method is a shortcut to ) + + The type of the COM interface to query + The managed COM object. + An instance of the queried interface + ms682521 + IUnknown::QueryInterface + IUnknown::QueryInterface + + + + Queries a managed object for a particular COM interface support (This method is a shortcut to ) + + The type of the COM interface to query + The managed COM object. + An instance of the queried interface + ms682521 + IUnknown::QueryInterface + IUnknown::QueryInterface + + + + Queries a managed object for a particular COM interface support. + + The type of the COM interface to query + The managed COM object. + An instance of the queried interface + ms682521 + IUnknown::QueryInterface + IUnknown::QueryInterface + + + + Queries a managed object for a particular COM interface support. + + The type of the COM interface to query + A pointer to a COM object. + An instance of the queried interface + ms682521 + IUnknown::QueryInterface + IUnknown::QueryInterface + + + + Query Interface for a particular interface support. + + An instance of the queried interface or null if it is not supported + + ms682521 + IUnknown::QueryInterface + IUnknown::QueryInterface + + + + Performs an explicit conversion from to . + + The native pointer. + + The result of the conversion. + + + + + Query Interface for a particular interface support and attach to the given instance. + + + + + + + Releases unmanaged and - optionally - managed resources + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + ms682317 + IUnknown::Release + IUnknown::Release + + + + Base class for unmanaged callbackable Com object. + + + + + Initializes a new instance of the class. + + Pointer to Cpp Object + + + + Initializes a new instance of the class. + + + + + Implements but it cannot not be set. + This is only used to support for interop with unmanaged callback. + + + + + A COM Interface Callback + + + + + Global configuration. + + + + + Enables or disables object tracking. Default is disabled (false). + + + Object Tracking is used to track COM object lifecycle creation/dispose. When this option is enabled + objects can be tracked using . Using Object tracking has a significant + impact on performance and should be used only while debugging. + + + + + Enables or disables release of on finalizer. Default is disabled (false). + + + + + Enables or disables writing a warning via if a was disposed in the finalizer. Default is enabled (true). + + + + + Throws a when a shader or effect compilation error occurred. Default is enabled (true). + + + + + By default all objects in the process are tracked. + Use this property to track objects per thread. + + + + + Root class for all Cpp interop object. + + + + + The native pointer + + + + + Gets or sets a custom user tag object to associate with this instance.. + + The tag object. + + + + Default constructor. + + Pointer to Cpp Object + + + + Initializes a new instance of the class. + + + + + Get a pointer to the underlying Cpp Object + + + + + Performs an explicit conversion from to . + + The CPP object. + + The result of the conversion. + + + + + Initializes this instance with a pointer from a temporary object and set the pointer of the temporary + object to IntPtr.Zero. + + The instance to get the NativePointer. + + + + Initializes this instance with a pointer from a temporary object and set the pointer of the temporary + object to IntPtr.Zero. + + The instance to get the NativePointer. + + + + Method called when is going to be update. + + + + + Method called when the is updated. + + + + + Instantiate a ComObject from a native pointer. + + The ComObject class that will be returned + The native pointer to a com object. + An instance of T binded to the native pointer + + + + Return the unmanaged C++ pointer from a instance. + + The type of the callback. + The callback. + A pointer to the unmanaged C++ object of the callback + + + + An Interface shadow callback + + + + + Gets the callback. + + + + + Gets the VTBL associated with this shadow instance. + + + + + Initializes the specified shadow instance from a vtbl and a callback. + + The callback. + + + + Default Constructor. + + number of methods to allocate in the VTBL + + + + Gets the pointer to the vtbl. + + + + + Add a method supported by this interface. This method is typically called from inherited constructor. + + the managed delegate method + + + + Provides access to data organized in 3D. + + + + + Initializes a new instance of the struct. + + The datapointer. + The row pitch. + The slice pitch. + + + + Initializes a new instance of the struct. + + The data pointer. + + + + Pointer to the data. + + + + + Gets the number of bytes per row. + + + + + Gets the number of bytes per slice (for a 3D texture, a slice is a 2D image) + + + + + Gets a value indicating whether this instance is empty. + + true if this instance is empty; otherwise, false. + + + + Provides methods to perform fast read/write random access data on a buffer located in an unmanaged memory. + + + This class doesn't validate the position read/write from. It is the responsibility of the client of this class + to verify that access is done within the size of the buffer. + + + + + Creates the specified user buffer. + + Type of the buffer. + The buffer to use as a DataBuffer. + Index inside the buffer in terms of element count (not size in bytes). + True to keep the managed buffer and pin it, false will allocate unmanaged memory and make a copy of it. Default is true. + An instance of a DataBuffer + + + + Initializes a new instance of the class, and allocates a new buffer to use as a backing store. + + The size of the buffer to be allocated, in bytes. + + is less than 1. + + + + Initializes a new instance of the class. + + The data pointer. + + + + Initializes a new instance of the class, using an unmanaged buffer as a backing store. + + A pointer to the buffer to be used as a backing store. + The size of the buffer provided, in bytes. + + + + Releases unmanaged and - optionally - managed resources + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Clears the buffer. + + + + + Gets a single value from the current buffer at the specified position. + + Relative position in bytes from the beginning of the buffer to get the data from. + The type of the value to be read from the buffer. + The value that was read. + + + + Gets a single value from the current buffer at the specified position. + + The type of the value to be read from the buffer. + Relative position in bytes from the beginning of the buffer to get the data from. + The value as out. + The value that was read. + + + + Gets an array of values from a position in the buffer. + + Relative position in bytes from the beginning of the buffer to get the data from. + number of T instance to get from the positionInBytes + The type of the values to be read from the buffer. + An array of values that was read from the current buffer. + + + + Gets a sequence of elements from a position in the buffer into a target buffer. + + Relative position in bytes from the beginning of the buffer to get the data from. + An array of values to be read from the buffer. + The zero-based byte offset in buffer at which to begin storing + the data read from the current buffer. + The number of values to be read from the current buffer. + + + + Sets a single value to the buffer at a specified position. + + The type of the value to be written to the buffer. + Relative position in bytes from the beginning of the buffer to set the data to. + The value to write to the buffer. + + + + Sets a single value to the buffer at a specified position. + + The type of the value to be written to the buffer. + Relative position in bytes from the beginning of the buffer to set the data to. + The value to write to the buffer. + + + + Sets the specified value. + + Relative position in bytes from the beginning of the buffer to set the data to. + The value. + + + + Sets an array of values to a specified position into the buffer. + + Relative position in bytes from the beginning of the buffer to set the data to. + An array of values to be written to the current buffer. + + + + Sets a range of data to a specified position into the buffer. + + Relative position in bytes from the beginning of the buffer to set the data to. + A pointer to the location to start copying from. + The number of bytes to copy from source to the current buffer. + + + + Sets an array of values to a specified position into the buffer. + + The type of the values to be written to the buffer. + Relative position in bytes from the beginning of the buffer to set the data to. + An array of values to be written to the buffer. + The zero-based offset in data at which to begin copying values to the current buffer. + The number of values to be written to the current buffer. If this is zero, + all of the contents will be written. + + + + Gets a pointer to the buffer used as a backing store.. + + An IntPtr to the buffer being used as a backing store. + + + + Gets the length in bytes of the buffer. + + A long value representing the length of the buffer in bytes. + + + + Performs an explicit conversion from to . + + The from value. + The result of the conversion. + + + + Pointer to a native buffer with a specific size. + + + + + Gets an Empty Data Pointer. + + + + + Initializes a new instance of the struct. + + The pointer. + The size. + + + + Initializes a new instance of the struct. + + The pointer. + The size. + + + + Pointer to the buffer. + + + + + Size in bytes of the buffer. + + + + + Gets a value indicating whether this instance is empty (zeroed). + + true if this instance is empty; otherwise, false. + + + + Converts this DataPointer to a . + + An instance of a . + + + + Converts this DataPointer to a . + + An instance of a . + + + + Converts this instance to a read only byte buffer. + + A readonly byte buffer. + + DataPointer is Zero + or + Size cannot be < 0 + + + + + Converts this instance to a read only typed buffer. + + Type of a buffer element + A readonly typed buffer. + DataPointer is Zero + + + + Reads the content of the unmanaged memory location of this instance to the specified buffer. + + Type of a buffer element + The buffer. + The offset in the array to write to. + The number of T element to read from the memory location. + buffer + DataPointer is Zero + buffer;Total buffer size cannot be larger than size of this data pointer + + + + Writes the content of the specified buffer to the unmanaged memory location of this instance. + + Type of a buffer element + The buffer. + buffer + DataPointer is Zero + + + + Writes the content of the specified buffer to the unmanaged memory location of this instance. + + + The buffer to read from. + The offset in the array to read from. + The number of T element to write to the memory location. + buffer + DataPointer is Zero + buffer;Total buffer size cannot be larger than size of this data pointer + + + + Implements the ==. + + The left. + The right. + The result of the operator. + + + + Implements the !=. + + The left. + The right. + The result of the operator. + + + + Provides access to data organized in 2D. + + + + + Initializes a new instance of the class. + + The data pointer. + The pitch. + + + + Pointer to the data. + + + + + Gets the number of bytes per row. + + + + + Provides a stream interface to a buffer located in unmanaged memory. + + + + + Initializes a new instance of the class from a Blob buffer. + + The buffer. + + + + Initializes a new instance of the class, using a managed buffer as a backing store. + + + A managed array to be used as a backing store. + true if reading from the buffer should be allowed; otherwise, false. + true if writing to the buffer should be allowed; otherwise, false. + Index inside the buffer in terms of element count (not size in bytes). + True to keep the managed buffer and pin it, false will allocate unmanaged memory and make a copy of it. Default is true. + + + + + Initializes a new instance of the class, and allocates a new buffer to use as a backing store. + + The size of the buffer to be allocated, in bytes. + + true if reading from the buffer should be allowed; otherwise, false. + + true if writing to the buffer should be allowed; otherwise, false. + + + + Initializes a new instance of the class. + + The data pointer. + + + + Initializes a new instance of the class, using an unmanaged buffer as a backing store. + + A pointer to the buffer to be used as a backing store. + The size of the buffer provided, in bytes. + + true if reading from the buffer should be allowed; otherwise, false. + + true if writing to the buffer should be allowed; otherwise, false. + + + + Releases unmanaged and - optionally - managed resources + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Not supported. + + Always thrown. + + + + Reads a single value from the current stream and advances the current + position within this stream by the number of bytes read. + + + In order to provide faster read/write, this operation doesn't check stream bound. + A client must carefully not read/write above the size of this datastream. + + The type of the value to be read from the stream. + The value that was read. + This stream does not support reading. + + + + + + + Reads a sequence of bytes from the current stream and advances the position + within the stream by the number of bytes read. + + + In order to provide faster read/write, this operation doesn't check stream bound. + A client must carefully not read/write above the size of this datastream. + + An array of values to be read from the stream. + The zero-based byte offset in buffer at which to begin storing + the data read from the current stream. + The maximum number of bytes to be read from the current stream. + The number of bytes read from the stream. + This stream does not support reading. + + + + Reads a sequence of bytes from the current stream and advances the current position within this stream by the number of bytes written. + + An array of bytes. This method copies bytes from to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + + + + Reads an array of values from the current stream, and advances the current position + within this stream by the number of bytes written. + + + In order to provide faster read/write, this operation doesn't check stream bound. + A client must carefully not read/write above the size of this datastream. + + The type of the values to be read from the stream. + An array of values that was read from the current stream. + + + + Reads a sequence of elements from the current stream into a target buffer and + advances the position within the stream by the number of bytes read. + + + In order to provide faster read/write, this operation doesn't check stream bound. + A client must carefully not read/write above the size of this datastream. + + An array of values to be read from the stream. + The zero-based byte offset in buffer at which to begin storing + the data read from the current stream. + The number of values to be read from the current stream. + The number of bytes read from the stream. + This stream does not support reading. + + + + Sets the position within the current stream. + + Attempted to seek outside of the bounds of the stream. + + + + Not supported. + + Always ignored. + Always thrown. + + + + Writes a single value to the stream, and advances the current position + within this stream by the number of bytes written. + + + In order to provide faster read/write, this operation doesn't check stream bound. + A client must carefully not read/write above the size of this datastream. + + The type of the value to be written to the stream. + The value to write to the stream. + The stream does not support writing. + + + + Writes a sequence of bytes to the current stream and advances the current + position within this stream by the number of bytes written. + + + In order to provide faster read/write, this operation doesn't check stream bound. + A client must carefully not read/write above the size of this datastream. + + An array of bytes. This method copies count bytes from buffer to the current stream. + The zero-based byte offset in buffer at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + This stream does not support writing. + + + + When overridden in a derived class, writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + An array of bytes. This method copies bytes from to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + + + + Writes an array of values to the current stream, and advances the current position + within this stream by the number of bytes written. + + + In order to provide faster read/write, this operation doesn't check stream bound. + A client must carefully not read/write above the size of this datastream. + + An array of values to be written to the current stream. + This stream does not support writing. + + + + Writes a range of bytes to the current stream, and advances the current position + within this stream by the number of bytes written. + + + In order to provide faster read/write, this operation doesn't check stream bound. + A client must carefully not read/write above the size of this datastream. + + A pointer to the location to start copying from. + The number of bytes to copy from source to the current stream. + This stream does not support writing. + + + + Writes an array of values to the current stream, and advances the current position + within this stream by the number of bytes written. + + + In order to provide faster read/write, this operation doesn't check stream bound. + A client must carefully not read/write above the size of this datastream. + + The type of the values to be written to the stream. + An array of values to be written to the stream. + The zero-based offset in data at which to begin copying values to the current stream. + The number of values to be written to the current stream. If this is zero, + all of the contents will be written. + This stream does not support writing. + + + + Gets a value indicating whether the current stream supports reading. + + + true if the stream supports reading; otherwise, false. + + + + Gets a value indicating whether the current stream supports seeking. + + Always true. + + + + Gets a value indicating whether the current stream supports writing. + + + true if the stream supports writing; otherwise, false. + + + + Gets the internal pointer to the current stream's backing store. + + An IntPtr to the buffer being used as a backing store. + + + + Gets the length in bytes of the stream. + + A long value representing the length of the stream in bytes. + + + + Gets or sets the position within the current stream. + + The current position within the stream. + Stream Class + + + + Gets the position pointer. + + The position pointer. + + + + Gets the length of the remaining. + + The length of the remaining. + + + + Performs an explicit conversion from to . + + The from value. + The result of the conversion. + + + + The namespace contains classes to help to diagnostic of COM object lifecycles Dispose and Release methods. + + + + + Contains information about a tracked COM object. + + + + + Initializes a new instance of the class. + + The creation time. + The com object to track. + The stack trace. + + + + Gets the time the object was created. + + The creation time. + + + + Gets a weak reference to the tracked object. + + The weak reference to the tracked object. + + + + Gets the stack trace when the track object was created. + + The stack trace. + + + + Gets a value indicating whether the tracked object is alive. + + true if tracked object is alive; otherwise, false. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Event args for used by . + + + + + The object being tracked/untracked. + + + + + Initializes a new instance of the class. + + The o. + + + + Track all allocated objects. + + + + + Occurs when a ComObject is tracked. + + + + + Occurs when a ComObject is untracked. + + + + + Function which provides stack trace for object tracking. + + + + + Gets default stack trace. + + + + + Tracks the specified COM object. + + The COM object. + + + + Finds a list of object reference from a specified COM object pointer. + + The COM object pointer. + A list of object reference + + + + Finds the object reference for a specific COM object. + + The COM object. + An object reference + + + + Untracks the specified COM object. + + The COM object. + + + + Reports all COM object that are active and not yet disposed. + + + + + Reports all COM object that are active and not yet disposed. + + + + +

    This interface is used to return arbitrary length data.

    +
    + +

    An is obtained by calling D3D10CreateBlob.

    The ID3DBlob interface is type defined in the D3DCommon.h header file as a interface, which is fully defined in the D3DCommon.h header file. ID3DBlob is version neutral and can be used in code for any Direct3D version.

    Blobs can be used as a data buffer, storing vertex, adjacency, and material information during mesh optimization and loading operations. Also, these objects are used to return object code and error messages in APIs that compile vertex, geometry and pixel shaders.

    +
    + + bb173507 + ID3D10Blob + ID3D10Blob +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Get a reference to the data.

    +
    + + bb173508 + GetBufferPointer + GetBufferPointer + void* ID3D10Blob::GetBufferPointer() +
    + + +

    Get the size.

    +
    + + bb173509 + GetBufferSize + GetBufferSize + SIZE_T ID3D10Blob::GetBufferSize() +
    + + +

    Get a reference to the data.

    +
    +

    Returns a reference.

    + + bb173508 + void* ID3D10Blob::GetBufferPointer() + ID3D10Blob::GetBufferPointer +
    + + +

    Get the size.

    +
    +

    The size of the data, in bytes.

    + + bb173509 + SIZE_T ID3D10Blob::GetBufferSize() + ID3D10Blob::GetBufferSize +
    + + + The namespace contains enumerations and structures shared by , and assemblies. + + + + +

    Defines a shader macro.

    +
    + +

    You can use shader macros in your shaders. The structure defines a single shader macro as shown in the following example:

      Shader_Macros[] = { "zero", "0", null, null };	
    +            

    The following shader or effect creation functions take an array of shader macros as an input parameter:

    • D3D10CompileShader
    • D3DX10CreateEffectFromFile
    • D3DX10PreprocessShaderFromFile
    • D3DX11CreateAsyncShaderPreprocessProcessor
    +
    + + ff728732 + D3D_SHADER_MACRO + D3D_SHADER_MACRO +
    + + + Initializes a new instance of the struct. + + + The name. + + + The definition. + + + + +

    The macro name.

    +
    + + ff728732 + const char* Name + char Name +
    + + +

    The macro definition.

    +
    + + ff728732 + const char* Definition + char Definition +
    + + +

    Driver type options.

    +
    + +

    The driver type is required when calling or D3D11CreateDeviceAndSwapChain.

    +
    + + ff476328 + D3D_DRIVER_TYPE + D3D_DRIVER_TYPE +
    + + +

    The driver type is unknown.

    +
    + + ff476328 + D3D_DRIVER_TYPE_UNKNOWN + D3D_DRIVER_TYPE_UNKNOWN +
    + + +

    A hardware driver, which implements Direct3D features in hardware. This is the primary driver that you should use in your Direct3D applications because it provides the best performance. A hardware driver uses hardware acceleration (on supported hardware) but can also use software for parts of the pipeline that are not supported in hardware. This driver type is often referred to as a hardware abstraction layer or HAL.

    +
    + + ff476328 + D3D_DRIVER_TYPE_HARDWARE + D3D_DRIVER_TYPE_HARDWARE +
    + + +

    A reference driver, which is a software implementation that supports every Direct3D feature. A reference driver is designed for accuracy rather than speed and as a result is slow but accurate. The rasterizer portion of the driver does make use of special CPU instructions whenever it can, but it is not intended for retail applications; use it only for feature testing, demonstration of functionality, debugging, or verifying bugs in other drivers. The reference device for this driver is installed by the Windows SDK 8.0 or later and is intended only as a debug aid for development purposes. This driver may be referred to as a REF driver, a reference driver, or a reference rasterizer.

    Note??When you use the REF driver in Windows Store apps, the REF driver renders correctly but doesn't display any output on the screen. To verify bugs in hardware drivers for Windows Store apps, use for the WARP driver instead. ?
    +
    + + ff476328 + D3D_DRIVER_TYPE_REFERENCE + D3D_DRIVER_TYPE_REFERENCE +
    + + +

    A null driver, which is a reference driver without render capability. This driver is commonly used for debugging non-rendering API calls, it is not appropriate for retail applications. This driver is installed by the DirectX SDK.

    +
    + + ff476328 + D3D_DRIVER_TYPE_NULL + D3D_DRIVER_TYPE_NULL +
    + + +

    A software driver, which is a driver implemented completely in software. The software implementation is not intended for a high-performance application due to its very slow performance.

    +
    + + ff476328 + D3D_DRIVER_TYPE_SOFTWARE + D3D_DRIVER_TYPE_SOFTWARE +
    + + +

    A WARP driver, which is a high-performance software rasterizer. The rasterizer supports feature levels 9_1 through level 10_1 with a high performance software implementation. For information about limitations creating a WARP device on certain feature levels, see Limitations Creating WARP and Reference Devices. For more information about using a WARP driver, see Windows Advanced Rasterization Platform (WARP) In-Depth Guide.

    Note??The WARP driver that Windows?8 includes supports feature levels 9_1 through level 11_1. ? Note??The WARP driver that Windows?8.1 includes fully supports feature level 11_1, including tiled resources, , shared BCn surfaces, minblend, and map default. ?
    +
    + + ff476328 + D3D_DRIVER_TYPE_WARP + D3D_DRIVER_TYPE_WARP +
    + + +

    Describes the set of features targeted by a Direct3D device.

    +
    + +

    For an overview of the capabilities of each feature level, see Overview For Each Feature Level.

    For information about limitations creating non-hardware-type devices on certain feature levels, see Limitations Creating WARP and Reference Devices.

    +
    + + ff476329 + D3D_FEATURE_LEVEL + D3D_FEATURE_LEVEL +
    + + +

    Targets features supported by feature level 9.1 including shader model 2.

    +
    + + ff476329 + D3D_FEATURE_LEVEL_9_1 + D3D_FEATURE_LEVEL_9_1 +
    + + +

    Targets features supported by feature level 9.2 including shader model 2.

    +
    + + ff476329 + D3D_FEATURE_LEVEL_9_2 + D3D_FEATURE_LEVEL_9_2 +
    + + +

    Targets features supported by feature level 9.3 including shader model 2.0b.

    +
    + + ff476329 + D3D_FEATURE_LEVEL_9_3 + D3D_FEATURE_LEVEL_9_3 +
    + + +

    Targets features supported by Direct3D 10.0 including shader model 4.

    +
    + + ff476329 + D3D_FEATURE_LEVEL_10_0 + D3D_FEATURE_LEVEL_10_0 +
    + + +

    Targets features supported by Direct3D 10.1 including shader model 4.

    +
    + + ff476329 + D3D_FEATURE_LEVEL_10_1 + D3D_FEATURE_LEVEL_10_1 +
    + + +

    Targets features supported by Direct3D 11.0 including shader model 5.

    +
    + + ff476329 + D3D_FEATURE_LEVEL_11_0 + D3D_FEATURE_LEVEL_11_0 +
    + + +

    Targets features supported by Direct3D 11.1 including shader model 5 and logical blend operations. This feature level requires a display driver that is at least implemented to WDDM for Windows?8 (WDDM 1.2).

    +
    + + ff476329 + D3D_FEATURE_LEVEL_11_1 + D3D_FEATURE_LEVEL_11_1 +
    + + +

    Targets features supported by Direct3D 12.0 including shader model 5.

    +
    + + ff476329 + D3D_FEATURE_LEVEL_12_0 + D3D_FEATURE_LEVEL_12_0 +
    + + +

    Targets features supported by Direct3D 12.1 including shader model 5.

    +
    + + ff476329 + D3D_FEATURE_LEVEL_12_1 + D3D_FEATURE_LEVEL_12_1 +
    + + +

    Specifies interpolation mode, which affects how values are calculated during rasterization.

    +
    + + dn280473 + D3D_INTERPOLATION_MODE + D3D_INTERPOLATION_MODE +
    + + +

    The interpolation mode is undefined.

    +
    + + dn280473 + D3D_INTERPOLATION_UNDEFINED + D3D_INTERPOLATION_UNDEFINED +
    + + +

    Don't interpolate between register values.

    +
    + + dn280473 + D3D_INTERPOLATION_CONSTANT + D3D_INTERPOLATION_CONSTANT +
    + + +

    Interpolate linearly between register values.

    +
    + + dn280473 + D3D_INTERPOLATION_LINEAR + D3D_INTERPOLATION_LINEAR +
    + + +

    Interpolate linearly between register values but centroid clamped when multisampling.

    +
    + + dn280473 + D3D_INTERPOLATION_LINEAR_CENTROID + D3D_INTERPOLATION_LINEAR_CENTROID +
    + + +

    Interpolate linearly between register values but with no perspective correction.

    +
    + + dn280473 + D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE + D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE +
    + + +

    Interpolate linearly between register values but with no perspective correction and centroid clamped when multisampling.

    +
    + + dn280473 + D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID + D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_CENTROID +
    + + +

    Interpolate linearly between register values but sample clamped when multisampling.

    +
    + + dn280473 + D3D_INTERPOLATION_LINEAR_SAMPLE + D3D_INTERPOLATION_LINEAR_SAMPLE +
    + + +

    Interpolate linearly between register values but with no perspective correction and sample clamped when multisampling.

    +
    + + dn280473 + D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE + D3D_INTERPOLATION_LINEAR_NOPERSPECTIVE_SAMPLE +
    + + +

    Values that indicate the minimum desired interpolation precision.

    +
    + +

    For more info, see Scalar Types and Using HLSL minimum precision.

    +
    + + jj247572 + D3D_MIN_PRECISION + D3D_MIN_PRECISION +
    + + +

    Default minimum precision, which is 32-bit precision.

    +
    + + jj247572 + D3D_MIN_PRECISION_DEFAULT + D3D_MIN_PRECISION_DEFAULT +
    + + +

    Minimum precision is min16float, which is 16-bit floating point.

    +
    + + jj247572 + D3D_MIN_PRECISION_FLOAT_16 + D3D_MIN_PRECISION_FLOAT_16 +
    + + +

    Minimum precision is min10float, which is 10-bit floating point.

    +
    + + jj247572 + D3D_MIN_PRECISION_FLOAT_2_8 + D3D_MIN_PRECISION_FLOAT_2_8 +
    + + +

    Reserved

    +
    + + jj247572 + D3D_MIN_PRECISION_RESERVED + D3D_MIN_PRECISION_RESERVED +
    + + +

    Minimum precision is min16int, which is 16-bit signed integer.

    +
    + + jj247572 + D3D_MIN_PRECISION_SINT_16 + D3D_MIN_PRECISION_SINT_16 +
    + + +

    Minimum precision is min16uint, which is 16-bit unsigned integer.

    +
    + + jj247572 + D3D_MIN_PRECISION_UINT_16 + D3D_MIN_PRECISION_UINT_16 +
    + + +

    Minimum precision is any 16-bit value.

    +
    + + jj247572 + D3D_MIN_PRECISION_ANY_16 + D3D_MIN_PRECISION_ANY_16 +
    + + +

    Minimum precision is any 10-bit value.

    +
    + + jj247572 + D3D_MIN_PRECISION_ANY_10 + D3D_MIN_PRECISION_ANY_10 +
    + + +

    Values that indicate how the pipeline interprets vertex data that is bound to the input-assembler stage. These primitive topology values determine how the vertex data is rendered on screen.

    +
    + +

    Use the method and a value from to bind a primitive topology to the input-assembler stage. Use the method to retrieve the primitive topology for the input-assembler stage.

    The following diagram shows the various primitive types for a geometry shader object.

    +
    + + ff728726 + D3D_PRIMITIVE_TOPOLOGY + D3D_PRIMITIVE_TOPOLOGY +
    + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_UNDEFINED + D3D_PRIMITIVE_TOPOLOGY_UNDEFINED + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_POINTLIST + D3D_PRIMITIVE_TOPOLOGY_POINTLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_LINELIST + D3D_PRIMITIVE_TOPOLOGY_LINELIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_LINESTRIP + D3D_PRIMITIVE_TOPOLOGY_LINESTRIP + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST + D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP + D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ + D3D_PRIMITIVE_TOPOLOGY_LINELIST_ADJ + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ + D3D_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ + D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ + D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_1_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_2_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_4_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_6_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_7_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_8_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_9_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_10_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_11_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_12_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_13_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_14_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_15_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_16_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_17_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_18_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_19_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_20_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_21_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_22_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_23_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_24_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_25_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_26_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_27_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_28_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_29_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_30_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_31_CONTROL_POINT_PATCHLIST + + + + No documentation. + + + ff728726 + D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST + D3D_PRIMITIVE_TOPOLOGY_32_CONTROL_POINT_PATCHLIST + + + +

    Values that identify the type of resource to be viewed as a shader resource.

    +
    + +

    A -typed value is specified in the ViewDimension member of the structure or the Dimension member of the structure.

    +
    + + ff728736 + D3D_SRV_DIMENSION + D3D_SRV_DIMENSION +
    + + +

    The type is unknown.

    +
    + + ff728736 + D3D_SRV_DIMENSION_UNKNOWN + D3D_SRV_DIMENSION_UNKNOWN +
    + + +

    The resource is a buffer.

    +
    + + ff728736 + D3D_SRV_DIMENSION_BUFFER + D3D_SRV_DIMENSION_BUFFER +
    + + +

    The resource is a 1D texture.

    +
    + + ff728736 + D3D_SRV_DIMENSION_TEXTURE1D + D3D_SRV_DIMENSION_TEXTURE1D +
    + + +

    The resource is an array of 1D textures.

    +
    + + ff728736 + D3D_SRV_DIMENSION_TEXTURE1DARRAY + D3D_SRV_DIMENSION_TEXTURE1DARRAY +
    + + +

    The resource is a 2D texture.

    +
    + + ff728736 + D3D_SRV_DIMENSION_TEXTURE2D + D3D_SRV_DIMENSION_TEXTURE2D +
    + + +

    The resource is an array of 2D textures.

    +
    + + ff728736 + D3D_SRV_DIMENSION_TEXTURE2DARRAY + D3D_SRV_DIMENSION_TEXTURE2DARRAY +
    + + +

    The resource is a multisampling 2D texture.

    +
    + + ff728736 + D3D_SRV_DIMENSION_TEXTURE2DMS + D3D_SRV_DIMENSION_TEXTURE2DMS +
    + + +

    The resource is an array of multisampling 2D textures.

    +
    + + ff728736 + D3D_SRV_DIMENSION_TEXTURE2DMSARRAY + D3D_SRV_DIMENSION_TEXTURE2DMSARRAY +
    + + +

    The resource is a 3D texture.

    +
    + + ff728736 + D3D_SRV_DIMENSION_TEXTURE3D + D3D_SRV_DIMENSION_TEXTURE3D +
    + + +

    The resource is a cube texture.

    +
    + + ff728736 + D3D_SRV_DIMENSION_TEXTURECUBE + D3D_SRV_DIMENSION_TEXTURECUBE +
    + + +

    The resource is an array of cube textures.

    +
    + + ff728736 + D3D_SRV_DIMENSION_TEXTURECUBEARRAY + D3D_SRV_DIMENSION_TEXTURECUBEARRAY +
    + + +

    The resource is a raw buffer. For more info about raw viewing of buffers, see Raw Views of Buffers.

    +
    + + ff728736 + D3D_SRV_DIMENSION_BUFFEREX + D3D_SRV_DIMENSION_BUFFEREX +
    + + + Functions + + + + + Constant DebugObjectName. + WKPDID_D3DDebugObjectName + + + + No documentation. + + + ID3DDestructionNotifier + ID3DDestructionNotifier + + + +

    A multithread interface accesses multithread settings and can only be used if the thread-safe layer is turned on.

    +
    + +

    This interface is obtained by querying it from the ID3D10Device Interface using IUnknown::QueryInterface.

    +
    + + bb173816 + ID3D10Multithread + ID3D10Multithread +
    + + + Initializes a new instance of the class. + + The native pointer. + + + + Performs an explicit conversion from to . (This method is a shortcut to ) + + The native pointer. + + The result of the conversion. + + + + +

    Enter a device's critical section.

    +
    + +

    Entering a device's critical section prevents other threads from simultaneously calling that device's methods (if multithread protection is set to true), calling DXGI methods, and calling the methods of all resource, view, shader, state, and asynchronous interfaces.

    This function should be used in multithreaded applications when there is a series of graphics commands that must happen in order. This function is typically called at the beginning of the series of graphics commands, and is typically called after those graphics commands.

    +
    + + bb173817 + void ID3D10Multithread::Enter() + ID3D10Multithread::Enter +
    + + +

    Leave a device's critical section.

    +
    + +

    This function is typically used in multithreaded applications when there is a series of graphics commands that must happen in order. is typically called at the beginning of a series of graphics commands, and this function is typically called after those graphics commands.

    +
    + + bb173819 + void ID3D10Multithread::Leave() + ID3D10Multithread::Leave +
    + + +

    Turn multithreading on or off.

    +
    +

    True to turn multithreading on, false to turn it off.

    +

    True if multithreading was turned on prior to calling this method, false otherwise.

    + + bb173820 + BOOL ID3D10Multithread::SetMultithreadProtected([In] BOOL bMTProtect) + ID3D10Multithread::SetMultithreadProtected +
    + + +

    Find out if multithreading is turned on or not.

    +
    +

    Whether or not multithreading is turned on. True means on, false means off.

    + + bb173818 + BOOL ID3D10Multithread::GetMultithreadProtected() + ID3D10Multithread::GetMultithreadProtected +
    + + + A compilation exception. + + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The error code. + The message. + + + + Generic class to hold a shader compilation results. + + Type of the class containing the generated bytecode. + + + + Initializes a new instance of the class. + + The bytecode. + Result code from compilation. + The message. + + + + Gets the Shader bytecode. + + + + + Gets the result code from the compilation. + + + + + Gets a value indicating whether this instance has errors. + + + true if this instance has errors; otherwise, false. + + + + + Gets the message. + + + Message are warning or error messages. + + + + + + + + Base class for a class. + + + + + Occurs when this instance is starting to be disposed. + + + + + Occurs when this instance is fully disposed. + + + + + Releases unmanaged resources and performs other cleanup operations before the + is reclaimed by garbage collection. + + + + + Gets a value indicating whether this instance is disposed. + + + true if this instance is disposed; otherwise, false. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Releases unmanaged and - optionally - managed resources + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + A class to dispose instances and allocated unmanaged memory. + + + + + Gets the number of elements to dispose. + + The number of elements to dispose. + + + + Disposes all object collected by this class and clear the list. The collector can still be used for collecting. + + + To completely dispose this instance and avoid further dispose, use method instead. + + + + + Disposes of object resources. + + If true, managed resources should be + disposed of in addition to unmanaged resources. + + + + Adds a object or a allocated using to the list of the objects to dispose. + + To dispose. + If toDispose argument is not IDisposable or a valid memory pointer allocated by + + + + Dispose a disposable object and set the reference to null. Removes this object from this instance.. + + Object to dispose. + + + + Removes a disposable object to the list of the objects to dispose. + + + To dispose. + + + + Event args which can tell whether calling Dispose with dispoing flag or not. + + + + + DisposeEventArgs with Disposing flag set to true. + + + + + DisposeEventArgs with Disposing flag set to false. + + + + + True when disposing, otherwise false. + + + + + Initializes a new instance of a DisposeEventArgs class. + + True when disposing, otherwise false. + + + + Gets event args base on disposing parameter. + + True when disposing, otherwise false. + DisposeEventArgs object based on disposing parameter. + + + + FunctionCallback + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + +

    The enumeration defines constants that indicate whether an audio stream will run in shared mode or in exclusive mode.

    +
    + +

    The IAudioClient::Initialize and IAudioClient::IsFormatSupported methods use the constants defined in the enumeration.

    In shared mode, the client can share the audio endpoint device with clients that run in other user-mode processes. The audio engine always supports formats for client streams that match the engine's mix format. In addition, the audio engine might support another format if the Windows audio service can insert system effects into the client stream to convert the client format to the mix format.

    In exclusive mode, the Windows audio service attempts to establish a connection in which the client has exclusive access to the audio endpoint device. In this mode, the audio engine inserts no system effects into the local stream to aid in the creation of the connection point. Either the audio device can handle the specified format directly or the method fails.

    For more information about shared-mode and exclusive-mode streams, see User-Mode Audio Components.

    +
    + + dd370790 + AUDCLNT_SHAREMODE + AUDCLNT_SHAREMODE +
    + + +

    The audio stream will run in shared mode. For more information, see Remarks.

    +
    + + dd370790 + AUDCLNT_SHAREMODE_SHARED + AUDCLNT_SHAREMODE_SHARED +
    + + +

    The audio stream will run in exclusive mode. For more information, see Remarks.

    +
    + + dd370790 + AUDCLNT_SHAREMODE_EXCLUSIVE + AUDCLNT_SHAREMODE_EXCLUSIVE +
    + + +

    The AudioSessionState enumeration defines constants that indicate the current state of an audio session.

    +
    + +

    When a client opens a session by assigning the first stream to the session (by calling the IAudioClient::Initialize method), the initial session state is inactive. The session state changes from inactive to active when a stream in the session begins running (because the client has called the IAudioClient::Start method). The session changes from active to inactive when the client stops the last running stream in the session (by calling the IAudioClient::Stop method). The session state changes to expired when the client destroys the last stream in the session by releasing all references to the stream object.

    The system volume-control program, Sndvol, displays volume controls for both active and inactive sessions. Sndvol stops displaying the volume control for a session when the session state changes to expired. For more information about Sndvol, see Audio Sessions.

    The IAudioSessionControl::GetState and IAudioSessionEvents::OnStateChanged methods use the constants defined in the AudioSessionState enumeration.

    For more information about session states, see Audio Sessions.

    +
    + + dd370792 + AudioSessionState + AudioSessionState +
    + + +

    The audio session is inactive. (It contains at least one stream, but none of the streams in the session is currently running.)

    +
    + + dd370792 + AudioSessionStateInactive + AudioSessionStateInactive +
    + + +

    The audio session is active. (At least one of the streams in the session is running.)

    +
    + + dd370792 + AudioSessionStateActive + AudioSessionStateActive +
    + + +

    The audio session has expired. (It contains no streams.)

    +
    + + dd370792 + AudioSessionStateExpired + AudioSessionStateExpired +
    + + +

    Specifies the category of an audio stream.

    +
    + +

    Note that only a subset of the audio stream categories are valid for certain stream types.

    Stream typeValid categories
    Render streamAll categories are valid.
    Capture streamAudioCategory_Communications, AudioCategory_Speech, AudioCategory_Other
    Loopback streamAudioCategory_Other

    ?

    Games should categorize their music streams as AudioCategory_GameMedia so that game music mutes automatically if another application plays music in the background. Music or video applications should categorize their streams as AudioCategory_Media or AudioCategory_Movie so they will take priority over AudioCategory_GameMedia streams.

    The values AudioCategory_ForegroundOnlyMedia and AudioCategory_BackgroundCapableMedia are deprecated. For Windows Store apps, these values will continue to function the same when running on Windows?10 as they did on Windows?8.1. Attempting to use these values in a Universal Windows Platform (UWP) app, will result in compilation errors and an exception at runtime. Using these values in a Windows desktop application built with the Windows?10 SDK the will result in a compilation error.

    +
    + + hh404178 + AUDIO_STREAM_CATEGORY + AUDIO_STREAM_CATEGORY +
    + + +

    Other audio stream.

    +
    + + hh404178 + AudioCategory_Other + AudioCategory_Other +
    + + +

    Media that will only stream when the app is in the foreground. This enumeration value has been deprecated. For more information, see the Remarks section.

    +
    + + hh404178 + AudioCategory_ForegroundOnlyMedia + AudioCategory_ForegroundOnlyMedia +
    + + +

    Real-time communications, such as VOIP or chat.

    +
    + + hh404178 + AudioCategory_Communications + AudioCategory_Communications +
    + + +

    Alert sounds.

    +
    + + hh404178 + AudioCategory_Alerts + AudioCategory_Alerts +
    + + +

    Sound effects.

    +
    + + hh404178 + AudioCategory_SoundEffects + AudioCategory_SoundEffects +
    + + +

    Game sound effects.

    +
    + + hh404178 + AudioCategory_GameEffects + AudioCategory_GameEffects +
    + + +

    Background audio for games.

    +
    + + hh404178 + AudioCategory_GameMedia + AudioCategory_GameMedia +
    + + +

    Game chat audio. Similar to AudioCategory_Communications except that AudioCategory_GameChat will not attenuate other streams.

    +
    + + hh404178 + AudioCategory_GameChat + AudioCategory_GameChat +
    + + +

    Speech.

    +
    + + hh404178 + AudioCategory_Speech + AudioCategory_Speech +
    + + +

    Stream that includes audio with dialog.

    +
    + + hh404178 + AudioCategory_Movie + AudioCategory_Movie +
    + + +

    Stream that includes audio without dialog.

    +
    + + hh404178 + AudioCategory_Media + AudioCategory_Media +
    + + + No documentation. + + + SPEAKER_FLAGS + SPEAKER_FLAGS + + + + No documentation. + + + SPEAKER_FRONT_LEFT + SPEAKER_FRONT_LEFT + + + + No documentation. + + + SPEAKER_FRONT_RIGHT + SPEAKER_FRONT_RIGHT + + + + No documentation. + + + SPEAKER_FRONT_CENTER + SPEAKER_FRONT_CENTER + + + + No documentation. + + + SPEAKER_LOW_FREQUENCY + SPEAKER_LOW_FREQUENCY + + + + No documentation. + + + SPEAKER_BACK_LEFT + SPEAKER_BACK_LEFT + + + + No documentation. + + + SPEAKER_BACK_RIGHT + SPEAKER_BACK_RIGHT + + + + No documentation. + + + SPEAKER_FRONT_LEFT_OF_CENTER + SPEAKER_FRONT_LEFT_OF_CENTER + + + + No documentation. + + + SPEAKER_FRONT_RIGHT_OF_CENTER + SPEAKER_FRONT_RIGHT_OF_CENTER + + + + No documentation. + + + SPEAKER_BACK_CENTER + SPEAKER_BACK_CENTER + + + + No documentation. + + + SPEAKER_SIDE_LEFT + SPEAKER_SIDE_LEFT + + + + No documentation. + + + SPEAKER_SIDE_RIGHT + SPEAKER_SIDE_RIGHT + + + + No documentation. + + + SPEAKER_TOP_CENTER + SPEAKER_TOP_CENTER + + + + No documentation. + + + SPEAKER_TOP_FRONT_LEFT + SPEAKER_TOP_FRONT_LEFT + + + + No documentation. + + + SPEAKER_TOP_FRONT_CENTER + SPEAKER_TOP_FRONT_CENTER + + + + No documentation. + + + SPEAKER_TOP_FRONT_RIGHT + SPEAKER_TOP_FRONT_RIGHT + + + + No documentation. + + + SPEAKER_TOP_BACK_LEFT + SPEAKER_TOP_BACK_LEFT + + + + No documentation. + + + SPEAKER_TOP_BACK_CENTER + SPEAKER_TOP_BACK_CENTER + + + + No documentation. + + + SPEAKER_TOP_BACK_RIGHT + SPEAKER_TOP_BACK_RIGHT + + + + No documentation. + + + SPEAKER_RESERVED + SPEAKER_RESERVED + + + + No documentation. + + + SPEAKER_ALL + SPEAKER_ALL + + + + No documentation. + + + SPEAKER_MONO + SPEAKER_MONO + + + + No documentation. + + + SPEAKER_STEREO + SPEAKER_STEREO + + + + No documentation. + + + SPEAKER_2POINT1 + SPEAKER_2POINT1 + + + + No documentation. + + + SPEAKER_SURROUND + SPEAKER_SURROUND + + + + No documentation. + + + SPEAKER_QUAD + SPEAKER_QUAD + + + + No documentation. + + + SPEAKER_4POINT1 + SPEAKER_4POINT1 + + + + No documentation. + + + SPEAKER_5POINT1 + SPEAKER_5POINT1 + + + + No documentation. + + + SPEAKER_7POINT1 + SPEAKER_7POINT1 + + + + No documentation. + + + SPEAKER_5POINT1_SURROUND + SPEAKER_5POINT1_SURROUND + + + + No documentation. + + + SPEAKER_7POINT1_SURROUND + SPEAKER_7POINT1_SURROUND + + + + None. + + + None + None + + + + No documentation. + + + HID_USAGE_ID + HID_USAGE_ID + + + + No documentation. + + + HID_USAGE_GENERIC_POINTER + HID_USAGE_GENERIC_POINTER + + + + No documentation. + + + HID_USAGE_GENERIC_MOUSE + HID_USAGE_GENERIC_MOUSE + + + + No documentation. + + + HID_USAGE_GENERIC_JOYSTICK + HID_USAGE_GENERIC_JOYSTICK + + + + No documentation. + + + HID_USAGE_GENERIC_GAMEPAD + HID_USAGE_GENERIC_GAMEPAD + + + + No documentation. + + + HID_USAGE_GENERIC_KEYBOARD + HID_USAGE_GENERIC_KEYBOARD + + + + No documentation. + + + HID_USAGE_GENERIC_KEYPAD + HID_USAGE_GENERIC_KEYPAD + + + + No documentation. + + + HID_USAGE_GENERIC_MULTI_AXIS_CONTROLLER + HID_USAGE_GENERIC_MULTI_AXIS_CONTROLLER + + + + No documentation. + + + HID_USAGE_GENERIC_TABLET_PC_SYSTEM_CTL + HID_USAGE_GENERIC_TABLET_PC_SYSTEM_CTL + + + + No documentation. + + + HID_USAGE_GENERIC_PORTABLE_DEVICE_CONTROL + HID_USAGE_GENERIC_PORTABLE_DEVICE_CONTROL + + + + No documentation. + + + HID_USAGE_GENERIC_INTERACTIVE_CONTROL + HID_USAGE_GENERIC_INTERACTIVE_CONTROL + + + + No documentation. + + + HID_USAGE_GENERIC_COUNTED_BUFFER + HID_USAGE_GENERIC_COUNTED_BUFFER + + + + No documentation. + + + HID_USAGE_GENERIC_SYSTEM_CTL + HID_USAGE_GENERIC_SYSTEM_CTL + + + + No documentation. + + + HID_USAGE_GENERIC_X + HID_USAGE_GENERIC_X + + + + No documentation. + + + HID_USAGE_GENERIC_Y + HID_USAGE_GENERIC_Y + + + + No documentation. + + + HID_USAGE_GENERIC_Z + HID_USAGE_GENERIC_Z + + + + No documentation. + + + HID_USAGE_GENERIC_RX + HID_USAGE_GENERIC_RX + + + + No documentation. + + + HID_USAGE_GENERIC_RY + HID_USAGE_GENERIC_RY + + + + No documentation. + + + HID_USAGE_GENERIC_RZ + HID_USAGE_GENERIC_RZ + + + + No documentation. + + + HID_USAGE_GENERIC_SLIDER + HID_USAGE_GENERIC_SLIDER + + + + No documentation. + + + HID_USAGE_GENERIC_DIAL + HID_USAGE_GENERIC_DIAL + + + + No documentation. + + + HID_USAGE_GENERIC_WHEEL + HID_USAGE_GENERIC_WHEEL + + + + No documentation. + + + HID_USAGE_GENERIC_HATSWITCH + HID_USAGE_GENERIC_HATSWITCH + + + + No documentation. + + + HID_USAGE_GENERIC_BYTE_COUNT + HID_USAGE_GENERIC_BYTE_COUNT + + + + No documentation. + + + HID_USAGE_GENERIC_MOTION_WAKEUP + HID_USAGE_GENERIC_MOTION_WAKEUP + + + + No documentation. + + + HID_USAGE_GENERIC_START + HID_USAGE_GENERIC_START + + + + No documentation. + + + HID_USAGE_GENERIC_SELECT + HID_USAGE_GENERIC_SELECT + + + + No documentation. + + + HID_USAGE_GENERIC_VX + HID_USAGE_GENERIC_VX + + + + No documentation. + + + HID_USAGE_GENERIC_VY + HID_USAGE_GENERIC_VY + + + + No documentation. + + + HID_USAGE_GENERIC_VZ + HID_USAGE_GENERIC_VZ + + + + No documentation. + + + HID_USAGE_GENERIC_VBRX + HID_USAGE_GENERIC_VBRX + + + + No documentation. + + + HID_USAGE_GENERIC_VBRY + HID_USAGE_GENERIC_VBRY + + + + No documentation. + + + HID_USAGE_GENERIC_VBRZ + HID_USAGE_GENERIC_VBRZ + + + + No documentation. + + + HID_USAGE_GENERIC_VNO + HID_USAGE_GENERIC_VNO + + + + No documentation. + + + HID_USAGE_GENERIC_FEATURE_NOTIFICATION + HID_USAGE_GENERIC_FEATURE_NOTIFICATION + + + + No documentation. + + + HID_USAGE_GENERIC_RESOLUTION_MULTIPLIER + HID_USAGE_GENERIC_RESOLUTION_MULTIPLIER + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_POWER + HID_USAGE_GENERIC_SYSCTL_POWER + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_SLEEP + HID_USAGE_GENERIC_SYSCTL_SLEEP + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_WAKE + HID_USAGE_GENERIC_SYSCTL_WAKE + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU + HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_MAIN_MENU + HID_USAGE_GENERIC_SYSCTL_MAIN_MENU + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_APP_MENU + HID_USAGE_GENERIC_SYSCTL_APP_MENU + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_HELP_MENU + HID_USAGE_GENERIC_SYSCTL_HELP_MENU + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_MENU_EXIT + HID_USAGE_GENERIC_SYSCTL_MENU_EXIT + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_MENU_SELECT + HID_USAGE_GENERIC_SYSCTL_MENU_SELECT + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT + HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_MENU_LEFT + HID_USAGE_GENERIC_SYSCTL_MENU_LEFT + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_MENU_UP + HID_USAGE_GENERIC_SYSCTL_MENU_UP + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_MENU_DOWN + HID_USAGE_GENERIC_SYSCTL_MENU_DOWN + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_COLD_RESTART + HID_USAGE_GENERIC_SYSCTL_COLD_RESTART + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_WARM_RESTART + HID_USAGE_GENERIC_SYSCTL_WARM_RESTART + + + + No documentation. + + + HID_USAGE_GENERIC_DPAD_UP + HID_USAGE_GENERIC_DPAD_UP + + + + No documentation. + + + HID_USAGE_GENERIC_DPAD_DOWN + HID_USAGE_GENERIC_DPAD_DOWN + + + + No documentation. + + + HID_USAGE_GENERIC_DPAD_RIGHT + HID_USAGE_GENERIC_DPAD_RIGHT + + + + No documentation. + + + HID_USAGE_GENERIC_DPAD_LEFT + HID_USAGE_GENERIC_DPAD_LEFT + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_DOCK + HID_USAGE_GENERIC_SYSCTL_DOCK + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_UNDOCK + HID_USAGE_GENERIC_SYSCTL_UNDOCK + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_SETUP + HID_USAGE_GENERIC_SYSCTL_SETUP + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_SYS_BREAK + HID_USAGE_GENERIC_SYSCTL_SYS_BREAK + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_SYS_DBG_BREAK + HID_USAGE_GENERIC_SYSCTL_SYS_DBG_BREAK + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_APP_BREAK + HID_USAGE_GENERIC_SYSCTL_APP_BREAK + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_APP_DBG_BREAK + HID_USAGE_GENERIC_SYSCTL_APP_DBG_BREAK + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_MUTE + HID_USAGE_GENERIC_SYSCTL_MUTE + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_HIBERNATE + HID_USAGE_GENERIC_SYSCTL_HIBERNATE + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_DISP_INVERT + HID_USAGE_GENERIC_SYSCTL_DISP_INVERT + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_DISP_INTERNAL + HID_USAGE_GENERIC_SYSCTL_DISP_INTERNAL + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_DISP_EXTERNAL + HID_USAGE_GENERIC_SYSCTL_DISP_EXTERNAL + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_DISP_BOTH + HID_USAGE_GENERIC_SYSCTL_DISP_BOTH + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_DISP_DUAL + HID_USAGE_GENERIC_SYSCTL_DISP_DUAL + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_DISP_TOGGLE + HID_USAGE_GENERIC_SYSCTL_DISP_TOGGLE + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_DISP_SWAP + HID_USAGE_GENERIC_SYSCTL_DISP_SWAP + + + + No documentation. + + + HID_USAGE_GENERIC_SYSCTL_DISP_AUTOSCALE + HID_USAGE_GENERIC_SYSCTL_DISP_AUTOSCALE + + + + No documentation. + + + HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_BUTTON + HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_BUTTON + + + + No documentation. + + + HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_SLIDER_SWITCH + HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_SLIDER_SWITCH + + + + No documentation. + + + HID_USAGE_GENERIC_CONTROL_ENABLE + HID_USAGE_GENERIC_CONTROL_ENABLE + + + + No documentation. + + + HID_USAGE_SIMULATION_FLIGHT_SIMULATION_DEVICE + HID_USAGE_SIMULATION_FLIGHT_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_AUTOMOBILE_SIMULATION_DEVICE + HID_USAGE_SIMULATION_AUTOMOBILE_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_TANK_SIMULATION_DEVICE + HID_USAGE_SIMULATION_TANK_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_SPACESHIP_SIMULATION_DEVICE + HID_USAGE_SIMULATION_SPACESHIP_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_SUBMARINE_SIMULATION_DEVICE + HID_USAGE_SIMULATION_SUBMARINE_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_SAILING_SIMULATION_DEVICE + HID_USAGE_SIMULATION_SAILING_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_MOTORCYCLE_SIMULATION_DEVICE + HID_USAGE_SIMULATION_MOTORCYCLE_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_SPORTS_SIMULATION_DEVICE + HID_USAGE_SIMULATION_SPORTS_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_AIRPLANE_SIMULATION_DEVICE + HID_USAGE_SIMULATION_AIRPLANE_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_HELICOPTER_SIMULATION_DEVICE + HID_USAGE_SIMULATION_HELICOPTER_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_MAGIC_CARPET_SIMULATION_DEVICE + HID_USAGE_SIMULATION_MAGIC_CARPET_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_BICYCLE_SIMULATION_DEVICE + HID_USAGE_SIMULATION_BICYCLE_SIMULATION_DEVICE + + + + No documentation. + + + HID_USAGE_SIMULATION_FLIGHT_CONTROL_STICK + HID_USAGE_SIMULATION_FLIGHT_CONTROL_STICK + + + + No documentation. + + + HID_USAGE_SIMULATION_FLIGHT_STICK + HID_USAGE_SIMULATION_FLIGHT_STICK + + + + No documentation. + + + HID_USAGE_SIMULATION_CYCLIC_CONTROL + HID_USAGE_SIMULATION_CYCLIC_CONTROL + + + + No documentation. + + + HID_USAGE_SIMULATION_CYCLIC_TRIM + HID_USAGE_SIMULATION_CYCLIC_TRIM + + + + No documentation. + + + HID_USAGE_SIMULATION_FLIGHT_YOKE + HID_USAGE_SIMULATION_FLIGHT_YOKE + + + + No documentation. + + + HID_USAGE_SIMULATION_TRACK_CONTROL + HID_USAGE_SIMULATION_TRACK_CONTROL + + + + No documentation. + + + HID_USAGE_SIMULATION_AILERON + HID_USAGE_SIMULATION_AILERON + + + + No documentation. + + + HID_USAGE_SIMULATION_AILERON_TRIM + HID_USAGE_SIMULATION_AILERON_TRIM + + + + No documentation. + + + HID_USAGE_SIMULATION_ANTI_TORQUE_CONTROL + HID_USAGE_SIMULATION_ANTI_TORQUE_CONTROL + + + + No documentation. + + + HID_USAGE_SIMULATION_AUTOPIOLOT_ENABLE + HID_USAGE_SIMULATION_AUTOPIOLOT_ENABLE + + + + No documentation. + + + HID_USAGE_SIMULATION_CHAFF_RELEASE + HID_USAGE_SIMULATION_CHAFF_RELEASE + + + + No documentation. + + + HID_USAGE_SIMULATION_COLLECTIVE_CONTROL + HID_USAGE_SIMULATION_COLLECTIVE_CONTROL + + + + No documentation. + + + HID_USAGE_SIMULATION_DIVE_BRAKE + HID_USAGE_SIMULATION_DIVE_BRAKE + + + + No documentation. + + + HID_USAGE_SIMULATION_ELECTRONIC_COUNTERMEASURES + HID_USAGE_SIMULATION_ELECTRONIC_COUNTERMEASURES + + + + No documentation. + + + HID_USAGE_SIMULATION_ELEVATOR + HID_USAGE_SIMULATION_ELEVATOR + + + + No documentation. + + + HID_USAGE_SIMULATION_ELEVATOR_TRIM + HID_USAGE_SIMULATION_ELEVATOR_TRIM + + + + No documentation. + + + HID_USAGE_SIMULATION_RUDDER + HID_USAGE_SIMULATION_RUDDER + + + + No documentation. + + + HID_USAGE_SIMULATION_THROTTLE + HID_USAGE_SIMULATION_THROTTLE + + + + No documentation. + + + HID_USAGE_SIMULATION_FLIGHT_COMMUNICATIONS + HID_USAGE_SIMULATION_FLIGHT_COMMUNICATIONS + + + + No documentation. + + + HID_USAGE_SIMULATION_FLARE_RELEASE + HID_USAGE_SIMULATION_FLARE_RELEASE + + + + No documentation. + + + HID_USAGE_SIMULATION_LANDING_GEAR + HID_USAGE_SIMULATION_LANDING_GEAR + + + + No documentation. + + + HID_USAGE_SIMULATION_TOE_BRAKE + HID_USAGE_SIMULATION_TOE_BRAKE + + + + No documentation. + + + HID_USAGE_SIMULATION_TRIGGER + HID_USAGE_SIMULATION_TRIGGER + + + + No documentation. + + + HID_USAGE_SIMULATION_WEAPONS_ARM + HID_USAGE_SIMULATION_WEAPONS_ARM + + + + No documentation. + + + HID_USAGE_SIMULATION_WEAPONS_SELECT + HID_USAGE_SIMULATION_WEAPONS_SELECT + + + + No documentation. + + + HID_USAGE_SIMULATION_WING_FLAPS + HID_USAGE_SIMULATION_WING_FLAPS + + + + No documentation. + + + HID_USAGE_SIMULATION_ACCELLERATOR + HID_USAGE_SIMULATION_ACCELLERATOR + + + + No documentation. + + + HID_USAGE_SIMULATION_BRAKE + HID_USAGE_SIMULATION_BRAKE + + + + No documentation. + + + HID_USAGE_SIMULATION_CLUTCH + HID_USAGE_SIMULATION_CLUTCH + + + + No documentation. + + + HID_USAGE_SIMULATION_SHIFTER + HID_USAGE_SIMULATION_SHIFTER + + + + No documentation. + + + HID_USAGE_SIMULATION_STEERING + HID_USAGE_SIMULATION_STEERING + + + + No documentation. + + + HID_USAGE_SIMULATION_TURRET_DIRECTION + HID_USAGE_SIMULATION_TURRET_DIRECTION + + + + No documentation. + + + HID_USAGE_SIMULATION_BARREL_ELEVATION + HID_USAGE_SIMULATION_BARREL_ELEVATION + + + + No documentation. + + + HID_USAGE_SIMULATION_DIVE_PLANE + HID_USAGE_SIMULATION_DIVE_PLANE + + + + No documentation. + + + HID_USAGE_SIMULATION_BALLAST + HID_USAGE_SIMULATION_BALLAST + + + + No documentation. + + + HID_USAGE_SIMULATION_BICYCLE_CRANK + HID_USAGE_SIMULATION_BICYCLE_CRANK + + + + No documentation. + + + HID_USAGE_SIMULATION_HANDLE_BARS + HID_USAGE_SIMULATION_HANDLE_BARS + + + + No documentation. + + + HID_USAGE_SIMULATION_FRONT_BRAKE + HID_USAGE_SIMULATION_FRONT_BRAKE + + + + No documentation. + + + HID_USAGE_SIMULATION_REAR_BRAKE + HID_USAGE_SIMULATION_REAR_BRAKE + + + + No documentation. + + + HID_USAGE_VR_BELT + HID_USAGE_VR_BELT + + + + No documentation. + + + HID_USAGE_VR_BODY_SUIT + HID_USAGE_VR_BODY_SUIT + + + + No documentation. + + + HID_USAGE_VR_FLEXOR + HID_USAGE_VR_FLEXOR + + + + No documentation. + + + HID_USAGE_VR_GLOVE + HID_USAGE_VR_GLOVE + + + + No documentation. + + + HID_USAGE_VR_HEAD_TRACKER + HID_USAGE_VR_HEAD_TRACKER + + + + No documentation. + + + HID_USAGE_VR_HEAD_MOUNTED_DISPLAY + HID_USAGE_VR_HEAD_MOUNTED_DISPLAY + + + + No documentation. + + + HID_USAGE_VR_HAND_TRACKER + HID_USAGE_VR_HAND_TRACKER + + + + No documentation. + + + HID_USAGE_VR_OCULOMETER + HID_USAGE_VR_OCULOMETER + + + + No documentation. + + + HID_USAGE_VR_VEST + HID_USAGE_VR_VEST + + + + No documentation. + + + HID_USAGE_VR_ANIMATRONIC_DEVICE + HID_USAGE_VR_ANIMATRONIC_DEVICE + + + + No documentation. + + + HID_USAGE_VR_STEREO_ENABLE + HID_USAGE_VR_STEREO_ENABLE + + + + No documentation. + + + HID_USAGE_VR_DISPLAY_ENABLE + HID_USAGE_VR_DISPLAY_ENABLE + + + + No documentation. + + + HID_USAGE_SPORT_BASEBALL_BAT + HID_USAGE_SPORT_BASEBALL_BAT + + + + No documentation. + + + HID_USAGE_SPORT_GOLF_CLUB + HID_USAGE_SPORT_GOLF_CLUB + + + + No documentation. + + + HID_USAGE_SPORT_ROWING_MACHINE + HID_USAGE_SPORT_ROWING_MACHINE + + + + No documentation. + + + HID_USAGE_SPORT_TREADMILL + HID_USAGE_SPORT_TREADMILL + + + + No documentation. + + + HID_USAGE_SPORT_STICK_TYPE + HID_USAGE_SPORT_STICK_TYPE + + + + No documentation. + + + HID_USAGE_SPORT_OAR + HID_USAGE_SPORT_OAR + + + + No documentation. + + + HID_USAGE_SPORT_SLOPE + HID_USAGE_SPORT_SLOPE + + + + No documentation. + + + HID_USAGE_SPORT_RATE + HID_USAGE_SPORT_RATE + + + + No documentation. + + + HID_USAGE_SPORT_STICK_SPEED + HID_USAGE_SPORT_STICK_SPEED + + + + No documentation. + + + HID_USAGE_SPORT_STICK_FACE_ANGLE + HID_USAGE_SPORT_STICK_FACE_ANGLE + + + + No documentation. + + + HID_USAGE_SPORT_HEEL_TOE + HID_USAGE_SPORT_HEEL_TOE + + + + No documentation. + + + HID_USAGE_SPORT_FOLLOW_THROUGH + HID_USAGE_SPORT_FOLLOW_THROUGH + + + + No documentation. + + + HID_USAGE_SPORT_TEMPO + HID_USAGE_SPORT_TEMPO + + + + No documentation. + + + HID_USAGE_SPORT_HEIGHT + HID_USAGE_SPORT_HEIGHT + + + + No documentation. + + + HID_USAGE_SPORT_PUTTER + HID_USAGE_SPORT_PUTTER + + + + No documentation. + + + HID_USAGE_SPORT_1_IRON + HID_USAGE_SPORT_1_IRON + + + + No documentation. + + + HID_USAGE_SPORT_2_IRON + HID_USAGE_SPORT_2_IRON + + + + No documentation. + + + HID_USAGE_SPORT_3_IRON + HID_USAGE_SPORT_3_IRON + + + + No documentation. + + + HID_USAGE_SPORT_4_IRON + HID_USAGE_SPORT_4_IRON + + + + No documentation. + + + HID_USAGE_SPORT_5_IRON + HID_USAGE_SPORT_5_IRON + + + + No documentation. + + + HID_USAGE_SPORT_6_IRON + HID_USAGE_SPORT_6_IRON + + + + No documentation. + + + HID_USAGE_SPORT_7_IRON + HID_USAGE_SPORT_7_IRON + + + + No documentation. + + + HID_USAGE_SPORT_8_IRON + HID_USAGE_SPORT_8_IRON + + + + No documentation. + + + HID_USAGE_SPORT_9_IRON + HID_USAGE_SPORT_9_IRON + + + + No documentation. + + + HID_USAGE_SPORT_10_IRON + HID_USAGE_SPORT_10_IRON + + + + No documentation. + + + HID_USAGE_SPORT_11_IRON + HID_USAGE_SPORT_11_IRON + + + + No documentation. + + + HID_USAGE_SPORT_SAND_WEDGE + HID_USAGE_SPORT_SAND_WEDGE + + + + No documentation. + + + HID_USAGE_SPORT_LOFT_WEDGE + HID_USAGE_SPORT_LOFT_WEDGE + + + + No documentation. + + + HID_USAGE_SPORT_POWER_WEDGE + HID_USAGE_SPORT_POWER_WEDGE + + + + No documentation. + + + HID_USAGE_SPORT_1_WOOD + HID_USAGE_SPORT_1_WOOD + + + + No documentation. + + + HID_USAGE_SPORT_3_WOOD + HID_USAGE_SPORT_3_WOOD + + + + No documentation. + + + HID_USAGE_SPORT_5_WOOD + HID_USAGE_SPORT_5_WOOD + + + + No documentation. + + + HID_USAGE_SPORT_7_WOOD + HID_USAGE_SPORT_7_WOOD + + + + No documentation. + + + HID_USAGE_SPORT_9_WOOD + HID_USAGE_SPORT_9_WOOD + + + + No documentation. + + + HID_USAGE_GAME_3D_GAME_CONTROLLER + HID_USAGE_GAME_3D_GAME_CONTROLLER + + + + No documentation. + + + HID_USAGE_GAME_PINBALL_DEVICE + HID_USAGE_GAME_PINBALL_DEVICE + + + + No documentation. + + + HID_USAGE_GAME_GUN_DEVICE + HID_USAGE_GAME_GUN_DEVICE + + + + No documentation. + + + HID_USAGE_GAME_POINT_OF_VIEW + HID_USAGE_GAME_POINT_OF_VIEW + + + + No documentation. + + + HID_USAGE_GAME_GUN_SELECTOR + HID_USAGE_GAME_GUN_SELECTOR + + + + No documentation. + + + HID_USAGE_GAME_GAMEPAD_FIRE_JUMP + HID_USAGE_GAME_GAMEPAD_FIRE_JUMP + + + + No documentation. + + + HID_USAGE_GAME_GAMEPAD_TRIGGER + HID_USAGE_GAME_GAMEPAD_TRIGGER + + + + No documentation. + + + HID_USAGE_GAME_TURN_RIGHT_LEFT + HID_USAGE_GAME_TURN_RIGHT_LEFT + + + + No documentation. + + + HID_USAGE_GAME_PITCH_FORWARD_BACK + HID_USAGE_GAME_PITCH_FORWARD_BACK + + + + No documentation. + + + HID_USAGE_GAME_ROLL_RIGHT_LEFT + HID_USAGE_GAME_ROLL_RIGHT_LEFT + + + + No documentation. + + + HID_USAGE_GAME_MOVE_RIGHT_LEFT + HID_USAGE_GAME_MOVE_RIGHT_LEFT + + + + No documentation. + + + HID_USAGE_GAME_MOVE_FORWARD_BACK + HID_USAGE_GAME_MOVE_FORWARD_BACK + + + + No documentation. + + + HID_USAGE_GAME_MOVE_UP_DOWN + HID_USAGE_GAME_MOVE_UP_DOWN + + + + No documentation. + + + HID_USAGE_GAME_LEAN_RIGHT_LEFT + HID_USAGE_GAME_LEAN_RIGHT_LEFT + + + + No documentation. + + + HID_USAGE_GAME_LEAN_FORWARD_BACK + HID_USAGE_GAME_LEAN_FORWARD_BACK + + + + No documentation. + + + HID_USAGE_GAME_POV_HEIGHT + HID_USAGE_GAME_POV_HEIGHT + + + + No documentation. + + + HID_USAGE_GAME_FLIPPER + HID_USAGE_GAME_FLIPPER + + + + No documentation. + + + HID_USAGE_GAME_SECONDARY_FLIPPER + HID_USAGE_GAME_SECONDARY_FLIPPER + + + + No documentation. + + + HID_USAGE_GAME_BUMP + HID_USAGE_GAME_BUMP + + + + No documentation. + + + HID_USAGE_GAME_NEW_GAME + HID_USAGE_GAME_NEW_GAME + + + + No documentation. + + + HID_USAGE_GAME_SHOOT_BALL + HID_USAGE_GAME_SHOOT_BALL + + + + No documentation. + + + HID_USAGE_GAME_PLAYER + HID_USAGE_GAME_PLAYER + + + + No documentation. + + + HID_USAGE_GAME_GUN_BOLT + HID_USAGE_GAME_GUN_BOLT + + + + No documentation. + + + HID_USAGE_GAME_GUN_CLIP + HID_USAGE_GAME_GUN_CLIP + + + + No documentation. + + + HID_USAGE_GAME_GUN_SINGLE_SHOT + HID_USAGE_GAME_GUN_SINGLE_SHOT + + + + No documentation. + + + HID_USAGE_GAME_GUN_BURST + HID_USAGE_GAME_GUN_BURST + + + + No documentation. + + + HID_USAGE_GAME_GUN_AUTOMATIC + HID_USAGE_GAME_GUN_AUTOMATIC + + + + No documentation. + + + HID_USAGE_GAME_GUN_SAFETY + HID_USAGE_GAME_GUN_SAFETY + + + + No documentation. + + + HID_USAGE_GENERIC_DEVICE_BATTERY_STRENGTH + HID_USAGE_GENERIC_DEVICE_BATTERY_STRENGTH + + + + No documentation. + + + HID_USAGE_GENERIC_DEVICE_WIRELESS_CHANNEL + HID_USAGE_GENERIC_DEVICE_WIRELESS_CHANNEL + + + + No documentation. + + + HID_USAGE_GENERIC_DEVICE_WIRELESS_ID + HID_USAGE_GENERIC_DEVICE_WIRELESS_ID + + + + No documentation. + + + HID_USAGE_GENERIC_DEVICE_DISCOVER_WIRELESS_CONTROL + HID_USAGE_GENERIC_DEVICE_DISCOVER_WIRELESS_CONTROL + + + + No documentation. + + + HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ENTERED + HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ENTERED + + + + No documentation. + + + HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ERASED + HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ERASED + + + + No documentation. + + + HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CLEARED + HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CLEARED + + + + No documentation. + + + HID_USAGE_KEYBOARD_NOEVENT + HID_USAGE_KEYBOARD_NOEVENT + + + + No documentation. + + + HID_USAGE_KEYBOARD_ROLLOVER + HID_USAGE_KEYBOARD_ROLLOVER + + + + No documentation. + + + HID_USAGE_KEYBOARD_POSTFAIL + HID_USAGE_KEYBOARD_POSTFAIL + + + + No documentation. + + + HID_USAGE_KEYBOARD_UNDEFINED + HID_USAGE_KEYBOARD_UNDEFINED + + + + No documentation. + + + HID_USAGE_KEYBOARD_aA + HID_USAGE_KEYBOARD_aA + + + + No documentation. + + + HID_USAGE_KEYBOARD_zZ + HID_USAGE_KEYBOARD_zZ + + + + No documentation. + + + HID_USAGE_KEYBOARD_ONE + HID_USAGE_KEYBOARD_ONE + + + + No documentation. + + + HID_USAGE_KEYBOARD_ZERO + HID_USAGE_KEYBOARD_ZERO + + + + No documentation. + + + HID_USAGE_KEYBOARD_LCTRL + HID_USAGE_KEYBOARD_LCTRL + + + + No documentation. + + + HID_USAGE_KEYBOARD_LSHFT + HID_USAGE_KEYBOARD_LSHFT + + + + No documentation. + + + HID_USAGE_KEYBOARD_LALT + HID_USAGE_KEYBOARD_LALT + + + + No documentation. + + + HID_USAGE_KEYBOARD_LGUI + HID_USAGE_KEYBOARD_LGUI + + + + No documentation. + + + HID_USAGE_KEYBOARD_RCTRL + HID_USAGE_KEYBOARD_RCTRL + + + + No documentation. + + + HID_USAGE_KEYBOARD_RSHFT + HID_USAGE_KEYBOARD_RSHFT + + + + No documentation. + + + HID_USAGE_KEYBOARD_RALT + HID_USAGE_KEYBOARD_RALT + + + + No documentation. + + + HID_USAGE_KEYBOARD_RGUI + HID_USAGE_KEYBOARD_RGUI + + + + No documentation. + + + HID_USAGE_KEYBOARD_SCROLL_LOCK + HID_USAGE_KEYBOARD_SCROLL_LOCK + + + + No documentation. + + + HID_USAGE_KEYBOARD_NUM_LOCK + HID_USAGE_KEYBOARD_NUM_LOCK + + + + No documentation. + + + HID_USAGE_KEYBOARD_CAPS_LOCK + HID_USAGE_KEYBOARD_CAPS_LOCK + + + + No documentation. + + + HID_USAGE_KEYBOARD_F1 + HID_USAGE_KEYBOARD_F1 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F2 + HID_USAGE_KEYBOARD_F2 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F3 + HID_USAGE_KEYBOARD_F3 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F4 + HID_USAGE_KEYBOARD_F4 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F5 + HID_USAGE_KEYBOARD_F5 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F6 + HID_USAGE_KEYBOARD_F6 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F7 + HID_USAGE_KEYBOARD_F7 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F8 + HID_USAGE_KEYBOARD_F8 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F9 + HID_USAGE_KEYBOARD_F9 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F10 + HID_USAGE_KEYBOARD_F10 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F11 + HID_USAGE_KEYBOARD_F11 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F12 + HID_USAGE_KEYBOARD_F12 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F13 + HID_USAGE_KEYBOARD_F13 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F14 + HID_USAGE_KEYBOARD_F14 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F15 + HID_USAGE_KEYBOARD_F15 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F16 + HID_USAGE_KEYBOARD_F16 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F17 + HID_USAGE_KEYBOARD_F17 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F18 + HID_USAGE_KEYBOARD_F18 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F19 + HID_USAGE_KEYBOARD_F19 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F20 + HID_USAGE_KEYBOARD_F20 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F21 + HID_USAGE_KEYBOARD_F21 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F22 + HID_USAGE_KEYBOARD_F22 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F23 + HID_USAGE_KEYBOARD_F23 + + + + No documentation. + + + HID_USAGE_KEYBOARD_F24 + HID_USAGE_KEYBOARD_F24 + + + + No documentation. + + + HID_USAGE_KEYBOARD_RETURN + HID_USAGE_KEYBOARD_RETURN + + + + No documentation. + + + HID_USAGE_KEYBOARD_ESCAPE + HID_USAGE_KEYBOARD_ESCAPE + + + + No documentation. + + + HID_USAGE_KEYBOARD_DELETE + HID_USAGE_KEYBOARD_DELETE + + + + No documentation. + + + HID_USAGE_KEYBOARD_PRINT_SCREEN + HID_USAGE_KEYBOARD_PRINT_SCREEN + + + + No documentation. + + + HID_USAGE_KEYBOARD_DELETE_FORWARD + HID_USAGE_KEYBOARD_DELETE_FORWARD + + + + No documentation. + + + HID_USAGE_LED_NUM_LOCK + HID_USAGE_LED_NUM_LOCK + + + + No documentation. + + + HID_USAGE_LED_CAPS_LOCK + HID_USAGE_LED_CAPS_LOCK + + + + No documentation. + + + HID_USAGE_LED_SCROLL_LOCK + HID_USAGE_LED_SCROLL_LOCK + + + + No documentation. + + + HID_USAGE_LED_COMPOSE + HID_USAGE_LED_COMPOSE + + + + No documentation. + + + HID_USAGE_LED_KANA + HID_USAGE_LED_KANA + + + + No documentation. + + + HID_USAGE_LED_POWER + HID_USAGE_LED_POWER + + + + No documentation. + + + HID_USAGE_LED_SHIFT + HID_USAGE_LED_SHIFT + + + + No documentation. + + + HID_USAGE_LED_DO_NOT_DISTURB + HID_USAGE_LED_DO_NOT_DISTURB + + + + No documentation. + + + HID_USAGE_LED_MUTE + HID_USAGE_LED_MUTE + + + + No documentation. + + + HID_USAGE_LED_TONE_ENABLE + HID_USAGE_LED_TONE_ENABLE + + + + No documentation. + + + HID_USAGE_LED_HIGH_CUT_FILTER + HID_USAGE_LED_HIGH_CUT_FILTER + + + + No documentation. + + + HID_USAGE_LED_LOW_CUT_FILTER + HID_USAGE_LED_LOW_CUT_FILTER + + + + No documentation. + + + HID_USAGE_LED_EQUALIZER_ENABLE + HID_USAGE_LED_EQUALIZER_ENABLE + + + + No documentation. + + + HID_USAGE_LED_SOUND_FIELD_ON + HID_USAGE_LED_SOUND_FIELD_ON + + + + No documentation. + + + HID_USAGE_LED_SURROUND_FIELD_ON + HID_USAGE_LED_SURROUND_FIELD_ON + + + + No documentation. + + + HID_USAGE_LED_REPEAT + HID_USAGE_LED_REPEAT + + + + No documentation. + + + HID_USAGE_LED_STEREO + HID_USAGE_LED_STEREO + + + + No documentation. + + + HID_USAGE_LED_SAMPLING_RATE_DETECT + HID_USAGE_LED_SAMPLING_RATE_DETECT + + + + No documentation. + + + HID_USAGE_LED_SPINNING + HID_USAGE_LED_SPINNING + + + + No documentation. + + + HID_USAGE_LED_CAV + HID_USAGE_LED_CAV + + + + No documentation. + + + HID_USAGE_LED_CLV + HID_USAGE_LED_CLV + + + + No documentation. + + + HID_USAGE_LED_RECORDING_FORMAT_DET + HID_USAGE_LED_RECORDING_FORMAT_DET + + + + No documentation. + + + HID_USAGE_LED_OFF_HOOK + HID_USAGE_LED_OFF_HOOK + + + + No documentation. + + + HID_USAGE_LED_RING + HID_USAGE_LED_RING + + + + No documentation. + + + HID_USAGE_LED_MESSAGE_WAITING + HID_USAGE_LED_MESSAGE_WAITING + + + + No documentation. + + + HID_USAGE_LED_DATA_MODE + HID_USAGE_LED_DATA_MODE + + + + No documentation. + + + HID_USAGE_LED_BATTERY_OPERATION + HID_USAGE_LED_BATTERY_OPERATION + + + + No documentation. + + + HID_USAGE_LED_BATTERY_OK + HID_USAGE_LED_BATTERY_OK + + + + No documentation. + + + HID_USAGE_LED_BATTERY_LOW + HID_USAGE_LED_BATTERY_LOW + + + + No documentation. + + + HID_USAGE_LED_SPEAKER + HID_USAGE_LED_SPEAKER + + + + No documentation. + + + HID_USAGE_LED_HEAD_SET + HID_USAGE_LED_HEAD_SET + + + + No documentation. + + + HID_USAGE_LED_HOLD + HID_USAGE_LED_HOLD + + + + No documentation. + + + HID_USAGE_LED_MICROPHONE + HID_USAGE_LED_MICROPHONE + + + + No documentation. + + + HID_USAGE_LED_COVERAGE + HID_USAGE_LED_COVERAGE + + + + No documentation. + + + HID_USAGE_LED_NIGHT_MODE + HID_USAGE_LED_NIGHT_MODE + + + + No documentation. + + + HID_USAGE_LED_SEND_CALLS + HID_USAGE_LED_SEND_CALLS + + + + No documentation. + + + HID_USAGE_LED_CALL_PICKUP + HID_USAGE_LED_CALL_PICKUP + + + + No documentation. + + + HID_USAGE_LED_CONFERENCE + HID_USAGE_LED_CONFERENCE + + + + No documentation. + + + HID_USAGE_LED_STAND_BY + HID_USAGE_LED_STAND_BY + + + + No documentation. + + + HID_USAGE_LED_CAMERA_ON + HID_USAGE_LED_CAMERA_ON + + + + No documentation. + + + HID_USAGE_LED_CAMERA_OFF + HID_USAGE_LED_CAMERA_OFF + + + + No documentation. + + + HID_USAGE_LED_ON_LINE + HID_USAGE_LED_ON_LINE + + + + No documentation. + + + HID_USAGE_LED_OFF_LINE + HID_USAGE_LED_OFF_LINE + + + + No documentation. + + + HID_USAGE_LED_BUSY + HID_USAGE_LED_BUSY + + + + No documentation. + + + HID_USAGE_LED_READY + HID_USAGE_LED_READY + + + + No documentation. + + + HID_USAGE_LED_PAPER_OUT + HID_USAGE_LED_PAPER_OUT + + + + No documentation. + + + HID_USAGE_LED_PAPER_JAM + HID_USAGE_LED_PAPER_JAM + + + + No documentation. + + + HID_USAGE_LED_REMOTE + HID_USAGE_LED_REMOTE + + + + No documentation. + + + HID_USAGE_LED_FORWARD + HID_USAGE_LED_FORWARD + + + + No documentation. + + + HID_USAGE_LED_REVERSE + HID_USAGE_LED_REVERSE + + + + No documentation. + + + HID_USAGE_LED_STOP + HID_USAGE_LED_STOP + + + + No documentation. + + + HID_USAGE_LED_REWIND + HID_USAGE_LED_REWIND + + + + No documentation. + + + HID_USAGE_LED_FAST_FORWARD + HID_USAGE_LED_FAST_FORWARD + + + + No documentation. + + + HID_USAGE_LED_PLAY + HID_USAGE_LED_PLAY + + + + No documentation. + + + HID_USAGE_LED_PAUSE + HID_USAGE_LED_PAUSE + + + + No documentation. + + + HID_USAGE_LED_RECORD + HID_USAGE_LED_RECORD + + + + No documentation. + + + HID_USAGE_LED_ERROR + HID_USAGE_LED_ERROR + + + + No documentation. + + + HID_USAGE_LED_SELECTED_INDICATOR + HID_USAGE_LED_SELECTED_INDICATOR + + + + No documentation. + + + HID_USAGE_LED_IN_USE_INDICATOR + HID_USAGE_LED_IN_USE_INDICATOR + + + + No documentation. + + + HID_USAGE_LED_MULTI_MODE_INDICATOR + HID_USAGE_LED_MULTI_MODE_INDICATOR + + + + No documentation. + + + HID_USAGE_LED_INDICATOR_ON + HID_USAGE_LED_INDICATOR_ON + + + + No documentation. + + + HID_USAGE_LED_INDICATOR_FLASH + HID_USAGE_LED_INDICATOR_FLASH + + + + No documentation. + + + HID_USAGE_LED_INDICATOR_SLOW_BLINK + HID_USAGE_LED_INDICATOR_SLOW_BLINK + + + + No documentation. + + + HID_USAGE_LED_INDICATOR_FAST_BLINK + HID_USAGE_LED_INDICATOR_FAST_BLINK + + + + No documentation. + + + HID_USAGE_LED_INDICATOR_OFF + HID_USAGE_LED_INDICATOR_OFF + + + + No documentation. + + + HID_USAGE_LED_FLASH_ON_TIME + HID_USAGE_LED_FLASH_ON_TIME + + + + No documentation. + + + HID_USAGE_LED_SLOW_BLINK_ON_TIME + HID_USAGE_LED_SLOW_BLINK_ON_TIME + + + + No documentation. + + + HID_USAGE_LED_SLOW_BLINK_OFF_TIME + HID_USAGE_LED_SLOW_BLINK_OFF_TIME + + + + No documentation. + + + HID_USAGE_LED_FAST_BLINK_ON_TIME + HID_USAGE_LED_FAST_BLINK_ON_TIME + + + + No documentation. + + + HID_USAGE_LED_FAST_BLINK_OFF_TIME + HID_USAGE_LED_FAST_BLINK_OFF_TIME + + + + No documentation. + + + HID_USAGE_LED_INDICATOR_COLOR + HID_USAGE_LED_INDICATOR_COLOR + + + + No documentation. + + + HID_USAGE_LED_RED + HID_USAGE_LED_RED + + + + No documentation. + + + HID_USAGE_LED_GREEN + HID_USAGE_LED_GREEN + + + + No documentation. + + + HID_USAGE_LED_AMBER + HID_USAGE_LED_AMBER + + + + No documentation. + + + HID_USAGE_LED_GENERIC_INDICATOR + HID_USAGE_LED_GENERIC_INDICATOR + + + + No documentation. + + + HID_USAGE_LED_SYSTEM_SUSPEND + HID_USAGE_LED_SYSTEM_SUSPEND + + + + No documentation. + + + HID_USAGE_LED_EXTERNAL_POWER + HID_USAGE_LED_EXTERNAL_POWER + + + + No documentation. + + + HID_USAGE_TELEPHONY_PHONE + HID_USAGE_TELEPHONY_PHONE + + + + No documentation. + + + HID_USAGE_TELEPHONY_ANSWERING_MACHINE + HID_USAGE_TELEPHONY_ANSWERING_MACHINE + + + + No documentation. + + + HID_USAGE_TELEPHONY_MESSAGE_CONTROLS + HID_USAGE_TELEPHONY_MESSAGE_CONTROLS + + + + No documentation. + + + HID_USAGE_TELEPHONY_HANDSET + HID_USAGE_TELEPHONY_HANDSET + + + + No documentation. + + + HID_USAGE_TELEPHONY_HEADSET + HID_USAGE_TELEPHONY_HEADSET + + + + No documentation. + + + HID_USAGE_TELEPHONY_KEYPAD + HID_USAGE_TELEPHONY_KEYPAD + + + + No documentation. + + + HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON + HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON + + + + No documentation. + + + HID_USAGE_TELEPHONY_REDIAL + HID_USAGE_TELEPHONY_REDIAL + + + + No documentation. + + + HID_USAGE_TELEPHONY_TRANSFER + HID_USAGE_TELEPHONY_TRANSFER + + + + No documentation. + + + HID_USAGE_TELEPHONY_DROP + HID_USAGE_TELEPHONY_DROP + + + + No documentation. + + + HID_USAGE_TELEPHONY_LINE + HID_USAGE_TELEPHONY_LINE + + + + No documentation. + + + HID_USAGE_TELEPHONY_RING_ENABLE + HID_USAGE_TELEPHONY_RING_ENABLE + + + + No documentation. + + + HID_USAGE_TELEPHONY_SEND + HID_USAGE_TELEPHONY_SEND + + + + No documentation. + + + HID_USAGE_TELEPHONY_KEYPAD_0 + HID_USAGE_TELEPHONY_KEYPAD_0 + + + + No documentation. + + + HID_USAGE_TELEPHONY_KEYPAD_D + HID_USAGE_TELEPHONY_KEYPAD_D + + + + No documentation. + + + HID_USAGE_TELEPHONY_HOST_AVAILABLE + HID_USAGE_TELEPHONY_HOST_AVAILABLE + + + + No documentation. + + + HID_USAGE_CONSUMERCTRL + HID_USAGE_CONSUMERCTRL + + + + No documentation. + + + HID_USAGE_CONSUMER_CHANNEL_INCREMENT + HID_USAGE_CONSUMER_CHANNEL_INCREMENT + + + + No documentation. + + + HID_USAGE_CONSUMER_CHANNEL_DECREMENT + HID_USAGE_CONSUMER_CHANNEL_DECREMENT + + + + No documentation. + + + HID_USAGE_CONSUMER_PLAY + HID_USAGE_CONSUMER_PLAY + + + + No documentation. + + + HID_USAGE_CONSUMER_PAUSE + HID_USAGE_CONSUMER_PAUSE + + + + No documentation. + + + HID_USAGE_CONSUMER_RECORD + HID_USAGE_CONSUMER_RECORD + + + + No documentation. + + + HID_USAGE_CONSUMER_FAST_FORWARD + HID_USAGE_CONSUMER_FAST_FORWARD + + + + No documentation. + + + HID_USAGE_CONSUMER_REWIND + HID_USAGE_CONSUMER_REWIND + + + + No documentation. + + + HID_USAGE_CONSUMER_SCAN_NEXT_TRACK + HID_USAGE_CONSUMER_SCAN_NEXT_TRACK + + + + No documentation. + + + HID_USAGE_CONSUMER_SCAN_PREV_TRACK + HID_USAGE_CONSUMER_SCAN_PREV_TRACK + + + + No documentation. + + + HID_USAGE_CONSUMER_STOP + HID_USAGE_CONSUMER_STOP + + + + No documentation. + + + HID_USAGE_CONSUMER_PLAY_PAUSE + HID_USAGE_CONSUMER_PLAY_PAUSE + + + + No documentation. + + + HID_USAGE_CONSUMER_GAMEDVR_OPEN_GAMEBAR + HID_USAGE_CONSUMER_GAMEDVR_OPEN_GAMEBAR + + + + No documentation. + + + HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_RECORD + HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_RECORD + + + + No documentation. + + + HID_USAGE_CONSUMER_GAMEDVR_RECORD_CLIP + HID_USAGE_CONSUMER_GAMEDVR_RECORD_CLIP + + + + No documentation. + + + HID_USAGE_CONSUMER_GAMEDVR_SCREENSHOT + HID_USAGE_CONSUMER_GAMEDVR_SCREENSHOT + + + + No documentation. + + + HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_INDICATOR + HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_INDICATOR + + + + No documentation. + + + HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_MICROPHONE + HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_MICROPHONE + + + + No documentation. + + + HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_CAMERA + HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_CAMERA + + + + No documentation. + + + HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_BROADCAST + HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_BROADCAST + + + + No documentation. + + + HID_USAGE_CONSUMER_VOLUME + HID_USAGE_CONSUMER_VOLUME + + + + No documentation. + + + HID_USAGE_CONSUMER_BALANCE + HID_USAGE_CONSUMER_BALANCE + + + + No documentation. + + + HID_USAGE_CONSUMER_MUTE + HID_USAGE_CONSUMER_MUTE + + + + No documentation. + + + HID_USAGE_CONSUMER_BASS + HID_USAGE_CONSUMER_BASS + + + + No documentation. + + + HID_USAGE_CONSUMER_TREBLE + HID_USAGE_CONSUMER_TREBLE + + + + No documentation. + + + HID_USAGE_CONSUMER_BASS_BOOST + HID_USAGE_CONSUMER_BASS_BOOST + + + + No documentation. + + + HID_USAGE_CONSUMER_SURROUND_MODE + HID_USAGE_CONSUMER_SURROUND_MODE + + + + No documentation. + + + HID_USAGE_CONSUMER_LOUDNESS + HID_USAGE_CONSUMER_LOUDNESS + + + + No documentation. + + + HID_USAGE_CONSUMER_MPX + HID_USAGE_CONSUMER_MPX + + + + No documentation. + + + HID_USAGE_CONSUMER_VOLUME_INCREMENT + HID_USAGE_CONSUMER_VOLUME_INCREMENT + + + + No documentation. + + + HID_USAGE_CONSUMER_VOLUME_DECREMENT + HID_USAGE_CONSUMER_VOLUME_DECREMENT + + + + No documentation. + + + HID_USAGE_CONSUMER_BASS_INCREMENT + HID_USAGE_CONSUMER_BASS_INCREMENT + + + + No documentation. + + + HID_USAGE_CONSUMER_BASS_DECREMENT + HID_USAGE_CONSUMER_BASS_DECREMENT + + + + No documentation. + + + HID_USAGE_CONSUMER_TREBLE_INCREMENT + HID_USAGE_CONSUMER_TREBLE_INCREMENT + + + + No documentation. + + + HID_USAGE_CONSUMER_TREBLE_DECREMENT + HID_USAGE_CONSUMER_TREBLE_DECREMENT + + + + No documentation. + + + HID_USAGE_CONSUMER_AL_CONFIGURATION + HID_USAGE_CONSUMER_AL_CONFIGURATION + + + + No documentation. + + + HID_USAGE_CONSUMER_AL_EMAIL + HID_USAGE_CONSUMER_AL_EMAIL + + + + No documentation. + + + HID_USAGE_CONSUMER_AL_CALCULATOR + HID_USAGE_CONSUMER_AL_CALCULATOR + + + + No documentation. + + + HID_USAGE_CONSUMER_AL_BROWSER + HID_USAGE_CONSUMER_AL_BROWSER + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_SEARCH + HID_USAGE_CONSUMER_AC_SEARCH + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_GOTO + HID_USAGE_CONSUMER_AC_GOTO + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_HOME + HID_USAGE_CONSUMER_AC_HOME + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_BACK + HID_USAGE_CONSUMER_AC_BACK + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_FORWARD + HID_USAGE_CONSUMER_AC_FORWARD + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_STOP + HID_USAGE_CONSUMER_AC_STOP + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_REFRESH + HID_USAGE_CONSUMER_AC_REFRESH + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_PREVIOUS + HID_USAGE_CONSUMER_AC_PREVIOUS + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_NEXT + HID_USAGE_CONSUMER_AC_NEXT + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_BOOKMARKS + HID_USAGE_CONSUMER_AC_BOOKMARKS + + + + No documentation. + + + HID_USAGE_CONSUMER_AC_PAN + HID_USAGE_CONSUMER_AC_PAN + + + + No documentation. + + + HID_USAGE_CONSUMER_EXTENDED_KEYBOARD_ATTRIBUTES_COLLECTION + HID_USAGE_CONSUMER_EXTENDED_KEYBOARD_ATTRIBUTES_COLLECTION + + + + No documentation. + + + HID_USAGE_CONSUMER_KEYBOARD_FORM_FACTOR + HID_USAGE_CONSUMER_KEYBOARD_FORM_FACTOR + + + + No documentation. + + + HID_USAGE_CONSUMER_KEYBOARD_KEY_TYPE + HID_USAGE_CONSUMER_KEYBOARD_KEY_TYPE + + + + No documentation. + + + HID_USAGE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT + HID_USAGE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT + + + + No documentation. + + + HID_USAGE_CONSUMER_VENDOR_SPECIFIC_KEYBOARD_PHYSICAL_LAYOUT + HID_USAGE_CONSUMER_VENDOR_SPECIFIC_KEYBOARD_PHYSICAL_LAYOUT + + + + No documentation. + + + HID_USAGE_CONSUMER_KEYBOARD_IETF_LANGUAGE_TAG_INDEX + HID_USAGE_CONSUMER_KEYBOARD_IETF_LANGUAGE_TAG_INDEX + + + + No documentation. + + + HID_USAGE_CONSUMER_IMPLEMENTED_KEYBOARD_INPUT_ASSIST_CONTROLS + HID_USAGE_CONSUMER_IMPLEMENTED_KEYBOARD_INPUT_ASSIST_CONTROLS + + + + No documentation. + + + HID_USAGE_DIGITIZER_DIGITIZER + HID_USAGE_DIGITIZER_DIGITIZER + + + + No documentation. + + + HID_USAGE_DIGITIZER_PEN + HID_USAGE_DIGITIZER_PEN + + + + No documentation. + + + HID_USAGE_DIGITIZER_LIGHT_PEN + HID_USAGE_DIGITIZER_LIGHT_PEN + + + + No documentation. + + + HID_USAGE_DIGITIZER_TOUCH_SCREEN + HID_USAGE_DIGITIZER_TOUCH_SCREEN + + + + No documentation. + + + HID_USAGE_DIGITIZER_TOUCH_PAD + HID_USAGE_DIGITIZER_TOUCH_PAD + + + + No documentation. + + + HID_USAGE_DIGITIZER_WHITE_BOARD + HID_USAGE_DIGITIZER_WHITE_BOARD + + + + No documentation. + + + HID_USAGE_DIGITIZER_COORD_MEASURING + HID_USAGE_DIGITIZER_COORD_MEASURING + + + + No documentation. + + + HID_USAGE_DIGITIZER_3D_DIGITIZER + HID_USAGE_DIGITIZER_3D_DIGITIZER + + + + No documentation. + + + HID_USAGE_DIGITIZER_STEREO_PLOTTER + HID_USAGE_DIGITIZER_STEREO_PLOTTER + + + + No documentation. + + + HID_USAGE_DIGITIZER_ARTICULATED_ARM + HID_USAGE_DIGITIZER_ARTICULATED_ARM + + + + No documentation. + + + HID_USAGE_DIGITIZER_ARMATURE + HID_USAGE_DIGITIZER_ARMATURE + + + + No documentation. + + + HID_USAGE_DIGITIZER_MULTI_POINT + HID_USAGE_DIGITIZER_MULTI_POINT + + + + No documentation. + + + HID_USAGE_DIGITIZER_FREE_SPACE_WAND + HID_USAGE_DIGITIZER_FREE_SPACE_WAND + + + + No documentation. + + + HID_USAGE_DIGITIZER_STYLUS + HID_USAGE_DIGITIZER_STYLUS + + + + No documentation. + + + HID_USAGE_DIGITIZER_PUCK + HID_USAGE_DIGITIZER_PUCK + + + + No documentation. + + + HID_USAGE_DIGITIZER_FINGER + HID_USAGE_DIGITIZER_FINGER + + + + No documentation. + + + HID_USAGE_DIGITIZER_TABLET_FUNC_KEYS + HID_USAGE_DIGITIZER_TABLET_FUNC_KEYS + + + + No documentation. + + + HID_USAGE_DIGITIZER_PROG_CHANGE_KEYS + HID_USAGE_DIGITIZER_PROG_CHANGE_KEYS + + + + No documentation. + + + HID_USAGE_DIGITIZER_TIP_PRESSURE + HID_USAGE_DIGITIZER_TIP_PRESSURE + + + + No documentation. + + + HID_USAGE_DIGITIZER_BARREL_PRESSURE + HID_USAGE_DIGITIZER_BARREL_PRESSURE + + + + No documentation. + + + HID_USAGE_DIGITIZER_IN_RANGE + HID_USAGE_DIGITIZER_IN_RANGE + + + + No documentation. + + + HID_USAGE_DIGITIZER_TOUCH + HID_USAGE_DIGITIZER_TOUCH + + + + No documentation. + + + HID_USAGE_DIGITIZER_UNTOUCH + HID_USAGE_DIGITIZER_UNTOUCH + + + + No documentation. + + + HID_USAGE_DIGITIZER_TAP + HID_USAGE_DIGITIZER_TAP + + + + No documentation. + + + HID_USAGE_DIGITIZER_QUALITY + HID_USAGE_DIGITIZER_QUALITY + + + + No documentation. + + + HID_USAGE_DIGITIZER_DATA_VALID + HID_USAGE_DIGITIZER_DATA_VALID + + + + No documentation. + + + HID_USAGE_DIGITIZER_TRANSDUCER_INDEX + HID_USAGE_DIGITIZER_TRANSDUCER_INDEX + + + + No documentation. + + + HID_USAGE_DIGITIZER_BATTERY_STRENGTH + HID_USAGE_DIGITIZER_BATTERY_STRENGTH + + + + No documentation. + + + HID_USAGE_DIGITIZER_INVERT + HID_USAGE_DIGITIZER_INVERT + + + + No documentation. + + + HID_USAGE_DIGITIZER_X_TILT + HID_USAGE_DIGITIZER_X_TILT + + + + No documentation. + + + HID_USAGE_DIGITIZER_Y_TILT + HID_USAGE_DIGITIZER_Y_TILT + + + + No documentation. + + + HID_USAGE_DIGITIZER_AZIMUTH + HID_USAGE_DIGITIZER_AZIMUTH + + + + No documentation. + + + HID_USAGE_DIGITIZER_ALTITUDE + HID_USAGE_DIGITIZER_ALTITUDE + + + + No documentation. + + + HID_USAGE_DIGITIZER_TWIST + HID_USAGE_DIGITIZER_TWIST + + + + No documentation. + + + HID_USAGE_DIGITIZER_TIP_SWITCH + HID_USAGE_DIGITIZER_TIP_SWITCH + + + + No documentation. + + + HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH + HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH + + + + No documentation. + + + HID_USAGE_DIGITIZER_BARREL_SWITCH + HID_USAGE_DIGITIZER_BARREL_SWITCH + + + + No documentation. + + + HID_USAGE_DIGITIZER_ERASER + HID_USAGE_DIGITIZER_ERASER + + + + No documentation. + + + HID_USAGE_DIGITIZER_TABLET_PICK + HID_USAGE_DIGITIZER_TABLET_PICK + + + + No documentation. + + + HID_USAGE_HAPTICS_SIMPLE_CONTROLLER + HID_USAGE_HAPTICS_SIMPLE_CONTROLLER + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_LIST + HID_USAGE_HAPTICS_WAVEFORM_LIST + + + + No documentation. + + + HID_USAGE_HAPTICS_DURATION_LIST + HID_USAGE_HAPTICS_DURATION_LIST + + + + No documentation. + + + HID_USAGE_HAPTICS_AUTO_TRIGGER + HID_USAGE_HAPTICS_AUTO_TRIGGER + + + + No documentation. + + + HID_USAGE_HAPTICS_MANUAL_TRIGGER + HID_USAGE_HAPTICS_MANUAL_TRIGGER + + + + No documentation. + + + HID_USAGE_HAPTICS_AUTO_ASSOCIATED_CONTROL + HID_USAGE_HAPTICS_AUTO_ASSOCIATED_CONTROL + + + + No documentation. + + + HID_USAGE_HAPTICS_INTENSITY + HID_USAGE_HAPTICS_INTENSITY + + + + No documentation. + + + HID_USAGE_HAPTICS_REPEAT_COUNT + HID_USAGE_HAPTICS_REPEAT_COUNT + + + + No documentation. + + + HID_USAGE_HAPTICS_RETRIGGER_PERIOD + HID_USAGE_HAPTICS_RETRIGGER_PERIOD + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_VENDOR_PAGE + HID_USAGE_HAPTICS_WAVEFORM_VENDOR_PAGE + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_VENDOR_ID + HID_USAGE_HAPTICS_WAVEFORM_VENDOR_ID + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME + HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_BEGIN + HID_USAGE_HAPTICS_WAVEFORM_BEGIN + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_STOP + HID_USAGE_HAPTICS_WAVEFORM_STOP + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_NULL + HID_USAGE_HAPTICS_WAVEFORM_NULL + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_CLICK + HID_USAGE_HAPTICS_WAVEFORM_CLICK + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_BUZZ + HID_USAGE_HAPTICS_WAVEFORM_BUZZ + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_RUMBLE + HID_USAGE_HAPTICS_WAVEFORM_RUMBLE + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_PRESS + HID_USAGE_HAPTICS_WAVEFORM_PRESS + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_RELEASE + HID_USAGE_HAPTICS_WAVEFORM_RELEASE + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_END + HID_USAGE_HAPTICS_WAVEFORM_END + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_VENDOR_BEGIN + HID_USAGE_HAPTICS_WAVEFORM_VENDOR_BEGIN + + + + No documentation. + + + HID_USAGE_HAPTICS_WAVEFORM_VENDOR_END + HID_USAGE_HAPTICS_WAVEFORM_VENDOR_END + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_ALPHANUMERIC_DISPLAY + HID_USAGE_ALPHANUMERIC_ALPHANUMERIC_DISPLAY + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_BITMAPPED_DISPLAY + HID_USAGE_ALPHANUMERIC_BITMAPPED_DISPLAY + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_DISPLAY_ATTRIBUTES_REPORT + HID_USAGE_ALPHANUMERIC_DISPLAY_ATTRIBUTES_REPORT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_DISPLAY_CONTROL_REPORT + HID_USAGE_ALPHANUMERIC_DISPLAY_CONTROL_REPORT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CHARACTER_REPORT + HID_USAGE_ALPHANUMERIC_CHARACTER_REPORT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_DISPLAY_STATUS + HID_USAGE_ALPHANUMERIC_DISPLAY_STATUS + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CURSOR_POSITION_REPORT + HID_USAGE_ALPHANUMERIC_CURSOR_POSITION_REPORT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_FONT_REPORT + HID_USAGE_ALPHANUMERIC_FONT_REPORT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_FONT_DATA + HID_USAGE_ALPHANUMERIC_FONT_DATA + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CHARACTER_ATTRIBUTE + HID_USAGE_ALPHANUMERIC_CHARACTER_ATTRIBUTE + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_PALETTE_REPORT + HID_USAGE_ALPHANUMERIC_PALETTE_REPORT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_PALETTE_DATA + HID_USAGE_ALPHANUMERIC_PALETTE_DATA + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_BLIT_REPORT + HID_USAGE_ALPHANUMERIC_BLIT_REPORT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_BLIT_DATA + HID_USAGE_ALPHANUMERIC_BLIT_DATA + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_ASCII_CHARACTER_SET + HID_USAGE_ALPHANUMERIC_ASCII_CHARACTER_SET + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_DATA_READ_BACK + HID_USAGE_ALPHANUMERIC_DATA_READ_BACK + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_FONT_READ_BACK + HID_USAGE_ALPHANUMERIC_FONT_READ_BACK + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CLEAR_DISPLAY + HID_USAGE_ALPHANUMERIC_CLEAR_DISPLAY + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_DISPLAY_ENABLE + HID_USAGE_ALPHANUMERIC_DISPLAY_ENABLE + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_DELAY + HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_DELAY + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_ENABLE + HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_ENABLE + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_VERTICAL_SCROLL + HID_USAGE_ALPHANUMERIC_VERTICAL_SCROLL + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_HORIZONTAL_SCROLL + HID_USAGE_ALPHANUMERIC_HORIZONTAL_SCROLL + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_DISPLAY_DATA + HID_USAGE_ALPHANUMERIC_DISPLAY_DATA + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_STATUS_NOT_READY + HID_USAGE_ALPHANUMERIC_STATUS_NOT_READY + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_STATUS_READY + HID_USAGE_ALPHANUMERIC_STATUS_READY + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_ERR_NOT_A_LOADABLE_CHARACTER + HID_USAGE_ALPHANUMERIC_ERR_NOT_A_LOADABLE_CHARACTER + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_ERR_FONT_DATA_CANNOT_BE_READ + HID_USAGE_ALPHANUMERIC_ERR_FONT_DATA_CANNOT_BE_READ + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_ROW + HID_USAGE_ALPHANUMERIC_ROW + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_COLUMN + HID_USAGE_ALPHANUMERIC_COLUMN + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_ROWS + HID_USAGE_ALPHANUMERIC_ROWS + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_COLUMNS + HID_USAGE_ALPHANUMERIC_COLUMNS + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CURSOR_PIXEL_POSITIONING + HID_USAGE_ALPHANUMERIC_CURSOR_PIXEL_POSITIONING + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CURSOR_MODE + HID_USAGE_ALPHANUMERIC_CURSOR_MODE + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CURSOR_ENABLE + HID_USAGE_ALPHANUMERIC_CURSOR_ENABLE + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CURSOR_BLINK + HID_USAGE_ALPHANUMERIC_CURSOR_BLINK + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CHAR_WIDTH + HID_USAGE_ALPHANUMERIC_CHAR_WIDTH + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CHAR_HEIGHT + HID_USAGE_ALPHANUMERIC_CHAR_HEIGHT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CHAR_SPACING_HORIZONTAL + HID_USAGE_ALPHANUMERIC_CHAR_SPACING_HORIZONTAL + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CHAR_SPACING_VERTICAL + HID_USAGE_ALPHANUMERIC_CHAR_SPACING_VERTICAL + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_UNICODE_CHAR_SET + HID_USAGE_ALPHANUMERIC_UNICODE_CHAR_SET + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_FONT_7_SEGMENT + HID_USAGE_ALPHANUMERIC_FONT_7_SEGMENT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_7_SEGMENT_DIRECT_MAP + HID_USAGE_ALPHANUMERIC_7_SEGMENT_DIRECT_MAP + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_FONT_14_SEGMENT + HID_USAGE_ALPHANUMERIC_FONT_14_SEGMENT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_14_SEGMENT_DIRECT_MAP + HID_USAGE_ALPHANUMERIC_14_SEGMENT_DIRECT_MAP + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_DISPLAY_BRIGHTNESS + HID_USAGE_ALPHANUMERIC_DISPLAY_BRIGHTNESS + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_DISPLAY_CONTRAST + HID_USAGE_ALPHANUMERIC_DISPLAY_CONTRAST + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_ATTRIBUTE_READBACK + HID_USAGE_ALPHANUMERIC_ATTRIBUTE_READBACK + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_ATTRIBUTE_DATA + HID_USAGE_ALPHANUMERIC_ATTRIBUTE_DATA + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CHAR_ATTR_ENHANCE + HID_USAGE_ALPHANUMERIC_CHAR_ATTR_ENHANCE + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CHAR_ATTR_UNDERLINE + HID_USAGE_ALPHANUMERIC_CHAR_ATTR_UNDERLINE + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_CHAR_ATTR_BLINK + HID_USAGE_ALPHANUMERIC_CHAR_ATTR_BLINK + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_X + HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_X + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_Y + HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_Y + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_BIT_DEPTH_FORMAT + HID_USAGE_ALPHANUMERIC_BIT_DEPTH_FORMAT + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_DISPLAY_ORIENTATION + HID_USAGE_ALPHANUMERIC_DISPLAY_ORIENTATION + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_PALETTE_DATA_SIZE + HID_USAGE_ALPHANUMERIC_PALETTE_DATA_SIZE + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_PALETTE_DATA_OFFSET + HID_USAGE_ALPHANUMERIC_PALETTE_DATA_OFFSET + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X1 + HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X1 + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y1 + HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y1 + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X2 + HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X2 + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y2 + HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y2 + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_ID + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_ID + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_SIDE + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_SIDE + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET1 + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET1 + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET2 + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET2 + + + + No documentation. + + + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_REPORT + HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_REPORT + + + + No documentation. + + + HID_USAGE_CAMERA_AUTO_FOCUS + HID_USAGE_CAMERA_AUTO_FOCUS + + + + No documentation. + + + HID_USAGE_CAMERA_SHUTTER + HID_USAGE_CAMERA_SHUTTER + + + + No documentation. + + + HID_USAGE_MS_BTH_HF_DIALNUMBER + HID_USAGE_MS_BTH_HF_DIALNUMBER + + + + No documentation. + + + HID_USAGE_MS_BTH_HF_DIALMEMORY + HID_USAGE_MS_BTH_HF_DIALMEMORY + + + + No documentation. + + + HID_USAGE_PAGE + HID_USAGE_PAGE + + + + No documentation. + + + HID_USAGE_PAGE_UNDEFINED + HID_USAGE_PAGE_UNDEFINED + + + + No documentation. + + + HID_USAGE_PAGE_GENERIC + HID_USAGE_PAGE_GENERIC + + + + No documentation. + + + HID_USAGE_PAGE_SIMULATION + HID_USAGE_PAGE_SIMULATION + + + + No documentation. + + + HID_USAGE_PAGE_VR + HID_USAGE_PAGE_VR + + + + No documentation. + + + HID_USAGE_PAGE_SPORT + HID_USAGE_PAGE_SPORT + + + + No documentation. + + + HID_USAGE_PAGE_GAME + HID_USAGE_PAGE_GAME + + + + No documentation. + + + HID_USAGE_PAGE_GENERIC_DEVICE + HID_USAGE_PAGE_GENERIC_DEVICE + + + + No documentation. + + + HID_USAGE_PAGE_KEYBOARD + HID_USAGE_PAGE_KEYBOARD + + + + No documentation. + + + HID_USAGE_PAGE_LED + HID_USAGE_PAGE_LED + + + + No documentation. + + + HID_USAGE_PAGE_BUTTON + HID_USAGE_PAGE_BUTTON + + + + No documentation. + + + HID_USAGE_PAGE_ORDINAL + HID_USAGE_PAGE_ORDINAL + + + + No documentation. + + + HID_USAGE_PAGE_TELEPHONY + HID_USAGE_PAGE_TELEPHONY + + + + No documentation. + + + HID_USAGE_PAGE_CONSUMER + HID_USAGE_PAGE_CONSUMER + + + + No documentation. + + + HID_USAGE_PAGE_DIGITIZER + HID_USAGE_PAGE_DIGITIZER + + + + No documentation. + + + HID_USAGE_PAGE_HAPTICS + HID_USAGE_PAGE_HAPTICS + + + + No documentation. + + + HID_USAGE_PAGE_PID + HID_USAGE_PAGE_PID + + + + No documentation. + + + HID_USAGE_PAGE_UNICODE + HID_USAGE_PAGE_UNICODE + + + + No documentation. + + + HID_USAGE_PAGE_ALPHANUMERIC + HID_USAGE_PAGE_ALPHANUMERIC + + + + No documentation. + + + HID_USAGE_PAGE_SENSOR + HID_USAGE_PAGE_SENSOR + + + + No documentation. + + + HID_USAGE_PAGE_BARCODE_SCANNER + HID_USAGE_PAGE_BARCODE_SCANNER + + + + No documentation. + + + HID_USAGE_PAGE_WEIGHING_DEVICE + HID_USAGE_PAGE_WEIGHING_DEVICE + + + + No documentation. + + + HID_USAGE_PAGE_MAGNETIC_STRIPE_READER + HID_USAGE_PAGE_MAGNETIC_STRIPE_READER + + + + No documentation. + + + HID_USAGE_PAGE_CAMERA_CONTROL + HID_USAGE_PAGE_CAMERA_CONTROL + + + + No documentation. + + + HID_USAGE_PAGE_ARCADE + HID_USAGE_PAGE_ARCADE + + + + No documentation. + + + HID_USAGE_PAGE_MICROSOFT_BLUETOOTH_HANDSFREE + HID_USAGE_PAGE_MICROSOFT_BLUETOOTH_HANDSFREE + + + + No documentation. + + + HID_USAGE_PAGE_VENDOR_DEFINED_BEGIN + HID_USAGE_PAGE_VENDOR_DEFINED_BEGIN + + + + No documentation. + + + HID_USAGE_PAGE_VENDOR_DEFINED_END + HID_USAGE_PAGE_VENDOR_DEFINED_END + + + + No documentation. + + + HID_USAGE_PAGE_MEDICAL + HID_USAGE_PAGE_MEDICAL + + + + No documentation. + + + HID_USAGE_PAGE_MONITOR_PAGE0 + HID_USAGE_PAGE_MONITOR_PAGE0 + + + + No documentation. + + + HID_USAGE_PAGE_MONITOR_PAGE1 + HID_USAGE_PAGE_MONITOR_PAGE1 + + + + No documentation. + + + HID_USAGE_PAGE_MONITOR_PAGE2 + HID_USAGE_PAGE_MONITOR_PAGE2 + + + + No documentation. + + + HID_USAGE_PAGE_MONITOR_PAGE3 + HID_USAGE_PAGE_MONITOR_PAGE3 + + + + No documentation. + + + HID_USAGE_PAGE_POWER_PAGE0 + HID_USAGE_PAGE_POWER_PAGE0 + + + + No documentation. + + + HID_USAGE_PAGE_POWER_PAGE1 + HID_USAGE_PAGE_POWER_PAGE1 + + + + No documentation. + + + HID_USAGE_PAGE_POWER_PAGE2 + HID_USAGE_PAGE_POWER_PAGE2 + + + + No documentation. + + + HID_USAGE_PAGE_POWER_PAGE3 + HID_USAGE_PAGE_POWER_PAGE3 + + + + No documentation. + + + HID_USAGE_PAGE_BARCODE + HID_USAGE_PAGE_BARCODE + + + + No documentation. + + + HID_USAGE_PAGE_SCALE + HID_USAGE_PAGE_SCALE + + + + No documentation. + + + HID_USAGE_PAGE_MSR + HID_USAGE_PAGE_MSR + + + + No documentation. + + + WAVE_FORMAT_ENCODING + WAVE_FORMAT_ENCODING + + + + No documentation. + + + WAVE_FORMAT_UNKNOWN + WAVE_FORMAT_UNKNOWN + + + + No documentation. + + + WAVE_FORMAT_ADPCM + WAVE_FORMAT_ADPCM + + + + No documentation. + + + WAVE_FORMAT_IEEE_FLOAT + WAVE_FORMAT_IEEE_FLOAT + + + + No documentation. + + + WAVE_FORMAT_VSELP + WAVE_FORMAT_VSELP + + + + No documentation. + + + WAVE_FORMAT_IBM_CVSD + WAVE_FORMAT_IBM_CVSD + + + + No documentation. + + + WAVE_FORMAT_ALAW + WAVE_FORMAT_ALAW + + + + No documentation. + + + WAVE_FORMAT_MULAW + WAVE_FORMAT_MULAW + + + + No documentation. + + + WAVE_FORMAT_DTS + WAVE_FORMAT_DTS + + + + No documentation. + + + WAVE_FORMAT_DRM + WAVE_FORMAT_DRM + + + + No documentation. + + + WAVE_FORMAT_WMAVOICE9 + WAVE_FORMAT_WMAVOICE9 + + + + No documentation. + + + WAVE_FORMAT_WMAVOICE10 + WAVE_FORMAT_WMAVOICE10 + + + + No documentation. + + + WAVE_FORMAT_OKI_ADPCM + WAVE_FORMAT_OKI_ADPCM + + + + No documentation. + + + WAVE_FORMAT_DVI_ADPCM + WAVE_FORMAT_DVI_ADPCM + + + + No documentation. + + + WAVE_FORMAT_IMA_ADPCM + WAVE_FORMAT_IMA_ADPCM + + + + No documentation. + + + WAVE_FORMAT_MEDIASPACE_ADPCM + WAVE_FORMAT_MEDIASPACE_ADPCM + + + + No documentation. + + + WAVE_FORMAT_SIERRA_ADPCM + WAVE_FORMAT_SIERRA_ADPCM + + + + No documentation. + + + WAVE_FORMAT_G723_ADPCM + WAVE_FORMAT_G723_ADPCM + + + + No documentation. + + + WAVE_FORMAT_DIGISTD + WAVE_FORMAT_DIGISTD + + + + No documentation. + + + WAVE_FORMAT_DIGIFIX + WAVE_FORMAT_DIGIFIX + + + + No documentation. + + + WAVE_FORMAT_DIALOGIC_OKI_ADPCM + WAVE_FORMAT_DIALOGIC_OKI_ADPCM + + + + No documentation. + + + WAVE_FORMAT_MEDIAVISION_ADPCM + WAVE_FORMAT_MEDIAVISION_ADPCM + + + + No documentation. + + + WAVE_FORMAT_CU_CODEC + WAVE_FORMAT_CU_CODEC + + + + No documentation. + + + WAVE_FORMAT_HP_DYN_VOICE + WAVE_FORMAT_HP_DYN_VOICE + + + + No documentation. + + + WAVE_FORMAT_YAMAHA_ADPCM + WAVE_FORMAT_YAMAHA_ADPCM + + + + No documentation. + + + WAVE_FORMAT_SONARC + WAVE_FORMAT_SONARC + + + + No documentation. + + + WAVE_FORMAT_DSPGROUP_TRUESPEECH + WAVE_FORMAT_DSPGROUP_TRUESPEECH + + + + No documentation. + + + WAVE_FORMAT_ECHOSC1 + WAVE_FORMAT_ECHOSC1 + + + + No documentation. + + + WAVE_FORMAT_AUDIOFILE_AF36 + WAVE_FORMAT_AUDIOFILE_AF36 + + + + No documentation. + + + WAVE_FORMAT_APTX + WAVE_FORMAT_APTX + + + + No documentation. + + + WAVE_FORMAT_AUDIOFILE_AF10 + WAVE_FORMAT_AUDIOFILE_AF10 + + + + No documentation. + + + WAVE_FORMAT_PROSODY_1612 + WAVE_FORMAT_PROSODY_1612 + + + + No documentation. + + + WAVE_FORMAT_LRC + WAVE_FORMAT_LRC + + + + No documentation. + + + WAVE_FORMAT_DOLBY_AC2 + WAVE_FORMAT_DOLBY_AC2 + + + + No documentation. + + + WAVE_FORMAT_GSM610 + WAVE_FORMAT_GSM610 + + + + No documentation. + + + WAVE_FORMAT_MSNAUDIO + WAVE_FORMAT_MSNAUDIO + + + + No documentation. + + + WAVE_FORMAT_ANTEX_ADPCME + WAVE_FORMAT_ANTEX_ADPCME + + + + No documentation. + + + WAVE_FORMAT_CONTROL_RES_VQLPC + WAVE_FORMAT_CONTROL_RES_VQLPC + + + + No documentation. + + + WAVE_FORMAT_DIGIREAL + WAVE_FORMAT_DIGIREAL + + + + No documentation. + + + WAVE_FORMAT_DIGIADPCM + WAVE_FORMAT_DIGIADPCM + + + + No documentation. + + + WAVE_FORMAT_CONTROL_RES_CR10 + WAVE_FORMAT_CONTROL_RES_CR10 + + + + No documentation. + + + WAVE_FORMAT_NMS_VBXADPCM + WAVE_FORMAT_NMS_VBXADPCM + + + + No documentation. + + + WAVE_FORMAT_CS_IMAADPCM + WAVE_FORMAT_CS_IMAADPCM + + + + No documentation. + + + WAVE_FORMAT_ECHOSC3 + WAVE_FORMAT_ECHOSC3 + + + + No documentation. + + + WAVE_FORMAT_ROCKWELL_ADPCM + WAVE_FORMAT_ROCKWELL_ADPCM + + + + No documentation. + + + WAVE_FORMAT_ROCKWELL_DIGITALK + WAVE_FORMAT_ROCKWELL_DIGITALK + + + + No documentation. + + + WAVE_FORMAT_XEBEC + WAVE_FORMAT_XEBEC + + + + No documentation. + + + WAVE_FORMAT_G721_ADPCM + WAVE_FORMAT_G721_ADPCM + + + + No documentation. + + + WAVE_FORMAT_G728_CELP + WAVE_FORMAT_G728_CELP + + + + No documentation. + + + WAVE_FORMAT_MSG723 + WAVE_FORMAT_MSG723 + + + + No documentation. + + + WAVE_FORMAT_INTEL_G723_1 + WAVE_FORMAT_INTEL_G723_1 + + + + No documentation. + + + WAVE_FORMAT_INTEL_G729 + WAVE_FORMAT_INTEL_G729 + + + + No documentation. + + + WAVE_FORMAT_SHARP_G726 + WAVE_FORMAT_SHARP_G726 + + + + No documentation. + + + WAVE_FORMAT_MPEG + WAVE_FORMAT_MPEG + + + + No documentation. + + + WAVE_FORMAT_RT24 + WAVE_FORMAT_RT24 + + + + No documentation. + + + WAVE_FORMAT_PAC + WAVE_FORMAT_PAC + + + + No documentation. + + + WAVE_FORMAT_MPEGLAYER3 + WAVE_FORMAT_MPEGLAYER3 + + + + No documentation. + + + WAVE_FORMAT_LUCENT_G723 + WAVE_FORMAT_LUCENT_G723 + + + + No documentation. + + + WAVE_FORMAT_CIRRUS + WAVE_FORMAT_CIRRUS + + + + No documentation. + + + WAVE_FORMAT_ESPCM + WAVE_FORMAT_ESPCM + + + + No documentation. + + + WAVE_FORMAT_VOXWARE + WAVE_FORMAT_VOXWARE + + + + No documentation. + + + WAVE_FORMAT_CANOPUS_ATRAC + WAVE_FORMAT_CANOPUS_ATRAC + + + + No documentation. + + + WAVE_FORMAT_G726_ADPCM + WAVE_FORMAT_G726_ADPCM + + + + No documentation. + + + WAVE_FORMAT_G722_ADPCM + WAVE_FORMAT_G722_ADPCM + + + + No documentation. + + + WAVE_FORMAT_DSAT + WAVE_FORMAT_DSAT + + + + No documentation. + + + WAVE_FORMAT_DSAT_DISPLAY + WAVE_FORMAT_DSAT_DISPLAY + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_BYTE_ALIGNED + WAVE_FORMAT_VOXWARE_BYTE_ALIGNED + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_AC8 + WAVE_FORMAT_VOXWARE_AC8 + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_AC10 + WAVE_FORMAT_VOXWARE_AC10 + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_AC16 + WAVE_FORMAT_VOXWARE_AC16 + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_AC20 + WAVE_FORMAT_VOXWARE_AC20 + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_RT24 + WAVE_FORMAT_VOXWARE_RT24 + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_RT29 + WAVE_FORMAT_VOXWARE_RT29 + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_RT29HW + WAVE_FORMAT_VOXWARE_RT29HW + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_VR12 + WAVE_FORMAT_VOXWARE_VR12 + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_VR18 + WAVE_FORMAT_VOXWARE_VR18 + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_TQ40 + WAVE_FORMAT_VOXWARE_TQ40 + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_SC3 + WAVE_FORMAT_VOXWARE_SC3 + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_SC3_1 + WAVE_FORMAT_VOXWARE_SC3_1 + + + + No documentation. + + + WAVE_FORMAT_SOFTSOUND + WAVE_FORMAT_SOFTSOUND + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_TQ60 + WAVE_FORMAT_VOXWARE_TQ60 + + + + No documentation. + + + WAVE_FORMAT_MSRT24 + WAVE_FORMAT_MSRT24 + + + + No documentation. + + + WAVE_FORMAT_G729A + WAVE_FORMAT_G729A + + + + No documentation. + + + WAVE_FORMAT_MVI_MVI2 + WAVE_FORMAT_MVI_MVI2 + + + + No documentation. + + + WAVE_FORMAT_DF_G726 + WAVE_FORMAT_DF_G726 + + + + No documentation. + + + WAVE_FORMAT_DF_GSM610 + WAVE_FORMAT_DF_GSM610 + + + + No documentation. + + + WAVE_FORMAT_ISIAUDIO + WAVE_FORMAT_ISIAUDIO + + + + No documentation. + + + WAVE_FORMAT_ONLIVE + WAVE_FORMAT_ONLIVE + + + + No documentation. + + + WAVE_FORMAT_MULTITUDE_FT_SX20 + WAVE_FORMAT_MULTITUDE_FT_SX20 + + + + No documentation. + + + WAVE_FORMAT_INFOCOM_ITS_G721_ADPCM + WAVE_FORMAT_INFOCOM_ITS_G721_ADPCM + + + + No documentation. + + + WAVE_FORMAT_CONVEDIA_G729 + WAVE_FORMAT_CONVEDIA_G729 + + + + No documentation. + + + WAVE_FORMAT_CONGRUENCY + WAVE_FORMAT_CONGRUENCY + + + + No documentation. + + + WAVE_FORMAT_SBC24 + WAVE_FORMAT_SBC24 + + + + No documentation. + + + WAVE_FORMAT_DOLBY_AC3_SPDIF + WAVE_FORMAT_DOLBY_AC3_SPDIF + + + + No documentation. + + + WAVE_FORMAT_MEDIASONIC_G723 + WAVE_FORMAT_MEDIASONIC_G723 + + + + No documentation. + + + WAVE_FORMAT_PROSODY_8KBPS + WAVE_FORMAT_PROSODY_8KBPS + + + + No documentation. + + + WAVE_FORMAT_ZYXEL_ADPCM + WAVE_FORMAT_ZYXEL_ADPCM + + + + No documentation. + + + WAVE_FORMAT_PHILIPS_LPCBB + WAVE_FORMAT_PHILIPS_LPCBB + + + + No documentation. + + + WAVE_FORMAT_PACKED + WAVE_FORMAT_PACKED + + + + No documentation. + + + WAVE_FORMAT_MALDEN_PHONYTALK + WAVE_FORMAT_MALDEN_PHONYTALK + + + + No documentation. + + + WAVE_FORMAT_RACAL_RECORDER_GSM + WAVE_FORMAT_RACAL_RECORDER_GSM + + + + No documentation. + + + WAVE_FORMAT_RACAL_RECORDER_G720_A + WAVE_FORMAT_RACAL_RECORDER_G720_A + + + + No documentation. + + + WAVE_FORMAT_RACAL_RECORDER_G723_1 + WAVE_FORMAT_RACAL_RECORDER_G723_1 + + + + No documentation. + + + WAVE_FORMAT_RACAL_RECORDER_TETRA_ACELP + WAVE_FORMAT_RACAL_RECORDER_TETRA_ACELP + + + + No documentation. + + + WAVE_FORMAT_NEC_AAC + WAVE_FORMAT_NEC_AAC + + + + No documentation. + + + WAVE_FORMAT_RAW_AAC1 + WAVE_FORMAT_RAW_AAC1 + + + + No documentation. + + + WAVE_FORMAT_RHETOREX_ADPCM + WAVE_FORMAT_RHETOREX_ADPCM + + + + No documentation. + + + WAVE_FORMAT_IRAT + WAVE_FORMAT_IRAT + + + + No documentation. + + + WAVE_FORMAT_VIVO_G723 + WAVE_FORMAT_VIVO_G723 + + + + No documentation. + + + WAVE_FORMAT_VIVO_SIREN + WAVE_FORMAT_VIVO_SIREN + + + + No documentation. + + + WAVE_FORMAT_PHILIPS_CELP + WAVE_FORMAT_PHILIPS_CELP + + + + No documentation. + + + WAVE_FORMAT_PHILIPS_GRUNDIG + WAVE_FORMAT_PHILIPS_GRUNDIG + + + + No documentation. + + + WAVE_FORMAT_DIGITAL_G723 + WAVE_FORMAT_DIGITAL_G723 + + + + No documentation. + + + WAVE_FORMAT_SANYO_LD_ADPCM + WAVE_FORMAT_SANYO_LD_ADPCM + + + + No documentation. + + + WAVE_FORMAT_SIPROLAB_ACEPLNET + WAVE_FORMAT_SIPROLAB_ACEPLNET + + + + No documentation. + + + WAVE_FORMAT_SIPROLAB_ACELP4800 + WAVE_FORMAT_SIPROLAB_ACELP4800 + + + + No documentation. + + + WAVE_FORMAT_SIPROLAB_ACELP8V3 + WAVE_FORMAT_SIPROLAB_ACELP8V3 + + + + No documentation. + + + WAVE_FORMAT_SIPROLAB_G729 + WAVE_FORMAT_SIPROLAB_G729 + + + + No documentation. + + + WAVE_FORMAT_SIPROLAB_G729A + WAVE_FORMAT_SIPROLAB_G729A + + + + No documentation. + + + WAVE_FORMAT_SIPROLAB_KELVIN + WAVE_FORMAT_SIPROLAB_KELVIN + + + + No documentation. + + + WAVE_FORMAT_VOICEAGE_AMR + WAVE_FORMAT_VOICEAGE_AMR + + + + No documentation. + + + WAVE_FORMAT_G726ADPCM + WAVE_FORMAT_G726ADPCM + + + + No documentation. + + + WAVE_FORMAT_DICTAPHONE_CELP68 + WAVE_FORMAT_DICTAPHONE_CELP68 + + + + No documentation. + + + WAVE_FORMAT_DICTAPHONE_CELP54 + WAVE_FORMAT_DICTAPHONE_CELP54 + + + + No documentation. + + + WAVE_FORMAT_QUALCOMM_PUREVOICE + WAVE_FORMAT_QUALCOMM_PUREVOICE + + + + No documentation. + + + WAVE_FORMAT_QUALCOMM_HALFRATE + WAVE_FORMAT_QUALCOMM_HALFRATE + + + + No documentation. + + + WAVE_FORMAT_TUBGSM + WAVE_FORMAT_TUBGSM + + + + No documentation. + + + WAVE_FORMAT_MSAUDIO1 + WAVE_FORMAT_MSAUDIO1 + + + + No documentation. + + + WAVE_FORMAT_WMAUDIO2 + WAVE_FORMAT_WMAUDIO2 + + + + No documentation. + + + WAVE_FORMAT_WMAUDIO3 + WAVE_FORMAT_WMAUDIO3 + + + + No documentation. + + + WAVE_FORMAT_WMAUDIO_LOSSLESS + WAVE_FORMAT_WMAUDIO_LOSSLESS + + + + No documentation. + + + WAVE_FORMAT_WMASPDIF + WAVE_FORMAT_WMASPDIF + + + + No documentation. + + + WAVE_FORMAT_UNISYS_NAP_ADPCM + WAVE_FORMAT_UNISYS_NAP_ADPCM + + + + No documentation. + + + WAVE_FORMAT_UNISYS_NAP_ULAW + WAVE_FORMAT_UNISYS_NAP_ULAW + + + + No documentation. + + + WAVE_FORMAT_UNISYS_NAP_ALAW + WAVE_FORMAT_UNISYS_NAP_ALAW + + + + No documentation. + + + WAVE_FORMAT_UNISYS_NAP_16K + WAVE_FORMAT_UNISYS_NAP_16K + + + + No documentation. + + + WAVE_FORMAT_SYCOM_ACM_SYC008 + WAVE_FORMAT_SYCOM_ACM_SYC008 + + + + No documentation. + + + WAVE_FORMAT_SYCOM_ACM_SYC701_G726L + WAVE_FORMAT_SYCOM_ACM_SYC701_G726L + + + + No documentation. + + + WAVE_FORMAT_SYCOM_ACM_SYC701_CELP54 + WAVE_FORMAT_SYCOM_ACM_SYC701_CELP54 + + + + No documentation. + + + WAVE_FORMAT_SYCOM_ACM_SYC701_CELP68 + WAVE_FORMAT_SYCOM_ACM_SYC701_CELP68 + + + + No documentation. + + + WAVE_FORMAT_KNOWLEDGE_ADVENTURE_ADPCM + WAVE_FORMAT_KNOWLEDGE_ADVENTURE_ADPCM + + + + No documentation. + + + WAVE_FORMAT_FRAUNHOFER_IIS_MPEG2_AAC + WAVE_FORMAT_FRAUNHOFER_IIS_MPEG2_AAC + + + + No documentation. + + + WAVE_FORMAT_DTS_DS + WAVE_FORMAT_DTS_DS + + + + No documentation. + + + WAVE_FORMAT_CREATIVE_ADPCM + WAVE_FORMAT_CREATIVE_ADPCM + + + + No documentation. + + + WAVE_FORMAT_CREATIVE_FASTSPEECH8 + WAVE_FORMAT_CREATIVE_FASTSPEECH8 + + + + No documentation. + + + WAVE_FORMAT_CREATIVE_FASTSPEECH10 + WAVE_FORMAT_CREATIVE_FASTSPEECH10 + + + + No documentation. + + + WAVE_FORMAT_UHER_ADPCM + WAVE_FORMAT_UHER_ADPCM + + + + No documentation. + + + WAVE_FORMAT_ULEAD_DV_AUDIO + WAVE_FORMAT_ULEAD_DV_AUDIO + + + + No documentation. + + + WAVE_FORMAT_ULEAD_DV_AUDIO_1 + WAVE_FORMAT_ULEAD_DV_AUDIO_1 + + + + No documentation. + + + WAVE_FORMAT_QUARTERDECK + WAVE_FORMAT_QUARTERDECK + + + + No documentation. + + + WAVE_FORMAT_ILINK_VC + WAVE_FORMAT_ILINK_VC + + + + No documentation. + + + WAVE_FORMAT_RAW_SPORT + WAVE_FORMAT_RAW_SPORT + + + + No documentation. + + + WAVE_FORMAT_ESST_AC3 + WAVE_FORMAT_ESST_AC3 + + + + No documentation. + + + WAVE_FORMAT_GENERIC_PASSTHRU + WAVE_FORMAT_GENERIC_PASSTHRU + + + + No documentation. + + + WAVE_FORMAT_IPI_HSX + WAVE_FORMAT_IPI_HSX + + + + No documentation. + + + WAVE_FORMAT_IPI_RPELP + WAVE_FORMAT_IPI_RPELP + + + + No documentation. + + + WAVE_FORMAT_CS2 + WAVE_FORMAT_CS2 + + + + No documentation. + + + WAVE_FORMAT_SONY_SCX + WAVE_FORMAT_SONY_SCX + + + + No documentation. + + + WAVE_FORMAT_SONY_SCY + WAVE_FORMAT_SONY_SCY + + + + No documentation. + + + WAVE_FORMAT_SONY_ATRAC3 + WAVE_FORMAT_SONY_ATRAC3 + + + + No documentation. + + + WAVE_FORMAT_SONY_SPC + WAVE_FORMAT_SONY_SPC + + + + No documentation. + + + WAVE_FORMAT_TELUM_AUDIO + WAVE_FORMAT_TELUM_AUDIO + + + + No documentation. + + + WAVE_FORMAT_TELUM_IA_AUDIO + WAVE_FORMAT_TELUM_IA_AUDIO + + + + No documentation. + + + WAVE_FORMAT_NORCOM_VOICE_SYSTEMS_ADPCM + WAVE_FORMAT_NORCOM_VOICE_SYSTEMS_ADPCM + + + + No documentation. + + + WAVE_FORMAT_FM_TOWNS_SND + WAVE_FORMAT_FM_TOWNS_SND + + + + No documentation. + + + WAVE_FORMAT_MICRONAS + WAVE_FORMAT_MICRONAS + + + + No documentation. + + + WAVE_FORMAT_MICRONAS_CELP833 + WAVE_FORMAT_MICRONAS_CELP833 + + + + No documentation. + + + WAVE_FORMAT_BTV_DIGITAL + WAVE_FORMAT_BTV_DIGITAL + + + + No documentation. + + + WAVE_FORMAT_INTEL_MUSIC_CODER + WAVE_FORMAT_INTEL_MUSIC_CODER + + + + No documentation. + + + WAVE_FORMAT_INDEO_AUDIO + WAVE_FORMAT_INDEO_AUDIO + + + + No documentation. + + + WAVE_FORMAT_QDESIGN_MUSIC + WAVE_FORMAT_QDESIGN_MUSIC + + + + No documentation. + + + WAVE_FORMAT_ON2_VP7_AUDIO + WAVE_FORMAT_ON2_VP7_AUDIO + + + + No documentation. + + + WAVE_FORMAT_ON2_VP6_AUDIO + WAVE_FORMAT_ON2_VP6_AUDIO + + + + No documentation. + + + WAVE_FORMAT_VME_VMPCM + WAVE_FORMAT_VME_VMPCM + + + + No documentation. + + + WAVE_FORMAT_TPC + WAVE_FORMAT_TPC + + + + No documentation. + + + WAVE_FORMAT_LIGHTWAVE_LOSSLESS + WAVE_FORMAT_LIGHTWAVE_LOSSLESS + + + + No documentation. + + + WAVE_FORMAT_OLIGSM + WAVE_FORMAT_OLIGSM + + + + No documentation. + + + WAVE_FORMAT_OLIADPCM + WAVE_FORMAT_OLIADPCM + + + + No documentation. + + + WAVE_FORMAT_OLICELP + WAVE_FORMAT_OLICELP + + + + No documentation. + + + WAVE_FORMAT_OLISBC + WAVE_FORMAT_OLISBC + + + + No documentation. + + + WAVE_FORMAT_OLIOPR + WAVE_FORMAT_OLIOPR + + + + No documentation. + + + WAVE_FORMAT_LH_CODEC + WAVE_FORMAT_LH_CODEC + + + + No documentation. + + + WAVE_FORMAT_LH_CODEC_CELP + WAVE_FORMAT_LH_CODEC_CELP + + + + No documentation. + + + WAVE_FORMAT_LH_CODEC_SBC8 + WAVE_FORMAT_LH_CODEC_SBC8 + + + + No documentation. + + + WAVE_FORMAT_LH_CODEC_SBC12 + WAVE_FORMAT_LH_CODEC_SBC12 + + + + No documentation. + + + WAVE_FORMAT_LH_CODEC_SBC16 + WAVE_FORMAT_LH_CODEC_SBC16 + + + + No documentation. + + + WAVE_FORMAT_NORRIS + WAVE_FORMAT_NORRIS + + + + No documentation. + + + WAVE_FORMAT_ISIAUDIO_2 + WAVE_FORMAT_ISIAUDIO_2 + + + + No documentation. + + + WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS + WAVE_FORMAT_SOUNDSPACE_MUSICOMPRESS + + + + No documentation. + + + WAVE_FORMAT_MPEG_ADTS_AAC + WAVE_FORMAT_MPEG_ADTS_AAC + + + + No documentation. + + + WAVE_FORMAT_MPEG_RAW_AAC + WAVE_FORMAT_MPEG_RAW_AAC + + + + No documentation. + + + WAVE_FORMAT_MPEG_LOAS + WAVE_FORMAT_MPEG_LOAS + + + + No documentation. + + + WAVE_FORMAT_NOKIA_MPEG_ADTS_AAC + WAVE_FORMAT_NOKIA_MPEG_ADTS_AAC + + + + No documentation. + + + WAVE_FORMAT_NOKIA_MPEG_RAW_AAC + WAVE_FORMAT_NOKIA_MPEG_RAW_AAC + + + + No documentation. + + + WAVE_FORMAT_VODAFONE_MPEG_ADTS_AAC + WAVE_FORMAT_VODAFONE_MPEG_ADTS_AAC + + + + No documentation. + + + WAVE_FORMAT_VODAFONE_MPEG_RAW_AAC + WAVE_FORMAT_VODAFONE_MPEG_RAW_AAC + + + + No documentation. + + + WAVE_FORMAT_MPEG_HEAAC + WAVE_FORMAT_MPEG_HEAAC + + + + No documentation. + + + WAVE_FORMAT_VOXWARE_RT24_SPEECH + WAVE_FORMAT_VOXWARE_RT24_SPEECH + + + + No documentation. + + + WAVE_FORMAT_SONICFOUNDRY_LOSSLESS + WAVE_FORMAT_SONICFOUNDRY_LOSSLESS + + + + No documentation. + + + WAVE_FORMAT_INNINGS_TELECOM_ADPCM + WAVE_FORMAT_INNINGS_TELECOM_ADPCM + + + + No documentation. + + + WAVE_FORMAT_LUCENT_SX8300P + WAVE_FORMAT_LUCENT_SX8300P + + + + No documentation. + + + WAVE_FORMAT_LUCENT_SX5363S + WAVE_FORMAT_LUCENT_SX5363S + + + + No documentation. + + + WAVE_FORMAT_CUSEEME + WAVE_FORMAT_CUSEEME + + + + No documentation. + + + WAVE_FORMAT_NTCSOFT_ALF2CM_ACM + WAVE_FORMAT_NTCSOFT_ALF2CM_ACM + + + + No documentation. + + + WAVE_FORMAT_DVM + WAVE_FORMAT_DVM + + + + No documentation. + + + WAVE_FORMAT_DTS2 + WAVE_FORMAT_DTS2 + + + + No documentation. + + + WAVE_FORMAT_MAKEAVIS + WAVE_FORMAT_MAKEAVIS + + + + No documentation. + + + WAVE_FORMAT_DIVIO_MPEG4_AAC + WAVE_FORMAT_DIVIO_MPEG4_AAC + + + + No documentation. + + + WAVE_FORMAT_NOKIA_ADAPTIVE_MULTIRATE + WAVE_FORMAT_NOKIA_ADAPTIVE_MULTIRATE + + + + No documentation. + + + WAVE_FORMAT_DIVIO_G726 + WAVE_FORMAT_DIVIO_G726 + + + + No documentation. + + + WAVE_FORMAT_LEAD_SPEECH + WAVE_FORMAT_LEAD_SPEECH + + + + No documentation. + + + WAVE_FORMAT_LEAD_VORBIS + WAVE_FORMAT_LEAD_VORBIS + + + + No documentation. + + + WAVE_FORMAT_WAVPACK_AUDIO + WAVE_FORMAT_WAVPACK_AUDIO + + + + No documentation. + + + WAVE_FORMAT_ALAC + WAVE_FORMAT_ALAC + + + + No documentation. + + + WAVE_FORMAT_OGG_VORBIS_MODE_1 + WAVE_FORMAT_OGG_VORBIS_MODE_1 + + + + No documentation. + + + WAVE_FORMAT_OGG_VORBIS_MODE_2 + WAVE_FORMAT_OGG_VORBIS_MODE_2 + + + + No documentation. + + + WAVE_FORMAT_OGG_VORBIS_MODE_3 + WAVE_FORMAT_OGG_VORBIS_MODE_3 + + + + No documentation. + + + WAVE_FORMAT_OGG_VORBIS_MODE_1_PLUS + WAVE_FORMAT_OGG_VORBIS_MODE_1_PLUS + + + + No documentation. + + + WAVE_FORMAT_OGG_VORBIS_MODE_2_PLUS + WAVE_FORMAT_OGG_VORBIS_MODE_2_PLUS + + + + No documentation. + + + WAVE_FORMAT_OGG_VORBIS_MODE_3_PLUS + WAVE_FORMAT_OGG_VORBIS_MODE_3_PLUS + + + + No documentation. + + + WAVE_FORMAT_3COM_NBX + WAVE_FORMAT_3COM_NBX + + + + No documentation. + + + WAVE_FORMAT_OPUS + WAVE_FORMAT_OPUS + + + + No documentation. + + + WAVE_FORMAT_FAAD_AAC + WAVE_FORMAT_FAAD_AAC + + + + No documentation. + + + WAVE_FORMAT_AMR_NB + WAVE_FORMAT_AMR_NB + + + + No documentation. + + + WAVE_FORMAT_AMR_WB + WAVE_FORMAT_AMR_WB + + + + No documentation. + + + WAVE_FORMAT_AMR_WP + WAVE_FORMAT_AMR_WP + + + + No documentation. + + + WAVE_FORMAT_GSM_AMR_CBR + WAVE_FORMAT_GSM_AMR_CBR + + + + No documentation. + + + WAVE_FORMAT_GSM_AMR_VBR_SID + WAVE_FORMAT_GSM_AMR_VBR_SID + + + + No documentation. + + + WAVE_FORMAT_COMVERSE_INFOSYS_G723_1 + WAVE_FORMAT_COMVERSE_INFOSYS_G723_1 + + + + No documentation. + + + WAVE_FORMAT_COMVERSE_INFOSYS_AVQSBC + WAVE_FORMAT_COMVERSE_INFOSYS_AVQSBC + + + + No documentation. + + + WAVE_FORMAT_COMVERSE_INFOSYS_SBC + WAVE_FORMAT_COMVERSE_INFOSYS_SBC + + + + No documentation. + + + WAVE_FORMAT_SYMBOL_G729_A + WAVE_FORMAT_SYMBOL_G729_A + + + + No documentation. + + + WAVE_FORMAT_VOICEAGE_AMR_WB + WAVE_FORMAT_VOICEAGE_AMR_WB + + + + No documentation. + + + WAVE_FORMAT_INGENIENT_G726 + WAVE_FORMAT_INGENIENT_G726 + + + + No documentation. + + + WAVE_FORMAT_MPEG4_AAC + WAVE_FORMAT_MPEG4_AAC + + + + No documentation. + + + WAVE_FORMAT_ENCORE_G726 + WAVE_FORMAT_ENCORE_G726 + + + + No documentation. + + + WAVE_FORMAT_ZOLL_ASAO + WAVE_FORMAT_ZOLL_ASAO + + + + No documentation. + + + WAVE_FORMAT_SPEEX_VOICE + WAVE_FORMAT_SPEEX_VOICE + + + + No documentation. + + + WAVE_FORMAT_VIANIX_MASC + WAVE_FORMAT_VIANIX_MASC + + + + No documentation. + + + WAVE_FORMAT_WM9_SPECTRUM_ANALYZER + WAVE_FORMAT_WM9_SPECTRUM_ANALYZER + + + + No documentation. + + + WAVE_FORMAT_WMF_SPECTRUM_ANAYZER + WAVE_FORMAT_WMF_SPECTRUM_ANAYZER + + + + No documentation. + + + WAVE_FORMAT_GSM_610 + WAVE_FORMAT_GSM_610 + + + + No documentation. + + + WAVE_FORMAT_GSM_620 + WAVE_FORMAT_GSM_620 + + + + No documentation. + + + WAVE_FORMAT_GSM_660 + WAVE_FORMAT_GSM_660 + + + + No documentation. + + + WAVE_FORMAT_GSM_690 + WAVE_FORMAT_GSM_690 + + + + No documentation. + + + WAVE_FORMAT_GSM_ADAPTIVE_MULTIRATE_WB + WAVE_FORMAT_GSM_ADAPTIVE_MULTIRATE_WB + + + + No documentation. + + + WAVE_FORMAT_POLYCOM_G722 + WAVE_FORMAT_POLYCOM_G722 + + + + No documentation. + + + WAVE_FORMAT_POLYCOM_G728 + WAVE_FORMAT_POLYCOM_G728 + + + + No documentation. + + + WAVE_FORMAT_POLYCOM_G729_A + WAVE_FORMAT_POLYCOM_G729_A + + + + No documentation. + + + WAVE_FORMAT_POLYCOM_SIREN + WAVE_FORMAT_POLYCOM_SIREN + + + + No documentation. + + + WAVE_FORMAT_GLOBAL_IP_ILBC + WAVE_FORMAT_GLOBAL_IP_ILBC + + + + No documentation. + + + WAVE_FORMAT_RADIOTIME_TIME_SHIFT_RADIO + WAVE_FORMAT_RADIOTIME_TIME_SHIFT_RADIO + + + + No documentation. + + + WAVE_FORMAT_NICE_ACA + WAVE_FORMAT_NICE_ACA + + + + No documentation. + + + WAVE_FORMAT_NICE_ADPCM + WAVE_FORMAT_NICE_ADPCM + + + + No documentation. + + + WAVE_FORMAT_VOCORD_G721 + WAVE_FORMAT_VOCORD_G721 + + + + No documentation. + + + WAVE_FORMAT_VOCORD_G726 + WAVE_FORMAT_VOCORD_G726 + + + + No documentation. + + + WAVE_FORMAT_VOCORD_G722_1 + WAVE_FORMAT_VOCORD_G722_1 + + + + No documentation. + + + WAVE_FORMAT_VOCORD_G728 + WAVE_FORMAT_VOCORD_G728 + + + + No documentation. + + + WAVE_FORMAT_VOCORD_G729 + WAVE_FORMAT_VOCORD_G729 + + + + No documentation. + + + WAVE_FORMAT_VOCORD_G729_A + WAVE_FORMAT_VOCORD_G729_A + + + + No documentation. + + + WAVE_FORMAT_VOCORD_G723_1 + WAVE_FORMAT_VOCORD_G723_1 + + + + No documentation. + + + WAVE_FORMAT_VOCORD_LBC + WAVE_FORMAT_VOCORD_LBC + + + + No documentation. + + + WAVE_FORMAT_NICE_G728 + WAVE_FORMAT_NICE_G728 + + + + No documentation. + + + WAVE_FORMAT_FRACE_TELECOM_G729 + WAVE_FORMAT_FRACE_TELECOM_G729 + + + + No documentation. + + + WAVE_FORMAT_CODIAN + WAVE_FORMAT_CODIAN + + + + No documentation. + + + WAVE_FORMAT_FLAC + WAVE_FORMAT_FLAC + + + + No documentation. + + + WAVE_FORMAT_EXTENSIBLE + WAVE_FORMAT_EXTENSIBLE + + + + No documentation. + + + WAVE_FORMAT_DEVELOPMENT + WAVE_FORMAT_DEVELOPMENT + + + + No documentation. + + + WAVE_FORMAT_PCM + WAVE_FORMAT_PCM + + + + This enumeration defines constants that indicate the role that the system has assigned to an audio endpoint device. + + dd370842 + ERole + ERole + + + + Games, system notification sounds, and voice commands + + + + + Music, movies, narration, and live music recording. + + + + + Voice communications (talking to another person). + + + + + A FourCC descriptor. + + + + + Empty FourCC. + + + + + Initializes a new instance of the struct. + + The fourCC value as a string . + + + + Initializes a new instance of the struct. + + The byte1. + The byte2. + The byte3. + The byte4. + + + + Initializes a new instance of the struct. + + The fourCC value as an uint. + + + + Initializes a new instance of the struct. + + The fourCC value as an int. + + + + Performs an implicit conversion from to . + + The d. + + The result of the conversion. + + + + + Performs an implicit conversion from to . + + The d. + + The result of the conversion. + + + + + Performs an implicit conversion from to . + + The d. + + The result of the conversion. + + + + + Performs an implicit conversion from to . + + The d. + + The result of the conversion. + + + + + Performs an implicit conversion from to . + + The d. + + The result of the conversion. + + + + + Performs an implicit conversion from to . + + The d. + + The result of the conversion. + + + + + Provides a custom string representation of the FourCC descriptor. + + + The general format "G" is equivalent to the parameterless. + . The special format "I" returns a + string representation which can be used to construct a Media + Foundation format GUID. It is equivalent to "X08". + + The format descriptor, which can be "G" (empty + or null is equivalent to "G"), "I" or any valid standard + number format. + The format provider for formatting + numbers. + The requested string representation. + In case of + is not "G", "I" or a valid number + format. + + + + The namespace contains common structures and helper classes for audio/video processing. + + + + + A chunk of a Riff stream. + + + + + Initializes a new instance of the class. + + The stream holding this chunk + The type. + The size. + The data offset. + if set to true [is list]. + if set to true [is header]. + + + + Gets the type. + + + + + Gets the of this chunk. + + + + + Gets the size of the data embedded by this chunk. + + + + + Gets the position of the data embedded by this chunk relative to the stream. + + + + + Gets or sets a value indicating whether this instance is a list chunk. + + + true if this instance is list; otherwise, false. + + + + + Gets a value indicating whether this instance is a header chunk. + + + true if this instance is a header; otherwise, false. + + + + + Gets the raw data contained in this chunk. + + + + + + Gets structured data contained in this chunk. + + The type of the data to return + + A structure filled with the chunk data + + + + + Gets structured data contained in this chunk. + + The type of the data to return + A structure filled with the chunk data + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Riff chunk enumerator. + + + + + Initializes a new instance of the class. + + The input. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Advances the enumerator to the next element of the collection. + + + true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection. + + + The collection was modified after the enumerator was created. + + + + + Gets the current stack of chunks. + + + + + Sets the enumerator to its initial position, which is before the first element in the collection. + + + The collection was modified after the enumerator was created. + + + + + Ascends to the outer chunk. + + + + + Descends to the current chunk. + + + + + Gets all chunks. + + + + + + Gets the element in the collection at the current position of the enumerator. + + + The element in the collection at the current position of the enumerator. + + + + + Returns an enumerator that iterates through the collection. + + + A that can be used to iterate through the collection. + + + + + Generic sound input stream supporting WAV (Pcm,Float), ADPCM, xWMA sound file formats. + + + + + Initializes a new instance of the class. + + The sound stream. + + + + Initializes the specified stream. + + The stream. + + + + Gets the decoded packets info. + + + This property is only valid for XWMA stream. + + + + Gets the wave format of this instance. + + + + + Converts this stream to a DataStream by loading all the data from the source stream. + + + + + + Performs an implicit conversion from to . + + The stream. + + The result of the conversion. + + + + + When overridden in a derived class, gets a value indicating whether the current stream supports reading. + + true if the stream supports reading; otherwise, false. + + + + + When overridden in a derived class, gets a value indicating whether the current stream supports seeking. + + true if the stream supports seeking; otherwise, false. + + + + + When overridden in a derived class, gets a value indicating whether the current stream supports writing. + + true if the stream supports writing; otherwise, false. + + + + + When overridden in a derived class, gets or sets the position within the current stream. + + + The current position within the stream. + + + + An I/O error occurs. + + + + The stream does not support seeking. + + + + Methods were called after the stream was closed. + + + + + When overridden in a derived class, clears all buffers for this stream and causes any buffered data to be written to the underlying device. + + + An I/O error occurs. + + + + + When overridden in a derived class, sets the position within the current stream. + + A byte offset relative to the parameter. + A value of type indicating the reference point used to obtain the new position. + + The new position within the current stream. + + + An I/O error occurs. + + + + The stream does not support seeking, such as if the stream is constructed from a pipe or console output. + + + + Methods were called after the stream was closed. + + + + + When overridden in a derived class, sets the length of the current stream. + + The desired length of the current stream in bytes. + + An I/O error occurs. + + + + The stream does not support both writing and seeking, such as if the stream is constructed from a pipe or console output. + + + + Methods were called after the stream was closed. + + + + + When overridden in a derived class, reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + An array of bytes. When this method returns, the buffer contains the specified byte array with the values between and ( + - 1) replaced by the bytes read from the current source. + The zero-based byte offset in at which to begin storing the data read from the current stream. + The maximum number of bytes to be read from the current stream. + + The total number of bytes read into the buffer. This can be less than the number of bytes requested if that many bytes are not currently available, or zero (0) if the end of the stream has been reached. + + + The sum of and is larger than the buffer length. + + + + is null. + + + + or is negative. + + + + An I/O error occurs. + + + + The stream does not support reading. + + + + Methods were called after the stream was closed. + + + + + When overridden in a derived class, gets the length in bytes of the stream. + + + A long value representing the length of the stream in bytes. + + + + A class derived from Stream does not support seeking. + + + + Methods were called after the stream was closed. + + + + + When overridden in a derived class, writes a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + An array of bytes. This method copies bytes from to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + + The sum of and is greater than the buffer length. + + + + is null. + + + + or is negative. + + + + An I/O error occurs. + + + + The stream does not support writing. + + + + Methods were called after the stream was closed. + + + + + Helper class for Speaker mask. + + + + + Counts the channels from a speaker mask. + + The speakers mask. + + + + + Represents a Wave file format + + WAVEFORMATEX + + + format type + + + number of channels + + + sample rate + + + for buffer estimation + + + block size of data + + + number of bits per sample of mono data + + + number of following bytes + + + number of following bytes + + + format type + + + number of channels + + + sample rate + + + for buffer estimation + + + block size of data + + + number of bits per sample of mono data + + + + Creates a new PCM 44.1Khz stereo 16 bit format + + + + + Creates a new 16 bit wave format with the specified sample + rate and channel count + + Sample Rate + Number of channels + + + + Gets the size of a wave buffer equivalent to the latency in milliseconds. + + The milliseconds. + + + + + Creates a WaveFormat with custom members + + The encoding + Sample Rate + Number of channels + Average Bytes Per Second + Block Align + Bits Per Sample + + + + + Creates an A-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a Mu-law wave format + + Sample Rate + Number of Channels + Wave Format + + + + Creates a new PCM format with the specified sample rate, bit depth and channels + + + + + Creates a new 32 bit IEEE floating point wave format + + sample rate + number of channels + + + + Helper function to retrieve a WaveFormat structure from a pointer + + Buffer to the WaveFormat rawdata + WaveFormat structure + + + + Helper function to retrieve a WaveFormat structure from a pointer + + Pointer to the WaveFormat rawdata + WaveFormat structure + + + + Helper function to marshal WaveFormat to an IntPtr + + WaveFormat + IntPtr to WaveFormat structure (needs to be freed by callee) + + + + Reads a new WaveFormat object from a stream + + A binary reader that wraps the stream + + + + Reports this WaveFormat as a string + + String describing the wave format + + + + Compares with another WaveFormat object + + Object to compare to + True if the objects are the same + + + + Provides a hash code for this WaveFormat + + A hash code + + + + Returns the encoding type used + + + + + Returns the number of channels (1=mono,2=stereo etc) + + + + + Returns the sample rate (samples per second) + + + + + Returns the average number of bytes used per second + + + + + Returns the block alignment + + + + + Returns the number of bits per sample (usually 16 or 32, sometimes 24 or 8) + Can be 0 for some codecs + + + + + Returns the number of extra bytes used by this waveformat. Often 0, + except for compressed formats which store extra data after the WAVEFORMATEX header + + + + + WaveFormatAdpcm + http://msdn.microsoft.com/en-us/library/microsoft.directx_sdk.xaudio2.adpcmwaveformat%28v=vs.85%29.aspx + Additional documentation: http://icculus.org/SDL_sound/downloads/external_documentation/wavecomp.htm + + WAVEFORMATADPCM + + + + Parameterless constructor for marshalling + + + + + Creates a new WaveFormatAdpcm for MicrosoftADPCM + + The rate. + The channels. + The block align. If 0, then 256 for [0, 11KHz], 512 for ]11KHz, 22Khz], 1024 for ]22Khz, +inf] + + + + Gets or sets the samples per block. + + + The samples per block. + + + + + Gets or sets the coefficients. + + + The coefficients. + + + + + Gets or sets the coefficients. + + + The coefficients. + + + + + WaveFormatExtensible + http://www.microsoft.com/whdc/device/audio/multichaud.mspx + + WAVEFORMATEXTENSIBLE + + + + Guid of the subformat. + + + + + Speaker configuration + + + + + Parameterless constructor for marshalling + + + + + Creates a new WaveFormatExtensible for PCM or IEEE + + + + + String representation + + + + + Use this interface to tag a class that is called by an unmanaged + object. A class must dispose the + on dispose. + + + + + Gets or sets the unmanaged shadow callback. + + The unmanaged shadow callback. + + This property is set whenever this instance has an unmanaged shadow callback + registered. This callback must be disposed when disposing this instance. + + + + + IInspectable used for a C# callback object exposed as WinRT Component. + + br205821 + IInspectable + IInspectable + + + + Internal IInspectable Callback + + + + + Return a pointer to the unmanaged version of this callback. + + The callback. + A pointer to a shadow c++ callback + + + * [out] */ __RPC__out ULONG *iidCount, + * [size_is][size_is][out] */ __RPC__deref_out_ecount_full_opt(*iidCount) IID **iids) = 0; + + + HRESULT ID2D1InspectableProvider::SetComputeInfo([In] ID2D1ComputeInfo* computeInfo) + + + + The implementation of this class is filled by InteropBuilder post-building-event. + + + + + Provides a fixed statement working with generics. + + + The data. + A fixed pointer to the referenced structure + + This is the only function in this class that is inlined in order to inline the fixed statement correctly. + + + + + The namespace contains helper classes in replacement of some classes in useful under Windows 8 Metro. + + + + + Windows File Helper. + + + + + Checks if the specified file path exists. + + The file path. + true if the specified file path exists, false otherwise + + + + Opens a binary file, reads the contents of the file into a byte array, and then closes the file. + + The file to open for reading. + A byte array containing the contents of the file. + + + + Opens a text file, reads all lines of the file, and then closes the file. + + The file to open for reading. + A string containing all lines of the file. + + + + Opens a text file, reads all lines of the file, and then closes the file. + + The file to open for reading. + The encoding. + The sharing. + A string containing all lines of the file. + + + + Gets the last write time access for the specified path. + + The path. + The last write time access + + + + Reads to a file. + + The file handle. + The buffer. + The number of bytes to read. + The number of bytes read. + The overlapped. + A Result + ReadFile + + + + Writes to a file. + + The file handle. + The buffer. + The number of bytes to read. + The number of bytes read. + The overlapped. + A Result + WriteFile + + + + Sets the file pointer. + + The handle. + The distance to move. + The distance to move high. + The seek origin. + + SetFilePointerEx + + + + Sets the end of file. + + The handle. + + SetEndOfFile + + + + Creates the file. + + Name of the file. + The desired access. + The share mode. + The security attributes. + The creation disposition. + The flags and attributes. + The template file. + A handle to the created file. IntPtr.Zero if failed. + CreateFile + + + + Gets the size of the file. + + The handle. + Size of the file. + + GetFileSizeEx + + + + Native File access flags. + + + + + Read access. + + + + + Write access. + + + + + Read/Write Access, + + + + + Execute access. + + + + + All access + + + + + Native file creation disposition. + + + + + Creates a new file. The function fails if a specified file exists. + + + + + Creates a new file, always. + If a file exists, the function overwrites the file, clears the existing attributes, combines the specified file attributes, + and flags with FILE_ATTRIBUTE_ARCHIVE, but does not set the security descriptor that the SECURITY_ATTRIBUTES structure specifies. + + + + + Opens a file. The function fails if the file does not exist. + + + + + Opens a file, always. + If a file does not exist, the function creates a file as if dwCreationDisposition is CREATE_NEW. + + + + + Opens a file and truncates it so that its size is 0 (zero) bytes. The function fails if the file does not exist. + The calling process must open the file with the GENERIC_WRITE access right. + + + + + Native file attributes. + + + + + None attribute. + + + + + Read only attribute. + + + + + Hidden attribute. + + + + + System attribute. + + + + + Directory attribute. + + + + + Archive attribute. + + + + + Device attribute. + + + + + Normal attribute. + + + + + Temporary attribute. + + + + + Sparse file attribute. + + + + + ReparsePoint attribute. + + + + + Compressed attribute. + + + + + Offline attribute. + + + + + Not content indexed attribute. + + + + + Encrypted attribute. + + + + + Write through attribute. + + + + + Overlapped attribute. + + + + + No buffering attribute. + + + + + Random access attribute. + + + + + Sequential scan attribute. + + + + + Delete on close attribute. + + + + + Backup semantics attribute. + + + + + Post semantics attribute. + + + + + Open reparse point attribute. + + + + + Open no recall attribute. + + + + + First pipe instance attribute. + + + + + Native file share. + + + + + None flag. + + + + + Enables subsequent open operations on an object to request read access. + Otherwise, other processes cannot open the object if they request read access. + If this flag is not specified, but the object has been opened for read access, the function fails. + + + + + Enables subsequent open operations on an object to request write access. + Otherwise, other processes cannot open the object if they request write access. + If this flag is not specified, but the object has been opened for write access, the function fails. + + + + + Read and Write flags. + + + + + Enables subsequent open operations on an object to request delete access. + Otherwise, other processes cannot open the object if they request delete access. + If this flag is not specified, but the object has been opened for delete access, the function fails. + + + + + Windows File Helper. + + + + + Initializes a new instance of the class. + + Name of the file. + The file mode. + The access mode. + The share mode. + + + + + + + + + + + + + + + + Reads a block of bytes from the stream and writes the data in a given buffer. + + When this method returns, contains the specified buffer with the values between offset and (offset + count - 1) replaced by the bytes read from the current source. + The byte offset in array at which the read bytes will be placed. + The maximum number of bytes to read. + array is null. + The total number of bytes read into the buffer. This might be less than the number of bytes requested if that number of bytes are not currently available, or zero if the end of the stream is reached. + + + + + + + Writes a block of bytes to this stream using data from a buffer. + + The buffer containing data to write to the stream. + The zero-based byte offset in buffer at which to begin copying bytes to the current stream. + The number of bytes to be written to the current stream. + + + + + + + + + + + + + + + + + + + Base interface for Component Object Model (COM). + + + + + Queries the supported COM interface on this instance. + + The guid of the interface. + The output COM object reference. + If successful, + + + + Increments the reference count for an interface on this instance. + + The method returns the new reference count. + + + + Decrements the reference count for an interface on this instance. + + The method returns the new reference count. + + + + A boolean value stored on 4 bytes (instead of 1 in .NET). + + + + + Initializes a new instance of the class. + + if set to true [bool value]. + + + + Indicates whether this instance and a specified object are equal. + + The other. + true if and this instance are the same type and represent the same value; otherwise, false. + + + + Implements the ==. + + The left. + The right. + The result of the operator. + + + + Implements the !=. + + The left. + The right. + The result of the operator. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Interop type for a Bool4 (4 ints). + + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + The W component of the vector. + + + + + Interop type for a Rectangle (4 ints). + + + + + Initializes a new instance of the struct. + + The x. + The y. + The width. + The height. + + + + The left position. + + + + + The top position. + + + + + The right position + + + + + The bottom position. + + + + + Interop type for a Color3 (RGB, 3 floats). + + + + + Initializes a new instance of the struct. + + The r. + The g. + The b. + + + + The red component of the color. + + + + + The green component of the color. + + + + + The blue component of the color. + + + + + Interop type for a Color4 (RGBA, 4 floats). + + + + + Initializes a new instance of the struct. + + The r. + The g. + The b. + A. + + + + The red component of the color. + + + + + The green component of the color. + + + + + The blue component of the color. + + + + + The alpha component of the color. + + + + + Interop type for a ColorBGRA (BGRA, 4 bytes). + + + + + Initializes a new instance of the struct. + + The b. + The g. + The r. + A. + + + + The blue component of the color. + + + + + The green component of the color. + + + + + The red component of the color. + + + + + The alpha component of the color. + + + + + Interop type for a Int3 (3 ints). + + + + + Initializes a new instance of the struct. + + The X. + The y. + The z. + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + Interop type for a Int4 (4 ints). + + + + + Initializes a new instance of the struct. + + The X. + The y. + The z. + The w. + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + The W component of the vector. + + + + + Interop type for a float4x4 (16 floats). + + + + + Value at row 1 column 1 of the matrix. + + + + + Value at row 1 column 2 of the matrix. + + + + + Value at row 1 column 3 of the matrix. + + + + + Value at row 1 column 4 of the matrix. + + + + + Value at row 2 column 1 of the matrix. + + + + + Value at row 2 column 2 of the matrix. + + + + + Value at row 2 column 3 of the matrix. + + + + + Value at row 2 column 4 of the matrix. + + + + + Value at row 3 column 1 of the matrix. + + + + + Value at row 3 column 2 of the matrix. + + + + + Value at row 3 column 3 of the matrix. + + + + + Value at row 3 column 4 of the matrix. + + + + + Value at row 4 column 1 of the matrix. + + + + + Value at row 4 column 2 of the matrix. + + + + + Value at row 4 column 3 of the matrix. + + + + + Value at row 4 column 4 of the matrix. + + + + + Interop type for a float3x2 (6 floats). + + + + + Initializes a new instance of the struct. + + The m11 value. + The m12 value. + The m21 value. + The m22 value. + The m31 value. + The m32 value. + + + + Element (1,1) + + + + + Element (1,2) + + + + + Element (2,1) + + + + + Element (2,2) + + + + + Element (3,1) + + + + + Element (3,2) + + + + + Interop type for a float4x3 (12 floats). + + + + + Value at row 1 column 1. + + + + + Value at row 1 column 2. + + + + + Value at row 1 column 3. + + + + + Value at row 2 column 1. + + + + + Value at row 2 column 2. + + + + + Value at row 2 column 3. + + + + + Value at row 3 column 1. + + + + + Value at row 3 column 2. + + + + + Value at row 3 column 3. + + + + + Value at row 4 column 1. + + + + + Value at row 4 column 2. + + + + + Value at row 4 column 3. + + + + + Interop type for a float5x4 (20 floats). + + + + + Value at row 1 column 1. + + + + + Value at row 1 column 2. + + + + + Value at row 1 column 3. + + + + + Value at row 1 column 4. + + + + + Value at row 2 column 1. + + + + + Value at row 2 column 2. + + + + + Value at row 2 column 3. + + + + + Value at row 2 column 4. + + + + + Value at row 3 column 1. + + + + + Value at row 3 column 2. + + + + + Value at row 3 column 3. + + + + + Value at row 3 column 4. + + + + + Value at row 4 column 1. + + + + + Value at row 4 column 2. + + + + + Value at row 4 column 3. + + + + + Value at row 4 column 4. + + + + + Value at row 5 column 1. + + + + + Value at row 5 column 2. + + + + + Value at row 5 column 3. + + + + + Value at row 5 column 4. + + + + + Interop type for a Plane (4 floats). + + + + + Initializes a new instance of the struct. + + The plane normal. + The plance distance. + + + + The normal vector of the plane. + + + + + The distance of the plane along its normal from the origin. + + + + + Interop type for a Point (2 ints). + + + + + Initializes a new instance of the struct. + + The X. + The y. + + + + Left coordinate. + + + + + Top coordinate. + + + + + Interop type for a Quaternion (4 floats). + + + + + Initializes a new instance of the struct. + + The X. + The y. + The z. + The w. + + + + The X component of the quaternion. + + + + + The Y component of the quaternion. + + + + + The Z component of the quaternion. + + + + + The W component of the quaternion. + + + + + Interop type for a Rectangle (4 ints). + + + + + The left position. + + + + + The top position. + + + + + The right position + + + + + The bottom position. + + + + + Gets a value indicating whether this instance is empty. + + true if this instance is empty; otherwise, false. + + + + Interop type for a RectangleF (4 floats). + + + + + Initializes a new instance of the struct. + + The left. + The top. + The right. + The bottom. + + + + The left position. + + + + + The top position. + + + + + The right position + + + + + The bottom position. + + + + + Interop type for a float2 (2 floats). + + + + + Initializes a new instance of the struct. + + The X. + The y. + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + Interop type for a float3 (3 floats). + + + + + Initializes a new instance of the struct. + + The X. + The y. + The z. + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + Interop type for a float4 (4 floats). + + + + + Initializes a new instance of the struct. + + The X. + The y. + The z. + The w. + + + + The X component of the vector. + + + + + The Y component of the vector. + + + + + The Z component of the vector. + + + + + The W component of the vector. + + + + + Interop type for a ViewPort (4 ints + 2 floats). + + + + + Position of the pixel coordinate of the upper-left corner of the viewport. + + + + + Position of the pixel coordinate of the upper-left corner of the viewport. + + + + + Width dimension of the viewport. + + + + + Height dimension of the viewport. + + + + + Gets or sets the minimum depth of the clip volume. + + + + + Gets or sets the maximum depth of the clip volume. + + + + + Interop type for a ViewPort (6 floats). + + + + + Position of the pixel coordinate of the upper-left corner of the viewport. + + + + + Position of the pixel coordinate of the upper-left corner of the viewport. + + + + + Width dimension of the viewport. + + + + + Height dimension of the viewport. + + + + + Gets or sets the minimum depth of the clip volume. + + + + + Gets or sets the maximum depth of the clip volume. + + + + + Internal class used to initialize this assembly. + + + + + Initializes this assembly. + + + This method is called when the assembly is loaded. + + + + + The namespace contains fundamental classes used by SharpDX. + + + + + The maximum number of bytes to which a pointer can point. Use for a count that must span the full range of a pointer. + Equivalent to Windows type SIZE_T. + + + + + An empty pointer size initialized to zero. + + + + + Initializes a new instance of the struct. + + The size. + + + + Default constructor. + + value to set + + + + Default constructor. + + value to set + + + + Default constructor. + + value to set + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Adds two sizes. + + The first size to add. + The second size to add. + The sum of the two sizes. + + + + Assert a size (return it unchanged). + + The size to assert (unchanged). + The asserted (unchanged) size. + + + + Subtracts two sizes. + + The first size to subtract. + The second size to subtract. + The difference of the two sizes. + + + + Reverses the direction of a given size. + + The size to negate. + A size facing in the opposite direction. + + + + Scales a size by the given value. + + The size to scale. + The amount by which to scale the size. + The scaled size. + + + + Scales a size by the given value. + + The size to scale. + The amount by which to scale the size. + The scaled size. + + + + Scales a size by the given value. + + The size to scale. + The amount by which to scale the size. + The scaled size. + + + + Tests for equality between two objects. + + The first value to compare. + The second value to compare. + true if has the same value as ; otherwise, false. + + + + Tests for inequality between two objects. + + The first value to compare. + The second value to compare. + true if has a different value than ; otherwise, false. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from void* to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to void*. + + The value. + The result of the conversion. + + + + Result structure for COM methods. + + + + + Initializes a new instance of the struct. + + The HRESULT error code. + + + + Initializes a new instance of the struct. + + The HRESULT error code. + + + + Gets the HRESULT error code. + + The HRESULT error code. + + + + Gets a value indicating whether this is success. + + true if success; otherwise, false. + + + + Gets a value indicating whether this is failure. + + true if failure; otherwise, false. + + + + Performs an implicit conversion from to . + + The result. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The result. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The result. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The result. + The result of the conversion. + + + + Indicates whether the current object is equal to another object of the same type. + + An object to compare with this object. + + true if the current object is equal to the parameter; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Implements the operator ==. + + The left. + The right. + The result of the operator. + + + + Implements the operator !=. + + The left. + The right. + The result of the operator. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Checks the error. + + + + + Gets a from an . + + The exception + The associated result code + + + + Gets the result from win32 error. + + The win32Error. + A HRESULT. + + + + Result code Ok + + S_OK + + + + Result code False + + S_FALSE + + + + Result code Abort + + E_ABORT + + + + Result code AccessDenied + + E_ACCESSDENIED + + + + Result code Fail + + E_FAIL + + + + Result code Handle + + E_HANDLE + + + + Result code invalid argument + + E_INVALIDARG + + + + Result code no interface + + E_NOINTERFACE + + + + Result code not implemented + + E_NOTIMPL + + + + Result code out of memory + + E_OUTOFMEMORY + + + + Result code Invalid pointer + + E_POINTER + + + + Unexpected failure + + E_UNEXPECTED + + + + Result of a wait abandonned. + + WAIT_ABANDONED + + + + Result of a wait timeout. + + WAIT_TIMEOUT + + + + The data necessary to complete this operation is not yet available. + + WAIT_TIMEOUT + + + + Descriptor used to provide detailed message for a particular . + + + + + Initializes a new instance of the class. + + The HRESULT error code. + The module (ex: SharpDX.Direct2D1). + The API code (ex: D2D1_ERR_...). + The description of the result code if any. + + + + Gets the result. + + + + + Gets the HRESULT error code. + + The HRESULT error code. + + + + Gets the module (ex: SharpDX.Direct2D1) + + + + + Gets the native API code (ex: D2D1_ERR_ ...) + + + + + Gets the API code (ex: DeviceRemoved ...) + + + + + Gets the description of the result code if any. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + + + + + + + Performs an implicit conversion from to . + + The result. + + The result of the conversion. + + + + + Performs an implicit conversion from to . + + The result. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The result. + The result of the conversion. + + + + Implements the operator ==. + + The left. + The right. + The result of the operator. + + + + Implements the operator !=. + + The left. + The right. + The result of the operator. + + + + Registers a provider. + + Type of the descriptors provider. + + Providers are usually registered at module init when SharpDX assemblies are loaded. + + + + + Finds the specified result descriptor. + + The result code. + A descriptor for the specified result + + + + Shadow attribute used to associate a COM callbackable interface to its Shadow implementation. + + + + + Gets the value. + + + + + Initializes a new instance of class. + + Type of the associated shadow + + + + Get ShadowAttribute from type. + + Type to get shadow attribute + The associated shadow attribute or null if no shadow attribute were found + + + + The ShadowContainer is the main container used internally to keep references to all native COM/C++ callbacks. + It is stored in the property . + + + + + The base class for errors that occur in SharpDX. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The result code that caused this exception. + + + + Initializes a new instance of the class. + + The result descriptor. + + + + Initializes a new instance of the class. + + The error result code. + The message describing the exception. + + + + Initializes a new instance of the class. + + The error result code. + The message describing the exception. + formatting arguments + + + + Initializes a new instance of the class. + + The message describing the exception. + formatting arguments + + + + Initializes a new instance of the class. + + The message describing the exception. + The exception that caused this exception. + formatting arguments + + + + Gets the Result code for the exception. This value indicates + the specific type of failure that occurred within SharpDX. + + + + + Gets the Result code for the exception. This value indicates + the specific type of failure that occurred within SharpDX. + + + + + Structure using the same layout than . + + + + + A zero size with (width, height) = (0,0) + + + + + A zero size with (width, height) = (0,0) + + + + + Initializes a new instance of the struct. + + The x. + The y. + + + + Width. + + + + + Height. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + + + + + + + Implements the operator ==. + + The left. + The right. + + The result of the operator. + + + + + Implements the operator !=. + + The left. + The right. + + The result of the operator. + + + + + Structure using the same layout than . + + + + + A zero size with (width, height) = (0,0) + + + + + A zero size with (width, height) = (0,0) + + + + + Initializes a new instance of the struct. + + The x. + The y. + + + + Width. + + + + + Height. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + + + + + + + Implements the operator ==. + + The left. + The right. + + The result of the operator. + + + + + Implements the operator !=. + + The left. + The right. + + The result of the operator. + + + + + + + + A general purpose tag attribute. + + + + + Gets the value. + + + + + Initializes a new instance of class. + + + + + + Overrides in order to provide for Win8 Modern App. + + + + + The namespace provides missing ASCIIEncoding for Win8 Modern platform. + + + + + A Delegate to get a property value from an object. + + Type of the getter. + The obj to get the property from. + The value to get. + + + + A Delegate to set a property value to an object. + + Type of the setter. + The obj to set the property from. + The value to set. + + + + Utility class. + + + + + Native memcpy. + + The destination memory location. + The source memory location. + The byte count. + + + + Compares two block of memory. + + The pointer to compare from. + The pointer to compare against. + The size in bytes to compare. + true if the buffers are equivalent; otherwise, false. + + + + Clears the memory. + + The dest. + The value. + The size in bytes to clear. + + + + Return the sizeof a struct from a CLR. Equivalent to sizeof operator but works on generics too. + + A struct to evaluate. + Size of this struct. + + + + Return the sizeof an array of struct. Equivalent to sizeof operator but works on generics too. + + A struct. + The array of struct to evaluate. + Size in bytes of this array of struct. + + + + Pins the specified source and call an action with the pinned pointer. + + The type of the structure to pin. + The source. + The pin action to perform on the pinned pointer. + + + + Pins the specified source and call an action with the pinned pointer. + + The type of the structure to pin. + The source array. + The pin action to perform on the pinned pointer. + + + + Converts a structured array to an equivalent byte array. + + The type of source array. + The source array. + Converted byte array. + + + + Swaps the value between two references. + + Type of a data to swap. + The left value. + The right value. + + + + Reads the specified T data from a memory location. + + Type of a data to read. + Memory location to read from. + The data read from the memory location. + + + + Reads the specified T data from a memory location. + + Type of a data to read. + Memory location to read from. + The data write to. + source pointer + sizeof(T). + + + + Reads the specified T data from a memory location. + + Type of a data to read. + Memory location to read from. + The data write to. + source pointer + sizeof(T). + + + + Reads the specified T data from a memory location. + + Type of a data to read. + Memory location to read from. + The data write to. + source pointer + sizeof(T). + + + + Reads the specified array T[] data from a memory location. + + Type of a data to read. + Memory location to read from. + The data write to. + The offset in the array to write to. + The number of T element to read from the memory location. + source pointer + sizeof(T) * count. + + + + Writes the specified T data to a memory location. + + Type of a data to write. + Memory location to write to. + The data to write. + destination pointer + sizeof(T). + + + + Writes the specified T data to a memory location. + + Type of a data to write. + Memory location to write to. + The data to write. + destination pointer + sizeof(T). + + + + Writes the specified array T[] data to a memory location. + + Type of a data to write. + Memory location to write to. + The array of T data to write. + The offset in the array to read from. + The number of T element to write to the memory location. + destination pointer + sizeof(T) * count. + + + + Converts bool array to integer pointers array. + + The bool array. + The destination array of int pointers. + + + + Converts bool array to array. + + The bool array. + Converted array of . + + + + Converts integer pointer array to bool array. + + The array of integer pointers. + Array size. + Converted array of bool. + + + + Converts array to bool array. + + The array. + Converted array of bool. + + + + Gets the from a type. + + The type. + The guid associated with this type. + + + + Determines whether a given type inherits from a generic type. + + Type of the class to check if it inherits from generic type. + Type of the generic. + true if [is assignable to generic type] [the specified given type]; otherwise, false. + + + + Allocate an aligned memory buffer. + + Size of the buffer to allocate. + Alignment, 16 bytes by default. + A pointer to a buffer aligned. + + To free this buffer, call . + + + + + Allocate an aligned memory buffer and clear it with a specified value (0 by default). + + Size of the buffer to allocate. + Default value used to clear the buffer. + Alignment, 16 bytes by default. + A pointer to a buffer aligned. + + To free this buffer, call . + + + + + Determines whether the specified memory pointer is aligned in memory. + + The memory pointer. + The align. + true if the specified memory pointer is aligned in memory; otherwise, false. + + + + Allocate an aligned memory buffer. + + A pointer to a buffer aligned. + + The buffer must have been allocated with . + + + + + Converts a pointer to a null-terminating string up to maxLength characters to a .Net string. + + The pointer to an ANSI null string. + Maximum length of the string. + The converted string. + + + + Converts a pointer to a null-terminating string up to maxLength characters to a .Net string. + + The pointer to an Unicode null string. + Maximum length of the string. + The converted string. + + + + Copies the contents of a managed String into unmanaged memory, converting into ANSI format as it copies. + + A managed string to be copied. + The address, in unmanaged memory, to where s was copied, or IntPtr.Zero if s is null. + + + + Copies the contents of a managed String into unmanaged memory. + + A managed string to be copied. + The address, in unmanaged memory, to where s was copied, or IntPtr.Zero if s is null. + + + + Copies the contents of a managed String into unmanaged memory using + + A managed string to be copied. + The address, in unmanaged memory, to where s was copied, or IntPtr.Zero if s is null. + + + + Gets the IUnknown from object. Similar to but accept null object + by returning an IntPtr.Zero IUnknown pointer. + + The managed object. + An IUnknown pointer to a managed object. + + + + Gets an object from an IUnknown pointer. Similar to but accept IntPtr.Zero + by returning a null object. + + an IUnknown pointer to a managed object. + The managed object. + + + + String helper join method to display an array of object as a single string. + + The separator. + The array. + A string with array elements separated by the separator. + + + + String helper join method to display an enumerable of object as a single string. + + The separator. + The enumerable. + A string with array elements separated by the separator. + + + + String helper join method to display an enumerable of object as a single string. + + The separator. + The enumerable. + A string with array elements separated by the separator. + + + + Converts a blob to a string. + + A blob. + A string extracted from a blob. + + + + Equivalent to IntPtr.Add method from 3.5+ .NET Framework. + Adds an offset to the value of a pointer. + + A native pointer. + The offset to add (number of bytes). + A new pointer that reflects the addition of offset to pointer. + + + + Read stream to a byte[] buffer. + + Input stream. + A byte[] buffer. + + + + Read stream to a byte[] buffer. + + Input stream. + Length to read. + A byte[] buffer. + + + + Compares two collection, element by elements. + + A "from" enumerator. + A "to" enumerator. + true if lists are identical, false otherwise. + + + + Compares two collection, element by elements. + + A "from" enumerator. + A "to" enumerator. + true if lists are identical; otherwise, false. + + + + Compares two collection, element by elements. + + The collection to compare from. + The collection to compare to. + true if lists are identical (but not necessarily of the same time); otherwise , false. + + + + Gets the custom attribute. + + Type of the custom attribute. + The member info. + if set to true [inherited]. + The custom attribute or null if not found. + + + + Gets the custom attributes. + + Type of the custom attribute. + The member info. + if set to true [inherited]. + The custom attribute or null if not found. + + + + Determines whether fromType can be assigned to toType. + + To type. + From type. + + true if [is assignable from] [the specified to type]; otherwise, false. + + + + + Determines whether the specified type to test is an enum. + + The type to test. + + true if the specified type to test is an enum; otherwise, false. + + + + + Determines whether the specified type to test is a value type. + + The type to test. + + true if the specified type to test is a value type; otherwise, false. + + + + + Builds a fast property getter from a type and a property info. + + Type of the getter. + Type of the custom effect. + The property info to get the value from. + A compiled delegate. + + + + Builds a fast property setter from a type and a property info. + + Type of the setter. + Type of the custom effect. + The property info to set the value to. + A compiled delegate. + + + + Finds an explicit conversion between a source type and a target type. + + Type of the source. + Type of the target. + The method to perform the conversion. null if not found. + + + Determines the concurrency model used for incoming calls to objects created by this thread. This concurrency model can be either apartment-threaded or multi-threaded. + + + + Initializes the thread for apartment-threaded object concurrency. + + + + + Initializes the thread for multi-threaded object concurrency. + + + + + Disables DDE for OLE1 support. + + + + + Trade memory for speed. + + + + + Gets the proc address of a DLL. + + The handle. + The DLL function to import. + If the function was not found. + Pointer to address of the exported function or variable. + + + + Compute a FNV1-modified Hash from Fowler/Noll/Vo Hash improved version. + + Data to compute the hash from. + A hash value. + + + + Safely dispose a reference if not null, and set it to null after dispose. + + The type of COM interface to dispose. + Object to dispose. + + The reference will be set to null after dispose. + + + + + Transforms an to an array of T. + + Type of the element + The enumerable source. + an array of T + + + + Test if there is an element in this enumeration. + + Type of the element + The enumerable source. + true if there is an element in this enumeration, false otherwise + + + + Select elements from an enumeration. + + The type of the T source. + The type of the T result. + The source. + The selector. + A enumeration of selected values + + + + Selects distinct elements from an enumeration. + + The type of the T source. + The source. + The comparer. + A enumeration of selected values + + + + Determines whether the type inherits from the specified type (used to determine a type without using an explicit type instance). + + The type. + Name of the parent type to find in inheritance hierarchy of type. + true if the type inherits from the specified type; otherwise, false. + +
    +
    diff --git a/RenderHookAPI/bin/sharpdx_direct3d11_1_effects_x64.dll b/RenderHookAPI/bin/sharpdx_direct3d11_1_effects_x64.dll new file mode 100644 index 0000000000000000000000000000000000000000..e25ef563e9ab3a20cf16449d3834e2a1174c8b72 GIT binary patch literal 358912 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

    X3(6K(wdT>BG= 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%0A|k2g{zU~R#I8|Im{9Z06NVu!V|k^ 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 literal 0 HcmV?d00001 diff --git a/RenderHookAPI/obj/Debug/Capture.dll b/RenderHookAPI/obj/Debug/Capture.dll index e2e4598205aa36eda61ab92686028bf18f0d5c0b..d533168f01a54fc9b50b6ad3894d02df7390a6b0 100644 GIT binary patch delta 49568 zcmeFa33yb+wl-X~yLT2 zwQAUFSJmDfo0piImzdWqH`M*{#M&E@q^J{X?&oV84m$SrMChg;S z>R6s7#qCqCrHDF3Ph-i~$(<(I_ZF zgs;kIBtzSqGR1JAyDa(UhCSf9riMq<>qBb$JPD$7rs-sCcrBPVHGC9I%MCvV)8>Xy zW4pb@ZdFQEN2ps$H>xF}vjSsKX>_ovJJ?6sBRkl4Hno@UvIQ6~b%-e>U*S@MP9vOB%Q)d#`{&Zb$kfl0V2is+`8fYN-I0{pRJniF~_ zQe8PcnAGH;S$P>~CT=d=$Pz2Y6%*UeBxMrhUW~ZSI~ic~UJg{U0r`fQ+z{y1%OV^l zQy|F9NkCTI6o_?{J2$>#w9%%QcO(4CY_D^wdVhqIPf=ft7#%wa?Kl>KJBp%}R-^9< zwJ36S-ZXFFGn_p&lVYE z%ouh$#EjaNMm5S=7}*59O*ReTdhK2;x>zt{H z&Cul~81mu_UOZmp_Szv;TGZ#9DX!~~#E|5m)0La)*2)>gBy^^-SpC(R#^(xDRwLDGb@e0y8@xzf`DAIf4oa(;#p5Q+U zp6nvKxh}FJ-Ch^zz82h(K>4O7knW}gvO6QvWS5fIGn(dYbP;Em2Mm3R=)P3-Cgy}z z!aqNCvZO3~_^!k~2EI(K^VEiZ2?r%*51OScS0D1!IlmWzM*QZXf&|n&jz8lnkq$cuysyVGY6n)b+!t_Mir9EzhTD#%# zfU((fnVeHD8I)BZPUR*bIu|z$XVGw4%zUYl@+hm-x#2w zNuZrI&VPw$+8T96MzyjIqMTI8;1>y$Y-D)EiGO0;ex^ZW$Ewsb8PTaKRkR*}F+CQF zDI)G38fe>Hf^JY9ng8Ios64AT->CM@stVl%opTj}5BF|XH)eJ2DA=ODn>8rmYATN{ z!kurFyjukcPSWm5@x}UEq0eL;^d5DGVs~9s#%-_(4VoNPvdp(bVpHx=e^=t=ZAg2! ztBKjk8KaT(--f%wZnSy}L6kd5xr4;FLoC~k-n-O^*=~Nf8pu{+cS6xje)_1uW<)5X zZ>Rcnc8+x^xD63um-=mXRvNJoJSunLDm5ZlVK8=6S_$P$4vmtOd(_gLDe3>tZdOOb z=W{ye-;2zCLqF3!&gLz_AMFI8ctH1*N^{H}XZoXwy-giDAqG&fE*Ta<@E zE>SScZQe%#%;KyMwHQtHZN@Nb{%P6!nCdJ@RZgLxkX+pNW{3Hv8Q#ZXiB(jagu5Hz z(!g>f4Q7YM`-D2Fz!m5XV+0r6_7O~)N6af?W9}s8Va<%KqS8Wr6i35YZZ9TT92ULM zXp9z$6${J|tHpsadV;*N8)4CA6zfYHvufp?wlin6Irmv>p4qA|RLnU%QvIc%BqaqM zp`=jHb+@1wjHXL$vZyyC++=ph%09KWa3+6J-CvkudkQt69INuQ`bA+u`hHOF3p5fL zcG>$3v4h00b`Hbx)&gOz+M{Sd)U!~@ZSo(eMLZV0yQCh+IgZ;BjaheN43fYn+K z8Y~t~oDCd=MH49fZ(t>h(!!L)`s1$bC&Cn}#xqI|afIe(nJt^c(A)zM8ORHY#1o1; zxn^rN`eO-YU3l>9F7D%e9%@O+gJa5zB8m04tQ=DRC~n~|sV$u*2M$Awjt()GBKY8+ z)JQYX`wGONxpqwASCOKse-~2{g4ZC({|svgsm&2}VGR*ne0C@y+L#+1WfVn3o0#3? zZPN-dYK63(j!23!UQ~*n8Ic6hf~iHh@#@CTkMKfuSeLwsqtL!6=JdY~Z4`6(kBX~P zIfkqMxFGH+_`hCG-y2}=MBkgFc}r*{|J&l~bokyO>AQkC{O^gY+v7i>zSpI=^X0+$ zlGFasKxDMDhPhCPK#i?}k?Us^OZnF1dRD&g7U#b#2 zPFeDO0*QYLHBYl~hr`G&too3ZQCPLA)4JtHe+pZDN=c1Vk;nU~y0hCH=Vy@HWTW?U z(l7b~NRjlcT2SKQpQ$5CGQ&)k_WRa?=k;|ZnK@s=s_`p;)hm);BdL4?kd&^}RTyhI z+8Sk5zE!{MlNJy*-%*}(04HLJ&2B5j4TL$~&@))N)%#DVqe9wZFQwTP;_!bjxL(N* zAbx_VkPg-Qscy3Uv7?53^AkjcIQ@ZtX$gI{kt3AhCtZyP?u8=HgZK&TA--R5iAESB zudEKc+0nrf@2?OtyE$4$9Q=2VyAy@KfvAuulkyuf{K;8Jza?qAqyG>5^gm8dRay9I zmmN`|ZLt%n6GKsl+FY7dgsXw0E+Zf+)ZsUYtJ5#zY7h09>0)f8QXKf_wWxhnEgF4Z~+=Kx{YlUm?PP*6zQxrSoY ziw#^7a(I&g4YV$RpafMbZU}-;CfR86dLYOYcVl#1R2*){&b_WLPJ^q5m?6ewY(($c zW*8e0m~1l~4qqDOPX~DDDHd*2GLZIWs%LxUck2*Fal>64NvFc83z2jo@(yW_q*Y~l zBt3E=lD__*BdLdNW6YO@s{b5LMHzZHo!TKR`V<)d+i)5X_5Gg@r&Me(oDRmY`a(pY z%!V`mqtr&Jk!&0yo{Dffh^!)nRgT)!`%mHY7>p54pYH986XBHoO*|dk$BlS8txwjU z;^~$?|9?EiT>XDrJVjvnPw{lre=VL;DOxl{Io18C`plr^yg(g1xc4kUV=(fuOZf zGkdvjck+AbvT^@9yqkpM?R{q()JXgnJvGhf;gl+1IA#X_z zT7s*^*Il(&6a?my&gAfyk`B*v%H<~@Lap=@kOg)aLP+lV38G9+e^2eIuV{M-mh3On zwY|mF>c<|yW;gk;VX!GKntId)>~u^fQ=h3A#`~+GLp$5`g`FfzjWX1}fok>8gup<` z0x!dG&{(m3)xex6(N+ zI7qTKiN??*8Yea4>D^&u!;M~SFXd=klug0I-4-1Z6+%J7*14#oDfRE)npUXKR95H% zgcZCtD1UEB&C7`oW@EiIPZOF>Q%$y__yk^VeVlZj&$6bnWM}K4iWw$qut1#?P%X3)|dY0X(r@O zQ45F1j%G`iFR_447VA)*~LuN%*) zYlb^80d@}esC|Z;oT2v6yl|=E&0qw}4W&(_`pNK&;Z?|xsTbu%ghF`^?GDv1TK~|H zdWQoLTcXe?9E^!KRpA+JZnWijPjl=~1#Wl9Fz_+xsCsKq07uK%5>Ww>c6noF3sd zCf!fVw8tzvT^Q|Y-@bVMynXR#8$LHm3T|JdMtWj+M?q##57f@ZW3%f>Phd3JWKcxG zv&Cq@vdD=uEAJSHLl^~@Yeh)JYe7i-V*ybnbK@mM#sTc6FnxB@=qWYujt(XljVIQE z#*1@E)2X9)9!rf>MTd}pqziT;uwuLJ@J#@VHe;jYnCZP#{bpodU?NE@xmjA?aHH=s zO@N6*g+VY$6PQk6FMxk`iw}oHh%U??;>E!amUkg`vlpi^HacFhwWqH@+B;3?jnSd@ zkf>1abiqRHMr8(4(P8$mQgu^ZXkaF>aAps;8||UqSzyX+646`H&LlQ3x)R(GgN>l} z&*{Ai0@NHVHN+n7^^%O`7GT&SZ1irP?xyI-sK_SjyEaDvJ*^EK?R&L>J3X6~VityD zR)@DQsd7WLHfiOdnR7&C7Vlh90n9^S9)hFS38RuC^!@JXP`t}?cpDyGG3qKQ;Dcpo z_fO#MqIn{TGd{LxzDVL^kuADfBwwK90+D>2k~FHJ-S4C1H6pp~f^-8Vu~mh^4Hu-% z!DQ|=i>@VY?wm#Asi#A8r!Q(0*UJ_)iEF*itF?M^hb;07dEZ5g#I^gPfVdVdY8F>T zxAQD&5j<|ub>bSiXtB6j7L8X=*AL=*)r_&lf!omK?R#n)`veCRICmDOlNZhxwWVP? zCRWFlpl=C^3(?LPLvcRo67QwleVwat;DWCka6lVNsVJkQ^(V(sY1J!`}9 z;|?pMsy~d&;h(DR@yS-rvY}guI%xc*Zo~&p zFY6cLrWhe6UtLLN3@1V^RYVQ( zu2&zKP~f^*S6|veEj-wu{x%_v->iBrjfuLtgVITPZ&3$b>hJk1y2;um7o%1B3mFK| z)8e3*9=r(Rr9~KdybFc~v&!J`ZbF68X4QUKY#?tOhHx`@;}$^2^#m>J#9|{fDpV{s zit^h{xBe$nT6(lex!jq{9pWGwD*b^$~#DfTP+2K!Xyg!p( z{kRA5MMe_PiMPtfC%JOOypbhi!x~IMyKFaUOQx8pn2t*(Y!_|n)ir5q_sL126gUj} zCPJMwc?8x>dncDviPcg(R!i~PYRP4H>8qvq3#%n8#4cJbWy2LOp37)IS`!nUfMe$b ze5ljq^5t0i?7!R{pe3}UI8JIL-^I%jdc{JEZM^QoEW}&canz`b)MCwku?Q0tueUF< z5-awLMZpDoO9R3H%gyLYXHbR;K49vrb2CEAQEvh2MH}x|-?}0U>?4LP0r_Ib!b^FQ%%39jr`3w-Me2&_=}s6Q`I|D;N2aIEBp+tM z;Hd6|@*oLPX%_nSQ(4ade9r>B&jIviFM6I-S~VmUO{0$NasGGlIT~Ii|G6*KelwzZ ztvYH()$kW6PY&L@N^COn*3-j<7Th%A-UCqDa%0hr2a%#V{vxj4LzD-?mvGJh7{i4D z$rQt-emf(czpPqk_MGq#?p>Gu6{o>_7H#q#hW+*or_Nph6EADFXW(NfVel%6He=Fm z&xkj8zeS!KQ#hEi7}G37bIOc8#%t=fnel=3FpM&EDBF*&wFMg`v?1?XL{(_`~wGVl8+k-lTq zPmegh+l8feECSM;E|{IGuvo$x+p>eMzK_&vuFB|pi3&U`812G0u4{0ND}poP9CeoF!iD1}Ee;_V zHTUu17P2Yd0d{Oee`5ZV``&X9$PVv6aY6hLqVJKG8vBy=2X$^kPPi7Dfg&`kyBiY2 z=@}5#-9{n<9s_SSRN)Tt_)_c-K!Io|LNbNm2i02Nh=7pFT8tD@vcd-nG}~n_?ohf= zi1qzQnlLY(iu52y;UXyhqfG=w!(W3U%zJFtw7~}qCMe#KE7*DA0oSh!zMApOtB(H{ zOc9M}q{N|=S^G@J`;)q2p8Nkw;G?-kf$wM4G(We9;%J8;+97yqLDRb${$@&zBA4tv zuU5J$?S$u|8~vTjMUY5tz`4!SReBbPh&F@r0i2a!(W49AhM{YYdv{n7G}-x zT5C=O85=S~@$n))e8CaBR)$5bxi)2BC@6N5j!;Kf_oq-IR+t^fR^)Z3 zSnH2R(@}F6xIzAtZ{BeA@oPt=VCQbzK?~1tqsff#qa1d;h#=>D^bCpfMyUCXoigbO zgE_n(mk`-GHZ-@CIl^)?m;v8mMWXa*Bff3JPZ%19r*|~P=X!r{_*3IBMC5@@X?8Kg zrN$Ac(cn%QduM~Xu!&Zqo0`&q`I&Dm_?Tu z1t-bkXD+$^Nhl04jV|73waT9qz=^8O(a;D(A71y`=(i!c{>j1&F`N>jL@$mS@l6>i zM?*&OUFcRLqZgZMn>UUOdXm8yGH4_-hZmc1IwXl-buT(H!_jajd6Y;mp6L~xZAZP3 zI~yJ)xjWJw8q^3yT*FJGh;zqWB#*X`1GT6DyFQ#BU>Az>{Y3Hr+b^b8QY`hNjgDybokh0=aJGU4`Astv?8dO#=->-XkCEwL zeR1l(#Ob~`{*52erglg0l^v@0iposBoS;+V0uV=qwZ-D2V;&Wzf6|2AjV(xUM1;pn zv>YWXSlrnhtFdt5`uCF90@yB+C(sV+Vo@UPq%IaY{Ww+8M0M>Y#`!z7%i2XwKNdKD z&WY{L#UgivABz^Tgb^by`?{%zn)|AmEfbUoCN?yVBD1)Mb0c&CJ>&!Z$IVi(qO-|( zvw1^H(jal8L@}tE`zWPUWaCKcG2DjQxd2Wt63Cc@%DlaJ97O) zOLgUSxx@d*{!md;xXF7nTu^Z0Av2S=uWDGFf?pJ5EFOlR3}ARe8?lnJjl~`>v=NIr z5+MFV5H8tGIGDgL53l96E*|UQ8t{@Y@Hf15c%3>6&;P#O_ju7tck~1VqK8ayVDrg&H&PW`%C% z?b?qOG92dH+EbR>ym)qBRG!O=2u%_#?1>(!)+84~AXX;2XLx{+v1mS~GoBCXp6e%L z4{KjKj*nEYT$&zH2Qh6+n`m#Kj8gAd>foc*$Cus})c}FsQ^v$g@G;~V^{QpLyk6bB zEWwJ_;)7?C{}T0?Wf|r-5jPt`V$^>uOTp{(;^hgE&eat7Bw0)axpAP{vOHF;T5dJd z4AD7{SC!@IR);V(H}+SLE>8?NQLF!TbcnH9D+3B-!OEHjdDb|ym`k8E&a=jej~R9Q zIK3dM;=f`a|2OvP`^)XzsaCC+rhd3W4rnG#M^G0{KU@7Jp>*%}F;;6{YZ~f|c6TpG z>Mse4GFq$(wJ6F&*(e&|fR_Y@#@XG^91ki9C-KEnHj6?7U7%PePt*g zuMS)}3ZL$8S@~L6L<~L{orWAzLr#J^?}q7t&r{I#KLRX{n3(owF#1M&1|z^ovQ?qy zZj2Apz(&6=&GpYf3Bib<-6K-tbO;*^sVL44_}k*5@hqn8u~r^#6PrRmOwIMrL|(i} z==fL zRKkS+MhUY}f?4dZP>kFbi#KXKN_P6uPQ?6p>ICe8d~n^S;G^AK?<{rPs{T=^*rr?w z@LmOA&Q%-L2Uj@;b=c$4VU`wvM8u)+FNXFnd%O@?RF5z0#r972dezXI5(0CmTuFHd zrQ}6wSMOZNaPWZx3!Ht#qIfR}bY%l&&}C91^|jYWBH23+7pakk(>q_2P-uzK;*jhm zlAwhQSv+|pJi%PZ_XFMAvdiJUTFXTbj2P@TpSx+CV*y0s#oZt#IlVY1!)p+wr&_$a z8v@7l)v5A%bR>R=wq|v#lwehNuCCC3{e_I;*I&P{ZvXX{F2M}LufMK=T2j`iUDy1R zU!z{THdW4dlqX&-V$~1&CZ^>-_MZWPyP4&Rt+1J|AD{bH(cbesQJnN;BS(8 zXhY9H75W!D^cToa34mv?8AsArQwT%9KL?Ta6&)Q9X4gjEnA;4OP&N!&|N1e@k)J2yI3P zk4e?hJs}Ju;S$xf(bKIEw&G+&FG{GcN73G;0B0LVfS}Ji@?RFyC5%Ox+hP~0<2Gg| z{W+`f!s%fwl6mXYZ5uuOD)ohpePqo}HE+rdq36B+3vab-Q({3dz;$TIg@Y`+_6>?S z%S8H=x@?o1U#jlhl+{H)yg0Rk!l0JAcdSxv~Y@{FypFe_~?olUgKxT?$x5{kA@Q7@gT~S~h;9@^ymlxd0 z4x#&Hc5qDUz$o@m=>+65hPM^TtZ%2bqFdN4*euHId>3b~%odEv?;^9S`jhs9%&DsL zwqkcO+gwtJm!oScPNCfLgwJ}*?7pH}IhoCghg_X@Tedlw#VVA(<+j2ZsqARQV1tV_ z<(C(Pv+cR{uzyI{pX_!jJClWW+ic2VdmO1Olli30CI{t>UU zRSo;ioXNf_C(HT9RJ=wR)RpkcPJ|WR2q&wBw`b+&utF)7bz*tN-wx@9QnPtC_jpn^!Tk>(QjrOyHkDk_LM*-{3jn)cliyQ zxOc`3Hl(u2BM2ut2=@ql(@5!81`%$kBm6+%@53mals?!Xvt1aERMyio*pSS+kDxwW zP*#Xn6*o>~3sqH*#{B>0Ak# zQj^V-*-MF3++q;syf^EgMfiw|n!E@lbYlm5 zWb<;?Z&-4#-fZtslBA%PZcIIWM<`#cetE}&)T5(m9=sGsGh?8e($^)>Z0kC(yuiWk z9kqXex@g<&a$Y70sc^o#;-R8Fwn%#@^`k ztZ||g>13>1FIM2r<}wSx?VpKe(}XS+qZQg(C_}l7<9SQs`^~W9VtX249DH&MpM6x@& z>@*R}6zmzDWeL_qNmSQB^SQyQMam`P_N1skukF@nw2**L)xbT(12{yMu{ zu+2J~CfL0?o5i>%l5LHxinXIYukhi~sCuILY%}9nj>UJbianyb?@r)H)Sh=IlpbLN z*ptGrYc<(b5JMrg{fX7E*91ExbR*euVY#H>^Sm;3_1z;R<7oAxyOSf1u=%V9r{a4K z_&o238n%;)&)%7kbc9{O%OQ_s*YeNv?qIJG1CK2vyGc72^4{tPJ4*t4hOO^*C7UNb z#i{Z?V%B#H<@2S3f?W;W4{V`ym~TTlk)zjlW2{B`K(M=^BX&wyZintlu#W`WEb=Xu zKIbOR*zrWhjS3Z2*F5wR)!1mS@j1$K?P_SOa)DL!L zN0|7NQb-3`^lp+pD>*vIDt9O3n)m_9BV-drNe85K!TdT?1Un+iUAsFWaD*L_I!W|* znl2edejU+SQaZ6?V4QiQZj0ya%JA*Ly9K@;N$FQ}?gH*hy48}xIwg?gMdg0ry|xE| zT_NXeNZBJuKNGtTxHf7(FeH>L|JDBmV7Ea2Yq{ z9XLOPyEt=&nShst2CTT;T^j~mG};clNfi2e9<}3?H5L*}wHtU)IQMr&TwH=I_qL>% zM>oIK?OgomW=|#I2m@gbBV5i2iv`}y&jrY@X!7?NyW(okytyRbHM;qTLMUewuD0aE ziMJz)fg>YswX|DS<`zRczcb;bIfRSL$mW!F1a?3NqbS$OsII{D2w(S%<{5}vm7 za0S}OL+h^P(Y;|>8%~-38R5l*%#SRGL@P)eIjJ9Ierg2akDg!Pda1n^rg@V6SKMC7 z;Z?Bj7e)Oi*=vxFMvq1_Tffn+Xx6FbQkR{bsU8jay(2!1=K&TeM(#o%q_Y>q49JO^ z4kK&$mB8$n2H-tW3xHRM0eZ|z)jtxUK=RLM!n5Ht#r~zVApKtT^)4f8>%UU;=z8?Z z2eG$M-zbC)9>Noagn6}t5?Go{mPG=Gb*J>D!u1+~vx);G+E7inQs9mPN^caH zBifWAFfxJUVFJ@caSnlHX(TTYcz+(HpAmSwz~iD14hVFLcBcv)kxG_RQf~?1GErpq z3S2F`J|H@LufT!nWSS??FWP;Tz+ZDn{-MC}qLYUU+?_@8^#Xk|rN;|=v^S+&Iuq^@ zxCs~--E23J$R@D7l+sfLjuJRc$cGDT6ZomXI5AiLFp&NC!s$=64i}xAA@Cki21a_lx0?o;yxFZ4|75KR*^r*n~xm3Y2fsF!>jkzT_s~;@f3hkP~gi)gid)59V`fFtA@-wh6R}B3ebd+?-;jAfw$p+hDp_A#Csv+6NK7 z*M~5^lyHfVWQg?LVI-*=N%-49!i6=2rNU-a4@wWP5snRr%jd!0QETPd6%VOB~@!fpaaCZq_iC(rF^spD{F2sKyU6{3C5Ad=4CxUbPgV-04 zVX;Ek;32dRB7Cn8VSFj!5+TVD>AS;7Qa6(Dw}FHUYY0n)&8i-h9$+IJEAVq+69^NT z2ah4e*P`fkB18AiBsm}?R|`qx5R&vsCHzcak&tvMA<08&ggb@g$-$Iv>O{EGNqCDu zLmj2p2^YtU>URf(;tfGIiOPQLPDYoAD!FiOztBz>t;rPfCefN*LVi}*7mcA@dqfG- zg-y0-z!D*;5|ZDATZO{)qXN^01Ss21;rmA6`z~R$ryI$)#1XC(IM+hyW(~#Aq={UI za!Ec=I5g2nX|KQs1Wp!h{Yqe?z|o=^<)UHNmA*jp{}UlvA=;5F{CZsAT2Vojz+<9) z#uTbRDkEG_O}Kmjp|ON8Qpl&4Q#w`j>(^P7{y^YZiP9wk4;Q|GY4}e}L#%%$hzZy} z4PO$|@OX!5_yMvlRtOtBgadmJPBapF1wJ5f@<@{G68M$CMuDSiNM2q_c%8s!gk(i` zNCM3-(xv$wfl~!$$CD&EmGE(aYttxQCGgl7N*hxMr82^AY6(-FgbS((mk%H`mJmh? zo6CiKu7xDc8pcvOaJY~zQ_BhWbR+C0yxtN=>6O5m=J&+?T5(Z7eI)wnA3$xb{HWsx zq&=O^151kAfJ;LR3HU-{lm&Q;ISiO?ivrF!lYFMY(*d&+D;bUgeq#oa|~!FtY2>D@Jy-b_FC_4@Hfn^r%tP2k)4}0=Q)5Q8gQ? z2(?20t^(>_E%UdPlsUeRdaf$@Cg4>r6*$>-8*t>Xdx0G*dkFnn(>$*Gg9$awBLy}O zd>A%QVNfvt6NN7wow#-IV^Fu{l0yrHTYoN&vyJl8u&K#?9@w+w5b&@Vc^h(D9_<UaS9#rwVY$*{N46#!%M$puIGMakpd=&NEEISR^ zGZj=?;IF%xUJ*Ue)!RzUC}MncC~$|}4qO~TUe6Y|8Cx*?nc)&DXzmaPv|6FsHl`uk z14(_juMK=^tfj4mey_E9MPN*ZBP9bq>i`A|sC39NOK zJYg8&v&hBqN9$;q-m??ti}XmOWz2)#E}4DYe;;}=3R`iReTqGk%pR_ye!adINj~l$ z$VrshZVya@YrR4gy;vb^@DMgz1jZ8173mL$QTjFq;qM}SSr1A_rU^+Z;Q}k+=7EHD zm4x@y5Dx53_|Awz)N4%c62Rr-{-wa})xCiyuyd1Hh16eD3+<4`ajOJsl3tcy&~*iggtxkWu~d5){w=XQP&S`NU1tZ&u2nyMGMl%m5lonWy#0Yky&KkiY*+Ib$@^!XI@dF3ScPQ-p#Gd$!U;B3`>^Im& zv2%Kvy$0W$7|qV>Y{=j(U`Cw&puV{6W!nRZF)S}bP|L>H`xBjPfM5q%zJl4uuF-Vt zO1w97vd)=g`5FJ(Lu`m(2f<>&aFmaKR48Y0?52y@twHusVjO!g$o3^pjc1o-iHz)6 zw|$9;>}7>m3roxA%*`&#)>v5nfkZcp%h#9%pILiYZ=HQ@C04DorR;E`hpp1t6F53d zWn0yW`x64JfO4xWHulX#@r3|uW*a;W3GXF}&H+ zs!Hk;WD8yON##1z^7RM9@5Bv^GUAjlXu8-nG3f%MjQ9`+|Jp0WM=XL-z8Oh4rPbMD zmp2LD3+RmU4cD1g;fSDaxvMd$hFH3&ezB`13Ge#wkDQ^5IARq{WK@5BHX$%E32z{U zOtZK|XIjztB1_jTcdbgA5M+y8>ys`GGAenJ&a`}!gSzFeZAnvtY_V%+($pYBzChCS zi!#m#Dwn$+PMQ^Di(UJYW(OHn=wN6OD*U;R;9BmLysrTXG?T;9oW_EX`S^Bc{gbR`$1 zowQOO4Ly~#kWJCq5wL67R-F}xev;J4-qKk)SW|$7cGfbEtv#FMX9ILL18fm%(pmB7 zZ<7M-5uNn|Yi4J4wg-1z3p=N?XR>1vntsz5dp&zl(sfMfB5GiFWMdJ*>U7qr`p2Zj zEU+X?;w>+JRTZpk;X zj3Dciyq0y-S?}6N#I~v+8q>U^NAHt9>GHg}SCbnK@v%?ybHnT{4BTl-}p*Y89%XPN3c3aXGX2d7rq?^_~*OxVU+bw)E`J4+NnWvPW`!kw(H7X=DTJ(>zT*p0f9X2M{dBu#3$W>=4_JKQO$THETMyspp`i-E5c6F7JtL13RX(X2E_2L;XwHV?9?T z-NQU0#4Tm-^xT$oFB_t>Z+bqQbRV0eG0`*kvxOS7>>7>#!zUVYAL<#c%tzS}!IoN{x9*c4WtZv9Q*lM|qinihfu)w* zidmp@b>+m0xyg^Qg*x+AEC9PsXFocP{BgEYXLz~J9%rh~23HyR6KsplYO756FPQAm z*~wfZ-^cFL*=M;XwvRobv4CZ|Lwx)TS6$z%T zX`W`21;c%S+i*XdE!d&HG!yo-fM8246d(7qWjdqyxSy@jS>PWdeoT6XZPe-c5k<+* zux%QHGs}{nWl!lk>cr>S0i7MS-jw`2drfC++&3q`z~0i?4)+$YQ#u=>Y)?MGKGoSs z<$kblbmj?QEDo}N>6C`zAp1jOsD5Aai!81m!#}zywGTg|OHdt5#q z2tUpq(I^Tf+-C>B)`MzbX|8VbHBqT=(?I-c4OdOHdR-S>$NiRU3QhOoSAQSzsIiDb=TyF zfdzEkwOOtF1Y4%-mSx4V6Ksv9LnH1qzt5f)OzZqp>^s4hu!&ePpJI7p4YY(UB^F?F z1YOF0!fzH%vFCKg(uw^hm^Nysm}L;PSDX2#Sh`>vSl!_1{4|@Rv#DSovZrV%%rg(}HP1{tOGeDCpX_U1bSSesPh~BUWVEsGVVRG-i2kR4YHjuF+ZR zs91J}wdjl@;>T=-&L|>&%+~3QBH|}(b9+8S#823cfKI#R91m}0KWGe{=yrqQ6JxYj z>~lV4idYb~uqHgmK4mq69pqnxu1flhjn{Q`c&dHQZWU~arL0$m`wMoL&Ib3&1>2*u zopLAlS@zh_09Ap#qud?zSzY6wkjU;*q{QOdErcuEDy1y?!*+qTG+w-7u+GdUT4mNSKVR! z6)}8(U|JQie7s;<6|p>S0$FNR#PYs^X;sAXIXa^%oEKH$ z;y+BjP(w2Bayc=r1~;#|TufoD3O8?^LQ1U)H!qq>Osm4puhH3*J|DYNc-$;aM-^uB z`nklGvW-RG<3p;vdBm_Dt&lwV+_FIEL?0IL>4It17xLx>VhU^37xI^{B~z{XLVj5z zu@=^vAL1$GJ9O5iAjVV7ztWkrAk$OAi<&gc+WfAbUVNU;7FYK0l<|*RG~Iob<(@wL ziR&~rug?fiKTc`P_d{Vcr3MO0jAqmYMl)(qP)9TB0;3rDCOJ?itFjS)s96!{&M_ z`RtX%v>Ty{uMw<;9rj%78OA$?{o(vUp<8O1=J?V&oWHEIhiYH64d)-N6f=q@^s^De zIlF-hU2364+z1}0Gg|JA;6*yS7R8L> z{+(c22iNnM^_q@4cr5QC81-6<=MuhEFzv}bp8u@rm`i!eGoBCGpykU)&s@eIxkY2X zfiHR{@g*C<0;s;J>l3h5gHt znbN|)&{>|XFl7l}wM*m+SYGYXGi52iSlJmad>Ox6XWqJ4wv0cZ zWfZeyIe$&lahK9BWjX&{u!CH}Ojr?QDT1-xnxj9Ll8(~2e@uaY3F-+dr$k@K_^;9_ z(JOghO=q#?wDKGH5S@8&sC)yj(OFmLI?s)Ktj>lwCq&=KC+qBmkwa2e@tHb%cO;Ko z#eF)P6sR1YauaXVX+vcl*b+{8}d^P_@ zXRj5(LA4pYhSv+Gtv%Q9If7xO;u)8+ zRu3&pglp^g8m$1ZS*YOtwqkCjhipqb`bYk_ho=@LH)h}gYQ?Q;l3wp>p zApT=%JzuV~;qlLdtrzS-$e@zxDL3=eI;$zU3hWEr@{Qs1@n81(PG=tsKNh)xpV!&A z&W$OzaQ=X3uXTFo7BHJ&OD&$n8E$avRR|#lJ&gV}`6rxjo3H z4B66wVSLpO-*N}iAJp1Gw%d3wossP}K1gRY7q;`^I-|L;o!4tjjQ*YcL7gp5wj1x{ zFAGKk#o3+wq@Isf_jmGEozalq$-fThbl`}cDLeR&IvYM>5?GtgW|YlOxr@ttHAj7A z$0G0I5jvy6xSKn5MuTxT_vmb6NGspT6`k!0iDf%^v0$2OyLkQH;KOQC$}YZ4Q(7Vr z>2~wgI*Y?;#BRP(XJ<-`{2qRX&d!#Y*gbr=&N?ICy?n3E%8>6~{-n+v#YTP~e?ey{ z#dv!}Q=jVByt$vhCX|cWAFL?({)-;Dd;Y{?9-_Wj%${MK?GXdqehS{s=oI`__k+5Q zj@|E1c{s=xx}HvXLa;!4#(hEMa@Py)r-E#;>p;r>AY15qBjx#voH_6(wqAGbI9r)` zK+i`Fe3KsxmO`!_(il##gl~s~O7iXXi!vS!>c}Cu8$hEUUMy`E*ku%@&)<=Xh z0i0Q^O#JquLca@UT<+@X`Dc(VcAZMW??(03lQZ}WKZ0q_{1ntJcZGP)2iaoR7b(96 z*+SP(DSrg>1!!cr)L!UvSEk1hWQ$!=swK#%!U&yd6-EYi%Uv;^s32SHa;C-w8Rhdx z9aoSkQkQ*H<6`znBxZ1m^q!zpXrX%jiCdzFVs9m}Zb>xGKPe10L)F6fyW;1nQ{NxU z`>M~rKhiyN7|DMbN|pm-Dczh$X_DYO3bpuyZ2aPW+y~he{~OD{lyjn*N+6U(nTBAQ zM?{$#rkwQSCkVHnbh>-jL`E8585wD0^OeX*6MLsZ_#jH|tG<0QEqWMQ#2KL^-ZtPo zSq(Y0z^&DFsy}HpEX$&_hQritr>07MtJPyC64mt6hxiHg%hUa0dSXLqV5@O-i?17M zs7On#+V?|6FKxGn6#I%up_RYGBGT%z4=09AA3^D%1F48%YT-voYUD>ze~}iVs)-*Z z;Sa$3KU&Q1Qu&#F=Ep>P9#hwziB&H>W8u;2v@>ZPq)te7pGnipiW2TkS5KTNjE)wq z_m`1hkHC3}eWoUSoQ*%`Ht^%FL%*med5(~;g?B+4$PG->W~5WDT2W5N9(oR~#Ox6A zp(EA4CsWnWK8}*6k3h0ORX!O`N$S1zpOj-deAwF4qD_Z62KA#>hg#H{^B=`fCVW~5 zto*bm@XV+A>LZ`#iPTi!;LkGnTJ_4$(vr?dWvqtvWk%kYoss(C|I6W7Ie0lcqu&47 z_5Ig!dLHfu=Ci#beH_@Cjg?4VY}j7bgH4hKB#&l?O|`DcNWYpjn(bu|)Gx;0omuW$ z#&)aoKTiuBH&F>EOeysT*cqfF*;#1MFf0El;U{+1lwa~IFr~f?k^s()&YK>nxA1!_$Ni1_$1E5ZwJoHxr>h#%^S`g7s}zubU;e)HEQH*3ctXAEpdHW8&79v zhuNiVEI=P8q_YU@?-JQC9Jl1@4iyfrl+b##JCF6URZDpyTNjZnQAoOoTrHydQdD`V zRLU!>@$Hl8nPF3<6D-p`S8CzqSc4FKWzHKI#t>S`xfaeuL@YV;_}?k zpV$eA?nXK#w3VOb>G7PMgXDSXJYQAxl0<2Iv&6?{y(evw9)i>7_>s{cqk>suK9|Yz&yhyd1J4e3K)6t47V}&%UcY$$|(;HbIaZ2YxPBZ34 zQNbqZ3u_N~lN6g?F7K9~9dnh;rDsbP01qp`fFxxvkk4~E!#L0BT%(kKGG?)SP98gQ zg}hdZ4c#PflU59T2zb)C57~YW+b35@$z7fW?k;{6xV`Ls`LJoM>l3+&EgNCvO=7C9 z7gKe;n50c&YVVd_!4GwIOELY^&D{J-RW{Or6=6kYt9g4_SMzZc)DxmDT?Yf-P52dm zbD8A3rF*+p0q-AL16&e6+PqKnO13$vY?gU1(hcT*<~_ZBVmGo1SCjd9p{+4jB7Pi3 zdYSn~_I}ZN^H%iMo#q_^n?w&Cmfi_eJ!?KJ)m0ucpO7Zxy$;NbGxAAhQ>PfqS!rC? zbjvv@7vDsllQ!ey!+t0($I?%temW=IvYT7crWxjI9i3o#dwF-@(TXzQlK669q(XV6 z^1(DAh^ZQA(7C$e2T|(8+`ue<-QA}xCzn_;9MfJ2M zKQHw|`n=SFiqA`z!MXd;rfO-g)YQpmS&KePw zmW3wl2O|BEC7x5jvC0&1XnKBOIV}A?>^tPm!$)fIhEBk>$dv{iD1=B#JEy1GfKsP&K25X3(cfS zhN15Lwi-jq$QNz<47;7L+9nwqJnthNXzKKZZHbt-OT=w+QrtEt#cgwtQCnM35Eej& zr=2}Qo;Tcvd4Alm9UmPZHaw26Vvif11Ww`))Q<=`K~;uql4`rWZ>zCvFPjoFR^TLo zXQ90+hDZKgM6xI3sYM;Z^4ousKyR0@ym7@OzQ|L!@sqkfcc> zTqM%wp#dVd3BnnrS1N>YBM6g(ypB`)q0xl(7Q*#mBSNx`)GNhCCmK*}ydDiGHnt*W zq(FW)q*Q2kqup4eSZKEI7LDu&`EMbuVkUh>7%=}J$ZtAQhxaqSQ#Cg9E7AEWNKXs> zL8My+T8%GQo(xSf9<6*SG~PI_>+7L=MFo3B1^eWP*tZ}#T5$q4<%y?ZGYOw!rWjwb zd>Lvrj?DTIl97pWSiCW}Q&d>!rRo>_fu-tN zL-;~t7fU2i$^iz9>KG@;D^+RXHOBtMdEqTsgbf6~QdJe62Un`48e`qaQLwqKegSOg zXxIq1)`fS0Tf4%0aaYze_;0Q3a&Xo~cahR3jP$HKVSFR&c=!q9{=~P#jl4MPgYa!e z3PjtC6o|GN1M&5(5ZzUE7DkOjjw4Nz(T>)CgAAV({Tv=DvQ0AL`_hO|A=xComFJF_ zWL#C06>)->4H*?-H^vLa%i;md9tA_jQy%O9bFfFeT0HmOiSgTNJA zXra5a*|c&Ct!d#dDA+{NLJKWXD8_0{iu8kuz0l$Of{Nkp>Hx#hbH>_FRwt3rFyL1Aq^eada2KEvrm`ilx%A)Mg=)Xs&ZyPs z*-zcExY+^VgJu5#oLBai+a9>L|NpqIIpyy6-T6qp;?6ej9TW2E&Cg!zd0PU%oF4Pa zp^tkztu;eOc?t8k_*314$w@b1a-L0?oQ9JLlM`*iEQpoc!%$$H6!?s{THA|>mJ!Rn z9`y^oY32t5tL$lJmtg(v%e-TOctMqYEbz1FmmvRA@X)BQLe7f3L-2rTW?i510;s3S zTLOH_;{x`aSDwV_C9ghEJ@{3xLB^>*kQjX2o1-!WE!T@G&Om1TdeXdUgn^Z9$z-dz zS?3bmtaDLr*11eK>s+{d0{Sh9-~yF_{QSTZQ!9#Bo5S%32CK~{@COF%di>_<;!A-k zvu^@^d)zI+jS^TPNn^o(TM z_2&v#>ONk)@)yT9xv=^sKMB6t*lfI7?3+F1ZxnM7_2@eEH6CpiY%`n3kBGLJ-?FQL z|0DRnNjcp*`cqKdQ1Tb2%^U~Zf&w>3+f6?<8MrF;ndr3O(-US!=LgKepO3nF!F7xS zemQ+bv|ZQddym9=$Mt2(L3(lzXgAM(^6J4p+-p&qGk9{V(CNIyqYm9wT zS&gmL6-GftvO}03QKB%us;mg!GxPOmy}h~WooJhwv`x(0CZ=u^v$yGteA;wIKF2X_ z^9J9FUQ^Pp|J)f|vPILbGgL=8s`QjN%5mj=;0figz*CCS&r!M*6L<#Sj^-$5m7*k0 zA4=BCl2uWe)liu=sFd^lQ}qdkO+dD_Fk1=)KKOWO_HqwN9i z)m{L;sQm=^vepjl&|U_3`d@)DeD@j# zMOXV{P;>)Wq1(WrdJs55F9cTU5#VUO7+9nC1CG}R0BiM9;3WN8;8etp7y`W#I7?3s z#c7T{95_$E9=JfS2G;4LfeZDUfQ$8Uzy^H+aJgO!T&Yh4uF|If*XYxLDSbLHqt66B zrr!x%uip)PT%QNrsNW0RtbY!;Rj&uO=nH|{^#_tT?a&_t?$Vb6_vp)kFY1o~U)H|_ z?9f*OU(?qB59!Q*L{9^c>P^7o`eVQo`Zs~6^lt&X^k(20eIxL!o&~>C~nY&Dh#^NP=hWs!l(gO z8T6ph20f_8pa+dN=s~pxJ!q0a51MM!nlQUD1M)0<|0b+%z+aNeJcACiz@Wp_8FZM1 z1|4RxL5FED=rGF-I?PG~4x_9x=r3yw`b)~7zhn&h%VP%pWxYXvdEB7CY&25+G-Z=< z3O(Lz&}+6D^qLlfUbEex*CclsbemlU-DZzLx7lmZZC*6!HZL1=n+}6+^O`}oIb_gn zju`ZsqXxa^xIwQuVbE(%8T6VigI;sSpx2x==r!*e^qLC>z2>4puldlR*IZ5-bQ{H_ z+ZZO@#xdzOA(L(sG3ho@lWr3;={BV%-6n3*Ybs27%}|qGGs2|TRGIXe(I&m7#-!Jb zH|aICCcS2oNw1k|(rc!h^qN^_l5R7{q}$9h={5^Yx=o!)w^?Y?Z5Eq!n+B6^v)rWH ztTgF0t4w;$8k1g=GOIzZjQK3&ttQFUV)h4aH_5FXCb_lCB)9gMAuA?T&b=)MmPM9RuDU;;tGD)s8CdqZyB)Q%-Nv;d#tbQS- z$NU4Da?!jC@_Qzy?GMelkS~dR*(BQ(Yk~0JBHbK|bPHLeTf`#Wq88~Evq-m6i*$=y zq+5kWx(&5Rw-FZUR%MZHqpcLM#v;+iTO?YoMWRizNVKUIc{bf5&t_TV*&GWz1OF`& zZGlCi)mbFkLW@LOY>{XU7KygpBGFb_d%)*ME%JGlMY^rANVk+lx@9cV?J{qTEwZh}BHOlGWLt8FMY`>>NVh!}>9*G*-Cndvx0fx_t-~VSUb9HI zLl)_F#3J2}TBO@?i*!3-k#46f(yhxP-OgB~+gXcrd)Fe}E?8vSMT>0v&?4I|CoR%V zu}L?>CfyvHbPL&}Tf`>aqBiLkvq`s7n{n*_|* zB;aE<3Ao-S0Ux(Xz>PKuxY;HFx7wWDT5Qa2_=piFw;eX=w#(+^w#O#h_S$6Ii}oVn zzfHPzV1o=swn?``HtBZ6Cf$zOq}y?ubUT54E*RM+-MVbj?Tk&jowZ4~cWu(`g1sIg z$wm9eu*XJcFL1Nd-d|VZfffC9r6Tan{sCoZ;Ag;!U{6UB7s2;S0?LTsUx8IYrC&f9 zEm#vYA&_ODZw%7xn}am_ z)*#K^5~SI;2Wj>lL0WxR5LQnrdxA9k-XP8XVvuHkIY_g21Znoyf;9V~AkBUxNV6Xe z-iH2_7BDu97ce%gC}7Muw16?=hysR}RRxFo$MFX)@0XP4@kynk;yQeM?ERAKl>)(H zrDn+WO7a>dfzuGB4mey{0vx4$33#*MM8Vrdf0wcb`g=ulzu-g4GtfMuyaD{G^1C6m za+z>A6&1e7zQ`>iw<_OFqAjhW+NnH)cSd$d!eQlyxWQr3bcse$*_*gv zc^+A5t;iGApCWad`Wq!uStpwN)dR}Niu={qp}$`=OC&WVa%&!+RFV}H&!{wrqRR~g z%k#(^Bt%Z=(i@TMMfOGZMQ#zfHIK~MA#!IPsp%HETk@+0@1+{hCo9V3qMR2M36T>b zPc+!9dePL2#uwQaxmDy=kvm216uDdEZjn_}Zez0MR*_pp?hv_CFxe@pF1hH=BMT^& z6wV_xXRX7IB}7gn9Tuw-RlTU{MUxUu zi(rT74+wS%Dgjoc3&sU&1rvE>of89ZDGyiFiKae})ZZ`qlxX|_K3?~Ji63A>qo`U0 zTk}Z$Ga`59k(vWi#an`UkTsO&k*PyOPUMlAi9t4{UNrSVYVH?}9~A!kqH2`n);u!P zGm@!OG@X*?fN0(l)C*YYkOJPmK94Nri|iLrZWXyzhFFCfk^&;P zirgu3r^wwRcZ*zJC_OG@{)EU0k?TdS7ugrt7r9mBR*}0z?#?4>NLDCexqTj4X%pcGr?NHI>D4+i(p3y^K=O+{UpC&O0Y$+BPpjY!Mgs;loD(a>=5h{RAN$v zV69-CU@C_LnA#%PA=o7tA4q+zV4Yw}utl(Apzyy-E|hDSwWE~Y*(F$4MomhvLlB>D zfJPZaj0@HZ)(NHrTLe1)(NHr zTXJ%xlojj}R6Zf41ZxFbMo`m{!y71f0h8$8Xelh%A=o9Td`hYitQD*iObNCKb_jL} z*4@PXDZ%(y%C&+mf*pcgg336lnV2l8m5VyTlwgZshhXh^W~~$K5>zHgVZmC#I>D4+ zi(rRfm!NWs)F7A=Y!U1bOm@jhxm79^tQAa5rY132y!u_r|eIs+$wUb$oTqs z=+!%@FBiF7vWo116MJ_?zVKD!Y_dmBaY^zTe~XCG*t#)UT)q)IX{H zlG;Psm+`;+-^PERzNj75{;Vl_STEH-sn_UJ^f~$$^o+h+zo_46+-}@wEHe-T7|$B} zjl;%&8E1`)#@~z*^IEgYTyB2D{Em6te9Kg<5WZx++WL$&-&$*Z$NHZ2rghPZ+4tJ} z?BCe&z|6qmz=J`jprhbO!I;oJcZTXh4~M=Kx*V!4TvGT<;hOM)uu?RtXl&7~MH7o2 zFKRFPb&(UfHF8g6apcj+ZzHAd9qvN+5qFcf+dJnK6i166DqdN+*BU$;?0IGfy_!{uvr)7YTPg@6!#aQf#>BQk9h$o$I19R1lnY9se zuGEfew?KY)==XrR8vaWfe%POa*Y@vc6z6bz4>_=Z~6M&l)J=Ee;V2a`RJ^- zfw`O?!{k56n!C-9`n`i<5B2K-{^ZUNfH@oF?C~Sf=W<@WlQ-@jcLlg+4&@3N#AW^U zA?V(m0Pw$VF9IH|W@@gh%LmYw$tP|qLBfCDaSgCxR5|eaQucn^K;kax-{Ps)^%cHa z&Q$6}rc?&*{7uUsCq%BSUN+dlQ;&wPEe-)S1s|3QtCP*-I@Qr8 zYIC)(>YMbZ^k3?uv5)c<@GV{xkSDybNk!Xh>*8 zXiDL%!hbFNZsDl#`0!KVz2U7z&lP?`?~i;bZ1miA5i|~8hkKRU83AON5lCc zWt5zkD!0jbnc`&MDORt!d1lG0*J7yQ3B5nVOU~mXhB=*lwiNQ{lFN3lj%WT1&nBX3 z@$BIx{fG1NqgA{zi8@WOmFEXgQj`fLpT3^wtMg4MxuLIY->tIEsCL-sk|)gG?0rck zuxh@FK3%pO*(Z!HDXjTeQVG81;s4KGviRe=Y;}oRtd7o3E>U+Ui`4s->(sS4CMbW! z2LS^*-erQL62~YU2^=$V+^09If3)6I2RV2HKwyyaLmX{^xbgvxD>(FETnPjRL2lG| z4g{OD+k)$~E6B&R&*4}I{pWBj3}!_?x*(oZ#)aZaEsiNTriZHa1EE1U4}yLW^n;Z9 z3kM->kTRg?r2fOe?{!xAiz0lhJ&rF#;>xnfAUSrqgOsBA~>bIYeG4=WEUi>DIO6;7S+0&89ND<(8yCO+^=$2T-+Apf4@{bLM|LAV zvN-H*E3T@pzbR_#CEnetH~(sc&v|}z?l=4Xchs*ZdkSs5htEx|^HLjtdK~}RWZ}yT zG%Xgxg=0nV<;jB-GpM@hOKwCpyp$gayN&qX_%djWpz1Af@HUi2(`^ixam7n@qFA^9 z-xKb*jfLTG8NNG8Ma^N<84iaH8wG;46XRPDH7$GgyQ){RA#9`GonC4;YIjp@PKlS= zlr7qb<+#m=tKqQpsj)l|*Hq?fth5zKjU%;yt$V3`8X6DRfMg;^X^h#u#%dk29vY*e z0n8k>b*;orwWEq7_yr;5s#tM)wMJYi#?D>LUC0Kg?m{gIGvLR`wH6JQtXOd6A8u>s za~g`OIVSE~tl0THxmF}hyqq@@G|}%=Ck@nSqS0vaY5dw~ZkT$ec86@kO}*!(&f`}L z;2Ww_@7-SNHck%4VNAzyQ#~=u)=>1kV*@Wi;2q0M4nXRP=g+W3UuKG-{289FqDy6_ z*rqePa+CViWC_So=B+X;*Dtr?Ix9y1eNhK&qZ9;*d8_b_Cbcx8RU4RdiVRu%AsokKh_L@&fkOGlnAd;rWG>B>p zWO4ljew~6|2}D4W2#}D(TWw04;aRhWDq(W!zEre?D>;pxGEhZ6kKGI zH%@@V2%fpy1kOEBz27|VdzYK{_gQgqvf{*QWO~cpJ!7?%}l*KR=$$jB(T3IaDq!{XnaXyO0 zvimoy70F9<#i$*0%1mz+M7oQwx(#jv|C>GrXK+Y&U!^(yIOWFGP8@gM<~1gA{<8rM zMiV{T!nn=m0rJd-wPs82{Mk%TwPChIuH3H>5Eq(XnO(3&y)MaVWFvm_a|gxVd1NEp z)AjGhuVy)Lw8pitliTQPlzon^;}pd4p#;p3O|E~1zPN;G>j)bN%|)1&J^wz>pYQqg zp1%kK>osn1#IYNSy1wd=3NDOrgu)cN@J zd~{p&^HCya$OtD8@dzNq>cAg)s5DX*lO$5!zk9ITAO~;`3pu z8++Vzd*48|dj7L8N^Yz$g4^82_j<>qrdJr>XZ~8T`lNqi{>s{aYJM^Lvr#O-ZsR4l z@d_vr@%)`Q7D>`h!A03ywyOP;JJFjrT>ltO2T|jjT;P0J3$RMaQ08sLLe0%;Z8hGcA{U47tos$U*{MTybwpwUydIFYS71 zti$yX-1Go1jTsSgIVM+DmM%eSXT;phY(#tmqH)Zt>9SrG^JnhPZhlI=K3T|NOPhiL z8N#EOZ&8scrMDkJ>y)=Roj9J$GGXSI8DGWZk{(} zI*~JIdUAGo3&QKQZf13eQ&xIdn52}IDm@{@SyYMwIk#ne2)PFMd51_RdWFf1BSWFw zY&h9Xcb3zw($%Ogf49E7_TC-ik)BXuNA(gnJxweHVTK4=_J&p!{|{Wi_#8UMi-EpW z10lMKKmmQk>z~uJaYoz`;!vlTIB^ZxBgHDJ&u}r#Y{-uda+3Y5D~z}g_F&|22?C>} zbT!5$ECW-GY{8(LNjCFYNfO|L5=-n9JdLQ!acz(Qi_}55vzxvTm4)LVGc@IHW|N!h zDddVQ(_I;|uq9gv+k}GtPIw`TPEF{JXW6IjQ8Czf&i5DmP6!CZa36#8xJR z+%$e#+zg*-P~n^P0k|v1p?4_i-SjJ{*30aMVI+ghdzswq;kS>pi>_i)?^Ky1;iw!7 zz0?^}3AQ@b`!J9mD?wCRLXz~NJo^`6>dF4$X>~|)sheKmFe*zwnnO)vuoDhpfZWVJ z#v`2Ndic=7ELU>0+9#*%Tp)2l()wYr8-M=jGC;-%LX z#SQ4gUNXJZ&2&N`20fUo?qFd)HNBK2!<_ScnamwnR4VY11q5`Cnu(Caaz z`wHy%dx#`w2(7V-5KkKD;VqA8+={8&=C`><# zZ(;J%TM$UN={McXv9OzY6H9bIJWO+@ zUB`>e=`hDQy+KqPth<l(M0Y^h+y2Hm} zA2IO3BHKZyUU6`noqTqO|Mcx*eLDq5O)H#JY?c!0qFW;mcd-%p9WXFbaD$A;igZzX>t0r#1!enV(>Rg@oL$t zXjSGmnO;*M&#r>pWCThzaUpDCSk}a_tZ6{sz%epzDkJ1}Sul6y?$cB$HfX9$;;|5I zfnDph-f(wau6#R&kKAe+#z_`Ne*p%QCpx^B^CH6o6eRZo*iCd?R7*-y(=$2Qd~z-6XjP0tQ=u|m=TZKgvoaP!5V3~?v_$LjkT{QZ0$?H z6TDYLRjOB&+NfEUftS;!w(~wa2zzoBW=HK-r;pmnx)u?hCF~}&5%vL67bxKw%ky91 zWf!H+?DMST_magNIj(K>{fd1O(B}eCQI&iMiMXiN4t6Y+sJlnX7W7PO+j> znx*6Y@TLWaIL!K*2+~@uoToIF zFs9c+zQKG;q4Oim(n6_%Fou_V0sfBs{z@)RA;G|I+*?JkFgbTnq*CNW70&nZZh2G1`LR%6e4U) zo#$o*mpWTPhV$O4+_?<_o!vbO7tBzXLFH}U0Nw!T1l}%L?E_QdL#?heoPZ^D(r&Ee8Fu+ zUQ0FDm1H&L_|Jge`xQXbD|5z?29=3~#~lBQ+737?yNP}_?jS3DSoB+>u^G_yelT9vGU*}NLG-SzK|A(s>5?hFDa z?3yQCe+45I*>c$sc4fx_SA4RD)1fwmqD(%`l@L#%Gogb?bz)e%4)cg% zRj)*}bF~I$aXAq0~KN{T%6&fH44aYGh^d8BFIjZKMVXt;5rYWR4xTK2%@u7Qel2U9C zu?Hf!i~Or3S9x$~p9e#W4dS8rqXAY|EjSt1A(5sLQ|kq{vJ@=00H)_{G5InvMa081 z(BCO|TJ$GG-Y3{DxLfq+fgBs+n0%F}(O_bF>Hb&usoiRJ+kW+@$+chK^_dG_`-UHR zX#Ix4>nD!zxBTMuHLEY{H$MH~&z{@*=kqhluHQ5C#Njc?ZNL6M4?p(A?+Tv$;PCBp zU-Jh*O|Qy4^}!!!%&mB;Y~_xx>Q?r|fB)d@bDw{GxANKaV^8gP z?k7iX{fj?j=#rNx-a delta 49198 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 diff --git a/RenderHookAPI/obj/Debug/Capture.pdb b/RenderHookAPI/obj/Debug/Capture.pdb index 2a861c57c7c3729043ffaa5d1f876bd22a0508f9..11eed4c82106199681f9f45f27e67db39a72b1fe 100644 GIT binary patch delta 23385 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 diff --git a/RenderHookAPI/obj/Debug/RenderHookAPI.csproj.AssemblyReference.cache b/RenderHookAPI/obj/Debug/RenderHookAPI.csproj.AssemblyReference.cache index 507fe2c8b1e87aa4771dfaea5ee3fa611d320407..0ae609e50cad89e65e21eee65f0933fe1097c30e 100644 GIT binary patch delta 180 zcmbPNIB*a{=iJ_G!Z@9oLvl+hh{G}2kXL5&dzLRu?3>f_!P2kTKQgg5 z&8z@(9&sIKW_R+b0dqF+Su(R{l=p%;9|ZfD*>`N13gS%uASgCDR$6HCdls?DdP3ft z`NWPe@tC;H14(i)GBQd{UN0fF`G>?5W_Ant#bEuDWgauJKb>3*=G4loF|)6&Sq0{- IQu-ne0DDMHSO5S3 delta 180 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

    )o{8dhSum1Z0f4D#HDqsejRh>yF1%d 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 z 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 >KuTv> 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�cs=s^Zt`as5Rt|q{l9SzbH$Ce4fxe8hV(=IUD81H6aT1`? zp6_b{K>1#34~=Hk&dQQ+IRx6=2bbC+N`ZC{i{>|V%4dnJ($fqbbz^2-u{1|S%jeK6 zSi6k(IJC>lBD}@xbST+q1LbU^|DD|w=g;k;(=aFwp>j=eSSz6mpmFZa3%lgk%<_NY z`QGJwHm~`ft(BEX?6`>2&hEC$THF4rgp&FcjclATHafB>P6gT$j~+ef0(ZVv6bV?L z=43Aib9g+ojkC{4=Jn*n!c{dVzg2+k339pP6JDuPiLWq^Ztnv-)-}5(!0ubnc{t)2 zUn2pv*KGb<`{}ZF&ZbUtkY?AHwVO!h15p7T=3^&MNN@uW9!G4tD3pa+tzqt8aAr(hY$k!yW7cAc9J@*@dyxYaj)kwP3J zHoaGzQZjbQPkSF6K$?S2t`2`DyAG;|wp1knTr9gu;4oP2Q?J}K(_Z;}eK9CIH94wA zATfI52)BIj;RotHL1beysEs1RU0>^fs*>wR;o2>RQ%T zaT3h;?fVB=Qjzv6l{$nI`$c?vn=nn7&T+{i#cFJgTW~1*`$fOCIyiqVQnB0X_erK=Wu>6+bY6HJ(M-BK__IET-$YS#-JQPirq z)>VI1J#`M?Jjsy9xOVrp9l0tSB}7~&p5yV(V+rLDD6wQ+US8;`Ir1S`&?2(6E;{t- zXV=qR3tlHqol>83!xDehy`6no*+Lp6c)Q}9E5wcL-gtm>CoK2v_DTu1`c@d!NMW$7 zLgB7aGT=H1QE8#K&iwkK&w`_S2)BW1yx!d8;H&NDr{l5x8-L}ZoWu-olkz-}SBbT~ zmTlSTRAi~T<{puFm6?c{1AB&LvsZ(9_f~;n*7No|Z%Nvdu{VEQ|E@fDMa9SiOWtM5 z@@QR^+5X>1uc?2?Lg7JaHx$G^zr zTtV#FKs-k96zG2sk#UQ#z6}<R~dpabhl!ORcTogA8 z!y#ITwCTD;AGzg&JrN$6;(^7Eo8O~{Clv!&!?_^h{-PX81wPWaIin~#B+_e1XFP!07viDnoUeZuMe+CcQU9F*J*smquB2*h zw=CEOoosDx-X1P3-aEc_d~o&3Rpg0^qgHV|bMa{fw|C!rul?xSM+Lp(4n|j1=PGYL z4$_8#T`5!uT0IZw{6n%kJ5DI|n=I)R|N1<(FU6=oy;r1f#{^} z_(e}VQf6jw;o#)>s}jiFc3nJ4K`Q^sBBTCDeJ79sFc;xIF!pO=EhUg@dc&A zMmAgdY&;>zDyqTtmo*E>VJfMHxh^QvmS0)bOJg80T2@irYZVt21 zWzC)xgzai9S^~55>P1u;D48Hg-@bJt{rcTsr?=mJTP+i=F$e?qRnm$`(b_%RdR)8o z!0h|>Ju+YVtq3Yx_0~g`X;i4PE7(+{(n%?K=tjgU zTiJh>O_g;uXi;z4wkKJt<%OIWK1XDIP*`xcYs@CBLb|s|S)@Wrc#eKhtv-18P{;+s zHIOG=_SIii(BbB?C5xNgfv{`|=h?I8(z&NDXryhhG}Mg$bk3#DQQd&}B~84ob`JRl z*N5p2CO05$vaXmgZ~~LFnX5J`XHYD=&QyOO@EMNU8Yc<6clS;@u;(MNowmTnK5Yso zSnlqkRJb8=qpdLgVd8_i@qGn&7yfAGEM%*4#N*WNs?3Binc0zy1P5E z1Ai(tE&DS97?t?cKA$EP=4X8w|Dl&Y9($<-tZ83gw#OiXI>DWvE7V4dxo3Az+zo#& z!=rTl`Zb{`^w?3FymaX)C9lVh9aWnI{RCik2${4ENCqHdGVTcZw%=P+QacE9mof-( zYMW6Q)OF|0Ety|}FKar@ddCeWrC5ms~BQ?J~+X_PQB z;r&bkQDVoyQ+VB}+c>@AR_%qhquJpz7l*SSedZJa!H zLK7C;|NRguB0*CU8e&Ena?dWKb3wU#KUsk@f98Jp0%XYkN%WaOZofAPsJ(xEa<-gx z%NZ1N>AbGi>)(g%{$CB~WCvEE7j`(b_D0!gyfEaru`Sf=wt>=MKQED zQN8txUsNpk4?p>^xO3}{TQ`<-=03#}V;7x^RJS_4H{17_S*mA7-#)qav3jjnu0Ee$ zeeJb$(So#k&SJrOznbdq_MLw_>9fy1)r&p*>~ofBpHwBRe)iNW9HyitTCm`K;g+7> z_Liy$#+8815sDEr9YPx(+ZkeMU2KH~m2EORI4I_|xu0Z=Cr_V9D{HGMG%)9)Z z@FH`;h`5B47{R>Px|}3%yAA`P7{Q`#T+pT|W&vJvu2msDX;E&fBBXz#%T9W;lyqe^ z6PqcULjhg$w52;G*>6PuE?}~#gsT{}>1+m@rW?1B(M6Dt5a6M*yZ-65^!|Gv*nRsX z-Mn=>wEagSa!n`Bk6`-&$xp(5QgiN8x7}>hZ<@gTWup=)jgH)%mm){Ss$K zRpwT4mkRVDyU1Mnp6!2{-2y2v55|@iTkx*yB|G~U8a7tj_AL}lH9MxI+1T%vJqUED z-&%Du=)sJ)v%}tdVU=X*2cDZf0IO4VEr&Cc&>Mt{!gY-V2|az#9(_hT)R%1?0P#M2 z{K%5f)2h}9%Ajzy1db{NOfJPLa4+tJJ9}w;V_j7@1}Llpv4MXP;lb5RtX)qs)TdmX zq?O%adc;Hp0xsi`tXuEiz9()7Q!3NZL;)N3#L64BdcTlOQS8HU5a=CR`s3&s9!uQ`9=5t5om<1x%oZ%znj;z_+2=`1=a&)x8R_nzsUbnNIcvD`rmS=aR1 z;dvkc_3+`k5*pSjT!^-HAAxKtLXgDqPqxDrEUVZjIxD74pcjSCF5Cf&7`yTWx#}c; zi>v`3<7Q4$bk2Ap68x?Bf?r4@~?kIN8~J>5Qiw(v=UO%hH5wB zEP2PNvL8%bcRsY)+i4rBVD2N(NvVbnsh{O-nlm`{e}!&F@x|3#d79DK+%( zq+jk!9cKo?JC8V1T)=pT(?jBhTIt%_f$l#^8$xIxE+lknr$li6ZH6=%!I*DJWD%TN z3WNg{WqE&mZXVK)gp!0bw~X3(7(V`9&R6As&^h#X-g&3Cpgvw*U0n#sfjOUpa#-C! zpu;lU>h|rMW4kb?EK^zmA+x<%a#+-LbI8Rm6C_>E(l@J1^UeH=39u{64*BsrKzVm9 zNF&#Hx`>BeE3Kk6u5%~*kwOk5;B!Ti${T?iRHlr{a&sjDuv-70XWt|~T7D84Z|(zE2G$qH_n zG3tLa0ty&KC$yj0t$Ez3kQ{4SgbicN$L61tqEa(sw6aM$25;esLSL4eLtO(h=G%8~ zr=R`o=jokazoUEMe5OV+t=ucFJwY$!UR}t`=jx3Wh zset@eO!W1t*J+L(->=iO-F%OYMK4^WkWBRxo1##xGx!DzScy#jhZ1TBD#?emYbR$5pJH*qMk z9zxm0lCPkS&)YTg_tjNzA(f&3?h}6#b-HWU2B900Da1vn(m~qj!-8B4G%C8FKmihi zW(7zG=bgqu7Z%;KzKVc6wmlPSwfI<-r90H=PpVL#{c;t$j=7$?^C3$&kL`at6T;v| z(y?vUFb@Nzs>}&f1Soq>9OD9d?`2ke-b%b5&W_6G+}m(>)bpfSAGFbgN;`i;&ZJcxQylWnRcZl;l6ClZs8 zNCp;(VcSy=?0$kU0lT9i((BFq`Ek1W_nL{98BLr&qd=AdZm)C8C{V$2 z?m3!Rzkk?(o;77D{Vj`SLjivq99U+(TNS+rb~7xmGH=Bo2% z2CsY1XNEm2TGe~z^r`gPtFNXvtO`djn*JQUY5+0TETe*Mm`#TI5$R+Y23t7@hf z-Grui8wr_fLKm)eU#956HJwD|d`2G-E+n`Ed(h|_$A*~3#u-_nVU>A>nE#&reb)l| zhW*Zci@xjjgar2eP(NH{{?m5Ys+IN2cI{T}1y*3MsG@JneLH{bAgV01b`k9z?J-_r zmBG-~?}8<27SyX=zqiz17%ud!imIAPTT+?1o`Ku1x=GF?Mrvl2jbKztOW4PD0Ph{_ zrY*eat@6IPcvHxTP#LBin0kWEZ8HKozrbJaf@wSOj7c$|Az9;E( zokJt~==LA|^y9WZdh=sg^CTvcW2*3MAIt$S-FW)4`@Mg(w70ACgKCfKOp?yIKsBz! z3Q?-vJrxs@WVY+b*xk|+JcwSvu(k6|1S7XmJ$rjk0lf^fpy(4f%}kJ`4^K1s>~|6S z(DmKJ(%8iy6u8>(TF!IfUg>%e%55?yoH-n=N}Kax>aK9}kbl>Xu{O#%7W+&$z3IqyPujCSxxaHj&z==a;Tg~iwPc_m zkWZ$qpr{4>ZDn-P3p>--(x3k6pQg(ez?qFjfaKhT3+bq3$!AZW(P7~t36qW(&jx&G z2NVYt7x&belWD=K!EC8G2{_k9Z@e4?R=GZ0$hFP)38o z+*XHB&!xvw-E*r=+_hGgTzDh%5a2od?B{~Jz zA`pW-Q=gi8PW%2)Mw}V#!0B1oUPR|Y)j9AMLES3z(kk<++O(g0Xvx!k`)X^$ zKC9i^vyyt>)+yr&^k4TZ9PHbJ%5f0AE$j{#^>0hMVWHO3X3;{?LftkCmhlgI{I7rL zE%fUCU{Z|x(`i%MA!BbsmX6YmS5+IfxxH-UP^cQtc$`B*z4jPBRK}%$qvc07>dT8diiNiSzLb7;c*UPPDNJ&)| zoz!sF^d?Ik42La3Ig7)^wn8dV#b&08nA!u{;-EQ7I~s+zS8Y} zr>+k@B-%u=R1}%q@8?+M?tFhDjD~l*&N`-d1};uCst#1>5Wq>4xrZbPhzyNI>fG(d zVSg86{qrDsKj%6gL`$sXVPBi(#~jq&mzNkuxuH=#f9F|crvj=tuF0mR+iCKc3Z0cpjTRzTcBY*9@T$oVX>c1oj93} z9zU5*pE@qZo-cp(E9vEzUl&XG#@$;w=ucYJe#U}5a8?lzbgy(LD*9jdAKX_k=cckb zSLOE96Di9{Ic}y=*W>?}y*F`|>?rRMfHwg-Q!#bB_68cD5Q?^fGcGT-<6mONQ?Z(Bl3qrtbt<*r@Jsm%Pg z-@@u%D-{f2|80OU5Txl1e&)Gn8SUCkC+>jt&1dvLo&igHvt6F|!XSl#X3_ek>PH20a+=_zvoYv<9dQEre`@6JWAJ9gp4}ThDrjDxakQVYGy@!{ndIybU zP6r6u^2hY`9^L02eT~2_ReDNPa#DczR0+~&I@B;nm=0Y+>jx)JLsila91&^#*Oc(V z2&RI-83U%WHLAdhlB&3+m>bA>6veijX_WZI!3GX{w$*=hUS&j;b8N;Q!Dq@*OrvCI z-6*I>Tc?A%1)78`Cs;!0JD)N<%Rwzjea}Mr~`RIeT;_)2m zn)mx+rQUz-QN;{;5Q6g#Dt1(B=C_@}ST?Uli@R#Lx-&~&ua&c~aYVE!Wl@z{e0sga z3@Jaa$-WlQpYrIrBiD=Xc#j!#5jfKpFTbpW*%+%(l3Pp`EKLjwus9E@X$=g!a8A>| zXGc#u&(U#WW|87Ja86-N1bJm>5Fn{V=M`g9bYpRU=mr=d@1vw#w^ZQxIV!)M!EY2N z*YtnBV`gr_+eSyp&L&>J64aCaocF}<^VpxNLZ@m258f(LuQ#Rvt|NVo3h0P7!E`d6 z;t5}({j(1?5gi&0E%HgK()8+;gPO7;zc`(HaE;;O^`E}>HTR8ge#8Bzum5MZue*NZ zhO|V0MvpQlxkQ@`icM@&hc-7Q|&5K=+VL*4-z6uTP* z5&uV(4o_-;iSTCc(tW@V74u)TDytpZ$W8zvwfZX$=B2A5H`wS9OF;{V;YL;o1t$`$ zwb-@#3SgKCBg&)Nkcuqf#Lf1md2SQcxI$(xLDjZo=IUi{^5z$VlScHGrHk+Ce#(C> zJ&@i^L)%kTy`i(t6)&w@BPlb@y0*8|MiQ1VTJ*KkY4F*qAeY>27y z7HGAvbS*mF6izoqufhD39{-p&*gb!=+Ua-q=y4A@m}7?SWd^I8Xs#bi4Hl@z5zL{z zd;lOQE)RnF&<~fPm`H15hf-QJjOp#CSD0e!I&p)g7dWeYy+bb@ZF)Gn)M(d>76?5_ zs@Qu4Gf|S{Ynz19qJ;ZgJ!|;ocMSFvc}9mCI?#zSCiX+* z-{BG2jgNu@{sv%2Q9g5Swg%{SM_To}I~*kYK}>g083WtX^#VE+P?&kNiT1mUXHC1JW_-4O6;@n7WM+v z3ny{Hs+~c*2}n>_3DZmBa;ipN4%XR~81~GR(gtTn#_pi&x-SV11cIQOGH7zeos?~P zlz&I2r3BNVy$*mbeJp=abQC&2NiiS>jzdz4(cMzl`by8EPAP6FK1z1()1utVN}U#J zqD9uin4MlYyj&-VcLW!cGe|R{7Da+w$-t-yF<|_PT8MfN9UnlGsrp%i1HLQ5HLSs`&P;tP?*%xF0D7=6#(Kr~*QmuL z&$0@mAq4U%KtNbrA!brkV!iYvGO0$xV7IGrVcVRtQ*i}GttOuXx5!t{SdYC@g(-Gi zs-!i>E?_*rpX7h4YE1NuqpBbp;Vntq3T2T7QV!s)DD-ibjspYjB%u4jA?8+H&tf7# zK?6w*q(9uWes}AZ`_-?0MZx^8Tg_Kuzo{dGWcHD6L_S70Yzi`X=SEzt%luXIZnw%@ z+gIyK9Msl2W6kFPelDA(IuchS1ap5M!JGoZJphD2d%p?<6wm{Ib~HAW&E0V@fC8|h z>x%j7A!xAlI|Ox9czf9Y2=Mefh(at;xkC_Qz{R3-2lbY5OVN&}g}0 zlw&p(&v;X0+8a+(>)P*3XP(|yim#RD4n{4*n=ZaP^@ungVm=6sXI$5^o(1rU z#I;Q@P8t}*TD0|l_&wBCZ;~nw)d?zh1gly{DZA5M(M&)F-?gc0*HqBaMXFhqfWGe{ z-G5SwArL)WS^G$-Zi^ukGXpr&(JGjh4|nqn)ytGZdagaI*{OwO#S8>K?5HaD_?m+` z5-`R>I0SURqQA%4vye$d5(`RNZM25rIoP5uZBoN=kGuPS-p^>i0aH)06eu`UQ%#Zp zD)nVvo{A~qs#b#ys!z~EanV7~gDPfIhmo1WT`laDj>jgTy#kcD0NdcwK0WAFrmuR~ zxDKM4X};%m6V$t++L+r`NWO-Nv~7Yl+#S!{VY3@(vvzCQUrd>Vk&ZHKlF`QO{`jEx z8TpRULPrIEhd15zO>;1;L4Cb$>@*GnuEd!*X{K3+L5zTc>QNwp5WV`r4LY{*EPu>~ zGdx1`uIQO7HbYzTrYMI>aYsf}tdozmTKUn@vG$`Zw&}&!jsrXF8z7CmjBBw4R*Pot zECzJ|1TER0W_Ceci=21Y)!Be%JDxLvR}$T5s(xC3StqT+aXumLAt3y?Vpa105>y(Cmm| z0R7EAs_{lVoVo2n!E4>FBw#jPtqdhwhxFvU4Yg$63=^fJ=jpCtzeC zXj}%caC;YNX z@COpe9lnOt6aJ>9K-Er~Nutl5lC%kM*K~NSnVLq)JUs>i`Vl@Oc+=Nc5Eu|(RF4@O zw$(X%rL%Ulc99IAS_D`NG_198O_30&>rx{xiB?G6c+9A3TKp~JABL)DffVeiz^no~ zP<l?b7W^te^tPv z=aZ@c7qcdXreOe2%}iC#A^|+|M*b73=&OeE6rS5sJV%Iuwo$};F%*oyKlXt0nV#6P{InRUL4( zp4^ADNf<0g_W{e?UAgA*5(NWHIC&2-CIAPu*TJm1m2pqaizO1brH7Q;&aif6+zQ&i zDmbFU6aLRASG)%+fvcgTH($t1-WeUbPfKqeX4EB!5Pbck4g zppcc#&k;SU7&gpgMBGMnIr86opD{NmG=?Ze22=zE3#1(+{cniE`Uz^_5@7HI1Uu`! zqa!ip=fuBbOJfT7iw+|q<&eX-0wPegQ|#B7DqR^k1HFFGDXmrRw9ChT>t2CyhOooN zNqRn6r)jB$2tH0Q4y4ccz&eNi#hUi^nx6Y7c3k_|0bQM604!M3MF0Thn6pip6JQly zQgL~D5ojy)?J$H{-}QU6cqc4_0K6-0Gx(WTY>m3>4z66G1u_%h2&-A~$-tFJrEXI= zz}UQ=-!MUrf-3UMU*2?ozxnmsZbiWeTHy$)F33zzTFjn7U|z@F3_QVBu3Vl!1{1l- zwxDW=2wKA+b4kdaUcOA9t0@I^s=@=%>5k_OSd6Ad)hnRMe8qX;MRhCIgk<|xsh{$o zZ6=X}ta7jirDWbN-MtU*u@aXkqtz;)Q1Rn~LkpnOa^2?OI7&Bv3MY2Z7OANz8SN46 zDRe{7&I+a)MgI`MCLsCYqJ{hD)*Wxs-TghL@Bpv~u71y&@R2K&Qq}4AMRS(&mm5;R z+{I(+N2i-&B|?>MBm1S_V_psq*vfkl~|&HmFzt2B|oFU zet94I2l#^_(H@Kx#3Q#Y+ZEs>sa?@S(f?!(C4g9gI3J*Yvf0yiVE8ZWk2i?H4L$7Uh3+!^(tq{a3FcC2B2p+BVQ~DmCAJX?HT121} zMALjpH4%dUx{v)Fod8g2sY2ajhs40rygqBaQ(jB2y8=kA?_)y&Vize1y<@CaX9#m| zqYJHoV;EF_wpBV+UfZ$Um7uR{%!-4VlWg;sV+MZW-`;!hfZOYaA(6x?D%xE52V@6(oYQ3kjX_WjJJXJ5iD>x9=r?L;^ zdATUKBO4K&F>p~anufhEhAiWX-$L_)UqckzU^Lb-poHQdjCc5XS4&aqRGd~;!(bu; zSKtEzF6gkVe;^~CWWn4}Ft!NvY=R!fin~uCcbu@MQ7qtmI#kECg|^<;X3X;YI<5WQ z6}kz3&EOnF%b*$s5vKg4aE*YW2y`k1me|~(3ma?ST$@d239~?|f<1!I9vwK-iL|v) z*)8j37UD-HhrnIeVhw84E1plYvQ*~|PfpzLP@SJ1yZ!wGvE@vnxU~=4L(FUR`c_WF z8dOmisYA{Zc_UXLBSn#HWWX47e9`jk!7~?s*ChbY20D&m$^yd{WRT2fPlCM1A-C>U zTv=ss8Gtfqkqzgn2xVY}2^^HV&!_^{3#x)29`TqWMVbAWoFr=vgW|DTGGa5ZWGtM$ zCK|MpCPhu&U{ktAFb=`?fM5=z)~SNG3>&WEG z^s^e~2MbLGI(okS-~HX+Mcp(2Rpyq~<;w?Ypc4&kCREGFngPgiaA!*ivV?oIS^&sf za63KWL~}sF10jDYq;QG8#_XLbS7@_;tHh%Sj>|z%DHoMhp?b()jr>%Zv~cB&*dI`N z;^xJ;DnOtvFyA{MBulHGf_|X&6Xx?p1)V%uLhOzs;g?8_ntCJPn$F=3b`SLZ%|oNDks zm1Ha+DMKZ`gq;GN9X(g%-oeoYfJ7XA%Sk3S109G%@%*LP6lhplR-Aj_p&m1E9iI zsBkAZPir+lDXMc|EAUY0Zgy?p=Y|BNR#Po+n(w`I6HU?1&M)gs7}|R~kdHJkQ<5_- z^N=0iGTx9ABpFSzj>Dwp_hRVe!$7p+x)_U2g3DIhGP)IaHBrFoRy z1@z+93B5BJC?IeUs(Eyh1{w5G)>7e+t)|oIimJK<8AW7dXxX9ygii)k&;Wj5hcL}D z8O;q&?PSXKop_X9#a+68VI}_J5ALyg(PW1fH5PWwxdgk0S>^3?hgV(zXMwBFUW~nM zejSp6I}GJ3N?r(9^TnL$ZJ5cRivYzrJPI_O=M-FdQ^t6FVi_- zdJ@I|{B(ILp1sA)$`(G;Gy367b!(hu9&D&+Oj3>IsQqcrnJGShr0W1JZdB2x5e@0e zD^FY#VH#TSH=cglJ$2(c&&d$bm#j(NwJdT?7Y; zW%wN`bIyLT;q8fk{^-?Bt>l+qer4_HHQ&8^hd%8DI#gG~kmji$&;i(^tG=WI9s%cw zUhlqE?9h8Z)bBA{$MZl?KUJhWDt7eAmpW&kXi!gjC^VYw`%!cva?2fY22NsQ9hI<6 z1f3>=Kum(fjjF)v=;&cMIXTJ`N(%*;XY>Cjo@@_Rks1ttON=urJB(5>SWQw?g(Rq4 zU-W)i1V)tIyvspdMaba=BpjLzaU+ILrVHamUq*nNX1gfbxsK$4C>;zfvP3KiC*WPa`Q@ zLjmJ;C4yZ!=1G&+UK80?ixBJqjQVgk-4%QfSLa6v>hy0P`_MnfNUG6Z9E6^u?V3T~ROWA1HTxqs z49@Y2^o3;R+`awVcig}I=HEDwNWhGod5OTroZiI9bOmfO7)tQW*Yhyj^{`ECS6T6_ z&**Eag!{FKf#`FAKCp-n^t^#~X1hG+S}mY|V|~h*FA@=O<#AsOOryU;A^>Sf;hjpg zjg}jXTL5<2R6thxhYwlB$};h+{Vm$pZjTloxbYM9C1*4zOueDX1*a}#%=F*El>@ed zMAnT)(B&&vS@43XF|^UI((kSvT$V9`RtV8Fm{lIK=i;uHEO{m~C}*~+UL1&kXFzp- z&Y~Kse6~d~`#3fE*csT=cBbkH^t5KF?W(rmat^v_(8|K^k2LeehPiLS95X7+!J+d` zudSo?62U#ihWW4m_kRtqzWQpEifaU#{rJbPMVr9<;H8)GHVpLo1klAA;|@WID)PiF zV#u(ou|kbaOJ5`NzKp<*&vgG+=;Km<0M$Z*H3Iss{u`iKYjX)JD)ibCe_yeZMp3~# z#;56=Q;B5q@9@!gtuLFpC^p=Giil0sv;IG z$j(}bS*=e3`H8h0l{FLe^RZsf6RXf8uk7EIh9#RY8U)Dox%jxRVXtCX4ljAuZ>!h$vIKQS=a4_`;sWRQ{VxZE+)(r#OSZMy76Jp(%3 zfVm3rG-{fy{}b&R;%quJARIb?FpokohrIfy<)i=J0o{=AaA8B6OO?8YvQh^M9_=tx zF8Ua#+QH-HIb{Sa)`EE&vhH})s*|fjohb!fWLT7|<=}3=f7|{2&;H*1=HK4tc@tEd z1l?Qld4iS<)Ru7KA&@_ReE5I`_)QInk(NWu4q0X#WWY-nZV?-7Sq!XC967-ddfSX2 zhb!$QvW(mYQ->*Jzn7{@IZL!f2@qbG2>mDzw^bYjzr$=AbUiFIH$>HIR*D(4;VHAe zP8IPBUwXk^x^zVl(4Dw!0qg-Yk4otz;GNg1&+ZHeXB9m?{uBy-N?oUBA5mpw1-rnI zpeR5StSvUu=|ykaG_f&byL0ERd*kOncfa|~Z&?4H{o3nlL#Fkkg8Dfe^Bl~9Xa_Y- z!BTBe`3(wyTWdS(ScCW-`uq1lQv-4oZ7upY4=L+DrYwDq%AArtfA8KsZA{f9l zsE9^T=eR0l6AZ+EsY{nH4JSt@YfLDnlSxf~PX!;_AR_ootqRwZ2>}~iXasZwb5!X- z${u8fbRAC8PCEcC|9~?cut;#LDGx?)+GN%5U$SgE35jo^3Tbl->A0FzBl|9 zpw#!w10ND+zZ;c^YCJkUa2OqrU@l5-l7q4mkp8SKD|17C^(u#4@eN#sw|f8h`y&>K z5$X<-rX!{PU?0Z)OZ%O1?+Yf=IU%mH;fMtp zd?49<`0ycrJGW6G#QPKfMq1M%(`Ull7tr^ec(fZfO_?OlkK+Th)L~m}ijzV2gERZo=<|NDo0u{+Spu~@2TD!- zQHR2$aD%J#b$InmXB`eWDpfU&qh`6rINfKhb)lpiE$dz@@|BI2ERoeVI~N_?iIP3ARw^#5 zTcSv|qWN*R+;gRl*GQWS2;PNO7m*H3%nD9WozSLyhTdctx&Q_28CXJ#6{0T)#HeZw z8Ho*lRi}#QLzsn&(E&C_N0ss^%QC+C=3DNc-}qV=QZogwTx3Rn?I*{6={K(5V9#bG7(*IVbxPIPitJbX zg(bTMY9Ac~QIqmA`(O1cHz!Gj_|#s=R5EI*8Tn8{R3N~ zid&Ia(UgyeUL(xQ`#b_9HBX?z`XpZtuNlj|ZN$M?9bX!uoKoGj`^@ z10}C>_DcPZPc#9*o`5r04(R%MVgZ$|^-RI0!GgETmK~Dw6#>0g5N!V#&a*glU_dak9+-lrJ@0UJi&)qXO&4=p<^D7HoFFNuEH@3_o6k6x%jDa z$)g&vtf_k9=W^%H9dDQiyf+X8`Qd;2A>{cu07CWdumAe5)W> z)uN&%+=)? zVQmbxG_|Ul?R6Vzu+2Y=E5Xo9PRb zElVR3Yjc<9-u6f7oaj}UCI@_fW)3kAO@y}0*u~2=gbwJs{ax_9_Cu`NxypS8f~;|ZUP&}B#u%lRUtq!w5+`tW@Di<*bHqMh|9!r znqmt8Gb+|Pj$3ps1YIP56EiVw=nFNjD6S+zpYVe4WDWUA!+{=^G^k&s?fyGHTuy7iS^+1(9&gO$p*uf>2YBW!saSF zJB+M7rRVd@n{TnJ9jbHYFymUeB8xvq3wa}$YfCc~*)I>25zGUBx1caHT_+o`NmV## z7L1K@s57Y}ZM6%CN?Nv{2Y`sL-jhQo&}s4xMn!mxC=x3zq2#u<(FR$H*enDc+Ri? z?duVHak*Z)qvN9uiV>~%mR;E@U(<>?r67GIlR?mFQ`N+O<`N~!?_%t>T&$j>U2(Yq zeQ*lTLcg(B5agv3I__6v(U_Dhi`7(<9LP-!g*E&sA-{X?F0VP@S|9)g8rI2tA-?G9 zkDhfJqyge4vxWmKuzsbYU!~_7OR*+->_%JcC^jsaM`B{MQ88eSZWd>5FN$sP#8BT^ z%tch}xNE9^qBbedt}Q^zES_EDx?#g?$TT(#U0#kJ$^c$|n4pyRqbg*|@Fs5>3VKFJ zz-_7~tA*MaqNGD(EPR6z0Ji^CC+T6RkHz#MYPG27itMAE%(bUuem54nRJOaKZbU(f+i8@gLdx&n{rm3iciwTo_{A^a{N~>Nx8Ja@ zIXKZZn-{3h@F2=WIJ^%o9k_ZTEoV?aFk@!pk=nB(+Ldcp+@-5m+*NuUi1pV>R~ys- z!)Ew@oWVMq9f>}%S0g8_OB7Nx21f&aY*(TD?{tB(NJ2C~TTq$S9s?CM9;u}wM#ela z%8(@u7uZOLCrnwvHRGgXXW}mH?#m{vjh89wL1dW6IiC{>s|Z4P^&>F<-jzK@c zYuiq^s&wFS%W7wL%JR5y>iQQ7=5M_52HR+V+I{DFR!Z(;^^49y&xv$mO#!=}BUqS@ ztqGH8_17{ox~fjJjRmUOeQjm&j0ziw*4Uh`Pcr7fd6tNuEU@lU!!e0*>Fj%C?bmZ}O7QnT7pK1kfsQ4?G(nXB9&L>B`g^o^?B^hGht(-+Kn4`C;pw>U8wc7j5!|9%@Nn^U}s|YMipvzu^|7 zif3?ur*{C5Z`j`Ax}gqWG`>-G%0q4YfXkMaTRI0n_`weXq&@Zi)>P32)ebn)gP6M* z!09@+0gq|9T+irGpU`@rUb}KFK(2LvoI9sX8?zu~dm0@v!Tt={q$HTLK61RpMSLxTC<5S+E+Al+P#=fDw%WHREyWU^vdB!Op2v zFJm&n`KD$kIiL?(eMbR~;cVh->@!|~&%h*Dq}V5!^{a%iX=kvex>o7i8tvPEpVeZ@ znYX&4ICF_n4C#*p#@YLeJ~_hYqMYz5)*We z``)g{mL`Tv8Lwh24xN$XOghyL)La8P&ZYO5ekmj9R{7=t$l-6`anNU=?&CCP`6zxm z;>d@0KJ54Q_E_jc7Xb_sz@MsrqRNd{Y9zufZ_F>MD$jQ~ldQ$^4j&)hzU_YXzyG%c za;nau*AC$sTw`Rqu);&|hnyjlu~5-I@x+tvxo4i?`3T;GYuBG}*REc36+Kqlt(Ys0 zKm|Y-76`krY3l|pWhl*A@awqcYO^Jor=e1oBsv3%Mkz&DT1~HmIW$~}S`d9bnzr4v_@%TMgyS}J){djH83+aZ$=y@Z^pJE;bpdJ!V3kaWu(~;fR zIa&1Z;)^f#v>t(?W?>lwIpwn3+-(BoIn3N~#sV;^0Gl1ozq~if)x-k5{ah^;gHq)z zSl2p#Zwh1v>h>lgX;3~;8hw|OA3-+|cxl0?Ql6ks7W79c%A|pRFlvBbdrJW1Z|3&B z^o@BYKIDM!{1Vl;e$5J4&`=5$6ynkv1}rBh$L;m&*OOOGa$MI>`aWTfu1Ochfjw3E z!0a3=AThsBI`iz;aXqD=ez07&cwep~&>w^Y##jU=)uwNJo)wEncg$5Ex`Q!FARbsu z!f#Ziwih8ajl|i1DpiR2h*m|z1SzOLrpns7K?9Fg&Flg0Sg8?DV^C0PNnO}YZ2J-FPKI3c*Q8zh3XJb%_xXPWOO2cLQO zTKR4RLB2qZ9X@d*AI&XPQY- zdD6@{pi7&7{WtD|+aK`vdpiOg^9&Me+|v}epSXIJ=THbdKzU!K;C=o2lft{E|7MdN z;cE|K83+S~)5U@oY0Ka-pvRjaTuxB50_&~Uc_ARnw!{O$7&J9TXeKc_2*RXv<{(^x zyz*!DZ5JTmFbY0}DsRjNi{1;T6v(@CZz_o?!%soI<@SIeurd%MkScP3d76xYFH}klMK7Kz=t2Ss<c|N z17DLQ70`z;dtGkLTOilK%KNQ>Z^d5L=fD|*pgHh4R?M)2=*T;>YE|K^B)ZGGd6OCj zRU-Nl&Vnqr&jPs)fn{OY%RI&NB+;c40tZ02OG3)E4!Kf?d^UK+^(xp0fikgSz_dUVQFp_mhRo)JI)!k68bzWf5WeBXQT7SDY_&)V7F=f&TDKz&Yu zY@nJs<&``CKtLXNL!Oxyr6@+-j*LJe!ZOED&U)U2YGtwmR#S7p5Uj zIjJ0=Ytd=ndh^-&i0-RbCq2~38vs5?sLU~?=M zr`#GhhoWGPSg4ZmoNCXaHxHqINk2akRBX3)r^lx(cPop&;@2Unmzc4MHu(PKecn`e z?%a02`Sq{e{Ra=^G*m~bbOtYw9%*PWdbIm9AUL`XRDlCj6-E^}(f?j)Wxi5pzx&EF zzpERDD{^h+qSfkw*U*Zwz<0Y1OUlpkR=&^RMSuVM-{(s3-o1Mq1QkGk>SwbV%b#Ml zU$oexCc9Hb!dFFWlC4`+p)RPH1@5y}iP@>jEhnWk83nFp%|Ue`+pbQ>F{RJ4fnJ0# z){5RuWdfn!cl!IN2?}1rT!Cy^WClxEL4uIC0WEI{L6{)oO<~=&JzWQw*|@7uTw|c; z4}bW>@YnzEU&px`XMA#hVWQ1jWSBOO0?;wUSP;omFQRGb679#MCN)9bWoGTr)r-~q z@^nV^EI7$Q&MHASNI>sczg%_7S&O~OU{nLjSz?l_=t?SL>`#ohM94+7;d8~Q%5k=r zN(tF=@8qPXQLGH_v^buRLpfR<$q@*C7hq1buj;20{W=h6C!QkD|8*NQ}(;FTETX@Ukc;88y0g(E!Gft{NIc%@=$B$~!5RVb}C-T3OR=DlS3V%Q>_M+E4yR(HzX- zPy~ldH+q{7iXJtT^iq+d##25rPO}CUMwx zLYE0^^iTivPuEnPp+e2Q6k4B{^Lq>G3aqOY42Yk9HCm;IVt+O0R-m#M@KERh4%gZG zZZUI@+dOowp0^LAS_Ae{sbj9_AXsohg}pRG3M3YI9a?dFu~U{Rq^X-ODQ9}<1|CD~ z@9hJ?=D+;J6X~a~|1^I4+usg#Z8Rs(-qfb>g~Qnr%}-OMzxb^exzhv1wmLLRs>bd! z2q{8;E-wMRShGYditu4*hOQ4M$0zvu@|CMsJf1V!>g+;?YO#lX?TQ@-aVO$B<~gx0 z#aD!aHmJ3zRP#=Kvk}mFjqJ}T6`M%KZ{SO#UYRgU+U#ZxMQa)Rb_fFl)Nr194aV%M zhp{GR=GCb5fC9;EcafM3Nt6G|5)QS9jVi%^n!#u(H*b1 zrSdyIA7vacFlFt0Y|9|>w!r|xDVs&HEH{c9vuvgFGlrOx0k4RC)2!zh8Xb34lY*lW z%-IipZ0@J2OU%)E~?MNT7jN9m|Ms2(;(S@ zA8SCrclVx1S~AL##hw#ogX!q-kOS$A7IL5q2y`?Bc}8*eN)M{l!+fDMGt6yo+<4M` z^{ZbN9;f({TlD|A@kzR{9rr0L$S0MiOU z$e?Yjte^!71}(03MVnz*iH37uWR}~1saupRnP)UnoP*fR0OpvL*b1^ElH1ZBR?`Hp z4o?|qqIQFL4WQZ;`HR6yG7Uf`1o+tbyk&$WT;%XEiPu*)O5DhUi=NjS`e^*p=A(k zZl3bo+=4j=as|Pi=$vYcF>p{ZE&vaZF1n} z3jds!5lmMdhfpyhC@~J`mVjY@kW$ezMTddbL@(6g@lx#Gn=R=}>JrrQt&+S(KzDVScy6x=lgunQU zzep5lF$=s$XU%(b(Qh1`93F%_s6oKB+)wM((!**KnIo(Q(MI8a07w`5;PPc|r+?)u zU#9B(d9I#WlQ;DI`=_3I*6o0k{nS&G@h&;5Yt{1fDf-#dPdzO(DtgnAWy67rmE#7< zXt^CEE>)~5Gp7po-u=6R_FgYUm-x<%-~8M+%{l1&JUYQOdE<>YqHvU3^~RPtAABPWvfR z(tzq6)%lV~3ssd7JN?jO)KF6u3ibEeKSB^7rJ*kloqVd&KV`={optjVAevlZ%AJHB z^cou>;8&o3?%_3~`gr~I*U#V;zW2TFL0sAW^FRM{eE#|8Imm#DioJ%tZ(}8Ky{a<> z>f_=uKB_&B5#Y(`X;d&^pvOVNa-wt9CiUrZ@acf|CoRSLJ|*q9y0)+9^W~FGeKhOW zZLomEZir%#Gj^j=VY{jWF9EbgMOhCVlyfT@Q;8sdz6g>Gh}g`ad(v;bo|I?mCV^^R zns)rKo&tiQnLDxa8?2#grl#2pKCY#MI0Rt>1(m~Qfjo7+u$I4foAZC{-a%~|n4bExFIgNi>}GZ7(QLp>>P}cz;Y$Sq>g|@7`em7ZxD`)DAq- zDab$b>~kXaugGyIxjp^NQ|>AH_h<y;k5<%# zH#^YpP_F7)LEdu?o?-@_q%9O^I+F-`XCZyWPWdR_!CY0tGj`A`j9}iXLy?)S99uA_ zgZ?%^aOxp^q`@2ke?`x;MIhbSH2(2_1oU!lSXQUyO!4E+g!#F9w^6>l^73B>nYSgb z?wRF5ffVTDs+N9lB`wOJ1~5#H_daY-6CLX}>4k}U)Av7>->YgFfBocj0T|lcZ|hL{ zcl+WPJz$@G~dufw&5`#o48FJDi^w zb50#q>k~z#^Jye5kI@t}qXgi8T#>8S`1YRW&V$%PW|TP$O;TR-N#)<|y>&vp^+Lhr zPC!5K3}2|To=s8=_$R`{J{JU@3meS;6Z^f#6f-o0RpokN7&K@~^&{t=MYo*TKp$Ma zN{QVyx4*l`_k|mhYkUoS7QYV=-lEqJUlFrq<>Ro*?{{KLW23EcD}gJ2l!}2?iDPLc za16#tb~=uVp9Q<-4-(K{dHEHz(n6p5YUn8xhIE@=&;Ozq{il@vehEm@`ROU^JwOzK zopaQ+2Ng7Q%Hehf{v!g3N!y}AM)31$W71&aZP7ur_Ik70@1=cw#s zv(Zw{f-Q~sl(X7YFAD<2yk{@pnn7^*Ii4SYZ=Hhv#7HY;O>th3y=04c2wa<>zQ_iY zv4bU=9jeoomeS_zP-c&J3dT|aP1wCCRY?)C(k?UpEF)WkAX}Gz6(t+=9HGM1u2)$G zGSl?jrZK|5TSQ5avA<;+TBC+5y6_<*ineiQ)HHKWQ((zMZMh$n!5njQ*qF}e^VU?B z{!q8=!2MZ(x;C@=&AzhVAW6wgE@?;R4p+~du!hZd0wzI=Scbh)X3|=MXA+|H*1-aWnMH``{Mn_=)979I zZQIqfKlWFvZikZ2hCV6;pf!pLbf_4kGU7%|Ic~hp{@gv0(nzt2niP8to~aj`$r28(;zCkrhdxcL>@1+qKV%J?jBKPzR%)eQ0hbQ9@ZUqi10Ve<*%EpZn?4c{Pvn- zW~H-{V6iKII4r5)(~bgL8yi!h-JV6r{AaV59$$s7Pr9b)MO7#cm=$F;AJQB9E(O~A zec$fP=gUbQCa&78#P9^dFO!Mb`@zSS-jw?fAG+HVh=U5g@H|*&zf4=8AM9T~a8Ez` zjGKZ20_U&m*WI&EKf~>&wTg)#Dfria{gr$7-FMl4x)5^{7MRiC<+ZZ5=Z#r4-fV77 z^QNoW^V|ZYh|N%7hA&*S{9JZ67GM}^-Uzm6@fguZ)lz1QV9v~2HiuCG2)&O=U6OeI zgU&^i11mYNUcf2Ot!=YQMmt`g?TS#8kOToL1`IeXrb5?%{Oh2cdX|B#1oRT5LdSRk zi4I(U<*c&eztK(k3CiE3l_1m8z%>UVdgQQjWuE8e8qg8Q5x}9#eprCuK$ij!oxRaN zjrQ>$%MC#|ZIBlIIn{Ie$P?vp()>PYVvy0}7-uy?Gkw&{!rublfOh$po_j8}6cIp? zLy?9GomTvPZe|GKf~99+=0a=!Lprzj1d|Yd_vj1=y@IEV=WO!98G5GF5|cAMo7joc znpNM~bi`Wiir5x!1r3m@B$ zIx;U|6C26a)~ex)RY~=1kRs7n*XJ5VzSSGpu6L}VATPX&jH<@)#$_{Nd5pO5u0fNOSJ<#WHw_>O+C+5pute>CLm)14a_;GzdzCs%*{K1uzvQlpG9|Z`ww$NFlU#nT4<93 z;_{CGEjkudVcO?(;{Lz?@jv2!cfRu-tQ%BS00DxB*+C_*9tC)U_Lb=TN_E?|Pto4n z8^m)yGaGEypGRQHpAlIp{klhmJMmJlJ1Py@%5|9ec7vWrE<31ktJ-ZVt2s^Z)rdjo z>{X>;UTsH5)m^umrGiZk>zG{0aGVC z``DWu#f=)VFdYyjAA4u0jw&4IRvlCEST(6)kO6}UVHN|9`Uq7h#+|T}RiPiRMl=nZ zX^HU)&i@DZTj>gHNz)pm!f3+hC6Jb|)RMsUREV-MixyLbpRfp81C)xuUi*57l8_ax zo%nfly&lgDT^3x_7R;1?p81U4^h5go*YtiqNr82jD&d{J>!7ymgUS!$!XjX?g&@A} zqasGV##|Zh;LQdAuI*cv9<_^;+tn6uOt#M}umWykXv<+CPTc1FIm+w>GO7o&1D@qK zO}&9+PD&}`53~e^@l7%3qQF8FHCN?HJ@$K7)Ci7oOP*MYThy!8qse90wR~K?xx9yFU*u=f&-ddBgf+ zg-K<9h(p>(w}l3O1=>xk(L4zNKj1V}KqqR|9c(O=Ue#)gWU) z9nV$XeAI`HfGyzIVI!zVUzRU8@1n}h%IhA&reTWuG4s!VZSKwx@xs284Oo(J@p&T6 z)pEEb`0 zi-zXIx|+OyO`B_vg7uBXe6jPuKdhTc19YxuySp7xXc995RW379Mi%q;qF$uc>Ba(P z%0V%QE2vT?{4Z@Ap@fZGN>N_3O^M8w{mgZ)Z3xtyVGlb0(g8c(*@4mJ7;MUHdeD}; z8IT}Dg}f~)bm?N~VvSOHC;qouO{*GJifKcHr3~hOmSt}H4Q~fv3FM&VnNW>metmWw zVud;d_36U3#3&jzAb1y?Kerus?!jAe#ht290}|S)D^aV8O1+jA=AOlR$e>KA>B@{R0i?4|RqPZ}W92>3VVdnzZ74dZP95C>v#;pAr}LePAH-50M}ctGdD)M^D(Ym~s7Xr17&j#Qob<)oRsPcL&queLooonNP*xm(p$1K3G3nN-t% z$<(uw&t&G!GSIs*NDV9j*sGs;(h6R9i$P5aKz|!l1jf94d6u1Y=29#;rWp-Uk&`}W zr(#8@Gp`Uc#hL^Bpa^{+jCsH#f-vkWSq)sF4@%?W$4|F?U zE^dGH0o|PPw8H+_qo1;!YLyri{a$|gWdwU@??=UBI34G(8yk6ACD8L(kJMFO%&IjDswHBkg;ydovY5`;q!g(ISFZ;I7iRN+A?K zjv^Su4gj3$Wk`3wsKVozsF!C-+V~=6B)iT)GwMEh^^%XucMYPf=@o7h4G?Iut%@Rt z+%-#TcQVIjfT0Uqts@Wv1m|>r{K=jls)}b%JQrnjcA>Jz?^>Sn7WUO{OrlEDnDfrf zN8mOP%vGA24Wd%%Dyi2e3W+X@%iw{B0O^SI`0%>*=XJ+PvfVX>pCfuvJG8(rQ}Dh! z@e>4PdSAMe<#PE1EslKv&KnBrJF^+BYbaMRq}z)Ix>(%djYP%;v}xOa#+;$nsb1=rw`puyc80tpt}gADE-tZ@iVaCdii3mPD} zI|O%k`6hpP``)+vcK2+bLw8Si^{?ty)xFc)TT{gZq|2$%3l2X`W%E?k3`${5(*PA1 zy#_54H5LR*7L-|GREeRC>nQoNLGF!@F4MPYNu^4|F(J(4W1QTWrJ zsul)N_k>^X$8uH2q7ymm8z3c^8NCnt@U_FOv!cWw`$Rr}RRop4!OYZsxPLR#axqsq zz8F9PFllcdbfN^dTQAn2T&ul{Q&I3{Y{x(02*n!D4T`a~NjchAnpye!sHaMu4d^9z zKA0(mht8zF;XvT!jF+{K3lL*92n^HH7Mi>AG1R}=t98uPYHIBw>Fu3qLF%4Q4m85( zGnY*j(LI0X`ZgrED^oh0e*b{rlw)K=Chu+z8vmcbVL&r@kXS#wEP9gVt3v}~g_j#OuU7fzH9%47x9QTfx? z5f=S`WiGD4ZY&G8{1sL*dGC(n?dqM#VH82JZDs!z_1+Ph&$XlX2d6dxTD3_1K$^Mj zW$JPCd;@jeP+H*oqz`n{gd1ih2RNH&0C_EgcS8HfR9<W{vb6BuBe-=cx89b#Sa=i$*93x0Eigz zCZgq_JB8D#aaj)f?z4#WOiKcJU^Ni|hk0rFOOZV^8B!>HlwR7f=VIP)baa81DV>x#E$w%`VdQjtmWGJd z68bOOfhqkbHvaX42txkkST6S>z%)UA*do2!N9$b7@nD12a`L{pg^JA^#0kD&8K}0K zWTj)p9Ai_ljrcGS-V)}cymk5a-(o$~otAyJs8UCfp9C;i7x@hR8EmU?WTGMKs4~5(06p|N1#S8QSQdkRvqgE@ zKI_vq%Fw(W_}AQePjERaR*IO@r{X+8LPjQ|)-HpoIWuUjqKcs|E-o!$BHs3ob*df5 zv2)%}T6LQAB`j_WM(qYGhu%NSh*M7WIFIHk#`&by3&*N@toKe`%z*S0%d=oUjhdK5 z)xG!Q40MnLMX)gv+*TN>+n0T%Vk^y+RCEeUGWHuhRS%Tm5#3g`;G&Ej@oDxrIgTb| zrpl=Ig3IDNN`)3dcBU0O_PWTEn#9vieMKI#^(v)~*DW94(jKXRnTjXkko+k^(A$&p zl9bbM(fMnWThB+PPJrUV%TP%EcBu_ZTIy4AyIPuam(PjUNJ_03Yqo{j@SX&;^z?L=h!RQHjm34?YQfX z8a?IuLteSCD@mRTvBg6C=2KY4p<}i18Ur{a9J==J{C1K#?ZCKFiVlh@tB7Ic#vuJk zZ++P{`Awj+AatJ!#cvT>fhZ)3G1H-YT))o2PIzvlsh@?~+Gn~BZ19-XxM(J3=e-f?1 z*;@=~->nL@1JGg4v7T}l7rOh%PV|K3E=zP&24CLS zoQ)Mngppl-KJoF1J?Yz)X1bEJ!FjH4smb|qZr`V492}~4&me+mrU;O65NbYV^g!U} z(4qBEqR^CIH1XA>DCoHa1zRJEL&nEgdiQm94_hJHQ6)=5PHc zKe;A(d3gYCY|DQM?}{$@>V>$Pth6gkWcARLD`?VZ)K^DzcEXQ03U7mlppB>OK3e$C zhv`T6qX&Y_Z^K??S+XHiy2L{|v~b=ZEA4l{dm9`q%GbEA`*I7;n?S@!!wf3sbfJ^% z+ZDYv^he#fTvUBc^2UQ{`pe_bZ-mLT+5bdz7S03cOhxK^pEXr$iycvzzU{6D{!A!d zgz{g9$^gc~+GZqE;>xRkfm!HXR_B!hNE_b2G5)g`-a1Y``MnW#^Uf^4{E}_#15S+8 zRf#ecd?CF&w6g*e9U6SfhydS5LyAFa{%W#TsA`Oc;-8ASzxBG|7>kq%$9@NwY+9tj zwD1)I$<+ zPKgxVGV#+N9=4J6-VZ*xO?mGIuZ&L|tS0EkP|DqB3Cs&lzSC4Rhz*<)t8GOP1T5GzzX}BGXvcWXERS$q!?ap_c@Hb#HrLPf+;u6sOlSg(H{LtN)OW%Yc<0z6@5kHczy zLGrlhdNyzd-E&MRY}1Pwn}J0OWaC$e0YH%1mG(+RS)$d0?{=Rd@nCeRZK5buE-2tk zYT$7(10lZX<~T1%HNkz#{AS_(Z)2U@Peef&Ix&{dB4gig{$!Pmbd)(^Ay`*5&?Wir z(VMA!Y`T$Bn&R@PWOT8tBrDdQ7Yj5J`P8bfvh&HZR-teTEr|&-p^CGbvU8*<{2B!5TZZd`l!|-U2ek2H zCLR>a%HC%g=`^)=4nLVM&mO)<;emQObn4#=r-~nq+c(Ow3AwHLjJSKHJ+m6`U#fhE zrcK+*-scPDeq4=HF)G?bCg?rAXATfkP}d8{!NG_4x5i!llreRY8w&mQs}*&+<=2YX z2NPS{HIgH;ruK!3a3xolbG_#FXRr2CUs2zUTzg!Z<}DJK**dH_pVi`%2No09+y=D9 z6;`e*oI8Kh{7=`(JbATbU8mv?_pG|EX_lX~P%XJE?kVA}6zHX&hlZIEkoSNOt0J~t z$ftDRO3^`-q)N8vp+oBGFlhuJ!bicEsQi{Em)jja6wwQngU&P55-KL>jn=0FcB_x4 zUpmHj)VEK$-=ktX)>Yd#i&d^jEd|9&DlU!>sdveY<8`Q`DCq@Qd`ihj8B5j)x%XXS z5g>3*bLuB;{gCCj>J|6#w>1f1^~r3ADR4p|OYHrL)DQ3Q5ZCQg$5eDiAt=A~Lf>6f zJ}Gzx*O@hOydECGt7?3GpY^Dr*kzACzSE$``)v4Jz5d9 zkc=0ip?yL#YE=Jwa7d^Q zclu3tDol6?8YKQKHZ|_*u_C4 zJ-qprHu2rZSvb3Qw9G5{G5SLnCDm(1mEiT7(2XGA8VsXPzJ!^C2Tqks)zL9Lq(kC;;Zs%DLYy>XTpQlRWjQVAc+JznZ(BWjxWvH z6ZKQU3^zhIf)b{XuezoTNs-1`{?SjIb%zt2d6jRm1IDfZ{&y9iLDqR}AKoK4+R=?$ ztCw%A5|4E(yZL&?$MjZ@SS%T9$2MW*yl?X98#%v_P~ zC|d^F%OCI->F}~Hz4|D>5(=-HUXSWzTcTvN0^)?lPX6IM5oiP6XCMk~sLjAxmzt#3 z*ePsA0prhr{qgt1lcD(15z>RMak|kC=?Kc-#K?g`6;O_s9~W(+n)`%Y2((|Kvqqc9 zkauorqp3pHax;b3(Q+??tq@S*B|ekDIiSJo6U05zWaf6J?Cw>zT{vhk;fJ7GzN=Rf z0k5J=dO*=BJowllat*w(6ukHO4U>IqiDN~+5U^q_n*1@1vGaN6 zY;sf`QP1XEDs6z$Y)*JyUsKlcH`b+eYr%vP3E3RYkMi!;?5N=!l@7s?6De=nKT*Kv zX-V}&1CrKK^i*RycuzMw1O)YZaH)dTH$F0rUs#0mdoaSDDc-1+qzDDup+lvg?5jwa zF8gJm?2#Ak*c0T)&4>%^P(JA_lMWn{y=;&reKD6coEN6o!|7HUNXdH+LYs;?Va-Ys zwQQ9T?v%}}^qCD%!u0ZK_P@VJ7A12de`u201#sBiyEGBp&>W?tDvGLIe=PA>n)s|} zgob@gP`|`_+YNO_sG`yT2yIf@*WJ7#hT@PyY_){~w{o&pc^TmCqUZZgIuPRRvA#Pv zGbcG`v+WK$KT0<9w`zjn=SAFv>G^tk_UY2^*EdfmC> zi2>M>&*~LAGFKZ)*=x;?!D}PAxw#VoK%QA`EsLlqE-(8MQveReNH&LYrzv+q<7Z} zGm|kX(Q!7Ls#<-9sc{$%8ACf4m#P;u(-Wonls<~I2Y$6EO?+P%+%PAXxIH~=M24j(%jyyoi1lf=|KC=Ma>sp2XpOHiQ0zp=y5 zqoZhO53>GnSn@8^=d`HXkG{}|_q=JiX?C&;?taD@o3X*Ur z#)?#pS94H%NPNlP?e~_8GWj+GlkpS;jVRos#Li3}Dqn*zaogxWS6sIpo}FGi`TNaH z-a9Vp#4KG;yR@=bUg6Y?%XOR(PJgp1GGXG0Rj=YL_tU;%aCLLo6S`X$Zv?(&PMk%a zV_fikHtX-2Tn-#(HNIcGdhm~DnYb;QyTo?9j`tScYc^S5fumY{pVTu6+$%b>MPjy| z`Eo+-;0X#D0kqv1YLP(OVUss8I&=UV+_lYy*rp9 zHeRSc-(5|An+r%3OMWHre3;h$e395WBI*?vtlHtq`e`-#!-|w&kem%Y4a}ihUGBbc z-2!Sd{mY+fa+7;hJGmm@XMec1iFOQ}ouf@DN)l$Z?#3C_TPyl++mmp?!U3@QJw-Y1 zBPFG~e^lghlymef@1aR>8e;IyW_i_QnFn#K(|;7SF2>XzHb3gUZz5TDo@gW-k$WW^ zGs+LO-HGmRD7;(jhMvh+c0Yq#LFM{|983Y95dEef%3V|r@_L;O*hU9>?dKRxIW4_%X<)@7pxG?C?ICMA+H&pR`xPr6kYV)+@dsR(8fk>o3=T zS!FMbU}SMxHDQJ7tdtl+j?|m5tU|61qZYQr=6t2i#Z0COv$`pWdfZtPuz(%rI-tLG z*Q*-J*tMziXt?+as6-}KB3Q4b+QLQ&&kRlH*>A+I7C|pRIi0KmrwOe$y||67tq9+g z+!d&atVm%5H%%>Zv6hlZ5s3_PJ_N{*$uWFZ(+W(j?A19=Q73%b4TXZ<*_FWN$I1N! z>zF(LCGFrvaaZHHiFDB9AW3dQl0*fnY!VfUeklc?;}LTXh+*Pmnntx=yBJAeiUW3% zO_%?!2)eqt?X7;>C28nj?>zb9Fk!Nh+a*iPa5ZrqJg2UzUR=>6yB$tI;!Gb*anPWGW`psQBt;jpwCQbdtPwt@k1s?~&Q-T*N}Hs5(OjDNp}UJvvnWMZbvr`;_Jb5GO>A%@5}@`d!|W9bPG;soMp6 zJuW4mYKB-2tZCpMnOQCFhC`=S&$>%A>7cMHub53-*(I2b89~*g(_{q$!+4jx_LOVW zB__zWqg`)(Q}(c68P7C$Z%{UBq@q~io^G3*FTv=YMO1U3=4r!(|EaOD_ORnAAAfm* zn@sTyz++!nI8c&kuh!_rpEb3BCfP~X|1N}6E2#{*aiBTF0R1d^zz>pRm`qwN-jdQa zFH3(9jL3kyH0V$)#bz8}DnE`MqeB(KjN zOk#@zeKS+4et!DR`-|2e1J*@94pcX&i1){4034p^cwd+tvd}d~UMJY6{VP01ovUDp zt;&{&=1)@+_jCU*dv6r|^FSzd{v?@0g$|s*M~!e`Ei?DlXfm=e5U(Mhb>zd}74wCnX9Dy)9ARib{J{hb=s%I<96+9a4m!uWVk zBYZFOK~7e&*s_%bq!abFHJNJvv!EII0BMsIqient)H~Pj-i@F1^$%Jrel+8r{`&fp z4atKch_B@NyTy+}%+Fyyzco_3hLW$^`BVW)x7wTnA`RVG^e<0nz(7S}%`e9eh25Nq z8qb(PH%UL?pRza#^xsdOs9a zoc}}_o4W7ZJz04kZ+|@D&u!7&u&(~?{!^EVBA2~slAW25!F0IczGL(k8ExNe z2eaSgKlC!_DACzovKeAd&j8E#^2hgU3GC+%dO~KcZJ+Vr%bS7?70}eaYipYmYn(Z< z^fe;LiepQ(f}}M1<15(nni7Pc_Z8-9;Qb!2D}iI`SS{kypr(xvu73?W3Y08EzwLJi zi}>$-PX5^W@^FZWS9aQdt5@1d#F5?q&3`Cz;Ctx4!7q!ak*0%CbZ86w!cY2HW%7j%dt6`^D1^+npO!m0uDGg@iGhEX(gK%ZL2okF$1NGAw5@6@& zh)muGk-1MJ>N3Z%Gk%tY3kR}@l}m^{VvO)PeNV|K)4Lr6A4%CIyRG)giNVLhX6&LwX4@>9K%#m{)dpoAM=Y zMq(~`UJjc#W^W~_hX}VUL5+@a`w&%B+)CXYDbT3HBns-I2FX6O1HX(fxWFo7Q)>dw zhqLAT2xOjB6I_c@HHq>@`K$Ny>Ricuc&oO!Z&Y2Tjd99dfh&`y^#e2${L4$rt=$! zeHXM3wTVhzx*~6j`$XkqFFKGOpYjV=E=_%$iGN{>c~MtM#Fo(8mWm0q0DfMfo!Q6y(nQ@E&(u@L zdYzVgPl}UhEnvL*amToZ0%i2im+TwrlflrWkt)@}tSbJ=uV^zve<+hO_cZ$nkDF$j z^l4GN^D-YGKiFuD@O7EJ?R@o$Ro-&J)4FK5>wqLEg2s(X=x5D&w?|=SIsuO?rNH17 z+}QoqOw=(UEI5f{0Bi z!qT`tu*kScgA<0DFT&PIvD0g&2DNid&1f!WN5ptZKIk+&dEJ}>t*tH)gmsa&R#Fw5 z!>4aK-f*fuD?c6D&hRvRe(I5H#WR5#qE>HdH_)j|Pl6z=K8=T#g&#^^r)>s2+zNROJjD8>Ww2@Jj2_#+DO zFBt#8cE9~3`tV@CC&|qWoxC*~xDywhuYt&fX>arkg-exmVLSqnQ|X~x|11=)II;bK zxw<(Ckxw6cS6&Ha!O_I%s5^HJAFF01Vdr#)Gn<(8H^ z0cjxaR=1;=OPYCGC4X$J{3g4Y2y>0>_gGmu2})lUr*;9NR_sK6euuv`R)r_820o8_ zCk2ZU3XQEmMVWYlJ>$~)w&lgcWrta-b}4@&&=vN`#9hH`vaS|GBe_=*HrIqXj$1Xa zIk_%@S*p68qnj$PeOm5q4Gb(h(7bFj?(q#8R=?HvetUWvMY;NjL+TmLwq5AL>%MWBu>&BlNU^3GO7{y0ZnXy`>6~Z4(A=U8KmW&hk=1_%}(Zm8Duo z=b=7J?55hY`RbiZs|(cheq{}1o~#}YHn5S~a$m@Qa+|Ef-C5*0nw$pB+Jh zTGU@xGs%d(!+Bdw2|QnSIv=;Vas%hgC*mcO2*A8&1xCa!F? zQCGRd2OM?G#W0*4rLU{>5B(Y?e6w;u{>QK))2X_Y>@aGsk` zqhp+pd(8Rp&p1Nk-Ui602_jFRUXCzSEEeKyCA(I1rE+|xU(a2t(uS)C%8nFS!$sf5v> z!z3uqMqfJ@_C%5vvO2$SCuN4LXCLd=7h7Z4Xspc~KgGmo+!&|MIlzbY%q-;-B!iBqIac#6@Ie`S!yh^g(Mjw*88>{fBoy1 zOcXmp%gNVoKK}BL0r6XVW7MBx;v>mT`ljerJ@B@8yMvU>ka==l%dRVSR6fF+;P9m8 zG?~|3k9r>iT0Sb;@$R(HjrXnmlFjPieEke{_mk|dlckf0Nb}9~Yi5BHavmHz&dPWb6 z_MWw+*Q0EXpGBeFHRTdPjTb@T;p}|&M-Pl}n~gWX%}qw|?U`Y9Q&~4SS8VO2#VUI| z$7eWlFHjk5WBq}QO|G<-UbhcUUT)GUeEyeW!3QkNcT+1xdDoA5D9*Yg1)9V%*unYV zj`8AoNi8*(gXc1tIX)tw9u;coB0%O9#xpIQk3&ZmxU{uluSCg!e8&8*j7~JP^0^yl zUOw^wEq(2Wx#3hYeVC0;-7PRDzGxN5*4HRw7hy|%)@AeNwmggYNzZ_uSH>GoMO zaK+Asiv0krzP10ntGg8E)ury86t2yHNbl)n=jw!r)suxIW8);baJ8c%%t2kz z^e2p!&oJ)FDz9qoIbA>Re|2lowij<;c56fcMj51a?I+xE6>!;Pn;7LwzpjHc8JA#^ zMH23#=TyDKOveK%*78fx5Ds11=WeXA5fb)|0o1^ULu{`)(sn#=lgvd6%s-7S1o)7Z zJNWBkB9MI_k>xZJ?EK>ubz5_5>*G7P2VG=pRIj51sO6HG%QTldK7<;3P5V+B@FxMF zGX5JyZzqN;ixPa!^@R4>z)=WZKDauzJYlKLolDWmhKjQSni@URQsl^@(J zOV4wVJDYTu8%8rb?^8Q{qu^|*K|3Zu?OOzwtd)s=$;da;Jg@vN2?>`XvCbz|Q17I( zFIoKm2n?60b_eRhTEcoVqUEUVBu?Y^l$>h8G}iB!T97I)+~-4i{*(zCnL5lVxy9S! zOj75&t#poD!$IbHEpi@%uaaL$2{_X$Bylq~D-*Aq$y?ai!ss~+HR%eFqEqerzFwkiusI3$HJSO@Lts*OmDVJ&XKogWkq@(YucDyb@%A-| zz3RntDy)tqZ>+v?3GE07mrDGc5P0DWKZEl8TI*WSYW+bPhx7*(Q-U#-NVGu6#w&N! zDgIz5288HHATR44!pBFD7*VnHppfp2YT*{~Z4^$iCDsx( z(nIFtagOy;plgFc&AQN_xx@~AnQ~ov03%VyXDbF;n51&5i+VWVS(PB~E{zwZMISV^ zoHNl0!i!0WREA#L{Doz@V0~iVc-kChEOxf!_7lha)GH<-j7GVxtIoh8`lVnL^QIej z`++}dJLsb=r4Db zCR;fsvYwDHcIEfIo z_6-xdZV4H&3~TMU&83hNEIlw}XQ4a6Cc;(iV^ekXH|f4onyW`XmMkpq zth4B{&|I6&sT*53Czod7+FlgzOd&@D>j~d7x zoi$mnK)_3OLNpdqOpcQ7_*I^6Go{i`m-vk7*J*jC?^pU$$7A~)3T=lYFi2NrXw}2J zJI?L)pbu{H06?)>p*zG|MNRx3a+6h5OfKfIYdtmLRBu4A9+k}LN<{^!w#K{B~ z-XED#j6Gn}J{aSCzMYz0isEHQ6u5eG06bsyfalsvXVC97(nD`2w| z;;mOU;opV#)~6YcJJfP4EeE}HVdmHKaJ@InAU*I#7asjhWj#KrbZd&sl!loUstWkY}-%-cQhft%E&yECX}H?5&!mzhtEmvhe{gwkd|}d)Ouc| zfb;--N0Ec~p+3S^NjXWX_lr<) zIx0nwk8#zSE42d0iqgV|%t4t2(QAG>Xx&4?8E@85H^qJH(2heB(c75o@~x*9|8Dhc zv%0q)DUwDRz9hUzDoFB~mDk3>;iaPXMLH6AI3-x*AumabUvANGEqZ&g&^8OGzGk|{ z+NdfxFswV+Yorx+8WeZ-bnCq-SkW^vJVNBbn21Ii~0;HTMBe z^@WGDe87h9H4%Oac(;&6oi=o|<<^+6h0?)BHYPIkoU(<~rPLkT0$H;;I~(o|NQm`8 zm?wvOS^qe4MHI6*793pyM>xxK@VJG=#py*PO=+t2-qW-zbMxdm-GKqf-LydX=rW z$=Dd?FkN$@dkSH?m6esJrAMn$0m8Hgo}@Q5wHmRU$~}~1qQ6G`I<6My@qW6W5EflL zwWXa<+vrx-U7L`XobC$UsLXUow4WPo4P^M&UfnoP2BUyYgZT{-jlVu~3t z;v}_*CUknXaPh;H>w;$9^^@FWAPtuD_1Y4Y4XO253~N==Y1qOpKfajsv&yo~vP@p; zm+M@tYXrKzRXLNW^JACNhFYG>1udsB0b8Cz7mh~(A+@l;$rCVOJm2&{*&+CSgi~&} zpGvs$dJBbBzg+Ec^Y%O7c(^0p>7gk&$_5QWcaC`0h;a=bp`i4TJfH9;CdJ)%j9C1t z>RXxS7SiCy^4*edlV0P-g#62i{Y^T*dmJA#G!^fW%ygsPX_x`0>VmZQKt@NV8h@DB zK|_+s+rDwWnwc0&;`)-HgZLK-$$h>ARr3AKEv8v#*k^Xv`2Fudqiu@Gfw{1y{+2i^ z8^>t5(c;_}ys!t)-V5I;bYd%o;if#UJ!(RitUcPtYqI^I&|q52PQ6f@$8H=s#py)%qNm=nasqqwOhv=#!9Q^nP(~=W!4%t5NQ-4Rhp6A zXGE{vhkS!cojTwRf6*}CdX~HxBxB|eYB!w&?MKg#pExv1NR)kU$l;!^kn$YO)Tt~A z8(iavO{WkVdABU?oHm$sao+|K-wWBOYw-WhdE7zSAJj43!Mb&J#{vsqF{?^OhQM@* z>l?l987Xv*1*cK9`?^&M*5$ko4-fPIEau&#-&1BIFFyv5n+$I}2%JzQ2k8x`WD38W z2C94ENC)S;F0b-@dem>V?WkUHwXv>6n%i3h4p{}xx4x$_S^Yu5kL@lIij56pcKOzC z2e{-whf9N*^Ozq-1JO4?x3k4JrB0otb(ShEUZvhP&&2dYP@s-uYO&eo;e3lMhIG@p z3_5*YXHvl0jyKEI@^Z*@KkVS-?qH8|O|uC%{nb#cdOKL%a=nAm^upvo=AeRhr%eT>HZ5tz|lH-zs!G8R%X+c6d0I%qdH%R{1Aa%QHX&M0QWkIp_tw1V#aCP2x3k)fTgVHv7 zFvmuz%$jyk*iXHai+P1{U8ily%*3>5B?%)v4ODExN4#5ZvChdb8$J|3U-zy$aS5MdhNip~6DCse>R&%WRj>ThoZQVk01wqJrR@>!M(o0So9dYM; zU{L3F0;d7vvf4saut0ydwf=cHk=YR{&4YT(v)iVfp)@T>v!%&kCw+m1t?mF7tLD4U zN$zwg14GIm-uJ_#T zlw3K|0Y8xI%h=-ckYQy038G6SD(7~{+lyQaU9G#df7Kixy29bpn7Q05Z~L>t!<~M| zGyjTr3|^7kg87Yp9*U|yV*BMtRBj!4zgSefdw6GEZ{rba;>IWNnC{!ofN}%iKIu$6 z@lZR22LuZLvfMb9A(;AYT|I*|vDXu`fGuA%g0ZvKUl)v^c$=gi_-uVE=oUO})Rt8E z9J^gX?^TYZ-E#pg3G3YgldC`s`s(?PWVYE&6|vTHeoTPx(amA)yJ^naL6URr!d8|% zm4(sSOp@|(ZsfSI`@0QOZ)Okxa!VS_mk)H{%8dDxF7=r#2f0IHcjqBRKu#WB|G1L| zHL1;3h!+HrE|~5W8ghgsf$T7xAUlz9D9BzE;Xj}Kr`!Kmguq{*|0~M>N5VV2Cj}oU z5DMlzovt5>8-yDgSVP7{P7Xv5IY)d8+5O!nm1F-NWF+M!D#X6}QCu`9qPs)m0+4G^ zAVhe`LC2xU1ad&K`>5#%0-<34{euFfq!EBXaOdVK8crH=pZSbzt(gprZ4JRpZq{}X zY7j_3*v-zs$P(;CZU{Ctw-KZ~ZSABaH#ZifROggqk+TyAo0)%fcK|E9%c~fi{O_Vq#%5Vqsw;=jLT%<>FxHWcxtQ#=^$J%)-jd&cevb$;ZjU$Ie6kuZ(go6xf9T}Dk=;?{n;n?>3)s=t*}(`b=>n0H>Ti4O_{1H+22QpP zDz>&(|F)Ilzhx$8gEWPlR^8mj*w)pN?ms;MmN0Mv1A>%)Eyu{h&dA28!phFa!OF+Z z%fQ0Q$HMYYS~*)|bCYj>Y5yluHa<3<|3V6J8)E|}ga0G3u@Rq%t%J3JlORB8Zf#%+ zX1232r6m6kP4bD`TG={4I74`{|L5y6;^K-9wkGCQkQ(HG+Wr5BXR*Sxne?*tr=wIk?yv!3G>Wj69qy zU`DVpH=6-F2QMVC0MEbC6dcSU{nEhdKcoH?%NT-a0vNDx^BD8+GIFu9@-niqL*z0v z;^bm9i@=5{>k3a*2KxxzyU033en#G(G{5?(gS~c z@&6>gqk+r+Uikmcod4CD{}k$fDf_=&7x?Su|1ZM->megE0~=E?WUytX{M#Jnzs>ol zU6}v>Ci};||1^O8gBbA?@9tqZ&h>W}$CdVTQfc;5|5e`QX@D2m|gZ)*}`V)4*x7t%RDotGcUA zjOzU%cKRo2q4rKL0Rjq;(~MP;@&1Sy0rb zlBdrfCFs92FvL+g>O;(P88 z%T}VMxzl>l6^6^7C_qudoJtPy_8!o`X^-&v6?A8k2b$T>{3gKc4sZ-#jJfHThOABw z*>L_&TTdnMqv;np&MnLpdd?t2P7McfjIk?fU$v zh0bDx4QA!VIPZWbmja|Kk4Le)#NWo`_Bvrv(XWN?F$sTTW&WE{sPXBso^dvOq8Gq8 z?*^v71xH}wb`SW3qOFb4nm)RzW9i(twq-u6vo^hwCgn$A$-oYj`u(*M`d4U0TIZV1 zBZ78%zCv%S=PMLoDQPrl0Nb#4Amj^X+`v4VL=-wHE@94XuL=|+JIt(!l@c3>y_Ka57?n~z5I*pd;F#a5q_r>n#iM0@ltQ;ul zUJz~0mq{i%IYhKv_PqLH)_$xuYWNWPo}J;$S?X5}<>ObSb#-6Cui+{%#p)h7WYc$` z_n>4N+Pq-C@0gIKn|-U}qhO$7NxOMn=ioJj76crXdze6q{*)0DfObY4^LzIn z9XJXMC~FUK?1R^F?kQnZC*RaAsEY_Qk@OMU!Q7_Z^KKc?P*#rg;#w?zcNET7_u;XZ zh3<=dvg-;8SVgUTr+mcjjdXD$Nr~)p4QxBPE-E6z)NK(mRbNNcZhpgXv(_syyKURB ziC6UFLWxBmpAk5D#k8xp!0$&IA#x-UOrzgOK#|IX@NK0{+Us8Cn+a@Ig52*D8{*M* zxbG?Ia6gA&O1>M$VRZ`+g@u-4sQDlc6&ZpKB?jw;b|>)VA#p!9$ZfL`CTerF7l9mV zkWU64pgDi54$D1Btq-{T*(`jyU4+C_BH#$YhZLK9$1LZh7V8p?1A64I%t*l4km3Y< zhIYMsO0u&ST9T7BMJQ=-1zkeY;@#4K2WRn90pB4w<51FPOkb12o)a@lcIo zoOU+3r?lMamPz9SBvJ3uaJE6O=<+`PdTr?RJn50sh04Od`xWRD3gz|Y4j=K$4Uzb? z@1!ImDeB!G(kiAORgg#s8?3}WUiSisBrBNs#SgCKEN{yv_JU7{;QU1nG$bOXoIZ${ z5B(W9?t8Uf6@ENCDCrFjxg;%hYH9Yrx(?gOFFVGCN_2k#w8fCgv(i$ejoRnQ)zlKK;Y)r@371VTg8GiR&o>|5FN8k z1)AO$z#%O+PRPdDmsSYRARz9ZYbv0Gjk^7EQz{YtLsLu^780$FU^4&`D5)3jI`5DL zvAXA^+I<-w*h8=XrAE5Ob6fo?zu>vzfgp<+zdTAI`>j%`=8rmt_`~!18O0CHb&}vt za|_Qi;9^%XtDc1_o&sw^Yd&E>A6Y*UBri+KLs$97AM-R9Hfs{JZ+xMhLq-RFC{)nB z%Xqa^yUM(w$cocCt2c_<7m|pRMMxq9PYP#sc}P!5;Gpf&8`|-x4u-Af04=)Q7)xCNMsS+8f1X^Q%U_0)72M{&#tSV@HF9&u zh@?CWh`fO)0ed}HL0lxtl2At(<&4Iy?N)|QG=EaxKLM(9f-s%lk2dp96VG6-|0`6~ ztqinJ?866XVI?0;-p80%L-Rl9WT+j!Di;H^2-*)`_nc5-PGJ<8YUDX|Lh&z@1v!WS z+u3Cd0j0eXr&%0V5u}i@mQi`%3~ukdXIP>KH05tb(mt>6x1!J?15EX?xU3^MSstZh zFTOME%rE@i9wEpifnL~1Szn?QdOggCol7J0wtl!&P&C1-kT(&YS}1{J8H6W)E417% z$+V~yL$f5b5dJ2YUrOvpDhJh>R};|yjX55|ec~A)`6s#T(A5R96#+=UmW_s4N;pvR z{qiL)n4Cex=?7z2&93^;C#(=Cqkyw1KR+?Chk7jE<3$C_*azS}o3d7JeNNi(sY4$8 z7B3boFKa3&P;5W;`-)p)=Mc|hMnQ#p{FyCQe=H1oWF;lubH7xVgZPrmQ=*lN^y>l0=KTK%9QD%0V!JV)gO8AO&LWSSvN%V+g1S!}ASe6pe$`TqeAaEL~Z3 zuVPSoDzg`E5*7C=4vz$|)m5;}g!a%SmYViKU%q!++Ftk%g)E4s`3M0KnZQ7E?-y8ZtEus~10M?&xzrE!U2CwP99IQd}#`;93Hv{?Tb12K9+a5yhupU@I~ zd;oOXAhaZ(cHk!)1Z@mP8?4FL+4|yj@2V@v;h!Lf{w8n(*yShzJkV2D^wzOim%1EF zrSvH7Ydky&;H372u@?89;eYubSwH{rzvA1WdI)$g>pKNBO@q}6RGQwSFiMM1X%vK? z_a22O_y*@{oOgop4?f9cw)=jScKrsUHA<`0_iJpHG2VOgu$=9`iuCt$q~yN=Tu(n9 zq~Cv_<$qQzVN8)Kqet-|;vq@^CpMHVRzG~^@gMx}Ox7uU5WPOFz<+9m^MS^D2oash z^uNXZ3tT^~;$uh{{~FiSc-N$gpgkO^>`$vcm4H7gmHb9)tj(CuZdHeSZ-14eq2D2L z^IuILx6<#m{r>}rtQgYiZxZ~;q-}pt;^ZfQ6Wtd!TAS|ajf>y&cWu_$h{1_|ziKi5 z()WiD$gHAn9C@x$QGYo8Ld_9OP7E%|em6Lmlz>B)K>;Tt*E5H^q1DMl-5g$lsI=xd5=2Jh4+u~#=fD`LPtkSx#yLRgF&-`CH z{Zr2hjJH+pQ3M|dM6?F04KaE$t3}^W9g%&&rK!K8X)2ngB7dg!U+}U*RLY1zXuAE| z8Gu#_Ys{ho*t+_~*JAK{91Z<;kwbqCDgF1-?+dQ@zK5(YZMMXTZRtK>aY7S-;soJS zzCNN;pgOCkKl-;i{ZpS-!GjXPPVc4smzz7J{XD3k2~o;=nfj-JpO*ySnhNh4LRtYX z7=DY@o~-&}Qhx=~T4Sum7)_RC?A-XuO;^v45B>HyI{fX;KVcyO{$MWuyt4-Ag|*oS zIVJ~h9g}2h2s9wKiweHH{r2-N0MR*zwcWe+=AFm{pllCyLU+QUIY?rj&;EP8)u(<_ za1CgU3!dNtS}W1<160&08F-+l{QK#qe5t21l7|jQxUQdnrksM{}b}wHh^<(?t!3`x#RcoWF>$^SC9S# zBmF>WyMOfbaQ(Ue$a#-73Ks)D*?1|XM8{7u06qo`F;ReJ_@@c-zaZ*d&Q-GVi;>{d z;7`e)RH((kubuw4pr0(uXzH=wyY<>vk)d9R9Q19D4*yML=vT6s`rrTaZ)_K1yT^u_ zAFL=RS5@9wDTXT-{)29R>5nL7ENHxUeIG&=Vt<4f6d|e*gRFw92~9nrsi(gfT=myu zY<>|*@Fh^k=O zf}9HR_ER$S^S&my8t0lM;~mBBTeosv3EtZd{FHG0b?WKbe){u~0EM)g4~=#PZs?|FYX#`2imxM1}VOOb2ZM?*%0q z11fk-Xi&)`8OMc(Un*xSCh-}X1-L?r+fBPRr!{*6MJ zeD&kQ)hB;@2o7sAd)ZNfoQwpZ0A)GJgTEN23b2EX5B+C>yyIO%UdTZtf^!b% zoRs)VB)uV`lfthS;y=WI4_<^kn`&|M$Hef{#vC2~1;a1NdZj8L%X0Q_zO-9c!LFzynA7WyLB==iGgVrhk~8n-gMa@-7kmNTIU+aP8T@5_NA7B50$DO5ohu zD0Eab&Jne=hXU_5phHRu5uIe?VhBWZVe^%L-Fv5lFMk$!pW6X%&9|8ZPDTP)JRB$0 z5k>*%V(`TOtTVjy>q78YYl%@o6zAT$Y-pSy_j04ia*fduZFE}sNxK%jqkpNYwD)hR zy@43j(ZpZdG(!++Z>3Xvp# z9lK3?vDZJX{GNg0krqpTxrtgt1b(x7pix;m@fwo(KTR zyRUMB{&QX?`%Wp8j~Fcpf~5NwS|g9>7u4S11v1E?3dh1VNQ5ZP8i(cldhr8b=yxtd%;B{fvtZ)(YFsH6G_2(R%^r#V9?xiddE2m9+Es z-r=1LqLBKxOIqLiOS%7^W z)Zs5E2IuZwQjY;t_F%S|?Sz0m6JC>uz9dmwPsMjHP^>$Pik1F}V1LddnBTUn_-88zLVA zk$_Hz-Y1&|oqvRFBY~KbnoflAAf*67k&;64eux33tx~4=boAvFw|oX3 za0`%3EKcmt|^W_Dk?b}7>LG4!Hq$dD4sfRy>&IgbGo?`j&&v;jp8z!z6=Tx$4=o%v;UC&{9~zRkhp`#6$#!+P_x4x##tgr0ZfE#C z5U`KU2bgSlkH9{1`)Rw%NquHQeNzEuc>0q+n|GF1z++6S1Idy78({$oldmd$J*rLH zn#BdKG#<&Nt<~dEM2yZ0ug%9}@YjG$pH7FHPQKf-#lp-oUSCAAS7glm{k><7OJ?F#t z=aB@k#O;jFZyFCQ0VrKOs89VZBRawRch_F{54wZRCt?t!UPu|(#Wa-BV52~PqlyH; zS`qn(3D)cr(yu-Ets_u~i+2xn>))pqs(-;nmJ7r0$`@aM2gC2(z&^)@e)s=?D5c4Z zl~m2#3m}&w2A4P$CpMJQgG+<;=l?=00jCsc%_}`V1Z-*(1F}J~GUiXX5f)w%8ckGb zO_(6yZ7K*!Qz9mHsZM7woHpYjk^q*0K1XZdZ~9GpFbO~zZfj~zUMOXTmwKyD|9>x< zAXSPBZ5bw@9Tx)1$UZkjaL%Jtz_~zX#MLLHK3^vOV&oB1-!JLiV2n)$9%iu$v__NX z8Qa&taLqO4afV+@?`^?8?a=RmP5c3}&I;Oe7DlIcKN3PTo=k}NVpFvG{NKPVZMeFk z=;SiXZx4Tv6>)obRZ@ozh&{YgEq_5e65H+2F$HNck_|`CPRjLKTTEsn&;^D_1<(Tu zWFUBw5`aS9On+jz{;ii^Z}rJPk!8cB5amYG$EN!#Wn$lwd4ddbG~)8(Rlw><2(l)0 zt*EC@>z$+rXwt;LHSjda(@&d>!@ajg_kZooMu zx42dq6g~uuBDwcQ`L&L?rhh>h0RT01b=%b(Q%TrTebIWM>LYMpLvRy!xcAmKLi%0d zgfRTFVu>tY#{1@;ar>oJEKcOb53(szy1UWe{OF&xMTXT-WOng-V*-njR(&Q0w1S}2 z!uGBGv#m5dE%bL`1LtLi6kIy|@u*@Hu82Yod;xTT968(HG9%yD1b-lK_~xX(m-uF1 z0d{HQ=|5|;ey6NTk@yON;!Bc#_!ip_i!x0sXoAPNhD^7pz(8gNH{gTZ`imk6NdWrT z;WySobZl>Z`6a~2^P9 zNq2Di39UT2wTaLgQ-6CH(!p-^9c2Y*)N!bfBm%8uFA#lLl>0GNks=P;n#Rg=gEnYm z39gKgpeK?DTH}as8TYpW2sH$^KslYj(6(6n%+mUkzqPDtdFYJ5G)S(P`4v!W$1J>%GoFl8c#qe5T{D1 zY&h8X(BCjNH>ij;CLQoJ@NI{7L6U)5lz)nVlPfwMdVh^3#9GRG74XUay>*2WpqUZ_ zm_#QwCa0QhkAttTAeVuFPL4PM-!kr70#GVH5%1eKiWuff>CR(IYnMJ#Hcs}lX(HT|+kc_ohzHE@)4D*LdkFJ=*N7OKQ*;MZ^ARyNJkWFkR}NAk>~ zmBK~8*wu&7R);OJ4_cuZlp^34qA?+~a{`|VhbYWZSL4#=XrTv@7^B`*p`2{L#F683 z%L!;{!Qb*tx_=eG!pZjJMXU7F9h~`0-d*cXM}ISDvu})OD?>}86-^`dT~eBP5%cf? z9RpScd~g^IwRhCs$@TzJc_;6O%?#FBY?fh-L958#_G_vn}`)!ErCa5)i9dSD!;G4#MN&pe!iPrf8 z$cC%uerw~wHw{{~<*gyJT1Y+4VH9{TCB0q{G{n_c?7kaRbQmLl&iU{T=bMNzk^r)l z1P=Dz8i(L^kW4<~2)eApVRW;FMD1`EBln^wWKYxbb zPW_o84SoO}g~IECr~`$>7^Fq_#nk;D8{TBr5`trLc>OZ+MwT3{{8}5Y69M)Cg)yD9 zwt8@K-a?+rDT+u{R`(T85}I2IFoU(H|K!TXxsQb4(8iD%Ef8NF1<@CS2*1Wih)!BY z1TBh^0by*tAyYDq3ChuWLkek35`Tb{{w-$25QC$hZoh^+6YVpzgFH9KeIHLk1)xqe z>=z*Vu_^kSKbRHE!|Axj=w!x`z(2M31m_mO4Buk85ipQox1DJEB~Aa3)_|=#aEoOZ ze!qx&Xlpsxesdgy-{r`@dj~oATj}R*iT5pu9rrS{DN-AE0w(cM;IYOeO@DHQazV{xZ6`7V~sFY4ze_8#Bx?@-nfwWSD++k^*kpp7FvHx7k;x32ImE+5tWhy z9Yv={ZGQ-UxXZ>JnzudCE*@J%VU@;z%HMD@h@xJ$&C(JtrLk$L4d}$Q+yKd zquu*U87~NY6^U`;RhLN|XQg@W<5uYi()D!>XyrZ*V&;e199cFpdw3-_tX5 zj}w4O*yWQd-T;6`na$zq`Oh?s6X8xRVvRyV34-I+BGRCIz`x`B+OGG+^+)!%Dv>;- zhaA#YZWPwi!6tm){eNN%RUZo#Dlw z?5{rd1KxWy8molqCx2C8LU^`v@a@I0sKRBuNBeA~-9HFqyxk78<$p+3PK?LQVNlFQ zS1u!Ee|urvLN1JLBpI|S(C_IRaqlYtZ8=#t$L$e=*IBXhL%LX9uSzN03`$^^DyA$P zQ6Wus4dmJoyvMr)@>mcz1na$k`yQigrrjadTC~>GRmF64y?-6zv~T7v@`fHC`aRh4 zNolk>xr$97RhBUY+GMz9&fWGMjL|D?dY9JDf9fxQDEt^Dh|rMGoi;*DH$UzEU&Y09 zAxb~(_b?5SBl5f?Zb0zj4=Ls_EDpZh{u$Nm)+B^x3wdVR3*#n7731-C@jb=8p8=?o zi~Em$qyXDpdVl=KoYOepq~T3k+o_0E3h%);UMRmlEI8V!0>t~HBoLev9RQBoe@lp_ znjcph>&02Cp#h$t#eGK0EHiblS7|GWKpR4+ zV>!L?3P;1@wq3l*cToDbaSszf!aber^`Ao7wW5Fahi6qy3?8i%KKdlS0FC#;Ur;TO zLnSP?CI*E|L!a1EI<;ERKwDMUBlxdW0N&NHnr>g_-EaQ`9=LsX8!D~+PVNln_DF|I z3ENaA@_*m?zvi1=1?b-D(?7Yqe(5)==#yeolI@J5?GPEw?9{;vac7aw zHIXLq1k#+z*EFslpn$C;ax;whI`DCzrncjlx=sqNc9qd>hdCuM2GkPp+T)$X_r@R<=Hk^;`0F#ETJ( ziiz_NN-InhaJgxRglRgVTQnf;fLt^rT~dn{p8%Z{q7_1A-X#E~i6>a?mo(Mw4ln%{ljW#-E_&-q-WU}FKB`nox-`92G_ID~Cbb79m2XNb zf(y7tCb(kc!O;vrA>toeQ`e(bw6V?RdmIh^PRQ*KMP~))PHqDKX3>I#w6P09O{&@7 zTZBphcJ{sb-W-YaNf%(#xU1Dn%87cm$+R&<=juXHFYU1YAAa<;co=jDIA6 z1CE?s9{BAqho=B{qFcCc8A>UP?cfP`UrNvY-kwQa^iTh5E2p0QZ8FnI6`)cg>6Mgz zR0v0u-?r~33fp^;aMB8xw!%DW8-q_Ku}L6Sz+%ZdOlOpnt#N$!!C!m(zvrF*yTv`M z0L)1}`)z1cw$|;goF^ozra}fVM1L|3P2&aN)8b4PgB|36`?UTE0n>T_nlyoKhdi-u z>16#U@?h1J+lM&^>Bkdu`zw8Nxf|bhL@-%5eNBd#P@dl?T(zrAzOr%pu^;?vN*NWS zBcL#eudfOCM84B$Wh`z!3Y1AJyte<3iHupilQ;$TrJ2^=@HYqRez(ECHOLw zvzzZW_}k`o`?v2HCvuMxfI{i)L{E=nz+}bpCv?_Zs~Z9C;6lE5F%q4}$D{4bZCH5)gorT~Ycr~9-XO!A208HWG;}xtw?D|E@jgiaBnYv#7~8@5 zKuAhY5=URBE4LJ2R!_h9Gk@K|`UU4|0Ya&^XP4^MsP?_~i@~3~?*XF{^It_-9jk-^ zNRVJs?;ny|lz@I(Z%8WxKxLTjzj2)y5Bd7RUu*w%$2gIDlK_s{8=u68PS$@}XZU2#Jl3QP4+k;OF;7DtqD1S4m2${iE0^wAM{B!$EwHN?nM1T3Wnjf~kT+LAn zFhw%_1IGIwg|?kEyn4TdtZzdz7M7l}Xj70CL(1`G1?Z(SpZq;b>reb%S675Y`jR7^ zNn;-khwasUL z4y9B``Ol}mT>}J9;~gr3)*-F>lJI9DkF^Ir(rQ4+Tp%Q!zke9TE3&S|9=@gb9{EBB zX5%ZbbAbFwGXTt$`-Ca$pc+jfxH(#r3uF6@M_ z&+Q3dmVSO>%Kx?${UAgPGX$HCij9MEoU2k>1u8tYN|H&#V^Xj@YvO zlBv6D+kgcAS(JcnOPr+Qn+E5abde-W_+$qkLLIBw_M1pG*iwC4y#IHM`1?k20=xmg zorox%Cx4QJ<2%88hvq;5+7>IHP_{b^jZ2gIAd4QI+B79MfAnotpioNDw0%JYl*c8j z@0KZev;$1te@p&AQCH)(q^prP_jvh#BBuWUN_Tlb4FJDUM3MGV-K9&vZ@B)%&y|f= zv5B%Jh;A|b3o2lYqG@WZQRJCyj20{2#de@=BY#1~_VCBW>MtgJ|Hf4~=LG4OTz^O^ zzq7qJwqlI?d_6n#ju3y}DDFuDh~XYdMaO_P9c;0Rug3&m$?t#rx0TI`;S)+5d}yTZ zwkCmk;v!pXtq58RBQOS(5iEBT#G%%^KydX!C`2XRznpz}^Rj3-9FS&%2wyuebcv&&_7F(%O>cg=h@KKxQqK^YWg%K#`jy_$uw8 zR-)=_B0~J(*y>M(1xBE40fHBqIoC9DMacFA1>$dp4F0ycT^Q!uBKv%+ zxQ8=gjA{pFM^L& zMWR+HWAS8Y6$vB*>Ep!o|Hdw3JL|%6cz>V9d~!npy3?5GMd2y%8oGpiKwwCIt5_*NqTg z;szW8f)CINqQ-fTp;dfo#Xn^F-$Df2-)r9~tqso2OOCYtO5_cFNBRGt`tFFbJxuo; zoNVpJJBqs8S6M#nc88~bdi~VJKZdeQrgH*XT%A>vy}#B3FS`9PS#t?Y{Ak;+RU`&! z-J=recWCc~BU4zHF#dHtr+=#E3yy+t1Qbded_D8kZ0BX(9r4%h{98HryBZI90%${e zZ=0{+lqLEWA94GTFt|enn5B zKCuFghQ;tF9F>Dg;hNGRZ}9OAz;O-t_#le_ZI=^#`{Bm^zgyJhj(-AF)>--J+Qwu5 zo8^@=KM;U<>F^=V@U;kgict#-(+-t30*j$;ivUf3u2q0KLW?Guxab$|&`nd(G-YZH zTZNyaz5jgt)>Uq|f;&$2J>VWHL%mNDfJ7vqO_zX4ne|Zq!}04FjLrMcC~ZWzBZPFA zk^McOqIml$6nUmmL4V<5NTeUAT{3)73S~52s|4^m^6OYkgA=PO_u4t>D;Q~@+Kbyeb=Tu3ptJAZ!-#?s99=DwM~jXVdf zBz%kbYbCz#>frBqysr`fkTCoP+c|}?eVTHc=&Qs`L?FQ3)$jK~)O}jYrTkrz(T7k! z^UOl<2@a~L8ZiJd)?h-wHw}$%i5$Y?Zbd@dPX>|%LRch#cRIKv0MLWE{guiv`TF~E z>sQTplro)Oe}C!xUte24|NDwgkGl3WUdnc3gm|Oc3nH1gI2XtY`F&#`1i|`grHIM^ zayhihP%RwzNZU{RAzV{Yl`|UW(w}T^{xtlHp4s^7YsmBPPL01irux2@c;6)ei8O@E zhh#dVnQsy51CRk=-{!-|nA9z-pUfH}fq&Y`N{G;|b&~Nz5(N>(pFnV4 zlxSc9RMMJsXDEW~EZYRoPI?<2X#XFuz4ItLAcpygCU1Q^QJ4E^#kc;U?qK7;US2)> z{Yq)(m17~YiAp8Eh`cDB_VGmV-%Bl_O0As``22#*qhwmN5PWIpKOuO$YiR14s+?0+ za`}izjDKLn3<%^08+$&QWn!Wi?vJCv&%;5{0W;6 zPAzP`k=sC~wk)&&q7z7`iQ?`85VR%)LyUe=?%`$lr!*n~qheYirYb;dV)QWvKj-!q zpr$SVmA?Pif0Wx_XUp#^%)hIoTGWaAEqqSIiSF_zW zIP!vQ5r40 zE2{a9GTC6YKRERlSJp55eq(dW%Hcdj#8c0C5%w@vEh_O4r4o!WFfVH|tI4eJ`lA7D zT0nP9ZG$-Yw3TKEULd~S(KHQpHOJL;GJoaiOU4b}4o`+Txrd9db z=RRpeyss0$eD8A#z;-VVi{6<(SoGF@ihTLW7U~;eA>pkPn?nb{Xq;Ay-wz>S1=1Eq z11<)vQJ@SSg>N|G0HkPly}>sPM;m~42GExO4`2WovBf&JvneV$4|%xiKmn>VIDh@? z`oqn?(d(~0>m$sjH9kn47g4gq*BVrSsAT{gh1;(}q$ska2qlL;as>D>Ng_UkcFxq= zcqM|5bGW9WuI7}b=nx90!r)y1qsj9ev}HcJvhSPe8ypS(4mjHR-xI{&H;VUV0`S#! z<*V!DgC~c!So^nacm02v7fa6wvVTtwn}PJswyv&`Oe-9LCd9=W@QCFlw}e(2@0tV^ z76~UEgbsQe{}%;O%Dvi6+QZ+@0NV0DW%&DC0VqY*zr_1t@;9Gu%ap%=_Kz*EUHX}# z)6M3kV^(?D?Oj_d^t;w>a7_`vxj|dyYCqr0pA%6jVf+M79 ze^Xa9O(pJ9Mg&zt5L<7wCMZLwM|Cy5`894=glzu{p%YW3bhE`^m$smM~eq-xgjx#32fsUf%!Hy z&POqq(q;h=vYBiftb&96H(upv2GqiRZ*YY7Z{_0d%V6exkpQa6Wq$>bbxyBjy;J{A z(LeL=>U{Yz@${DOrq=1rjS6e@Lfj)Wn#?Gi_qgD}2_Z-;>EC?}M6EE|5E?NFwHBf> zlvPFaHNFubP@)3K zpUsQGQ*|AfSFJ3!0e_QW6gaO?S|7EBLbxgLURdH(Ixzcqq=C)M}9#6z6`n%NZv zkay2+*kbkH%m-)xur5}fw#MMoZ7y%9Ap+KDjMi9dlclq)-+y(~R8>O#MIrMzysT`j zFaTo!qb*Gk9XID{f|K%34%X42sO<(?SJ&v9Ida(BEx@q^pziBA%z78lro#!hYyXBZ zA74|Q{;4xXcjbT8?XCP&(e2}Xq;`$0+R#L0P}-uj!5RT#wbbrRi#l`L&IK>)UEeso zRcP<9Hp3XHvp!Wcsgg8XW{NBLCxA9H-otbdY((AdQkJ+!VaiUpex0x|j# zM;m}v58ys407bOzk@e0!l!t$E__hLcZ~5X+bbD)mwbLCup|z!~MBvkA#R8XSlA>`) zwY*74w(D9M>NU=hHHu!*rO2&pW<$UwvyL{g``~Gsnko@{T+`sacuFQU z0IabI@_#EcAmY3^*njIKjt0OZWZ-uVNdVuGuixE>hb{s5dRJw=3+px;{{F0c>Zh_| z`LUQ~$--OUmI_5?E!GO7t7FYVdI=Q4d+OR@5}TvQY+CCI&?h9Dujqr|03c}wMogv& zPGOYBL`_`>ffOeI(W0A=3m4cJV>}K5Iz9lruYU-@y#F{#*(9d&@C*Q}`L5~>&z{YT z;h!HYZTzG*8Qw=K2R<4?h-to)Ahz0~lp;$y`?Siu+TdbD2Z8q1jm&l#u$UmEY1aVZYVkh5tz+u z8Xqy*&?z!;?+xZ4j2AM-wTmrU~H)!G+*`B1gFI<4|JN4g!^wf5BA&@keiG z0PPC!zE%LHSi=?@>F_@s(bNaZ*lsacd4KHRU0yx+M?0O~r98KkwQOpPHK-7&qm*4@ ztRbKtt#lgD%C^QPm~V^iS5aJ`b*AWdGl-E%U9q`7Bzn)*ja`bu(CuVNxi`=>HS_tL z`Fu{(h?Q57XP`ya3vDS11aPDcnYHX~eeSgw+%{j|_a86)AD9jNohN|%#~xFlR)1Db zf9x-3`Re(qnl0#?MrmSHl6{r*`6!LeG};=RizuTp#-NZPU{P3_rjb^_N21!LCsP z)XkJypqo9B;059>JYMK!7Mn?nFqzDG;;}QVt__&a=2UgfaA_zEPZw$GhS_|^Y(9qw zd2T67FPDt5pjCnpOJcD$ckkWsPBe?Ga6NJ6v1Yn9&cYot`eADpN zEd`j~`iKAL-IXWLSJj-NpNm6F@X2Atqk@#_ojj8jjE`6?I{pM%?d8UhWd`R1b>p#C z6GD*rfYsE_h#Zub8(wKeW~9IOP7ah#6@ZGO6(^VKLjLpE7(nBF(`NVMTL8~J+5%`} zFj~Khr(e6zKG{)M`^uP3-hW#<|EGt`Xa1xzd44b|Q(I=lvP~IKNmwJcx4vw7RE#3f zq7`+Ny}oUsnOewRMQ$i^OQ(<)aWa{5;lc)+rK6|+rxjv0k{VzvVW5oGPruk@cr}gH3g`myZ(b~n@{}b{o$z}sOyHwtfH=c(%Ca; zYcR?#N_~_379%RjwaGWun#9!$0cC~klj(&0NS8pbTVRc5ZFRtK*uf~pv=We)(TdS% zO5u^5Zeu<-&?|%@P_+L#QHxTsS1L^yZ z#~mktrG9odUdK0#uYBR3E5Q8Vr+>}w`8R(1uf6EK<8U-*dw0T>YrBj_Gp5s$y75fs zH3x??jE>~FA;dsaH#i^2GrbtO^}2;nG=s&qGEO+0_e5pUN=iPoV8<RPNFQztBI;`}Hh-g>Y|p2MZ-0fO_q#>y?CejuwKHaa zZ^G7%16;b@=T*)A!Ia6gWInH{>Y83BBP$HbDx&vtQ^bIC(kv?F0gciItvsHPV8Jz= zJOdQIaevfRq$+Egx{+A{5v}48ZWxswnlR$)X~5DF+yM(vp%PEwXr=eC-TLFb*A$>u zPrdM?o!;`#=xq40S?O`jSXOiiYOS0f-kwD2aw?*NIQV)mrJEr9 zRH_*wvsp!qk&X2wj8Qn(Fd5Hft>+!%$&9ir7k^rRBJknTCIGZ;>if{1KR@Z)B@ z_v%+T5_)abeXetK^B*_%c;Ii?9VY;P@4FXs`s`EBuWnrWuD7o4ptYjc&FFV?GAmkc zYr`&sZqCL^pHu5YCbNq1v}80YSy}3Hb!(rdI%IRbD~=xojPnFz@WJ7u!i9)6hNv~p zd4J|rgLjT1lPO?bJ5+RJmP85($^NSq{z`P>wjk9yZ2&`i;E$7l?wkdv64~S-jmg0q zs=st$wL4h<^ZlhWf6#eMSvAzP6EQcfp^@*UHV|}7FkNx$$&AJ-jna`AJl$SFRaQ9X z(MF?<#@7wDu&Lc^(b35ms*XO^;Z?CniZz{bXq!^0`Fxx-q6CV$d6 zMOAt7EF&{AILvHAW(-wXNvTD3D!n^!4!-U|SL%0|7le zyZE~m^YK*$=%w}NerIoR`p@XB`$AbAmDa{)iE>90D3SNX1V=D3@UsiKWdwU6WPMTc z&4tFRjUwxIK?%!GAxXR2$ypxuh<^ljb`F?M=d7;usp^Wds;Fxx@b88DuV6y5%+fTH zu$4O6_vd+zHHMp4e)Y8&{Vk3r{_V|w1xWy{op(DEdf#@&-}#J z_6XP16xN6!qt$eaj3O7M6>T*uOC9n=@Q6|N`bt6{a zT2mCcFuPoXHYt(#hH^Gb)W^#Px_f8t{dwu{^ z+B)3+Hy*C!F&kZ0fa(s)GxawfJ$MLBRL)9mg|8FX`c9Ya-B34gX5C~`P^dPr1O z%H|lbR!iCMMGRzKH7$A@tqjHldfg1)SV91BLI*VpS9_X;Vz9_cg?M!Mm6D-Q>yqU;H{Sl$t)?2k&Jnl&_~CDdeh(Dv^UdPUD}dRp zyYV`{E@JcwFim-&X7e&+7TtIOUc?yj^G1Byj3Ubf>RVNg7=K_o6|zR~4Mfj)e8^xh z#D~aeTrwOM)IKDk2LmS3)HOavv~H2#0xt2Xs`t*JGr3ht@00X%SeQG|R{ua6(cyjF zuKSL&0NV|~JFoP2jc?!e?Bv9F=c{t-FJ1hu!SaQ_WQvs^4vAc2ttEy?-FT7aO48d} z35-faTNG$v@P8Q+1vjx6osZ;N<5C5x)1;peWw>jtU?Pl`DnSXf*LzQ0H%!J;rn5QT zJB-!>>WYEJiCeTuBCpySOad3F2*$v0*oEM^{^l=TarI)?Um^#63px02ar?yo#2tRP z3kg8!{BFFCuZ!sC0H&Pnzj5`=FMM|6!gqa&&=7)6Z-0ivhe)?$$*sm_;%Hk|4FrdC z6|SlAO+{7Bu=#*lS<>z13ynXmG&YYYXK;dKK78Nt^w4CLsY zT-b*z*#*n5jZCOr)tWi9M4)$&fKJ@=aMxn8_cdknVb))H;*a;2&iq-M^?QwL&?L5H z5RQdbvVXQ~g?Uv3msEG!3JVlLi58=do`}WOj%XBx7UrJSnj*JkHbd!v(xiVkF0>k| zs%APbagAd(o6$N$iv&ENA=FZ#x0c;4&fg?bQK!?PnvMMSwa>j8L%qcj(C2_7pig`A zAD{T2NC@T~CxClgmTJIUfBhH!ht;zm`BZQYYk#DSYnr1n%^8iZq&$xy5@JK}HNI{r z=OcRk4&$k#sy&(21Q(K2fRuMWLbq4YSB2=pRT`V+G<8O|$ca9qspd?l4UH4@pLl`9 zv+wUj&ATnC*$oA#!P@iR(;1xlOIdgIhm6*X zwtuMhk)Q-Fof(Bq2fOh>zS(21hRs}&*PEr?Be+7dHUS<14c*U9K~JIFHDQRF%8 zkiDG`jHUwPolHxbx)O&cEv-UZ@{2Nb#AX(wEm0)|XcVzfV{=BkS7rx0FTV_NpRYgs zSCItp&clCV-_bj-0PfK+>ezQI&c-)BH-Fx{vcJ4`VKpWl{t%@^4BpeUhg6>;BZ3Sh^Jej9j=~n zCWIWkY(ZU`iG>JOi!cj`qN@`GQ|z|AY;YIuMNz2V(Nn8P zlUqzDBL)%aFj_=fy^G9da}Ey2OlNb-vXa(KYl4ZXb%44N>`0zx2uVB%|E60%%QALu zzI-@6c>DOCzdignIlB2z=&-2#hH<-9;VFbAV;Urn9=$pV14S%>L0Ugr; zd}rc3vCqi2jCAYk;p$VrxjQ`f(>h=NkoO)`Kw+p|kkwo(xrG94fRGfG!A6ey`xs@A zmsWA1PFsLf6&RC|v{taj3LKY6)imUp!OeX#<&@-H)iu-EoVsqLT`+?Db5YD;Vgha% zYiTtjQCeESPJvO1t+#&VT7O;cxBY$#@@et?SCPZtV*FcC&l9um`$loc2_U$8x&>&5 zE0e>Wm;e6N*Z%pZR!={7rrTT6R!Pr}k4b{5mNilE_@=0dWlZQ5JO-(E2%2ckt?g3vJ{43;{|`-ODn_u!zsV=g}2Cbpno@5V`XiQkDA%! z5EWaQXtl5c^Ubt9^sON1J2n8R?>*6v$G48z_^K*;ryd(DU-+4#fBN5OyrQX--hcv+ zC(GMGoJwfA#Gpi~IISTN<#4J<^pU)=f=4OaYrYy&=7>~DoV+S$*Ee|Jx^9zfdvB(L-s-n{nm-~TVJzw!^iyEi=j;^xJVT--SG%&_Pz zDUo(^1OhII=G)4kgXqG*ndy zDE9WJjHgqE{SKpX$^Jo2pi8H_Mhu4eY)p((dCAELqM0|xoqvz>06Y+l(YI*{JZv%9 ze^mi`dE?oi>@S`DbJ`Bhy7cwP8Pd4mDKgRKi?Ep3H$E-^RL7>L@>3tktQ_hXMdT&R z4I$I?dtJ1G$$w-fI1i(V38tOr84<;FTH(Ebc@!SkNXsayJrI0CZW=8#@)jT*gdmo8 zbFw@qvl-)qtF!UmD_8ZrnO# zZ+}Ga?l!A$=N&4+e#^RMJ}-q~t~H@42~IQUS&SYsE~JEY&Qq4t^Z?6DK?B~`6-PZVBmKEcOpB&oU}_G&7v(uyL-WRbd( zgQ+9J(|=T;lp#+;UKyy$7ADUP-Htq}(^-kpiltsbT}$OA8W5yI?y2jV5IsiA9>3LV z@IIid#abf=KONB!g-_7wSUQ~!#u#>Qd~K(kTz{FP)@{y_drw>TU*pKe>-e<)p*Z|- z@)JPhcGuLKKpzq3altq9@&2_N?&N;LesBhGe8B1=Uaem>rYYi0LoThG2LUr`#^$ z*=qTCP+L>R+zeVrjEC zJhwSqf4bipUa)l)xqf|*Z5w&>@-{j)#8BazieA^!@8uMoTtFegkz4U~@AW$Prbb0c z5D`zN4V|LEsxDSZOTW;Z&{CGh;3s_j2H=<(=))7P7PHNwfBqxOD;NH1-d*~&f`5}} zWLF*)(YH^&0dr)7on>kPpN%on)K#n7LzZs)R5DVK+`H)f1v-xXj97^aUt(2voLn{w~QVY!!&cVAh5 z{(Jwx_c|BM^|xN-OtD387HFKo>5S>zuNk*>`| zhc8BqO^G3T%6W+oUbGIQBL;t@(V!LWx&(5&A(nIBnqOdFt zdyK~;a!M=}O(flV&{UHd#0k>tpN%nYBW+8De9w(@&L8{wPFz&eE2;vOcTa!+;9%wK z&-VK3-xU$sv{p$^L5s$s^RlbgsS;=pe@m*d>EOo*Hr?W01+nNONvs=@^&$ij^oWAa z)8w-EL4-~N!PlY zb-DW*M^)PKet(PG`~7_$(tdyc-Qr%heOOIOjWU_4b|2*Hx7GXGqSv3 zG#Jv(0BRD}NKQ#His5D;5L`eYyCS+O1gRr9Z;O+N z09sanGGJ9nqN`Q$RU8~n>EwoPH^*o&nGr6AmVw=LI>ot~vZ@HaA$T!y5g?}g%P}UM zey!09LXZ4B%L}qBV>*AjS&epIdL>4`!`Juwt#1E2`~5kKeqX&OKF3Lpha~|3M5S{V z1+3j#Y#Zcj$dP2wMUp{}qeQR<3N81P4vFHu3%*_7`)Il z4y{8sgz&wS-$T~p*5 zuUnDRhUgon(mB8d__#wPaaA2%g;=U)`x^H(uq) zji=(+wuz%#zwP&1+pdQD?B;YY<6%kw04SA3Wpb1@&ex;kD7zU_6&z0neP9(Bx$3ZT z^X-2nny1z}9VrV#tdd5&Mp=2lBS;ylbfS`4eB-3VH8y|w4LG!dJj>B}&TwUwjg>C9 z#uJ)qJOZjtxBL9++A240+$6IZ&bcMv31Gd*^FI^e1+COi`WXLp;446>wT>Z#F-Mg_ zh>_^M5BH-os7GH_wsWS}U4G(cyTi@j?-K*gW<~~}QPEEOgqg31$qi`%gj7oS79O;c zL+_kVD^h=e$ zC+Rn8x&5_9YeQBPNe-1x9gbCny z7(0lftmRxdstk@NgM#$t8Kb*Py(}O0dNj=;!9jn>GZ|9(_Mrx46q(NG=Uto^@{i8* zq#G#fD73~0P$p2ID9f6vsxVqpmy=t7xp4mcsVvWlG1BREn9XMZm#j74)$jLT7>~zj zqdOtSkH#1$N~zPGqWFttRc(b3{xC9hT8M}os|?z>s}Eu`epzL`$IlJcp8T7|VDm@Y z(mj9A4S8~7QH9h{3I_xw8mx`SyrHwV*l1_qjG$u zb?Is6N)rUn-|qLXb7a?#gLMOHW*_BkTM)_^Tu@!Cvy}g z1mE1qvTWnI7oNAD|J>)W)>4*bK$6mhwY9ZR7e&G0Xe6Jfac6;#bvvCufl}v`QjdRW zt^eZ?!k;J2I*c(-g%GaA7;lgUPccUCobz{D8B_;fRDiPmr#?Q|c=2y#y_JuuAQSt% zkb`NoN{@bk5D9f7C4LN|u^7Q>;ofU4Q-2qP7!{*pX)vI1j;ax$Rh}C%E8BxS&*}F% zWSPdaCLZ458b{qotF06w1()g$x%q#Opv7p7QYMMHsFZ*#d0t>`K~+uTc=v0UeKUER zqh5cG-1@snzuzAG_SSD#e8>9z_g_4;2|%zMkvubG-Odp!59s%M5nwu5go-DJRI&+cvd`@O9JNqMM^BEBVpY*yN>c-K8$gtm|lUuYADe8lR9hQGrmQW@K z1)a?D#?9;0F5sH#5NJ+qo?7kpx*Q&k$g-T#=wJq5jQQ|WPd(MY{N`nh(PUW`=JR>q z81tj6Yb)pW_Ybkw(lpI!;2Gf1TKj!jX8+Tws^5$;{to1pY88g-C?oL2!#SJJ$n*R? zJ*@NHUy=R(>UaIv()v?>+ZKOI8>mQD$U4*}DJ@Own(RfNPkAP@N+$T3rLZ=6?@7O% zDMej3!uTsJE(EkT^gD(uHv-pIP-KSH)gj$ZMxKc-z`U%f33#t)wN^xaEyLQJx|#{; zD{(GFliSEp5^;vgY(}@+17$eezc!s6zV>Qb?;XeTA8<6~Z*97c-}--v$o23K`o38_ zlnEe4$h5|qKxV<1cmFbql|1ep90b7id%fj;uS2ijr*VO-$O+9Hr3|MwHt@blmSR#) z8e?$5Q_rR-W5jL9*F5v|)9l>3#q4m0PPa>UaEhuHOR?aqJ%DGQd3G=!k1)m%f+vJH z0?hgI=P$0Ut@DL1e35^m(_uE9mB4UiW%-k0#tAPQ@^)=>LdRp+=p{f@V&5qx1Rm!|1JQs-30K}XWVvNHD9E!6=RDp!`n`V+gh*x#wQHEqYciA6 ze!K{Fgs50v>eJ~+xnGqf-ivXI^FC=iwkT_v-dEK;VGoRmbDCE9N6a`glaXZ|nx^4k z=PNgxa`#n^a2Ut2{B5t_-umsJuN?}$FH8P+#zU0=TGic5HCQ}GYrGfN)^8QPUgu(6 zd$w=fMBALv_-%js-5y1^hYk(+h8x#!;(XxDsdZLPpCv?1oh{MS6`769CL<2&39o$V zi!^o3b1yv4L1=jU#!gywg$jsIJ@s_)#V>xIx~|*u|0fE!>J%4KV)-5p-5o&P-T+H+QlPha0`OO>KVbX*h2j5slsr3NB{VUE^@UJMNS4Iu<+6Nn549hR4StgQ}EM5?O7 zxth#sVqt&rWr9g8C=-gj=%S}%Is95re($9^nggjHIBJ61eI}Rd!Mb{adHni94>`d7o-C#T| zi7~_w!bB<6AFd3t8#it+o6SHTu(49A|DhLN%>Lfr`|s)Xdfd8o3t+n_ij@l&E~vLI zU#8#db8v9b4*t%cJ$L3~oo*MU6h)phpU;QDlUnP?`~CiJoJ^(|WzKlze>BGU4}h_? z)>waI|4><#e;@e&aU@CR#@GMB@yfttdG=UtGfWm)Ug=?t#s@LGj0C(>6j?zCL2S2) z(8=lK8KK{y@s5y0Jgc(e=FR~{W;nI6Out(sOSOpB78SE(*Cw8POT!NRZjRP4o6Rv= z(=7@yS_#4(Xv=?)!pz!S3|ov?zgugtHm846bO_N>RSl!vuWU8d-s{|c>$lwfZEknw z-QjjDe;R6haN?m#05LS|9ULwcc;90vz=V2kp15?Dr=R^W)qGBf9^cg5+`3MuD9G}h z{r!F3dh1QB&FT007%QdeWIADVc)-E_KIfi&hO(}ijK|nK=lb3xmB&rnTP|I{eqDdf z%Q?tly9~r`w>#`~3UzpRNLAH1=MI6<>9c1p8m$+7t@r)_z!-D-+2@}xUU}(d@;t|R z--?Q!9}N0GJQxg_PG@9!hMT)p;8~#V_xt}zIWM2lTL0D%!jB_;ZJAzMJJbTO-c?E= zdiq6?2Ajs9lqCj-GJ$F?I(ox?j`DwsPLV_6(dS0UKMIjiS2klduQ(Xb&|0xH>;WwB z14ctpSi0RDn`NMMQt7EtN@Uv0sus7SB=^?7fr^MR7OjogePV?V zFgn8&8D}4VhNdb(DK@)9);7<|+9~hQ9}FqyGxEIP=8bENM+ZFj{D*ksm9LW;DiGA;6V}=f_4~bN=JPpP>$Mod zuZ!>t$iQm{Nk}bxHH*F~nz{z9m}G|GQlI5PpUhg65_zt@IAO9oq1Vkh997sAOTTYv zl73#@cyt2VoLV0e8PL=o6``pEMK{A5jZ(q@)Jb$Bcuy5PK1iQ0Oh11kio6Tx@Gn<)@y0Kcl_2r4(HwC=+-|#ZvE6MwYUBU?)=|*0_gX9 zEDeW8l2|7!wr<=+DP=F5KU;KF#%ogCs{x{5us3^Y(`OZsHzHW zE#5U)t?3j6zjX7TlB<8fM_+u7&;If+GoQ_=8;1*Fir@~OIN006Y6J4Xd7!DQy4u>> zlA%_N2gr@oxpeVj{!72~OWfMNh4;SgQ8{=1-0E~XB`-4e_a-0@a+VkQ+0&=b=qp#Q zQWOQ_@pz0NAJ49=EPsDqJo~Y|8O`c^O>`uvShL4e|3G@))j#grdsuR=BD%s0hBOHO?d@|V3vZYUVh4&$W zfn>2KPRpVx;1i}drs<#fE~*6c1!JvLTrsDfPs4ccrOUz1-r|Tl-s1Rok(<6f{M&qh z)_d}Xbh`zYuid1sYnGRn+1}l~kcdCoY%-(U>w(^SH@tTBD&@RnI-NS?0XBatD=TZxyL3Z4nx?r0bd^%8 zk3aeNnOnDZ(87z^~2+X8<)@={kSnIJd2QnG?mTKN82gUT%-$_h~+ zz%oa0PX2$pAxU>@!2@{j>32H=x}6ROha)C?S4Q*6TdyUxp5xTr zgY><6=dJ&a^`40zltJG&i#tvL&N=2WoaFDLQqUu~rOF4U^OBp}JKVT=i@L7p_4;I) zWjI{I$4H*%Z13#ioo8ivg-)l7)gl14Rsl+J(h8lQdbGOu2_0YsG6_44vkJ{eE6 z^S-{dvom?>$*0z|)|X-kbCfz)H}&RZGR9h4HBEDfFa!0?n>Te;Hy}4wJGIs;tE<_s z{>rbgv$I2t@d{G1^7!LVEYD{%@*-#dV4w7NOi>i4PMdKIQuglKOEk65&FXMg0g)qOdz5T07sT?65-I~p2acgVq`--CI&gb)w%bI`8 z(bNt7et$5Z&)1RL=%c&4JI0H}_iG#phWJ}Iw_{b;#29O&GKfI_v5$Uq`13#i&pFsX zz%_1!47t>)&CLzbMhwi$IU$5ATB-GCE}s7Mulb?xd#o6o;>y-7s;Z={YI?m6r%n}o zq}t=n9gkC8Ts`6Nz@zmlufF;gMW%n*Tp#k-xpkg@`YexMSZ8Ia%isCG{|j~voY`Ea z$TZy|Pii|c0dmszPK%{haMJ6Cv{jK|9-_J6JuyU#iMZO~T)+p?dQam;D-4jCfUpNM z8fBMb^f!=l{*a>yf9u5iF6%x0z6SMtCvjIQ0Po$2{I*tgBm6SW=F0MFHm!dfjJ0&S zJVEayFgP>vhwv+K^=#N-6gC_C!OjD40x3e1NwuUuO4UOkNZ*M6OtCGGfev zKy`hLgx$T}F9VxOskKNP#~44qwYBxJrRC)f;A2{;7-C!+kH>V14hVB`8%Y8eZtd(? zCzZj=$V04w=)KpwySq%MQ-FV$kc(Em_@NK2OvV%D^Epk^%)3RN|7$cjgw?I94em88n*TWhgFB!d`dns440O8`|T|{nZeZ!FFt>X)#U*{ z{DaRkna=p1{>hhkjfUn6;0DnR~1!NlchejZW{VgB*2|(&`Jx^uiM3Hg~ijghMtW) z`}lcIFZZZjqk=Y146J{CMrp0q*Ed2FwR`*O6?ZV2mb-_ugVA`hUDnMOP#zo}z8PV| zT02ZVe|@mOKR@O%T@P4yt#doM!v3F>Axv}m6a9q)vtbq z`Fze3=Qi^n|Mfrok+sw3xqjmoW$p06F`qih)(q2$+D<3Wv6+A6vC}Y`&bc|tnNCLJ zna1@pZtd(5V&LF#%Hx+dIeU7QAODe$(k*iSZ~x=3u)9COC>TcQ^$LOyOeQ5uOI?V9 z96UIjrYXO$EsZuPBms2tu-r@+^cgSt) zy?0LeA5KBmdl7$koB*;`;O%7QR|V*mVfRBJc#6&vaWtW68i=qo7@%#&WHKQ$iv7be zS<<4*Rl{@zL-70X><{ z@(UNv<-Ojp2Wo9R9>-VTc;ksLf9;j6ty_Dy#^ceyROo+mM0&uN$Ky$FHlBX6D2kQ3 zs(u7TCq|fz$7GoW(KXluoYwk7+uPf!aZLoi#*w~Y{nE=X&+Eo@*O$8dmLLDM=KNF7 zbNTYypcETxtIXydwr<{}ZfZh|tgf!nxQ6+>WI5}hw5Ho}oYP|tr-s=K4vZqR;9WyG zFF71dxp{wU#Olg`OBXlz{_lQWCbKY|*HXf( zh7bcR0F2mbozSGJ06pk0ZLDsb<=V~xnbm)s-P~Y%_khV{Laa)R(d1UMI_&fO zvrlvG+*w>z;_EqsH}t;^&~w|H!@%4BkY$uge&@F(aFR@l0Jg`HdbgwK7J zXFvRLEzeEcg3toH-9lQO~CgS5~-woT?P)bu)4%=H{ ze{YM){tiz){}Ik#dP1E!dw%uDL$i8odpmya3tyVN^49g6`=i;lx@oq73&hi4J0nhCJ7FnB)CT=Cc9&^C7j5)E*iaAZm&tm{N;uC>_Kqug0Z8u*|jfjdqBouW9g31Bpt>Q0_7XPJ4@d51<( zRTbk|NoY!jnd7-gKpUytR9{HJ;9bbH0c%-rCx_@v61|u3Iw_`*n zz`<-@iFt>2G>v02okPEa_wxm-uWoAQrK7GL-btaOjbJvKrb!!tY&CkHA$W%ZNd$Lk zCG~Dq!uv1oI0003b&`KuDQ&D-$*o=Xjid3J`E1T=FXzl-kApQl{oF?g&NH2iP-vEy zm*^LkSHAo?-hTTnX0s_xQjt}?6*ewDP3a=rufNLS-ZmTSYxE|Eym{q1-QMRIuCB4N zx_d*v!D6A}@b>^!o*~vW5^?Ug~14g%}z1x~#7D=yeR%Dmq1m_mQ2w5u@>x!@~(h zZsm0-B?Kg2V|7867c@Rl*B%#~AO~GT@JI7a-<2FbCduysQcu<@LrO`$pswU z6(rzEjPa~gfVReLs^AM_Gn)CFbL&0MU%bS|xyPB!OGba=DVfm>hD)L^4;&us@|CZB zmBUg*Cu3c6?))W|Po3q)?tv%;Wd)mOFLHD1I%O=_*x2ONH{a$$j-h*=u9fG>J-d{Su-doa2KYRUPdT?Xs zaQkptE!BU{#TeP1&u5PS6Q5>z{UU>2fg<9aqu(niikvg2mN>Jyg0X*w)#V<8zF2vcRn7Uc>l}_IY~9#n zcW*?uTQHpo96JPsHkoKKI8RoH6LeM13873aXA=C>#gb>zK@NY1qgLSkdu89{xZ?z1 z?TIE7YHQ6IA5nu&&I>Pmh$bpV<1v@tzKT|wjg2*|R)nS`#>nAhhEb8zr_Z8pZZkSO zz{P*S)tfi@#HYRo+goBXol}=Hlr}uQvL;jN;FydK@TR~wp7G(BvllLLdh-X)wT-Q&GriYC6^sF;p>PW1y!aA3eXi@}r;ro|U=R&wk~lm&ZY6 zlg7Dtdh>Mn=tn=o(#jh1s-$tU@v5Cm+W3D;Ofj8j(C?uXRHec>hl+uIuS+K{7<3HR zZ(hcEM`tkP`7>wPJadLw+Mag`g?Ew!4n{kSW{yKwvb1sjvacM)X_ zZ@>OBgQXQz)}fkLNjIsNp1ubvhm(Efn#V94(Nh*!S$B|4d9HlOqC^UpC{ zUgM=Nf0ogn2z_j9o}stB#s0w|b2P#BXqqV_5986C)5`GVbI;RX-5drOYHbK1usfPE zE*m=C9?^SoJFcAoWnyI5>oVvTOy(uSexK$3KzeV$8pCkVW68RQpi3uH)OAg-uw+(KRyA5{ zZf@`MkN)XrvDWb1(-*OsB?2oeLq?N|**q}7VCE%t-Qc1kQePRA-{X!G!1D6&ZoH1W8Vbc|IycM1{+aLlo=^RTC!YN% zHxFi9zkZEgf5_g>F5_;8)2G(y50}{8-zR8GRX40{o@HZol`K?z^~+!4(i2be^m8A^ zV;CLmaO>7KF$7Lucmk^xH@CNW`|_JqRn3jpz5(0lkk+ZzK#HqCv zCbNpACC}x{Z*X>Xg^Q0rNvGT6U~iAgIf52Ge#n++nkg#O+_-sz^|Ke~cDqCk`v+6@ z4-YBJiY&`8#!3Ycq1WwTv|=(ZF-oyK?6bPOMDz_=UQk*w;_y*Q?Wl8#j>h>w;{%Ng zcwNxx=in=<`INGbcsqZjC_1bz_X!c2x~4G=&Ixj|-_5XkiL2LcvAaJa%MBZAOWeG5 z$UpjLpX2JaZ8lG>aX6ZD`qT=&UY9|?!`aizG~P3wAZ2~#@D7@$Aw*#gdQ*v!D1p4_ zV{Av{$f~{T2ni_T_8CAj1~{RO_X&!-&;n$4<8|ECc=PRR>cW57Q)hnY`@i?^oH~2q zLvLQaK?s5AbWYQFif#u5y!G}~*49>88T8oM-C=2Yjb4Aq{&+&{uJPiZJ;cMn)v8qn(&EHCxMGJL5+QDls#HBB8BG~l{!L@hWf=B2`vCFq>! zcU|!1m1A$addCMRXB2R9^U#TI;J=f2^X+SDb7O7uM?U@i|Bo{lpZdgGSFh3Qb?J8p z^!r`L;|YItRpC)&xuq;i4q~9!>vK4nGoF?7ikw*`!Z|Spoc9bS|M&m% zKa%GK-Tn}pcUWD`>2x}XgqT=a8)MkHb&I;3VU;2%&3roLpZxqU@ycs&vNG(kzT6|v z3qpuwDpINpr7c}QW8ff08t*6ysT4wttSt{ItBQG5@h^XV@fYbYuQBZR76KUkZU>uLI-M@Qu9B9$ z;g@!Au+qz^8qdr}eBIE^Gq!HtVtdE%_=QcDhh4gvAsT}X5gQshN^$1=MNVCMnrI6~ z;}P?+#HWKCLZH*_urwUd(UIwFhO2A#=5rYU`ao5e7^Nv)plNFA5HS57&3wjixI}*h zTvM~QG+^t^ui_%Sb>%uY_9kF*R#sLZLS2_=BfI@7_8HAKQTc$4wUj^)VLqQTpH)OO zd;25y_qN%(^0o2a_AA$840X4^xiMThzr3<`y6E?pjEyjMGsfcyYDd%U7A&s}SzlYH z*Xyyo)S<{~cK2s^0@_+ah(lDZ`h)^kpWK36DQ^iEgJ$(aGp_3Raeu$aBMVJYw^)XIXz=>hr6= z{PSGAaGIueT)lCNtoBqI=8Z=yMOoDx?vLo{NWL_{8B5koQ8uH*aP7+53^vX|ZYV3^ z$Oj^$$&5hc*3J&o>6CuAgLfiL-Za9ZbIuV%z*g3of#GA|*hMkPnwPl)e&M*Js zKjH1IZMsVvD4R1}StEv+NJoDWtu-Mi4$5Wbehr%y^sV6c=VircG-5t4shhy=_O)>H z+81w)_OD%!p*cuzPneFb-kgrEs+(7IC(HXAORMKrH%>pX+8?ZCQE6sn$!IcRd^lry zc}TC{qtofJzS`wrG-Wn->}+ol-IU4x>u(~5{kXHwLHc>gq6&D>g}{GFX+gem+;IXZ z@&`Wym{mgieeU9!fA81+@UQu|g0`5ZL6w^jTe9W_4+Z zuPa`8^-YG$8)T$&0Wk!86kF~=uOp_O zPSA3HLhN{#`fWyGv^;?V||r_Y0YFdXMcZxpBN*(UXLqRu1wy# za`g(jYnRq8tzCTlBg_5nl8sR@9nYA}rW_t_yQ^>f@{P&ijjb5P8XY-^4k^(c5MvCg zuEsk%H(s_oH(u%4th3e|p4wPmySO%7I^8Yjj>&XJuUpXT^~iG30gS$6w713X)~~+d zUD?{EwQ9dR2qS;675RL$0(g&c7iIttHp|VbS^?_9#`2H-rXT&`pI%{TlnXZZaB=xpCtr#=puWY7Fq$>2>y}6}{yZR#sP0Dq^i6x6<#gEe}~;8c;WV zs;1`F?k-JT%Yj>3qSGl@T3+JZ=}lG!1OE9h`~s^>J!XHCF)zLH3LkpvaW>DMW9Qa3 z*RQ-y-s$p-zwiqbRugkew!Flwtk6Y|7e4kR&p!PWw$o*PxX0DE-k>TQx=S6DH@NwT zx~_3fj5vZ9*n79vCC@FH5yjrBsmYWk&kVDwCd86Kw}*;ixM5A8$Q9SGz0J$7ypHOx zapvNa* z$dCQnANt!*zxeTNGAqfg!CK3QKlKA#+~1*`P3Uwx9NyYy?lory1-9t0dhQbEhpRL` zGMdhTh)wMC<>7#iiEO?3GTt>j`P_>TR!}O^>vmXOUSfG=nNFvmD7y6eeT;@Leer8N z@#KF~%w{vb`uTs!4}AL9u(E!d-pn!D*<#WJRF<*Y?Nfz_X*@nERyR%)vo6!=3}Z9S zKk*#4yUci2Cbu1rQHH#ip_Q0!+AO1PDyDNSD!X+5w)Tb$0@q9rt5O#-rP$+@5Ja2s&el}Rqo|`+g}^lthd=4Y_4^>t4ljKzw%~q zUS z`xVBA2V8pcX>8GBxV+BJ)>WpBqsDN4xXkk(`!4p!6HuDqD>~LtH69m5A*ilOdc_jG z)eUG$CX)&MexFXBQiKA zc>EG3RP=L8VKn{W3R}DTtgI~KTupyHpE4O`_y8zP(GgW*=flFiI4^SYB10=pRh2mJ zQ9d%AOqryXpxfz)c36?q>;M1Td-GV!uI#+;xA&RP9p7B_Ud=^T71=FzlijUuQliv@ z+LC3-wk-J{*@_%Rae%-2eRaxpNmb0W}0fnBJc+EwwHO~!WsITcYr!6b4<@oadftUWt!BRGn_tshRfG((B9l8juWPu zb;vWaI6$f9J>P>Y&rz~4+DNm)(A0GuqBy}Y3>4t##ZWKweL_D*YKkn+3jxhMr&g&^ ztGJ}0$DKRN+*vP7Oc8&oNFKuE(zP4CE7xzWHR`pRV_VkR#@2>X_w2LF)4Wd+bUpTU z2+EVZ5a=%wKq=1IrRd4KwiJ&t6GuHV3mr*2>T?+ZH zHHs==a{50c9)T}_^C+I<1EDwc1fae2{Ih>|Y3b-sc|kH(_tk$`-C75!@yyfD5C;Qp zUU`#dbDF(wk3l9$Q7B>HjRLZpw|VO63rtPT5kv`5mSbdk;oFyHq`5-RQhaYj6vw1# z#=^n^t7~gqxqO+q`FT#CIfG*v+_~~5uU&i29?Yryj_5&8?8iYYa-}4!HVfLNZ-dODqhAV(-wL2{i z7>shi%yx_W4K!o+6F`L`KqW;GmWCWX_D}v&o~xVzl&yb5N#V6A0^Vi68YmM&b^QCr z_&xgLXDLtr4*R|T1RoHOL=^O+#3+aaAiw;j&;9MMy!_&S)Y{v_8+OSfA8Y9ZW_60W zW{)UI(VYffzm3clr_X(g#gk`Qxp|r8-7dm(84U+qyYvRlt#y`8ou%qlsJJd!nv&%p zghZ)~FbaPO{E#?~$?}}%o_mfPH*fI!zxR90&Q9~QKl5ifzPQBt);7zV+vIsnoaMy1 zK#vprXvoMLvAMd!#fz^KCMjW(P&EzCEzYoV>nigL3rsI8VQK;)^uiq%MG!^Aak2ld zP^4K(9L13hxFTV8R7k|x*Gpe;F zq&|Px1~u14&wMsE))?Hl#f5X{c>4S^j65G{S83FnJY(BZL+t! zi`8s$`qWuw7f+HT3H`k;mRrI13szdKUMqTW+vVhmlYHm9ukahc{`Yz9wTt|PKlkUD znV!Mx_Zj+%K&5C|PMoAfamvkGw?ILwv&VnlC}gT)^ZdEvn1;@&r_WKXxLm(_g@qGm zu&oLsZv?p@PgBA$L^E{Ct8G;pqvmRCpdryUjb@`x&9%94`68X3hteIC)RD5-3cPgp zj(_XU-8*TTmHq=|PaRMMtbgF&2NVHTPT9+AwzAX~?62RJ{QHBfyi(#^385(pt2BRv zG}U-;k_n+_c@~xlr%VXO_*Kpq9Ezkc{tFOG>pGojPB*X_*^LfwTL1G#qZMh1F{UHp|f~oiCnj^D|KAQ zp7Gc8R^AN3NU5yr^O-hQWVxpZj5I(+hY(H1?}6Gy*Ksz|?X~yT-sPRJw(f z^txRxUA{uU-^2I)!am!v3m2h0BMf6kK|l~hR2+v37tV2Hs>;)+mKcsk96f#t*Kz5z zi!DSy&e`h?h~k*Ny*^=*ve)fm*$&OACMtt0OA!JLLr09&ix+05a7~Tt*ROxk+8bb1 zYXm{jW~51+U%GN-qu1*%vwtF&r+hiE>yN+o*k{%q?EOo9{e#zR<@CS23MvCJ0}!Hg z-zoO@#XXCVVsI>k4uZmnR2bx0Q2uaf++Q7(OFnA+>@oXE<}nWb2lWO&dc0SBKLTTr zk7k{qI~d7&)jjsy`BT3oO{agkwY`fbCA!q8)@t-OSNZlU-@(*%3bUSTfkdCbkv@!1!DoVPE2ckHgCNDvsB23b0Gwvl8?p&14h*M(@r`t2LIwK`5? zmRz&QvyADPX@2%+ev&*>tgkHd%6I;RZo5NnIV5RHE+k7cbxhmg>tBEQGK(iq5=S9P z6k*m=GGVZ~a+jUWb>@!@$dSZxgwvcSPE&SvcL;(AD@qs*229V+U|AL_%Rp&VT?<3R zY_Hy8w>xAMWmKy*q9`GbW7gKzM$0QJxAHvia{pkj9M-kQuMYe6St0w?Kv~MiK&I)g zQsWy3rO1>@LFGuzqWphaF%EY1!P@eoI#2+q%9HY0CHsj+P-Ktt^_T|!CkKb80>|;A zc#iLjAdH1!XzokTKl6{zo`2>kFDzuC3_~xx=mhlIJBTzP1?HM{av>0QogkIW&K;pr zjgTmYgFdZR3*9i8J9-j>oNlK>uG@5C_>({W2G4)~iyS+90n2}o#k#Go)9r85n3^uy zgG>=+IZ+tm`$^#_Bn2l* zgfvij#AMU=(c#c7z()W9XkU5h3;*LwFMjb?RyKEw?KKHP<)*qqr zocZ}9%q*UuI|_+>pV_%ND)k1Yu0s;A*WP6i<|w5Yw$^{>w06;|O)5Hk=7)ZW`qV5t z+na1}tur@2Pmr7Baf~FzvJ112=G-Fdo7<#GOr})f9_-k~P)^qos;G{n1k-kiqnJ33 zF${wwNrV6`z91dpJ=*K?Bz!hxl%-FVOo+aK@vygSw^kuVCj-xr$uXT#3)Ws zN?;fUX_kL+?fUh--QC^WV@mFW*LiysLBGwuab}nO;6J!gmjg&CR3WohXcZi&0C?{T z;QhA%NjM znkp)l3jJP-_T~yd{G}g3Xa>6F5{4l{GYM^nVXuG3`sxZ(bMv^4i)p(o)l8B+Ma3gb z!=&BX;nSb{QI0Mi<&|&zJ}a#bM-~>qtYe#1yxsu2>f#Od*xg+Ql{3?9kf|D85aN3y z!XO~eGhEljG7GijEKM2oBGNQLH!Sk3ki<3&qd2jpL?lI3VAxfnG{dn>R5-wN>zKJl z5EXx?zFu`Og~A*5xxKPQn5u%rljmr=% zs8(?-3!y8Pj-R65oMtc>kfjMS4LN>nkt}}~1m1wFZ(c;iKGm5ibTU?MUIASv?DyDe zb@Ahr8<*a|$YcD`fa&HGr!KsJ&@DDLHn?&98db~UrI%kOJ@FJ9%eSZ}f{JZmlT)2; zfHaEhI8DPfHIg(Xi4{^PP>LW3h&3JE(CH0F7`nmS^bDFx2>bz+Mzf&)#vz7VM`(Wr zwMqroiSdVBx}6T&Uc?}X$)rgxVw5UKLsu?e-fFiy%j{Eb4-WY{?3-t9QzU{e`&0cC z$Q|2OA4N+y!Q+F&?*crEr+AmQo~qhk|Juth{rz0G@xu{@ri03HZI@=%!IT+S-*|Zc!sMNU*YPlW%^!#Yg>Hb`Okmg=z_-743XC(jzVgtAoThSw$~V>in=CnEFEl@ z;h;yqH{jgoehjP%o&Jd1w=UD#-6e{A)_Q%~tzCZnYhTB%Hb{krmkUIe5%gNrs}(A> zDnb)Dl_rf^lQ2~bheL7|kc)&gNr=)6DKye7qd)R!HXCTRB2H3FvtT6-`dxpr)W?nj z?%uwIk`}pUqI3tTEAk|UT(P#XHC$dVHUk|dpO|o<*R$U?e^Q;&)F}Tcy0Di{gTC3_WJj(^K8pf>Rm0gCip?e;VXbg z9RFUF2wjTGS6_bVe|h1HFV45yd$>l9DKp$^jWmZej?pziXM2;r=kwif{5x`$6Qwyy zgDeTiwJI?Q(sJm85xRdAn6^VMK)0%dX+jo_$TfpJ@_F|3Q!JdmK)dg;apz4s?GCM0 zizG>qQc|;RrYkN|z|QtMreUJ841uCuYhYJv}+or`uS2|8YZq~QLojgR$Rit9)TY) z8jT2iAMzaA>Yy72nqjiNwt{6^G@4V)&CfG8yMR@xA*EpCd1R?VN`;Z92qBo6TVQHx z2B}GggAq|2;*SOdK|m6PWNC~L0zFUYZ*9?T@3678jc$LtWLeguIQawaUym(=zfF-8 z4)XC;G1Z@7f=9vwcr-g0epop9eBsjY}7h z#i?R7=6GsqjwADPY_Hzt&iWR%DyXqDbsJOW$k0OdZoa>!FsKvy|=7UP&Er=NP3 zuAg%C>Q#R_oeoKop&L3$nr6E@yW5WARBN?bb#8W6)0HB(Tre_39FwFOUXr4vIl1Sf zX%Z;}-ENn?y$-c%jppnOQ`6HVX^zk|YBPl#xu)p_M_@Fd-R>~x?lBw==ytoL-UyY( zBvD8dMT|V3nMRd8Kg6!o>Gk`=JkR$iPV|Eta;tw73E&`gHvw|f&{djF$&n)Jh* z6X!pJUY+Ln;t|@LE9`ErbL`|(NKJ72)=k=jAr7k0-Ip4sp`q34oVf5j!vro}dW-Fy z?XiE(y(Es}WOaS*?L1d~&-ZC}I(DnoI`;V&omM{o&Y}=-{yu8AG>EEL`@z=+%UG{%_{Y*-!qLBlHptQxDFlJbC}!shJE+`-`@Xw_U`f=V5U!Zb$4}DbyatD^)63gcRJ$m zm!pV?XtJrn{6S4mSy|(kG3N%^>Y*FYD2ULX_91`g!okLpgdeUCksZC2K4WDs!k@9S zG%_-WetP%)Jwr7UZa$4%yg_t`J7YZ3HTejKZ9sFQZ*F66`b*nx0=BK!u|=&`+VNr5AsVAzo}N-9>U2eX6H2{9 z5XDC1$}uRnB;E5ORg+Rl_w56)w3BHQ)@NNAQILkuPV-!eNhsXx^Jmh}gF!3S7gDZt z(1tMGeCqyPq}ssLuw`2^kChzzk#WY}L$UhSvyK#Heg(Q8sd^da2Ct2hG}=F0(g^8z zrpOVk;k7JC?|Vlz^QttqYh3Ii`4?L#G=bL5fQ7%a>dgZakNnrV_QO@O&~mI5&7*u( z>h`BXih`a(8l3`MCOR&~6N-ZBwGEk~Wk_DRKR_3RT$)%QL1Emq1#S~^NX;E-u& zl_OO&J-ezCrDi*Vl2t(^yw^j?tl3431*JX9l5amUu&PndX6a`iSvhzmJoma`()G}X zel}k2^M|6tOWl4yr}DjQtP3CqC%9}mcZg7Qa*6(X2g1C^@mJKuLRx~Dc0O=XR2$t? z)3K|>)1u5-6$c)M4GmH`Y;yOZciKG?grSDv3F59vmct@R3Dnv-X{=QwUhCu6sY*%Urj> zjh;3>?x*psbtI2p(Ipo=8z6f7;DSoGZZTegO3?(u&+p=pD_~fB9G`*>2p!6`3}1Dz zc8ZWCS<|dGSnm?}J~U)tY<%;X{1%ro(=a&xmYW-{7eu!TE!?9iCUG8af*!eC$L2j)bVt7lsV+F_T_2jYtPL0W5>!^l%qQZ zH0V3!REagvcY^Fyl3ot2luRxT^lKG(eyJ(H`g*YN;L!ZQ$HR0EI;ymK>UC9Jx8^VPv$T{E-sVkcedOTKd7YtJr~vseuB^5u z1b+J<^QCvD*OOB}3>3Gf@3f6Ox8AVS%iD8BPO|`;Lh>@}^u;s&%TaH)EoHXj%}-woWW?$VYl8fg3S&pG zKyFRD8|<|n_4)y)5G^r}$;aj;>3tt?U*;)d()%>(r#`eR0}cNob)K-0IXI@giD6aT zaE3ML+={_Gshaz0V#~$D^}f31>*$svv-6$jR@Qc@DI>ST<=TqB^)h%<0|T4oTTd57 zCx7F5ZbIw6(!1hPt>W+Rx$NKBFcDlo?>@Ic{%d{uUnWf*e5y#1Rp374o)RF}6Lh+l z*M6#Px=v^aW!~d>eCe7Z;f6HyH1r{LN12u@&q-^~*$(EH-rKz>$SPk2lHi5t?HEO z5eyld@<#ut@1>&*63K)HiXJ=~THn~KwAU@tc;w}E>`L$aJgbuaWGy(JWVKk(p(D5}lhmHY#o|3~6H2vrFvo>3AEOf>)L)R5sn|uclUky7jpJ z{&Cl~9K{`UFEOFc5K@<6(%+HLBc6$9dvG_3?x#Ncg*`+qN&@rriN~iXwI^2WGUS)( zC?H8A{{#6uSZ#dd1w5QGTPKBQUu?_|PQrG(7=oEtu1@1(sV*?#Bq3*pseH^nJKhwq zPF|Qd44)gOE--Yth%@hVU0q^)A}7vUXwmx3N0M@P&**O9`3d4V14_l0aV*68dis9g zd|bY_)tdmw<#B;x-*)MTo;*4`?b`Bk!6t|!G+WEnpsp?$F}4g$R?mKxPdAl2upZ0g z^_wuozqlTonypppI(Ou0GIX8j2KJP4{AE-X*=vg!Im$N8Ha3pn{Cq_trYR!jZw397;(#^X-|dq={x;Hd+8)c?swmy*F6bkd@mtW$&RFVjerol8%L?eX;oFmB|k(wnjzxh zh14^#>q17SOLpiBMWz*vbsT*s`MEmUK3)o$6Ido)HoRE96n@93bSTgX9(Xp~+A7%@ z{q23F8-w8H3yzzD4m&~}R1qxE%bw8aK;aTiRBdv&W}NW>{8Nfxp?fxFwcl4ZayeQ?(J+h85x&z1ydC_2t@Nr$m6Co+CJs<0D~wN^|@Z z(9x6Qbcuye5VGWuQ|72Y5~>u$9~mCDn)ktH-wes-``GIVB=6n?qMrp01qPC65S%bI zdve}ocX5am)3`6I`Jjk0|54m*_qXyox5)gnpc>1#{CJzg2AMOx_a7SE!D%sH zlFeP*Sd3EJsV94r@~+f*oCXSida9Z)d8#JyPCn!8{^c;Y=cHPbj=`N2V70Ur2mHO{7;tI)6Yo2l&`6UNUaNqe?GKOjHQqR!EUyQHx4ha+EwcAP-1*jAy`l@$N7*B2#k1_uIQ0lF-_YKkeeE1$L z`IW4QQj^ zeE9H)F6y~zKtz0J3^^-1q(u^Ke7!3mybb=!82?jv%g=8@r+ZYZby9Y_toHWy4P24xm1J9R~2KTeXXHV^XrtbTAb@^U0@s3-&nhyL>#yXt5R{ zVxb1=Wn#Pwv|X%S))eeFtDUC`%!;&Kiwvq1Qx&LdW$6z*L_qw5cc$4Ta;dk#bs>Hh zbrT;XCMLy?r2>8Is@PeNR(}dEeqF5yIosWzFU7i{Q9ilq+_>9QdwOPmyQ<>zvwX!L z(O=L@Sqne9j1OF+9VNsDIcl`;wpn?4hB*hWUXjLx@w!>9P>1aCbfp-AB?+t2dr5^j zTIystdB}(YB#od7>t%8oSzjjX%#>`5w z9?Z{>>%vGAqOg6<*fcorMMG{{^BYxuS0#NoAJ3ZE5_qcAxWAb7k_yS zM2nJp(O;n+O)uqkk3<|r7`ZCe^*LXuS|)GR$Hc&BetD!2vL&@N3)qelVEQ^^rn1bw zzB9yj`OcS@ybNxaJ6I{gOE`mAG;km89Gya!J2&qg2lDX>W%ybqfozL8Ob z#b4GJ3ymy29U)Kq`e)RP2lV*`=C=hBA|2a}>yS z3DdBvG?jODrByeeZMtbo8$G`qfWV9ECa7)y$YTaa2$c;a2t!1Cg>F|DR=$c)7Sp2G z0d9~sN4>k(Vb(P%w|Nsa3kwbt3tG%93?7m zDbrTdbUCjOH9VHt+6ckVr<8kKf_%-Th$eE7cXRi=*j7bDg!gLw;?24B=?sj>{;l`Q zfmXo(ECG%@ObxI9>Gv&KKR?s(HZAyE{;ID1wt5fS zp15O)S;JQl4XEpI`|9xOBe1c?@9}#bJuh&CpR>$T*AG0{M zV^()Y`jWi$+qVDbz*3XUqqLu>hcB!2v0j|)LQQ)^iL2uEXGe4=znV@>N$ln>T_5;Z zp!t{$KR8mqbjlk6_dQY@416g?9Ov-(&D=d#g`xX$(-+BIQ?-hQ@LTbFNPBm&#w6;} zr9H7_)Sqf+NpgOY-1^28Ay?mfYnQod{Sngh_^xT;1FqvxN^Vu3BgXn|Xg@4VUXC5t zCmKrC#kxmCQhMq2dXr-ECyN4$hJ*Z`h7J3%wQCY}-2Fm|s?QSIZ*N+RogHL>6>ktT0f*?X6~vJW4wQw&h*Z|Ayk_&2`c09LWy;fw2AhGDiGnz!)Wk;(3!*&cJ|N1M zr5Ts3ISF?)xUQ--ky$<#=FC8W$eKShpy4?4=_O-&s z+K_1Ev~#6|PiA#TR;Q);bomMWwV01P5ZS_y_o*g?(&XM&SMChOgcYN{ZfE)a5G6uY zL3-6*)WlEl*<*922|qf)(-K+vB|yNKf`XKkl$%5WvmXs`zwfqg>LJ*bS6N?`8Po_r z6%u>h{Pg&u5Q}ZFgxt7?%Ua9 z?vsd(nHrMua@*98&J;Ve!M%(~X1ji=4N4Y5X<1TPq~>waOSRh0gQFYK$W+_fj-3HY zwx>B{8tA8JqE`ZCwxO?9g^Ea^lVa2-Lrp55nk64nlC!Vqrh)xPvH1+laf=nx!ThwA z_T$PF>)paEpI?VdwPteEIBfZR#35|aeL@TxXg+SbAydrb_XgaxyImw!!3m-Q%yYVuPFM^*qghfN8{P~Q_ zr-yvaLO10ot7(DxJ2GNeAFEHq2W=Cz@x3P^)*$HTn)!S}Z@gOc&JhH&iI38=PdsJf zE#+aPKVdlP#)N=?{;6ycr+4NyBJLo~NX{x4efLhx(ZvKAyLC)BsU`8BHl<2@G(X_n z$j>t>ewfPYlWDn(d!w7w-^28V3WeMCkKXo)+l4V(ZCTRFb?C3=0dsDV%#hgE%MIfZ zW7+s8o&-u$0r74_p1pZiVg&f7S|7?W(h1K!&=G|(nRk?``Cn2Q(BbVI2aHbq8m87E zS0ZE<`5fVZ-_j>mCF72X3W5c^`g=lXgYg;?{ z4*YmuOY$ZqvQ9LUvRq5N76dtbTpa4oXga^vBZ!aa%eKG&(G#%ISF&P|Wa=@dovlV} z%1iwypgHMzR$N4vM{+fK`$YtMMa#5{yH_5-uOHr1&xA3ScI znRqN)WU#2#Beg&N67L3M4_z!v*rfvMdzgI6eH?aF|Ltgtyo9jDCbHy$u=V4gc;rs^ zHo|m-c}lB-qt+&hesb9u*BaPrO=(aPQK@r?R63sg`M@SHaSd;CCW8wZNdmizS-eSmij%Gnh{je1s}` zE(b}ws}y2g{B_;`Si;KIN-Le@N!!?X(@&kfvx{n&FSV06j07ZUFq~{DPm38Didq$~ z(ip~r=SuQ#2RW+dUVP%$MiXTD`#2DLzhTlzzO6D1+rq}r#_K5v+T`%f#|5J|WM1t0uIcbXGf&Ps^aJOW4_{)A zybj}0qOZkB>no=d||pKASe~KDn>6=c84s~qfW}VO**yUDo67mL6k3p z4(ed9x>2PLG9ON#YIL^=W8NU0JbX#_OiDWF+Yk;lDPKS-s&(Ck!*YyHZ{-+8qutv4e<xa{DC`!k3(IIdu;K?TH<#XvHGv4TjMud z3hNigEFkv9YrJREZR|{6%1CLY-T3HvNR`g2z4U%T{_L^7*GFHi>J~kS6T7aVt<-iM z=&Si|{X*@e*pI42#A^92>Im02D-UTnbheZ+*bUOkLN61G!7>+ERcK&~_&&mTvbLE_ zbjIrK=8}xV1aow%-DDKCUQ$f887^pVjlB^zpI9*Gb8XP>%8+Mdm+19#53r=z0`|qU;WOds>$BrFoXwDNZuCH#dc9Y)v?jcI=GD#CsLBW70sx~ z-u`0|G&H8>R3zLf2Z^iJy{$a&(`{x$3Y_cY!lM_&#~WNb$A-u2KQ-Da-=^dYfl^K> zwx(TvGRVf+MDRt**zPI+_IqX}>K& zjgNB~X2!C-V3#E^C{T%`j8H@-k z+0FNt?!ZQ8)#pkj0~RY%Xhc-6B#o$~#O@Fb-9_}<c$}iaR@AmJ&rQ-wlhG(Y^N3Y7D@$s%f z2T9oy^slz)->7()wh7sPEKy4ZgQ?W~ZHMw6gN$5i-n^VVfr|U);y>9T*F%JBW5bG?9N-J=wE4igorbzycbn6IJ zhH06Gh9q1yA~u~`TGq<#UlmsVZBEPF;Vsj0Wc@!MG^r5CkHuaNG zng(9m^}z^~oVx0`o8Lij~>r|b&Jy#V^vzmuZlYDwX%&`K_g2oEmI9C9i0sR z6tg|?kDsW(uzPK22TPZ0mHhaaG%wS4vL7ARi`|x!VZp!PKPA6Fqe4rrAZ-|zONUov zUt|mzP4PDN-ufY=R(kA}bSn3H-BW0ggQUbU&^)TuOWwYe*TYmWQ_AnC$$y2g2Qyo| z>nKuP1vpnFDL7cNXJmB5+S(d#YTtH%4)}A?EB>q!E=bep7iufxqDSY<*1iZgsrSe= zpxN`U{7_?rBy@c# zQwrL98F*5@1a_R>IXY6{$;$4fq{!OEogLv_D1L&VBOO+$0Lo03EeRlE87TOHDIY#xceA+ zWk7$dH^pgynn1C7>V}Gr0#0hds|2ts=d<=`NkEa*e}jeVLSuUP`iGuh$BmESE3|R) zgIz|c`6e|r<5LrK-@Kk&t3p!E28BOEjNw{p1%HJE^Mp3T2_Q@S<^lHv=F z*0l%HUWM}!+<@B}ZHFyop8BaN$4CeGImWA2$|YH|AO#jT=!h=jZr<9s5X^K(^_ji? z-T36b>=>tIu)<4(ZmwjxYF?)_6!}_D!)d&>LHvyCqJDsyc~gw%h)wV*@i0NkJFdu6fpFbWcWTzeSzBcm90pcTz+t ztF_n4zD`3K%z}Da{)FcgD-TXxm?h(N(!)EjS|M(#1b@oP(xnu_M+CzCDKWj!ZsXIi zwy_p-oyC!BJ~|R_T-Paj@ND*}kA1jPVOMdYBNxg#z|xXTQEO#&$+fA}T*W#y;fw+}`X-O*W#Sf9e&J6*HEGTlH^!=ldkn-q|#=v|9 zpOsZn6&Qv8ytggubmD3?CJVFIbiCe>b@Zha^P{zOc2kxXo_E2zaCHaof>PkDmrb#<~7%7KdH9jH^vZg9{~#_MoyZtnoai;*?sWo`!yNqb9iP$E~Rs@0~)Xdl#ApYL7FE z>Zb_h@ae~t(7UcH&_^_6?YkJZz0`vV8?5vC;1IcD9iNhd%;~k^+j)jgQ0TBtRfuo5 zfAlD+&-N*tdN?Uct~Wi!xo9(dlLYouKJMiSv&Pd7i@Can^;e!MhE2&X2vW3MUP^vG() zww>&uF?2Yy$R(L`$Bk{AG7i>g*o>58-N=Zw};fky}L^{g&$&Lfab*J~W=(aZl z!;_;w3y|M)?%G{cR42(idvZ($6bJl`_uO}C-l21*aT5wpA^g`^c_-6na z*(OI?+F$n-}=i<%M0Fv~hAm64%iqrzQ;dgn-UlOrYX~Diph||i%g^HmyV4l6!Ey~W8 z*tm-hWsA5QXEApVP5fxgZ#g`=L`5Aqn0?^W{ml8Ygv<&rF`_MzQ(y1e3oaSkUz?fl zIxevuux-Ath9RzOG$eVyrMz;dW<%iNRFcH}@w?4Nh%S`vn>^zyohVqv%F0UC`hKl2 zJ7PxbH8KwwzJ464B}By^i?4Ajnj%$)s@&ZjC$kf1J~~yi#VGw1ZpzdgZhId<}d6VUA!K8XGpkT$R}a-O_@>g+2`1rk){>D z8+j0=ZEA~IwQ_2n;uK?;ZEbW39q?tgs}wIl%=la@jAm>b6qu~{Na>1xGN-q^@B3wO zQIFm7k;{hHMuDZ?j(=7*5?T^YK8L+aH&p`*Y6PNB1@iW_rt}1<_~@BKd{GK$;Em<4f70zSQ5%R>njh?Th`) zjk}V=I2wB+5(3IsR^!;H;@!t3Y4etw_pjefg)`m9$4Rtf7y^qERDx(7gOwMkA;_7W zgRs*Rzct7htdMt?IXpSuKS3d~`nz6Bp598H{?L-UfeQm$P(?y&mqN%oEChVcHc*ao z8%`Y=q*3pNY4{va{xxVPOCu^*N&#BpK2L@Tw)#{0F)YeT-;kP-+a{e#Lo7xE3yVL* zuTv$hy z+2MpdWv5Z4(dnjL@t#BKl|9qUt7MATD~%HE+7ZYVYPsO>96Orj+Ic!?M|meV;9iL6 zl<%=Mb-4XF(N)GF|0_+#51?`1NRGh1voZzUF zD3NaFE4MI&;l~HWYN9DAP67|y4?7sou5%hQyd9)9Ons~7Y~Dyi6)jDQ2dx;tZ;=Qf zWCcU_$ubc}WZKDhZEd<#A+Er}?kzZ~&l|AfOjA|t(;%%K^p$W6ig{(=xgGfP4$?A(`fe9jmoVPn4XB>xJw78<_fCBn977wUflU_tA?n}>YviqRp~}n# zmowZ@vLwgcFSD8Eg2WD})+*1tlB0B9J^`K-GNSxM7uxs+yvzf3eW}A4Sq|J;TL8yI zcd}x!J#aV-xJ!Nmf}Jj(e9Nld<;p^KBd_Q*-7?NxqN%<7sez=Z2t_1+_ZwbP!CaKm zh-lMp@v2Ik!*(|k!*X!zKw)n4F6@WAS1VZ%|KK}mQ|AF9L~U|vjP=;OmV)yz^Gl|@ zFMJ{!+w^UG!xJM>faZK|qRONuX--g-mmXd|q42lZ`~Ys0#WEj-IrY#Y=X9%k<<9c1WE{D$iwB$ifn1CaKv;|&*%8_{K>Nov&W!j zY3BK#V{VC9j#@ZQuwhD-oN)^-zcU`(e6RSNdES5%*8LNTlRMKYDzNvA0}K%q=2|SF zNP_D+@i_#aN3M#pCq5^Adw8vaEei*OlVvN(ekpr^pNL&^>yPZgU@OO@cI>|`N+VA||@&O6vw3E)&_->mS(E12<)B)fcb2-$P) zZgwLq%ah#}nmaxh$jaB9gxC*n9ekPr?N(8T-TZWLlk~(W$7(yVNfR3izQ=OS2Rr#; z@TEYP4Ff)`Ti|2N#dsXP7My#0tk5O!BJ-j8=kT>Kiyb-osg=PKtwZc+bL@{fWi7}l8kz0bDsePQ57MNw0sMDAhm^;g??uxIx*m5B*x z2|zlr%3TF*7z}#`2E!4<#{(&audwfdf0rPayN2#C7$L>^FBU8{of;%+AaxBq3^dfm zEu9^C;8xBS2p(@o7mytWla%pxfm_-mJeVvHHb^Ha=JmQJW+tSS6tljt2A_tDJi-=v z*Vhf91%I!+lpC6nn}`I8~|`cc)*#w9UYw9#l5ANf5R1rz?buMUS_7>c|7c; zm}SpvWHQjW&m`~chF}um;p4XC;}c;Lz0JcfA|xs-$i*bUC&16k2ZHSgbMy0y3k!(z z3o`xr!wjl(v$7V~R#5u0GVo1`+1A6uMVyz{%gc+$OOVIe&4!o%_U+re5C9?|zzwo+ zyZbnKz`ePh+;98^LIL4!>4tRiKsq}yor8p1ID2|XF@vW5(FsQv4UNAcJGuXfDu6Uz zZ@3FDKMx+I=A0eDPZv01i zZNz`{I=lQ` z=0DZ;_v_z1{Hu8$NbCQib?0yXQ&xmG^6#t=?|*`Q{^~#F1!VKDTk#i$&+7-nAg|>sa5!AVQrL>yQdAJZEnp!e#tpZ=ZOLsV!Y62X8&D{} zh2UT1@3|oXd%zw3*(`ZQAyGwPF?mHXB_TdJIU#vjC3#3dOjJlr0Bo4>%L*|wSy_r( zJG(i;0ihrr;Wh|f7bhELrvK=Jyt9L|n})L$LW&tw^&jaf^78lHoUM@#;Dx)kvK%wh zIo8Eh&SB^ytvqa{nE7uD@clDc9pPl-VGDs5d}4pSxPLzKfF0eCmMTsj2saluz?$de zFU2hIXIUM%ql*K={XW9&KGGZE@Vgzq>oPbeTL;fSa*G1i{Ih`Jf06!2GIXB*ffEvR z7}Rh+{Njq>j~>F!{dcu|0)hb0@ATh&*8$Q8^zpB>-)%5ZK!TC~BmW=0{GI>zJHvmz z``uA6n&R?q2)GAA0sMmg16d--%_qpsFRaTiC@w4}E_|DtPgtA}AmuzSz&6s_=REI! z$|}GoE+8t-FY=$V0&H2qJ>dVh%;y5}H__fjLhc^UZa#mCEFFaFpPw9%OuyxYINb6N zgu25YA*`7HOho<*;uN$H6R{E%5#&bj3-NOc{HAUTJ^^lPYr)%s0*Kod2w}0m%6r)& z&PVjT-_Rc&|9|)9kILPhtv$TpZU|W$z*v9D<=-@NE*+Qz1b76Q*z}Q3R?c4T?0*5b zw1qp_Ai#vc%gp;<^~TcK=@G)s1M~>`vr8^;H#i_XFziyy)^5&@On;ESoeRQ-$;0{2 zZ|BVLU&6FPxFP?6qkjVYyE>--12pt+!T!Hu|KAf0e_-_=*yj_3&dKh75BtFV$6EXk zvf}-VP zS@<_G{1!fPNRM-o^oMZz7u+N*Cixo`4#>Yr@{c6QTKxY=`!ngExcirt{Lb(X9RYy; zodh(G^N)Y)JmAaUS`)$vaE2Sui9&h=EMa&n(6owztgd(Z&r_dts}P^MT&456bCJ#ZVHEm9%rCD@Re?plRZR!PDctTQVt$ zG|=iZF@~OFzpSb4@&s)%9NFK`%*p%py$gSS3mu|kZpHocMLIb-4}LJy`Lp!=smmX! zvSKz0p@e^=w%)$MZ1QKxZW{8LKT?BTx}V}-{R4WayOP4k-w=YC(jmeBJ=p&aXz0J$ z?tcgNzXKZj7dZK!g8lD+hW_V<^1s#W^Zx%EWb)sF{qKN=n9~2(VE;Ryq5n4L{LeHS z`j=cOm|u4a!;$^y$0eMqm$_u0gm5%Us_|9O}TEv_f zTcWCqsc40xp9x3eeV&(vaOw^?b?bKh<2f+~n6m1dHe@P2M}7%=zS&*$P6}z@Mu@W4 zuFAQ@fLf)3@)K&uVr0oeB|dBCBC)*huBInv*Y`jF6;E&m1#81lr(50mRe>ZH`uyY7(Mhr0gB~G!mooEE&192-A7fyMmS?tGh)$HvxZ44rG2)c+HXSbDkGF~ANw{$ zyVbnw7Ygu~&VrgNf10bs%|k;|yQ0v0_obNE=aL|u6o}&)X@H8P1Z{J?X*Dc=njmE? zF5NOD=d1VK+m$wPdx`l^%GIaJLo>f^Y{BjT-rs zZ=-6dX7aT!RXOrXHnONZ921f3kk$`b=A>E#CSIf`M&6UBQUQ0p*2nSWe-ov;Il)EoapQy&ovu-*@ zY=C|_7aHUjkd9XrP~v*ln0(LNV2g0t3gztlK6{$?iUKqwdak+35!^~4#~ubyVpJS% zUH*&@B7z%IfvqkNq3`=z9EmSjE_KXpdhk)7yaXhpHn({YAhT0Fb-HuAk?VXW+jx6E z|Ls$A78R2<>vt_}%Yf!j{;G9~ha^y{aey=`Df=p76I5>+h!q>%QVAA|j%9gPV!Q2Y z6TmQ~@^*do9WRWKIBh4=FY{ujD_^Ld3d5v^p0anCyA;TXJa7W{kr=HWMmfw=SpY7aC+f zeTTW2T%EB{F6hW*^I(Xfv#+|S_?Dg_;f`C4zqR7HD}4eAfg>Bl7D1&T)-VgFX4cU8 zw&V`$)yORHI?Xfm&}ZKzbfw2+p;vY;OdSUVg% zj;c3DlUN4wPU?*iyTsjWoW8VVIlIo5V@OV5`F4HW8!eNJWF3c?tIpmkl<0J@+^ zpG^Br{5$$y>|7eL{@=aI%hWNCQVSm5WcX1rn!a=xJe1a2?_Edu=&EoNJFr#Em^YcK3k>;<_Q+n8OKp$g8&&Ht}$flS>22a za0Gu0$!uJdc9SquJJ+PV^MR5S>YlAfN)L0^R}GK}D%Dk8c_XIE&dtM~4F(N6agT7? zK?0xiOGOZ@_sY7EMr?j0lD(Z(t$edgEc+tN;TH5owcfBn)R_^+l|HJu3>OU(V-#HD z%3J~{IcOvu@&r;5$VmSwWlBYWFbMn-5~nX_X9E^O8~INS#l*@nz!tX;3zc&F{N}{Y zQhG2aJx!Y&=4R(jJa~RiW?nD&i1ah!jx=FY7p5-=XV?(PPwt=>*M+B{ z*M^>xJ4zXJK$U?B!P)L}-hDhx#RJ0?P8b!(PwP3BCRI&E{n;)EUtxRiz~JKxwwI_; z8O=!Iix-5`G`Kt1>qD4&F(tYjM_xeC?)sWekrs1=JKmy;>1>j`7Bf{>UA<3eezstq zS^wjz>2E5-JEt-dz&p~$?7KrS|9FH==3#Yt_;PY5D6qHwr(vSYQIp2l6RM6k zp4MTh)%PGeB8+KhREodJbE>~zn3^?W9So`PLRwmP4@CnRi3KHywd9kmS(w~YxerOL?;kgL ztc_Me9{@@tr%t-2xVqATtZQ{t25Ne}>f6D$xYI>ks3S($Nws2ZdeLEPQ{=N-i|gHG z`3a~6+`1<#g$2dIO@e6I~A$4n!`WOCy`}anQfpU{(z}1$78%K)q$}s~;a2nf&_CL&^oe8-|FsxT#mpQrmCL8Y)GD7d0A{0aAvFtquQod@ z5(Psr;1;Px378Xje}VZNgo!cv=z^uDrsj)9j`P^;K1kz2?N}(Whpl)JaH7aNHxG_> zSJzKJ-ICtSlsV0S^a|Vw0MJs}b0vo0Y0k1eH|j_NOq6?S!kR{VEANtxA2dgrTg!cM z5b^6nr818{KSR3)Xd>Vi`A9grJU6q9(#~p}#ocq#wCzSNWE+zhdZ<>$~-= zM3+w2=%SzHBXV5V!z6J5u|3Vf2NSRsCEU~V3JQf1hqu4Wc9(4l!=Z!3Vy)ksUj6J& ze~o_r{36aC=wyx&a}52;fXpmNfP@a!Kesavh(OOsFC37=pchSoMME}v^=m&B-K%^K zEq>s0PFY8LX??oT%RHb?!ym7Wjq%>lC>oTbR0Pf2J~W9mCUA9sdvlGe%F$Bj7hH_q zLWs7-m7a^68x92onCd44Om$Y;5Ao5HkSmhI9(s9QJw86Zi>8F%@1&dDzyrg|-RReF z4IBn(FjKA`8;p4@k_1LsNCW5&;Mx%o!UK3|HJVf!;lhA>d?@^N3~u}b$sY8iw+OhJ zxacC5FfFlE*!I=}>d0%s&5%*zS|m$m>wds+NhBnx0wSBdudaSlm=$=0*>5G}Jvm)J z-JZgn^-OcKoU1{wp#F(KSg?x>nPT4+7zPlljMLfVj=|KAI`;mqRdORqCr@Ku<>oZY z*+b`!lf((w+9Nt+V`Bp|GoU3WcUgmxs%`xi;aX`lIOwQ1Pa5;6Z+#y;p!KOx7b^%h z?h#@M(3QCa#`|f`-Q$izH2bWW5~ZSnkx}c`mVj?V<~7mvS{@KxZDZIn1|aaqSD(}Z zaO?azfdm5rNzewLfJhnL?^69(v&?5n+{F+E;&RcGfO`0;iF()fcRy)}_=u!wOe}w? z-)r8EHV=s(BLwt+&c6+2n23vv{u`WUb3LagPqO@e)iiDQ#RTpIte<8$G=sQR6tsOT~4ea`!dgrj1RE&Xb zD5snWr(EqfTtdO%W}!6y`2uLUXNzW5tixNf!(VzR65IFdN{%NDD0MXrQpyuF_?u z6&GCmFbyP??Qhi#@ZsDhbx6ydTNxYtWhv+?M+L1sOM;?7h{ItF1e56;9ZlV(J4uYjmB$WfpvR^qa9xi2JiemzPT0*O)(Dp@Wp}SG-TrwQfya^?gdu*-i z7q9)J6YB(iRx(V41VL@=okhE;rWMJ}C}*vYF5&XRq&&i-o>Vzb4Lqb)jNJ<&y~zJ# zSKO$WsukiJsMe@crSBvpe@gke`PtMs&kB|(kQw?-OWSkHiV-HT+RgqQul4oy+#!j* z#GWPh3L|b{atdhx41wb>1&r}4GnqY0fDC*;^x0K%vd^g+7}8g--OF6^&69F2O^&vZEj0PEf(dc6L$r|`+%d9FZrJ`>UcqQDOFy>a53KOlqavZ)v76hDhl z|AyksCkua7!iR2bT}>Xe(rXxDp}~P3Qx)t8>b$Nt;(k|L{A$F(0(c2WDalVoFZmcT z>GYxrHDZLrEHamj^3swh1#i{cHnHn%85bu7HWqZTpaj+^Y;bR@TsG}nT6+TjXbXK2 z;O_S!`Zn$Yl%K2~&j(|krt}O9=MwXWG`ECd5-?BfnyypK*f>(aUyRJ==|-MS*LiC(WcM1KT|^82NR-sbdnEZLf1{eZxpz z;p0Ya!AOK&ztE{GY|1tQS&oISuo-`Q30=>F%KReq63I? z+9*6=qf`0%b4AZVz&d&8=&0dWpUc+&h|sr!-Nf)2UUpO3HLr;8ImCKth6qOk$1zOSu~fOdC1 zfn*GYd#Ag&&Ds|p1DH7iK>c`52g)1 zx(kWVZHVF6SXy3KU0ofGqz`{Z6$RT7QZeEMD+Rzn92tAgqz;rL>K_Giz@E^(i`KR{ z8b)?bdkG3`zMGSexqTJCp8f`z;c4N=Om$XRwqh+!odE{}X8m(IOm(xHKt!<#DAj?C zKpP8y0vJHuKuHG?cjPmdfJ!k+*i9fBbK495BijtWI$GD*EIGOLott#bipN{tHvG>Z zaL~Kb(z(_!LSXXOzKTc7baD9P_BDV1P6a}|xU}z|Vs;Sbdx&)jad8j;>EP3?OuvP7 zTVR6C1S*{KOU_^kSVYRgdv8Wx;0|#*dudrU(epc*UHkEoKy}Im5P7j)$eb7;;@XjQ zg><;3rTlUI${P`>ZH4s(%0BUs;EqkEj(54rfGfSD&Sn53oEj_<=0H>Ht4rT- z@BN`qlRPmBjp?+^L%u!T0JfV6k0l@V@<%yMss-i{c45Fx=Mz&k_yJOS6R3)SbBO_O z0FoL^nUf{6ZRx@51%`)p`6X1@{|`&o0Z(Q7{tp_WP+4V_7TJ+`(2|l7O2`P=juB;hL?}d&y+TMt zM)qDO^At%O9HY)5$vF1>U(fsdzn}B*zHc8n&hy;&bzj$aJ@HSXr8GENE~tpLe%4_q znE8`tFe@T`k2b7~3u8#Hdpn6$alCa><*Axk&j*J{}1| z>^wMwA&d!*Pk6x{{W&_?_CWknmQJICbl(A~E*-vu`{0a{KmPhq9Beh{U0N=d5pi&g zx>Xw+uV=ga%BTF9^O=Ljd$_`d?z7<`=zd}0R(LG%!-E@LpcCQg{K9jvZZuBJ6t>aI zt*l;B4|VH4pXaaFbH2!8`#EKgz9cOae(6357pA+<50Hf?a9~U*P3x_9`OwrfM)US6#m)vXdyZgF|v|RCl*Rc%JY{e5eD-`rg zLL>meTwdzaVm56f-iOOjp#>06O}1_SA5x-Wd;M*-eswd4w)uqhpV@nZCZe0-u6%Xj zR^<1E{(AF*Q#0!)H9?~~pJOoB0TK*fAu;O;%buUZ!!6dxiuI|3S9v^Di#n{-_1wBc zC0qIT3hg~3!ir(vBWkvHBpliE?gn`Q^J%{P^i4O{vqE#>irkU-ji0A)7CUpP%S(uy zhP^XPkAdAH&IyI~fjDQwsxP3p89KQqA}pW{4aZx+y$8q;MrXJXfB*h{Aa#8DYzNF! z$6-Fl@=gv~r}abAGHG@f0np(>!j#?0zki}bvt@qW+z9@g9((AjY{cjJ?DG49@NoJ- zXmFv_q~%rqgdWM`UnRwPy7vtH*s<5Dyp5nOcQfy9Yuh)v5aIp+##uO&v8lc*25qpa5ZzUN%g=1K